Logverarbeitung mit syslog-ng – Status und Zukunft 07. Sept. 2010 BalaBit IT Security [email protected] www.balabit.com Agenda syslog-ng Historie syslog-ng und syslog-”Standards” patterndb-Framework Quo vadis syslog-ng – Neues in v3.2 und danach Neue Lizenzierung www.balabit.com syslog-ng Historie Erstes Release 1998, meistverbreitete syslogd-Alternative und verfügbar für die meisten Linux-Distributionen Von Anfang an auf zentrales Logging ausgerichtet Viele Probleme des sylsogd Protokolls wurden adressiert Erweitertes Time-Stamp Format Zuverlässiger Logmessage Transport (TCP) Verschlüsselte, (gegenseitig) authentisierte Kommunikation Flow-control und Message Buffering … Verfügbar in unterschiedlichen Editionen (inkl. separater Roadmap) Open Source Edition Premium Edition: seit 2007 syslog-ng Store Box: seit 2008 www.balabit.com syslog-ng und syslog-”Standards” BSD-syslog RFC 3164 (Informational) Obsoleted by RFC 5424 (Erster wirklicher Standard – seit März 2009) RFC 5425: TLS-transport of syslog RFC 5426: UDP-transport of syslog Internet Draft für TCP-syslog Transport verfügbar ftp://ftp.ietf.org/internet­drafts/draft­gerhards­syslog­plain­tcp­05.txt → syslog-ng unterstützt IETF-syslog seit v3.0 (Dec. 2008) Und was ist mit zuverlässiger Nachrichtenübertragung auf Applikationsebene? RFC 3195 → Standard Track, aber nicht wirklich akzeptiert und verbreitet RFC 5848 → Standard Track bzgl. syslog-sign Für syslog-ng: Planungen in beide Richtungen noch ohne konkrete Roadmap ... www.balabit.com Neues IETF syslog-Format – Struktur ist angesagt RFC 5424 syslog-format: HEADER STRUCTURED-DATA MSG www.balabit.com Neues IETF syslog-Format – Struktur ist angesagt I HEADER STRUCTURED-DATA MSG <PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID <165>1 2003­10­11T22:14:15.003Z mymachine.example.com eventlog ­ ID47 www.balabit.com Neues IETF syslog-Format – Struktur ist angesagt II HEADER STRUCTURED-DATA MSG [ SD-ID PARAM-NAME1=”PARAM-VALUE1” … ] ... UTF­8 [exampleSDID@18372 system="X" eventID="123"] syslog-ng kann seit v3.1 benutzerspezifische Structured Data Daten setzen (rewriting) Name/Value-Paare sind als Macros verfügbar und können in Filtern etc. genutzt werden etc. www.balabit.com Neues IETF syslog-Format – Struktur ist angesagt III HEADER STRUCTURED-DATA MSG MSG ASCII | UTF­8 Leider immer noch keine Struktur in der eigentlichen Nachricht … Was nun? → Wir strukturieren die Nachricht selbst! www.balabit.com patterndb-Framework I patterndb ist ein mächtiges Framework um Log-Nachrichten zu klassifizieren Log-Nachrichten zu taggen Strukturierte Daten aus Logs zu extrahieren Zusätzliche Daten den Lognachrichten hinzuzufügen Und neu in 3.2: Event-Correlation! www.balabit.com patterndb-Framework II Funktionsweise? Der db-parser Parser lädt ein patterndb.xml File und macht daraus eine Radix-Struktur db-parser vergleicht eingehende Lognachrichten mit vordefinierten Pattern nach dem Prinzip 'longest prefix' match Pattern Parser werden verwendet, variable Daten in Logmessages zu analysieren und bei Bedarf daraus Name/Value-Paare zu generieren → Sehr gute Performance im Vergleich zu herkömmlichen RegEx-Vergleichen … ~O(1)! Pattern Parser: @NUMBER@: Matching auf dezimale und hexa-dezimale Werte @STRING@: Matching auf alphanumerische Zeichen (keine Leerzeichen) @IPv4@: Matching auf IPv4 Adressen ... www.balabit.com patterndb-Beispiel ssh Login I Log-Nachricht Accepted password for martin from 10.0.0.17 port 20117 ssh2 Pattern Accepted @ESTRING:usracct.authmethod: @for @ESTRING:usracct.username: @from @IPv4:usracct.device: @port @NUMBER:: @@ANYSTRING:usracct.service@ Tagging und Klassifizierung der Log-Message <rule provider='patterndb' id='4dd5a329­da83­4876­a431­ddcb59c2858c' class='system'> ... <tag>usracct</tag> <tag>secevt</tag> Nachrichten mit zusätzlichen Daten anreichern <value name='usracct.type'>login</value> <value name='usracct.sessionid'>$PID</value> <value name='usracct.application'>$PROGRAM</value> <value name='secevt.verdict'>ACCEPT</value> www.balabit.com patterndb-Beispiel ssh Login II Und jetzt? Wir können nach Tags filtern und die Nachricht in strukturierter Form in eine Datenbank schrieben Die folgenden Name/Value-Parre haben wir u. a. zur Verfügung: usracct.authmethod='password' usracct.username='martin' usracct.device='10.0.0.17' usracct.service='ssh2' usracct.type='login' usracct.sessionid=$PID usracct.application=$PROGRAM secevt.verdict='ACCEPT' www.balabit.com patterndb-Example ssh login III … auf damit in die Datenbank sql( type("pgsql") ... database("db") table("login_${R_YEAR}_${R_MONTH}_${R_DAY}") columns("time int", "password varchar(64)", "username varchar(64)", "device varchar(64)", "service varchar(64)", "type varchar(64)", "sessionid int", "application varchar(64)", "verdict varchar(65)") values("${R_UNIXTIME}", "${usracct.authmethod}", "${usracct.username}", "${usracct.device}", "${usracct.service}", "${usracct.type}", "${usracct.sessionid}", "${usracct.application}", "${secevt.verdict}") ); time | method | username | device | service | type | app | verdict ­­­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­­­+­­­­­­­­­­­+­­­­­­­­­+­­­­­­­+­­­­­­+­­­­­­­­ 1285694304 | password | martin | 10.0.0.17 | ssh2 | login | sshd | ACCEPT … oder in den Structured Data Teil von IETF-syslog. www.balabit.com pdbtool Ein Tool - Teil von syslog-ng (bin/pdbtool) – zum Erstellen, Testen und Konvertieren von PatternDatenbank Regeln. Im Beispiel war mit Real-Time Message Processing (db-parser() als Teil des Message-Pfads). Was ist mit bereits existierenden Log-Messages die wir parsen wollen? Kein Problem mit pdbtool! pdbtool match ­f /var/log/messages ­­filter="tags("usracct")" ­­template='$ISODATE,${usracct.username},${secevt.verdict}\n' Einfaches Parsing von existierenden Logs ist dadurch möglich. ... 2010­09­15T03:52:38+02:00,martin,ACCEPT 2010­09­15T05:10:15+02:00,martin,REJECT ... www.balabit.com Wie erstelle ich am Besten Pattern? Pattern schreiben ist einfach, aber ist doch zeitraubend wenn man sie für viele unterschiedliche Events benötigt patternize – Funktion von pdbtool - , kann sehr schnell Pattern von Logs generieren patternize basiert auf SLCT – simple logfile clustering tool (entwickelt von Risto Vaarandi) patternize ist (noch) nicht perfekt, aber ein guter Anfang: martin@ubuntu:~$ pdbtool patternize ­f /var/log/messages ... <patterns> <pattern>Accepted publickey for @ESTRING:: @from @ESTRING:: @port @ESTRING:: @ssh2</pattern> </patterns> ... patterndb Projekt ... www.balabit.com patterndb Projekt BalaBit hat eine patterndb Community Projekt ins Leben gerufen mit dem Ziel, eine große Anzahl hochqualitativer Pattern zur Verfügung zu stellen http://www.balabit.com/wiki/patterndb Es existieren bereits Patterns für diverse Login/Logout messages Pattern-Download Seite in Planung Jeder, der Pattern erstellt hat, kann diese im Rahmen des Projekts zur Verfügung stellen Zusammenarbeit mit anderen Projekten wir logcheck, ossec etc. möglich Wie komme ich an die Pattern? 1. git-Repository: git clone git://git.balabit.hu/bazsi/syslog­ng­patterndb.git /opt/syslog­ ng/etc/patterndb.d 2. Und dann einfach die Pattern-Datenbank updaten update­patterndb www.balabit.com Und was ist mit Korrelation? I syslog-ng 3.2 OSE ermöglicht erstmalig Korrelation von Nachrichten Hintergrund Viele Anwendungen oder Systeme loggen mehrere Nachrichten für das gleiche Event Ziel ist es, die Daten von den verschidenen Log-Messages in einer korrelierten Form zu haben Beispiel: postfix-Log ABF28C6DD: message­id=<30101001085250.ABF28C6DD@ubuntu­martin.foo> ABF28C6DD: from=<martin@foo>, size=332, nrcpt=2 (queue active) ABF28C6DD: to=<martin@bar>, relay=local, delay=38, delays=37/0.03/0/0.11, dsn=2.0.0, status=sent An der Stelle wollen wir den Sender und Empfänger in zusammen abspeichern: SQL wäre eine Möglichkeit, aber auch … → patterndb www.balabit.com Und was ist mit Korrelation? II Wir schreiben Pattern für Postfix Sender und Empfänger Messages und lassen syslog-ng die Name/Value-Paare in einer State-Table speichern ... <patterns> <pattern>@ESTRING:qid::@ from=&lt;@ESTRING:sender:&gt;@</pattern> </patterns> <store id="$qid" timeout="60"/> ... Ein 'join' der Daten findet statt, wenn die Message mit dem Empfänger ankommt. ... <values join="$qid"> <value name="sender">${sender}@1</value> ... Damit haben wir Sender und Empfänger in einer Struktur und können Sie zusammen abspeichern, in Datenbanken, Files, SD-Elementen ... www.balabit.com Neues von syslog-ng 3.2 - I Plugins Enwicklung vom monolithischen Programm zu einem Core-Programm mit vielen Plugins Plugins werden zur Laufzeit geladen Plugins für Sources, Destinations, Filter, Parser, Rewrite Operationen, Message-Format, Template-Funktionen ... Einfache Einbindung der Plugins @module afsocket @module afsql @module affile ... Keine Änderung in der Konfig-Syntax! www.balabit.com Neues von syslog-ng 3.2 - II SCL – syslog-ng Configuration Library Vereinfachung der syslog-ng Konfigurations-Datei durch Aufteilung in einzelne Bausteine Ziel, syslog-ng auf jeder Plattform mit der gleichen Konfiguration laufen zu lassen! @include 'scl.conf' … source s_system { system(); } scl.conf lädt das 'confgen' plugin, dass den system() Source-Driver plattformspezifisch definiert Generell ist confgen ein neues Plugin, mit dem Programm-Outputs als Teil der Konfiguration eingebunden werden können www.balabit.com Neues von syslog-ng 3.2 - III Support für non-syslog Message Sources/Formate Denkbar sind non-syslog Message Sources wie SQL snmp … Daten von dieses Sources sind bereits strukturiert, also verwenden wir die Struktur. → Normalisierung alles Messages! Ein experimentelles Plugin in syslog-ng 3.2 ermöglicht es, strukturierte Daten vom Linux process accounting zu verarbeiten → pacct() www.balabit.com Neues von syslog-ng 3.2 - III.I PACCT → Accounting des Kernels nach Beendigung eines Prozesses (spezielles Binärformat) pacct() Plugin wird durch SCL geladen und generiert Name/Value-Paare der strukturierten Daten von /var/log/account/pacct N/V Paare können z. B. in Templates verwendet werden .pacct.ac_comm .pacct.ac_udi .pacct.ac_btime ... Die wtmp-Datei (User Logins/Logours) ist ähnlich strukturiert, fehlt nur das Plugin ... www.balabit.com Neues von syslog-ng 3.2 - ... Mehr Infos zu sylsog-ng >=3.2 http://www.balabit.com/network-security/syslog-ng/opensource-logging-system/features/roadmap http://bazsi.blogs.balabit.com/2010/08/syslog-ng-3-2alpha2-released/ www.balabit.com Und danach … ? Multi-threated Architektur Skalierbarkeit auf mehrere CPU/Cores Signifikanter Performance-Zuwachs erwartet Gemeinsamer OSE/PE Kern www.balabit.com syslog-ng – Licensing < v3.2 syslog-ng wurde als zu wenig offen kritisiert syslog-ng OSE lizenziert unter GPLv2 Copyright Transfer für Contributions erforderlich; Möglichkeit einer kommerziellen Version wurde offengehalten syslog-ng PE wurde 2007 als kommerzielle 'closed source' Version released Features wurden für syslog-ng PE entwickelt und später meistens auch in OSE integriert aber auch umgekehrt Das funktionierte eigentlich ganz gut, war aber nicht wirklich von der Free Software Community akzeptiert → syslog-ng verlor in einigen Distributionen seinen Status als Standard Logging Daemon www.balabit.com syslog-ng – Licensing >= v3.2 Ziel ist es, syslog-ng 'offener' zu machen Die technische Basis dafür bildet die neue Plugin-Architektur Wie sieht das aus? syslog-ng Core ist unter LGPL (Lesser GPL) lizenziert syslog-ng OSE und PE können dadurch auf dem gleichen Core basieren Plugins werden unter der GPL (OSE) oder einer proprietären Lizenz (PE) veröffentlicht Kein Agreement für Contributions mehr notwendig Jeder kann proprietäre oder freie Plugins schreiben und mit dem syslog-ng Core nutzen www.balabit.com Nützliche Links syslog-ng OSE Webseite http://www.balabit.com/network-security/syslog-ng/opensource-logging-system BalaBit Dokumentation http://www.balabit.com/support/documentation patterndb-Projekt http://www.balabit.com/wiki/patterndb patterndb-Schema http://git.balabit.hu/?p=bazsi/syslog-ng-patterndb.git;a=blob;f=SCHEMAS.txt;hb=HEAD BalaBit syslog-ng Mailing-Liste https://lists.balabit.hu/mailman/listinfo/syslog-ng Bazsi's Blog http://bazsi.blogs.balabit.com/ syslog-ng 3.2 git repo git://git.balabit.hu/bazsi/syslog-ng-3.2.git http://git.balabit.hu/?p=bazsi/syslog-ng-3.2.git;a=summary syslog-ng Sourcen und Packages http://www.balabit.com/downloads/files?path=/syslog-ng/open-source-edition www.balabit.com Q&A BalaBit IT Security [email protected] www.balabit.com