terça-feira, 16 de outubro de 2012

Fortalecimento do seu aplicativo da Web contra injeções SQL


AVISO:

A informação fornecida é para fins educacionalmente apenas e não para ser usado para uso malicioso

Antes de escavar o que realmente SQL Injection é, deixe-me explicar o que é o SQL que eu.

O que é SQL?

Structured Query Language (SQL) é uma linguagem de programação especializada para enviar consultas a bancos de dados. Aplicações de banco de dados mais pequenos e força-industrial pode ser acessado utilizando instruções SQL. SQL ANSI é uma e um padrão ISO. No entanto, os produtos de banco de dados SQL muitos de apoio fazê-lo com extensões proprietárias para a linguagem padrão. Aplicativos da Web podem usar fornecido pelo usuário de entrada para criar SQL customizadas para solicitações de páginas dinâmicas na web.

O que é SQL Injection?

Injeção de SQL é uma técnica que explora uma vulnerabilidade de segurança que ocorrem na camada de banco de dados de uma aplicação web. A vulnerabilidade está presente quando a entrada do usuário é ou incorretamente filtrado para caracteres strings literais de escape embutidas em instruções SQL ou de entrada do usuário não é fortemente digitados e, assim, inesperadamente executado. É, de facto, uma instância de uma classe mais geral de vulnerabilidades que podem ocorrer sempre que uma linguagem de programação ou scripting é incorporado dentro de outro.

"SQL Injection" é um subconjunto da vulnerabilidade não verificadas / unsanitized entrada do usuário ("buffer overflow" são um subconjunto diferente), ea idéia é convencer o aplicativo para executar código SQL que não foi planejada. Se o pedido for criar strings SQL ingenuamente na mosca e depois executá-los, é simples para criar algumas surpresas.

Muitos servidores da organização da web foi comprometida apenas por causa de injeções SQL, incluindo grandes nomes que eu não gostaria de mencionar aqui, você pode pesquisar facilmente na Internet.

O que é Cego SQL Injection?

Este tipo particular de ataque é chamado um ataque de injeção SQL cego, porque o atacante não pode tirar vantagem de mensagens de erro detalhadas do servidor ou de outras fontes de informações sobre o aplicativo. Obter a sintaxe SQL direito é geralmente a parte mais complicada do processo de injeção de SQL cego e pode exigir um monte de tentativa e erro. Mas, pela adição de mais condições para a instrução SQL e avaliar a produção do aplicativo da Web, o atacante vai eventualmente determinar se o aplicativo é vulnerável a injeção de SQL.

Cego injeção de SQL um caso especial que brinca com os desenvolvedores web ou senso site proprietários de segurança. Enquanto eles podem pensar que tudo no servidor está fortemente guardado um ataque de injeção SQL Cego silenciosamente estar jogando verdade ou conseqüências com o servidor web. Este tipo de ataque que consome muito tempo é aquele que fornece a falha de segurança potencialmente mais prejudiciais. Isto acontece porque um intruso fica não só o acesso, mas está equipado com uma enorme quantidade de conhecimento sobre a base de dados e pode, potencialmente, ter acesso a um sistema de arquivo de servidores. Este tipo de ataque é aquele que é automatizado e requer boa quantidade de configuração para ter sucesso. Mas, uma vez que é feito que não requer um grande esforço para repetir.

O que é mensagem de erro SQL Injection?

Aplicações web costumam usar consultas SQL com o cliente fornecido entrada na cláusula WHERE para recuperar dados de um banco de dados. Quando uma aplicação Web executa essas consultas sem validação ou digitalizar os dados fornecidos pelo usuário para garantir que não é prejudicial, um ataque de injeção de SQL pode ocorrer. Enviando dados inesperados, um atacante pode gerar e enviar consultas SQL para um banco de dados de aplicações web. Um teste para vulnerabilidades de injeção SQL ocorre enviando os dados do aplicativo que gera uma consulta SQL inválida. Se o servidor retorna uma mensagem de erro, que a informação pode ser usada para tentar obter acesso não controlado ao banco de dados. Esta é a base de um dos mais populares ataques de injeção de SQL.

Escondendo as mensagens de erro não parar o ataque de injeção de SQL. O que normalmente acontece é que o atacante vai usar o conhecimento adquirido com o fracasso do ataque a mudar de tática. O que eles viram é cego a injeção de SQL.

Por Injeção de SQL?

Quando uma aplicação web não corretamente higienizar fornecido pelo usuário de entrada, é possível que um invasor para alterar a construção de backend instruções SQL. Quando um atacante é capaz de modificar uma instrução SQL, o processo será executado com as mesmas permissões que o componente que executou o comando. (Por exemplo, servidor de banco de dados, servidor de aplicações Web, servidor Web, etc.) O impacto deste ataque pode permitir que atacantes para obter o controle total do banco de dados ou até mesmo executar comandos no sistema.

Quando uma máquina tem apenas 80 porta aberta, o scanner de vulnerabilidade mais confiável não pode retornar nada útil, e você sabe que o administrador sempre corrigir o seu servidor, este é o ponto onde hacker mal intencionado poderia virar à pirataria na web. A injeção SQL é um dos tipo de pirataria na web que exigem nada além de porta 80 e ele só poderia funcionar mesmo se o administrador é patch-feliz. Ele ataca na aplicação web (como ASP, JSP, PHP, CGI, etc) em si, em vez de no servidor web ou serviços em execução no sistema operacional.

Tipos de injeções SQL:

Existem quatro categorias principais de ataques de injeção SQL contra camada de bancos de dados em Web Application

1. SQL Manipulação: manipulação é processo de modificar as instruções SQL usando diferentes operações, como UNIÃO Outra forma para a implementação SQL Injection usando SQL método de manipulação é alterando a cláusula de onde a instrução SQL para obter resultados diferentes..

2. Injeção de Código: A injeção de código é o processo de inserção de novas instruções SQL ou comandos de banco de dados para a instrução SQL vulneráveis. Um dos ataques de injeção de código é acrescentar um servidor SQL EXECUTE comando para a instrução SQL vulneráveis. Este tipo de ataque só é possível quando várias instruções SQL por solicitação do banco de dados são suportados.

3. Injeção função chamada: injeção chamada de função é processo de inserção de função de banco de dados várias chamadas em uma instrução SQL vulneráveis. Essas chamadas de função poderia estar fazendo chamadas do sistema operacional ou manipular os dados no banco de dados.

4. Estouro de buffer: buffer overflow é causado pelo uso de injeção de chamada de função. Para a maioria das bases de dados comerciais e de origem aberta, manchas estão disponíveis. Este tipo de ataque é possível quando o servidor está sem patch

Prevenção SQL técnicas de injeção:

Mitigação de vulnerabilidade de injeção SQL seria tomar um dos dois caminhos ou seja, quer usando procedimentos armazenados junto com as declarações podem ser chamadas ou usar declarações preparadas com comandos SQL dinâmicas. Independentemente da forma como é adotada a validação de dados é obrigação.

um. Validação de entrada

Sanitização de dados é fundamental. Melhor maneira de higienizar dados é usar padrão negar, expressão regular. Escreva filtros específicos. Tanto quanto possível, use números números e letras. Se existe a necessidade de incluir sinais de pontuação, de qualquer tipo, convertê-los em HTML que os codifica. SO que "tornar-se" ou ""> torna-se ">" Por exemplo, se o usuário está enviando o endereço de e-mail permitem apenas @, -,. E _ além de números e letras para ser usados ​​e só depois de terem sido convertidos para seus substitutos HTML

b. Uso de declaração preparada

As declarações preparadas devem ser utilizadas sempre que os procedimentos armazenados não podem ser usados ​​por qualquer razão e os comandos de SQL dinâmicas têm de ser utilizados.

Use uma declaração preparada para enviar instruções SQL pré-compilados com um ou mais parâmetros. Titulares de parâmetros coloque em uma declaração preparada são representados pelo? E são chamados de variáveis ​​de ligação. Declaração preparada geralmente são imunes a ataques de injeção de SQL como banco de dados irá usar o valor da variável de vinculação exclusiva e não interpretar o conteúdo da variável de forma alguma. PL / SQL e JDBC permitem declarações preparadas. Declarações preparadas devem ser amplamente utilizado para a segurança e questões de desempenho.

c. Use privilégios mínimos

Certifique-se de que o usuário do aplicativo tem direitos específicos mínimo no servidor de banco de dados. Se o usuário do aplicativo no banco de dados usa ROOT / SA / dbadmin / dbo no banco de dados, em seguida, que certamente precisa ser reconsiderado se usuário do aplicativo realmente precisa de montante tão elevado de privilégios ou podem ser reduzidos. Não dar a permissão do usuário do aplicativo para acessar procedimentos armazenados do sistema permitir o acesso a esses que estão usuário criado.

d. Procedimentos armazenados

Para garantir uma aplicação contra injeção de SQL, os desenvolvedores não devem permitir que o cliente os dados fornecidos para modificar a sintaxe das instruções SQL. Na verdade, a melhor proteção é isolar a aplicação web a partir do SQL completamente. Todas as instruções SQL necessários para o aplicativo deve estar em procedimentos armazenados e mantidas no servidor de banco de dados. A aplicação deve executar os procedimentos armazenados usando uma interface segura, tais como extratos mobilizável do JDBC ou commandobject do ADO.

E muitos mais .......

Nenhum comentário:

Postar um comentário