Czert sniffer 2.032 - popis programu

12.01.2002 21:05

Pocitacove site se daji rozdelit na mnoho ruznych typu, napriklad podle topologie. Nejvice pouzivany tzv. Ethernet funguje na sbernicovem principu. V jeji definici stoji, ze kazdy sitovy uzel (net nod) ma neomezeny pristup k teto sbernici a muze z ni kdykoliv cist. Pro koho je paket urcen se urcuje podle identifikacnich cisel NIC (sitovek). Vzhledem k rozsirenosti Ethernetu brzy zacaly vznikat takzvane \"sniffery\". Jsou to programy ktere, zjednodusene receno, cmuchaji (sniffuji) a loguji veskery provoz na siti. Kdyz si uvedomime,
ze v dobe relativne nedavne se prakticky vsechny citlive informace, vetsinou unixovych programu, posilala v otevrene podobe, je jasne ze sniffery mohou byt velice silnym nastrojem pro \"hacking\".

Czert sniffer je upravena verze linsnifferu od Mike Edulla-ho. Pracuje na klasickem principu - uvede sitovou kartu (pomoci IOCTL) do PROMISC modu a pak jen cte pakety a uklada je do logu.

Na zacatku se vola funkce main (necekane). V ni se nastavi dve rozhrani na sniffovani - eth0 a lo. Toto je pevne zkompilovano v binarce a NEJDE zmenit! Pak se provede tzv. argv wipe - vymazou se vsechny argumenty, ktere predal OS programu. Pak se do argv[0] zapise (nfsiod) - nejspis ma slouzit jako maskovani. Pote se vola funkce openintf, ktera vytvori socket a nastavi flagy na sitovce (pro PROMISC mod). Nasleduje nastaveni obsluhy ruznych signalu. Zde mne zaujala radka signal (SIGKILL,cleanup)... Very funny, really. Pak je zde zmatenina s nastavovanim logu. Samotne sniffovani probiha ve funkci read_packet. Ta precte packet a posoudi jeho atributy - jestli se ma vubec obtezovat s jeho logovanim. Pokud ano pak se zapise do logu.

Ve verzi, kterou jsem dostal do rukou 2.031 bylo nekolik chyb, ktere jsem se snazil opravit. Napriklad czertaci byli tak nadseni jejich DES cryptovanim, ze totalne zmrsily normalni otevreny format ukladani logu. Log file se vubec neotviral. Jestli se bude cryptovat ci ne se rozhoduje pri kompilaci - czertaci proto pouzily na rozhodovani o cryptovani jednak #ifdef-y jednak dalsi promenou cflags. Myslim celkem zbytecne. Toto jsem opravil, stejne jako jsem pridal nekolik H souboru. Snad jsem kod i trosku procistil. Nejspis jsem zmenil i neco jineho, ale ma dokumentace zrovna kvalitou neoplyva, takze \"several small bugs removed\" :-))

Vim, ze dnes uz nejspis nemaji sniffery sanci na pouziti (prepinane site, skoro vsechno je sifrovane), ale programovani mne bavi a tak bych rad czniffa dal vylepsil - chci napriklad zavest nejake parsovani optionu (aby si clovek mohl zvolit napr. ktere rozhrani ci porty chce vlastne sniffovat) - jednam (ci spise snazim se) s rottenem o integraci s jeho lips. Dale bych velice rad odstranil onen SOCK_PACKET (kdyz se uz i v linuxove dokumentaci pise ze je to zastarale tak asi bude :-) ) a nahradil ho linuxovym packetem (PF_PACKET). Take jsem uvazoval o portaci pod BSD, ale to je jen napad. Neni toho sice moc, ale vzhledem k tomu, ze nemam prilezitost vyzkouset czniff v akci, tak bychpotreboval nejake testery...

mail to: neologism@seznam.czneologism