BalaBit syslog-ng

Werbung
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=<@ESTRING:sender:>@</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
Herunterladen