Logverarbeitung mit syslog-ng
– Status und Zukunft
07. Sept. 2010
BalaBit IT Security
martin.grauel@balabit.com
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
martin.grauel@balabit.com
www.balabit.com