Detekce NAT v podnikové síti

✍️ Jan Smitka
📅 21. 11. 2014

NATDet je nástroj, pomocí kterého je možné v síti detekovat NAT. Po spuštění přepne specifikovanou síťovou kartu do promiskuitního režimu a analyzuje příchozí packety. Pokud z jedné IP adresy detekuje provoz, který by mohl odpovídat více zařízením, určí na základě naměřených metrik pravděpodobnost, že na dané IP adrese běží NAT.

Pro detekci se používá několik ukazatelů. Jedním ze základních je rozdíl velikostí TTL: hodnota TTL packetů, které projdou směrovačem, se sníží vždy o jedničku. To samo o sobě nemusí stačit, za směrovačem mohou být všechna zařízení a směrovač samotný nemusí komunikovat, případně uživatel může nechat TTL přepsat.

Proto u packetů určuje ještě fingerprint zdrojového operačního systému. K tomu používá:

  • Výchozí hodnotu TTL: pro systémy Windows je typicky 128, pro systémy na bázi Unixu (tj. Linux, FreeBSD, Mac OS X) je výchozí 64. Android je založen na systému Linux, iOS zase na FreeBSD, takže lze takto detekovat i tyto systémy.
  • Výchozí velikost okénka v TCP: opět pro každý systém různá, může se lišit i u jednotlivých instalací. Vyskytuje se však několik známých hodnot, na základě kterých je možné množinu možných systémů omezit.
  • TCP příznak don't fragment: některé systémy jej nastavují, jiné ne.
  • Celková velikost SYN packetů.

Operační systém se určí na základě všech těchto informací. Zvídaví jedinci mohou nahlédnout do souboru se signaturami, který je velmi čitelný. Pokud je ve sloupci pro velikost okénka číslo začínající na M*, tak se jedná o násobek hodnoty MSS (Maximum Segment Size). NATDet umožňuje i zápis M+, kdy se číslo přičte k MSS, ale v signaturách tato možnost není použita a osobně ani nevím, který OS by mohl mít velikost okénka takto definovanou.

Kromě hodnot TTL a operačního systému vyhodnocuje i na základě rozdílu časů, zdrojových portů, poměru MSS a velikosti okénka a další. Pro více informací nahlédněte do zdrojových kódů.

Kompilace

NATDet je možné zkompilovat pod Linuxem, FreeBSD, Mac OS X, Solarisem a pravděpodobně i dalšími OS odpovídajících normě POSIX. Vyžadována je pouze knihovna libpcap ve verzi 0.6 a vyšší. Nástroj byl portován i pro OS Windows, osobně jsem jej však nikdy nezkoušel zprovoznit.

Pro instalaci si určitě stáhněte vývojovou verzi natdet-devel.tar.gz, fungovala lépe, než poslední stabilní. Rozbalení a kompilace je standardní:

tar -xzf natdet-devel.tar.gz
cd natdet-devel
./configure
make

Nyní již můžete program otestovat příkazem ./natdet -h, nebo jej nechat nainstalovat do systému pomocí make install. Před kompilací se ještě může vyplatit nahlédnout do souboru config.h a upravit parametry pro síť, ve které bude detekce nasazena. Věnujte pozornost konstantě NAT_CACHE, která určuje velikost bufferu pro uchovávání detekovaných položek. Měla by být větší, než počet IP adres v síti.

Spuštění

Příkazu natdet je dobré zadat alespoň síťovou kartu, jejíž provoz má analyzovat (parametr -i), a filtrační pravidlo s maskou sítě. Jako poslední argument je možné zadat téměř libovolné filtrační pravidlo pro knihovnu libpcap (kterou využívá i tcpdump). Příklad:

./natdet -i eth1 'src net 192.168.1.0 mask 255.255.255.0'

Příkaz je samozřejmě nutné spustit jako root. Do konzole začne vypisovat záznamy v následujícím tvaru:

[*] 11-11-2014 19:32:49: NAT at 192.168.1.200 for 3 system(s) [100%]
    Used factors: OSGENRE TSTAMP TTL

Tj. se 100% pravděpodobností detekován NAT na IP adrese 192.168.1.200. Detekovány byly 3 různé systémy. Řádek Used factors: zobrazuje, jaká všechna pravidla byla použita při detekci.

Pokud chcete výstup zapsat do logu a nechat program běžet na pozadí, použijte parametry -d (run in background) a -l (zápis do souboru). Užitečný je i parametr -vv, který zapne ladicí výpis. Záznamy pak jsou obsáhlejší:

[*] 11-11-2014 20:01:32: NAT at 192.168.1.200 for 2 system(s) [100%]
    Used factors: TTL OSGENRE TSTAMP
    #0: Linux2.4-2.6, 64, 622729889 (6sec) -> Windows7/Vista, 127, 0

Ve výpise přibyl řádek s výpisem konkrétních systémů a dobou mezi jejich detekcemi.

Nasazení

Detekci je nutné nasadit na stroj, ke kterému teče veškerá komunikace ze sítě. Vhodným kandidátem je Linuxová gateway. Často ale hraniční router tvoří specializované zařízení, na kterém neběží Linux, ani není možné na něj instalovat vlastní software.

V takovém případě se vyplatí detekci přesunout na dedikovaný stroj a nastavit mirroring portů. Pro switche od společnosti Cisco lze nastavit SPAN, nebo RSPAN.

Postřehy z praxe

Několik drobných postřehů s praxe:

  • Detekce funguje již od jednotek packetů, takže i vytvoření NAT na krátkou dobu bude odhaleno.
  • Vyplatí se zapnout podrobnější výpis a sledovat nejen operční systémy, ale i dobu mezi jejich detekcemi. Zejména pokročilí uživatelé mohou mít na svém stroji nainstalováno několik systémů, mezi kterými přepínají. V současnosti není pravděpodobné, že by uživatel zvádl mezi Windows a Linux přebootovat za méně než 30s (u běžných kancelářských PC i mnohem déle), hodnota několika minut mezi detekcemi klidně může znamenat bootování do jiného OS.
  • Uživatelé mohou využívat také různé nástroje pro virtualizaci, které využívají NAT. Z hlediska bezpečnosti sítě to nemusí být nutně riziko, ale pro detekci bude lepší, když s nimi prokonzultujete nastavení bridge do sítě.
  • Některé nástroje pro vytváření Wi-Fi hotspotů, například Connectify, je možné detekovat i na základě ARP dotazů, které vysílají. Nekteré nástroje jsou dokonce tak agresivní, že je Dynamic ARP Inspection na Cisco switchích vyhodnotí jako útok a port zablokuje.

Závěr

NATDet je užitečný nástroj pro odhalování NAT v síti. Pokud si nepřejete, aby uživatelé do sítě připojovali vlastní prvky a vytvářeli Wi-Fi sítě, může být dobrým pomocníkem pro jejich detekci.

Štítky: ,

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *


Lynt services s.r.o

Již 11 let vytváříme efektivnější kampaně, zrychlujeme weby a řešíme jejich bezpečnost. Kombinujeme marketing, vývoj a automatizaci.
poptávka služeb