Programy pro bezpečnostní analýzu v linuxu


V tomto přehledovém referátu si probereme některé zajímavé programy pro linux, pomocí nichž můžeme zkoumat, pozorovat, sledovat a testovat náš systém a hledat v něm zranitelná místa a jiné bezpečnostní problémy.


Nesssus


Je jeden z nejpopulárnějších bezpečnostních auditačních programů na světě. Nessus slouží k identifikaci a řešení známých bezpečnostních problémů (tj. ty které objeveny a zveřejněny).. Nessus je open-source, zdarma a šíří se pod licencí GPL. Je založen na klient-server modelu. Servery se instalují na strategická místa v síti a klienty jsou pak spravovány. Nessus server provádí samotné testování, zatímco klient poskytuje konfiguraci a reporty. Nessus server musí být nainstalován na nějakou linuxovou (unixovou) stanici a vyžaduje několik externích programů, které mu pomáhají vykonávat auditační činnost: Nmap na skenování portů, Hydra je program který testuje slabá hesla a Nikto na testování cgi. Poté, co je démon nessusd nainstalován můžeme pro něj přidávat nové uživatele pomocí utility nessus-adduser. Díky tomu, že má nessusd svoji vlastní uživatelskou databázi, kde je možné nastavit jednotlivým uživatelům různé restrikce, je možné sdílet jeden nessusd server pro celou síť a různé administrátory, kteří budou moci testovat pouze tu část sítě, kterou spravují. Pravidla, která se uživatelům přidělují můžou vypadat takto:


deny 10.163.156.1

accept 10.163.156.0/24

default deny


Tato pravidla určí, co má daný uživatel právo skenovat.

Na uživatelský účet v nessusd se pak připojuje pomocí klienta. Klient se připojuje k serveru pomocí SSL a k autentikaci je možno si vybrat více autentizačních metod. V klientovi se pak provádí konfigurace, která umožňuje spousty různého nastavení. Nejduležitější částí nastavení je vybrání správných pluginů, které jsou nezbytné pro konkrétní skenování. Každý z pluginů poskytuje sadu testů specifických typem útoku, které mají testovat, službou, kterou testují, operačním systémem který testují apod., tato kategorizace závisí na autorovi pluginu. Některé pluginy jsou označeny jako nebezpečné a jejich použití může vést k pádu testovaného systému, často tyto pluginy zaútočí DOS útokem a způsobí pád systému, který před konkrétním bezpečnostním problémem není odolný. Proto je zde možnost nepoužívat pluginy, které jsou označené jako nebezpečné. Příklady některých pluginu: FTP, Windows, Backdoors, RPC. Některé z pluginu mají svá specifická nastavení, která umožní, že sken je více kompletní. Například pokud pro SMB plugin nastavíme login, můžeme na vzdálených windows stanicích zjišťovat detailnější informace jako například které patche nejsou nainstalovány. Dalšími nastaveními jsou například kolik cilů se má současně nejvíce skenovat, který port skener chceme použít apod. Další nutnou věcí, kterou je přes klienta potřeba nastavit, jsou cíle které se mají testovat. Syntaxe definování adresního prostoru IP adres je podobná jako u nmapu:


10.3.10.101 – jedna adresa

10.3.10.1-100 – rozsah

10.163.156.1/24 – rozsah definovany pres prefix

deravy.pocitac.ume – domenove jmeno


Poté, co nessus provede port scan, spustí “services” plugin, který identifikují jaká serverová aplikace běží na každém objeveném portu, a na základě toho jakou objeví vybere patřičnou množinu pluginů, která se vztahuje k dané aplikaci. Services plugin tuto identifikaci provádí na základě odpovědí, které dostává na různé typy dotazů, které této aplikaci odesílá. Tento způsob indetifikace je velice důležitý, protože aplikace často běží na nestandardních portech. Navíc některé trojany využívají standardní porty, aby prošly skrze firewally. Jak už bylo řečeno pluginy rozdělujeme na nebezpečné a bezpečné. Ty nebezpečné provádí test zranitelnosti přímo DOS útokem, kdežto ty bezpečné zjišťují trhliny pomocí různých pasivních metod jako například podle verze zjištěného softwaru a porovnáním s databází. Tyto pasivní metody ale nejsou tak spolehlivé protože, software může být opatchovaný, bezpečnostní trhliny zalepeny apod. Některé pluginy potřebují adnimistratorsky přístup do systému aby systém prozkoumaly více do hloubky.


Výsledkem práce nesssuse je zpráva o bezpečnostním stavu sítě (resp. definovaných uzlů), kterou je možno získat v řadě různých formátů. Zde je část ASCII zprávy:


TESTED HOSTS

 10.163.156.10 (Security holes found)
DETAILS

+ 10.163.156.10 :
 . List of open ports :
   o echo (7/tcp) (Security warnings found)
   o telnet (23/tcp) (Security hole found)
   o ssh (22/tcp) (Security hole found)
   o ftp (21/tcp) (Security hole found)
   o chargen (19/tcp) (Security warnings found)
   o daytime (13/tcp) (Security warnings found)
   o discard (9/tcp)
   o smtp (25/tcp) (Security hole found)
   o time (37/tcp) (Security notes found)
   o finger (79/tcp) (Security warnings found)
   o sunrpc (111/tcp) (Security notes found)
   o login (513/tcp) (Security warnings found)
   o exec (512/tcp) (Security warnings found)
   o printer (515/tcp) (Security notes found)
. Warning found on port echo (7/tcp)


    The 'echo' port is open. This port is
    not of any use nowadays, and may be a source of problems, 
    since it can be used along with other ports to perform a denial
    of service. You should really disable this service.

    Risk factor : Low

    Solution : comment out 'echo' in /etc/inetd.conf
    CVE : CVE-1999-0103

 . Information found on port echo (7/tcp)


    An echo server is running on this port

 . Vulnerability found on port telnet (23/tcp) : 



    The Telnet server does not return an expected number of replies
    when it receives a long sequence of 'Are You There' commands.
    This probably means it overflows one of its internal buffers and
    crashes. It is likely an attacker could abuse this bug to gain
    control over the remote host's superuser.

    For more information, see:
    http://www.team-teso.net/advisories/teso-advisory-011.tar.gz

    Solution: Comment out the 'telnet' line in /etc/inetd.conf.
    Risk factor : High
    CVE : CVE-2001-0554
    BID : 3064





SNORT


SNORT je IDS (Intrusion Detection System) tedy program sloužící k detekci útoků a odposlechu v síti, kde hledá vzorky známých útoků a v případě nalezení je schopen provádět různé akce. Má obrovskou databázi stop více než 600 různých útoků, která se neustále aktualizuje a udržuje. Není to firewall což znamená, že detekuje již vzniklé problémy, ale nijak jim nezabraňuje. Snort může běžet ve třech módech:


sniffer mode – chová se jako standardní sniffer, čili odchytává pakety ze sítě a tiskne je na obrazovku


packet logger mode – to samé, navíc ale loguje pakety na disk


Network intrustion detection system mode – Nejvýznamnější mód programu, v tomto módu snort odchytává síťová data a analyzuje je v kontextu s uživatelem definovanými pravidly a provádí různé akce podle toho co nalezne.


Dále se budeme bavit o práci snortu v NIDS módu. Výstup snortu může vypadat takto:


[**] [119:13:1] (http_inspect) NON-RFC HTTP DELIMITER [**]

10/19-13:00:20.834286 192.168.1.2:1111 -> 82.114.56.132:80

TCP TTL:128 TOS:0x0 ID:4916 IpLen:20 DgmLen:134 DF

***AP*** Seq: 0x10A5E061 Ack: 0x74054544 Win: 0x40B0 TcpLen: 20


První řádek je hlavička zprávy a obsahuje některé zajímavé informace. První číslo v hranaté závorce (119) je generátor ID, to říká která komponenta snortu vygenerovala tuto zprávu. Hlavička obsahuje stručný popis varování. Pod hlavičkou jsou detailnější informace o paketu který varování vyvolal. Od verze snortu 1.5 a výše v něm byly definované tzv. preprocesory. Kód preprocesoru je spuštěn potom co je zavolán detekční engine, ale předtím než je paket dekódován. Díky této modulární struktuře, umožňují uživatelům jednoduše rozšiřovat funkcionality snortu. Zde je popis některých preprocesorů:


Frag3 – je modul, zajišťující IP defragmentaci paketů, detekci útoku využívající IP defragmentaci a je tzv. target-based. Různé operační systémy implementují svůj IP stack různými způsoby tzn. pro různé operační systémy může IP defragmentace probíhat jinak a útoky využívající IP fragmentaci se tedy budou lišit podle toho, na jaký operační systém jsou namířeny. Target based tedy znamená, že místo toho aby snort detekovat útoky čistě na základě paketů, které přes něj tečou, bude modelovat chování cíle, pro které jsou pakety určeny a defragmentovat je podle stejných pravidel jako to dělá cílový systém. To jak se má modul chovat se nastaví pomocí optionu policy <type> kde type může být first, last, bsd, bsd-right, linux.


Stream4 – tento modul umožňuje znovu sestavovat TCP stream a umožňuje mu aplikovat stavovou analýzu zda je vše v pořádku. Díky tomuto může snort detekovat různé stateless útoky


HTTP Inspect – je generický HTTP dekodér tzn. pracuje na aplikační úrovni síťového spojení. Data ukládá do bufferu, který poté dekóduje, najde HTTP hlavičky a prověří celkovou strukturu HTTP headeru, zda odpovídá definici RFC. HTTP Inspect funguje i na klientské dotazy, i na serverové odpovědi.


Spousta útoků vykazuje ten rys, že v přenášených datech je nějaký statický řetězec. Například tyto pravidla zachycují vir ILOVEYOU.


alert tcp any 110 -> any any (msg:”Incoming Love Letter Worm”;\
content :”rem barok -loveletter”; content:”@GRAMMERSoft Group”;)

alert tcp any 143 -> any any (msg:”Incoming Love Letter Worm”;\
content :”rem barok -loveletter”; content:”@GRAMMERSoft Group”;)

alert tcp any any -> any 25 (msg:”Outgoing Love Letter Worm”;\
content :”rem barok -loveletter”; content:”@GRAMMERSoft Group”;)


Snort poskytuje velice široké možnosti při definování pravidel. Většina pravidel jsou jednořádkové řetězce a jdou rozděleny do dvou logických sekcí, hlavička pravidla a nastavení pravidla. Header obsahuje prováděnou akci, protokol, zdrojové a cílové IP adresy a síťové masky. Část s nastavením pak obsahuje definici varovných zpráv a informace o tom, na kterou část paketu má být pravidlo provedeno (obsah, hlavička apod.)


Příklad pravidla: alert tcp any any -> any 25 (msg:”Outgoing Love Letter Worm”; content :”rem barok -loveletter”; content:”@GRAMMERSoft Group”;)


SHADOW


SHADOW (Secondary Heuristic Analysis for Defensive Online Warfare) je IDS pro analýzu neúspěšných i úspěšných pokusů o vniknutí. Tento nástroj pracuje v téměř reálném čase, generuje varovná hlášení a zachycuje pakety pro naslednu analýzu. Umí detekovat i neviditelné sledování sítě, prováděné pomocí polootevřené komunikace v TCP, různé ICMP útoky apod. Tento systém se skládá ze dvou prvků. Prvním jsou senzory, ty se umisťují v blízkosti výstupních bodů sítě, a druhým jsou analyzátory, které jsou umístěny někde uvnitř sítě. Senzory jsou umístěny tak, aby zachycovaly komunikaci přicházející či odcházející za hranice sítě. Data, které senzory zachytí si senzory ukládají na disk. Analyzátory pak získávají data ze senzorů a provádějí různé analýzy, jako napr. analýzy vniknutí nebo i různé statistiky síťového trafficu. Senzory mají dvě síťová rozhraní, jedno je pro ostatní prvky sítě neviditelné, a přes toto rozhraní je prováděn odposlech sítě a druhé je normálně viditelné, připojené do vnitřní sítě tak aby z něj analyzátory mohly získávat data. Díky tomuto oddělení se data, odesílaná na analyzátor nepletou mezi analyzovaná data, protože přes odposlouchávací rozhraní přichází pouze data, která s analyzátorem samotným nemají nic společného, veškeré konekce tykající se analyzátoru samotného jsou prováděny přes veřejné rozhraní. Shadow k odposlechu sítě využívá program tcpdump. Shadow sestává z několika Perlových skriptů, skripty na senzorech sbírají data pomocí tcpdumpu a ukládají je po hodinových kusech na disk, skripty na analyzátorech získávají data ze senzorů, využívají tcpdump na filtrování uživatelem požadovaných informací a vyvareji webové stránky se statistikami a výsledky analýzy, které si je pak možné prohlédnout ve webovém prohlížeči.







Na této mapce jde vidět, jak jsou senzory rozmístěny, jeden je připojen k outer perimeter a zachycuje všechny pakety jdoucí z vnějšku. Další senzor je umístěn při východu z demilitarizované zóny a je připojen na inner perimeter. Třetí senzor je umístěn při samotném vstupu do vnitřní lokální sítě u jejího firewallu. Uvnitř sítě se pak nacházejí analyzátory.


tcpdump


Jedná se o nejpoužívanější program pro odposlech sítě na linuxu. Tcpdump je klasická unixová konzolová utilita a teď si popíšeme základní prvky jeho ovládání. Za klasickými parametry pro tcpdump jako je -i pro nastavení odposlouchaného rozhraní následuje nepovinná položka výraz, která určuje vypisované pakety. Pokud ji neuvedeme, budou se vypisovat všechny pakety, to mimo jiné znamená že pokud tcpdump spouštíme přes nějakou síťovou relaci jako telnet nebo ssh, bude tcpdump vypisovat i pakety této relace, což způsobí nekonečnou smyčku výpisu. Syntaxe výrazu je podobná běžným výrazům, známým z programovacích jazyků:



typ – v tomto výrazu se zadává host, net nebo port. Ke každému z těchto klíčových slov se dále doplňuje specifikátor, například hostitelský název počítače nebo IP adresa. Klíčové slovo net přebírá parametr adresa/prefix. Například pro shodu lokální sítě třídy B napíšeme: net 192.168.0.0/16


směr – zde určujeme směr sledovaných paketů, povolenými hodnotami jsou src,dst, src or dst, src and dst.


prototyp – do tohoto výrazu se zapisuje tcp, udp,arp,rarp,ether,ip,decnet nebo lat


speciální – tento elementární výraz může nabývat hodnot broadcast,gateway,less a greater. Pokud je zadáno broadcast, matchují pouze všesměrově vysílané pakety a pokud je zadáno gateway, znamená to že ethernetová adresa se shoduje, ale IP adresa tohoto systému není ani zdrojovou, ani cílovou adresou.


logické operátory – rozpoznávají se booleovské operátory and, or, not.


relace – tyto výrazy umožňují testování jednotlivých bitů a bajtů v rámci protokolů, tímto způsobem můžeme napr. vyhledávat fragmentované pakety a některé poškozené pakety, které mohou být známkou útoku.


Jako příklad si uvedeme příkaz ve tvaru, ve kterém bude vypisovat komunikaci po ppp rozhraní cílené na DNS službu.


tcpdump -i ppp0 dst port 53 and tcp and not src net 192.168.0.0/16


Výpis z tcpdump může vypadat takto:


12:09:49.742249 IP 10.9.2.235.33269 > cuce.ruk.cuni.cz.3128: . ack 50050 win 28866 <nop,nop,timestamp 406761 684198174>
12:09:49.755633 IP cuce.ruk.cuni.cz.3128 > 10.9.2.235.33269: P 50050:51110(1060) ack 1 win 32832 <nop,nop,timestamp 684198175 406761>
12:09:49.792201 IP 10.9.2.235.33269 > cuce.ruk.cuni.cz.3128: . ack 51110 win 28866 <nop,nop,timestamp 406766 684198175>
12:09:49.827682 IP cuce.ruk.cuni.cz.3128 > 10.9.2.235.33269: . 51110:52478(1368) ack 1 win 32832 <nop,nop,timestamp 684198183 406766>
12:09:49.827821 IP cuce.ruk.cuni.cz.3128 > 10.9.2.235.33269: P 52478:52558(80) ack 1 win 32832 <nop,nop,timestamp 684198183 406766>
12:09:49.842265 IP 10.9.2.235.33269 > cuce.ruk.cuni.cz.3128: . ack 52558 win 27418 <nop,nop,timestamp 406771 684198183>




TriSentry


Je to velice používaná sada tří bezpečnostních programů od firmy Psionic. Nešíří se sice přes GPL, ale pro jednotlivce je užívání zdarma. Balík sestává z programu PortSentry, což je IDS které funguje i jako adaptivní firewall, LogSentry slouží k bezpečnostní analýze souborů protokolů a HostSentry sloužící k analýze vzorků přihlášení.


PortSentry


Tento nástroj monitoruje seznam portů TCP a UDP, který určí uživatel a sleduje v nich možné pokusy o přístup crackerů. Jakmile se cracker některého ze sledovaných portů dotkne, může nástroj spustit různé akce, jako například zaslat oznámení o přístupu na daný port nebo může dočasně či trvale zablokovat přístup daného systému k tomuto počítači. Tento nástroj dokáže detekovat také neviditelné útoky, jako napr. pootevřený útok apod. Ovšem na portu na kterém poslouchá nějaká skutečná aplikace už PortSentry poslouchat nemůže. PortSentry může pracovat v jednom ze tří režimů:


  1. Základní režim. PortSentry se sváže se zadaným seznamem portů, čeká na nich na příchozí spojení a reaguje na ně. Trojcestné zahajování TCP relace obsluhuje v Linuxu jádro systému, takže, tato metoda nedokáže odhalit neviditelné sledování TCP ani jiné typy neviditelného sledování.

  2. Režim neviditelného sledování. PortSentry otevře neformátovaný socket k naslouchání v promiskuitním režimu a vyvolá reakci při každém útoku vůči portu v zadaném intervalu. Detekuje i neviditelné sledování.

  3. Pokročilý režim neviditelného sledování. PortSentry otevře neformátovaný socket k naslouchání a vyvolá reakci při každém útoku, vůči portu v zadaném intervalu, na kterém nenaslouchá žádný skutečný proces. Tento režim detekuje i neviditelné sledování a výhodou oproti předchozímu režimu je to, že odhalí i ty, kteří se na straně klienta pokouší náhodným výběrem uhodnout otevřené porty o vysokých číslech a unést tak případně existující spojení. Další výhodou oproti předchozímu je to, že crackeři uvidí daný port jako uzavřený nebo filtrovaný a ne jako otevřený jako u základního režimu. Nevýhodou je že při zadávání podvržené zdrojové adresy může cracker vést útok DoS.


Pro většinu systémů bude nejvhodnější použít pokročilý režim neviditelného sledování , přičemž je dobré spustit vezri i pro TCP i pro UDP. Takto nakonfigurovaný PortSentry je schopen odhalit útok connect(), polootevřený útok SYN, útoky FIN, Xmas, všechny útoky sledování TCP. PortSentry oznamuje vzniklý útok pomocí funkce syslog, což předpokládá že soubory protokolů se budou pravidelně kontrolovat a že v něm případný problém rychle najdeme a ihned na něj zareagujeme. Právě k tomuto slouží další část z trojice TriSentry program LogSentry. Jiným přístupem je nastavit v PortSentry proměnou KILL_RUN_CMD a inhned po detekci útoku si nechat podat zprávu třeba posláním emailu. PortSentry také nabízí adaptivní firewall, který je možné propojit s IP tables.

Log PortSentry vypadá zhruba takto:


May 26 22:54:50 rashi portsentry[3111]: attackalert: Host 10.16.17.1 has been
blocked via wrappers with string: "ALL: 10.16.17.1"
May 26 22:54:50 rashi portsentry[3111]:
 attackalert: TCP SYN scan from host
10.16.17.1/10.16.17.1 to TCP port: 2000 from TCP port: 4427

LogSentry


Je druhým z trojice TriSentry. Tento program analyzuje v systému soubory protokolů a hledá v nich známky možného útoku, narušení bezpečnosti či jiných abnormálních jevů, generuje zprávu se souhrnými informacemi o událostech a posílá je emailem administrátorovi. Tento program se vyvolává z tabulky crontab v pravidelných časových intervalech. Nejedná se tedy o IDS, protože nepracuje v reálném čase. Upozorňuje na různé zalogované aktivity, jako napr. detekované neúspěšné pokusy o nalogování do ssh, pokusy o přeposlání pošty, ukazuje co se spustilo v programu PortSentry atd. Takto vypadají typické výsledky tohoto programu:


Active System Attack Alerts (dada)

=-=-=-=-=-=-=-=-=-=-=-=-=

04/16-16:44:45 portsentry: ATTACK: cuni.cz/111.222.111.222 TCP 80


Security Violations (dada)

=-=-=-=-=-=-=-=-=-=-=-=

05/15-19:42:44 C in DENY e0 T 151.27.1.37:1 126.193.251.197:80 S #21

05/20-03:03:15 T I= 0=e0 126.193.251.187 126.193.251.197 DF ICMP=8:0

05/21-00:21:51 T D I=e1 0=e0 230.83.97.91:1944 76 121.32.45:6346 DF TCP


PortSentry vygeneroval zprávu Active system Attack při detekci útoku ze strany cuni.cz. Cuni.cz zde hledal webový server, ale protože zde žádný neběžel, PortSentry považoval tuto komunikaci za příznak útoku a přístup z cuni.cz zablokoval. Druhé ohlášené narušení bezpečnosti začíná písmenem T a označuje protokolový záznam z IP tables. Za symbolem I= by byl identifikátor síťového rozhraní pokud by měl v daném kontextu smysl. Výraz 0=e0 znamená OUT=eth0. Následuje zdrojová a cílová IP adresa, DF znamená dont fragment nefragmentovat, ICMP=8:0 je jednak identifikace protokolu který způsobil bezpečnostní varování (zde ICMP) a 8 je číslo ICMP zprávy (8 je ping) a podtyp 0 protože u pingu žádné podtypy definované nejsou. Podobně pro třetí ohlášené narušení bezpečnosti.


HostSentry


Třetím programem ze sady TriSentry je HostSentry. Tento program analyzuje vzorky přihlášení a oznamuje odchylky od normálního stavu, jako je například první přihlášení uživatele, neobvyklá doba přihlášení uživatele a vzdálené přihlášení uživatele z neočekávané domény.




Většinu zde popisovaných programů využívají nejen systémoví administrátoři k hledání zranitelných míst, která musí co nejdříve, ale také crackeři pro vyhledávání stenych zranitelnych mist, jejichz opravu prislusny systemovy administrator zanedbal. Prvotni i pravidelnou kontrolu systemu s pomocí těchto nástrojů by měl každý provádět zejména po podstatných změnách konfigurace systému. Dalšími programy, kterým by stalo zato věnovat pozornost jsou nmap, arpwatch, ethereal a tripwire.



Zdroje:


http://nessus.org/

http://www.nswc.navy.mil/ISSEC/CID/

http://www.snort.org/

http://www.securityfocus.com

http://www.tcpdump.org/