Kernel Sniffing

août 11th, 2007 at 03:24 admin

Je crois que la pire chose quand on est g33k, c’est l’ennui, ne plus savoir quoi faire, rester devant son écran à regarder les conversations inintéressantes sur irc ou à faire du .lamoule pendant des heures sur #lamoule@freenode le soir. Anyway, en même temps que j’avance mon projet je fais des choses super intéressantes, comme transformer mon Windbg en kernel sniffer, w00t !

La chose est simple, trouvez la fonction qui se charge de dispatcher les packets juste après le driver de miniport, mettez un breakpoint dessus et dumpez ses arguments. Cette fonction porte le doux nom de ethFilterDprIndicateReceivePacket, on peut la retrouvée dans la structure NDIS_MINIPORT_BLOCK, son prototype est :

typedef
VOID
(*FILTER_PACKET_INDICATION_HANDLER)(
    IN  NDIS_HANDLE             Miniport,
    IN  PPNDIS_PACKET           PacketArray,
    IN  UINT                    NumberOfPackets
    );

Sachant que le paramètre PacketArray pointe sur un tableau de MDL décrivant les pages contenant nos buffers avec les données reçu sur le miniport, il suffit de dumper leur contenu avec la commande de l’extension ndiskd, !pkt pour voir le contenu du packet.

Breakpoint 0 hit
NDIS!ethFilterDprIndicateReceivePacket:
fcb0bb21 8bff            mov     edi,edi
kd> kv
ChildEBP RetAddr  Args to Child
8055053c fcd7b95e 80da0ad0 80d58f30 00000002 NDIS!ethFilterDprIndicateReceivePacket (FPO: [Non-Fpo])
80550570 fcd7b17b 80d58f38 804e4a15 80da0ad0 dc21x4!ProcessReceiveDescRing+0x2b4 (FPO: [Non-Fpo])
80550590 fcb05712 00010040 80559280 80559020 dc21x4!DC21X4HandleInterrupt+0xe7 (FPO: [Non-Fpo])
805505ac 804dbbd4 80d5801c 80d58008 00000000 NDIS!ndisMDpc+0xff (FPO: [Non-Fpo])
805505d0 804dbb4d 00000000 0000000e 00000000 nt!KiRetireDpcList+0x46 (FPO: [0,0,0])
805505d4 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x26 (FPO: [0,0,0])

kd> dd poi(@esp+8) l 2
80d58f30  80d53698 80d52378

kd> !pkt poi(poi(@esp+8)+0) 5
NDIS_PACKET at 80d53698
	MDL = 80d4fc08
		StartVa fffffffffc956000, ByteCount 0x79, ByteOffset 0xc80, NB MdlOffset 0x0
	fc956c80:  00 03 ff 02 63 0e 00 17 33 45 4c ec 08 00 45 00
	fc956c90:  00 6b 12 1e 40 00 35 06 e1 bb c3 e1 cc 15 c0 a8
	fc956ca0:  01 14 1a 0b 07 50 33 26 79 69 de cc 18 74 50 18
	fc956cb0:  10 00 4f 63 00 00 3a 53 71 75 61 6c 6c 73 75 72
	fc956cc0:  66 21 45 6d 65 61 75 40 57 6e 65 74 2d 33 37 30
	fc956cd0:  32 32 2e 77 39 30 2d 34 39 2e 61 62 6f 2e 77 61
	fc956ce0:  6e 61 64 6f 6f 2e 66 72 20 4a 4f 49 4e 20 3a 23
	fc956cf0:  6e 69 62 62 6c 65 73 0d 0a

kd> !pkt poi(poi(@esp+8)+4) 5
NDIS_PACKET at 80d52378
	MDL = 80d50888
		StartVa fffffffffc94d000, ByteCount 0xa5, ByteOffset 0x680, NB MdlOffset 0x0
	fc94d680:  00 03 ff 02 63 0e 00 17 33 45 4c ec 08 00 45 00
	fc94d690:  00 97 12 a7 40 00 35 06 e1 06 c3 e1 cc 15 c0 a8
	fc94d6a0:  01 14 1a 0b 07 50 33 26 79 ac de cc 18 74 50 18
	fc94d6b0:  10 00 ae 1f 00 00 3a 5b 67 33 33 6b 5d 21 7e 5b
	fc94d6c0:  67 33 33 6b 5d 40 67 65 65 6b 2e 6f 75 2e 70 61
	fc94d6d0:  73 20 4d 4f 44 45 20 23 6e 69 62 62 6c 65 73 20
	fc94d6e0:  2b 76 20 53 71 75 61 6c 6c 73 75 72 66 0d 0a 3a
	fc94d6f0:  46 6f 6f 62 61 72 21 74 6f 74 6f 40 34 32 2e 57
	fc94d700:  6f 72 6c 64 6e 65 74 20 4d 4f 44 45 20 23 6e 69
	fc94d710:  62 62 6c 65 73 20 2b 6f 20 53 71 75 61 6c 6c 73
	fc94d720:  75 72 66 0d 0a

Après on peut automatiser cela avec un windbg script :

$$
$$ Packet dumper
$$ 		by
$$	 Ivanlef0u

!ndiskd.load
.reload
bp NDIS!ethFilterDprIndicateReceivePacket "r @$t0 = poi(@esp+0xC);
.for (r $t1=0; @$t1<@$t0; r $t1=@$t1+1)
{
   .printf \\"Dumping packet %d at 0x%x\\n\\", @$t1, poi(poi(@esp+0x8)+@$t1*4);
   !pkt poi(poi(@esp+0x8)+@$t1*4) 5;

};g"

Enregistrer le sous l’extenion .wdbg et lancez le de la manière suivante : $$><c:\sniff.wdbg
En le laissant tourner vous obtenez un joli screensaver et si, de plus, vous avez colorez le texte de votre Windbg en vert fera un magnifique matrix-like à montrer à vos amis.

Autrement j’ai remarqué une forte affluence sur mon blog depuis le site reseaux-telecoms.net, en effet ce cher Marc Olanié s’amuse à poster des billets référençant mon site en ne tarissant pas d’éloges dessus … Je cite :
A propos de lu post New Registry Hiding Method : « Article, comme d’habitude, admirable de compétence technique, teinté d’humour et nécessitant, pour le commun des mortels, un tube non entamé d’Aspirine du Rhône (en capsules). »

Aussi : « Instrument de hacking non-humain à comparer -est-ce possible- avec sa contrepartie humaine française, toujours aussi étonnante. »

Il est affectueux le monsieur, evidemment je trouve ca sympa de ca part de me faire de la pub. Cependant ce blog s’adressant un à public avertit de drogués aux chocapicz je pense que les gens plus ‘corporate’ qui lisent reseaux-telecoms.net et qui viennent ici, s’en sortent avec séquelles neurologiques grave à vie. Bref je trouve ca cool qu’on apprécie ce que je fais mais faudrait pas non plus mettre ca devant n’importe qui :] Si ce cher Marc veut me rencontrer, je suis sur Paris en ce moment, on pourrait aller se prendre une bière et se faire des putes de luxe à Pigalle :}

Entry Filed under: Non classé

4 Comments

  • 1. newsoft  |  août 12th, 2007 at 22:00

    Je ne suis pas Marc, et les putes de luxe ne sont pas à Pigalle, mais j’y connais quelques bars sympas néanmoins. D’ailleurs c’est là où j’habite :)


  • 2. admin  |  août 12th, 2007 at 22:18

    G0dD4mnSh1t ! :( Bon tu payes quand ta bière ? :]


  • 3. SynApsus  |  août 13th, 2007 at 11:10

    je vois que tes chevilles en prennent un peu plus un coup à chaque article….


  • 4. Mattwood  |  août 14th, 2007 at 09:00

    Le Synapsus ? :)


Trackback this post


Calendar

octobre 2021
L Ma Me J V S D
« fév    
 123
45678910
11121314151617
18192021222324
25262728293031

Most Recent Posts