sql injection

22
FACULDADE UNEB CURSO DE SISTEMAS DE INFORMAÇÃO TÍTULO DO TRABALHO COMPONENTES Luís Guilherme Siqueira Walysson Rodrigues Duarte

Upload: limei

Post on 03-Aug-2015

272 views

Category:

Documents


8 download

DESCRIPTION

SQL INJECTION TOOLs

TRANSCRIPT

Page 1: SQL INJECTION

FACULDADE UNEB

CURSO DE SISTEMAS DE INFORMAÇÃO

TÍTULO DO TRABALHO

COMPONENTES

Luís Guilherme Siqueira

Walysson Rodrigues Duarte

BRASILIA, DF2012

Page 2: SQL INJECTION
Page 3: SQL INJECTION

FACULDADE UNEB

CURSO DE SISTEMAS DE INFORMAÇÃO

TÍTULO DO TRABALHO

Este Trabalho Acadêmico Pratico – TAP foi apresentado

como parte da avaliação na disciplina

Avaliação e Desempenho de sistemascomo complemento da nota e da

carga horaria.

Orientador: Profº Gerson Junior

BRASILIA, DF2012

Page 4: SQL INJECTION

Sumário

1. Introdução.............................................................................................................................. 42. Cenários atuais...................................................................................................................... 5 2.1 Testes de Desempenho..................................................................................................... 6 2.2 Identificação do Problema................................................................................................ 63. Bancos de dados e Aplicação Web..................................................................................... 6 3.1 Bancos de dados.............................................................................................................. 6 3.2 Linguagem de Consulta estruturada (SQL).................................................................... 7 3.3 Estrutura SQL.................................................................................................................... 74. Aplicações Web …................................................................................................................. 85. O Ataque SQL INJECTION, suas variações e técnicas de prevenção............................... 9 5.1 SQL INJECTION................................................................................................................ 9 5.2 Codificação de caracteres …......................................................................................... 10 5.3 O Ataque............................................................................................................................ 106. ADVANCED SQL INJECTION............................................................................................... 12 6.1 O Ataque............................................................................................................................ 127. Como se prevenir de ataques SQL INJECTION................................................................. 12 7.1 Validação de entrada.........................................................................................................128. SQL INJECTION SCANNER Software................................................................................. 149. Conclusão …..........................................................................................................................1510.Perspectivas Futuras ….......................................................................................................1611. Referencias …..................................................................................................................... 16

Page 5: SQL INJECTION

1 – INTRODUÇÃO

Este trabalho apresenta uma técnica chamada “SQL Injection” que é utilizada por crackers para atacar bancos de dados através de aplicações voltadas para a Internet e que não adotaram uma metodologia de desenvolvimento preocupada com a produção de software naturalmente seguro. Esta técnica também serve para analisar o desempenho de sistemas no que se refere à segurança e performance dos servidores.

2 – CENÁRIOS ATUAIS

Com o surgimento do protocolo HTTP no início da década de 90, as páginas web tornaram-se cada vez mais populares e um dos principais meios de comunicação entre usuários e instituições. No início, as páginas eram desenvolvidas somente utilizando a linguagem HTML, que eram estáticas e não possuíam interação com o usuário. Nessa época, os principais alvos de ataques eram os sistemas operacionais, banco de dados e serviços como Telnet e FTP.

Atualmente, os principais alvos de ataques são servidores web, aplicações web e o navegador web (browser).

Na corrida para impulsionar mais serviços on-line, as aplicações web frequentemente sofrem com a falta de segurança incorporada. As vulnerabilidades resultantes representam um caminho fácil para que crackers acessem ou roubem dados e informações corporativas ou pessoais.

A principal causa dessas vulnerabilidades é a falta de validação correta dos campos de entrada das aplicações web. Com isso, usuários podem submeter dados de entrada arbitrários e, com eles, códigos maliciosos. Os principais motivos para que essas vulnerabilidades apareçam são: imaturidade ou desconhecimento em segurança por parte dos desenvolvedores, restrições de recursos e falta de tempo, e uso incorreto das tecnologias.

O objetivo deste trabalho é mostrar as principais maneiras conhecidas de utilização do SQL Injection como forma de ataque a aplicações Web e servidores de banco de dados. São apresentados também mecanismos de defesa recomendados pelas melhores práticas de segurança no mercado. O ataque SQL Injection foi escolhido como tema por sua capacidade "destrutiva" e para demonstrar a importânciada segurança ainda no desenvolvimento e performancedas aplicações.

2.1 – TESTES DE DESEMPENHO 

Teste de Desempenho é uma parte crucial de um processo de Qualidade e teste de Software em uma aplicação Web.

Na maioria dos modelos de processo de Engenharia de Software, o teste de software tem um papel importante na garantia da qualidade de um produto de software. Na maioria dos projetos, a maior parte do esforço vai para testes funcionais e alguns gerentes tendem a ignorar Testes de Desempenho completamente.

Page 6: SQL INJECTION

Para sites e aplicações Web, especialmente em uma situação de comércio eletrônico, Testes de Desempenho são fundamentais. Mesmo uma aplicação bug-free estará fadada ao fracasso, apenas por “aguentar” um tráfego médio, mas não é capaz de lidar com um pico significativo na vida real de uma situação. Para garantir que uma aplicação Web satisfaz certos critérios como performance, throughput de dados ou tempo de resposta, testes em um ambiente semelhante ao de produção será necessário.

O Teste de Desempenho em sua mais pura definição é o tipo de teste realizado para se verificar o tempo de resposta de uma aplicação, determinando assim a sua escalabilidade e confiança levando-se em consideração uma carga(load).

O Teste de Desempenho é usado também para se identificar os famosos gargalos(bottlenecks) de um sistema, determinar compliance com os requisitos não-funcionais de performance e coletar outras informações como hardware necessário para a operação da aplicação.

São estes alguns dos propósitos do Teste de Desempenho:

- Determinar a probabilidade que o sistema irá atender aos SLA’s(Service Level Agreement) acordados;- Não mitiga o risco diretamente, mas identifica e quantifica o risco;- Determina a configuração mínima que permitirá o sistema atender os SLA’s;- Determinar tempos de resposta em throughputs;- Determinar gargalos(bottlenecks) no sistema;- Comparação de diferentes plataformas de hardware e O.S.

Benefícios do Teste de Desempenho:

- Melhoria da qualidade do ponto de vista do usuário;- Redução do custo de mudanças;- Redução dos custos de sistema;- Aumento dos lucros;- Identificação antecipada dos defeitos mais críticos da aplicação como arquitetura do sistema;- Satisfação do usuário final;- Clareza na utilização dos recursos;- Teste de Desempenho também remove muitos mitos associados aos usuários.

Quais sistemas estão vulneráveis à performance:

- Aplicações Client-Server: Arquiteturas Client-Server representam um grande desafio, uma vez que problemas de desempenho, associados com transação/processamento, presença de vários hardwares diferentes, complexidade na rede de dados, etc. fazem com que toda essa combinação torne o teste ainda mais difícil, sendo ainda mais complicado achar a causa raiz do problema em questão;

- Aplicações Web: Aplicações Web-based, têm evoluído a partir de aplicações Client-Server. Os conceitos de Client-Server são mantidos através de um Web-Client e um Web-Server. Estas são aplicações de software que interagem com os usuários ou outros sistemas usando HyperTextTransferProtocol(HTTP). O uso de aplicativos na Web pode variar de simples até tarefas mais complexas. Com a explosão do comércio eletrônico, as empresas estão simplificando os processos e acelerando as operações através da Web como um meio mais eficaz.

Fatores que impactam nodesempenho:

 - Peculiaridades do Projeto:·   Natureza do Projeto;·   Metodologias;

 - Peculiaridades Técnicas:

Page 7: SQL INJECTION

· Ameaças à Segurança(SQL’sinjection);· Negligência por parte dos desenvolvedores;· Complexidade na interface com o usuário(usabilidade);

- Conteúdo dos Sites:

· HTML;· Imagens;· Multimídia;· Aplicações executáveis;- Ambiente do Cliente;· Diferentes Browsers;· Diferentes Plataformas;· Etc.

2.2 – IDENTIFICAÇÃO DO PROBLEMA

Embora os conceitos e técnicas apresentadas aplicam-se para outros ambientes, o objeto de estudo dessa pesquisa se constitui em uma técnica de ataque a aplicações voltadas para internet, desenvolvidas na linguagem ASP e que acesseminformações armazenadas em um banco de dados Microsoft SQL Server.

Para que seja possível a execução de um ataque baseado em SQL Injection é necessário apenas um navegador para internet e um pouco de esforço para encontrar no banco de dados a estrutura de tabelas e campos contendo informaçõesimportantes.

Este tipo de ataque não é uma falha tecnológica de segurança no SistemaOperacional ou em qualquer outro software, mas sim, uma falha na forma como aaplicação foi desenvolvida. Alguns desenvolvedores ou programadores desconhecemeste tipo de ataque deixando assim as portas abertas para a injeção de comandosSQL na aplicação.

3 – BANCOS DE DADOS E APLICAÇÕES WEB

3.1 – BANCOS DE DADOS

Page 8: SQL INJECTION

Uma estrutura de bancos de dados, genericamente, é qualquer coleção dedados organizados de tal forma que seja possível localizar e extrair de maneira simples precisa e rápida, frações destes dados, gerando informações úteis para osmais variados itens. Os bancos de dados tradicionais organizam-se em campos,registros e arquivos.

De acordo com DATE (2000), um banco de dados é uma coleção de dadospersistentes utilizadas pelos sistemas de aplicação de uma determinada organização.

Normalmente um banco de dados possui um sistema gerenciador. Essemodelo de software é conhecido como Sistema Gerenciador de Bancos de Dados(SGBD).

Um Sistema Gerenciador de Banco de Dados (SGBD) é constituídopor um conjunto de dados associados a um conjunto de programaspara acesso a esses dados. O conjunto de dados comumentechamado de banco de dados, contém informações sobre umaempresa em particular. (SILBERSCHATZ, Abraham; KORTH, HenryF.; SUDARSHAN, S., 1999, p.1).

Geralmente um SGBD adota um modelo de dados, de forma pura, reduzida ouestendia. No modelo de dados mais aceito hoje em dia, o modelo relacional, aestrutura tem a forma de tabelas na qual, cada tabela é composta por linhas e colunas.Cada SGBD possui características especiais para o armazenamento,classificação e recuperação dos dados.

3.2 - LINGUAGEM DE CONSULTA ESTRUTURADA (SQL)

O SQL (Structured Query Language) ou Linguagem de Consulta Estruturada, éuma linguagem de pesquisa declarativa para bancos de dados relacional. Muitas dascaracterísticas do SQL foram inspiradas na álgebra relacional de Ted Codd econforme (DATE, 2000) é a linguagem padrão para se lidar com banco de dados relacional.

O SQL foi criado pela IBM Research na década de 70, mas rapidamente foramcriados vários “dialetos” por outros fornecedores ou desenvolvedores. Essa expansãolevou a necessidade de ser criado e adaptado um padrão para a linguagem. Estatarefa foi realizada pelo American National Standards Insitute (ANSI) em 1986 eInternational Organization for Standardization (ISO) em 1987.

O SQL é utilizado pelos SGBD’s: DB2, Ingres, Interbase, MySQL, Oracle,PostgreSQL, Microsoft SQL Server, SQLite, Sybase, Informix, Firebird e HSQLDB(desenvolvido em Java).

3.3 - ESTRUTURA SQL

A linguagem SQL se divide em quatro categorias principais: linguagem de manipulação de dados (DML), linguagem de definição de dados (DDL), linguagem decontrole de dados (DCL) e linguagem de consulta de dados (DQL).

− DML – Linguagem de Manipulação de Dados:

Conforme SILBERSCHATZ, KORTH e SUDARSHAN (1999,p.110), “ASQL DML abrange uma linguagem de consulta baseado tanto na álgebra relacionalquanto no calculo relacional de tuplas,” e é utilizada para selecionar, inserir, atualizar eapagar dados.

• SELECT – é o comando mais utilizado da DML, comanda epermite ao usuário especificar uma consulta como umadescrição do resultado desejado.• INSERT – é usada para adicionar uma linha (fila) a uma tabelaexistente.• UPDATE – utilizado para alterar uma fila de dados em umatabela existente.• DELETE– permite ao usuário remover filas existentes de umatabela.• BEGIN WORK (ou START TRANSACTION) – pode ser utilizadopara marcar o começo de uma transação de bancos de dadosque pode ser finalizada ou não.• COMMIT – envia todos os dados da mudança para um estadopermanentemente.

Page 9: SQL INJECTION

• ROLLBACK – faz com que as mudanças nos dados existentesdesde o último COMMIT ou ROLLBACK sejam descartadas.COMMIT e ROLLBACK interagem com áreas de controle comotransação e locação. Ambos terminam qualquer transação aberta eliberam todas as transações com algum tipo de relação com asáreas de controle referenciadas. Na ausência de um BEGIN WORKou uma declaração semelhante, a semântica de SQL é dependenteda implementação.

− DDL – Linguagem de Definição de Dados

Uma DDL permite ao usuário definir relações novas e elementosassociados. A maioria dos bancos de dados SQL comerciais temextensões proprietárias no DDL.

Os comandos principais da DDL são: CREATE (cria um objeto dentroda base de dados) e DROP (apaga um objeto dentro da base dedados).

Alguns sistemas de bancos de dados usam o comando ALTER, quepermite ao usuário alterar um objeto, por exemplo, adicionando umacoluna a uma tabela existente.

Outros comandos DDL podem ser:

• ALTER TABLE;• CREATE INDEX;• ALTER INDEX;• DROP INDEX;• CREATE VIEW;• DROP VIEW.

− DCL – Linguagem de Controle de Dados

A DCL controla os aspectos de autorização de dados e licenças deusuários para controlar quem tem acesso para ver ou manipular dadosdentro do banco de dados.

Os dois principais comandos do DCL são: GRANT (autoriza ao usuárioexecutar ou mudar a permissão de execução de operações) e REVOKE(remove ou restringe a capacidade de um usuário de executaroperações).

Outros comandos do DCL são:

• ALTER PASSWORD;• CREATE SYNONYM.

− DQL – Linguagem de Consulta de Dados

Embora tenha apenas um comando (o comando SELECT) a DQL é aparte da SQL mais utilizada. O comando SELECT, como apresentadona figura 5, é composto de varias cláusulas e opções, possibilitandoelaborar consultas das mais simples as mais elaboradas.

4 – APLICAÇÕES WEB

Anterior ao surgimento da web se utilizava muito aplicações do tipo cliente/servidor(MELO, Rubens 1997). Neste modelo cada aplicação precisava de um cliente(interface para o usuário) que era instalada separadamente da aplicação propriamentedita (parte servidor). Esse modelo tem um alto custo de manutenção edesenvolvimento, uma vez que cada atualização feita no aplicativo, obriga a troca detodos os clientes instalados.

Com a popularização de redes de comunicação como Internet e Intranetsurgiram as aplicações web, ou Webapp, que dispensam a instalação de clientes epassam a ser acessadas através de um navegador.

Page 10: SQL INJECTION

Neste modelo as atualizações ou modificações feitas na aplicação sãoautomaticamente percebidas pelos usuários sem que nenhuma alteração seja feitanos computadores clientes utilizados para o acesso a aplicação modificada.

Modelos de aplicações web podem ser encontrados em Webmail’s, portais eletrônicos, comércios eletrônicos e bancos como mostram a figura abaixo.

As aplicações web são aplicações que utilizam a Internet como camada deapresentação, dessa forma a interação com o usuário se torna mais amigável e asinformações são apresentadas de forma mais simples e compreensível.

De forma simplificada, cada página de uma aplicação web é entregue para ousuário de forma estática porque todo o processamento ocorre no servidor onde aaplicação esta hospedada.

Estas aplicações podem oferecer acesso, para um grande número decolaboradores, a informações estruturadas (informações armazenadas em bases dedados), assim como às informações não estruturadas (informações armazenadas emarquivos de texto, planilhas eletrônicas, entre outros). O acesso a estas informações (estruturadas ou não), dá se na maioria das vezes através do uso de API’s (ApplicationProgram Interface), também chamadas de applets, portlets, adaptadores ouconectores, sendo o acesso às informações estruturadas mais facilitado, pois, atravésda linguagens de programação pode-se utilizar de API’s que facilitem ao colaboradoracessar as informações através de interfaces intuitivas e amigáveis. Já para acessaras informações não estruturadas é necessário utilizar, em conjunto com as API’s, métodos de categorização e taxonomia (ciência da identificação) e mecanismos debusca.

Em linhas gerais, as aplicações web, como ambiente de integração deinformações e como sistemas, facilitam a busca e tratamento de informações nasdiversas fontes disponíveis, possibilitam a realização de transações comerciais efinanceiras, agiliza a tomada de decisão e pode gerar mais produtividade com aredução no tempo despendido na procura pelas informações.

Para garantir a segurança destas aplicações é preciso trabalhar com apremissa de que não existe segurança absoluta, por isso, testes de vulnerabilidadedevem fazer parte do processo de desenvolvimento de aplicações com o objetivo deidentificar vulnerabilidades e possíveis ameaças.

Page 11: SQL INJECTION

É preciso compelir as ameaças à segurança da aplicação e a política desegurança e medidas para reduzir a probabilidade de ocorrência de vulnerabilidadestambém deve ser tomada.

5 – O ATAQUE SQL INJECTION, SUAS VARIAÇÕES E TÉCNICAS DE PREVENÇÃO.

5.1 – SQL INJECTION

O SQL INJECTION é uma técnica utilizada pra explorar aplicações web a partir da inserção de consultas SQL como parâmetros de execução destas aplicações. Apesar de ser notavelmente simples se implementar uma proteção contraeste tipo de ataque, há um elevado número de sistemas conectados a Internet queainda são totalmente vulneráveis (JOELSCAMBRAY 2003).

O princípio básico do SQL Injection é o de obter vantagem de umcódigo inseguro em um sistema conectado a Internet com o objetivo de passarcomandos diretamente a um banco de dados, conseguindo assim acesso nãoautorizado ao ambiente e suas informações.

5.2 – CODIFICAÇÃO DE CARACTERES

A maioria dos navegadores utilizados atualmente não interpretamcorretamente as requisições que contem caracteres de pontuação e muitos outrossímbolos a menos que sejam codificados.

Neste trabalho foram utilizados em todos os exemplos caracteres ASCIIpara manter a máxima legibilidade. Na prática é necessário substituir estes caracteresna requisição à aplicação.

Identificar caracteres maliciosos permite, principalmente, evitar queperpetre-se ataques como, por exemplo, SQL Injection (TORRES 2003).

Abaixo segue uma tabela com os caracteres mais comuns utilizadosnesses tipos de ataque:

5.3 – O ATAQUE

O SQL Injection é um dos mais comuns ataques na camada deaplicação praticados na Internet de acordo com pesquisas realizadas pelos institutos Gartner e IDC. As tecnologias vulneráveis a este tipo de ataque são as que utilizam linguagens dinâmicas como ASP, ASP.NET, PHP, JSP, CGI entre outras. A única ferramenta necessária para a prática deste tipo de ataque é o navegador Internet o que torna este método tão popular.

Page 12: SQL INJECTION

Qualquer página na Internet que envie parâmetros a um banco de dados pode estar vulnerável ao SQL Injection, porém é mais comum encontrar essasfalhas em páginas de controle de acesso.

A vulnerabilidade a este tipo de ataque ocorre quando a aplicação aceita a inserção de uma série de comandos SQL como parâmetros e não filtra caracteres estranhos apropriadamente. Isto permite que as informações contidas em um banco de dados possam ser roubadas, alteradas ou até mesmo apagadas. Certos SGBD’s como o Microsoft SQL Server contém stored procedures e extended procedures (funções internas do bancos de dados). Se um usuário consegue acesso aestas funções ele pode comprometer todo o servidor.

A forma mais comum de utilização da técnica de SQL Injection é através da manipulação de comandos SQL já existentes. Esta manipulação ocorre pela alteração da cláusula WHERE ou estendendo o comando acrescentando o operador UNION. Existem outras possíveis variações, mas estas são as mais utilizadas. A forma clássica de manipulação de código SQL geralmente ocorre em páginas de controle deacesso ou pesquisa de produtos.

Uma aplicação que utiliza linguagens dinâmicas (ASP ou JSP, por exemplo) tipicamente contém consultas SQL, e os seus parâmetros que são enviados para o banco de dados, como uma linha de comando única.

O Código a seguir apresenta um exemplo de código que gera um comando SQL:

sql_query= “SELECT ProductName, ProductDescription FROM Products WHEREProductNumber = " &Request.QueryString("ProductID")

O comando Request.QueryString(“ProductID”) recebe o valor informado em um campo do formulário chamado de ProductID e pode vir inserido na condição docomando SQL.

Quando o usuário informa a seguinte URL:

Exemplo de URL com parâmetros

A seguinte consulta é executada:

Consulta executada no banco de dados

Um invasor pode verificar se a informação passada na variável“ProductID” passa por algum processo de validação alterando o comando SQL daseguinte forma:

Demonstração de ataque direto a URL

A consulta executada será:

Consulta passada para interpretação do banco de dados

Como a condição “1=1” sempre será verdadeira e com isso todos os dados das colunas “ProductName” e “ProductDescription” serão retornados.

Page 13: SQL INJECTION

A partir disso, além de obter acesso às informações da empresa o invasor está apto a executar comandos maliciosos, podendo inserir, apagar ou modificar os dados.

Por exemplo, o símbolo ”;” (ponto e virgula) é utilizado para enviar ao servidor de banco de dados vários comandos de uma única vez. Com isso o invasor pode executar o seguinte comando apagando toda a tabela de produtos da empresa:

Exemplo de ataque direto a URL

Ele pode também consultar outro tipo de informação utilizando oseguinte comando:

Exemplo de ataque direto a URL

Retornando assim todos os usuários do sistema e suas senhas.

6 – ADVANCED SQL INJECTION

Esta variação da técnica de SQL Injection consiste no levantamento inicial das informações na qual o invasor não conhece a aplicação e precisa então forçar erros no sistema para tentar identificar a estrutura e assim obter acesso aoservidor de banco de dados.

6.1 – O ATAQUE

Em uma página de validação de usuário e senha de uma aplicação WEB o invasor pode em primeiro lugar tentar o acesso à aplicação com o primeiro usuário da tabela sem nem mesmo saber qual é, utilizando o seguinte comando:

Exemplo de ataque direto a URL

O uso de aspas simples delimita o comando SQL e os caracteres “--“indicam ao SGBD que a partir desse ponto vem um comentário, ignorando todo o restante da cláusula SQL.

O invasor pode ainda se conectar com um usuário fictício que não existe no banco, isso porque algumas aplicações somente permitem o acesso a outrosmódulos verificando se o select retorna uma linha ou não, mas sem necessariamenterevalidá-lo.

Exemplo de ataque direto a URL

Assim a aplicação entende que o fato de o comando SQL ter retornado uma linha indica que o usuário tem permissão de acesso ao sistema.

7 – COMO SE PREVENIR DE ATAQUES SQL INJECTION

Nesta seção serão apresentadas algumas formas de defesa contra osataques de SQL Injection descritos nas seções anteriores.

7.1 – VALIDAÇÃO DE ENTRADA

Page 14: SQL INJECTION

Validação de entrada pode ser um assunto muito complexo.

Geralmente, no desenvolvimento de um projeto pouca atenção é dispensada para avalidação dos dados de entrada, pois podem causar paradas no sistema e podem ser problemas difíceis de resolver.

Códigos de validação de entrada não acrescentam nenhuma funcionalidade ao sistema e podem apenas tornar o desenvolvimento mais complexo e demorado, mas são uma arma importante na prevenção de ataques.

Existem várias técnicas de validação de entrada, porém, serão abordadas duas delas:

• Rejeitar dados conhecidos como inválidos.• Aceitar dados conhecidos como válidos.• Escape de caracteres.

Rejeitar dados conhecidos como inválidos é uma técnica complexa,primeiro porque o desenvolvedor não é necessariamente quem define os dados inválidos (novas formas de dados maliciosos que podem comprometer o sistema são descobertas a cada dia), segundo porque novas técnicas de ataque são criadas diariamente e isso implica em uma atualização permanente da aplicação.

Aceitar dados conhecidos como válidos é provavelmente o melhor, mas é o mais difícil de implementar.

A maioria dos operadores de linguagem de expressões regulares sãocaracteres únicos sem escape. O caractere de escape \ (um Simples barra invertida) informa ao analisador de expressão regular que o caractere seguinte a barra invertida não é um operador. Por exemplo, o analisador trata um asterisco (*) como um quantificador de repetição e uma barra invertida seguida de um asterisco (\ *) como o caractere Unicode 002A. Isso evita que a aplicação trate os caracteres inseridos nos campos dos formulários como comandos e receba apenas como dados (texto) deentrada.

Na visão da segurança o melhor é trabalhar as três técnicas em conjunto – permitir a entrada somente de dados válidos conhecidos pela aplicação eainda assim procurar por essa entrada em uma base de registros de dados maliciosos.

Um bom exemplo da necessidade de combinar essas técnicas é sobre aquestão de hífens (-).

O banco de dados pode conter informações que tenham esse caractere presente, então ele é reconhecido como dado válido de entrada, porém já foiapresentado que dois hífens em seqüência (--) têm outro significado ao SQL Server eé preciso limitar sua utilização.

A figura a seguir trás um exemplo de código utilizado para rejeitar dadosinválidos conhecidos como maliciosos:

Page 15: SQL INJECTION

Exemplo de código com tratamento de dados de entrada

Como pode-se ver a função validate_stringrepresentada no códigoacima, define as palavras (“select”, “insert”, “update”, “delete”, “drop”, “--" e “”) comoinválidas e retorna o valor FALSE (falso) caso alguma delas seja usada na aplicação.

Na figuraa seguirtem-se um exemplo de código que permite somente autilização de dados conhecidos como validos:

Exemplo de código com tratamento de dados de entrada

O código mostrado na figura acima cria uma lista de caracteres aceitosconhecidos como válidos e através da função validatepasswordtodos os dadosinseridos na aplicação serão analisados retornando FALSE (falso) caso algum caracterenão definido nessa função seja utilizado.

8 – SQL INJECTION SCANNER SOFTWARE

Existem no mercado vários softwares que fazem testes de desempenho e vulnerabilidade de sistemas web. Dentro do que foi apresentado neste trabalho, estes softwares contemplam o que foi apresentado neste trabalho e outras funções que podem ajudar na melhor eficiência destes sistemas.

Page 16: SQL INJECTION

O Netsparker é um scanner de segurança de aplicações web que, de acordo com os desenvolvedores, é completamente livre de falsos- positivos. De acordo com eles, o Netsparker possui uma nova tecnologia que pode confirmar as vulnerabilidades sob demanda, por isso é imune a falso-positivo.

Por exemplo, quando o Netsparker identifica um SQL Injection, ele consegue identificar como explorar a falha automaticamente e extrair a versão da aplicação. Quando este dado for extraído com sucesso, o programa vai informar que a falha foi confirmada. 

O Netsparker consegue simular um atacante real com grande sucesso. Assim, consegue atacar sites que utilizam AJAX e JavaScript. 

Embora o Netsparker seja pago, existe uma versão "Community" que compartilha muitas das funcionalidades presentes na versão paga. É capaz de detectar SQL Injection e XSS (Cross Site Scripting).

Netsparker Community Edition, para Windows XP, 7, Vista e 2003/2008. O aplicativo pode detectar SQL Injection + cross-site scripting. Depois de realizar uma varredura no site, apresenta as soluções para as possíveis questões apresentadas e permite que você veja a renderização do browser e requisições/respostas HTTP. O Netsparker da empresa Mavituna Security Ltd.(http://www.mavitunasecurity.com/) contempla em sua versão free,testes de segurança e desempenho dos servidores web, apresentando gráficos e estatísticas dos resultados.

9 – CONCLUSÃO

A crescente importância dada à segurança da informação requer quesejam definidos e implementados mecanismos mais eficientes para apoiar asatividades que envolvam segurança da informação. Neste contexto, o objetivo destetrabalho foi apresentar a importância na implementação de técnicas, metodologias,modelos e práticas que apoiem o desenvolvimento de software seguro. Ascontribuições dessa abordagem são:

Page 17: SQL INJECTION

• Destacar aspectos de segurança no tratamento das informações inseridas emaplicações.• Apresentar melhores práticas de instalação de bancos de dados.• Discorrer sobre metodologias dirigidas ao desenvolvimento seguro desoftwares.• Relacionar requisitos de segurança fundamentais.• Mostrar particularidades que aperfeiçoam questões de segurança nacondução do desenvolvimento de software.

10 – PERSPECTIVAS FUTURAS

Como perspectiva mais imediata, a abordagem em engenharia desoftware seguro apresentada neste trabalho pretende apoiar aqueles que desejamaperfeiçoar processos de desenvolvimento de software para a obtenção de produtosmais seguros.

Diversos trabalhos podem ser definidos e desenvolvidos com opropósito de melhorar e estender a proposta apresentada, por exemplo:

• Estruturação do modelo de ciclo de vida para desenvolvimento de softwareseguro apresentado através da formulação de documentação (artefatos) paraas fases especificadas e comparação desse modelo com outros.• Proposição de um novo modelo de ciclo de vida para desenvolvimento desoftware seguro.• Criação de um framework para apoiar a aplicação dos requisitos funcionais desegurança.• Formulação de padrões de desenvolvimento que suportem se não todos,alguns dos requisitos funcionais de segurança citados.• Desenvolvimento de ferramentas de gerência para desenvolvimento desoftwares aderentes à norma ISO/IEC 15408.• Elaboração de conteúdo pedagógico para capacitação de recursos humanos(desenvolvedores, arquitetos e engenheiros de software) em segurança da informação.• Criação de ferramentas com maior inteligência e performance na análise decódigo fonte.

11 – REFERÊNCIAS

ALBUQUERQUE, R; RIBEIRO, B. “Segurança no Desenvolvimento de Software”,Editora Campus, 2002.

DATE, C.J. "Introdução a sistemas de Banco de Dados". Rio de Janeiro: Campus,2000.

JOELSCAMBRAY, MIKE SHEMA (2003). Segurança contra hackers: AplicaçõesWEB, Futura.

MELO, Rubens. (1997). Banco de Dados em Aplicações Cliente/Servidor. SãoPaulo: IBPI.

MSDN. (2009). Manuais Online do SQL Server 2008. Disponível em:http://msdn.microsoft.com/pt-br/library/ms190693.aspx

SILBERSCHATZ, Abraham; KORTH, Henry; SUDARSHAN, S. "Sistema de Banco deDados". São Paulo: Makron Books, 1999.