Csináld magad naplóelemzés syslog-ng-vel Höltzl Péter, CISA holtzl.peter@balabit.com http:///
Miről lesz szó? Hogyan lesz az adatból információ? Hogyan elemez a syslog-ng futásidőben? Mire tudjuk használni a kinyert tartamat?
Bevezető Összegyűjtött naplók Adathalmaz Elemezett napló üzenetek Információ Cél: Események felismerése Ne csak archíváljunk!
Az elemzési folyamat Minden üzenet felkutatása, begyűjtése Konverzió (protokoll és formátum) Az értékek, információk kigyűjtése Zajok szűrése Elemzés Reakció
Tipikus buktatók? Felkutatás Nincs üzenet Szedett-vedett formátumok Karakterkészlet eltérések Zavaró zajok
Normalizálás Nyers üzenet Közös, elemezhető forma: Azonos időpecsétek Azonos struktúra Azonos adatformátumok
Üzenet jellegzetességek Statikus és dinamikusan változó részek vegyesen: SSH: Accepted password for peter from 192.168.56.6 port 46627 ssh2 FTP: (?@192.168.56.6) [INFO] peter is now logged in POP3: pop3-login: Login: user=<peter>, method=plain, rip=192.168.56.1, lip=192.168.56.6, TLS
On-the-fly elemzés A syslog-ng pattern db: Logpathban elhelyezett, futás időben működő, üzenet klasszifikációs eszköz és adat értelmező eszköz.
A pattern-db parser Radix-tree algoritmus, XML adatbázisban Példa minták: Accepted @STRING@ for @STRING@ from @IPv4@ port @NUMBER@ ssh2 (?@@@IPv4@) [INFO] @STRING@ is now logged in pop3-login: Login: user=<@string@>, method=@string@, rip=@ipv4@, lip=@ipv4@, TLS
Parserek String parserek: @STRING@, @ESTRING:: @, @QSTRING:[]@, @ANYSTRING@ Numerikus parserek: @NUMBER@, @FLOAT@ IP parserek: @IPv4@, @IPv6@, @IPAny@
Buktatók Tartalmi ismétlődések pl. postfix to= orig_to= Egyetlen esemény, számos bejegyzés Gyakran kapcsolat nélkül Hiányos üzenetek Kezelése default értékekkel, ha van értelme
Classifikáció Üzenet osztályozása Csoportosítás Tipikus osztályok: system, violation, error, warning, info Használata a syslog-ng-ben: ${.classifier.class}
Tagging Kulcsszavazás A valódi jelentés Tipikus tag-ek: noise, login, logout, timeout, human-activity, machineactivity Használata syslog-ng-vel: $TAGS
Pattern db XML <patterndb version='2' pub_date='2010-09-19'> <ruleset name='ssh' id='123456678'> <pattern>ssh</pattern> <rules> <rule provider='bb' id='ssh-1' class='system'> <patterns> <pattern>accepted @STRING@ for @STRING@ from @IPv4@ port @NUMBER@ ssh2</pattern> <tags><tag>login</tag><tag>user</tag></tags> </patterns> </rule> </rules> </ruleset> </patterndb>
Tag vagy Class? Mi a különbség? Egy üzenet egy class Egy üzenet bármennyi tag
Hogyan használjuk? Class és tag használata: SQL mezőkben, tábla nevekben Szűrőfeltételként Fájl vagy path névként /var/log/messages.$ {.classifier.class} (messages.violations)
Artificial Ignorance A nem felismert üzenetek unknown AI szűrés az unknown classra AI folyamat: Unknown class olvasása Reakció ;-D Pattern db korrekció
Üzenet tartalom A parserek saját makrókat definiálhatnak: Accepted @STRING:.logcheck.method:@ for @STRING:.logcheck.uid:@ from @IPv4:.logcheck.ip:@ port @NUMBER:.logcheck.port:@ ssh2 (?@@@IPv4:.logcheck.ip:@) [INFO] @STRING:.logcheck.uid:@ is now logged in pop3-login: Login: user=<@string:.logcheck.uid:@>, method=@string:.logcheck.method:@, rip=@ipv4:.logcheck.ip:@, lip=@ipv4@, TLS
Üzenet tartalom A parser által megtalált tartalom saját makróban használható: ${.logcheck.uid}, ${logcheck.ip} Hiányos üzenetek kezelése: Default meghatározással: ${.logcheck.uid:-noid} VALUE XML tag-el <value>no-uid</value>
Korreláció elemzés Egy eseményhez tartozó üzenetek: Violations by IP Violations by UID Logins by UID Megvalósítás: Grep ;-) SQL view tábla
Ábrázolás és riasztás Pager script (program destination) Munin/RRD tool Reporting script
Miért syslog-ng? Szabad 8000 elérhető pattern Alakuló community A vázolt infrastruktúra elemei: Mysql, syslog-ng OSE, munin, bash, vi
Köszönöm a figyelmet! Höltzl Péter, CISA holtzl.peter@balabit.com http:///