http://www.risesecurity.org Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org



Documentos relacionados
Ataques Polimorficos

How to write Shellcodes por Luiz Fernando Camargo

Linguagem de Montagem

Projeto 1 - Bootloader

Aula 14: Instruções e Seus Tipos

Linguagem de Montagem 2. Operações e Operandos

Sistemas Operacionais. Prof. André Y. Kusumoto

Descrição e análise da implementação em Assembly MIPS da função itoa

Organização de Computadores Como a informação é processada?

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

Nível da Arquitetura do Conjunto das Instruções

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

x86 Assembly Mini-Course

Assinaturas de Ataques. Técnicas de Evasão. Rodrigo Rubira Branco

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Organização de Computadores 1

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Guia Rápido AxCrypt. Software para criptografia e deleção segura de arquivos

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20

Gerenciamento de memória

Arquitetura de Computadores. Linguagem de Máquina

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

Introdução à Arquitetura e Linguagem Assembly de Processadores IA-32

Algoritmos Estruturas Seqüenciais. José Gustavo de Souza Paiva

O Sistema foi inteiramente desenvolvido em PHP+Javascript com banco de dados em MySQL.

Sistemas Operacionais Arquivos. Carlos Ferraz Jorge Cavalcanti Fonsêca

Algoritmos e Programação Aula 01 Introdução a Computação

Introdução Modelo OSI Sistemas de firewall Bridge x roteamento Atuação de um IPS Funcionamento do Hogwash Instalação do Hogwash Configuração do

Métodos de Sincronização do Kernel

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

armazenamento (escrita ou gravação (write)) recuperação (leitura (read))

Firewall Iptables. Professor: João Paulo de Brito Gonçalves. Campus - Cachoeiro Curso Técnico de Informática

Sistema de Proteção para Servidores de Jogos Online Contra Softwares Clientes Não Oficiais

Davidson Rodrigo Boccardo

Acessando o SVN. Soluções em Vendas Ninfa 2

Introdução. A Informação e sua Representação (Parte II) Universidade Federal de Campina Grande. Unidade Acadêmica de Sistemas e Computação

Segurança em Sistemas Web. Addson A. Costa

Principais códigos utilizados. Codificação. Código binário puro. Codificação binária. Codificação Binária. Código Binário puro e suas variantes

Laboratório de Hardware

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Unidade 5: Sistemas de Representação

Bem-vindo ao tópico sobre administração de listas de preços.

28/3/2011. Família Intel 80x86. Arquitetura dos Processadores Intel 80x86

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

MINISTÉRIO DA EDUCAÇÃO

Neste tópico, abordaremos a funcionalidade de segurança fornecida com o SAP Business One.

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

3 A Biblioteca para Implementação de Máquinas Virtuais

A declaração de uma variável vel define o seu tipo. O tipo do dado define como ele será: Armazenado na memória. Manipulado pela ULA.

46. Para aumentar em 25% o tamanho da fonte da palavra continente, é

Curso PHP Aula 06. Bruno Falcão

Programação de Computadores I. Linguagem C Arquivos

PROVA INFORMÁTICA BANCO DO BRASIL 2007

DDoS: como funciona um ataque distribuído por negação de serviço

***TITIO.INFO*** <<INTRODUÇÃO AO PROCESSAMENTO DE DADOS>> HARDWARE É A PARTE FÍSICA DA INFORMÁTICA SOFTWARE É A PARTE LÓGICA

O aplicativo de desktop Novell Filr é compatível com as seguintes versões do sistema operacional Windows:

Manual de Instalação da Plataforma Scorpion. 1. Como conectar a Plataforma Scorpion com a Xilinx Starter-3E kit

Disciplina: Laboratório de Circuitos Digitais

Ambiente de desenvolvimento de Programação Assembly MCU 8051 IDE

Sistema de Reserva de Laboratório Trabalho Semestral Versão 1.0

Algoritmos DCC 119. Introdução e Conceitos Básicos

7. Instruções lógicas, de deslocamento e de rotação

PROGRAMAÇÃO II 3. FILA DINÂMICA

Computação II Orientação a Objetos

String em C++ Verificando o tamanho da string

Memória cache. Prof. Francisco Adelton

Cópia de Segurança e Recuperação Manual do utilizador

ALGORITMOS MEMÓRIA, VARIÁVEIS E CONSTANTES, OPERADORES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Circuitos Seqüenciais

SIE - SISTEMA DE INFORMAÇÕES PARA O ENSINO CADASTRO DE FUNCIONÁRIOS

Conjunto de instruções e modos de. aula 4. Profa. Débora Matos

LINGUAGEM C. Estrutura básica de um programa

Arquitetura de Sistemas Operacionais

Pipelining - analogia

10/02/2015. Introdução. Podemos classificar os tipos de dados a serem processados em dados e instruções Dados: Algoritmos e Lógica de Programação

SERVIDORES REDES E SR1

Librix. A LIBERDADE DO LINUX COM A QUALIDADE ITAUTEC Guia de referência

Paralelismo a Nível de Instrução

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Submissão Autenticada de Ficheiros ao SIGEX

Informática. Aula 04/12. Prof. Márcio Hollweg. Visite o Portal dos Concursos Públicos

Gerenciador de Boot Simples

Programação em papel quadriculado

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

Sumário INTRODUÇÃO 3 TELA DE APRESENTAÇÃO 3 DESENHANDO E TRANSFORMANDO 29 FERRAMENTA FORMA 29 PREENCHIMENTOS E CONTORNOS 36

Manual de Operação. Impressora Térmica Não fiscal ZP220 UBT 1-12

Introdução à Engenharia de Computação

Relatório Trabalho Prático 2 : Colônia de Formigas para Otimização e Agrupamento

PHP (PHP Hypertext Preprocessor)

Manual do Usuário. Protocolo

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

OFICINA DE POWER POINT

Transcrição:

Ataques Polimórficos Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org

A idéia - Detectores de intrusos utilizam-se de assinaturas de ataques para identificação dos mesmos - Sistemas de anti-vírus fazem uso das mesmas técnicas para identificar códigos viróticos - Os escritores de vírus adicionaram diversas técnicas de polimorfismo aos vírus, evitando-se assim sua detecção e iniciando um ciclo de combate onde novas técnicas de segurança surgem e novas formas de burlarem as mesmas vem logo a seguir - Por quê não fazer o mesmo contra detectores de intrusos?

O que veremos? Esta apresentação não enfocará em outras técnicas de evasão de detectores de intrusos, tais como fragmentação de códigos de ataques e inversões em camadas de aplicações, apenas no polimorfismo Quando aqui for citado detector de intrusos, refere se a qualquer tipo de sistema que detecte a intrusão, seja ele um IPS (detector de intrusos inline) ou um IDS, ou até mesmo um Firewall com recursos de bloqueio de ataques (tais como os existentes no Checkpoint)

Assinaturas Chama se assinatura de um ataque qualquer tipo de característica que este ataque possua que permita que o mesmo seja detectado Tais assinaturas podem cobrir diversos aspectos (como característica do tráfego de rede gerado, padrões de protocolo, tamanho das estruturas de dados e análise do conteúdo para localização de código malicioso) Cada uma destas características pode ser modificada por técnicas diferentes e normalmente são complementares para os diversos tipos de ataques (já que apenas uma delas muitas vezes não mostra se suficiente para determinar um ataque)

Quem usa assinaturas? http://www.risesecurity.org

Polimorfismo Capacidade de se existir em múltiplas formas Consiste em ter se um código capaz de se auto modificar quando executado Devido a esta auto modificação na execução, torna se impossível detectar o código malicioso quando passa pela rede (evasão de detectores de intrusos) ou quando está armazenado em um arquivo no computador (evasão de softwares anti vírus)

Nivelando conhecimentos A abordagem mostrará a arquitetura Intel x86 onde todos os registradores são de 32 bits e podem ser divididos em sub secões de 16 ou 8 bits 32 bits 16 bits 8 bits 8 bits EAX AX AH AL EBX BX BH BL ECX CX CH CL EDX DX DH DL

Nivelando conhecimentos (cont...) "Inline Assembly" AT&T Nome dos registradores é precedido por % MOV Copiar valor para um registrador mov %0x8, %al PUSH Colocar dados na Stack push $0x0 POP Carregar dados da Stack para um registrador pop %edx INT Interrupção via software 0x80 passa o controle para o kernel int $0x80

Como um código polimórfico se parece? -------------------- call decoder -------------------- shellcode -------------------- decoder -------------------- jmp shellcode --------------------

Como funciona O decoder é responsável por realizar o processo inverso utilizado para codificar o seu shellcode. Este processo pode ser: - ADD - SUB - XOR - SHIFT - Criptografia (ex: DES)

Encriptando o shellcode A criptografia do shellcode não precisa utilizar um algoritmo real de criptografia e sim um método simples qualquer, pois a análise do detector de intrusos não tem como ser profunda (imagine ele realizando diversos testes de XOR com todos os valores possíveis, depois todos de ADD, etc...) Pega se o shellcode original e passa se ele por uma rotina em C ou ASM básica que gera o shellcode criptografado Após isso, concatena se o shellcode criptografado ao respectivo decoder e têm se o shellcode final (agora polimórfico)

Como funciona call decoder shellcode:.string shellcode_encriptado decoder: xor %ecx, %ecx mov sizeof(shellcode_encriptado), %cl pop %reg looplab: mov (%reg), %al - manipula AL conforme a criptografia - mov %al, (%reg) loop looplab jmp shellcode http://www.risesecurity.org

Como localizar o shellcode na memória? Quando uma chamada CALL é realizada, o próximo endereço (no caso da estrutura apresentada, o endereço do shellcode criptografado, é armazenado na stack (para permitir o retorno da chamada para o próximo código a ser executado)). Neste caso, o decoder pode facilmente pegar o endereço do shellcode fazendo um pop para um registrador qualquer. Então basta o decoder manipular os bytes do shellcode e fazer um jmp para o endereço do mesmo.

Mudando a estrutura mostrada Após entender o funcionamento do código polimórfico e do decoder, basta concatenar o shellcode criptografado ao fim do decoder. Modificar o byte relativo ao mov sizeof(shellcode_encriptado), %cl. Tomar o cuidado de evitar qualquer zero byte (0x00) no opcode do decoder e do shellcode encriptado, porque o sistema entenderá como fim da string.

Dificuldades Evitar badchars (\r \t \0) Gerar shellcodes alphanuméricos (filtros isalpha()) Eliminar constantes em decoders (podem ser detectados) Manter decoders para várias plataformas e sistemas Inserir instruções do nothing no meio e em partes do código final gerado Otimizar o tamanho do decoder

SCMorphism A intenção não é apenas encriptar o shellcode original com um valor randômico e inserir o decoder. A ferramenta também possui diversos tipos de decoders Pode gerar decoders XOR/ADD/SUB/ByteShitf para qualquer lado/inversão de bytes/inc/dec/alphanuméricos. Os decoders são divididos em peças (idéia de zillion@safemode.org). Através destas peças um mesmo decoder pode se parecer de diversas formas e também facilita a inserção de instruções do nothing no decoder.

SCMorphism Usage: -f <shellcode file> <var name> <shellcode lenght> -t <type> -n <number>. Value used in single decoder operations. -x <number>. Value used when xor numbers. -a <number>. Value used when add numbers. -u <number>. Value used when sub numbers. -r <number>. Value used into rotate operations -e --> Execute the generated shellcode -s <filename> --> Stdout form: to a file, if not gived, use console -E <varname> --> Stdout form: ENV var: varname -b <badchar1,badchar2,badcharn> --> Deletee this chars from shellcode -c <archfile>,<osfile>,<typefile> -A <nopsize in bytes> --> Gen. random alphanumeric junks only -j <nopsize> --> Size of NOP include in the shellcode -T <type> --> Type of NOPs: -L <location> --> Location of NOPs: -v --> Version and Greetz information -h --> Help stuff http://www.risesecurity.org

SCMorphism - Benefícios As instruções do nothing utilizadas e o decoder randomicamente gerado tornam impossível de se escrever assinaturas para a ferramenta (ou o admin teria milhões de falsos positivos). Quando a função de codificação é chamada, ela gera um número randômico para ser usada com a peça do decoder escolhida. O número escolhido será utilizado para performar as operações sobre os shellcodes Caracteres definidos como ruins (BADCHARS) serão removidos do código gerado, permitindo assim passar por outros filtros de caracteres http://www.risesecurity.org

Badchars e Do nothing Caso o usuário não escolha nenhum badchar, o sistema usará os famosos (\r \t \0 obrigado para Ramon de Carvalho Rise Security). Caracteres definidos como ruins (BADCHARS) serão removidos do código gerado, permitindo assim passar por outros filtros de caracteres. A ferramenta possui um array de instruções do nothing que não atrapalham na execução do shellcode (obrigado novamente ao Ramon pela ajuda na população deste array). Este array é usado para gerar randomicamente as instruções para o meio do decoder, tornando as possibilidades de combinações gigantescas.

Detecção Algumas técnicas vem sendo desenvolvidas para se detectar este tipo de ataque A maioria delas conta com emulação de código (difícil de se implementar, excessivamente lenta e ainda com muitos problemas de plataforma) ou então verificação em busca de instruções de máquina válidas (para tentar detectar o decoder) Testes com decoders metamórficos (onde até mesmo o decoder se auto modifica) mostram se eficazes contra a segunda classe destes sistemas e loopings infinitos (pulados pela execução normal do código) acabam dificultando a primeira classe http://www.risesecurity.org

Praticando Bind shellcode simples Testando o mesmo shellcode polimórfico Exploit sendo detectado via checagem de instruções Exploit sendo detectado via emulação de código

Referências http://cs.southwesternadventist.edu/ http://rosec.org http://m00.void.ru http://www.infosecwriters.com/text_resources/pdf/basics_of_shellcoding.pdf http://www.securityfocus.com/infocus/1768 http://www.priv8security.com http://www.intel.com/design/pentium4/documentation.htm#pap http://www.phrack.org http://www.kernelhacking.com/rodrigo

Fim! Será mesmo? Dúvidas? Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@risesecurity.org