unified2 je čistě Python parser pro IDS (myslím [Snort] (http://snort.org)) unified2 binárním formátu protokolu.
Modul umožňuje zpracovávat IDS protokoly v binárním formátu "unified2" do python objektů.
To nevyřeší pravidel ID a není míněn jako náhrada za barnyard2 nebo Snort sám v této roli.
Hlavním účelem je získat paketových dat z protokolu, spojené s některými zejména na aktivaci (a vyřešit / přihlášení odděleně prostřednictvím jiných prostředků, např alert_syslog nebo alert_csv Snort modulů) pravidlo, a tak jsem se jí není věnována dostatečná pozornost metadat zpracování událostí.
Modul nemá složky C a nepoužívá ctypes, takže by měl být poměrně přenosný non-cPython jazykových implementací.
Formát
Definice Format je odvozen od Snort hlaviček (src / sfutil / Unified2_common.h) přes pyclibrary modulu a jsou uložena v unified2 / _format.py souboru.
Novější definice (řekněme, kdyby byly přidány nové datové typy) lze generovat spuštěn stejný skript na Snort je Unified2_common.h:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr obor 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
Instalace
Je to pravidelný balík pro Python 2.7 (ne 3.X).
Použití PIP je nejlepší způsob, jak:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip nainstalovat unified2
Pokud nemáte, použijte:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install pip
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip nainstalovat unified2
Jinak viz také:
& 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 nainstalovat unified2
Nebo, pokud jste naprosto nutné:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Ale měli byste to dělat.
Současná-git verzi mohou být instalovány takto:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip nainstalovat -e 'git: //github.com/mk-fg/unified2.git#egg=unified2 "
Použít
Jednoduchý příklad:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; import unified2.parser
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; EV, ev_tail v unified2.parser.parse ("/ var / log / šňupat / snort.u2.1337060186"):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print "Událost:" EV
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; pokud ev_tail: "ocasu události:" print, ev_tail
Objekt Event Zde je dict metadat a "ocas", který může být buď blob nebo podobný rekurzivně, analyzovat tice metadat-dict a "ocas" (např UNIFIED2_EXTRA_DATA).
unified2.parser.Parser rozhraní je nejlépe ilustruje unified2.parser.read funkce:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; parser, buff_agg = Parser (), ''
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; zatímco 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; Pokud tomu tak není buff: zlomit # 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; zatímco True:
buff_agg, ev = parser.process (buff_agg)
pokud ev je None: zlomu
Výtěžek ev
Idea je, že metoda Parser.read by měla být volána s proudem (např objekt soubor), vrací se však mnoho bytů parser potřebuje získat další zpracovatelném kus dat (jeden paket, v případě log U2), nebo co si můžete přečíst v současné době, prázdný řetězec je obvykle údaj o OSZ nebo možná neblokující čtení návratu.
Parser.process pak by měla být volána s nahromaděné (o Parser.read hovory) vyrovnávací paměti, vrací první paket, který může být analyzován odtud (nebo žádný, pokud vyrovnávací paměť není dostatečně velká) a zbývající (non-analyzovat), vyrovnávací paměti dat.
Požadavky na :
- Python
Komentáře nebyl nalezen