Dsniff

A Unix/Linux szerverek üzemeltetése wikiből

Írta: Vörös Dániel
Utolsó módosítás: 2010.12.16

A dsniff több hálózatbiztonsági program gyűjteménye. Támogatott platformjai az openBSD, Solaris(sparc) és Linux(Redhat), de készült belőle Windows és MacOS X port is (én Ubuntun és BackTracken teszteltem). Segítségével hiányosságokat kereshetünk a hálózatban, de akár támadásra is felhasználhatjuk. Ahhoz, hogy tudjunk védekezni egy támadás ellen ismernünk kell annak természetét. Ebben a cikkben ezért támadásokat ismertetek, majd azok kivédéséhez adok útmutatást.


Tartalomjegyzék

1 A sniffingről

A sniffing (magyarul talán szaglászás?) tág értelemben a hálózati forgalom figyelését, böngészését jelenti. Ahhoz, hogy ezzel visszaéljünk, olyan adatokhoz kell jutnunk, amelyeket nem nekünk szántak. Erre lehet példa egy OPN wlan hálózat, ahol titkosítás nélkül repkednek az adatok, de lehet akár egy UTP kábel is amire egy saját hardverünket rákötve lehallgatjuk a rajta átfolyó adatokat. A dsniff csomag a sniffelés több részfeladatát is megkönnyíti számunkra.

Ezek szerint három csoportra oszthatók a benne található programok:

  • 1. A nem nekünk szánt forgalomhoz való hozzáférés:
    • arpspoof, dnsspoof, macof
  • 2. A forgalom feldolgozását megkönnyítő programok:
    • dsniff, filesnarf, mailsnarf, msgsnarf, urlsnarf, webspy
  • 3. Aktív "monkey-in-the-middle" támadást megvalósító programok:
    • sshmitm, webmitm

A továbbiakban ezek részletesebb bemutatása következik.

2 A kényes adatok elérését segítő eszközök

2.1 arpspoof

Amennyiben egy switchel kapcsolt hálózatban tartózkodunk, alapesetben nem férünk hozzá mások adataihoz, hiszen a switch lényege éppen az, hogy az adatokat csak a címzett felé továbbítsa. Ennek kijátszására alkalmazhatjuk az arpspoofing programot. Ezzel lényegében elhitetjük egy áldozatgéppel (akivel egy switchen lógunk), hogy mi vagyunk a switch és a switchel, hogy mi vagyunk az áldozat. Erre az ARP táblák megmérgezését használjuk. Mindkét félnek folyamatosan olyan ARP üzeneteket küldünk, melyben közöljük velük, hogy a másik fél a mi MAC címünkön található. Így amikor az adatkapcsolati rétegben címezik a csomagjaikat, azokat felénk fogják irányítani. Fontos, hogy a hozzánk így a csalás miatt beérkező csomagokat továbbítsuk is. Ezt megtehetjük, ha bekapcsoljuk a csomagok automatikus továbbítását:

$ echo 1 > /proc/sys/net/ipv4/ip_forward

Példa:

  • switch: 192.168.100.1
  • áldozat: 192.168.100.112
$ arpspoof -i wlan0 -t 192.168.100.1 192.168.100.112

ezt futni hagyjuk és ezt is elindítjuk

$ arpspoof -i wlan0 -t 192.168.100.114 192.168.100.1

Miután végeztünk a szaglászással lelőhetjük a futó arpspoof-okat (SIGINT), ilyenkor még néhány ARP csomagot küldenek amivel visszaállítják az eredeti rendet.

2.2 dnsspoof

Segítségével a helyi hálózatunkben felmerülő DNS kérésekre adhatunk nemkívánt válaszokat. Egy lehetséges alkalmazása, hogy a saját IP-címünkkel válaszolunk minden kérésre, és utána transzparensen proxyzunk az áldozatnak, mintha mi lennénk minden szerver amit el szeretne érni. Ezzel az arpspoofinghoz hasonlóan azt érjük el, hogy minden forgalom rajtunk áramlik át, így egy switchelt hálózatban is eljut hozzánk mások privát forgalma.

Egy másik felhasználási módja, hogy nem a saját címünkre, hanem harmadik személyhez irányítjuk az áldozatot. Így remek adathalász oldalakat hozhatunk létre (igaz akár erre a saját IP-nk is jó lenne, ha fellövünk egy webservert). Ugyanakkor ha például sok helyi hálózaton tudunk dnsspoofolni, akkor akár reklámként átirányíthatunk népszerű honlapokat a mienkre. Felhasználásának csak a képzelőerőnk szab határt (:

Használatához hozzunk létre, egy fájlt ami az átirányításokat tartalmazza. Ennek formátuma a /etc/hosts -hoz hasonló, ugyanakkor használhatunk wildcardokat is.

spoofthis.hosts:

1.2.3.4 google.com
1.2.3.4 yahoo.com
1.2.3.4 bing.com

ha elmentettük kiadhatjuk a parancsot:

$ dnsspoof -i wlan0 -f spoofthis.hosts

Ezután minden sikeres DNS válaszadásról értesülünk:

192.168.100.114.55824 > 192.168.100.1.53:  18852+ A? google.com

2.3 macof

Ahhoz, hogy egy switch az adatkapcsolati szinten csomagokat tudjon továbbítani a címzettek felé, tárolnia kell a hozzá kapcsolódó helyi hálózaton tartózkodó kliensek IP és MAC címét. Ezt használja ki a macof program, amivel eláraszthatjuk a switchet random MAC-IP párosokkal. Ennek hatására bizonyos switchek egyszerű hub működésre váltanak vissza, vagyis minden csomagot broadcast küldenek, így minden forgalomhoz hozzáférhetünk.

$ macof -i wlan0

Különböző kapcsolókkal megadhatjuk neki, hogy milyen IP és MAC címeket milyen portokon küldjön. Ha ezeket elhagyjuk, akkor random generál nekik értékeket.

(Nekem egy perc alatt kb 120000 csomagot sikerült szétküldeni a wlan hálózaton. Ezzel a sebességgel 10 perc alatt nem sikerült kiváltani a várt hatást. DoSolni azonban remekül lehet a programmal. Azt tapasztaltam, hogy a szórás ideje alatt reménytelen bármilyen adatot átvinni a routeremen.)

3 A lehallgatott adatokat bányászó programok

Ha valahogy (például az előző módszerek valamelyikével) hozzáférést szereztünk adatcsomagokhoz, felmerülhet bennünk az igény, hogy azokban érdekes információk után kutassunk. Jó kérdés, hogy egy adott helyzetben mi számít érdekesnek. Általában jelszavak, emailek, fájlok, üzenetek után kutatunk a hálózati forgalomban.

Az ilyen adatok megkeresése egy nagyobb adathalmazban kézzel nagyon nehéz és hosszadalmas lehet. Ezt hivatottak megkönnyíteni az alábbi programok. Mindegyiknél lehetőségünk van az aktuális forgalomban vagy elmentettben keresni. Forgalom mentéséhez használható például a tcpdump, vagy az aircrack-ng airodump-ng programja.

Mindegyikre igaz, hogy szűrhetünk velük bizonyos kritériumok alapján. Például kiválogathatjuk az 1.2.3.4 felé tartó csomagokat, vagy a forrásportot stb. Erre a tcpdump-ból ismerős szintaxist alkalmazhatjuk. Erről bővebben: man pcap-filter 7 vagy itt. Az ilyen kifejezések, minden esetben a programnak az utolsó argumentumként adhatóak meg.

3.1 dsniff

Amiről a programcsomag is a nevét kapta. Ezzel a programmal a számunkra valamely interfészen (pld wlan0, eth0 stb.) elérhető hálózati adatcsomagokat pásztázhatjuk jelszavak után. Erőssége, hogy rengeteg protokollt felismer: FTP, Telnet, SMTP, HTTP, POP, poppass, NNTP, IMAP, SNMP, LDAP, Rlogin, RIP, OSPF, PPTP MS-CHAP, NFS, VRRP, YP/NIS, SOCKS, X11, CVS, IRC, AIM, ICQ, Napster, PostgreSQL, Meeting Maker, Citrix ICA, Symantec pcAnywhere, NAI Sniffer, Microsoft SMB, Oracle SQL*Net, Sybase, Microsoft SQL.

dsniff [-c] [-d] [-m] [-n] [-i interface | -p pcapfile] [-s snaplen] [-f services] [-t trigger[,...]]]  [-r|-w savefile] [expression]
  • -c: Asszimetrikus routing esetén (pld arpspoofing csak az áldozat felé) is megprobálja összeilleszteni a csomagokat és keresni bennük
  • -d: Debug mód bekapcsolása
  • -m: Automatikus protokolfelismerés
  • -n: Ezzel a kapcsolóval letilthatjuk az IP-címek hosztnevekké feloldását. Gyorsíthat a működésen.
  • -i: Interfész amin hallgatózzon
  • -p: Korábban mentett forgalmat tartalmazó pcap fájl
  • -s: A TCP csomagok első ennyi bájtját vizsgálja
  • -t: Triggerfeltételt adhatunk meg. Bővebben lásd: man dsniff
  • -r: Eredmények fájlból kiiratása
  • -w: Eredmények fájlba mentése
  • [expression]: A korábban említett pcap-filter kifejezés a további szűréshez.

Egyszerű példa: Kapjunk el minden jelszót a wlan0 interészen!

$ dsniff -i wlan0
$ dsniff: listening on wlan0
-----------------
11/26/10 11:09:53 tcp durfi.chello.hu.37411 -> xxyyzz.ezit.hu.21 (ftp)
USER felhasznalonevem
PASS atitkosjelszavam

Dolgozzunk egy már mentett pcap fájlból és ne bajlódjunk az IP-k feloldásával! Az eredményeket mentsük a jelszavak fájlba:

dsniff -n -p file.pcap -w jelszavak

A mentéshez a dsniff csomag minden tagja a Berkeley DB formátumot alkalmazza. Az így mentett fájlokat megnyithatjuk például a db4.X-util csomaggal, vagy magával a dsniffel (-r kapcsoló).

3.2 filesnarf

NFS kapcsolaton keresztül áramló fájlokat szűri ki nekünk az aktuális forgalomból, vagy korábban mentett pcap fileból.

Használata:

filesnarf -i wlan0

3.3 mailsnarf

SMTP és POP3 protkollból tudja kihámozni a leveleket. Paraméternek csak a figyelt interfészt kell neki átadni, de tud pcap fájlból is dolgozni. Ha a kimenetét fájlba irányítjuk, azt utána külső programokkal (mail, pine stb.) is feldolgozhatjuk.

$ mailsnarf -i wlan0

mailsnarf: listening on wlan0
From mailsnarf Fri Dec 10 17:15:48 2010
Return-Path: <durfi@durfi.hu>
X-Original-To: test@durfi.hu
Delivered-To: test@durfi.hu
Received: from postfixadmin.ballab.net (localhost [127.0.0.1])
	by ballab.net (Postfix) with ESMTP id 1B94220C141
	for <test@durfi.hu>; Fri, 10 Dec 2010 17:11:15 +0100 (CET)
To: test@durfi.hu
From: durfi@durfi.hu
Subject: Welcome
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Message-Id: <20101210161115.1B94220C141@ballab.net>
Date: Fri, 10 Dec 2010 17:11:15 +0100 (CET)

Hi,

Welcome to your new account.

(Ha futtatunk mellé egy dsniffet akkor a postafiok jelszavát is megszerezhetjük.)

3.4 msgsnarf

IM programok forgalmát tudja kiszűrni a látott csomagokból, vagy mentett pcap fileból. Elvileg felismeri az MSN Messenger, IRC, AOL, Yahoo Messenger üzenetküldőket, de nekem nem sikerült működésre bírnom. Hazsnálata megegyezik a csomag többi programjával:

msgsnarf -i wlan0

3.5 urlsnarf

Http kéréseket keres a forgalomban és azokat CLF (Common Log Format) alakban adja vissza. Így azokat valamilyen külső programmal (pld. analog, webalizer, awstats) utólag feldolgozhatjuk és szuper grafikonokat rajzolhatunk belőlük.

$ urlsnarf -i wlan0

urlsnarf: listening on wlan0 [tcp port 80 or port 8080 or port 3128]

192.168.100.114 - - [10/Dec/2010:17:32:10 +0100] "GET http://asdasd.hu/ HTTP/1.1" - - "-" "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Ubuntu/10.10 Chromium/7.0.517.44 Chrome/7.0.517.44 Safari/534.7"
192.168.100.114 - - [10/Dec/2010:17:32:15 +0100] "GET http://asdasd.hu/asdasdhulogo.png HTTP/1.1" - - "http://asdasd.hu/" "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Ubuntu/10.10 Chromium/7.0.517.44 Chrome/7.0.517.44 Safari/534.7"
192.168.100.114 - - [10/Dec/2010:17:32:20 +0100] "GET http://asdasd.hu/favicon.ico HTTP/1.1" - - "-" "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Ubuntu/10.10 Chromium/7.0.517.44 Chrome/7.0.517.44 Safari/534.7"

3.6 webspy

Szintén a Http kéréseket figyeli, de nem fájlba menti őket, hanem realtime megjeleníti a böngészőnkben. Ezáltal elvileg hátradőlve nézhetnénk, hogy mit böngész az áldozatunk. Gyakorlatilag sajnos nem megyünk vele sokra, mert virtualhost-okat nem támogat, így a legtöbb webszájtot nem fogja betölteni. Az urlsnarf valóban nem ilyen "menő", de sokkal hatásosabb.

Az interfészen kívül az áldozat címét is meg kell adjuk, hogy csak az ő forgalmát másolja a böngészőnkbe.

webspy -i wlan0 192.168.1.114

4 Aktív "monkey-in-the-middle" támadást megvalósító programok

4.1 sshmitm

Ha valaki a helyi hálózatunkon SSH kapcsolatot használ, abba belehallgahatunk ezzel a programmal. Alapesetben csak proxyzik és hallgatózik, de a -I kapcsolóval interaktív sessionökbe is beléphetünk, ahova be is szúrhatunk. Sajnos (vagy szerencsére), csak az SSH 1-es verzióját támogatja, aminek titkosítása jóval gyengébb mint a 2-esnek, ezért nem is sok helyen használják.

Használata:

Először (pld. dnsspoof-al) el kell térítetünk a forgalmat, hogy rajtunk keresztül próbálja meg elérni a kliens a szervert. Ezután:

sshmitm [-I] [-p port] host [port]

Ahol [-p port] a helyi port amin figyeljen, a host [port] pedig az a cím, ahova továbbítsuk a kapcsolatot.

4.2 webmitm

Ezen program használatával beállhatunk egy kliens és egy webszerver közé. Ezzel még nem lenne nagy újdonság az arpspoof és társai után, de itt lehetőségünk van az SSL tanusítványok meghamisítására is. Pontosabban arról van szó, hogy amikor a kliens https-en keresztül szeretne kommunikálni, akkor mi a saját (self-signed) tanúsítványunkat küldjük neki vissza. Ezt az áldozatnak ugyan még el kell fogadnia, de utána abban a hiszemben kommunikál rajtunk keresztül, hogy van egy titkosított csatornája.

Használata:

Az sshmitm-hez hasonlóan itt is először a forgalmat kell eltérítenünk (dnsspoof). Majd:

webmitm [host]

A [host] a cím ahova továbbítjuk a kapcsolatot. Ha nem adunk meg semmit, akkor csak a HTTP/1.1 Host headert tartalmazó kéréseket forgja proxyzni.

5 Védekezés

A védekezés célja, hogy a támadó ne férjen hozzá a bizalmas adatokhoz. A triviális megoldás az lenne, hogy nem forgalmazunk a hálózaton bizalmas adatokat, de ez gyakorlatilag kivitelezhetetlen. Célunk tehát, hogy vagy ne tudja megszerezni a bizalmas adatfolyamot, vagy az legyen úgy titkosítva, hogy ne tudjon vele mit kezdeni. Az előbbire megoldások:

  • Hub helyett használjunk Switchet
  • Szűrjük ki azokat a gépeket, akik gyanúsak (például MAC-filteringgel)
  • Használhatunk statikus ARP táblát a gépeinken, így az ARP Poisoningtól védve leszünk, de ha változik a hálózat, akkor változtatnunk kell a táblákat
  • Megelőzzük a forgalom eltérítését
    • ArpON (Arp handler inspectiON): Userspaceben működő nyílt forráskódú megoldás, ami átveszi az ARP tábla kezelését. Hátránya, hogy minden gépre telepítenünk kell, amit meg akarunk védeni. Két algoritmust használ (SARPI ás DARPI), amelyek lényege, hogy cachelik az ismert címeket, és csak olyannal állnak szóba, akiben a korábbi információk alapján megbízhatnak. Működik DHCP-vel is, de sajnos Windowsos változata nem létezik.
    • S-ARP (Secure ARP): Az ARP-re épülő kiegészítésekkel létrejött protokol. Asszimetrikus titkosítást használ az üzenetei biztonságossá tételéhez. S-ARP-t nem támogató hoszt is értelmezni tudja az S-ARP csomagokat (mivel az S-ARP az ARP-re épül rá néhány plusz headerrel) és az S-ARP-s hoszt is fogadhatja az ARP-csomagokat, ha azok olyan címről jönnek, amiről kézzel megadtuk neki, hogy biztonságos. Hátránya, hogy minden hosztra telepíteni kell ha az egész hálózatunkat biztonságossá szeretnénk tenni, valamint, hogy a titkosítás miatt erőforrásigényes(ebb).
    • DAI(Dynamic ARP Inspection): Például a Cisco switchek és routerek használják. Feladata, hogy a switch csak legitim ARP kéréseket/válaszokat továbbítson. Legitimnek azokat tekinti, amikben a MAC-IP párosok megegyeznek az előre eltárolttal. Előnye, hogy csak a switchnek kell ismernie.

Ezeknek a módszereknek a hátránya, hogy szűkséges hozzá egy adatbázis, amiben a megbízhatónak tekinthető hosztokat tároljuk. Ha ezt nem megfelelően vesszük fel, vagy a támadónak sikerül módosítania, akkor védtelenek leszünk a támadások ellen.

  • Detektáljuk a forgalom eltérítését
    • Arpwatch: Monitorozhatjuk az ARP táblánkat, ezáltal feltűnhetnek a gyanús változások. Sajnos a támadás elhárításában nem lesz segítségünkre.
    • XArp: Ingyenes verziójával detektálhatjuk az Arpspoofing-ot állítható szabályokkal és modulok hozzáadásával.

A detektáláshoz nem kell adatbázis, amiben a MAC-IP párosokat tároljuk, csak a változásokaz kell figyelnünk és azokra valamilyen mintát illeszteni. Például ha

    • rövid időn belül változik, egy adott IP-hez tartozó MAC-cím, vagy
    • elárasztják a hálózatot az ARP-csomagok (mint a dsniff arpspoof programja is csinálja), vagy
    • ha ARP válasz jön anélkül, hogy kérés lett volna stb.
  • Az sshmitm ellen védekezhetünk ha kettes verziójú SSH protokolt használunk
  • A webmitm ellen hatásos, ha odafigyelünk, hogy milyen tanúsítványt fogadunk el (:
Személyes eszközök