Liber 000 - Astrum Argentum
Liber 000 - Astrum Argentum Liber 000 - Astrum Argentum
Compreendendo o netfilter: Quando comecei a ler do documento do bioforge, tinha uma expectativa, que foi muito mais do que suprida! Trabalhar com o netfilter abre todo um leque de opções em relação ao hacking, e agiliza muito o desenvolvimento da camada de networking dentro de um rootkit. Basicamente ele trabalha muito parecido com o iptables, então se vc conhecer um pouco do iptables, de linguagem C, e de desenvolvimento de módulos, vc ja esta bem encaminhado e não terá muitos problemas para compreender o que vou mostrar aqui. Bom algo interessante de se saber é que quando vc esta trabalhando com o iptables, vc ja esta mexendo com o netfilter mas nem sabe hehehehehe, entre outras coisas o iptables constrói e insere hoks dentro do netfilter da mesma forma que faremos aqui. :) Primeiro pra quem não conhece o iptables, vamos responder uma pergunta que talvez estejam se fazendo: O que é uma hok? Uma hok(neste caso), é um momento em que o pacote pode ser analisado e uma função que é disparada para a analise ou alteração do pacote. Um exemplo é o seguinte (válido para ipv4): Um pacote atravessando o Netfilter: --->[1]--->[ROUTE]--->[3]--->[4]---> | ^ | | | [ROUTE] v | [2] [5] | ^ | | v [ROUTE] | Fig.1 Arquitetura do netfilter. Peguei este desenho "emprestado" do site do netfilter.org hehehehe :D. Bom podemos considerar 5 hoks neste desenho: 1. NF_IP_PREROUTING = Esta primeira "hok" é conhecida como NF_IP_PRE_ROUTING, como vc ja deve ter notado pelo próprio nome, ela é disparada logo após a checagem de validade do pacote(checksums, um 110
pacote não-promiscuo, etc), e antes do roteamento do mesmo. Acontece neste momento o roteamento do pacote, a decisão se ele é um pacote destinado a esta máquina ou se este pacote irá apenas atravessar a máquina passando para outra interface. 2. NF_IP_LOCAL_IN = Caso o pacote sejam destinados a esta máquina, este pacote é considerado como um pacote entrante, e é tratado pela hok de NF_IP_LOCAL_IN. 3. NF_IP_FORWARD = Caso o pacote não seja endereçado na máquina mas sim routeado pela mesma repassado para outra interface(haverá repasse do pacote), ele será tratado por esta hok NF_IP_FORWARD. 4. NF_IP_POST_ROUTING = Caso o pacote esteja sendo repassado, esta hok será disparada antes dele ser enviado novamente a rede. 5. NF_IP_LOCAL_OUT = Caso o pacote seja gerado pela máquina, esta hok será disparada antes que ele seja enviado para a rede, fiz uma pequena alteração no desenho, como no próprio site do netfilter diz (http://www.netfilter.org/documentation/HOWTO//netfilter-hacking- HOWTO-3.html ) o roteamento acontece antes desta hok, para obter o endereço de origem do pacote, e fazer outras operações. Podemos conhecer as hoks do netfilter olhando em linux/netfilter_ipv4.h, vamos dar uma olhadinha num pedaço deste header: /* IP Hoks */ /* After promisc drops, checksum checks. */ #define NF_IP_PRE_ROUTING 0 /* If the packet is destined for this box. */ #define NF_IP_LOCAL_IN 1 /* If the packet is destined for another interface. */ #define NF_IP_FORWARD 2 /* Packets coming from a local process. */ #define NF_IP_LOCAL_OUT 3 /* Packets about to hit the wire. */ #define NF_IP_POST_ROUTING 4 A função responsável pela nossa hok: Vcs viram que podemos manipular um determinado pacote em certos momentos dentro do netfilter, mas pense bem como vamos manipula-lo? Bem quando chegar neste momento o netfilter "chamará" automaticamente uma função que registraremos dentro de nossa hok. Vamos ver a declaração desta nossa função, conforme ~/linux/netfilter.h: typedef unsigned int nf_hokfn(unsigned int hoknum, 111
- Page 59 and 60: de Crowley, não exatamente a tradu
- Page 61 and 62: shellcodes, mas não quer dizer que
- Page 63 and 64: } shellcode/cwrite.c OBS: Sempre d
- Page 65 and 66: Vamos analisar o que fizemos e comp
- Page 67 and 68: da próxima instrução que no caso
- Page 69 and 70: Provavelmente você verá uma mensa
- Page 71 and 72: Type "show copying" to see the cond
- Page 73 and 74: oot@motdlabs:~/IP_FIX/shellcode# gc
- Page 75 and 76: * MotdLabs . * Compilação: # gcc
- Page 77 and 78: oot@motdlabs:~/IP_FIX/shellcode# gc
- Page 79 and 80: * Criamos um ponteiro para uma fun
- Page 81 and 82: 0x8048317 : sub $0x8,%esp 0x804831a
- Page 83 and 84: in/sh; */ (0). */ main() { "\x89\xe
- Page 85 and 86: Lembre-se: Se você tiver alguma d
- Page 87 and 88: */ "push $0x6E69622F \n" /* ...a ou
- Page 89 and 90: main() { "\x89\xe1" /* mov %esp,%ec
- Page 91 and 92: */ "push $0x722F3A3A \n" /* ...nova
- Page 93 and 94: main() { "\x68\x3a\x30\x3a\x30" /*
- Page 95 and 96: "mov $0x66, %al \n" "int $0x80 \n"
- Page 97 and 98: Y O G A D I G I T A L Por Frater Ar
- Page 99 and 100: Preparação da Mente: Pratyahara -
- Page 101 and 102: 1a. Invocação : access denied for
- Page 103 and 104: Comando Url: http://www.google.com/
- Page 105 and 106: IPTables : é o atual firewall do G
- Page 107 and 108: extremamente útil ao administrador
- Page 109: Por: N E T F I L T E R + L K M S I
- Page 113 and 114: ... /* Network layer header */ unio
- Page 115 and 116: Blz, agora conhecemos o segundo arg
- Page 117 and 118: int hoknum; Blz quase terminada nos
- Page 119 and 120: substituida pelas flags -DMODULE e
- Page 121 and 122: Mãos a obra!! #define __KERNEL__ #
- Page 123 and 124: #include #include #include #incl
- Page 125 and 126: Por Frater Deny M A N I F E S T O F
- Page 127 and 128: No Novo Aeon, o Hacking emerge como
pacote não-promiscuo, etc), e antes do roteamento do mesmo.<br />
Acontece neste momento o roteamento do pacote, a decisão se ele é um<br />
pacote destinado a esta máquina ou se este pacote irá apenas atravessar<br />
a máquina passando para outra interface.<br />
2. NF_IP_LOCAL_IN = Caso o pacote sejam destinados a esta máquina,<br />
este pacote é considerado como um pacote entrante, e é tratado pela hok<br />
de NF_IP_LOCAL_IN.<br />
3. NF_IP_FORWARD = Caso o pacote não seja endereçado na máquina<br />
mas sim routeado pela mesma repassado para outra interface(haverá<br />
repasse do pacote), ele será tratado por esta hok NF_IP_FORWARD.<br />
4. NF_IP_POST_ROUTING = Caso o pacote esteja sendo repassado, esta<br />
hok será disparada antes dele ser enviado novamente a rede.<br />
5. NF_IP_LOCAL_OUT = Caso o pacote seja gerado pela máquina, esta hok<br />
será disparada antes que ele seja enviado para a rede, fiz uma pequena<br />
alteração no desenho, como no próprio site do netfilter diz<br />
(http://www.netfilter.org/documentation/HOWTO//netfilter-hacking-<br />
HOWTO-3.html ) o roteamento acontece antes desta hok, para obter o<br />
endereço de origem do pacote, e fazer outras operações.<br />
Podemos conhecer as hoks do netfilter olhando em linux/netfilter_ipv4.h,<br />
vamos dar uma olhadinha num pedaço deste header:<br />
/* IP Hoks */<br />
/* After promisc drops, checksum checks. */<br />
#define NF_IP_PRE_ROUTING 0<br />
/* If the packet is destined for this box. */<br />
#define NF_IP_LOCAL_IN 1<br />
/* If the packet is destined for another interface. */<br />
#define NF_IP_FORWARD 2<br />
/* Packets coming from a local process. */<br />
#define NF_IP_LOCAL_OUT 3<br />
/* Packets about to hit the wire. */<br />
#define NF_IP_POST_ROUTING 4<br />
A função responsável pela nossa hok:<br />
Vcs viram que podemos manipular um determinado pacote em certos<br />
momentos dentro do netfilter, mas pense bem como vamos manipula-lo?<br />
Bem quando chegar neste momento o netfilter "chamará"<br />
automaticamente uma função que registraremos dentro de nossa hok.<br />
Vamos ver a declaração desta nossa função, conforme<br />
~/linux/netfilter.h:<br />
typedef unsigned int nf_hokfn(unsigned int hoknum,<br />
111