unified2 ist eine reine Python-Parser für IDS (denken [Snort] (http://snort.org)) unified2 Binärlogformat.
Modul ermöglicht die IDS-Protokolle im Binärformat "unified2" Format in Python-Objekte zu verarbeiten.
Dabei spielt es keine Regel-IDs zu lösen und ist nicht als Ersatz für barnyard2 oder Snort selbst in dieser Rolle sein.
Hauptzweck ist es, eine Paketdaten aus dem Protokoll, mit einigen besonderen ausgelöst verbunden extrahieren Regel (und gelöst / separat über andere Mittel, beispielsweise alert_syslog oder alert_csv Schnauben Module protokolliert), so habe ich nicht viel Aufmerksamkeit auf die Verarbeitung Ereignis Metadaten bezahlt.
Modul verfügt nicht über C-Komponenten und verwendet keine ctypes, so sollte ziemlich tragbar nicht CPython Sprache Implementierungen.
Format
Format Definition von Snort-Header (src / sfutil / Unified2_common.h) über pyclibrary Modul abgeleitet und in unified2 / _format.py Datei zwischengespeichert.
Neuere Definitionen (sagen wir, wenn neue Datentypen wurden hinzugefügt) können, indem Sie das gleiche Skript auf der Snort Unified2_common.h generiert werden:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr branch lp: pyclibrary
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; cd pyclibrary
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; python ... / unified2 / _format.py ... / snort-2.XYZ/src/sfutil/Unified2_common.h
Installation
Es ist auf einem regulären Paket für Python 2.7 (nicht 3.X).
Mit pip ist der beste Weg:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installieren unified2
Wenn Sie es nicht haben, verwenden Sie:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install pip
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installieren unified2
Alternativ finden Sie auch:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installieren unified2
Oder, wenn Sie unbedingt müssen:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Aber, sollten Sie wirklich nicht tun.
Aktuelle git-Version kann wie folgt installiert werden:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip -e install 'git: //github.com/mk-fg/unified2.git#egg=unified2'
Verwendung
Einfaches Beispiel:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Import unified2.parser
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; für ev, ev_tail in unified2.parser.parse ('/ var / log / snort / snort.u2.1337060186'):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print 'Veranstaltung:', ev
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; wenn ev_tail: print 'Ereignis Schwanz: "ev_tail
Ereignisobjekt ist hier ein dict von Metadaten und ein "Schwanz", der entweder ein Blob oder ein ähnliches rekursiv analysiert Tupel von Metadaten-dict und "Schwanz" (zB für UNIFIED2_EXTRA_DATA) sein kann.
unified2.parser.Parser Schnittstelle wird am besten durch die unified2.parser.read Funktion veranschaulicht:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Parser, buff_agg = Parser (), ''
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; while True:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Buff = parser.read (src)
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; wenn nicht polieren: break # EOF
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; buff_agg + = Buff
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; while True:
buff_agg, ev = parser.process (buff_agg)
wenn ev ist None: Pause
Ausbeute ev
Idee hier ist, dass Parser.read Methode sollte mit einem Strom bezeichnet werden (zB ein Dateiobjekt), der Rückkehr jedoch viele Bytes Parser benötigt, um den nächsten einzulesenden Datenpaket (ein Paket, bei u2 log) zu erhalten, oder was gelesen werden kann im Moment, ist leere Zeichenfolge in der Regel ein Hinweis auf EOF oder vielleicht nicht blockier gelesen Rückkehr.
Parser.process dann sollte akkumuliert (durch Parser.read nennt) Puffer bezeichnet werden und bringt das erste Paket, das von dort analysiert werden kann (oder keine, wenn Puffer ist nicht groß genug), und die verbleibenden (nicht-geparsten) Pufferdaten.
Anforderungen :
- Python
Kommentare nicht gefunden