Автор: Miroslav Stampar

URL: https://github.com/stamparm/maltrail

Перевод официальной документации Maltrail — системы обнаружения вредоносного трафика.

Введение

Maltrail — система обнаружения вредоносного трафика на Python, используя общедоступные (черные) списки, содержащие вредоносные или подозрительные ссылки, вместе со статическими списками, собранными из различных отчетов AV и определяемых пользователем, где ссылка может быть чем-либо от доменного имени (например, zvpprsensinaix.com для вредоносного программного обеспечения Banjori), URL (например, http://109.162.38.120/harsh02.exe для известной вредоносной исполнимой программы), IP-адрес (например, 185.130.5.231 для известного атакующего) или значение заголовка HTTP User-Agent (например, sqlmap для автоматической инжекции SQL). Кроме того, maltrail использует дополнительные усовершенствованные эвристические механизмы, которые могут помочь в открытии неизвестных угроз (например, новое вредоносное программное обеспечение).

Архитектура

Maltrail имеет трехзвенную архитектуру: сенсор <-> сервер <-> клиент.  Сенсор — автономный компонент, запущенный на контролирующем узле, который  «снифает» проходящий трафик на наличие в нем  подозрительных элементов (таких как. доменные имена, url или ip). В случае положительного совпадения сенсор отправляет детали события на сервер, где они сохраняются в лог (LOG_DIR, описанный в разделе Configuration). Когда сенсор выполняется на той же машине где и сервер (конфигурация по умолчанию), логи сохранеяются непосредственно в локальный каталог , иначе, они отправляются с помощью сообщений UDP на удаленный сервер (LOG_SERVER, описанный в разделе Configuration).

architecture

 

Основная задача сервера сохранить детали события и предоставить поддержку бэкэнда для веб-приложения создания отчетов. В конфигурации по умолчанию сервер и датчик будут работать на той же машине. Для того, чтобы предотвратить потенциальные разрушения в действиях сенсора, часть создания отчетов фронтэнда основывается на архитектуре «толстого клиента» (т.е. вся последующая обработка данных делается в экземпляре веб-браузера клиента). События (записи в журнале) в течение выбранного (24 часового) периода передаются клиенту, где веб-приложение создания отчетов исключительно ответственно за часть представления. Данные отправляются к клиенту в сжатых блоках, где они обрабатываются последовательно. Итоговый отчет создается в высоко сжатой форме, практически позволяя показывать неограниченное количество событий.

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

Быстрый старт

Следующий набор команд выполнит установку и запуск  Maltrail (в системах основанных на debian) с настройками по умолчанию и контролирующий все сетевые интерфейсы.

sudo apt-get install git python-pcapy

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

cd maltrail

sudo python sensor.py

start

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

[[ -d maltrail ]] || git clone https://github.com/stamparm/maltrail.git

cd maltrail

python server.py

server0

Для проверки  работоспособности сделайте следующее:

ping -c 1 136.161.101.53

cat /var/log/maltrail/$(date +»%Y-%m-%d»).log

test

Для просмотра отчета (клиент), откройте в вашем веб-браузере (там где запущен maltrail) http://127.0.0.1:8338 (учетные данные по умолчанию: admin:changeme!)

web

Administrator’s guide

 Сенсор

Конфигурация сенсора находиться в файле maltrail.conf в секции [Sensor] :

sensorconf

Если опция USE_MULTIPROCESSING установлена в true, тогда все ядра CPU будут использоваться. Одно ядро будет использоваться только для пакетного получения, в то время как другие ядра будут использоваться для пакетной обработки. Иначе, все будет выполнено на одном ядре.

Опция USE_FEED_UPDATES может использоваться, чтобы выключить обновления списков. Опция UPDATE_PERIOD содержит число секунд между каждым автоматическим обновлением (примечание: значение по умолчанию установлено в 86400 (т.е. один день)) Опция CUSTOM_TRAILS_DIR может использоваться пользователем, чтобы обеспечить расположение каталога, содержащего пользовательские списки (*.txt) файлы.

Опция USE_HEURISTICS включает эвристические механизмы

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

Опция MONITOR_INTERFACE содержит имя интерфейса для прослушивания. Если значение опции any, слушается на всех интерфейсах (если ОС поддерживает это).

Опция CAPTURE_FILTER должна содержать фильтр, чтобы пропустить неинтересные пакеты и упростить процесс получения. Фильтр онснованный на синтаксисе tcpdump.

Опция SENSOR_NAME содержит имя, которое должно появляться в событиях sensor_name , таким образом, событие от одного сенсора можно было отличить от другого.

Если опция LOG_SERVER установлена, то все события отправляются удаленно на сервер, иначе они сохраняются непосредственно в лог, опция LOG_DIR, которая может быть найдена в разделе  [All] файла maltrail.conf.

В случае, если опция UPDATE_SERVER установлена, тогда все списки, скачиваются с данного сервера.

Когда сенсор (sudo python sensor.py)  запускается впервые или после длительного периода простоя, он автоматически обновит списки. После инициализации сенсор начнет контролировать сконфигурированный интерфейс (опция MONITOR_INTERFACE в maltrail.conf) и запишет события в лог (опция LOG_DIR в разделе [All] файла maltrail.conf) или отправит удаленно на сервер (опция LOG_SERVER).

firststart

Обнаруженные события сохранены в логе (опция LOG_DIR в разделе maltrail.conf файла [All]) в формате CSV (примечание:  ‘ ‘ используется в качестве разделителя) как однострочные записи, состоящие из:

time sensor src_ip src_port dst_ip dst_port proto trail_type trail trail_info

(например, «2015-10-19 15:48:41.152513» beast 192.168.5.33 32985 8.8.8.8 53 UDP DNS 0000mps.webpreview.dsl.net malicious siteinspector.comodo.com):

log

Сервер

Конфигурация сервера может быть найдена в разделе [Server] файла maltrail.conf :

server

Опция HTTP_ADDRESS содержит адрес, который слушает веб-сервер (примечание: использование 0.0.0.0, для подключения с  любого интерфейса).

Опция HTTP_PORT содержит порт на котором будет работать веб-сервер.

Значения порта по умолчанию  8338.

Если опция USE_SSL будет установлена в true тогда,  SSL/TLS будет использоваться для доступа к веб-серверу (например, https://192.168.6.10:8338/). В этом случае опция SSL_PEM должна указывать на  файл с сертификатом.

Подсекция USERS содержит параметры конфигурации пользователя.

Каждая пользовательская запись состоит из

username:sha256 (пароль):UID:filter_netmask(s).

UID значения представляет уникальный идентификатор пользователя, где рекомендуется использовать значения ниже, чем 1000 для административных учетных записей, в то время как более высокое значение для неадминистративных учетных записей. Часть filter_netmask(s) представляет собой ip адрес с маской, который может использоваться, чтобы фильтровать отображение событий в зависимости от учетной записи пользователя. Запись по умолчанию следующие:

users

Опция UDP_ADDRESS содержит адрес прослушки для сбор логов,  (примечание: используют 0.0.0.0, чтобы послушать во всех интерфейсах), в то время как опция UDP_PORT содержит значение порта . Если включено, и используется в сочетании с опцией LOG_SERVER, то можно использовать для многократной Sensor <-> Server архитектуры.

Так же как и сенсор, при выполнении сервера (python server.py) впервые или после  длительного периода простоя, если опция USE_SERVER_UPDATE_TRAILS установлена в true, будет автоматическое обновление.  Основная задача сохранить записи в логи (т.е. опция LOG_DIR в разделе [All] файла maltrail.conf) и обеспечить веб-интерфейс создания отчетов для представления записей конечному пользователю (примечание: нет никакой потребности установки сторонних пакетов веб-сервера как Apache):

startserver

User’s guide

Интерфейс отчетов

При входе на сервер (через адрес, определенный опциями HTTP_ADDRESS и HTTP_PORT), вы увидите следующее диалоговое окно аутентификации. Надо ввести надлежащие учетные данные, которые были установлены администратором сервера в конфигурационном файле maltrail.conf (примечание: учетные данные по умолчанию — admin:changeme!):

login

После входа, вы увидите следующий интерфейс отчетов:

report

Верхняя часть содержит скользящую временную шкалу (примечание: активируется после щелчка по метке текущей даты или календарному значку Calendar), где пользователь может выбрать логи  прошедших событий (примечание: щелчок мыши по событию инициирует дисплей подсказки с приблизительным количеством событий для текущей даты). Даты сгруппированы месяцами, где 4-месячный период данных выведен на экран в самом виджете. Однако при помощи ползунка пользователь может легко получить доступ к событиям с предыдущих месяцев.

data

Щелчок по дате, загрузит все события и отобразит веб-браузером клиента. В зависимости от числа событий и скорости сетевого соединения, загрузка и отображение зарегистрированных событий можеть занять время от нескольких секунд, до нескольких минут (например, загрузска 100000 событий занимает приблизительно 5 секунд).

Средняя часть содержит сводку выведенных на экран событий. Пиктограмма Events представляет общее количество событий в выбранный 24-часовой период, где красная строка представляет основанные на IP события, синяя строка представляет основанные на DNS события, и желтая строка представляет основанные на url события. Пиктограмма Sources представляет число событий за период в форме многослойной столбчатой диаграммы с общим количеством источников на вершине. Пиктограмма Threats представляет процент главных угроз в форме круговой диаграммы (примечание: серая область содержит все угрозы, имеющие каждой меньше 1% в общих событиях), с общим количеством угроз на вершине. Пиктограмма Trails представляет процент главных “следов” в форме круговой диаграммы (примечание: серая область содержит все следы, имеющие каждого мение 1% от общих событий), с общим количеством следов на вершине. Каждая из этих пиктограмм активна,  щелчок по любой из них откроет более подробный график.

middle

Нижняя часть отображает сжатое представление зарегистрированных событий в форме нумерованной  таблицы. Каждая строка содержит детали для единственной угрозы (примечание: однозначно определенная пара (src_ip, след) или (dst_ip, след), если src_ip совпадает со следом, как в случае аттаки идущей снаржу инфраструктуры):

string

Столбец threat содержит уникальный идентификатор угрозы (например, 85fdb08d) и цвет, столбец sensor содержит имя  сенсора, где событие произошло (например, blitvenica), столбец  events  содержит общее количество событий для текущей угрозы, столбец severity содержит оцененную серьезность угрозы, столбец first_seen содержит время первого события в выбранный (24 часовой) период (например, 06-е 8:21:54),столбец  last_seen содержит время последнего события в выбранный (24 часовой) период (например, 06-е 15:21:23), столбец sparkline содержит небольшой  график, представляющий действие угрозы в выбранный период, столбец src_ip содержит ip, c которого была угроза (например, 99.102.41.102), столбец src_port содержит исходный порт(ы) (например, 44556, 44589, 44601), столбец dst_ip содержит целевой ip (например, 213.202.100.28), столбец dst_port содержит порт(ы) назначения (например, 80 (HTTP)), первичный протокол(ы)  (например. TCP), столбец trail содержит помещенную в черный список запись, которая инициировала событие,столбец info  содержит больше информации об угрозе(cледе) (например, известный атакующий для IP-адресов известного атакующего, или ipinfo для известной информационной службы IP, обычно используемой вредоносным программным обеспечением во время запуска),столбец reference содержит источник помещенной в черный список записи (например, (статичный) для статических следов или myip.ms для динамического канала, полученного из того же самого источника), и столбец tags  содержит определяемые пользователем теги для данного следа (например, APT28).

Когда мы наведем курсор мыши на src_ip или dst_ip записям таблицы, во всплываюем окне будет выведена информационная подсказка с подробным обратным DNS, и информацией WHOIS

srcip

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

detail info

Щелчок по одному такому значку откроет новое диалоговое окно, содержащее все сохраненные элементы (примечание: в их несжатой форме)  из которого можно скопировать данные для дальнейшего анализа:

copypaste

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

Duck

Реальные случаи

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

Массовые сканирования

Массовые сканирования — довольно общее явление, когда люди дают себе право отсканировать целый 0.0.0.0/0 диапазон IP (т.е. целый Интернет) ежедневно с правовой оговоркой, где они говорят, что, если вам не нравится что вас сканируют, тогда, вы должны связаться с ними конфиденциально, чтобы вас исключили из будущих сканирований.

Такие  организации как, Shodan и ZoomEye дают свои результаты  в свободный доступ (другим потенциальным атакующим) через их поисковую систему. В следующем примере вы будете видеть детали сканирований Shodan. С reverse DNS и WHOIS адресом «атакующего»:

shodan

При удержании указателя мыши над содержанием столбца  trail (IP-адрес) вы увидете результаты поиска от DuckDuckGo, где можно будет  найти больше информации об «атакующем» (т.е. Shodan):

shodan2

В столбце dst_ip, вы увидите список ваших отсканированных IP-адресов.

В столбце dst_port вы увидите все порты, которые были отсканированы такими массовыми сканированиями.

В других аналогичных ситуациях вы будете видеть такие же результаты, полученные от помещенного в черный список отдельного нападавшего (в этом случае cinsscore.com):

scan1

Еще одно общее поведение сканирования целого 0.0.0.0/0 диапазона IP (т.е. Интернет) в поисках одного определенного порта (например, порт TCP 443). В следующем примере, такой случай для ранее помещенного в черный список атакующего (в этом случае alienvault.com)  и сканированием порта UDP 5060 (SIP) в поисках неправильно сконфигурированных устройств VoIP:

scan2

Анонимные атакующие

Чтобы разыскать потенциальных атакующих, исользующих Tor, maltrail использует общедоступные списки узлов выхода Tor. В следующем примере вы увидите случай, где потенциальный атакующий использовал сеть Tor, чтобы получить доступ к веб-цели (по HTTP) в диапазоне нашей организации подозрительным способом (171 запрос на установление соединения в течении10 минут):

tor

Атака на сервисы

Частый случай в дополнение к предыдущему примеру — когда ранее помещенный в черный список нападавший пытается получить доступ к конкретным сервисам (например, не HTTP(s)) в диапазоне нашей организации довольно подозрительным способом (т.е. 1513 полноценные попытки установить соеденение в течение 15 минут):

service1

Мы можем отфильтрофать события по сервису например по ssh, тогда мы увидим все подобные случаи в течение дня, в этом случае для порта 22 (SSH):

service2

Вредоносное программное обеспечение

В случае попыток подключения, которые идут из компьютеров в нашей организации к уже известным серверам C&C, можно счесть угрозой, и предположить заражение компьютеров, как в следующем примере (в этом случае Beebone):

malware1

В случае запросов DNS, содержащих известные доменные имена DGA, угроза будет показана в следующем примере (в этом случае Necurs):

malwaredns

Если мы введем определенное вредоносное имя (в этом случае Ramnit) в поле Filter, то будут отображены угрозы согласно фильтру .

malware3

Более общий фильтр, если мы введем malware в поле Filter, будут отображены  все угрозы, которые были найдены как вредоносные (например, IP-адреса):

malware4

Подозрительные загрузки файла

Maltrail отслеживает все подозрительные попытки загрузки исполняймых файлов (например, .apk, .exe и .scr). Возможно много ложных срабатываний, но в конечном счете может помочь в реконструкции цепочки при заражении

filedownload

Подозрительные запросы HTTP

В случае подозрительных запросов, идущих снаружи, так же при использовании сканеров безопасности веб-приложений (например, ищущих SQLi, XSS, LFI, и т.д. уязвимости) или когда пользователь внутри сети предпринимает вредоносные попытки к неизвестным веб-сайтам, показаны в следующем примере (реальный случай атакующих, пытающихся использовать Joomla! CMS CVE-2015-7297, CVE-2015-7857, и CVE-2015-7858 уязвимости):

http1

В следущем примере сканирование уязвимости веб-приложения было отмечено как «подозрительное»:

В следующем примере выполнение популярного инструмента sqlmap, так же может быть найдено в логах:

http3

Сканирование портов

В случае множества попыток подключения к  различным портам TCP/UDP maltrail предупредит о потенциальном сканировании портов. В следующем примере мы можем видеть  такое предупреждение  при выполнения популярного инструмента сканирования портов nmap:

 

nmap

Заключение:

После длительного использования в «продакшене», можно сделать следующие выводы:
в целом, очень интересный и полезный инструмент, в качестве вспомогательного инструмента мониторинга сетевой активности:

Особенности которые хотелось бы отметить:

Легковесное, опенсорсное по. Если инфраструктура позволяет (SPAN, TAP или есть возможность запустить его на GW), то софт «заводится» за минуты;
стабильное, «пока не падало». Вначале было желание «демонизировать» sensor.py, но сенсор работает стабильно, не потребовалось. Последний аптайм сенсора более 50 дней;
хорошо определяет сканы, сканеры и «хакерский» софт; не нашли(наверное плохо искали) возможности управления активными правилами. Пока отфильтровываем «неинтересное» в SIEM’ке, по-хорошему, планируем немножко допилить их код, не все сообщения достаточно информативны, но тут вопрос к поставщикам чёрных списков;
если на объекте защиты эксплуатируются торренты, тор и т.п. то лог будет ломиться от событий категорий «known attacker» и «tor exit node»;
«локальная специфика» — срабатывает на домены .su, .kz и т.п. как на подозрительные. С User-Agent так же, срабатывает на яндекс.браузер и т.п.;

Важное замечание: Логи, как и логи от любого СЗИ, надлежит блюсти.  Потому что в них попадает масса «критичной» информации.  Так как ПО регистрирует массу валидных запросов к веб сервисам, в логи попадаест большое количество ключей, идентификаторов сессий, токенов, логинов а иногда и паролей.

Выводы:
на «взрослое» решение не претендует, но как вспомогательный инструмент вполне хорошо.
Даёт много «еды» параноику. Позволяет обнаруживать разные аномалии и вирусную активность.