Обнаружение аномалий с использованием Python

Я работаю для веб-хостинга, и моя задача - найти и очистить взломанные учетные записи. То, как я нахожу хорошие 90% оболочек\вредоносных программ\инъекций, - это поиск файлов, которые "неуместны". Например, eval(base64_decode(.......)), где "....." представляет собой целую кучу текста base64, который обычно никогда не бывает хорошим. Нечетные выглядящие файлы выпрыгивают на меня, когда я grep через файлы для ключевых строк.

Если эти файлы выпрыгивают на меня как на человека, я уверен, что смогу создать какой-то профилировщик на python, чтобы искать статистические данные, которые "неуместны", и помечать их для ручного просмотра. Для начала я подумал, что могу сравнить длину строк в файлах php, содержащих ключевые строки (eval, base64_decode, exec, gunzip, gzinflate, fwrite, preg_replace и т.д.). и искать линии, которые отклоняются от среднего на 2 стандартных отклонения.

Длина линии варьируется в широких пределах, и я не уверен, что это будет хорошая статистика для использования. Другим подходом было бы назначить взвешенные правила для cretin вещей (длина строки над или под порогом = X точек, содержит слово upload = Y точек), но я не уверен, что я на самом деле могу сделать с оценками или как забить каждый атрибут. Моя статистика немного ржавая.

Может ли кто-нибудь указать мне в правильном направлении (руководства, учебные пособия, библиотеки) для статистического профилирования?

Ответы

Ответ 1

Здесь приведен простой подход к проблеме с машиной, и я бы это сделал, чтобы приступить к этой проблеме и разработать базовый классификатор:

Создайте кучу скриптов и прикрепите ярлык "good" (label = 0) или "bad" (label = 1), тем лучше. Постарайтесь обеспечить, чтобы "плохие" сценарии были разумной долей всего тела, 50-50 good/bad идеально.

Разработка двоичных функций, которые указывают на подозрительные или плохие сценарии. Например, наличие "eval", наличие "base64_decode". Как всеобъемлющий, как вы можете быть, и не бойтесь вникать в аффект, который мог бы захватить некоторые "хорошие" сценарии. Один из способов помочь это может состоять в том, чтобы рассчитать частоту отсчетов слов в двух классах script и выбрать в качестве функций слова, которые видны в "плохом", но менее заметном в "хорошем".

Запустите генератор функций над корпусом и создайте двоичную матрицу функций с метками.

Разделить корпус на поезд (80% примеров) и наборы тестов (20%). Используя библиотеку изучения scikit, подготовьте несколько различных алгоритмов классификации (случайные леса, машины поддержки векторов, наивные заливы и т.д.) С набором тренировок и проверьте их производительность на невидимом тестовом наборе.

Надеюсь, у меня есть разумная точность классификации для сравнения. Затем я хотел бы улучшить функции, некоторые неконтролируемые методы (без меток) и более специализированные алгоритмы для повышения производительности.

Для ресурсов курс Эндрю Нг Курсера по компьютерному обучению (который, как мне кажется, включает пример классификации спама) - это хорошее начало.