В мире кибербезопасности нам приходится иметь дело с несколькими измерениями. Среди них есть анализ журнала, который является важной частью поиска угроз и реагирования на инциденты. Хотя для этого доступно множество инструментов, один эксперт-аналитик должен иметь несколько ручных методов для этого. Полагаться на наш интеллект намного лучше, чем использовать некоторые сторонние инструменты, однако мы должны воспользоваться помощью профессионального инструмента, чтобы сделать наши ручные методы точными и более надежными.

В этом сообщении блога я поделюсь с вами несколькими методами анализа журналов Bro. Мы собираемся использовать python и функциональные возможности Pandas, Matplotlib, Numpy и Seaborn, чтобы понять поведение трафика.

Предварительные требования: Python, Jupyter Notebook, Bro-Cut (буду считать, что читатели уже выполнили все эти предварительные требования)

Создание файла .csv из файла .log для анализа

Мы создадим файл .csv из файлов .log bro, но давайте сначала разберемся, как создать файл .log из файла .pcap. В этом упражнении я буду использовать для анализа файл traffic.pcap. Команда ниже преобразует файлы .pcap в файлы .log.

Bro автоматически конвертирует файл .pcap в несколько файлов .log, как показано ниже.

Для простоты в пандах мы преобразуем эти файлы .log в файл .csv, используя bro2csv.py.

Теперь, когда у нас есть несколько файлов .csv, я выберу conn.log.csvдля нашего анализа.

Запуск анализа с использованием Python

Теперь пришло время запустить нашу записную книжку Jupyter и загрузить conn.log.csv в pandas для дальнейшего анализа. Для нашего анализа мы будем использовать следующие библиотеки, импортируем их и запускаем нашу программу.

Давайте прочитаем .csv в кадре данных df

Понимание данных

Прежде чем приступить к анализу, мы должны понять данные, чтобы определить планы на будущее. Мы будем использовать метод .info(), чтобы получить абстрактное представление о данных.

Теперь мы знаем, что всего 21 столбец и 687 строк. Еще одна вещь, на которую стоит обратить внимание: в столбце tunnel_parents нет записей. Это подводит нас к следующему шагу, то есть к удалению ненужных столбцов. Если мы внимательно посмотрим на данные, есть несколько столбцов, которые не нужны для нашего анализа или вообще не содержат данных для анализа. Как ниже

Давайте удалим эти столбцы из данных

Итак, у нас осталось всего 15 столбцов для анализа, ура!!!

Поиск недостающих данных

Одной из наиболее важных задач любого анализа данных является работа с отсутствующими данными. Мы будем использовать методы count_values() и isnull() для подсчета отсутствующих данных. Метод Isnull() дает ответ на простой вопрос «присутствуют ли данные?» если ответ Falseданные присутствуют если ответ Trueданные отсутствуют. (можно использовать метод notnull(), просто значение False и True меняется местами)

Следующий блок кода используется для подсчета нескольких недостающих данных.

Что касается отсутствующих данных, я обнаружил, что большинство из них находится в столбцах duration, 30 строк данных в этих столбцах пусты.

Есть много способов справиться с отсутствующими данными, например, заменить их нулем, средним или наиболее частым значением, поскольку отсутствующих данных очень мало, мы можем просто удалить эти строки.

Приведенный выше код удаляет все строки, в которых отсутствуют данные в указанных столбцах.

Замена «-» на NaN

В наборе данных много строк со значением «-», но я заменю его на NaN (это устранит много ошибок в будущем)

Если вы заметили выходные данные df.info() , возможно, вы видели разные типы данных, связанные со столбцами. Мы не всегда получаем нужные типы данных для анализа, но можем сделать это по своему желанию с помощью метода astype().

Я поменяю 3 столбца типа данных с объекта (строка) на int64 или float64 соответственно для простоты анализа.

Теперь, когда мы закончили с форматированием и очисткой данных, давайте погрузимся в анализ.

В поисках маяка

Прежде чем мы углубимся в анализ, нам нужно знать, что именно мы ищем, я воспользуюсь одним из самых простых и надежных методов проверки и обнаружения вредоносного трафика. Всякий раз, когда у нас есть скомпрометированная система с вредоносным ПО, она на 99% уверена, что получит команды или полезные данные с сервера c2. Но вопрос в том, как мы можем обнаружить этот трафик, если мы одновременно анализируем миллионы исходящих соединений? Ответ такой же, мы знаем, что всякий раз, когда вредоносное ПО будет связываться с c2, у него будет некоторый предопределенный набор инструкций для запроса c2, следовательно, будет согласованный размер пакетов, которые должны быть отправлены на c2, и если c2 нечего предоставить, он также даст ответ в предопределить инструкции, которые также будут одинакового размера, другое дело, что это действие должно происходить в указанный промежуток времени. Таким образом, мы можем искать эти шаблоны для обнаружения злонамеренного поведения. Этот метод основан на типичном поведении бездействующей вредоносной программы, которая через определенное время отправляет маяк в направлении c2, чтобы получить инструкции о следующем шаге.

Мы не ожидаем такого поведения от обычного пользователя, поэтому мы можем сузить наш поиск, чтобы найти возможную компрометацию в сети. Для этого анализа могут быть ложные срабатывания, такие как протокол NTP или типичное поведение устройств IoT, мы рассмотрим это в дальнейшем анализе.

Для проверки маяков в сети мы будем использовать библиотеку scatter plot feature pyplot.matplotlib. Чтобы построить график зависимости времени от отправленных и полученных байтов

Приведенный выше код создаст приведенный ниже график.

Помните, что вы всегда можете увеличить или уменьшить масштаб, используя методы ylim и xlim. Из графика совершенно ясно, что в этом трафике происходит какой-то маяк. Теперь отслеживание исходного IP-адреса и устранение ложных срабатываний является частью глубокого анализа, которым мы займемся позже. На графике синий «x» представляет байты ответа, а оранжевый «o» представляет отправленные байты, и мы можем видеть некоторую периодическую связь между ними. , поскольку по оси Y откладывается количество отправленных байтов, а по оси X — время.

Анализ тепловой карты

Что такое тепловая карта?

Тепловая карта — это графическое представление данных, где интенсивность цвета определяет значение данных. Это отличный способ наблюдать за графическим представлением взаимосвязи между несколькими переменными и одной переменной. На приведенном выше графике рассеяния мы получили зависимость между временем и количеством отправленных или полученных байтов. Выполняя анализ маяков, я сказал, что одна из возможностей получения ложных срабатываний при анализе маяков — это протокол NTP.

На следующем графике мы проверим, сколько времени каждый протокол использует в этом трафике. Продолжительность даст вам четкое представление о том, какой протокол используется, и об обнаружении вредоносного трафика, например, если порт 80 обеспечивает более 70% времени трафика, вы можете немедленно нажать кнопку SOS.

Я построю тепловую карту удаленного порта (id_resp_p) и продолжительность службы, чтобы проверить вклад каждого элемента в трафик.

Следующий код создаст наши данные для нашей тепловой карты.

Я сохранил необходимые столбцы в test_df. после этого я использовал метод groupby() для группировки средних служб и порта назначения в соответствии со средней продолжительностью. Что производит ниже вывода.

Третья строка кода подготавливает наши данные для тепловой карты. Это как функция поворота в Excel. Что производит ниже вывода.

Теперь это то, что мы увидим в графическом представлении с использованием разных цветов для представления величины каждого значения, так как это поможет нам легче читать данные. Мы будем использовать морскую библиотеку python.

Которые производят ниже карты.

Теперь мы видим, что больше всего времени траффика потреблял HTTPS через порт 443, а второе — через порт 49155 для сервиса dce_rpc. Это может дать аналитику очень четкое представление о том, что в этих журналах нет службы NTP, поэтому мы устранили одну возможность ложного срабатывания.

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

Вывод:

Мы проанализировали несколько функций файла bro log.csv, используя pandas, чтобы найти маяки и анализ тепловой карты столбца продолжительности.