Artigo SQL Injection

4
 SQL Injection: Uma Injec ¸  ˜ ao de Infor mac ¸  ˜ ao Daniel S. Camargo 1 , Andr ´ e Nunes 1 , Mateus D. Tonelli 1 1 Departamento de Ci ˆ enci a da Computac ¸ ˜ ao – Universidade do Estado de Santa Catarina (UDESC) Joinville – SC – Brazil daniel@c olmeia.u desc.br, dekonune [email protected] om, mateusto nelli@hot mail.com  Resumo.  Atualmente, com a necessidade da internet, estamos cada vez mais  pr opensos  ` a ataques maliciosos oriundos de tentativas hackers. P ara nos pro- tegermos um pouco mais, conheceremos neste artigo uma t´ ecnica conhecida como SQL Injection, e n ˜ ao obstante tamb ´ em veremos uma forma simples de se  pre caver destes ataques. 1. Int roduc ¸  ˜ ao Atualmente  ´ e comum termos not´ ıcias de novas t ´ ecnicas de hackear um site na internet, principalmente os que possuem servic ¸os que seja seja pago. Generalizand o, basta um site exi gir algum cadast ro, que se torna alvo. Mas dentre tanta s novas t ´ ecnicas, ainda existe uma velha con hecida ameac ¸a: o SQL In jection. Alguns programadores ainda teimam em ignorar sua potencialidade, possibili- tando que nova s aplicac ¸ ˜ oes possam ser facilmente invadidas, colocando em risco n˜ ao somente a seguranc ¸ a de um sist ema, mas tamb ´ em a integridade de seus usu ´ arios. 2. O que  ´ e SQL Injection? SQL Injection  ´ e um tipo de ameac ¸a de seguranc ¸ a que se apr oveita de falhas em si stemas que interagem com bases de dados via Linguagem de Consulta Estruturada (SQL) na web. Os al vos dessa “i nje c ¸ ˜ ao” s ˜ ao aplicativos normalmente escritos em linguagem PHP, ASP , JSP , CGI, d entre outr as linguagens utilizad as para pr ogramar apl icac ¸ ˜ oes de internet, que rodam em seu navegad or .[Securiteam 2002] 3. Como ocorre a invas  ˜ ao? A injec ¸ ˜ ao de SQL ocorre quando o atacante consegue inserir uma s ´ eri e de inst ruc ¸ ˜ oes SQL dentro de uma consulta (query) atrav ´ es da manipulac ¸ ˜ ao das entrada de dados de uma aplica c ¸ ˜ ao, confundindo, assim, com o c ´ odigo nativo do programa. ´ E uma pr ´ atica comum os sites pedirem um cadastro, e criar-lhe um login, dando acesso a  ´ areas restritas e especiais. Quando esse site tem uma  ´ area restrita, logo necessita de um login e senha para o usu ´ ario de admini strad or . O mais comum  ´ e ter uma tabela chamada Users com Usu´ ario, Senha, Nome e Admin (os nomes dos campos podem mu- dar, mas suas func ¸ ˜ oes s ˜ ao as mesmas ). Send o o Admin um ag indic ando se o Usu ´ ario tem o direito de acesso a cliques extras, tipo incluir/editar/deletar. Com isso, cria-se duas  ´ areas de digi tac ¸ ˜ ao sendo uma para Login e outra para Senha; esses campos s˜ ao enviados para um script .asp, que validar´ a ou n˜ ao o login in- formado. Dependendo ele ir ´ a dar o direito de Administrador. [Wikipedia 2010]

Transcript of Artigo SQL Injection

SQL Injection: Uma Injecao de Informacao Daniel S. Camargo1 , Andr Nunes1 , Mateus D. Tonelli1 e1

Departamento de Ci ncia da Computacao Universidade do Estado de Santa Catarina (UDESC) e Joinville SC [email protected], [email protected], [email protected]

Resumo. Atualmente, com a necessidade da internet, estamos cada vez mais propensos a ataques maliciosos oriundos de tentativas hackers. Para nos pro` tegermos um pouco mais, conheceremos neste artigo uma t cnica conhecida e como SQL Injection, e n o obstante tamb m veremos uma forma simples de se a e precaver destes ataques.

1. Introducao Atualmente e comum termos notcias de novas t cnicas de hackear um site na internet, e principalmente os que possuem servicos que seja seja pago. Generalizando, basta um site exigir algum cadastro, que se torna alvo. Mas dentre tantas novas t cnicas, ainda existe e uma velha conhecida ameaca: o SQL Injection. Alguns programadores ainda teimam em ignorar sua potencialidade, possibilitando que novas aplicacoes possam ser facilmente invadidas, colocando em risco n o a somente a seguranca de um sistema, mas tamb m a integridade de seus usu rios. e a

2. O que e SQL Injection? SQL Injection e um tipo de ameaca de seguranca que se aproveita de falhas em sistemas que interagem com bases de dados via Linguagem de Consulta Estruturada (SQL) na web. Os alvos dessa injecao s o aplicativos normalmente escritos em linguagem PHP, a ASP, JSP, CGI, dentre outras linguagens utilizadas para programar aplicacoes de internet, que rodam em seu navegador.[Securiteam 2002]

3. Como ocorre a invas o? aA injecao de SQL ocorre quando o atacante consegue inserir uma s rie de instrucoes e SQL dentro de uma consulta (query) atrav s da manipulacao das entrada de dados de uma e aplicacao, confundindo, assim, com o c digo nativo do programa. o E uma pr tica comum os sites pedirem um cadastro, e criar-lhe um login, dando a acesso a areas restritas e especiais. Quando esse site tem uma area restrita, logo necessita de um login e senha para o usu rio de administrador. O mais comum e ter uma tabela a chamada Users com Usu rio, Senha, Nome e Admin (os nomes dos campos podem mua dar, mas suas funcoes s o as mesmas). Sendo o Admin um ag indicando se o Usu rio a a tem o direito de acesso a cliques extras, tipo incluir/editar/deletar. Com isso, cria-se duas areas de digitacao sendo uma para Login e outra para Senha; esses campos s o enviados para um script .asp, que validar ou n o o login ina a a formado. Dependendo ele ir dar o direito de Administrador. [Wikipedia 2010] a

4. Vendo um pouco do c digo oO Script l da seguinte maneira: e Pega o usu rio e senha informados no formul rio cUser = trim(request(usuario)) a a cSenha = trim(request(senha)) Verica no banco de dados se o usu rio e senha conferem (supondo que o banco a j esteja aberto com o nome de objConn): SQLOpen = select usuario, senha, nome, a admin from Users where usuario= & cUser & and senha= & cSenha & objRS.Open SQLOpen, objConn Verica se achou um usu rio com o login e senha informados if not objRS.bof then a response.write Bem vindo & objRS.elds(nome) & ! else response.write Login inv lido. a end if [Netpoint 2008] Desta maneira o banco funcionar normalmente, abrindo apenas quando o nome e a a senha se coincidirem e dando os privil gios apenas para as contas Admin demonstrando e que n o h seguranca nenhuma nesse banco de dados. a a Para concatenarmos uma string dentro de outra, devemos usar aspa simples, inv s e de aspa dupla, pois a aspa dupla e para a string mestra, e a aspa simples e para a string interna. select usuario, senha, nome, admin from Users where usuario= & cUser & and senha= & cSenha & Ap s o preenchimento caria do seguinte modo: select usuario, senha, nome, o admin from Users where usuario=Andre and senha=123456 E trocado as vari veis pelo login e senha digitados, dentro das aspas simples que a signica onde comeca e onde termina o nome e a senha. Se for digitado da seguinte maneira: andre o banco vai computar o nome da primeira aspa at a pr xima, como foi digitado no nome ele vai usar a parte do nome at e o e onde se localiza a aspa, logo o resto ser c digo SQL. a o Analisando, vemos que quando formos comparar o campo usu rio, abrimos uma a aspa simples, colocamos o conte do and e fechamos a aspa simples. Para o SQL, a u comparacao terminou a, o que vem depois, deveria ser comandos. Mas n o era. Era a a continuacao do username, a palavra re e mais uma aspa simples, que deveria estar fechando a primeira, mas na realidade est abrindo uma nova string no SQL, e como n o a a e comparado com nada, o SQL retorna erro de programacao. Mas poderamos nos aproveitar desse m todo da seguinte maneira: e select usuario, senha, nome, admin from Users where usuario= or 1 and senha=123456 Lendo o comando, seria a mesma coisa que falar pro SQL: me retorne o usu rio a que seja igual a vazio OU 1. Lembrando que 1 em inform tica e a mesma coisa que a True (verdadeiro). Lendo novamente: Me retorne o usu rio que seja igual a vazio (n o a a existe nenhum) OU verdadeiro (verdadeiro e verdadeiro, ent o encontramos). Nisso, a a ` tabela pega todos os usu rios, pois todos d o verdadeiro. N o s o iguais a vazio, mas o 1 a a a a garante que todos sejam v lidos. a

Com este m todo acessamos o primeiro usu rio do banco, que quase sempre e o e a usu rio que criou o banco e que tem direitos de Administrador. a Utilizando esse m todo no campo da senha podemos ter acesso a qualquer usu rio e a tendo apenas o Login., Pois a senha ele ver como verdadeiro. a Para ter apenas acesso a algum banco de dados mesmo n o necessitando ser Ada min, basta colocar no campo Login usando o mesmo m todo e no campo Senha coloe camos uma senha que seja comum, como exemplo 123456 onde ele ir procurar um a usu rio at que essa senha seja aceita e vai acessar com este usu rio. a e a Caso o banco utilize no local do Login o e-mail, este m todo n o funciona, pois e a ele necessita de uma validacao no formato de e-mail. A string que passa pelos e-mails e: [email protected]=.11 Dessa forma, caso veriquem se existe @, esta string passar pois tem 1 @ s . Se vericarem se tem ala o a guma coisa antes da @ ela e v lida e tamb m passa. Se vericarem de tr s pra frente e a na string procurando por uma TLD v lida (com um ponto na terceira ou quarta casa, de a tr s pra frente), encontrar o o ponto (.) na terceira casa, que signica uma TLD brasileira a a (.br) ou de outros pases. E se ainda vericarem mais pra tr s, por domnios, encon a trar o outros dois pontos, o que torna esse e-mail pertencente a um domnio com suba domnio.[Gomes 2004]

5. Estamos todos vulner veis? a Infelizmente a resposta e sim, mas para evitar essa falha no c digo foi desenvolvida uma o funcao de validacao dos dados digitados nos formul rios que retira caracteres e palavras a ` equivalentes a comandos SQL: [Goalti 2006] function validacampo($campo){ $campo =addslashes(fgetss(trim(preg replace(sql regcase(from select|insert|delete|update| where|drop all|drop table|index|alter|create|references|reload|shutdown|process|le|.. | |# ||)/,, $campo)))); return $campo } Por m durante alguns testes para impedir a injecao SQL observou-se que o probe lema estava nos ap strofos. Remov -los projudicaria nomes de usu rios que os cono e a tivessem, assim como seria possvel remover alguma palavra importante caso coincidisse com alguns dos comandos citados na funcao

6. Conclus o aMesmo com todos os patches, Service Packs e correcoes existentes, os nossos sistemas s o falhos porque foram desenvolvidos sem levar em consideracao a seguranca, anal, e a muito mais f cil plantar arvores do que fazer enxertos. a

ReferencesGoalti, L. E. (2006). Artigo: Disponibilizacao da ferramenta de teste Poke-Tool como aplicac ao Web. Universidade Metodista de Piracicaba, 1th edition.

Gomes, M. R. (2004). Revista H4CK3R. Editora Digerati, 4th edition. Netpoint (2008). SQL Injection. http://www.netpoint.com.br/ajuda/index.php?title=sql injection edition. Securiteam (2002). SQL Injection Walkthrough. http://www.securiteam.com/securityreviews/5dp0n1p76e.html edition. Wikipedia (2010). Injecao de SQL. http://pt.wikipedia.org/wiki/sql injection edition.