Maltrail. Система обнаружения вредоносного трафика

Maltrail это небольшая система обнаружения вредоносного и подозрительного трафика, написанная на Python.
Данная система работает по принципу черных списков. Полезна при анализе трафика локальной сети на аномалии и наличие вредоносного ПО.
Maltrail состоит из двух компонентов (сенсор и сервер), которые могут быть разнесены по разным серверам или виртуальным машинам.
При этом, для более полного сбора информации сенсор лучше устанавливать на SPAN-порт на которых зеркалируется весь трафик или на пограничное оборудование (например пограничный маршрутизатор, если он поддерживает установку стороннего ПО).
Сенсоров может быть несколько и они все будут отправлять информацию на сервер мониторинга Maltrail. При этом сенсоры могут находиться в различных сегментах сети или в разных сетях. Единственный минус — трафик между сервером и сенсорами никак не шифруется, поэтому вопрос безопасности передачи данного трафика стоит рассмотреть отдельно (например отдельный, изолированный VLAN).

Перейдем к настройке системы.
Для начала установим все требуемые пакеты:

sudo apt-get install python python-pcapy git

Теперь скопируем себе Maltrail с GutHub:

git clone https://github.com/stamparm/maltrail.git

Переместим Maltrail в /opt:

mv maltrail /opt

и перейдем в папку с Maltrail:

cd /opt/maltrail

Далее откроем файл конфигурации maltrail.conf и настроим сервер и сенсоры под себя:

Настройка сервера

Настройки сервера производится в секции [Server].
Первым делом сменим пароль, для этого найдем раздел USERS и изменим пароль у пользователя admin:

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

echo -n 'пароль' | sha256sum | cut -d " " -f 1

После создания нового хэша меняем в конфигурационном файле для администратора системы (учетная запись admin с паролем по умолчанию changeme!) на новый.

Пример учетной записи пользователя:

admin:9ab3cd9d67bf49d01f6a2e33d0bd9bc804ddbe6ce1ff5d219c42624851db5dbc:0:0.0.0.0/0

В нем нужно заменить блок:

9ab3cd9d67bf49d01f6a2e33d0bd9bc804ddbe6ce1ff5d219c42624851db5dbc

на хэш нового пароля, который мы создали в предыдущей команде.

Следующим шагом настраиваем адрес, на котором будет работать сервер (актуально, если у сервера несколько интерфейсов, а Web-интерфейс сервера должен работать на каком-то определенном). Для этого в строке:

HTTP_ADDRESS 0.0.0.0

указываем нужный IP-адрес (0.0.0.0 — на всех IP-адресах, которые имеются в системе).

Так же можем поменять порт, на котором будет Web-интерфейс сервера. Это делается в строке (8338 — порт по умолчанию):

HTTP_PORT 8338

И можем включить сбор событий от сенсоров по UDP с удаленных сенсоров, для этого нужно раскомментировать строки (так же можно изменить UDP порт и адрес по которому будут приниматься события от сенсоров. 0.0.0.0 — на любом адресе и интерфейсе):

UDP_ADDRESS 0.0.0.0
UDP_PORT 8337

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

Настройка сенсоров

Теперь переходим к настройке сенсора (секция [Sensor]).

Для начала укажем на каком интерфейсе сенсор будет следить за трафиком (по умолчанию: any — на всех):

MONITOR_INTERFACE eth0

Далее можно изменить имя сенсора, чтобы можно было определять с какого сенсора пришло событие (по умолчанию используется переменная $HOSTNAME — текущее имя сервера)

SENSOR_NAME $HOSTNAME

Если сенсор находится на другом сервере, то нужно указать куда будет отправляться с него информация по UDP:

LOG_SERVER 192.168.2.107:8337

Так же для удаленного сервера нужно выключить локальное хранения логов:

DISABLE_LOCAL_LOG_STORAGE true

Можно включить или выключить эвристический анализ:

USE_HEURISTICS true

В данной инструкции описаны основные параметры. Остальные параметры полностью описаны в конфигурационном файле и снабжены комментариями.

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

# [Server] HTTP_ADDRESS 0.0.0.0 # HTTP сервер работает на всех интерфейсах
HTTP_PORT 8338
USE_SSL false
USERS
admin:хэш_пароля:0:0.0.0.0/0
UDP_ADDRESS 0.0.0.0 # принимаем события от сенсоров с любого интерфейса
UDP_PORT 8337
USE_SERVER_UPDATE_TRAILS false

# [Sensor] PROCESS_COUNT $CPU_CORES
DISABLE_CPU_AFFINITY false
USE_FEED_UPDATES true
UPDATE_PERIOD 86400
CUSTOM_TRAILS_DIR ./trails/custom
CAPTURE_BUFFER 10%
MONITOR_INTERFACE eth0
CAPTURE_FILTER udp or icmp or (tcp and (tcp[tcpflags] == tcp-syn or port 80 or port 1080 or port 3128 or port 8000 or port 8080 or port 8118))
SENSOR_NAME $HOSTNAME
LOG_SERVER XXX.XXX.XXX.XXX:8337 # адрес сервера, на который сенсоры будут отправлять события
DISABLE_LOCAL_LOG_STORAGE true # отключаем локальное хранение событий в сенсорах
USE_HEURISTICS true
CHECK_MISSING_HOST false
CHECK_HOST_DOMAINS false

# [All] SHOW_DEBUG false
LOG_DIR $SYSTEM_LOG_DIR/maltrail

Запуск Maltrail

Запустим сенсор (при первом запуске будут обновлены все списки и блеклисты). Сенсор нужно запускать от root пользователя:

python sensor.py

и запустим сервер (если используются удаленные сенсоры, то тоже нужно запускать от пользователя root, если только локальный сенсор — можно запускать от обычного пользователя):

python server.py

Встроенного механизма демонизации нет, но как это сделать вручную, описывается в статье: Запуск приложения в режиме «daemon» в Linux.

После запуска сервера и сенсоров автоматически начнется сбор данных.

Для проверки работоспособности системы, можно произвести эхо-запрос на адрес 136.161.101.53 (он есть в блеклистах):

ping -c 1 136.161.101.53

После выполнения этой команды, в списке событий должна появится запись с номером угрозы 61dfc6d5.

Web-интерфейс Maltrail

Результаты мониторинга отображаются в Web-интерфейсе (по умолчанию: http://адрес_сервера:8338).

При подключении к Web-интерфесу, будет запрошено имя пользователя и пароль:

Maltrail. Вход

Вводим реквизиты пользователя, которого создали ранее, и нажимаем Log In.

Maltrail. Главное окно

После входа мы попадаем в главное окно. В нем отображаются все события, которые зарегистрируют сенсоры.
Общее описание колонок:
threat — уникальный номер угрозы;
sensor — сенсор, с которого получено событие
events — количество событий;
severity — потенциальный уровень опасности;
first_seen — дата и время первого появления события;
last_seen — дата и время последнего появления события;
sparkline — небольшой график активности событий;
src_ipIP-адрес(а) отправителя;
src_port — порт(ы) с которых был отправлен трафик;
dst_ipIP-адрес(а) получателя;
dst_port — порт(ы) на который был отправлен трафик;
proto — протокол;
type — тип (IP, DNS, URL)
trail — запись, которая инициировала событие;
info — дополнительная информация об угрозе;
reference — источник сигнатуры (в какой базе находится сигнатура);
tags — назначаемые пользователем теги.

Maltrail. Trail

При удержании курсора мыши над записью в столбце trail — производится поиск по событию в поисковой системе DuckDuckGo.

Maltrail. IP

При наведении курсора мыши на адрес в колонке dst_ip или src_ip — показывается расширенная информация об адресе (кроме локальных адресов).

Maltrail. Дополнительная информация

Если в событии участвовало несколько портов или IP-адресов, то они скрываются за значком облачка. Полную информацию можно посмотреть во всплывающем окне при нажатии на облачко.

Maltrail. Графики

В верхней части окна есть некоторое количество кнопок для графического представления угроз (различные графики и диаграммы) за выбранные 24 часа.
Threats — диаграмма по типам угроз;
Events — график по типу и времени;
Severity — диаграмма по уровню опасности;
Sources — диаграмма по источникам событий;
Trails — диаграмма по типу событий.

Maltrail. Временная шкала

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

Система довольно простая, но при этом хорошо подходит, как вспомогательная система, для поиска и анализа угроз в трафике ЛВС.

Заказать Аудит Безопасности или Пентест Вашей IT-инфраструктуры

Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.