Strojové učení z access logu

j

Strojové učení z access logu
« kdy: 07. 03. 2015, 18:08:57 »
Hoj,

mam udelany script, ktery prochazi neco jako webovy accesslog a pomaha mi detekovat neobvykly provoz na me jedne konkretni webove app.
Bezny navstevnik se chova jinak nez vetsina nevitanych robotu/programu.

Spousta robotu se da detekovat automaticky pokud splni par predem definovanych podminek. Rekneme ze to odfiltruje tak 60% spatneho trafficu automaticky. Na zbytek mam udelany graficky vystup a prochazim to rucne, odskratavam checkboxy.

Za tu dobu, co jsem to odskrtaval rucne, jsem si u spatnych IP co nebyli lide(nebo delali bordel), vsiml spoustu vzoru - jakym zpusobem prochazeli ten web, jak casto apod.

O strojovem uceni zatim nic nevim, ale hrozne bych ho tu chtel zkusit pouzit abych to nemusel delat rucne.

Dival jsem se na ruzne Pythoni knihovny  PyBrain,Scikit-Learn to jejich pouziti se zda velmi primocare (na nekolik radku)

Zatim jen badam o jakou oblast bych se mel vlastne zajimat?
Bylo by na tento ukol vhodne neco z klasifikace  Linear SVC   nebo Naive Bayes?

A kolik bych radove potreboval predem oklasifikovanych dat(IP adres) clovekem, abych dosahl nejake zajimave uspesnosti detekce? Jde mi jen o tu moji webovou aplikaci ktera ma hodne stranek, rozhodne se nepokousim o nic univerzalniho

O datech:
(
Ke kazde IP mam datumy s adresami na webu.
Ty adresy v ramci webu bych prevedl na unikatni cisla
Mozna samostatne i datumy resp  jen hodiny + minuty +  sekundy
)
 
« Poslední změna: 07. 03. 2015, 18:14:46 od Petr Krčmář »


lamarzocco

Re:Strojové učení z access logu
« Odpověď #1 kdy: 08. 03. 2015, 12:31:31 »
Nie som expert, takze "usual caveats apply" :)

Pristupy strojoveho ucenia ku klasifikacii sa v zasade rozdeluju na dva hlavne prudy:

  • ucenie s ucitelom supervised learning - mas nejaku vzorku trenovacich dat, ktore rucne rozdelis do spravnych kategorii a tvoj algoritmus na nich trenujes a ladis. Kazde nastavenie algoritmu ktore si myslis ze dava dobre vysledky, otestujes na vzorke testovacich dat, ktore algoritmus pocas fazy ucenia/trenovania nevidel (tie mas tiez rucne rozdelene do spravnych kategorii, aby si vedel vyhodnotit uspesnost algoritmu). Vyberies take nastavenie algoritmu, ktore ti dava najlepsie vysledky na testovacich datach.
  • ucenie bez ucitela unsupervised learning - data nemas rucne rozdelene a algoritmus sa teda neuci na zaklade "voditok" ktore mu sam pripravis, ale roztrieduje data sam do nim definovanych kategorii zvacsa na zaklade toho, ako "daleko" sa od seba nachadzaju (pricom "daleko" moze znamenat akukolvek metriku). Ziskane kategorie si potom pouzivatel sam pomenuje (stroj to spravit nevie - nevie co reprezentuju, ale vie ako do nich rozdelit data, ktore vykazuju podobne charakteristiky).

Myslim ze tvoja uloha by sa dala ponat oboma pristupmi.

Kolko trenovacich dat potrebujes, tot otazka. Ale technikami podobnymi cross validation [1] si vies znazornit vyvin chyby aj v zavislosti na velkosti trenovacej mnoziny, a budes vidiet. Univerzalne odporucanie neexistuje a je to zavisle napriklad aj na konkretnom algoritme strojoveho ucenia. Urcite vsak bude dobre pokial v nich budu v rovnakej miere zastupene rozne "kategorie" navstevnikov tvojho webu.

Z toho co pises mi napada niekolko pristupov:

  • Mozes si spravit zoznam vzorcov spravania, ktore vies z access logov detekovat a mas pocit ze odhaluju ze dany navstevnik je bot. Potom pre kazdeho navstevnika zo vzorcov spravania ktore pouzil detekujes, aka je pravdepodobnost ze je botom. Na toto by mohol posluzit napriklad aj tebou zmieneny Naive Bayes a predstavuje to pristup ucenia s ucitelom. Da sa ale pouzit vpodstate cokolvek (neviem ci je Naive Bayes zrovna idealny pristup).
  • Mozno by sa dalo pre kazdeho pouzivatela spravit nieco ako sumar veskerej jeho aktivity (napriklad graf reprezentujuci jeho akcie/navstivene stranky a pod.). Porovnanim mnozstva takychto "sumarov" vies odhalit tie, ktore sa od inych napadne lisia...

Co sa tyka scikit-learn a SVC, tak to je linearny Support Vector Machine (SVM), ktory je urceny na jednoduchsie ulohy (AFAIK linearne separovatelne) a nie som si isty ze by ti pre tvoje potreby stacil. V pripade SVM je dobre pouzit nejaky nelinearny kernel (ale obavam sa ze tu zachadzam asi uz do prilis velkych detailov) - na prvy pohlad vyzera zaujimavo skor trieda OneClassSVM - tvojou triedou by boli "normalni pouzivatelia" a vsetko co by "lezalo mimo" (outliers), by boli boti :)

To su len take prvoplanove napady, urcite som tu nevymyslel nic svetoborne :) Co sa tyka tvojho zamerania, da sa to ponat aj ako "anomaly detection" - mozes prip. skusit pogooglit tento termin a urcite najdes odbornejsie i uzitocnejsie clanky ako je moj prispevok :) Nejake algoritmy najdes spomenute i na wikipedii [2].

Uvedomujem si ze som to napisal dost ad-hoc, snad pomoze aspon trochu :)

[1] http://www.astroml.org/sklearn_tutorial/practical.html#cross-validation-and-testing
[2] http://en.wikipedia.org/wiki/Anomaly_detection#Popular_techniques

j

Re:Strojové učení z access logu
« Odpověď #2 kdy: 08. 03. 2015, 18:35:59 »
Diky. Ted vim o cem si hledat informace.
Grafy aktivity v case si uz nejakou dobu pro kazdou IP kreslim ale jde z toho poznat okem miminum. Na tech grafech je akorat dobre videt pravidelna aktivita.

ales

Re:Strojové učení z access logu
« Odpověď #3 kdy: 08. 03. 2015, 21:55:25 »
zdravim.
predem nechci zpochybnovat edukativni vyznam techto vlastnich bezpecnostnich barier. co me zajima je, zda jejich nasazeni vyrazne posili filtrovani kentusu v porovnanim s / v kombinaci s beznyma NIDS jako snort a fail2ban.
dik

j

Re:Strojové učení z access logu
« Odpověď #4 kdy: 08. 03. 2015, 23:03:13 »
U vetsiny webu co mam takove veci vubec neresim.
Mam jeden, ktery poskytuje cerstva data a ty pomerne rychle starnou.
Kdybych to co mam ted vypl, tak bych mel denne 10x - 30x vetsi logy. Traffic v google analytics by zustal stejny.

V mem pripade by fail2ban nebo snort nic nevyresil


Niekto

Re:Strojové učení z access logu
« Odpověď #5 kdy: 08. 03. 2015, 23:23:42 »
No neviem ale tvoje kroky by maly smerovat smerom k ludom a sluzbam ktore analyzuju spravanie zakaznikov. Myslim ze to bude to co hladas

karel

Re:Strojové učení z access logu
« Odpověď #6 kdy: 09. 03. 2015, 08:05:47 »
fail2ban je v dobe ipv6 skvela vec jak si nechat sestrelit server

Alibaba

Re:Strojové učení z access logu
« Odpověď #7 kdy: 09. 03. 2015, 14:54:37 »
nerozmýšľali ste nad zmenou prístupu k riešeniu - blacklist vs. whitelist? Teraz polo-automatizovane vytvárate blacklisty zakaždým ako reakciu na nejakú nevhodnú aktivitu, teda ste stále o krok pozadu oproti "útočníkom". Ak si aj tento proces zautomatizujete, tak sa nič nezmení stále to bude kolotoč "problém" -> "analýza" -> "zápis do BL". Blacklist narastá a vám šedivejú vlasy :-)

skôr by som to videl na riešenie niečo ako web aplikačný firewall alebo proxy, ktorý pustí len požadované URL. Myslím že vytvorením whitelistu strávite rádovo menej času ako s backlistom.