sql injection, entenda o que é, aprenda a evitá-lore.granbery.edu.br/artigos/mzk2.pdf · 3 a...

12
1 Revista Eletrônica da Faculdade Metodista Granbery http://re.granbery.edu.br ISSN 1981 0377 Curso de Sistemas de Informação N. 9, JUL/DEZ 2010 SQL Injection, entenda o que é, aprenda a evitá-lo Heitor Magaldi Linhares 1 , Patrícia Lima Quintão 1 , André Luiz Bernardo 1 , Rodrigo Henrique Cesar de Almeida 1 , Rogério dos Santos Lima 1 1 Pós Graduação em Segurança da Informação Faculdade Metodista Granbery – FMG Rua Batista de Oliveira, 1145 – Centro CEP: 36.010-532 - Juiz de Fora – MG – Brazil [email protected], [email protected],rogerio- [email protected],[email protected], [email protected] RESUMO Na tentativa de eliminar os ataques através de SQL Injection ferramentas vêm auxiliando desenvolvedores na identificação de vulnerabilidades. Nesse contexto, esse artigo tem como objetivo apresentar o que é o SQL Injection, forma de ataque e precauções adotadas para evitar este problema. PALAVRAS-CHAVE: SQL Injection, ferramentas, vulnerabilidade. ABSTRACT In an attempt to eliminate attacks via SQL Injection tools have been aiding developers in identifying vulnerabilities. In this context, this article aims to present what SQL Injection is, how it attacks and precautions taken to avoid this problem. KEY-WORDS: SQL Injection, tools, vulnerabilities.

Upload: vuongkhue

Post on 07-May-2018

225 views

Category:

Documents


5 download

TRANSCRIPT

1  

Revista Eletrônica da Faculdade Metodista Granbery 

http://re.granbery.edu.br ‐ ISSN 1981 0377 

Curso de Sistemas de Informação ‐ N. 9, JUL/DEZ 2010 

SQL Injection, entenda o que é, aprenda a evitá-lo

Heitor Magaldi Linhares1, Patrícia Lima Quintão1, André Luiz Bernardo1, Rodrigo Henrique Cesar de Almeida1, Rogério dos Santos Lima1

1Pós Graduação em Segurança da Informação Faculdade Metodista Granbery – FMG Rua Batista de Oliveira, 1145 – Centro

CEP: 36.010-532 - Juiz de Fora – MG – Brazil

[email protected], [email protected],[email protected],[email protected],

[email protected]

RESUMO

Na tentativa de eliminar os ataques através de SQL Injection ferramentas vêm auxiliando desenvolvedores na identificação de vulnerabilidades. Nesse contexto, esse artigo tem como objetivo apresentar o que é o SQL Injection, forma de ataque e precauções adotadas para evitar este problema.

PALAVRAS-CHAVE: SQL Injection, ferramentas, vulnerabilidade.

ABSTRACT

In an attempt to eliminate attacks via SQL Injection tools have been aiding developers in identifying vulnerabilities. In this context, this article aims to present what SQL Injection is, how it attacks and precautions taken to avoid this problem.

KEY-WORDS: SQL Injection, tools, vulnerabilities.

2  

1. INTRODUÇÃO

Em um mundo globalizado no qual vivemos hoje, com tecnologias cada vez

mais acessíveis, tornando a informação à moeda de maior valor na economia, a

mobilidade e flexibilidade de acesso aos sistemas se tornaram fator indispensável nas

aplicações, o que até então era executado localmente em desktops passa a ser migrado

pouco a pouco para web.

Atualmente é comum observar pequenas empresas possuindo clientes em

vários estados, realizando vendas por todo o país, utilizando de sistemas que conseguem

executar tanto em um handheld como em um desktop, com os mesmos recursos só

sendo alterada a interface de saída.

A Internet, de fato, trouxe muitos pontos positivos e novas preocupações aos

desenvolvedores. Com a migração das aplicações para web, o que até então funcionava

na rede local passa a funcionar em servidores fora dos domínios físicos das empresas

como habitual, trafegando informações sigilosas por uma rede nada segura, a Internet.

Aplicações passam agora a serem acessadas remotamente em servidores,

que passaram a se tornar alvos de atacantes em busca de informações sigilosas ou de

satisfação pessoal, denominados de hackers.

Atualmente a maioria absoluta dos sites é dinâmica, existindo uma troca

constante de informações com o banco de dados, comunicação feita através da

linguagem SQL - Structured Query Language, utilizada por 90% das aplicações, por se

tratar de forma simples de acesso aos dados (MACORATTI, 2010).

A troca de informações entre a aplicação e o banco de dados, esteja ele local

ou não, se possuir falhas, poderá ser explorada por um software malicioso, inserindo

códigos, permitindo acesso a informações por pessoas não autorizadas, técnica

conhecida como SQL Injection.

Segundo Fisher (2010), o SQL Injection tornou-se talvez a técnica mais

utilizada para comprometer os aplicativos da Web, graças à sua simplicidade relativa e

elevada taxa de sucesso.

Na “Era da Informação”, em que o bem mais valioso é intangível, a

pergunta é: como os desenvolvedores estão lidando com esta imensa responsabilidade?

O desafio é desenvolver sites cada vez mais inovadores, aliados a mecanismos que

venham prover segurança aos usuários.

3  

A proposta deste artigo é apresentar o que é SQL Injection, como as

aplicações são exploradas e maneiras para prevenção; permitindo ao desenvolvedor

confeccionar um sistema mais robusto.

Para isso, encontra-se dividido em 5 seções, além dessa introdução. A Seção

2 destaca o conceito de SQL Injection. A Seção 3 apresenta ferramentas de identificação

de vulnerabilidades nas plataformas Windows e Linux. A Seção 4 traz soluções para

uma comunicação segura entre “Aplicação – Base de Dados”. Por fim, têm-se as

considerações finais do trabalho, bem como as referências bibliográficas utilizadas.

2. O QUE É UM SQL INJECTION?  

SQL Injection é um conhecido método utilizado em ataques a banco de

dados através de formulários que contenham campos de entradas de dados do tipo texto

(NETPOINT, 2008).

Este método utiliza da vulnerabilidade do código implementado na

aplicação para alterar a string de conexão ao banco de dados, comprometendo toda troca

de informações entre “Aplicação – Base de Dados”.

O impacto causado pela alteração poderá ser apenas de um acesso indevido

a uma área restrita, sendo imperceptível aos olhos de um desenvolvedor inexperiente,

como também poderá permitir a exclusão de uma tabela, comprometendo toda a

aplicação, dentre outros.

Aplicações diariamente estão sendo disponibilizadas na Web, sendo, a

maioria dessas aplicações, dinâmicas, em que o acesso aos dados se torna necessário; a

falta de informação da parte do desenvolvedor da aplicação a torna um alvo fácil de

ataques. Exemplo de uma string simples de conexão via SQL entre a aplicação e base de

dados.

SELECT id, senha FROM usuarios WHERE id = ‘Bruno’ and senha = ‘1234’;

Ilustração 1. String de conexão via SQL.

A string definida na Ilustração 1 retorna a confirmação se o usuário Bruno

possui a senha ‘1234’. Caso esta informação seja verdadeira, irá localizar na tabela as

informações e retornar a coleção de dados.

4  

Porém a distração do desenvolvedor no tratamento da entrada de texto

permitiu a digitação de caracteres especiais, permitindo assim que o usuário entrasse

com id de ‘Bru’no’. Com esta entrada, a aplicação não irá conseguir interpretar o

comando requisitado, retornando com um erro.

Assim como a entrada foi inválida, esta poderia ser válida, e a execução

causar um transtorno enorme como exemplo na Ilustração 2:

SELECT id, senha FROM usuarios WHERE id = ‘’ or 2 = 2 and senha = ‘1234’;

Ilustração 2. String de conexão alterada por atacante.

A aplicação permitiu que a entrada de texto pudesse conter o caractere

‘Aspas’, vulnerabilidade explorada pelo atacante para ter acesso às informações

contidas na base, permitindo assim ações como inserir, editar, apagar etc.

O SQL Injection é uma das práticas mais utilizadas na Internet. Apesar de

sua defesa ser bem simples, poucos desenvolvedores se atentam a isto. Segundo

Fisher(2010), em junho deste ano iniciou-se o ataque mais recente, tendo como alvo

servidores web que utilizam o software Microsoft IIS. A estimativa de páginas

infectadas ultrapassa a marca de 100.000. Este ataque direcionava os visitantes para

uma segunda página, onde era instalado um malware. De acordo com McMillan(2010),

o ataque não explorar qualquer vulnerabilidade no IIS, mas é um ataque contra

aplicativos Web de terceiros.

3. IDENTIFICAÇÕES DE VULNERABILIDADES NAS PLATAFORMAS WINDOWS E LINUX  

A identificação de uma vulnerabilidade poderá ser feita por um

desenvolvedor treinado, quando ele irá percorrer todas as fontes nos quais ocorram troca

de informações entre Aplicação – Base de Dados com intervenção do usuário.

Em um mercado no qual a produtividade é primordial e os requisitos se

alteram constantemente, a citação acima não funcionaria devido ao longo período de

análise para a identificação das vulnerabilidades, sendo assim, existe no mercado um

número expressivo de ferramentas que nos auxiliam neste processo de identificação,

ferramentas que atuam em servidores Linux, Windows e em ambos.

5  

Foram selecionadas quatro ferramentas para identificação de

vulnerabilidades de SQL Injections em aplicações web que são: Acunetix, Netsparker,

SQL Inject-Me, Websecurify.

A escolha das aplicações ocorreu devido ao fato de possuírem versões

gratuitas e estarem sendo referenciadas em vários sites relacionados à segurança da

informação. Os aspectos analisados serão: profundidade da varredura, clareza nas

informações apresentadas, tempo de varredura, interface homem máquina.

3.1. Acunetix

O Acunetix é uma ferramenta paga, porém existem versões livres que

possuem restrição em determinadas ações. Ferramenta disponível para download em

www.acunetix.com.

Realiza uma varredura muito completa em servidores Windows, pois

verifica vulnerabilidades na aplicação hospedada e no servidor, como portas abertas que

não estão sendo utilizadas, versão do sistema, etc. Porém, por seu processo de varredura

ser muito extenso, demanda um tempo de 23 minutos, este tempo irá variar de acordo

com o tamanho da aplicação hospedada.

Na parte gerencial é muito eficiente, armazenando as varreduras em uma

base de dados, disponível sempre que requisitada. Através de seu gerador de relatórios

denominado de Acunetix Report, é possível ter acesso a todas as análises realizadas,

confeccionando relatórios bem detalhados das vulnerabilidades encontradas.

O Acunetix possui uma interface muito amigável, permitindo boa interação

com usuário, tornando a sua utilização muito intuitiva.

6  

Ilustração 3. Tela principal do Acunetix

3.2. Netsparker

O Netsparker é uma ferramenta paga, porém existem versões livres que não

possuem a parte de relatórios. Ferramenta disponível para download em

www.mavitunasecurity.com/communityedition/.

Ferramenta muito ágil e precisa, ideal para desenvolvedores que atuam em

servidores Linux, Possui uma varredura que abrange servidor e aplicação, informando

sobre os pontos vulneráveis encontrados

A interação no momento da varredura permite ao usuário navegar sobre os

pontos analisados, apresentando as vulnerabilidades encontradas, impactos e soluções

passiveis de serem adotadas para correção do problema.

O que se destacou no Netsparker foi à riqueza de informações em um curto

período de tempo gasto na varredura, cerca de 6 minutos. O ponto negativo desta

ferramenta foi que a versão testada, a community, é bem limitada e não possui recursos

de relatórios.

7  

Ilustração 4. Tela Principal do Netsparker

3.3. SQL Inject-Me

Apesar de ser apenas um plugin do Browser Mozila Firefox, o SQL Inject-

Me se apresenta bem útil em verificações em páginas quem contenham campos de

entrada de texto. Este plugin é livre e disponível para download em

addons.mozilla.org/en-US/firefox/addon/7597

O SQL Inject-Me apresenta-se bem ágil na identificação dos componentes

existentes na tela, tanto em plataformas Windows como em Linux.

Iniciando o ataque, que dura poucos minutos, variando de acordo com o

tamanho do arquivo testado, a ferramenta apresenta as vulnerabilidades existentes em

cada componente visível na tela, botões, campos de entradas de texto etc.

A agilidade é algo que se destaca nesta ferramenta, porém é limitada se

comparada às ferramentas anteriormente testadas, pois somente identifica

vulnerabilidades relacionadas à SQL Injection.

8  

Esta ferramenta é indicada a desenvolvedores de aplicações mais simples,

que contenham poucas entradas de informações, pois esta ferramenta depende do acesso

a cada tela a ser testada, se tornando improdutiva, dependendo do tamanho da aplicação.

Ilustração 5 – Tela SQL Inject Me

3.4. Websecurify

O Websecurify é uma ferramenta livre, disponível para download em

www.websecurify.com.

É uma aplicação que consegue atuar em plataforma Windows e Linux, mas

possuindo um desempenho três vezes melhor na plataforma Windows.

Possui uma interface sem muitos recursos à interação do usuário. Realiza

uma verificação superficial, realizando testes de requisições, apontando ações ativadas,

versão atual do servidor, identificando assim vulnerabilidades existentes.

O Websecurify dentre as ferramentas testadas, é a que oferece menos

recursos, uma interface de varredura péssima, onde o usuário nunca sabe quando irá

finalizar, devido ao limite ser incrementado no processo de execução, possuindo muito

pontos negativos.

9  

Ilustração 6 – Tela Websecurify.

3.5. Comparativo entre as Ferramentas

A seguir tem-se um quadro comparativo entre as ferramentas analisadas.

Ferramenta Varredura Clareza Tempo Interface

Acunetix 3 3 1 3

Netsparker 3 3 3 3

SQL Inject-Me 2 2 3 1

Websecurify 1 3 1 1

Legenda

1 – Ruim 2 – Médio 3 - Bom

4. MELHORES PRÁTICAS PARA SE EVITAR ATAQUES DE SQL INJECTION

Os ataques ocorrem devido a descuidos ou falta de conhecimento dos

desenvolvedores. Assim, tendo-se em vista o alto índice de sucesso, estes ataques são

10  

bem comuns e podem ser evitados com práticas bem simples, conforme os tópicos

listados a seguir:

4.1. Validações de entradas

É importante validar todas as entradas de texto que serão utilizadas no SQL,

não permitindo a escrita de caracteres especiais e palavras chaves do SQL, como

INSERT, DELETE, UPDATE, HAVING, JOIN etc, conforme visto nas Ilustrações 7 e

8.

Ilustração 7 – Implementação em PHP

Ilustração 8 – Implementação em ASP

4.2 – Tamanho das entradas de texto

11  

Defina um tamanho máximo de caracteres para senhas e usuários (10 é o

tamanho indicado);

4.3 – Tratamentos de erros

Efetue um tratamento adequado aos erros, para que as mensagens não

exponham ao atacante informações sobre a estrutura de dados.

4.4 – Utilizações de acesso limitado

Limite o acesso de todos os usuários, permitindo assim somente ações

básicas, não permitindo a utilização do acesso mestre de dentro da aplicação.

4.5 – Utilizações de log

Crie um LOG com os erros ocorridos e as ações mais importantes

executadas, para ser auditado periodicamente.

5. CONSIDERAÇÕES FINAIS

Este artigo teve como principal objetivo abordar de forma clara o que é o

SQL Injection, pois, conhecendo a ameaça, o combate se torna mais fácil.

A apresentação das aplicações veio demonstrar como a combinação destas

ferramentas é positiva no combate ao SQL Injection. Não qual é melhor ou pior, e sim

os pontos positivos e negativos, permitindo proporcionar ao desenvolvedor definir qual

ferramenta utilizar, dependendo do ambiente a ser testado.

O perfil do desenvolvedor nos últimos anos tem sido modificado, a

preocupação com a segurança deixa de estar em segundo plano e passa a se tornar

requisito de projeto. Mesmo com todas estas mudanças, existem desenvolvedores que

ainda vivem na zona de falsa sensação de segurança, pensando que suas aplicações

nunca serão alvo de atacantes, por isso o alto número de sites vulneráveis.

12  

O combate ao SQL Injection é simples e não demanda tempo extra de

desenvolvimento. A Falta de conhecimento do desenvolvedor se torna o ponto mais

crítico no combate a esta forma de ataque.

O desenvolvedor de sistemas deve se manter sempre atualizado sobre novas

formas de ataque, pois a cada dia surgem novidades neste sentido, na tentativa de burlar

os controles existentes. A dica deste artigo é que “Segurança nunca é demais!”.

6. REFERÊNCIAS BIBLIOGRÁFICAS

DANCHEV, Dancho. SQL injection attacks and malware led to most data breaches, 9 fev 2010. Disponível em : http://www.m86security.com/labs/i/Another-round-of-Asprox-SQL-injection-attacks,trace.1366~.asp>. Acesso em: 30 jun 2010. FILHO, Clóvis Luiz de Amorim; CAVALCANTI,Paulo Diego de Oliveira Bezerra; FILHO, Marcello Benigno de Barros Borges. SQL Injection em ambientes Web. Disponível em: http://www.devmedia.com.br/articles/post-9733-SQL-Injection-em-ambientes-Web.html>. Acesso em: 8 jun 2010. FISHER, Dennis. Por dentro de um ataque de injeção de SQL, 25 fev 2010. Disponível em : < http://threatpost.com/pt_br/blogs/por-dentro-de-um-ataque-de-injecao-sql-022510 >. Acesso em: 9 jun 2010. ______. Mass SQL Injection Attack Hits Sites Running IIS, 10 jun 2010. Disponível em : < http://threatpost.com/en_us/blogs/mass-sql-injection-attack-hits-sites-running-iis-061010>. Acesso em: 30 jun 2010. GIROTO, Alex. Segurança em PHP evitando o mysql_injection , 15 abr 2010. Disponível em:< http://www.nfx.com.br/forum/index.php?/topic/4183-seguranca-em-php/>. Acesso em: 9 jun 2010. MACORATTI,José Carlos. Previna-se contra a injeção SQL. Disponível em : <http://www.macoratti.net/sql_inj.htm>. Acesso em: 9 jun 2010. MONTEIRO, Mario. Injeção de SQL. Disponível em: <http://www.htmlstaff.org/ver.php?id=20553>. Acesso em: 9 jun 2010. NETPOINT. Sql Injection. Disponível em: <http://www.netpoint.com.br/ajuda/index.php?title=Sql_Injection>. Acesso em: 9 jun 2010. UOL. Previna-se contra injeção SQL, 23 dez 2008. Disponível em: <http://codigofonte.uol.com.br/artigo/asp/previna-se-contra-a-injecao-sql>. Acesso em: 9 jun 2010.