jak zjistit sniffer, jak na síti lokalizujeme počítač, který odposlouchává.


Jen pro oživení krátce připomenu princip odposlouchávání na ethernetu. data, takzvané ethernetové rámce, jsou vysílány po segmentu způsobem podobným rádiu. tedy ne ke konkrétnímu adresátovi, ale jaksi "do éteru". síťová karta, která na rámci vidí svoji adresu, si pakety převezme a předá jádru operačního systému. ovšem pokud kartu přenastavíme do módu "promisc", přebírá všechny rámce které jdou okolo ní. takže vidíme veškerý provoz na segmentu a můžeme odposlouchávat data. jedinou pořádnou obranou je spojení šifrovat, což nám umožňuje například program ssh. podle čeho se karta rozhoduje zda je rámec určen pro ni? podle hodnoty cílové hardwarové adresy, neplést s IP adresou. hardwarová adresa vypadá asi takto: 00:de:ad:c1:a1:ef.

a jak tedy najdeme na lokálním segmentu odposlouchávající počítače? obtížně, protože univerzální postup neexistuje. využijeme-li ovšem chybu v linuxovém kernelu (nevím jestli to funguje i s jádry 2.2, to jsem nezkoušel, ale ještě na 2.0.36 to fungovalo stoprocentně), můžeme zjistit aspoň odposlouchávající linuxy. princip je takový, že pošleme ICMP ECHO_REQUEST paket s neplatnou hardwarovou adresou. v případě že stroj nesniffuje, tak paket nebude síťovou kartou vůbec přijat. ale pokud stroj sniffuje, karta paket převezme, předá jádru, které vygeneruje platnou odpověď ICMP ECHO_REPLY. zde je malý prográmek, který ukazuje použití v praxi:

#!/bin/sh

# snifdetect 1.0
# (c) underground.cz 1998

echo "checking $1 for promiscuous device ..."

# v interni tabulce priradime stroji nejakou
# neplatnou hardw. adresu
arp -s $1 00:de:ad:c0:ff:ee

# posleme ping
if ping $1 -c 2 >/dev/null 2>/dev/null; then

  # vratila se odpoved, stroj asi sniffuje
  echo "$1 may be in promiscuous mode"

else

  # nedostali jsme odpoved, snad OK
  echo "$1 - no promiscuous mode detected"

fi

# smazeme zaznam z tabulky
arp -d $1