Лес изоляции для системы обнаружения вторжений - PullRequest
0 голосов
/ 16 октября 2019

В настоящее время я пытаюсь использовать Scikit Learn для создания простого фрагмента обнаружения аномалий.

Программа получает файл .csv, который затем передается в DataFrame Panda. Кадр данных имеет 8 столбцов: «Src IP»;'Dst IP';«Спорт»;'DPORT';«Протокол»;'Load';«Пакеты»;«Флаг TCP».

Я помещаю данные в IsolationForest примерно так:

    iForest = IsolationForest(n_estimators=128, max_samples='auto', max_features=1, behaviour='new', contamination='auto', random_state=None, n_jobs=-1, verbose=0, bootstrap=True)
    usecols=["Src IP","Dst IP","sPort","dPort","Protocol","Load","Packets","TCP Flags"]
    iForest.fit(data[usecols])

И затем получаю выбросы / аномалии от IForest:

    pred = iForest.predict(data[usecols])
    data['anomaly']=pred
    outliers=data.loc[data['anomaly']==-1]

Все это работает хорошо, однако мой вопрос здесь: как я могу использовать Isolation Forest для обнаружения аномалий в сети, будучи независимым от свойства «загрязнение»?

В IDS с низким уровнем ложных срабатыванийСкорость имеет решающее значение. В моем случае я несколько решаю, какие записи «загрязнены», выбрав процент.

Моя цель - заставить Isolation Forest автоматически устанавливать коэффициент загрязнения, зная, что если x.csv очищен на 100% от загрязнениязатем найдите% загрязнения на y.csv.

Это должно быть частью гибридной IDS, которая использует как анализ сигнатур, так и поведение для обнаружения вторжений на основе данных потока (NetFlow).

TLDR : IsolationForest должен получить чистый .csv (без загрязнения), чтобы затем обнаружить аномалии в новом наборе данных (другом .csv или данных канала). Как это возможно с помощью ScikitLearn?

...