Hlavní navigace

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

19. 8. 2003
Doba čtení: 6 minut

Sdílet

Ve druhém článku o LIDS jsme se věnovali technice konfigurování. Dnes seriál ukončíme. Budeme se zabývat odstraňováním některých problémů spjatých s LIDS, skrytím procesů a podíváme se, jak LIDS zareaguje na průzkum (scanning) portů počítače.

Odstraňování problémů

Vedle samotného návrhu pravidel za účelem kvalitního zabezpečení OS je asi tato pasáž nejobtížnější.

Kdo si zkoušel softwarovou záplatu LIDS nainstalovat a sledoval průběžně předchozí díly seriálu, dostal se zákonitě do fáze, kdy se setkává s nejrůznějšími hláškami a varováními operačního systému (OS), který nepočítá s omezeními, jež jsou na něj uvalena výchozími LIDS ACL pravidly a globálními schopnostmi. Tyto hlášky se zejména objevují na systémové konzole při startu a provozu OS a zapisují se do log souborů. Rámcově se pokusím naznačit metody, jak alespoň některé z hlavních nebo nejčastějších hlášek odstranit. Hlavní práce a zpočátku i nezanedbatelný díl experimentování způsobem pokus-omyl ovšem bude spočívat na vás čtenářích. Při následných implementacích softwarové záplaty LIDS lze vyzkoušená ACL pravidla a dříve nasbírané zkušenosti využít a instalace LIDS je již o mnoho snažší. V této souvislosti odkazuji na 7. kapitolu Sample Configuration­sLIDS FAQ, kde jsou uvedeny skripty ACL pravidel pro nejběžněji používané služby. V průměru lze na serveru s běžícími základními službami vystačit s asi 50–100 ACL pravidly.

Nejširší pole působnosti z pohledu zabezpečení OS mají níže uvedená pravidla převzatá (a přepsaná do čitelné podoby) z úvodní části originálního LIDS konfiguračního souboru /etc/lids/lid­s.conf.

lidsconf -A -o /sbin -j READONLY
lidsconf -A -o /bin -j READONLY
lidsconf -A -o /boot -j READONLY
lidsconf -A -o /root -j READONLY
lidsconf -A -o /lib -j READONLY
lidsconf -A -o /usr -j READONLY
lidsconf -A -o /etc -j READONLY
lidsconf -A -o /etc/lids -j DENY
lidsconf -A -o /var/log -j APPEND
Další řádky nejsou z prostorových důvodů vypsány.

/etc/mtab

Poněvadž adresář /etc dle FHS (File system Hierarchy Standard) obsahuje konfigurační soubory operačního systému, výchozí nastavení LIDS povoluje pouze jeho čtení. Do /etc/mtab však mají tendenci zapisovat utility (u)mount. Cesta k odstranění těchto problémů vede přes přidávání parametru -n ve všech výskytech příkazů (u)mount ve startovacích a ukončovacích dávkách systému. Dále jsem také vytvořil následující symbolický odkaz (link)

# ln -sf /proc/mounts /etc/mtab

a v /etc/rc.d/rc.sy­sinit zakomentoval řádky

>/etc/mtab
rm -f /etc/mtab~ /etc/mtab~~

/etc/initrunlvl

Proces init zmíněný soubor nově vytváří při každém startu OS a vždy s jiným i-node číslem. Viz LIDS FAQ. Jedná se o neškodnou chybu, kterou bohužel nelze odstranit. Můžete ji ignorovat, funkčnost init procesu to neovlivní.

Rotace logů

Aby případný vetřelec v systému nemohl za sebou smazat stopy své návštěvy, chrání se adresář /var/log následujícím ACL pravidlem

# lidsconf -A -o /var/log -j APPEND

Program logrotate ovšem potřebuje v inkriminovaném adresáři (/var/log) vytvářet i nové soubory. Uděláme pro něj tedy výjimku, ve které použijeme dva zatím nevysvětlené parametry příkazu lidsconf.

# lidsconf -A -s /usr/sbin/crond -o /var/log -t 0402-0403
  -i 2 -j WRITE

Co vlastně výše uvedené pravidlo znamená? Démonu crond se povoluje zápis do /var/log, ale z důvodu vyššího zabezpečení pouze v čase specifikovaném volbou -t. V tomto čase (04:02) crond denně spouští dávky nacházející se v /etc/cron.daily včetně dávky logrotate. Parametr -i (inheritance) potom říká, že uvedené povolení platí nejen pro crond, ale dědí jej i všichni jeho potomci do úrovně 2. Úroveň lze dle potřeby zvyšovat. Hodnota –1 znamená nekonečnou úroveň.

Jestliže se rozhodnete pro použití časových ACLs, jež souvisejí s crond, nezapomeňte také zabezpečit, pokud tomu ještě tak není, jeho konfigurační tabulky v adresářích /var/spool/cron, /etc/cron.d a soubor /etc/crontab.

Povolení portů pro služby

LIDS ve výchozím stavu zakazuje službám použít (bind) jakýkoli systémový port z rozsahu 0–1023. Je to dáno vypnutou globální schopností CAP_NET_BIND_SER­VICE. Povolit přístup k portu (22) z tohoto intervalu pro nějakou službu (např. sshd) znamená přidat do skriptu s našimi ACL pravidly řádek podobný následujícímu:

# lidsconf -A -s /usr/sbin/sshd -o CAP_NET_BIND_SERVICE
  22-22 -j GRANT

Porty za jménem schopnosti CAP_NET_BIND_SER­VICE se mohou zadat jako rozsah (se znakem pomlčka) nebo výčet rozsahů (rozsahy oddělované čárkou).

Použití funkce strace

Ve většině případů Vás LIDS logy a hlášky navedou k navržení vhodných ACL pravidel, která zařídí potřebné výjimky. Pokud se však setkáte s programem, který neposkytuje příliš mnoho informací, lze s výhodou použít funkci strace. Samozřejmě nejdříve jí musíte přidělit schopnost trasování procesu (CAP_SYS_PTRACE)

# lidsconf -A -s /usr/bin/strace -o CAP_SYS_PTRACE -j GRANT

Skrytí procesu

Pokusme se „ukrýt“ například poštovní server sendmail, o kterém jsme se zmiňovali v úvodu prvního dílu v souvislosti s tím, že by se mohl stát předmětem bezpečnostních problémů. Na Red Hat Linux 8.0, kde LIDS představuji, je distribuována verze sendmailu 8.12.5. Tzn. architektura poštovního serveru už využívá dvou procesů.

# ps -ef|grep sendmail
root  685  1 0 15:22 ?   00:00:00 sendmail: accepting connections
smmsp 695  1 0 15:22 ?   00:00:00 sendmail: Queue runner@01:00:00

Jedná se však pouze o jeden program spustěný dvakrát s různými argumenty, jak ukazuje další výpis

# cd /var/run; cat sendmail.pid sm-client.pid
685
/usr/sbin/sendmail -bd -q1h
695
/usr/sbin/sendmail -L sm-msp-queue -Ac -q1h

Kroky pro „ukrytí“ procesu využívají schopnosti CAP_HIDDEN

# lidsadm -S -- -LIDS
# lidsconf -A -s /usr/sbin/sendmail.sendmail -o CAP_HIDDEN -j GRANT
# lidsadm -S -- +RELOAD_CONF
# ps -ef|grep sendmail
root       825   608  0 17:15 pts/0    00:00:00 grep sendmail

Sloveso ukrýt jsem zde vždy dával do uvozovek. Důvod je ten, že ukrytí je v tomto případě pouze částečné. Proces sendmail už není evidován v /proc, a tak není viditelný přes nástroje typu ps, top. Nicméně v OS i nadále budou existovat určité stopy svědčící o běhu programu sendmail. Především to jsou soubory sendmail.pid a sm-client.pid v adresáři /var/run. Dobré je skrýt pomocí ACL pravidel adresář/var/run pro vše kromě nutných systémových dávek pracujících s pid soubory. Nicméně ve výpisu netstat -an stále budeme vidět, že na smtp portu 25 naslouchá nějaký proces.

Pro jiné programy než sendmail však může být technika „ukrytí“ procesu plně vyhovující.

IDS – Systém odhalení průniku

LIDS zaznamenává prohlížení (scanning) portů počítače, pokud je záplatované jádro přeloženo s volbou Port Scanner Detector in kernel. Dokonce i při kradmém (half-open) průzkumu portů počítače, např. ze stroje s fiktivní IP adresou 192.168.22.20 po­mocí příkazu nmap -sS IP_address, LIDS reaguje a ve /var/log/messages se objeví zpráva tvaru

Aug  5 17:51:32 router1 kernel: LIDS: (undetermined program)
 pid 0 ppid 0
uid/gid (0/0) on (null tty) : Port scan detected:
 192.168.22.20 scanned 268
closed ports including 173 ports < 1024) - logging
 disabled for (60)s

Po odstranění chybových hlášek by měly log soubory obsahovat převážně historii pokusů o překonání ACL pravidel a globálních schopností, které chrání náš systém. Ve spojení s nástroji typu swatch, logsurfer nebo zapnutým LIDS avizováním pak můžeme být automaticky o těchto událostech informováni i vzdáleně.

Závěr

Nyní už víme o LIDS dost, abychom mohli rekapitulovat. Domnívám se, že se jedná o dosti zajímavý nástroj, jehož možnosti, pokud se zvládnou, převáží nad vyšší pracností nutnou pro jeho počáteční implementaci. Samozřejmě LIDS vyžaduje důkladně prostudovat svou vlastní dokumentaci (např. LIDS HOWTO) před jeho instalací, nezanedbatelný stupeň znalostí o operačním systému a konečně čas a trpělivost s jeho vyladěním. LIDS není určen pro vývojové servery nebo počítače, ale pro firewally a z bezpečnostního hlediska kritické servery, kde běží spíše méně než více služeb. Vyladěný a fungující LIDS na místě firewallu jistě potěší každého příznivce Linuxu.

CS24_early

Nevýhodou je, že LIDS je určen pro jádro z www.kernel.org a není součástí standardního jádra. Tím se ztracejí záplaty jádra a optimalizace od distributorů Linuxu jako např. RedHat, SuSE, Debian apod. Pozitivní na druhou stranu je, že LIDS je svižně implementován na nová jádra, viz www.lids.org.

LIDS umožňuje výrazně zvýšit bezpečnost systému, omezit všemohoucnost administrátora (root), nabízí IDS a schopnost aktivního informování (avizovaní) o pokusech proniknout do operačního systému. LIDS figuruje mezi Top 50 Security Tools pro Linux (na rozdíl od jiných podobně zaměřených záplat jádra). Pokud se však rozhodujete, zda nasadit LIDS, dvakrát zvažte jeho vhodnost pro daný účel, abyste zbytečně nepoužívali kanón na vrabce.

Byl pro vás článek přínosný?