Opublikowano: 13-03-2016



To już drugi post w tym tygodniu w ramach konkursu „Daj się poznać”. W pierwszym wpisie była mowa o sprawdzaniu użytkownika (czy jest tym za kogo się podaje), wykorzystując sieci neuronowe, biorąc pod uwagę jego zachowanie (poprzednio wpisywane polecenia w konsoli). Teraz przedstawię jeden z pomysłów na realizację tego zadania.

Sieć neuronowa

Najpierw krótkie, bardzo ogólne, wprowadzenie. Koncepcja sztucznych sieci neuronowych powstała z obserwacji, jakie przeprowadzano w ramach badania mózgu człowieka. Model perceptronu (odpowiednik neuronu wykorzystywany w sztucznych sieciach) bazuje w pewnym stopniu na budowie neuronów obecnych w mózgu. Neuron odbiera impulsy elektryczne poprzez synapsy (na powyższym rysunku z lewej strony), które kumulowane są w jądrze (na rysunku żółty znak po lewej stronie).

/images/neuron-29147.png

W miarę nagromadzenia się impulsów, po osiągnięciu pewnego progu, neuron przekazuje sygnał poprzez akson (niebieska linia na rysunku) do innych połączonych z nim neuronów. Siecią neuronową nazywa się połączone ze sobą neurony. W perceptronie mamy wejście (zmienne) oraz ich wagi, funkcję aktywacji oraz wyjście. Analogicznie do neuronu, w perceptronie na wejście przekazywane są wartości, które po przemnożeniu przez wagi i zsumowaniu trafiają do funkcji aktywacji. Określa ona, jaką perceptron powinien zwrócić wartość. Sztuką jest odpowiednie dobranie wag, aby perceptron działał tak, jak my tego chcemy. Jednak jak na wstęp to myślę, że tyle wystarczy. Zainteresowanym polecam zajrzeć do [1] oraz [2].

Budowa sieci analizującej zachowanie

Nie wynajduję koła na nowo, ten pomysł bazuje na pracy Intrusion Detection with Neural Networks autorstwa J. Ryan, M.J. Lin, R. Miikkulainen. Głównym założeniem w ich pracy jest fakt, że nie zawsze chcemy przewidywać kolejność wpisywanych poleceń. Ważne za to jest, jakich poleceń w ciągu dnia używamy często, a jakich rzadko. Efektywnym podejściem, według autorów, byłoby zebranie statystyk na temat wpisywanych przez użytkownika poleceń w pewnym przedziale czasowym i sprawdzenie, czy ich rozkład jest podobny do tego generowanego przez prawowitego użytkownika.

Autorzy wybrali 100 poleceń najczęściej pojawiających się w logach użytkowników. Wśród nich znalazły się takie polecenia jak: as, awk, bc, cat, chmod, cp, cpp, cut, cvs, df… Z zebranych danych został utworzony wektor, w którym każdy z elementów był liczbą oznaczającą częstotliwość wystąpień danego polecenia. Mając 100 poleceń, tworzony był wektor 100‑elementowy. Na przykład pierwszy element w wektorze oznaczał częstotliwość występowania polecenia as, drugi element – awk, trzeci – bc itd. Liczby wykorzystywane w wektorze (od 0.0 do 1.0) podzielono na 11 przedziałów oznaczających odpowiednią częstotliwość występowania danego polecenia. Przedziały te nie były rozłożone równomiernie. Pierwszy przedział oznaczał, że polecenie nie wystąpiło w ogóle, drugi przedział – polecenie wystąpiło raz albo dwa razy, ostatni przedział – polecenie wystąpiło więcej niż 500 razy. Tak zbudowany wektor trafiał do sieci neuronowej.

Sieć neuronowa była złożona z trzech warstw, a do jej nauczenia wykorzystano algorytm wstecznej propagacji błędu. Miało to zapewnić ponowną łatwą wykonywalność zaprezentowanej techniki. Autorzy nie wykluczają, że inna architektura dawałaby lepsze wyniki. Warstwa wejściowa zawiera 100 perceptronów reprezentujących wektor wejściowy, w warstwie ukrytej jest 30 perceptronów, a w warstwie trzeciej (wyjściowej) jest 10 perceptronów – ich ilość odpowiadała ilości użytkowników.

W testach przeprowadzonych przez autorów tak zbudowana sieć radziła sobie całkiem dobrze. Anomalie w zachowaniu sieć wykrywała na poziomie 96%. Wykrytych prawidłowych zachowań danego użytkownika sieć zanotowała 93% dając przy tym fałszywy alarm tylko w 7% przypadków. Co ciekawe wszystkie fałszywe alarmy dotyczyły tego samego użytkownika. Wynikało to z faktu, braku odpowiedniej ilości danych na temat jego zachowania.



Comments powered by Disqus