Systémy detekce průniku v Linuxu

Roman Aprias

Tento text si klade za úkol seznámit čtenáře s volně dostupnými systémy detekce průniku pro operační systém Linux. První teoretická část slouží jako lehký úvod do problematiky. Druhá část obsahuje přehled IDS systémů a souvisejících projektů se stručným popisem. V třetí praktické části se zaměříme na nejznámější síťový systém detekce průniku - Snort. Vybudujeme jednoduchou síťovou topologii, nainstalujeme Snort a provedeme základní konfiguraci. Poté vyzkoušíme jeho reakce na nejrůznější druhy útoků. Naučíme se také psát vlastní pravidla.

Obsah

1. Teoretická část

1.1. Úvod

Bezpečnost není jen o ochraně a prevenci, ale také o detekci a reakci. Systém detekce průniku (Intrusion Detection System - IDS) je systém, který detekuje narušení nebo případné pokusy o narušení bezpečnosti počítačových systémů. Vychází z předpokladu, že úkony narušitele budou na základě přímých i nepřímých indicií odlišitelné od běžné činnosti uživatele. Existuje více metod, kterými lze detekovat narušení, např. analýzou záznamů (logů) systému nebo sledováním provozu v síti.

1.2. Dělení IDS

1.2.1. Umístění

Při dělení podle umístění je důležité, odkud IDS získává informace. Z typu informací, které má k dispozici, vyplývá nejen jeho schopnost reagovat na různé druhy útoků, ale také pokrytí hlídané oblasti. Hostitelsky orientované IDS detekují pouze útoky vedené na systém, na kterém jsou provozované. Síťové IDS zpravidla pokrývají větší části sítě.

1.2.2. Princip činnosti

Důležitou vlastností IDS je princip činnosti při detekování útoků. Určuje např. schopnost rozpoznávat dosud neznámé typy útoků nebo míru generovaných falešných varování.

1.2.3. Okamžik vyhodnocování

Okamžik vyhodnocování určuje rychlost detekování útoku. Vyhodnocování v reálném čase je sice výkonnostně náročnější, ale umožňuje okamžitou reakci na útok.

2. Přehled IDS a souvisejících projektů

2.1. Snort

http://www.snort.org

Snort je nejznámnější a nejpoužívanější NIDS. Je mu věnována celá kapitola 3. Praktická část.

2.2. LIDS - Linux Intrusion Detection System

http://www.lids.org

LIDS je softwarová záplata linuxového jádra, která umožňuje významně zvýšit bezpečnost Linuxu. Má dva základní úkoly: pomoc při včasném odhalení napadení systému a omezení práv superuživatele (root) tak, aby nemohl napáchat v systému velké škody. Tím se sice administrátor připravuje o část svých práv, ale zároveň jsou tato práva odepřena i útočníkovi. Jeho hlavní vlastnosti jsou:

2.3. Tripwire

http://www.tripwire.org/

Na systémovém disku existuje řada souborů, které se za normálních okolností nemění. Např. adresáře /bin, /sbin, /lib a další. Jejich změna tak může znamenat:

  1. Správace systému nainstaloval nový program nebo jeho novou verzi.
  2. Došlo k vážné chybě.
  3. Povedl se průnik do systému a útočník nainstaloval vlastní programy a provedl důležité systémové změny.
Je velmi důležité mít o stavu systémových souborů přehled a pravidelně je kontrolovat. Tripwire je nejznámější zástupce kategorie hlídačů integrity souborů.

2.4. Bro

http://bro-ids.org

Bro je NIDS určený pro vysokorychlostní sítě (Gbps). Má svůj vlastní skriptovací jazyk pro popis signatur. Obsahuje nástroj pro konverzi signatur ze Snorta.

2.5. Firestorm

http://www.scaramanga.co.uk/firestorm

Firestorm je vysoce vykonný NIDS. Tvůrci tvrdí, že je až 2x rychlejší než Snort. Nicméně projekt není vyvíjen intenzivně jako Snort, nemá tak širokou uživatelskou a vývojářskou komunitu.

2.6. Prelude

http://www.prelude-ids.org

HIDS Framework umožňující jednotný přístup k různým bezpečnostním aplikacím. Obsahuje vlastní NIDS modul, ale lze použít i Snorta. HIDS modul podporuje zpracování logů z např. Syslogu, Netfilteru, Cisco prvků, Nagiosu atd. Distribuovaná architektura - sensory, databáze, managery (sbírají a vyhodnocují informace získané ze sensorů a ukládají je do databáze).

2.7. OSSIM (Open Source Security Information Management)

http://www.ossim.net/

Podobný projekt jako Prelude, klade důraz na korelaci - pohled na všechny události ze všech systémů v jednom formátu na jednom místě. Korelace je prováděna automaticky na základě informací získaných ze sensorů.

2.8. BASE (Basic Analysis and Security Engine)

http://secureideas.sourceforge.net/

Webové rozhraní k databázi Snorta.

2.9. Squil

http://sguil.sourceforge.net/

Konzole napsaná v tcl/tk umožňující přístup k databázi Snorta v reálném čase.

2.10. Bleeding Snort

http://www.bleedingsnort.com

Komunita tvořící neoficiální pravidla pro Snorta.

3. Praktická část

Praktická část je zaměřena na vyzkoušení nejznámějšího volně dostupného IDS Snort a jeho konfiguraci, reakci na útoky a psaní pravidel.

3.1. Síťová topologie

Abychom mohli začít experimentovat s IDS, musíme vybudovat vhodnou síťovou topologii. Než však začneme vše zapojovat, využijeme připojení do sítě Internet a stáhneme a nainstalujeme všechen protřebný software (viz
3.2. Instalace).

Schéma zapojení síťové topologie je zobrazeno na obrázku. Počítač útočníka se nachází ve vnější síti (např. Internet) a je připojen na rozhraní směrovače e0. Vnitřní síť představuje rozbočovač připojený na rozhraní směrovače e1 a k němu připojené dva počítače. Jeden představuje cíl (může např. poskytovat služby jako SMTP, WWW, DNS atd.), na druhém poběží IDS systém Snort. Toto rozmístění je jenom ukázkové, nikdy nesmíme zapomenout, že útok může příjít odkudkoliv (i z vnitřní sítě!). Místo rozbočovače lze použít přepínač, ale počítač s IDS systémem musí být připojen na monitorovací port (v Cisco terminologii SPAN port), který lze nakonfigurovat tak, aby na něj byl kopírován provoz z ostatních portů.

Zkušenější čtenáři sami provedou konfigurace podle obrázku, pro ostatní je tu pomoc:

!POZOR! Při konfiguraci a instalaci programů v Linuxu musíme pracovat je superuživatel (root). Superuživatelem se staneme pomocí příkazu su.

Pokud máte k dipozici pouze jeden počítač, vše provádějte jenom na něm. Při spouštění Snorta parametrem -i lo pak určíte, aby naslouchal na loopback rozhraní. Útok pak budete provádět také na looback adresu.

3.2. Instalace

Na IDS počítači nyní nainstalujeme Snorta. Můžeme instalovat z balíčkovacího systémů použité distribuce. Pokud balíček není k dispozici nebo je zastaralé verze, je třeba Snorta přeložit ze zdrojových kódů. Je to jednoduché a netřeba se toho bát, stačí se držet následujících kroků:
  1. Změníme adresář cd /usr/local/src
  2. Stáhneme zdrojové kódy Snorta wget http://www.snort.org/download/snort-stable.tar.gz
  3. Soubor rozbalíme tar -zxf snort-stable.tar.gz
  4. Změníme adresář cd snort-stable
  5. Přeložíme a nainstalujeme ./configure && make && make install
  6. Vytvoříme adresář pro logování mkdir /var/log/snort
  7. Vytvoříme adresář pro konfigurační soubory a soubory se signaturami mkdir /usr/local/snort
  8. Překopírujeme konfigurační soubory cp -r etc /usr/local/snort
  9. Překopírujeme soubory se signaturami cp -r rules /usr/local/snort
Na počítači útočníka nainstalujeme následující software. Použijeme balíčkovacího systému distribuce Debian. Zájemci si jako cvičení můžou vše přeložit ze zdrojových kódů (pomocí
www.google.com je určitě snadno naleznete, pozor na závislosti - idswakeup např. potřebuje hping2). Nyní můžeme na IDS počítači zkoušet Snort.

3.3. Snort - módy

Snort může pracovat ve čtyřech módech:

3.4. Sniffer mode

Zobrazení IP a TCP/UDP/ICMP hlaviček: snort -v

Na IDS počítači spustíme Snorta a z útočníkova počítače zkusíme ping na cíl: ping 192.168.1.3
Na obrazovku se nám zobrazí odchycené pakety:

04/28-16:26:34.733730 10.0.0.2 -> 192.168.1.3
ICMP TTL:58 TOS:0x0 ID:8368 IpLen:20 DgmLen:28
Type:8  Code:0  ID:45841   Seq:34552  ECHO
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Zobrazení hlaviček spojové vrstvy: snort -ve

04/28-15:41:03.481718 0:0:C:46:3E:8B -> 0:2:B3:2B:6B:25 type:0x800 len:0x62
10.0.0.2 -> 192.168.1.3 ICMP TTL:63 TOS:0x0 ID:0 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:27395   Seq:1  ECHO
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Zobrazení datové části paketu: snort -ved

Nyní můžeme zkusit telnet 192.168.1.3

Přenosem prvních tří paketů se naváže TCP spojení (three-way handshake) a v dalších už jsou přenášena data.

04/28-15:46:16.135204 0:0:C:46:3E:8B -> 0:2:B3:2B:6B:25 type:0x800 len:0x4A
10.0.0.2:1035 -> 192.168.1.3:23 TCP TTL:63 TOS:0x10 ID:41626 IpLen:20 DgmLen:60 DF
******S* Seq: 0x65AA3326  Ack: 0x0  Win: 0x16D0  TcpLen: 40
TCP Options (5) => MSS: 1460 SackOK TS: 233916 0 NOP WS: 0

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

04/28-15:46:16.135376 0:2:B3:2B:6B:25 -> 0:0:C:46:3E:8B type:0x800 len:0x4A
192.168.1.3:23 -> 10.0.0.2:1035 TCP TTL:64 TOS:0x0 ID:0 IpLen:20 DgmLen:60 DF
***A**S* Seq: 0x62DE8CEA  Ack: 0x65AA3327  Win: 0x16A0  TcpLen: 40
TCP Options (5) => MSS: 1460 SackOK TS: 133491 233916 NOP WS: 0

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

04/28-15:46:16.136541 0:0:C:46:3E:8B -> 0:2:B3:2B:6B:25 type:0x800 len:0x42
10.0.0.2:1035 -> 192.168.1.3:23 TCP TTL:63 TOS:0x10 ID:41627 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x65AA3327  Ack: 0x62DE8CEB  Win: 0x16D0  TcpLen: 32
TCP Options (3) => NOP NOP TS: 233916 133491

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

04/28-15:46:16.168213 0:0:C:46:3E:8B -> 0:2:B3:2B:6B:25 type:0x800 len:0x5D
10.0.0.2:1035 -> 192.168.1.3:23 TCP TTL:63 TOS:0x10 ID:41628 IpLen:20 DgmLen:79 DF
***AP*** Seq: 0x65AA3327  Ack: 0x62DE8CEB  Win: 0x16D0  TcpLen: 32
TCP Options (3) => NOP NOP TS: 233919 133491
FF FD 03 FF FB 18 FF FB 1F FF FB 20 FF FB 21 FF  ........... ..!.
FB 22 FF FB 27 FF FD 05 FF FB 23                 ."..'.....#

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Šikovný čtenář si může zkustit jako cvičení odchytit heslo.

3.5. Paket logger mode

Při specifikování adresáře pro logování, Snort automaticky přejde do módu logování:

snort -vde -l /var/log/snort

V sítích s velkým provozem je výhodnější logovat do binárního souboru:

snort -vde -l /var/log/snort -b

Formát binárního souboru je stejný jako u programu tcpdump. Proto může být přečten programy tcpdump, ethereal a také Snortem:

snort -vd -r packet.log

(Snort umí logovat také do databáze, např. MySQL nebo PostgreSQL)

3.6. NIDS mode

Pro zapnutí NIDS módu je třeba specifikovat konfigurační soubor s definovanými pravidly.

snort -c /usr/local/snort/etc/snort.conf -l /var/log/snort

3.7. Konfigurační soubor

Pro přehlednost lze do konfiguračního souboru vkládat další soubory a vytvářet proměnné

include soubor
var jméno hodnota

3.7.1. Proměnné

Na začátku konfiguračního souboru jsou definované proměnné Toto jsou proměnné (většina je použita později v pravidlech) standardně uvedené v konfiguračním souboru. V případě potřeby lze definovat vlastní.

3.7.2. Dekóder

Dekodér sbírá pakety z různých typů síťových rozhraní (Ethernet, PPP, SLIP atd.) a připravuje je pro další zpracování preprocesory. Konfigurace voleb dekóderu se provádí následovně

config direktiva [: hodnota]

Např. většinou chceme, aby Snort běžel jako démon (config daemon) nebo vypnout generování varování (spousta zbytečných jako např. Short UDP packet, length field > payload length) při dekódování (config disable_decode_alerts).

3.7.3. Preprocesory

Další důležitou části konfigurace jsou preprocesory - moduly rozšířující funkce Snortu. Vložení a konfigurace preprocesoru se provádí pomocí

preprocessor jméno: volby

Preprocesory jsou už v standardní konfiguraci vhodně nakonfigurované.

3.7.4. Pravidla

A na závěr následuje nejdůležitější část - pravidla (signatury). Pravidla jsou rozděleny do jednotlivých souborů, podle zaměření. Pokud chceme určitá pravidla vložit/odstranit stačí odkomentovat/zakomentovat vložení příslušný soubor.

3.8. Generování útoků

Nyní máme Snorta nakonfigurovaného a můžeme ho spustit v NIDS módu. Soubor s varovaními si necháme vypisovat na obrazovku

tail -f /var/log/snort/alert

a na útočníkově počítači zkusíme generovat útoky.

3.8.1. Teardrop

Teardrop je útok, který využívá slabosti při opětovném sestavování fragmentů IP paketů. Vytváří se série paketů s překrývajícími se položkami ofsetů.

crash -t 10.0.0.2 192.168.1.3

Vygeneruje varování

[**] [113:2:1] (spp_frag2) Teardrop attack [**]
04/28-16:02:53.029350 10.0.0.2 -> 192.168.1.3
UDP TTL:254 TOS:0x0 ID:3868 IpLen:20 DgmLen:24
Frag Offset: 0x0003   Frag Size: 0x0004

3.8.2. Ping of Death

Poslání ICMP (nebo obecně jakéhokoliv, např. UDP) paketu, který je větší než než maximum povolené ve specifikaci (65 535 B). Tento abnormálně velký paket může způsobit havárii, zamrznutí nebo restart celého systému. Tento útok je však poměrně starý a většina nových operačních systému je proti němu imunní. Hping nám sice neumožní odeslat paket větší 65 535 B, ale i paket velikosti 65 500B Snort spolehlivě detekuje.

hping -d 65510 192.168.1.3

Vygeneruje varování

[**] [113:1:1] (spp_frag2) Oversized fragment, probable DoS [**]
04/28-16:19:34.074902 10.0.0.2 -> 192.168.1.3
TCP TTL:63 TOS:0x0 ID:69 IpLen:20 DgmLen:1500 MF
Frag Offset: 0x0172   Frag Size: 0x05C8

3.8.3. Útoky na web server

Jeden z možných útoků na špatně nakonfigurovaný web server je např. přístup k nepovoleným souborům (např. /etc/passwd).

lynx http://192.168.1.3/bin/kill

Vygeneruje varování

[**] [1:1328:6] WEB-ATTACKS /bin/kill command attempt [**]
[Classification: Web Application Attack] [Priority: 1]
04/28-16:34:26.592250 10.0.0.2:1046 -> 192.168.1.3:80
TCP TTL:63 TOS:0x0 ID:3514 IpLen:20 DgmLen:537 DF
***AP*** Seq: 0x1489F76F  Ack: 0x15B3B623  Win: 0x16D0  TcpLen: 32
TCP Options (3) => NOP NOP TS: 522968 422538

3.8.4. Skenování

Skenováním může útočník zjišťovat např. potencionální cíle (ping na všechny adresy podsítě), běžící služby (skenování portů: horizontální - stejný port na více cílech, vertikální - více portů na jednom cíli) atd. Skenování nemusí provádět jenom útočník, ale i např. červi, kteří hledají nové hostitele. Nejpoužívanější síťový skener je nmap. My vyzkoušíme vyhledání běžících služeb (vertikální skenování portů).

nmap 192.168.1.3

Vygeneruje varování

[**] [1:469:3] ICMP PING NMAP [**]
[Classification: Attempted Information Leak] [Priority: 2]
04/28-16:26:34.733730 10.0.0.2 -> 192.168.1.3
ICMP TTL:58 TOS:0x0 ID:8368 IpLen:20 DgmLen:28
Type:8  Code:0  ID:45841   Seq:34552  ECHO
[Xref => http://www.whitehats.com/info/IDS162]

[**] [122:1:0] (portscan) TCP Portscan [**]
04/28-16:26:54.873106 10.0.0.2 -> 192.168.1.3
PROTO255 TTL:0 TOS:0x0 ID:0 IpLen:20 DgmLen:154 DF

[**] [1:1420:11] SNMP trap tcp [**] 
[Classification: Attempted Information Leak] [Priority: 2] 
04/28-16:26:54.941564 10.0.0.2:52650 -> 192.168.1.3:162
TCP TTL:46 TOS:0x0 ID:58897 IpLen:20 DgmLen:40
******S* Seq: 0xA486A523  Ack: 0x0  Win: 0x1000  TcpLen: 20
[Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-0013]
[Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-0012]
[Xref => http://www.securityfocus.com/bid/4132]
[Xref => http://www.securityfocus.com/bid/4089]
[Xref => http://www.securityfocus.com/bid/4088]

[**] [1:1418:11] SNMP request tcp [**]
[Classification: Attempted Information Leak] [Priority: 2] 
04/28-16:26:54.978892 10.0.0.2:52650 -> 192.168.1.3:161
TCP TTL:51 TOS:0x0 ID:50302 IpLen:20 DgmLen:40
******S* Seq: 0xA486A523  Ack: 0x0  Win: 0x400  TcpLen: 20
[Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-0013]
[Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-0012]
[Xref => http://www.securityfocus.com/bid/4132]
[Xref => http://www.securityfocus.com/bid/4089]
[Xref => http://www.securityfocus.com/bid/4088]

[**] [1:1421:11] SNMP AgentX/tcp request [**]
[Classification: Attempted Information Leak] [Priority: 2]
04/28-16:26:55.087161 10.0.0.2:52650 -> 192.168.1.3:705
TCP TTL:55 TOS:0x0 ID:63300 IpLen:20 DgmLen:40
******S* Seq: 0xA486A523  Ack: 0x0  Win: 0x400  TcpLen: 20
[Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-0013]
[Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2002-0012]
[Xref => http://www.securityfocus.com/bid/4132]
[Xref => http://www.securityfocus.com/bid/4089]
[Xref => http://www.securityfocus.com/bid/4088]
Z výpisu varování (
3.9 Formát varování) je vidět, že skenování je detekováno nejen podle signatur (ping charakteristický pro NMAP, pokusy o SNMP spojení), ale i preprocesorem portscan (vyhodnocuje např. počet pokusů o navázáni spojení z jedné IP adresy za určité časové okno).

3.8.5. IDSwakeup

IDSwakeup je shellový script, který generuje falešné pozitivní útoky. Slouží k testování IDS systémů. Pro generování paketů používá programy Hping a iwu (součást balíku).

IDSwakeup 10.0.0.1 192.168.1.3 1 3

Třetí parametr je počet opakování a čtvrtý hodnota TTL obsažena v generovaných paket (kontrolní otázka: implicitní hodnota parametru TTL je 1, proč ji musíme zvětšit?)

generované varování

3.9. Formát varování

[**] [1:469:3] ICMP PING NMAP [**]

První číslo je Generator ID označující, která část Snorta varování vygenerovala. Seznam je k dispozici v souboru etc/generators. Druhé číslo je Snort ID (nebo také Signature ID - jednoznačně identifikuje typ varování). Seznam Snort ID pro preprocesory je dispozici v souboru etc/gen-msg.map. Dále jsou Snort ID uvedena přímo v definicích pravidel. Třetí číslo je revision ID - revizní číslo pravidla.

Nyní můžeme prozkoumat předchozí vygenerované varování. Vidíme že např. varování o Teardrop útoku je generováno defragmentačním preprocesorem Frag2.

3.10. Psaní pravidel

Pravidla mají velmi jednoduchou syntaxi. Každé pravidlo se skládá z hlavičky a těla.


akce protokol zdroj_ip zdroj_port -> cil_ip cil_port (volby)
                                                    |
                                          hlavička  |  tělo

Hlavička pravidla obsahuje tyto části: Tělo obsahuje volby a jejich argumenty.

(volba_1:argumenty; volba_2:argumenty; ... volba_n:argumenty)

Seznam všech voleb a argumentů je dispozici v manuálu Snorta

Nyní můžeme zkusit napsat jednoduchá pravidla. Například chceme detekovat všechná přihlášení telnetem z vnější sítě na cílový počítač.

alert tcp !192.168.1.0/24 any -> 192.168.1.3 23 (msg:"prihlaseni z vnejsí site telnetem na 192.168.1.3";)

nebo chceme detekovat všechná přihlášení jako root k ftp na cílovém počítači

alert tcp any any -> 192.168.1.3 21 (msg:"ftp root 192.168.1.3";content:"USER root";nocase;)

Dobré cvičení teď může být vyhledání a prostudování pravidel, pomocí kterých byly vygenerovány všechna předchozí varování.

4. Literatura

4.1. Bezpečnost

Introduction to Network Security
Bezpečnost IS/IT (IDS - kapitola 6)
Systémová opatření bezpečnosti v intranetových sítích

4.2. DOS útoky

Denial of Service Attack

4.3. IDS

Systémy detekce průniku
An Introduction to Intrusion Detection
FAQ: Network Intrusion Detection Systems
Intrusion Detection Systems
Intrusion Detection Systems Technology, Part 1: A - H
Intrusion Detection Systems Technology, Part 1: H - Z
Intrusion Detection, Theory and Practice

4.4. Snort

Intrusion Detection Systems with Snort
Máte v sieti votrelca?
Manuál

4.5. LIDS

LIDS - Linuxový systém odhalení průniku

4.6. Firewally

Principy firewallů
Firewalls FAQ

4.7. Červi

Digging For Worms, Fishing For Answers