Artigo do tipo Tutorial
Recursos especiais neste artigo:
Contém nota Quickupdate, Conteúdo sobre boas práticas.
Ameaças à segurança em aplicações ASP.NET
Devido à natureza da web, toda aplicação construída neste ambiente fica exposta a uma série de ameaças contra sua segurança e integridade. Algumas destas venerabilidades podem ser facilmente anuladas através do uso de boas práticas e de recursos que o próprio ASP.NET nos fornece.

Neste artigo veremos quais são as formas mais básicas de realização de ataques em uma aplicação ASP.NET com objetivos de obter acesso a dados sigilosos, desfigurar a aplicação mudando o seu layout ou fazendo com que algum código potencialmente perigoso seja executado. Estes ataques só são possíveis devido a falhas ocorridas durante a criação do projeto e este artigo mostra quais as medidas que devem ser adotadas pelo desenvolvedor para anular estes problemas ou, pelo menos, reduzir a sua possibilidade de ocorrência.

Em que situação o tema é útil
Sempre que se for desenvolver qualquer aplicação, em especial aplicações web, é importante que a segurança esteja na lista de prioridades do projeto. As medidas que podem ser tomadas são inúmeras e neste artigo veremos algumas das principais, que irão auxiliar o leitor a criar um software mais seguro para o usuário e que certamente irá causar menos problemas para o desenvolvedor. Com isso o leitor poderá construir aplicações mais seguras e menos vulneráveis a alguns dos ataques mais populares a aplicações web.

Com o aumento dos usuários de Internet, promovido pelo barateamento e também pela estabilização econômica no país, foi uma questão de tempo para a popularização do acesso. Pode se dizer que foi criado um ciclo virtuoso: acesso mais barato representou mais usuários conectados, que representou mais renda para as operadoras, que precisaram melhorar o acesso para atender mais usuários e assim por diante. É verdade que comparado com países mais desenvolvidos, o Brasil ainda está muito distante dos índices considerados adequados, porém, estamos bem se formos comparar com outros países com o mesmo nível de desenvolvimento econômico.

Outro componente que possibilitou a popularização da Internet e agora não só no nosso país, mas também em escala mundial foi a evolução das ferramentas de criação de conteúdo. Embora o termo seja um pouco estranho, no início a Web era usada apenas para exibir páginas e conteúdo estático representado por textos, hiperlinks e de vez em quando algumas imagens. Hoje há muitas ferramentas para se criar tanto conteúdo estático como aplicações complexas que possuam recursos que as deixam comparáveis às aplicações Desktop, geralmente mais ricas em interação com o usuário.

O ASP.NET é um dos responsáveis pela facilitação do desenvolvimento das aplicações. Alguns dos seus críticos dizem que representa uma aberração principalmente por causa dos Webforms (Nota do DevMan 1) alegando que se perde o controle do comportamento da aplicação, deixando isto para o servidor e o Framework. Tais críticas se baseiam em uma visão limitada onde se considera apenas uma pequena parte dos seus recursos. O ASP.NET é hoje uma das principais plataformas de desenvolvimento para Web e quando conhecido profundamente, oferece ao desenvolvedor um nível de controle tão grande como o que ele teria desenvolvendo com outros recursos. Considerando que não é necessário usar sempre Webforms. Caso o desenvolvedor precise, pode colocar a “mão na massa” diretamente editando código HTML e JavaScript da aplicação.

Além disso, a adoção da Internet como meio de transação comercial e de trânsito de todos os tipos de dados empresariais e pessoais é um caminho sem volta. Por este motivo, é responsabilidade dos desenvolvedores web a garantia de que suas aplicações ofereçam um ambiente confiável e seguro para os seus usuários. Como segurança, entende-se que sejam previstos e anulados pelo menos os ataques que intencionem obter os dados do usuário ou que permitam a execução de código não autorizado na aplicação. Felizmente, grande parte destes possíveis ataques baseia-se em brechas que são muito simples de serem corrigidas, principalmente usando-se o ASP.NET.

Grande parte dos ataques tem por objetivo obter acesso a dados não autorizados, fazer com que o site execute código não autorizado descaracterizando a aplicação ou criando formas de se obter dados do usuário para serem usados em fraudes. Os dois principais tipos de ataques são SQL Injection – quando o usuário mal intencionado executa consultas SQL no banco de dados da aplicação sem que a aplicação tenha controle – e Script Injection – quando o usuário mal intencionado tenta inserir scripts maliciosos na aplicação. Estes são os mais simples, mas, que servem de ponto de partida para ataques mais sofisticados.

Para garantir a segurança, o desenvolvedor precisa tomar medidas que estejam direcionadas a bloquear tais ataques e construir a sua aplicação de forma que deixe o menor número de possibilidades para que um usuário mal intencionado consiga violar sua integridade. Tanto o bloqueio dos ataques como melhorias na forma de construir a aplicação Web, serão demonstrados neste artigo e no exemplo que o acompanha.

Nota do DevMan 1

Web Forms é uma das formas de se desenvolver aplicações com ASP.NET. Consiste basicamente em usar controles pré-definidos pelo Framework. Um dos primeiros atrativos é que possibilita ao desenvolvedor trabalhar como na criação de aplicações Windows Forms, ou seja, arrastando controles para a página e escrevendo código nos manipuladores de evento. Tamanha facilidade, porém, trouxe muitos abusos e um acomodamento dos programadores que deixavam de lado o refinamento da formatação da interface e o seu comportamento.

Principais ameaças e suas causas

Tanta popularidade e facilidade de acesso não vieram sem problemas. Um número maior de usuários também trouxe um número maior de ameaças. Em nenhuma área de atuação humana é possível ter total controle sobre o que as pessoas irão fazer e a Internet é conhecida como “terra de ninguém” uma vez que nela o controle é quase impossível. Com tantas empresas e pessoas realizando suas operações na Internet que vem sendo cada vez mais usada como meio de comunicação, não demorou a surgirem usuários interessados em apropriar-se destes dados e tentar obter vantagens com os mesmos. Os ataques são provocados por uma grande série de fatores, mas principalmente por falhas no desenvolvimento da aplicação. Então, talvez por pressa ou falta de conhecimento, certos aspectos da aplicação são ignorados, deixados de lado ou não recebem a devida atenção. Com isto, criam-se os meios para que os campos e comandos da aplicação Web sejam usados para finalidades diferentes da qual foram originalmente projetados. Os principais problemas com as aplicações Web que proporcionam os ataques mais comuns geralmente são:

· Falta de tratamento nas entradas do usuário. Ao definir campos de texto para os Web Forms, se não for realizada uma validação no valor digitado antes de fazer o envio do mesmo para o servidor, ou, se não houver uma limitação do número de caracteres que podem ser enviados ao mesmo, vários problemas podem ser causados indo desde erros ao tentar gravar a informação no banco de dados com um número maior de caracteres do que o suportado pelo campo, até o uso do campo para inserir scripts SQL ou Java Script. Este assunto será abordado mais a frente;

· Usuário configurado na aplicação para conexão com o banco de dados com privilégios altos. Os bancos de dados possuem os usuários administradores, normalmente, no SQL Server é conhecido por SysAdmin com o login “sa”. Mas este só deve ser usado para administração do servidor e dos bancos. Entretanto, é um erro bastante comum programadores esquecerem de criar um usuário com privilégios de segurança mínimos, podendo apenas executar tarefas relacionadas com as regras de negócio da aplicação. Este problema, em conjunto com falha no tratamento das entradas do usuário e mais o uso de concatenação de strings para a formação de consultas SQL dinâmicas, tornam possível o ataque ao banco de dados;

· Uso de concatenação de strings para formação de consultas SQL dinâmicas. Existem inúmeros artigos que tratam das desvantagens de se usar concatenação de strings. No caso da segurança ao acesso do banco de dados, este é o ponto mais crítico e será demonstrado no projeto de exemplo;

· Tratamento inadequado das URL´s usadas para navegação e carregamento das páginas dinâmicas. Em alguns casos é muito comum usar parâmetros na URL de um formulário passando parâmetros para a carga dos dados. Por exemplo, um link como “http://meudominio/minha_aplicacao/meu_formulario.aspx?id=ABCD” contém um parâmetro nomeado como id, se este parâmetro não for adequadamente tratado e a aplicação não tiver uma configuração robusta para autenticação de usuários, será possível obter acesso a dados de outros registros bastando apenas passar o id na URL;

· Falta de controle de usuários autenticados. É necessário configurar quem pode ver o que na aplicação, caso contrário, com um pouco de persistência, será possível obter o padrão de comportamento para carga dos formulários e combinando técnicas diversas de ataques, saber como carregar as páginas, mesmo sem permissão.

Entre outros problemas com o desenvolvimento, estes são os primeiros e os mais fáceis a serem combatidos e com um pouco mais de atenção ao se escrever o código é muito fácil evitar que se tornem brechas na segurança. São também estes que permitem duas modalidades mais comuns de ataques à segurança das aplicações Web entre as quais duas são o destaque deste artigo: SQL Injection e Script Injection.

...
Quer ler esse conteúdo completo? Tenha acesso completo