unified2 är en ren-Python-tolk för IDS (tror [Snort] (http://snort.org)) unified2 binära loggformat.
Modul möjliggör att bearbeta IDS loggar i binärt "unified2" format till python objekt.
Det löser inte regel ids och är inte avsett att vara en ersättning för barnyard2 eller Snort själv i den rollen.
Huvudsyftet är att utvinna en paketdata från loggen, i samband med vissa särskilda utlöst (och lösas / loggade separat via andra medel, t.ex. alert_syslog eller alert_csv Snort moduler) regeln, så jag har inte betalat mycket uppmärksamhet åt bearbetning händelse metadata.
Modul saknar C-komponenter och använder inte ctypes, så borde vara ganska portabel till icke-cPython språk implementationer.
Format
Format definition kommer från Snort rubriker (src / sfutil / Unified2_common.h) via pyclibrary modul och cachelagras i unified2 / _format.py filen.
Nyare definitioner (säg, om nya datatyper tillkom) kan genereras genom att köra samma skript på Snort s Unified2_common.h:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr gren 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
Det är en vanlig paket för Python 2.7 (ej 3.x).
Använda pip är det bästa sättet:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installera unified2
Om du inte har det, använd:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install pip
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip installera unified2
Alternativt se även:
& 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 installera unified2
Eller, om du absolut måste:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Men, du borde verkligen inte göra det.
Ström git versionen kan installeras så här:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % PIP installera -e 'git: //github.com/mk-fg/unified2.git#egg=unified2'
Användning
Enkelt exempel:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; import unified2.parser
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; för ev, ev_tail i 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 "Händelse: ', ev
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Om ev_tail: print "Händelse tail: ', ev_tail
Event-objekt här är en dict av metadata och en "svans", som antingen kan vara en klump eller liknande rekursivt-analyserad tupel av metadata-dict och "svans" (t.ex. för UNIFIED2_EXTRA_DATA).
unified2.parser.Parser gränssnittet illustreras bäst genom den unified2.parser.read funktion:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; parser, buff_agg = Parser (), ''
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; medan sant:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; brungul = parser.read (src)
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; om inte polera: bryta # 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; medan sant:
buff_agg, ev = parser.process (buff_agg)
Om ev är Ingen: break
utbyte ev
Tanken här är att Parser.read metoden bör kallas med en ström (t.ex. en fil-objekt), återvänder dock många bytes parser måste få nästa parseable bit av data (ett paket, i händelse av u2 logg) eller vad kan läsas just nu är tom sträng oftast en indikation på EOF eller kanske icke-blockerande läst avkastning.
Parser.process då bör kallas med ackumulerade (av Parser.read samtal) buffert, åter det första paketet som kan tolkas däri (eller Ingen om bufferten inte är tillräckligt stort) och resterande buffertdata (-analyserad icke).
Krav :
- Python
Kommentarer hittades inte