Você está na página 1de 12

RevistaEletrnicadaFaculdadeMetodistaGranbery http://re.granbery.edu.brISSN19810377 CursodeSistemasdeInformaoN.

9,JUL/DEZ2010

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


Heitor Magaldi Linhares1, Patrcia Lima Quinto1, Andr Luiz Bernardo1, Rodrigo Henrique Cesar de Almeida1, Rogrio dos Santos Lima1
1

Ps Graduao em Segurana da Informao Faculdade Metodista Granbery FMG Rua Batista de Oliveira, 1145 Centro CEP: 36.010-532 - Juiz de Fora MG Brazil
heitormagaldi@yahoo.com.br, drigocesar@uol.com.br,rogeriosantolima@hotmail.com,andrebernardojf@gmail.com, pquintao@granbery.edu.br

RESUMO Na tentativa de eliminar os ataques atravs de SQL Injection ferramentas vm auxiliando desenvolvedores na identificao de vulnerabilidades. Nesse contexto, esse artigo tem como objetivo apresentar o que o SQL Injection, forma de ataque e precaues 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.

1. INTRODUO Em um mundo globalizado no qual vivemos hoje, com tecnologias cada vez mais acessveis, tornando a informao moeda de maior valor na economia, a mobilidade e flexibilidade de acesso aos sistemas se tornaram fator indispensvel nas aplicaes, o que at ento era executado localmente em desktops passa a ser migrado pouco a pouco para web. Atualmente comum observar pequenas empresas possuindo clientes em vrios estados, realizando vendas por todo o pas, utilizando de sistemas que conseguem executar tanto em um handheld como em um desktop, com os mesmos recursos s sendo alterada a interface de sada. A Internet, de fato, trouxe muitos pontos positivos e novas preocupaes aos desenvolvedores. Com a migrao das aplicaes para web, o que at ento funcionava na rede local passa a funcionar em servidores fora dos domnios fsicos das empresas como habitual, trafegando informaes sigilosas por uma rede nada segura, a Internet. Aplicaes passam agora a serem acessadas remotamente em servidores, que passaram a se tornar alvos de atacantes em busca de informaes sigilosas ou de satisfao pessoal, denominados de hackers. Atualmente a maioria absoluta dos sites dinmica, existindo uma troca constante de informaes com o banco de dados, comunicao feita atravs da linguagem SQL - Structured Query Language, utilizada por 90% das aplicaes, por se tratar de forma simples de acesso aos dados (MACORATTI, 2010). A troca de informaes entre a aplicao e o banco de dados, esteja ele local ou no, se possuir falhas, poder ser explorada por um software malicioso, inserindo cdigos, permitindo acesso a informaes por pessoas no autorizadas, tcnica conhecida como SQL Injection. Segundo Fisher (2010), o SQL Injection tornou-se talvez a tcnica mais utilizada para comprometer os aplicativos da Web, graas sua simplicidade relativa e elevada taxa de sucesso. Na Era da Informao, em que o bem mais valioso intangvel, a pergunta : como os desenvolvedores esto lidando com esta imensa responsabilidade? O desafio desenvolver sites cada vez mais inovadores, aliados a mecanismos que venham prover segurana aos usurios.

A proposta deste artigo apresentar o que SQL Injection, como as aplicaes so exploradas e maneiras para preveno; permitindo ao desenvolvedor confeccionar um sistema mais robusto. Para isso, encontra-se dividido em 5 sees, alm dessa introduo. A Seo 2 destaca o conceito de SQL Injection. A Seo 3 apresenta ferramentas de identificao de vulnerabilidades nas plataformas Windows e Linux. A Seo 4 traz solues para uma comunicao segura entre Aplicao Base de Dados. Por fim, tm-se as consideraes finais do trabalho, bem como as referncias bibliogrficas utilizadas. 2. O QUE UM SQL INJECTION?

SQL Injection um conhecido mtodo utilizado em ataques a banco de dados atravs de formulrios que contenham campos de entradas de dados do tipo texto (NETPOINT, 2008). Este mtodo utiliza da vulnerabilidade do cdigo implementado na aplicao para alterar a string de conexo ao banco de dados, comprometendo toda troca de informaes entre Aplicao Base de Dados. O impacto causado pela alterao poder ser apenas de um acesso indevido a uma rea restrita, sendo imperceptvel aos olhos de um desenvolvedor inexperiente, como tambm poder permitir a excluso de uma tabela, comprometendo toda a aplicao, dentre outros. Aplicaes diariamente esto sendo disponibilizadas na Web, sendo, a maioria dessas aplicaes, dinmicas, em que o acesso aos dados se torna necessrio; a falta de informao da parte do desenvolvedor da aplicao a torna um alvo fcil de ataques. Exemplo de uma string simples de conexo via SQL entre a aplicao e base de dados.

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

Ilustrao 1. String de conexo via SQL. A string definida na Ilustrao 1 retorna a confirmao se o usurio Bruno possui a senha 1234. Caso esta informao seja verdadeira, ir localizar na tabela as informaes e retornar a coleo de dados.

Porm a distrao do desenvolvedor no tratamento da entrada de texto permitiu a digitao de caracteres especiais, permitindo assim que o usurio entrasse com id de Bruno. Com esta entrada, a aplicao no ir conseguir interpretar o comando requisitado, retornando com um erro. Assim como a entrada foi invlida, esta poderia ser vlida, e a execuo causar um transtorno enorme como exemplo na Ilustrao 2:

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

Ilustrao 2. String de conexo alterada por atacante. A aplicao permitiu que a entrada de texto pudesse conter o caractere Aspas, vulnerabilidade explorada pelo atacante para ter acesso s informaes contidas na base, permitindo assim aes como inserir, editar, apagar etc. O SQL Injection uma das prticas 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 pginas infectadas ultrapassa a marca de 100.000. Este ataque direcionava os visitantes para uma segunda pgina, onde era instalado um malware. De acordo com McMillan(2010), o ataque no explorar qualquer vulnerabilidade no IIS, mas um ataque contra aplicativos Web de terceiros.

3. IDENTIFICAES DE VULNERABILIDADES NAS PLATAFORMAS WINDOWS E LINUX

A identificao de uma vulnerabilidade poder ser feita por um desenvolvedor treinado, quando ele ir percorrer todas as fontes nos quais ocorram troca de informaes entre Aplicao Base de Dados com interveno do usurio. Em um mercado no qual a produtividade primordial e os requisitos se alteram constantemente, a citao acima no funcionaria devido ao longo perodo de anlise para a identificao das vulnerabilidades, sendo assim, existe no mercado um nmero expressivo de ferramentas que nos auxiliam neste processo de identificao, ferramentas que atuam em servidores Linux, Windows e em ambos.
4

Foram

selecionadas

quatro

ferramentas

para

identificao

de

vulnerabilidades de SQL Injections em aplicaes web que so: Acunetix, Netsparker, SQL Inject-Me, Websecurify. A escolha das aplicaes ocorreu devido ao fato de possurem verses gratuitas e estarem sendo referenciadas em vrios sites relacionados segurana da informao. Os aspectos analisados sero: profundidade da varredura, clareza nas informaes apresentadas, tempo de varredura, interface homem mquina.

3.1. Acunetix

O Acunetix uma ferramenta paga, porm existem verses livres que possuem restrio em determinadas aes. Ferramenta disponvel para download em www.acunetix.com. Realiza uma varredura muito completa em servidores Windows, pois verifica vulnerabilidades na aplicao hospedada e no servidor, como portas abertas que no esto sendo utilizadas, verso do sistema, etc. Porm, por seu processo de varredura ser muito extenso, demanda um tempo de 23 minutos, este tempo ir variar de acordo com o tamanho da aplicao hospedada. Na parte gerencial muito eficiente, armazenando as varreduras em uma base de dados, disponvel sempre que requisitada. Atravs de seu gerador de relatrios denominado de Acunetix Report, possvel ter acesso a todas as anlises realizadas, confeccionando relatrios bem detalhados das vulnerabilidades encontradas. O Acunetix possui uma interface muito amigvel, permitindo boa interao com usurio, tornando a sua utilizao muito intuitiva.

Ilustrao 3. Tela principal do Acunetix

3.2. Netsparker

O Netsparker uma ferramenta paga, porm existem verses livres que no possuem a parte de relatrios. Ferramenta disponvel 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 aplicao, informando sobre os pontos vulnerveis encontrados A interao no momento da varredura permite ao usurio navegar sobre os pontos analisados, apresentando as vulnerabilidades encontradas, impactos e solues passiveis de serem adotadas para correo do problema. O que se destacou no Netsparker foi riqueza de informaes em um curto perodo de tempo gasto na varredura, cerca de 6 minutos. O ponto negativo desta ferramenta foi que a verso testada, a community, bem limitada e no possui recursos de relatrios.

Ilustrao 4. Tela Principal do Netsparker

3.3. SQL Inject-Me Apesar de ser apenas um plugin do Browser Mozila Firefox, o SQL InjectMe se apresenta bem til em verificaes em pginas quem contenham campos de entrada de texto. Este plugin livre e disponvel para download em

addons.mozilla.org/en-US/firefox/addon/7597 O SQL Inject-Me apresenta-se bem gil na identificao 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 visvel na tela, botes, campos de entradas de texto etc. A agilidade algo que se destaca nesta ferramenta, porm limitada se comparada s ferramentas anteriormente testadas, pois somente identifica

vulnerabilidades relacionadas SQL Injection.

Esta ferramenta indicada a desenvolvedores de aplicaes mais simples, que contenham poucas entradas de informaes, pois esta ferramenta depende do acesso a cada tela a ser testada, se tornando improdutiva, dependendo do tamanho da aplicao.

Ilustrao 5 Tela SQL Inject Me

3.4. Websecurify

O Websecurify uma ferramenta livre, disponvel para download em www.websecurify.com. uma aplicao que consegue atuar em plataforma Windows e Linux, mas possuindo um desempenho trs vezes melhor na plataforma Windows. Possui uma interface sem muitos recursos interao do usurio. Realiza uma verificao superficial, realizando testes de requisies, apontando aes ativadas, verso atual do servidor, identificando assim vulnerabilidades existentes. O Websecurify dentre as ferramentas testadas, a que oferece menos recursos, uma interface de varredura pssima, onde o usurio nunca sabe quando ir finalizar, devido ao limite ser incrementado no processo de execuo, possuindo muito pontos negativos.

Ilustrao 6 Tela Websecurify.

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

Ferramenta
Acunetix Netsparker SQL Inject-Me Websecurify
Legenda

Varredura 3 3 2 1

Clareza 3 3 2 3

Tempo 1 3 3 1

Interface 3 3 1 1

1 Ruim

2 Mdio

3 - Bom

4. MELHORES PRTICAS 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 so
9

bem comuns e podem ser evitados com prticas bem simples, conforme os tpicos listados a seguir: 4.1. Validaes de entradas importante validar todas as entradas de texto que sero utilizadas no SQL, no permitindo a escrita de caracteres especiais e palavras chaves do SQL, como INSERT, DELETE, UPDATE, HAVING, JOIN etc, conforme visto nas Ilustraes 7 e 8.

Ilustrao 7 Implementao em PHP

Ilustrao 8 Implementao em ASP

4.2 Tamanho das entradas de texto


10

Defina um tamanho mximo de caracteres para senhas e usurios (10 o tamanho indicado); 4.3 Tratamentos de erros Efetue um tratamento adequado aos erros, para que as mensagens no exponham ao atacante informaes sobre a estrutura de dados. 4.4 Utilizaes de acesso limitado Limite o acesso de todos os usurios, permitindo assim somente aes bsicas, no permitindo a utilizao do acesso mestre de dentro da aplicao. 4.5 Utilizaes de log Crie um LOG com os erros ocorridos e as aes mais importantes executadas, para ser auditado periodicamente.

5. CONSIDERAES FINAIS Este artigo teve como principal objetivo abordar de forma clara o que o SQL Injection, pois, conhecendo a ameaa, o combate se torna mais fcil. A apresentao das aplicaes veio demonstrar como a combinao destas ferramentas positiva no combate ao SQL Injection. No 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 preocupao com a segurana deixa de estar em segundo plano e passa a se tornar requisito de projeto. Mesmo com todas estas mudanas, existem desenvolvedores que ainda vivem na zona de falsa sensao de segurana, pensando que suas aplicaes nunca sero alvo de atacantes, por isso o alto nmero de sites vulnerveis.

11

O combate ao SQL Injection simples e no demanda tempo extra de desenvolvimento. A Falta de conhecimento do desenvolvedor se torna o ponto mais crtico 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 Segurana nunca demais!.

6. REFERNCIAS BIBLIOGRFICAS DANCHEV, Dancho. SQL injection attacks and malware led to most data breaches, 9 fev 2010. Disponvel em : http://www.m86security.com/labs/i/Anotherround-of-Asprox-SQL-injection-attacks,trace.1366~.asp>. Acesso em: 30 jun 2010. FILHO, Clvis Luiz de Amorim; CAVALCANTI,Paulo Diego de Oliveira Bezerra; FILHO, Marcello Benigno de Barros Borges. SQL Injection em ambientes Web. Disponvel em: http://www.devmedia.com.br/articles/post-9733-SQL-Injection-emambientes-Web.html>. Acesso em: 8 jun 2010. FISHER, Dennis. Por dentro de um ataque de injeo de SQL, 25 fev 2010. Disponvel em : < http://threatpost.com/pt_br/blogs/por-dentro-de-um-ataque-deinjecao-sql-022510 >. Acesso em: 9 jun 2010. ______. Mass SQL Injection Attack Hits Sites Running IIS, 10 jun 2010. Disponvel em : < http://threatpost.com/en_us/blogs/mass-sql-injection-attack-hits-sites-runningiis-061010>. Acesso em: 30 jun 2010. GIROTO, Alex. Segurana em PHP evitando o mysql_injection , 15 abr 2010. Disponvel em:< http://www.nfx.com.br/forum/index.php?/topic/4183-seguranca-emphp/>. Acesso em: 9 jun 2010. MACORATTI,Jos Carlos. Previna-se contra a injeo SQL. Disponvel em : <http://www.macoratti.net/sql_inj.htm>. Acesso em: 9 jun 2010. MONTEIRO, Mario. Injeo de SQL. Disponvel <http://www.htmlstaff.org/ver.php?id=20553>. Acesso em: 9 jun 2010. em:

NETPOINT. Sql Injection. Disponvel em: <http://www.netpoint.com.br/ajuda/index.php?title=Sql_Injection>. Acesso em: 9 jun 2010. UOL. Previna-se contra injeo SQL, 23 dez 2008. Disponvel em: <http://codigofonte.uol.com.br/artigo/asp/previna-se-contra-a-injecao-sql>. Acesso em: 9 jun 2010.

12