domingo, 14 de setembro de 2008

Rootkits: Subverting the Windows Kernel


Este final de semana, terminei de ler este livro. É estranho pensar que tenho este livro a tanto tempo, mas somente mês passado, peguei ele para ler mesmo (antes eu só dava uma espiada no que me interessava e colocava-o de lado novamente).


O livro Rootkits: Subverting the Windows Kernel da Addison-Wesley, como vocês podem imaginar trata sobre Rootkits... em ambiente Windows! (Eu sei, é muita surpresa.).



Um pequeno resumo sobre os 10 capítulos do livro:


1 - Leave No Trace:
Um capítulo com bem cara de introdução mesmo, formando uma história dos rootkits, como surgiram e para o que surgiram. Como são utilizados, e quais métodos um rootkit usa. Explica também o que um rootkit deve fazer e o que ele não deve fazer.
Sempre dando ênfase na parte do "Stealth" (ou sub-reptício), onde um rootkit deve ser acima de tudo indetectável.


2 - Subverting the Kernel:
Uma introdução a programação de drivers, que é como os rootkits são programados. Instalando as bibliotecas de desenvolvimento... preparando o sistema... e fazendo um HelloWorldDriver. Como fazer registros (no Log do windows) para Debug, modos de carregar o seu driver (rootkit) e uma breve amostragem de integração de User-space com Kernel-space. No final, como fazer seu rootkit sobreviver a um reboot da máquina.


3 - The Hardware Connection:
Neste capítulo é demonstrado como um SO trabalha. Explicando conceitos como Rings (para controle de acesso), as diversas tabelas como GDT, LDT, IDT, SSDT e Page Directory, como funcionam as Páginas de Memória, tradução de um endereço virtual para um endereço físico de memória. Fala ainda sobre os registradores de controle, com ênfase no CR0 (Control Register 0) e um pouco sobre sistemas com multi-processadores.


Até aqui foi uma "mega-introdução" para fixar todos os conceitos básicos necessários. A partir daqui o livro começa a entrar mesmo nos rootkits.


4 - The Age-Old Art of Hooking:
Este capítulo começa com Hooks em User-space, demonstrando como trabalhar na IAT (Import Address Table), como fazer Hooks inline (alterando o assembly do início da função, para que ela faça um jump para um outro lugar), injetando DLLs em processos em User-space.
Então começa a parte de Hooks em Kernel-space, utilizando as ja comentadas tabelas SSDT, IDT e a IRP Function Table.
No final, é discutido como fazer uma abordagem mista, utilizando tanto hooks de user-space quanto de kernel-space.


5 - Runtime Patching:
Mostra a técnica de se "patchear" o que esta na memória. A primeira técnica é o patch de desvio, que basicamente desvia a execução de uma função para outro lugar. Em seguida ele explica a técnica de "Jump Templates" na IDT.
Por fim é feito um pequeno comentário (1 página) sobre variações dos métodos.


6 - Layered Drivers:
Este capitulo trabalha em cima de como os drivers funcionam em um SO Windows e como pode-se colocar vários em sequência (em camadas). Este capítulo demonstra como fazer um Sniffer de Keybord e um driver que esconda determinados arquivos utilizando este método, porem o capítulo inteiro é basicamente um "comentando/explicando o código".


7 - Direct Kernel Object Manipulation:
Este capítulo começa apresentando o que é o DKOM, seus benefícios e seus problemas. A partir dai ele demonstra como se comunicar com um Driver a partir do User-space, como esconder processos e Drivers, elevação de privilégio e até como colocar informações falsas no Windows Event Viewer, tudo isso utilizando o DKOM. Apesar de ser um capítulo com bastante código comentado, eu gostei bastante da apresentação do DKOM e das diversas maneiras que ele pode ser utilizado.


Estes quatro capítulos, trataram das técnicas mais utilizadas por rootkits.
Os 3 próximos (e últimos) capítulos, falam sobre "tópicos diversos" na criação de rootkits.


8 - Hardware Manipulation:
Quando comecei a ler este capítulo, estranhei um pouco o fato dele ter sido posto no final do livro, achei que deveria ter sido posto juntamente com os 3 iniciais. Mas conforme você vai lendo, percebe que a manipulação do hardware aqui, se dá para a criação de rootkits altamente específicos, como por exemplo, que fiquem residente na BIOS/Firmware. Os exemplos aqui são bem teóricos e tem como objetivo somente trabalhar a idéia. No meio do capítulo, há uma parte de como interagir com o Keyboard Controller, infelizmente novamente caímos na parte de "comentando/explicando o código"... e coloca código nisso. No final ele fala um pouco (bem pouco mesmo... 1 página. Mas ja da para viajar bastante) sobre micro-programação dos processadores e como hoje a Intel e a AMD tem processadores que permitem a atualização de suas micro-instruções.


9 - Covert Channels:
Aqui é discutido como fazer para que o rootkit consiga se comunicar (via rede) sem que um firewall, NIDS ou coisa do gênero consiga detectar e/ou bloquear o tráfego. É basicamente apresentado como utilizar o TDI e o NDIS, 2 métodos de se criar canais de comunicação, onde o primeiro é em User-space e mais fácil de usar (porem também de ser detectado), enquanto o segundo é em Kernel-space, mais hardcore, a lá Sockets, onde você pode definir cada bit dos pacotes e inclusive terá que implementar sua própria pilha TCP/IP, veja só quanta diversão!
E mais uma vez, temos a grande quantidade de "comentando/explicando o código".


10 - Rootkit Detection:
Aqui é abordado o lado defensivo da coisa, ou seja, como encontrar rootkits. Desde o duro trabalho de ficar vigiando todos os pontos de entrada por onde um rootkit pode ser carregado (e acreditem... são *muitos*), até procurar na própria memória por hooks e processos escondidos.



Este foi um overview dos capítulos do livro. Gostei bastante do livro, aprendi bastante coisa com ele, não me tornei o mestre h4x0rz l33t dos Rootkits, mas acho que meu leque de conhecimento se expandiu. Aprendi diversos conceitos novos e muito interessantes.

Por um lado, não cheguei a programar nenhum dos exemplos dados no livro, nem fazer os downloads indicados. Me mantive no lado teórico da coisa e talvez por isso, tenha me sentido incomodado com o "comentando/explicando o código", que foi a única coisa negativa que vi no livro: muitas páginas com códigos puros, muitos comentários em cima dos códigos, inclusive de códigos que ja estavam comentados pelo seu programador. Mas não que tenha prejudicado muito o livro.

Talvez por eu estar hoje utilizando *muito* mais o linux do que o windows e ter perdido um pouco do interesse pela parte da pesquisa em segurança (apesar de eu achar que ainda está no sangue =]), eu não me empolguei em digitar e executar os exemplos dados, nem em fazer download dos links recomendados (com código-fonte de rootkits).

Mas para qualquer um que goste da plataforma Windows, tenha interesse na área de segurança e programação e ainda de quebra queira aprender como muitas das coisas funcionam por "de baixo dos panos", o livro é uma ótima pedida e eu recomendo =]


Curiosidades:
1) O livro foi feito com papel reciclado.
2) A capa do livro, muito bonita, foi feita por um brasileiro.

Nenhum comentário: