ATPS DESENVOLVIMENTO DE SOFTWARE SEGURO ETAPAS 3,4e5
Ensaios: ATPS DESENVOLVIMENTO DE SOFTWARE SEGURO ETAPAS 3,4e5. Pesquise 862.000+ trabalhos acadêmicosPor: brunosi2010 • 4/6/2014 • 2.496 Palavras (10 Páginas) • 581 Visualizações
Relatório 4 - Evitando Ataques SQL INJECTION
A SQL - Structured Query Language - é largamente usada para interagir com banco de dados relacionais. Se você considerar que 90% das aplicações utilizam banco de dados com suporte a SQL vai concluir que o uso da SQL é quase uma unanimidade por ser prática , fácil e portátil.
Ao colocar sua aplicação na Web você a esta expondo a um acesso mais amplo e indiscriminado. Afinal qualquer um que tenha acesso a url do site terá acesso a sua aplicação e aos dados que ela disponibiliza. Pensando na segurança de suas informações as empresas investem pesado em firewalls , certificação digital e outros recursos , com o objetivo de se proteger de invasores.
Para que o controlar o acesso as informações normalmente restringe-se o acesso aos usuários cadastrados usando um nome e senha para identificação ; estes dados são colhidos através de um formulário de login e são então verificados com as informações armazenadas em um banco de dados dos usuários cadastrados; se estiverem corretas o acesso é permitido caso contrário o acesso é negado.
É assim que funciona o home banking na internet e uma infinidade de outras aplicações web na qual o acesso é restrito. Você pode ter o aparato mais moderno em termos de tecnologia de segurança protegendo o seu site de um ataque hacker e nem se dar conta de que a vulnerabilidade da sua aplicação esta ali naquele formulário de login. Ele pode ser a porta de entrada para ataques maliciosos através da injeção de SQL.
A injeção SQL ocorre quando um invasor consegue inserir comandos SQL na instrução SQL que você usa no seu script de modo a burlar a restrição e ter acesso ou danificar as informações armazenadas no seu banco de dados.
Como ocorre a injeção SQL
Se você acha que não deve levar a sério a injeção SQL veja esta notícia da INFO:
Abaixo temos um típico formulário de login :
form name="frmLogin" action="login.asp" method="post">
Nome : <input type="text" name="nomeUsuario">
Senha: <input type="text" name="senhaUsuario">
<input type="Enviar">
</form>
Geralmente quando o usuário clicar no botão - Enviar - o script login.asp será executado para efetuar a validação dos dados informados. Abaixo temos um script típico para um arquivo de validação de informações:
<%
dim nomeUsuario, senhaUsuario, consulta
dim conn, rS
nomeUsuario = Request.Form("nomeUsuario")
senhaUsuario = Request.Form("senhaUsuario")
set conn = server.createObject("ADODB.Connection")
set rs = server.createObject("ADODB.Recordset")
consulta = "select count(*) from usuarios where nomeUsuario='" & nomeUsuario & "' and senhaUsuario='" & senhaUsuario & "'"
conn.Open "Provider=SQLOLEDB; Data Source=(local);Initial Catalog=myDB; User Id=sa; senhaUsuario="
rs.activeConnection = conn
rs.open consulta
if not rs.eof then
response.write "Acesso Concedido"
else
response.write "Acesso Negado"
end if
%>
Vamos analisar o que ocorre quando um usuário tenta se autenticar. Vamos supor que ele é usuário cadastrado com nome monk e senha 123456 (só suposição). Ao informar o nome e a senha e clicar no botão enviar o script do arquivo login.asp será executado. Vamos ver como ficou a instrução SQL montada neste caso :
select count(*) from usuarios where nomeUsuario='monk' and senhaUsuario='123456'
Neste caso o usuário monk, senha 123456 será autenticado e terá acesso ao sistema.
Tubo bem ?
Não, se você usa este tipo de instrução SQL nada esta bem pois o texto final da consulta SQL depende inteiramente do conteúdo das variáveis , e , se o conteúdo destas variáveis não for validado e tratado o texto final concatenado poderá ser um SQL adulterado através de uma injeção SQL.
Quer ver ? Vou começar pegando leve. Vamos supor que um hacker decidiu invadir sua página. Uma das primeiras coisas que ele pode fazer é tentar uma injeção SQL , e, vai começar verificando se você esta tratando o apóstrofe (aspa simples: '). Se você não sabe a presença de um caractere de apóstrofe (') no conteúdo de uma variável concatenada no SQL é usada para delimitar strings de texto. Então suponha que ele digite os seguintes dados nos campos nome e senha:
nome = tes'te
senha =
Se você não tratar o apóstrofe vai ocorrer um erro de SQL (incorrect Sintax) ,e , vendo isto o hacker vai ficar mais animado...
Agora vou pegar pesado. Suponha então que a seguir ele digite os seguintes dados
nome = ‘ ; drop table users--
senha =
Este comando irá excluir a tabela users (se ela existir). E se você pensa que é muito difícil o hacker adivinhar o nome da sua tabela vou mostrar mais abaixo que ele pode fazer isto de uma maneira simples. Isto é possível pois o caractere (;) indica o fim de uma consulta e o começo de outra em T-SQL , e , o caractere (--) no final da linha faz com que o scrpt ASP seja executada sem erro.
Continuando o ataque , ele pode também informar o seguinte :
nome = admin
senha
...