Escolar Documentos
Profissional Documentos
Cultura Documentos
Engenharia Reversa e
Análise de Malware
Ronaldo Pinheiro de Lima
crimesciberneticos.com@gmail.com
Aula 09
6. Windows Internals
3 Aula 09
Transição entre níveis de privilégio
habilidade de mudar de um Ring para outro
dinamicamente, de acordo com as necessidades
Ring 3 Ring 0
código user requisita recurso kernel mode
instruções utilizadas:
SYSENTER
SYSCALL
interrupção INT 0x2E
Ex.: aplicação que necessita acessar o hardware,
controle transferido ao driver (Ring 0) e retorna.
4 Aula 09
Kernel Mode
código do sistema operacional (também drivers)
user apps passam parte do tempo em kernel mode
ambiente extremamente volátil
todo código possui os mesmos direitos e privilégios
endereços de memória não são separados (≠ user)
programas podem acessar memória dos outros
ambiente complicado e livre (faz o que quer)
não há validações e controles de erros
instrução inválida = blue screen of death
ambiente poderoso para malwares
5 Aula 09
Kernel Mode (cont.)
malware pode interferir em programas de segurança * KS
auditorias do SO não se aplicam em kernel mode
maioria dos rootkits rodam em kernel mode
desenvolver nesse ambiente é mais difícil
User Mode
aplicações executam no nível de privilégio do usuário
cada processo tem própria memória, recursos, permissão
caso trave, windows pode reivindicar os recursos e
finaliza
não pode manipular hardware diretamente
código user só pode manipular kernel com interfaces
6 Aula 09
Windows APIs
application programming interface (API)
funções disponibilizadas pelo SO para aplicações se
comunicarem com o SO
Windows tem dois tipos de APIs:
Win32 API – user mode
Native API – kernel mode
Win32 API validam argumentos e passa para a
Native API
Native API chama funções internas do kernel
Native API possui pouca documentação
7 Aula 09
Windows APIs
8 Aula 09
Win32 API
interface de programação para aplicações Windows
nas linguagens alto nível geralmente não é acessada diretamente,
funções próprias fazem a chamada
não é muito amigável para o programador
possui 4 DLLs principais:
kernel32.dll: file system, dispositivos, processos, memória
advapi32.dll: componentes do windows, registro, usuários
user32.dll: janelas e elementos gráficos: botões, ponteiro
mouse, etc.
gdi32.dll: serviços gráficos de baixo nível: desenhar linha,
bitmap, etc
9 Aula 09
Win32 API (cont.)
algumas funções dessas DLLs são implementads em user mode
muitas funções requerem serviços de kernel mode (transição de
privilégio)
10 Aula 09
Native API
XP é baseado no kernel do NT
Native API é uma interface para o kernel windows NT
Win32 API é uma camada acima da Native API
Native API não possui serviços relacionados a gráficos
disponibiliza serviços para sistema de I/O, gerenciador de memória, etc
programas user mode não devem chamar a Native API diretamente
(teoria)
quebra de compatibilidade com Win9x (?)
motivo para não documentação
não expor a Native API assegura a Microsoft revisá-la e alterá-la sem
afetar camadas acima (Win32 API)
documentação externa: http://undocumented.ntinternals.net/.
11 Aula 09
Native API (Cont.)
Native API é um conjunto de funções exportadas por:
NTDLL.DLL (user mode)
NTOSKRNL.EXE (kernel mode)
12 Aula 09
Native API (Cont.)
chamá-la diretamente é atrativo para os malwares
pode ser mais furtivo e evadir programas de segurança mal projetados
exemplo: programa de segurança que monitora somente Kernel32.dll,
o malware pode chamar funções da ntdll.dll.
funções da Native API sempre iniciam com um dos prefixos:
Nt (NtCreateFile, NtWriteFile)
Zw (ZwCreateFile, ZwWriteFile)
os dois se comportam da mesma maneira
não possuem diferenças significativas
13 Aula 09
Lab 06-01
Entendendo as APIs do Windows na prática
Material necessário:
- Máquina virtual com Windows XP 32-bit
- IDA Pro Free
- WinDbg
http://rxwen-blog-
stuff.googlecode.com/files/windbg_6.12.0002.633_x86.zip
14 Aula 09
Obrigado!
15 Aula 09