unified2 on puhdas-Python jäsennin IDS (ajatella [Snort] (http://snort.org)) unified2 binary lokimuotoa.
Moduuli mahdollistaa käsitellä IDS kirjautuu binary "unified2" -muodossa python esineitä.
Se ei ratkaise sääntö tunnukset ja ei ole tarkoitus olla korvaava barnyard2 tai Snort itse kyseisessä tehtävässä.
Päätarkoitus on poimia pakettidata lokista, liittyy joitakin erityisesti laukeaa (ja ratkaista / kirjautunut erikseen muuta kautta, esimerkiksi alert_syslog tai alert_csv tuhahtaa moduulit) sääntöä, joten en ole maksanut paljon huomiota käsittelyn tapahtuma metatietoja.
Moduuli ei ole C komponentteja ja ei käytä ctypes, joten olisi melko kannettava ei-cPython kielen toteutuksia.
Format
Formaatti määritelmä perustuu Snort otsikot (src / sfutil / Unified2_common.h) kautta pyclibrary moduuli ja välimuistiin unified2 / _format.py tiedosto.
Uudempi määritelmiä (esimerkiksi jos uusia tietotyyppejä lisättiin) voidaan generoida käynnissä sama käsikirjoitus Snort n Unified2_common.h:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr haara 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
Asennus
Se on säännöllisesti paketti Python 2.7 (ei 3.X).
Käyttämällä PIP on paras tapa:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % PIP asentaa unified2
Jos sinulla ei ole sitä, käytä:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install PIP
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % PIP asentaa unified2
Vaihtoehtoisesti katso myös:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Kiemura https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % PIP asentaa unified2
Tai jos sinulla on ehdottomasti:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Mutta, sinun ei todellakaan pitäisi tehdä.
Nykyinen-git versio voidaan asentaa näin:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % PIP asentaa -e 'git: //github.com/mk-fg/unified2.git#egg=unified2 "
Käyttö
Yksinkertainen esimerkki:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; tuonti unified2.parser
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; EV, ev_tail vuonna unified2.parser.parse ("/ var / log / puhina / snort.u2.1337060186 '):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print "Tapahtuma: ', ev
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; jos ev_tail: print "Tapahtuma häntää:", ev_tail
Tapahtuma esine tässä dict metatietojen ja "häntä", joka voi olla joko möykky tai samankaltainen rekursiivisesti jäsentää monikko metatietojen-dict ja "häntä" (esim UNIFIED2_EXTRA_DATA).
unified2.parser.Parser käyttöliittymä havainnollistaa parhaiten unified2.parser.read toiminto:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; parseri, buff_agg = Parser (), ''
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; vaikka True:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; harrastaja = parser.read (src)
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; jos ei harrastaja: break # EOF
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; buff_agg + = harrastaja
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; vaikka True:
buff_agg, ev = parser.process (buff_agg)
jos ev on None: tauko
saanto ev
Idea on, että Parser.read menetelmä olisi kutsuttava virta (esim tiedosto objekti), palaavat kuitenkin monta tavua jäsennintä tarvitsee saada seuraavaan parseable kimpale tiedot (yksi paketti, jos U2 log) tai mitä voidaan lukea tällä hetkellä, tyhjä merkkijono on yleensä osoitus EOF tai ehkä ei-jarrut lukea paluuta.
Parser.process sitten pitäisi kutsua kertyneeseen (mukaan Parser.read puhelut) puskuri, palauttaa ensimmäinen paketti, joka voidaan jäsentää sieltä (tai mitään, jos puskuri ei ole riittävän suuri), ja jäljelle jääviin (ei-jäsentää) puskurin tiedot.
Vaatimukset :
- Python
Kommentteja ei löytynyt