<?xml version="1.0" encoding="iso-8859-2"?>
<!DOCTYPE zprava SYSTEM "techrep.dtd">
<zprava cislo="5/2006">
<nazev>CESNET Intrusion Detection System</nazev>
<autor>Pavel Vachek</autor>
<datum>15. červen 2006</datum>

<p><b>Keywords:</b> IDS, Instrusion detection system, LaBrea, CESNET CSIRT</p>

<h1>Abstract</h1>

<p>This technical report describes a simple system for detecting hacker- and  virus--induced intrusions into a selected LAN. Its main component is the LaBrea program distributed under GPL licence and run on a PC server under Linux. Auxiliary programs built within the CESNET CSIRT activity allow automated distribution of warning e-mails to the administrators of selected networks where the attacks originated. Unlike other Intrusion Detection Systems, this IDS needs no human intervention after installation.</p>

<h1>Úvod</h1>

<p>CESNET provozuje od konce roku 2002 jednoduchý a užitečný systém pro detekci neoprávněného přístupu (Intrusion Detection System, dále jen IDS), který po instalaci prakticky nevyžaduje lidskou obsluhu a pravidelně informuje správce sítí o těch jejich strojích, z nichž byly zaznamenány útoky. Správci sítí jsou tedy včas informováni, mohou napadené stroje včas odvirovat nebo odpojit od sítě, a tak omezit další šíření virů a zlepšit pověst sítě.</p>

<p>Účelem této zprávy je informovat o systému IDS další zájemce, zejména z řad administrátorů sítí universit a AV ČR s velkými alokacemi IP adres, a přesvědčit je, aby podobný systém nainstalovali ve svých vlastních sítích.</p>


<h1>Projekt IDS</h1>

<p>IDS CESNETu má tyto hlavní součásti:<br></br>
<ul compact="1">
<li>Program <prikaz>LaBrea</prikaz> je podrobně popsán v následující kapitole.</li>
<li><prikaz>LaBreaBackEnd</prikaz> = program, který v pravidelných intervalech prohlíží data vygenerovaná programem <prikaz>LaBrea</prikaz>. Pokud v nich najde záznamy o útoku ze sítí, které nás zajímají, vyhledá kontaktní adresy správců příslušných sítí a domén, vybere z nich ty nejvhodnější a vygeneruje soubory s varovnými zprávami a údaji o útocích</li>
<li><prikaz>LaBreaReport</prikaz> = program, který rozesílá dopisy obsahující data vygenerovaná programem <prikaz>LaBreaBackEnd</prikaz>.</li>
</ul></p>

<p>Pomocné funkce pro systém IDS:<br></br>
<ul compact="1">
<li>Předběžná filtrace dat generovaných programem <prikaz>LaBrea</prikaz></li>
<li>skript pro spuštění, restart a zastavení běhu IDS</li>
<li>pravidelné restartování serveru IDS prostřednictvím <prikaz>cron</prikaz>u.</li>
</ul>Všechny tyto součásti jsou podrobně popsány níže.</p>


<h1>Program LaBrea</h1>

<p>Cílem programu <prikaz>LaBrea</prikaz> <cite href="Lis03"/> je zpomalit a pokud možno zastavit šíření počítačových virů a hackerských aktivit. Jeho autor ho napsal jako reakci na virus <prikaz>Code Red</prikaz>, který začal řádit v červenci 2001. Jak vyplyne z následujících odstavců, Internetu prospívá i instalace samotného serveru <prikaz>LaBrea</prikaz>; po doplnění na IDS server je užitek z <prikaz>LaBrey</prikaz> ještě výrazně větší.</p>

<p>Hlavní rysy programu <prikaz>LaBrea</prikaz>:
<ul compact="1">
<li>monitoruje adresy nebo bloky IP adres, na nichž dosud neexistují ani neexistovaly žádné uživatelské stroje. Lze tedy předpokládat, že na tyto adresy se chtějí připojit jen hackeři nebo počítačové viry</li>
<li>předstírá, že na těchto adresách existují funkční stroje -- reaguje místo nich na pokusy o připojení TCP nebo na ICMP Echo (<prikaz>ping</prikaz>), a to tak, aby komunikace trvala co nejdéle a útočníci nemohli škodit jinde.</li>
</ul></p>
<p>Na pokusy o připojení umí LaBrea reagovat následujícími způsoby:
<ul compact="1">
<li>TARPITTING: Na přijatý paket SYN odpoví pomocí SYN+ACK, na další pakety nereaguje. Spojení po určité době (řádově minuty) skončí na retransmission timeout</li>
<li>CONNECTION TRAPPING: Po úspěšně navázaném spojení (SYN -- SYN+ACK -- ACK) <prikaz>LaBrea</prikaz> stále inseruje velmi malé okno pro příjem dat. Takto navázané spojení samo od sebe nikdy neskončí, a přitom vyžaduje jen nepatrnou šířku pásma. IDS CESNETu využívá právě tohoto režimu</li>
<li>DDoS HANDLING: Útoky typu Distributed Denial of Service uvádějí ve zdrojových adresách paketů zfalšované adresy strojů. Pokud napadený stroj přijme paket SYN, jehož zdrojová adresa je z rozsahu kontrolovaného programem <prikaz>LaBrea</prikaz>, odpoví na něj paketem SYN+ACK. <prikaz>LaBrea</prikaz> tento paket přijme a zareaguje na něj paketem RST; tím se toto spojení zruší a zatížení napadeného stroje se zmírní.</li>
</ul>
Záznamy o incidentech <prikaz>LaBrea</prikaz> zaznamenává do systémového logu nebo do zvoleného souboru.</p>


<h1>Doporučená hardwarová konfigurace IDS</h1>

<p>Při výběru vhodného stroje můžeme vycházet z těchto dlouhodobých zkušeností:
<ul compact="1">
<li>IDS neklade velké nároky na výkon procesoru</li>
<li>šířka pásma přijímaných dat je nastavitelná. Průměrná detekovaná šíře pásma IDS CESNETu bývá do 120 kb/s; maximální povolenou šířku pásma nastavujeme na 300 kb/s</li>
<li>nejsilnější útok, který byl zaznamenán během roku 2005 (pátek večer -- pondělí ráno), po odfiltrování útoků z nezajímavých částí Internetu vygeneroval nekomprimovaný log o velikosti asi 130 MB (komprimovaný soubor asi 4.5 MB). Nároky na kapacitu disků tedy nejsou velké -- záleží hlavně na tom, jak dlouho chceme přijatá data archivovat.</li>
</ul></p>

<p>V současné době je IDS CESNETu instalován na starším stroji DELL PowerEdge 1400SC v konfiguraci:
<ul compact="1">
<li>CPU Intel Pentium III, 933 MHz</li>
<li>512 MB RAM</li>
<li>dvoukanálový řadič SCSI Adaptec AIC7899</li>
<li>2 SCSI disky FUJITSU MAN3184MP (18.4 GB, 10k otáček/min)</li>
<li>2 ethernetová rozhraní Intel Pro 100+ (jedno pro přístup pomocí SSH a odesílání varovných dopisů správcům sítí, druhé pro monitorování útoků)</li>
<li>operační systém SuSE Linux.</li>
</ul></p>

<p>IDS server doporučujeme připojit co nejblíže k hraničnímu routeru, který propojuje síť instituce a páteřní síť CESNETu. Na podsíť monitorovanou systémem IDS ovšem neaplikujeme žádná omezení provozu (ochrana před síťovými viry apod.). Připojení přes přepínač nedoporučujeme, protože při monitorování rozlehlejší podsítě, jež zlepšuje účinnost systému, by se mohla přeplnit ARP tabulka přepínače.
</p>

<h1>Instalace</h1>

<p>Předpokládejme, že naší instituci byl přidělen adresový rozsah 172.16.0.0/16, tj. 65536 IP adres; z nich jsme dosud nevyužili a jistě ani nevyužijeme blok 172.16.224.0/22, tj. 1024 IP adres. Tento adresový blok vyhradíme pro IDS; bude ho monitorovat rozhraní Eth1.</p>

<p>Administrativní rozhraní Eth0 systému IDS má přidělenu adresu např. 172.16.1.2; tato adresa je v našem případě součástí podsítě o velikosti např. /25 (128 IP adres). Uvedená IP adresa je jediná, kterou IDS zveřejňuje a která musí mít reversní záznam; z této adresy odesíláme dopisy správcům těch sítí, jejichž stroje se pokoušely připojit na IP adresy monitorované rozhraním Eth1. Na rozhraní Eth0 povolujeme přístup pomocí <prikaz>SSH</prikaz> pouze z několika vybraných adres.</p>

<p>Před zahájením instalace systému <prikaz>LaBrea</prikaz> kontrolujeme, zda byly v rámci distribuce nainstalovány programy <prikaz>Gcc</prikaz>, <prikaz>Perl</prikaz>, <prikaz>Libpcap</prikaz> a <prikaz>Whois</prikaz>. Poslední uvedený program <cite href="DIt06"/> je součástí SuSE Linux a několika dalších distribucí. Lze ho najít i na adrese <adresa>http://ftp.debian.org/debian/pool/main/w/whois</adresa>. Nejnovější je <soubor>whois_4.7.13.tar.gz</soubor> (59 kB, 2.4.2006).</p>

<p>
Z <adresa>http://prdownloads.sourceforge.net/libdnet</adresa> stáhneme nejnovější versi programu <prikaz>Libdnet</prikaz>. V našem případě to byl soubor <soubor>libdnet-1.11.tar.gz</soubor> (436 kB, 19.1.2006).</p>

<p>
Z <adresa>http://prdownloads.sourceforge.net/labrea</adresa> stáhneme nejnovější versi programu <prikaz>LaBrea</prikaz> -- pravděpodobně soubor <soubor>labrea-2.5-stable-1.tar.gz</soubor> (206 kB, 30.10.2003).</p>

<p>Standardním způsobem
<vstup><br></br>
$ ./configure<br></br>
$ make<br></br>
$ su<br></br>
$ make install<br></br>
</vstup>
nainstalujeme nejprve program <prikaz>Libdnet</prikaz>, pak <prikaz>LaBrea</prikaz>.</p>

<p>Program <prikaz>LaBrea</prikaz> spustíme ručně ve zkušebním režimu (použije se pouze rozhraní Eth0, provoz v síti se nijak neovlivní):</p>

<p><vstup>$ labrea -T -z</vstup></p>

<p>Program <prikaz>LaBrea</prikaz> by měl zobrazit zhruba toto:<pre>
Wed May 31 16:01:31 2006  LaBrea will attempt to capture unused IPs.
Wed May 31 16:01:31 2006  Full internal BPF filter: arp or (ip and ether dst host 00:00:0F:FF:FF:FF)
Wed May 31 16:01:31 2006  LaBrea will log to stdout
Wed May 31 16:01:31 2006  Logging will be very verbose.
Wed May 31 16:01:31 2006  Initiated on interface: eth0
Wed May 31 16:01:31 2006  Host system IP addr: 172.16.1.2, MAC addr: 00:12:34:56:78:9a
Wed May 31 16:01:31 2006  ...Processing configuration file
Wed May 31 16:01:31 2006  ... End of configuration file processing

Wed May 31 16:01:31 2006  Network number: 172.16.1.0
Wed May 31 16:01:31 2006  Netmask: 255.255.255.128
Wed May 31 16:01:31 2006  Number of addresses LaBrea will watch for ARPs: 127
Wed May 31 16:01:31 2006  Range: 172.16.1.0 - 172.16.1.127
Wed May 31 16:01:31 2006  Throttle size set to WIN 10
Wed May 31 16:01:31 2006  Rate (-r) set to 3
Wed May 31 16:01:31 2006  Test mode run complete... LaBrea is exiting.
Wed May 31 16:01:31 2006  LaBrea exiting...
Wed May 31 16:01:31 2006  35/0 packets (received/dropped) by filter
</pre></p>

<p>V následujícím kroku spustíme program tak, aby IDS využíval obou rozhraní:
<ul compact="1">
<li>administrátorské rozhraní je stále Eth0, adresa 172.16.1.2/25</li>
<li>monitorovaná síť 172.16.224.0/22 na Eth1, IP adresa = 172.16.225.77</li>
<li>maximální šířka pásma = 300 kbit/s</li>
<li>jsme si jisti, že k adresám v monitorovaném rozsahu má přístup pouze <prikaz>LaBrea</prikaz> -- zvolíme režim Auto Hard Capture, No ARP Sweep.</li>
</ul></p>

<p>Odpovídá tomu tato příkazová řádka:</p>
<p><pre>
$ labrea -b -H -i eth1 -I 172.16.225.77 --no-arp-sweep \
  -o -p 300 -v -z
</pre></p>

<p>Pokud všechno správně funguje i teď, začneme rozhraní Eth1 provozovat jako unnumbered interface, tj. bez přidělené IP adresy. 
Následující odstavce podrobně popisují instalaci v operačním systému SuSE Linux; uživatelé jiných distribucí použijí toho, co jejich operační systém nabízí.</p>

<p>Původní stav nenakonfigurovaného rozhraní Eth1 je např.:</p>
<pre>
$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:09:87:65:43:21
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
</pre>

<p>Pomocí konfiguračního programu <prikaz>YaST</prikaz> (operační systém SuSE Linux) nastavíme potřebné parametry tohoto rozhraní včetně jeho IP adresy (libovolná adresa ze zvoleného rozsahu, zde opět 172.16.225.77). Po nakonfigurování ohlásí <prikaz>ifconfig</prikaz> asi toto:</p>

<pre>
$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:09:87:65:43:21
          inet addr:172.16.225.77  Bcast:172.16.227.255  Mask:255.255.252.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:660 (660.0 b)  TX bytes:460 (460.0 b)
</pre>

<p>Konfigurační soubor tohoto rozhraní, který se nalézá v adresáři <soubor>/etc/sysconfig/network</soubor>, teď obsahuje:</p>

<pre>
$ more ifcfg-eth-id-00\:09:87\:65\:43\:21
BOOTPROTO='static'
BROADCAST='172.16.227.255'
IPADDR='172.16.225.77'
MTU=''
NETMASK='255.255.252.0'
NETWORK='172.16.224.0'
REMOTE_IPADDR=''
STARTMODE='onboot'
UNIQUE='Hkyc.MvtRJ6g27Q1'
_nm_name='bus-pci-0000:01:0a.0'
</pre>

<p>Pozor: pokud chceme obsah tohoto souboru zálohovat, pojmenujeme záložní soubor tak, aby se lišil už začátek jeho názvu -- např. <soubor>sav-ifcfg-eth-id-00\:09\:87\:65\:43\:21</soubor>.</p>

<p>Vhodným textovým editorem odstraníme údaje BROADCAST, IPADDR, NETMASK a NETWORK. Soubor pak vypadá takto:</p>

<pre>
$ more ifcfg-eth-id-00\:09\:87\:65\:43\:21
BOOTPROTO='static'
BROADCAST=''
IPADDR=''
MTU=''
NETMASK=''
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='onboot'
UNIQUE='Hkyc.MvtRJ6g27Q1'
_nm_name='bus-pci-0000:01:0a.0'
</pre>

<p>Operační systém restartujeme. Měl by přitom ohlásit asi toto:

<pre>
Setting up network interfaces:
    lo
    lo        IP address: 127.0.0.1/8   .  .  .  .  .  .  .  .  .  .  done
Waiting for mandatory devices:
  eth-id-00:12:34:56:78:9a eth-id-00:09:87:65:43:21
    eth0      device: AAAAA Corp. [Ethernet ABCD] (rev 08)
    eth0      configuration: eth-id-00:12:34:56:78:9a
    eth0      IP address: 172.16.1.2/25
    eth1      device: BBBBB Corp. [Ethernet EFGH] (rev 09)
    eth1      configuration: eth-id-00:09:87:65:43:21
Setting up service network  .  .  .  .  .  .  .  .  .  .  .  .  .  .  done
</pre></p>

<p>Je vidět, že rozhraní Eth1 je také funkční, ale nemá přidělenu IP adresu. Program <prikaz>ifconfig</prikaz> zobrazí stav rozhraní Eth1 takto:

<pre>
$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:09:87:65:43:21
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:442 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3199 (3.1 Kb)  TX bytes:1005 (1.0 Kb)
</pre></p>

<p>Program <prikaz>LaBrea</prikaz> spustíme pomocí této příkazové řádky:</p>

<p><pre>
$ labrea -b -E 00:09:87:65:43:21 -H -i eth1 -I 172.16.225.77 \
  -n 172.16.224.0/22 --no-arp-sweep -O -o -p 300 -v -z
</pre></p>

<p>V tomto režimu můžeme program <prikaz>LaBrea</prikaz> provozovat nějakou dobu podle potřeby. Můžeme vyzkoušet jeho další možnosti (volitelné parametry příkazové řádky nebo konfiguračního souboru), zkusíme se do monitorovaného rozsahu adres připojit např. programem <prikaz>Telnet</prikaz>, vyzkoušíme reakci na <prikaz>ping</prikaz>, zjistíme, jak časté jsou útoky DDoS zdánlivě vycházející z naší sítě, atd.</p>

<p>Přitom pravděpodobně zjistíme, že program generuje obrovské množství dat o útocích vycházejících i z oblastí, které nemůžeme ovlivnit. Soustředíme se pouze na sítě z autonomního systému AS2852, tj. na sítě &cesnet;, jeho členů a zákazníků. Všechna data, která program <prikaz>LaBrea</prikaz> generuje, tedy budeme filtrovat programem <prikaz>grep</prikaz> tak, aby nám k dalšímu zpracování zůstaly jen:
<ul compact="1">
<li>záznamy o útocích vycházejících z AS2852. Toto filtrování nemusí být dokonalé -- přesnou filtraci IP adres zajistí pole @ownnet v programu <prikaz>LaBreaBackEnd</prikaz></li>
<li>záznamy o všech přijatých paketech SYN+ACK -- příznacích útoků DDoS</li>
<li>záznamy o všech přijatých paketech <prikaz>ping</prikaz> -- dále se nezpracovávají, ale pomáhají při kontrole činnosti IDS</li>
<li>zprávy o šířce pásma -- pomáhají posoudit aktivitu hackerů a užitek z IDS. </li>
</ul>
K tomu všemu slouží soubor <soubor>/var/log/LBstrings</soubor>.</p>

<p>Dále musíme zajistit, aby se program <prikaz>LaBrea</prikaz> automaticky spustil po zavedení operačního systému, aby bylo možné jeho výsledky v pravidelných intervalech zpracovat a aby se program uměl vypořádat i s následky případného výpadku systému. To všechno zajistí soubor <soubor>/etc/init.d/labrea</soubor>, který nainstalujeme příkazem</p> <p><vstup>$ insserv -v labrea</vstup>.
<ul compact="1">
<li>Při spuštění (<prikaz>labrea start</prikaz>) spustí program <prikaz>LaBrea</prikaz>; jeho filtrovaná výstupní data se přidávají na konec existujícího souboru <soubor>/var/log/LaBrea.new</soubor></li>
<li>při zastavení (<prikaz>labrea stop</prikaz>) ukončí programy <prikaz>LaBrea</prikaz> a <prikaz>grep</prikaz></li>
<li>při restartu (<prikaz>labrea restart</prikaz>), k němuž dochází v časech definovaných v <soubor>crontab</soubor>u,</li>
<ul compact="1">
<li>ukončí programy <prikaz>LaBrea</prikaz> a <prikaz>grep</prikaz></li>
<li>výstupní soubor <soubor>/var/log/LaBrea.new</soubor> přejmenuje na <soubor>/var/log/LaBrea</soubor></li>
<li>znovu spustí programy <prikaz>LaBrea</prikaz> a <prikaz>grep</prikaz>; filtrovaná výstupní data programu <prikaz>LaBrea</prikaz> se začnou zapisovat do nového souboru <soubor>/var/log/LaBrea.new</soubor></li>
</ul>
<li>příkaz <prikaz>labrea status</prikaz> zobrazí stav programu <prikaz>LaBrea</prikaz> a oznámí počet řádek v jeho výstupním souboru <soubor>/var/log/LaBrea.new</soubor>.</li>
</ul>
</p>
<p>Výsledky získané programem <prikaz>LaBrea</prikaz> zpracovává IDS každý pracovní den několikrát -- tak, jak je to definováno v <soubor>crontab</soubor>u uživatele <adresa>root</adresa>. Pokaždé proběhnou tyto operace:
<ul compact="1">
<li>spuštění skriptu <soubor>/etc/init.d/labrea</soubor> s parametrem <vstup>restart</vstup></li>
<li>spuštění dalšího skriptu <soubor>/var/log/LBbe.sh</soubor>, který</li>
<ul compact="1">
<li>spustí program <prikaz>LaBreaBackEnd</prikaz> (zpracování logu programu <prikaz>LaBrea</prikaz>)</li>
<li>pokud došlo k útokům ze sítí AS2852, spustí program <prikaz>LaBreaReport</prikaz> (rozeslání varovných dopisů správcům)</li>
<li>vygeneruje soubor <soubor>/var/log/START</soubor> s časovým razítkem</li>
<li>log programu <prikaz>LaBrea</prikaz> správně pojmenuje a zkomprimuje.</li>
</ul>
</ul>
</p>

<p>
Programy <prikaz>LaBreaBackEnd</prikaz> a <prikaz>LaBreaReport</prikaz> jsou napsané v jazyce <prikaz>Perl</prikaz>. Oba vyžadují instalaci modulu <prikaz>Mail::Sender</prikaz> z  <adresa>http://search.cpan.org/dist/Mail-Sender</adresa>. Nejnovější verse je <soubor>Mail-Sender-0.8.13.tar.gz</soubor> z 25.2.2006. Nainstalujeme ho např. těmito příkazy:<br></br>
<vstup><br></br>
$ perl Makefile.PL<br></br>
$ make<br></br>
$ make test<br></br>
$ make install<br></br>
</vstup>
</p>

<p>Přitom je třeba definovat několik implicitních hodnot, které <prikaz>Mail::Sender</prikaz> ke své činnosti potřebuje. Nejdůležitější z nich je adresa poštovního serveru. Pokud provozujeme <prikaz>Postfix</prikaz> na témže stroji jako IDS, jako adresu poštovního serveru uvedeme <vstup>localhost</vstup>. Na všechny ostatní dotazy lze odpovědět stiskem <vstup>Enter</vstup> nebo (u implicitního kódování) <vstup>n</vstup>.</p>

<p>Program <prikaz>LaBreaBackEnd</prikaz> je poměrně složitý systém, který původně sloužil ke zpracování dat o útocích vycházejících z celého Internetu. Systém IDS CESNETu ho ale využívá v jednodušším režimu:</p>

<p><vstup>
$ LaBreaBackEnd -b -i file1 -l limit -O -v</vstup>

<pre>-b		provoz v dávkovém režimu
-i file1	file1 je název vstupního souboru (výstupní soubor programu LaBrea)
-l limit	pokud počet útoků z jedné IP adresy nepřesáhne hodnotu limit, ignorujeme je.
		Pokud lim=0, zpracujeme všechny útoky z této adresy
-O		zpracujeme pouze útoky ze sítí uvedených v poli @ownnet
-v		výpis podrobnějších diagnostických informací.
</pre></p>

<p>Hlavním účelem programu <prikaz>LaBreaBackEnd</prikaz> je zjištění adres elektronické pošty všech správců sítě, z níž byl útok přijat. Pokud k IP adrese útočícího stroje existuje platný reversní záznam, zjistí <prikaz>LaBreaBackEnd</prikaz> i adresy správců příslušné domény. Ze vzniklého seznamu adres program vybere jednu nebo několik nejvhodnějších adres; pokud vhodné adresy nenajde, pokusí se je sám vygenerovat, je--li to možné, a přidá je k adresám již nalezeným.</p>

<p>Program se snaží minimalisovat počet odeslaných dopisů: pokud byly zaznamenány útoky z různých sítí nebo domén, k nimž program po optimalisaci adres přiřadil stejné adresy elektronické pošty správců, pošle na tyto adresy jediný společný dopis s informacemi o všech útocích detekovaných v příslušném časovém intervalu.</p>

<p>Program generuje v pracovním adresáři protokol o běhu programu s implicitním názvem <soubor>yymmddhh.log</soubor> udávajícím datum a hodinu ukončení programu. Pokud byly zjištěny útoky ze sítí, které nás zajímají, vznikne i
<ul compact="1">
<li>adresář <soubor>result</soubor> obsahující data o útocích pro program <prikaz>LaBreaReport</prikaz></li>
<li>archivní soubor s těmito daty -- implicitně <soubor>yymmddhh.zip</soubor>.</li>
</ul>
</p>

<p>Program <prikaz>LaBreaBackEnd</prikaz> také odešle administrátorovi systému IDS zprávu SMS o výsledcích běhu (počet detekovaných chyb formátu ve vstupních datech, počet útočících strojů a počet vygenerovaných datových souborů).</p>

<p>Program <prikaz>LaBreaReport</prikaz> je spouštěn, pouze pokud program <prikaz>LaBreaBackEnd</prikaz> vygeneroval nějaká data o zjištěných útocích. Čte soubory v adresáři <soubor>result</soubor> a po vhodném naformátování a doplnění vysvětlujících informací je rozešle elektronickou poštou. Po odeslání je implicitně vymaže. I on nabízí různé možnosti parametrů na příkazové řádce; za normálních okolností využíváme pouze:</p>

<p>
<vstup>$ LaBreaReport -k -i</vstup>
<pre>-k	odeslané soubory se nevymažou, ale přejmenují na *.sent
-i	existence souborů *.sent v adresáři result je tolerována.
</pre>
</p>

<p>Při testování činnosti programu lze s výhodou použít parametrů
<pre>-t	dopisy se neodesílají, soubory se nemažou
-T	dopisy se posílají jen na adresu $testaddr
-v	výpis podrobnějších diagnostických informací.
</pre>
</p>

<p>Program <prikaz>LaBreaBackEnd</prikaz> obsahuje proměnné, které je vhodné zkontrolovat a případně zkonfigurovat podle potřeb sítě. Jsou to především:
<pre>@ignoredom	pokud doménová adresa útočícího stroje obsahuje některou 
		adresu uvedenou v @ignoredom, nepošle se správcům této domény
		žádná stížnost
@ndom		útoky z domén zde uvedených budou ignorovány
@nipadd		útoky z jednotlivých IP adres zde uvedených budou ignorovány
@nipnet		útoky ze sítí zde uvedených budou ignorovány
@ownnet		při volbě parametru -O budou monitorovány pouze sítě uvedené 
		v tomto poli
$smsadd		adresa, na niž se odesílá SMS o výsledku běhu.
</pre>
</p>

<p>Informace o tom, kde přesně leží IP adresy sítě monitorované systémem IDS, nezveřejňujeme. Tomu napomáhají i následující dvě proměnné v programu <prikaz>LaBreaBackEnd</prikaz>:
<pre>$strin	řetězec (cílová IP adresa), který chceme kvůli utajení &ldots;
$strout		&ldots; nahradit tímto řetězcem.
</pre>
</p>

<p>I program <prikaz>LaBreaReport</prikaz> je vhodné zkonfigurovat. Jde o tyto proměnné:
<pre>$bccaddr	adresy, na něž se posílají slepé kopie varovných dopisů,
		pokud není zvolen testovací režim -t nebo -T
$testaddr	adresa, na niž se posílají dopisy v testovacím režimu -T.
</pre>
</p>


<h1>Závěr</h1>

<p>Systém IDS v dejvické síti CESNET2 byl původně navržen tak, aby detekoval a hlásil útoky z celosvětového Internetu. Má tedy mnoho vlastností, které se v nynějším režimu práce nevyužívají, ale které autor zatím nechce odstranit.</p>

<p>Důvod, proč se IDS omezuje na hlášení útoků pocházejících ze sítě CESNET2, není technický, ale administrativní. Jakmile začal systém IDS rozesílat svá varování, začali adresáti těchto zpráv (v průměru kolem tisíce) odpovídat takto:
<ol compact="1">
<li>Za zprávy děkují, případně i napíší, v čem byl problém. Často jde o odpovědi autoresponderů</li>
<li>o zprávy nestojí a uvádějí seznam domén nebo IP adres, které máme ignorovat</li>
<li>o zprávy nestojí, ale uvádějí správnou adresu, kam zprávy posílat</li>
<li>o zprávy nestojí, považují je za SPAM</li>
<li>posílají zavirované dopisy a SPAM.</li>
</ol>
</p>

<p>Reakce správce IDS:
<ul compact="1">
<li>Bod č. 1 potěší</li>
<li>program <prikaz>LaBreaBackEnd</prikaz> je navržen tak, aby uměl zvládat požadavky podle bodů 2, 3 a 4</li>
<li>s bodem 5 obvykle nelze nic dělat (správci jsou neschopní nebo přímo angažovaní v Black Hat community).</li>
</ul></p>

<p>Zásadní problém s monitorováním celosvětového Internetu je v tom, že systém IDS pak vyžaduje každodenní dozor člověka, který by až několik hodin denně trávil korespondencí se správci a podle jejich požadavků průběžně zdokonaloval  konfiguraci programu <prikaz>LaBreaBackEnd</prikaz>. Přitom se projeví zásadní problémy: neplatné, dávno zastaralé kontaktní údaje o správcích sítí i domén, a neexistující kontaktní adresy pro zasílání stížností podle RFC 2142 (<adresa>abuse@example.net</adresa>). Pokud správci sítí a domén své kontaktní údaje sami neudržují, je velká část práce administrátora IDS marná.</p>

<p>Po zvážení těchto zkušeností se autor zprávy rozhodl soustředit se na síť CESNET2 a přesvědčit správce všech připojených sítí, aby zkontrolovali své kontaktní údaje v RIPE DB a zřídili i kontaktní adresu pro zasílání stížností. U všech universitních sítí a u většiny zákazníků je to hotovo, poměrně malá část ještě zbývá dokončit.</p>

<p>Systém IDS se v provozu velmi osvědčuje: na rozdíl od klasických systémů IDS nevyžaduje pravidelnou údržbu signatur útoků a nehrozí mu ani nebezpečí falešných poplachů. Bude však ještě užitečnější po nasazení na dalších místech sítě CESNET - lze oprávněně předpokládat, že se výrazně zlepší a zrychlí účinnost detekce útoků vycházejících přímo z těch sítí, jejichž správci tento systém IDS instalují.</p>

<h1>Konfigurační soubory</h1>

<h2>Konfigurace <soubor>crontab</soubor> uživatele <adresa>root</adresa></h2>
<p><pre>
$ crontab -l
# Every working day at 6.05, 9.05, 12.05, 15.05 GMT:
5 6,9,12,15 * * 1-5 /etc/init.d/labrea restart; sh /var/log/LBbe.sh
</pre>
</p>

<h2>Soubor <soubor>/var/log/LBbe.sh</soubor></h2>
<p><pre>
#! /bin/sh
BZIP2_BIN=/usr/bin/bzip2
DATESTRING=`/bin/date +%y%m%d%H`
LBBE_LNK=/root/bin/LaBreaBackEnd
LBREP_LNK=/root/bin/LaBreaReport
LABREA_LOG=/var/log/LaBrea
LABREA_LOG_SAV=/var/log/LaBrea.$DATESTRING
LABREA_START=/var/log/START
TOUCH_BIN=/usr/bin/touch

echo "Processing the LaBrea log file, sending results (if any)..."
$LBBE_LNK -b -l 0 -i $LABREA_LOG -O -v &amp;&amp; $LBREP_LNK -k -i
echo "Creating the START timestamp..."
$TOUCH_BIN $LABREA_START
echo "Renaming the LaBrea log file..."
mv -f --backup=t $LABREA_LOG $LABREA_LOG_SAV
echo "Compressing the LaBrea log file..."
$BZIP2_BIN $LABREA_LOG_SAV
echo "Done."
</pre></p>

<h2>Soubor <soubor>/var/log/LBstrings</soubor></h2>
<p><pre>
ting: 195\.113\.
ting: 195\.178\.[6789]\d\.
ting: 193\.84\.[34]\d\.
ting: 193\.84\.1[679]\d\.
ting: 193\.84\.2[012]\d\.
ting: 146\.102\.
ting: 147\.3[23]\.
ting: 147\.22[89]\.
ting: 147\.23[01]\.
ting: 147\.251\.
ting: 158\.19[46]\.
ting: 160\.21[67]\.
Current average bw
Inbound SYN/ACK
Responded to a Ping
</pre>
</p>

<h2>Soubor <soubor>/etc/init.d/labrea</soubor></h2>
<p><pre>
#! /bin/sh
#
# /etc/init.d/labrea
#
### BEGIN INIT INFO
# Provides: labrea
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 3 5
# Description: Start the LaBrea program
### END INIT INFO
LABREA_BIN=/usr/local/sbin/labrea
test -x $LABREA_BIN || exit 5
GREP_BIN=/usr/bin/grep
test -x $GREP_BIN || exit 5
. /etc/rc.status
rc_reset
case "$1" in
    start)
        echo -n "Starting LaBrea 2.51, appending to existing log"
        /sbin/startproc -f $LABREA_BIN -b -E 00:09:87:65:43:21 -H -i eth1 \
          -I 172.16.225.77 -n 172.16.224.0/22 --no-arp-sweep -O -o -p 300 \
          -v -z | $GREP_BIN -f /var/log/LBstrings &gt;&gt; /var/log/LaBrea.new &amp;
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down LaBrea 2.51..."
        /sbin/killproc -TERM $LABREA_BIN
        sleep 1
        rc_status -v
        echo -n "Shutting down grep..."
        /sbin/killproc -TERM $GREP_BIN
        sleep 1
        rc_status -v
        ;;
  restart)
        echo -n "Shutting down LaBrea 2.51..."
        /sbin/killproc -TERM $LABREA_BIN
        sleep 1
        rc_status -v
        echo -n "Shutting down grep..."
        /sbin/killproc -TERM $GREP_BIN
        sleep 1
        rc_status -v
        echo "Renaming the resulting log file to be processed by LBbe..."
        mv -f /var/log/LaBrea.new /var/log/LaBrea
        sleep 1
        echo -n "Starting LaBrea 2.51, opening new log file..."
        /sbin/startproc -f $LABREA_BIN -b -E 00:09:87:65:43:21 -H -i eth1 \
          -I 172.16.225.77 -n 172.16.224.0/22 --no-arp-sweep -O -o -p 300 \
          -v -z | $GREP_BIN -f /var/log/LBstrings &gt; /var/log/LaBrea.new &amp;
        sleep 1
        rc_status -v
        ;;
    status)
        echo -n "Checking LaBrea 2.51 status: "
        wc -l /var/log/LaBrea.new | cut -f1 -d" " &gt; /var/log/LaBreaLC
        echo -n `cat /var/log/LaBreaLC`
        echo -n " log lines"
        rm -f /var/log/LaBreaLC
        /sbin/checkproc $LABREA_BIN
        rc_status -v
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac
rc_exit
</pre></p>

<p>Pozn.: Soubory <soubor>LaBreaBackEnd</soubor> a <soubor>LaBreaReport</soubor>
se průběžně vyvíjejí. Jsou vystaveny na adrese <adresa>ftp://ftp.cesnet.cz/local/ids</adresa> a podepsány PGP klíčem 1BEDF25D (<adresa>Pavel.Vachek@cesnet.cz</adresa>; fingerprint = 6627 E8B9 29EC A28A EBE3 8A7F 44C4 BABC 1BED F25D).</p>
<p>

<seznamknih>
<kniha id="DIt06">Marco d'Itri: Whois -- an improved whois client.  <adresa>http://www.linux.it/~md/software</adresa>
</kniha>

<kniha id="Kry06">Jan Krynicky: Mail::Sender -- module for sending mails with attachments through an SMTP server. <adresa>http://search.cpan.org/dist/Mail--Sender</adresa>
</kniha>

<kniha id="Lis03">Tom Liston: Project LaBrea. <adresa>http://labrea.sourceforge.net</adresa> and <adresa>http://www.hackbusters.net/Worm%20and%20Virus%20Defense.pdf</adresa>
</kniha>

<kniha id="Vac03">Zabezpečení lokálních sítí CESNET2. In: Vysokorychlostní síť národního výzkumu a její nové aplikace, str. 228&ldots;231. Praha 2003.  <adresa>http://www.cesnet.cz/doc/2003/zprava/security.html</adresa>
</kniha>

</seznamknih></p>

</zprava>

