Maltrail — это система обнаружения вредоносного трафика, использующая общедоступные (черные) списки, содержащие вредоносные и/или в целом подозрительные следы, а также статические следы, составленные из различных AV-отчетов и настраиваемых пользовательских списков, где след может быть любым, начиная от имени домена (например, zvpprsensinaix.com
для вредоносного ПО Banjori), URL-адрес (например, hXXp://109.162.38.120/harsh02.exe
для известного вредоносного исполняемого файла), IP-адрес (например, 185.130.5.231
для известного злоумышленника) или значение заголовка HTTP User-Agent (например, sqlmap
для автоматического внедрения SQL и инструмента захвата базы данных). Кроме того, он использует (необязательно) расширенные эвристические механизмы, которые могут помочь в обнаружении неизвестных угроз (например, новых вредоносных программ).
Используются следующие (черные) списки (т.е. каналы):
360bigviktor, 360chinad, 360conficker, 360cryptolocker, 360gameover,
360locky, 360necurs, 360suppobox, 360tofsee, 360virut, abuseipdb, alienvault,
atmos, badips, bitcoinnodes, blackbook, blocklist, botscout,
bruteforceblocker, ciarmy, cobaltstrike, cruzit, cybercrimetracker,
dataplane, dshieldip, emergingthreatsbot, emergingthreatscip,
emergingthreatsdns, feodotrackerip, gpfcomics, greensnow, ipnoise,
kriskinteldns, kriskintelip, malc0de, malwaredomainlistdns, malwaredomains,
maxmind, minerchk, myip, openphish, palevotracker, policeman, pony,
proxylists, proxyrss, proxyspy, ransomwaretrackerdns, ransomwaretrackerip,
ransomwaretrackerurl, riproxies, rutgers, sblam, socksproxy, sslbl,
sslproxies, talosintelligence, torproject, trickbot, turris, urlhaus,
viriback, vxvault, zeustrackermonitor, zeustrackerurl, etc.
Что касается статических записей, следы следующих вредоносных объектов (например, командных серверов вредоносного ПО или провалов) были включены вручную (на основе различных AV-отчетов и личных исследований):
1ms0rry, 404, 9002, aboc, absent, ab, acbackdoor, acridrain, activeagent,
adrozek, advisorbot, adwind, adylkuzz, adzok, afrodita, agaadex, agenttesla,
aldibot, alina, allakore, almalocker, almashreq, alpha, alureon, amadey,
amavaldo, amend_miner, ammyyrat, android_acecard, android_actionspy,
android_adrd, android_ahmythrat, android_alienspy, android_andichap,
android_androrat, android_anubis, android_arspam, android_asacub,
android_backflash, android_bankbot, android_bankun, android_basbanke,
android_basebridge, android_besyria, android_blackrock, android_boxer,
android_buhsam, android_busygasper, android_calibar, android_callerspy,
android_camscanner, android_cerberus, android_chuli, android_circle,
android_claco, android_clickfraud, android_cometbot, android_cookiethief,
android_coolreaper, android_copycat, android_counterclank, android_cyberwurx,
android_darkshades, android_dendoroid, android_dougalek, android_droidjack,
android_droidkungfu, android_enesoluty, android_eventbot, android_ewalls,
android_ewind, android_exodus, android_exprespam, android_fakeapp,
android_fakebanco, android_fakedown, android_fakeinst, android_fakelog,
android_fakemart, android_fakemrat, android_fakeneflic, android_fakesecsuit,
android_fanta, android_feabme, android_flexispy, android_fobus,
android_fraudbot, android_friend, android_frogonal, android_funkybot,
android_gabas, android_geinimi, android_generic, android_geost,
android_ghostpush, android_ginmaster, android_ginp, android_gmaster,
android_gnews, android_godwon, android_golddream, android_goldencup,
android_golfspy, android_gonesixty, android_goontact, android_gplayed,
android_gustuff, android_gypte, android_henbox, android_hiddad,
android_hydra, android_ibanking, android_joker, android_jsmshider,
android_kbuster, android_kemoge, android_ligarat, android_lockdroid,
android_lotoor, android_lovetrap, android_malbus, android_mandrake,
android_maxit, android_mobok, android_mobstspy, android_monokle,
android_notcompatible, android_oneclickfraud, android_opfake,
android_ozotshielder, android_parcel, android_phonespy, android_pikspam,
android_pjapps, android_qdplugin, android_raddex, android_ransomware,
android_redalert, android_regon, android_remotecode, android_repane,
android_riltok, android_roamingmantis, android_roidsec, android_rotexy,
android_samsapo, android_sandrorat, android_selfmite, android_shadowvoice,
android_shopper, android_simbad, android_simplocker, android_skullkey,
android_sndapps, android_spynote, android_spytekcell, android_stels,
android_svpeng, android_swanalitics, android_teelog, android_telerat,
android_tetus, android_thiefbot, android_tonclank, android_torec,
android_triada, android_uracto, android_usbcleaver, android_viceleaker,
android_vmvol, android_walkinwat, android_windseeker, android_wirex,
android_wolfrat, android_xavirad, android_xbot007, android_xerxes,
android_xhelper, android_xploitspy, android_z3core, android_zertsecurity,
android_ztorg, andromeda, antefrigus, antibot, anubis, anuna, apocalypse,
apt_12, apt_17, apt_18, apt_23, apt_27, apt_30, apt_33, apt_37, apt_38,
apt_aridviper, apt_babar, apt_bahamut, etc.
Maltrail основан на архитектуре Трафик -> Датчик <-> Сервер <-> Клиент . Датчик (и) — это автономный компонент, работающий на узле мониторинга (например, платформа Linux, пассивно подключенная к порту SPAN/зеркалирования или прозрачно встроенный в мост Linux) или на автономном компьютере (например, Honeypot), где он «отслеживает» проходящий трафик. для элементов/следов, занесенных в черный список (т. е. доменных имен, URL-адресов и/или IP-адресов). В случае положительного совпадения он отправляет сведения о событии на (центральный) сервер , где они сохраняются в соответствующем каталоге регистрации (т. е. LOG_DIR
, описанном в разделе «Конфигурация» ). Если Датчик запускается на том же компьютере, что и Сервер (конфигурация по умолчанию), журналы сохраняются непосредственно в локальном каталоге журналов. В противном случае они отправляются через UDP-сообщения на удаленный сервер (т. е. LOG_SERVER
описанный в разделе «Конфигурация» ).
Основная роль сервера — хранить сведения о событиях и обеспечивать внутреннюю поддержку веб-приложения для создания отчетов. В конфигурации по умолчанию сервер и датчик будут работать на одном компьютере. Таким образом, чтобы предотвратить потенциальные сбои в работе датчиков, часть клиентской отчетности основана на архитектуре «толстого клиента» (т. е. вся постобработка данных выполняется внутри экземпляра веб-браузера клиента). События (т.е. записи журнала) за выбранный (24-часовой) период передаются Клиенту , где веб-приложение отчетности несет полную ответственность за презентационную часть. Данные отправляются клиенту сжатыми порциями, где они обрабатываются последовательно. Итоговый отчет создается в очень сжатой форме, что позволяет представить практически неограниченное количество событий.
Примечание. Серверный компонент можно вообще пропустить и использовать только автономный Sensor . В таком случае все события будут храниться в локальном каталоге журналов, а записи журнала могут быть проверены либо вручную, либо с помощью какого-либо приложения для чтения CSV.
Полнофункциональные демо-страницы с собранными реальными угрозами можно найти здесь.
Для правильной работы Maltrail в системе *nix/BSD требуется Python 2.6 , 2.7 или 3.x вместе с установленным пакетом pcapy-ng.
ПРИМЕЧАНИЕ. Использование библиотеки pcapy
вместо pcapy-ng
может привести к некорректной работе Maltrail, особенно в средах Python 3.x. Примеры.
Компоненту датчика требуется не менее 1 ГБ ОЗУ для работы в однопроцессном режиме или больше, если он работает в многопроцессорном режиме, в зависимости от значения, используемого для опции CAPTURE_BUFFER
. Кроме того, компоненту Sensor (в общем случае) требуются права администратора/root.
Серверная составляющая не предъявляет каких-либо особых требований.
Следующий набор команд должен запустить ваш Maltrail Sensor (из коробки с настройками по умолчанию и интерфейсом мониторинга «любой»):
sudo apt-get install git python3 python3-dev python3-pip python-is-python3 libpcap-dev build-essential procps schedtool
sudo pip3 install pcapy-ng
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
sudo python3 sensor.py
sudo zypper install gcc gcc-c++ git libpcap-devel python3-devel python3-pip procps schedtool
sudo pip3 install pcapy-ng
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
sudo python3 sensor.py
Чтобы запустить (необязательный) Сервер на том же компьютере, откройте новый терминал и выполните следующее:
[[ -d maltrail ]] || git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
python server.py
Чтобы проверить, что все работает, выполните следующее:
ping -c 1 136.161.101.53
cat /var/log/maltrail/ $( date + " %Y-%m-%d " ) .log
Кроме того, чтобы проверить захват DNS-трафика, вы можете попробовать следующее:
nslookup morphed.ru
cat /var/log/maltrail/ $( date + " %Y-%m-%d " ) .log
Чтобы остановить экземпляры Sensor и Server (если они работают в фоновом режиме), выполните следующее:
sudo pkill -f sensor.py
pkill -f server.py
Получите доступ к интерфейсу отчетов (т. е. Клиенту ), посетив http://127.0.0.1:8338 (учетные данные по умолчанию: admin:changeme!
) в веб-браузере:
Конфигурацию датчика можно найти в разделе [Sensor]
файла maltrail.conf
:
Если для параметра USE_MULTIPROCESSING
установлено значение true
, будут использоваться все ядра ЦП. Одно ядро будет использоваться только для захвата пакетов (с соответствующей привязкой, приоритетом ввода-вывода и хорошими настройками уровня), тогда как другие ядра будут использоваться для обработки пакетов. В противном случае все будет работать на одном ядре. Опцию USE_FEED_UPDATES
можно использовать для полного отключения обновлений следа из каналов (и просто использовать предоставленные статические обновления). Опция UPDATE_PERIOD
содержит количество секунд между каждым автоматическим обновлением трейлов (Примечание: значение по умолчанию установлено на 86400
(т.е. один день)) с помощью определений внутри каталога trails
(Примечание: и Датчик , и Сервер заботятся об обновлении трейлов). Опция CUSTOM_TRAILS_DIR
может использоваться пользователем для указания местоположения каталога, содержащего файлы пользовательских трейлов ( *.txt
).
Опция USE_HEURISTICS
включает эвристические механизмы (например, long domain name (suspicious)
, excessive no such domain name (suspicious)
, direct .exe download (suspicious)
и т. д.), что может привести к ложным срабатываниям. Опция CAPTURE_BUFFER
представляет общий объем памяти (в байтах в процентах от общей физической памяти), который будет использоваться в случае режима многопроцессорной обработки для хранения перехваченных пакетов в кольцевом буфере для дальнейшей обработки процессами, не осуществляющими захват. Опция MONITOR_INTERFACE
должна содержать имя интерфейса захвата. Используйте значение any
для захвата со всех интерфейсов (если ОС поддерживает это). Опция CAPTURE_FILTER
должна содержать фильтр сетевого захвата ( tcpdump
), чтобы пропускать неинтересные пакеты и упростить процесс захвата. Опция SENSOR_NAME
содержит имя, которое должно появляться внутри значения sensor_name
, чтобы можно было отличить событие от одного датчика от другого. Если установлена опция LOG_SERVER
, то все события отправляются удаленно на Сервер , в противном случае они сохраняются непосредственно в каталоге журналирования, заданном опцией LOG_DIR
, который можно найти в разделе [All]
файла maltrail.conf
. Если установлена опция UPDATE_SERVER
, все трейлы извлекаются из заданного места, в противном случае они обновляются из определений трейлов, находящихся внутри самой установки.
Опции SYSLOG_SERVER
и/или LOGSTASH_SERVER
можно использовать для отправки событий датчиков (т. е. данных журнала) на серверы, не относящиеся к Maltrail. В случае SYSLOG_SERVER
данные о событии будут отправлены в формате CEF ( Common Event Format ) в службу UDP (например, Syslog), прослушивающую данный адрес (например, 192.168.2.107:514
), а в случае LOGSTASH_SERVER
данные о событии будут отправлены в JSON в службу UDP (например, Logstash), прослушивающую по заданному адресу (например, 192.168.2.107:5000
).
Пример данных о событии, отправляемых по UDP, следующий:
SYSLOG_SERVER
(Примечание: значения LogSeverity
: 0 (низкий уровень), 1 (средний уровень) и 2 (высокий уровень)): Dec 24 15:05:55 beast CEF:0|Maltrail|sensor|0.27.68|2020-12-24|andromeda (malware)|2|src=192.168.5.137 spt=60453 dst=8.8.8.8 dpt=53 trail=morphed.ru ref=(static)
LOGSTASH_SERVER
: {"timestamp": 1608818692, "sensor": "beast", "severity": "high", "src_ip": "192.168.5.137", "src_port": 48949, "dst_ip": "8.8.8.8", "dst_port": 53, "proto": "UDP", "type": "DNS", "trail": "morphed.ru", "info": "andromeda (malware)", "reference": "(static)"}
При запуске датчика (например, sudo python sensor.py
) в первый раз и/или после длительного периода простоя он автоматически обновляет следы на основе определений следов (Примечание: хранится в каталоге trails
). После инициализации он начнет отслеживать настроенный интерфейс (опция MONITOR_INTERFACE
внутри файла maltrail.conf
) и записывать события либо в настроенный каталог журнала (параметр LOG_DIR
внутри раздела файла maltrail.conf
[All]
), либо отправлять их удаленно в Сервер регистрации/отчетности (опция LOG_SERVER
).
Обнаруженные события сохраняются в каталоге журналов сервера (т. е. опция LOG_DIR
в разделе [All]
файла maltrail.conf
) в удобном для чтения формате CSV (Примечание: пробел '' используется в качестве разделителя) в виде однострочных записей. состоит из: sensor
time
src_ip
src_port
dst_ip
dst_port
proto
trail_type
trail
trail_info
reference
(например, "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
):
Конфигурацию сервера можно найти в разделе 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
должна указывать на PEM-файл частного/сертификата сервера.
Подраздел USERS
содержит настройки конфигурации пользователя. Каждая запись пользователя состоит из username:sha256(password):UID:filter_netmask(s)
. Значение UID
представляет собой уникальный идентификатор пользователя, где рекомендуется использовать значения ниже 1000 для административных учетных записей и более высокие значения для неадминистративных учетных записей. Часть filter_netmask(s)
представляет собой жесткие фильтры, разделенные запятыми, которые можно использовать для фильтрации отображаемых событий в зависимости от учетных записей пользователя. Запись по умолчанию следующая:
Опция UDP_ADDRESS
содержит адрес прослушивания журнала сервера (Примечание: используйте 0.0.0.0
для прослушивания на всех интерфейсах), а опция UDP_PORT
содержит значение порта прослушивания. Если он включен и используется в сочетании с опцией LOG_SERVER
, его можно использовать для отдельной (множественной) архитектуры Sensor <-> Server .
Опция FAIL2BAN_REGEX
содержит регулярное выражение (например, attacker|reputation|potential[^"]*(web scan|directory traversal|injection|remote code|iot-malware download|spammer|mass scanner
), которое будет использоваться в веб-вызовах /fail2ban
для извлечения сегодняшних исходных IP-адресов злоумышленников. Это позволяет использовать механизмы блокировки IP (например, fail2ban
, iptables
или ipset
). периодическое извлечение IP-адресов, занесенных в черный список, из удаленного местоположения. Примером использования может быть следующий сценарий (например, запускаемый как root
задание cron на минутной основе):
#! /bin/bash
ipset -q flush maltrail
ipset -q create maltrail hash:net
for ip in $( curl http://127.0.0.1:8338/fail2ban 2> /dev/null | grep -P ' ^[0-9.]+$ ' ) ; do ipset add maltrail $ip ; done
iptables -I INPUT -m set --match-set maltrail src -j DROP
Опция BLACKLIST
позволяет создавать регулярные выражения для применения к одному полю. Для каждого правила используется следующий синтаксис: <field> <control> <regexp>
где:
field
указывает поле для компаирования, оно может быть: src_ip
, src_port
, dst_ip
, dst_port
, protocol
, type
, trail
или filter
.control
может быть либо ~
для совпадений , либо !~
для совпаденийregexp
— это регулярное выражение, применяемое к полю. Свяжите еще одно правило с ключевым словом and
(ключевое слово or
не поддерживается, просто добавьте для этого строку). Вы можете использовать только ключевое слово BLACKLIST
или добавить имя: BLACKLIST_NAME
. В последнем случае URL-адрес будет: /blacklist/name
Например, следующее создаст черный список для всего трафика из источника, отличного от 192.168.0.0/16
к порту назначения SSH
или соответствующего scan
фильтров или known attacker
BLACKLIST_OUT
src_ip !~ ^192.168. and dst_port ~ ^22$
src_ip !~ ^192.168. and filter ~ scan
src_ip !~ ^192.168. and filter ~ known attacker
BLACKLIST_IN
src_ip ~ ^192.168. and filter ~ malware
Способ создания черного списка ipset тот же (см. выше), за исключением того, что в нашем примере URL-адресами будут /blacklist/in
и /blacklist/out
.
То же, что и для Sensor , при первом запуске Сервера (например, python server.py
) и/или после длительного периода простоя, если для параметра USE_SERVER_UPDATE_TRAILS
установлено значение true
, он автоматически обновит следы на основе определений следов ( Примечание: хранится в каталоге trails
). Его основная функция — хранить записи журнала внутри каталога журналов (т. е. опция LOG_DIR
в разделе [All]
файла maltrail.conf
) и предоставлять интерфейс веб-отчетов для представления этих же записей конечному пользователю (Примечание: здесь нет необходимо установить сторонние пакеты веб-сервера, такие как Apache):
При входе в интерфейс отчетов Сервера (т.е. через адрес, определенный опциями HTTP_ADDRESS
и HTTP_PORT
), пользователю будет представлен следующий диалог аутентификации. Пользователь должен ввести правильные учетные данные, установленные администратором сервера в файле конфигурации maltrail.conf
(Примечание: учетные данные по умолчанию — admin:changeme!
):
Оказавшись внутри, пользователю будет представлен следующий интерфейс отчетов:
Верхняя часть содержит скользящую временную шкалу (Примечание: активируется после щелчка по метке текущей даты и/или значку календаря), где пользователь может выбирать журналы прошлых событий (Примечание: наведение курсора мыши на событие вызовет отображение всплывающей подсказки с приблизительным количеством событий для текущего дата). Даты сгруппированы по месяцам, где внутри самого виджета отображаются данные за 4-месячный период. Однако с помощью предоставленного ползунка (т. е.) пользователь может легко получить доступ к событиям за предыдущие месяцы.
После щелчка по дате все события для этой конкретной даты должны быть загружены и представлены в веб-браузере клиента. В зависимости от количества событий и скорости сетевого подключения загрузка и отображение зарегистрированных событий может занять от пары секунд до нескольких минут (например, 100 000 событий в общей сложности занимают около 5 секунд). В течение всего времени обработки в отключенном пользовательском интерфейсе будет отображаться анимированный загрузчик:
Средняя часть содержит сводку отображаемых событий. Поле Events
представляет общее количество событий за выбранный 24-часовой период, где красная линия представляет события на основе IP, синяя линия представляет события на основе DNS, а желтая линия представляет события на основе URL-адресов. В поле Sources
отображается количество событий по основным источникам в виде столбчатой диаграммы с общим количеством источников вверху. Поле Threats
представляет процент основных угроз в виде круговой диаграммы (Примечание: серая область содержит все угрозы, каждая из которых <1% от общего числа событий), с общим количеством угроз вверху. Поле Trails
представляет процент самых популярных трейлов в виде круговой диаграммы (Примечание: серая область содержит все трейлы, каждый из которых <1% от общего количества событий), с общим количеством трейлов вверху. Каждое из этих полей активно, поэтому нажатие на одно из них приведет к отображению более подробного графика.
Нижняя часть содержит сжатое представление зарегистрированных событий в виде таблицы с разбивкой на страницы. Каждая запись содержит сведения об одной угрозе (Примечание: уникально идентифицируется парой (src_ip, trail)
или (dst_ip, trail)
, если src_ip
совпадает со trail
как в случае атак, исходящих извне):
Столбец threat
содержит уникальный идентификатор угрозы (например, 85fdb08d
) и цвет (Примечание: вытянут из идентификатора угрозы), sensor
содержит имена датчиков, на которых было вызвано событие (например, blitvenica
), events
содержат общее количество событий для текущей угрозы. , severity
содержит оценку серьезности угрозы (Примечание: рассчитывается на основе значений в столбцах info
и reference
, приоритезация трафика, генерируемого вредоносным ПО), first_seen
содержит время первого события в выбранном (24 часа) период (например, 06th 08:21:54
), last_seen
содержит время последнего события за выбранный (24-часовой) период (например, 06th 15:21:23
), sparkline
содержит небольшой спарклайн-график, представляющий активность угрозы за выбранный период, src_ip
содержит источник IP-адреса угрозы (например, 99.102.41.102
), src_port
содержит исходные порты (например, 44556, 44589, 44601
), dst_ip
содержит IP-адреса назначения (например, 213.202.100.28
), dst_port
содержит порт(ы) назначения (например, 80 (HTTP)
), протокол( proto
) протокола (например, TCP
), trail
запись в черном списке (или эвристическая), вызвавшая событие(я), info
содержит дополнительную информацию об угрозе/следе (например, known attacker
для известных IP-адресов злоумышленника или ipinfo
для известной информационной службы IP, обычно используемой вредоносным ПО во время запуска), reference
содержит источник записи в черном списке (например, (static)
для статических следов или myip.ms
для динамического канала, полученного из того же самого source) и tags
содержит определяемые пользователем теги для данного следа (например, APT28
).
При наведении курсора мыши на записи таблиц src_ip
и dst_ip
отображается информационная подсказка с подробной информацией об обратном DNS и WHOIS (Примечание: поставщиком информации является RIPE):
Сведения о событии (например, src_port
, dst_port
, proto
и т. д.), которые различаются внутри одной и той же записи об угрозе, сжимаются в виде значка пузырька (т. е.). Это делается для того, чтобы получить удобный интерфейс отчетов с как можно меньшим количеством строк. Наведение курсора мыши на такой значок приведет к отображению информационной всплывающей подсказки со всеми сохраненными элементами (например, все номера портов, сканируемые attacker
):
Нажатие на один из таких значков откроет новое диалоговое окно, содержащее все сохраненные элементы (Примечание: в их несжатой форме), готовые к копированию-вставке (d) для дальнейшего анализа:
Если навести указатель мыши на след угрозы на пару секунд, появится фрейм, состоящий из результатов, использующих след в качестве поискового запроса, выполненного против Поиск с шифрованием поисковая система SEARX. Во многих случаях это предоставляет базовую информацию о самой угрозе, избавляя пользователя от необходимости выполнять ее поиск вручную. В правом верхнем углу открывшегося фреймового окна расположены две дополнительные кнопки. При нажатии на первый (т.е.) результирующий фрейм откроется внутри новой вкладки (или окна) браузера, а при нажатии на второй (т.е.) фрейм сразу же закроется (Примечание: то же действие достигается путем перемещения значка указатель мыши за пределами границ кадра):
Для каждой угрозы существует tag
столбца, который можно заполнить произвольными «тегами», чтобы точно описать все угрозы, имеющие один и тот же след. Кроме того, это отличный способ описать угрозы по отдельности, поэтому все угрозы, имеющие один и тот же тег (например, yahoo
), можно позже сгруппировать:
В следующем разделе некоторые из сценариев «обычных подозреваемых» будут описаны на основе реальных случаев.
Массовое сканирование — довольно распространенное явление, когда отдельные лица и/или организации дают себе право ежедневно сканировать весь диапазон IP-адресов 0.0.0.0/0 (т. е. весь Интернет) с оговоркой, что если вам не нравится тогда вам следует связаться с ними лично, чтобы их не включали в будущие сканирования.
Что еще хуже, такие организации, как Shodan и ZoomEye, предоставляют все результаты в свободном доступе (другим потенциальным злоумышленникам) через свою поисковую систему. На следующих скриншотах вы увидите подробную информацию о сканировании Shodan за один день.
Вот обратный DNS и WHOIS поиск адреса «злоумышленника»:
При наведении указателя мыши на содержимое столбца trail
(IP-адрес) вам будут представлены результаты поиска в SearX, где вы сможете найти дополнительную информацию о «злоумышленнике»:
Если у вас большая организация, в столбце dst_ip
будет представлен большой список сканируемых IP-адресов:
В столбце dst_port
вы сможете увидеть все порты, которые были проверены такими массовыми проверками:
В других подобных ситуациях вы увидите такое же поведение со стороны отдельных злоумышленников, занесенных в черный список (в данном случае cinsscore.com):
Еще одно распространенное поведение — сканирование всего диапазона IP-адресов 0.0.0.0/0 (т. е. Интернета) в поисках одного конкретного порта (например, TCP-порта 443, если обнаружен Heartbleed). На следующем снимке экрана вы увидите один из таких случаев, когда злоумышленники, ранее занесенные в черный список (в данном случае сайт Alienvault.com и два других черных списка), нацелились на порт UDP 5060 (т. е. SIP) в поисках неправильно настроенных устройств VoIP:
Чтобы обнаружить потенциальных злоумышленников, скрывающихся за анонимной сетью Tor, Maltrail использует общедоступные списки выходных узлов Tor. На следующем снимке экрана вы увидите случай, когда потенциальный злоумышленник подозрительным образом использовал сеть Tor для доступа к веб-цели (через HTTP) в радиусе действия нашей организации (всего 171 запрос на соединение за 10 минут):
Случай, довольно похожий на предыдущий, это когда злоумышленник, ранее занесенный в черный список, пытается получить доступ к определенной (например, не HTTP(-ам)) службе в радиусе действия нашей организации довольно подозрительным способом (т.е. всего 1513 попыток подключения менее чем за 15 минут):
Если мы введем ssh attacker
в поле Filter
, мы сможем увидеть все подобные события за этот день, но в данном случае для порта 22 (т. е. SSH):
В случае попыток подключения с зараженных компьютеров внутри нашей организации к уже известным C&C-серверам вы сможете обнаружить угрозы, подобные следующим (в данном случае Beebone):
В случае DNS-запросов, содержащих известные доменные имена DGA, угроза будет отображаться следующим образом (в данном случае Necurs):
В следующем случае произошла загрузка файлов с URL-адресов, занесенных в черный список (в данном случае Malwarepatrol.net):
Если мы введем конкретное имя вредоносной программы (в данном случае Ramnit) в поле Filter
, будут отфильтрованы только те угрозы, которые, как известно, связаны с этой вредоносной программой (показаны все затронутые внутренние компьютеры):
В более общем плане, если мы введем malware
в поле Filter
, все угрозы, обнаруженные по следам вредоносного ПО (например, IP
-адресам), будут отфильтрованы по:
Maltrail использует статический список доменов TLD, которые, как известно, часто участвуют в подозрительной деятельности. Большинство таких доменов TLD поступает от бесплатных регистраторов доменов (например, Freenom), поэтому они должны находиться под более строгим контролем. На следующем снимке экрана мы можем увидеть случай, когда один из таких доменов TLD .cm
использовался неизвестным вредоносным ПО с использованием алгоритма DGA для связи со своими командными серверами:
Бывают также случаи, когда совершенно действительные домены TLD (например, .ru
) используются для подозрительных действий, как в данном случае (например, long domain name (suspicious)
), когда домены явно являются DGA, созданными неизвестным вредоносным ПО:
Maltrail использует статический список так называемых «динамических доменов», которые часто используются в подозрительных действиях (например, для командных серверов вредоносного ПО, которые часто меняют IP-адреса назначения):
Кроме того, Maltrail использует статический список доменов, связанных с «луком», которые также часто используются в подозрительных действиях (например, вредоносное ПО связывается с командными серверами с помощью службы(ов) Tor2Web):
В случае старого и/или устаревшего вредоносного ПО, которое остается незамеченным на зараженных внутренних компьютерах организации, часто возникает «феномен», когда вредоносное ПО постоянно пытается связаться с доменом давно мертвого командного сервера без какого-либо разрешения DNS. Следовательно, такие (потенциальные) угрозы будут помечены как excessive no such domain (suspicious)
:
В случае, если один след ответственен за слишком много угроз (например, в случае поддельных исходных IP-адресов, как в атаках с усилением DNS), все похожие угрозы будут сгруппированы под одной угрозой flood
(Примечание: идентификатор угрозы будет отмечен суффиксом F0
), как в следующем примере:
Многие вредоносные программы используют какой-либо сервис ipinfo
(например, ipinfo.io), чтобы узнать IP-адрес жертвы в Интернете. В случае регулярных и особенно в нерабочее время такие запросы следует внимательно отслеживать, как в следующем примере:
С помощью фильтра ipinfo
можно составить список всех потенциально зараженных компьютеров в диапазоне нашей организации, которые демонстрируют такое подозрительное поведение:
Maltrail отслеживает все подозрительные попытки прямой загрузки файлов (например .apk
, .bin
, .class
, .chm
, .dll
, .egg
, .exe
, .hta
, .hwp
, .lnk
, .ps1
, .scr
, .sct
, .wbk
расширения файлов .wbk
и .xpi
). Это может вызвать множество ложных срабатываний, но в конечном итоге может помочь восстановить цепочку заражения (Примечание: законные поставщики услуг, такие как Google, обычно используют зашифрованный HTTPS для выполнения такого рода загрузок):
В случае подозрительных запросов, поступающих от внешних сканеров безопасности веб-приложений (например, поиск уязвимостей SQLi, XSS, LFI и т. д.) и/или злонамеренных попыток внутреннего пользователя на неизвестные веб-сайты, могут быть обнаружены угрозы, подобные следующим (реальный случай злоумышленники пытаются использовать уязвимости Joomla! CMS CVE-2015-7297, CVE-2015-7857 и CVE-2015-7858):
В следующем примере сканирование уязвимостей веб-приложения помечено как «подозрительное»:
Если мы щелкнем значок пузырька (т. е. ) для получения подробной информации и скопируем все содержимое в текстовый файл, мы сможем увидеть все подозрительные HTTP-запросы:
На следующем снимке экрана в наших журналах можно найти запуск популярного инструмента уязвимостей SQLi sqlmap:
В случае слишком большого количества попыток подключения к значительному количеству различных TCP-портов Maltrail предупредит о потенциальном сканировании портов в результате обнаружения эвристического механизма. На следующем снимке экрана можно найти такие предупреждения при запуске популярного инструмента сканирования портов nmap:
Одной из популярных DDoS-атак на инфраструктуру веб-серверов является истощение ресурсов его (основного) DNS-сервера путем создания действительных рекурсивных запросов DNS для (псевдо)случайных имен поддоменов (например, abpdrsguvjkyz.www.dedeni.com
):
Различные программы (особенно для мобильных устройств) демонстрируют поведение, подобное вредоносному ПО, когда они отправляют потенциально конфиденциальные данные на удаленные маяки. Maltrail попытается отследить такое поведение, как в следующем примере:
Как и все другие решения безопасности, Maltrail склонен к «ложным срабатываниям». В таких случаях Maltrail (особенно в случае suspicious
угроз) записывает поведение обычного пользователя и помечает его как вредоносное и/или подозрительное. В следующем примере видно, что поставщик каналов черного списка blocklist.de
пометил обычный сервер Google как attacker
(-а), что привело к следующей угрозе:
При наведении курсора мыши на след кадр с результатами поиска SearX показывает, что это (скорее всего) обычный сервер Google:
Другой пример: доступ к обычным доменам .work
(популярный TLD для вредоносных целей) привел к следующей угрозе:
Тем не менее, администратор(ы) должны потратить немного дополнительного времени и проверить (другими способами), означает ли «подозрительный» злонамеренный или нет, как в следующем примере:
В Ubuntu/Debian
sudo apt-get install git python3 python3-dev python3-pip python-is-python3 libpcap-dev build-essential procps schedtool
sudo pip3 install pcapy-ng
cd /tmp
git clone --depth 1 https://github.com/stamparm/maltrail.git
sudo mv /tmp/maltrail /opt
sudo chown -R $USER : $USER /opt/maltrail
В SUSE/openSUSE
sudo zypper install gcc gcc-c++ git libpcap-devel python3-devel python3-pip procps schedtool
sudo pip3 install pcapy-ng
cd /tmp
git clone --depth 1 https://github.com/stamparm/maltrail.git
sudo mv /tmp/maltrail /opt
sudo chown -R $USER : $USER /opt/maltrail
Установите рабочую среду:
sudo mkdir -p /var/log/maltrail
sudo mkdir -p /etc/maltrail
sudo cp /opt/maltrail/maltrail.conf /etc/maltrail
sudo nano /etc/maltrail/maltrail.conf
Установите рабочую среду:
crontab -e # autostart server & periodic update
*/5 * * * * if [ -n "$(ps -ef | grep -v grep | grep 'server.py')" ]; then : ; else python3 /opt/maltrail/server.py -c /etc/maltrail/maltrail.conf; fi
0 1 * * * cd /opt/maltrail && git pull
sudo crontab -e # autostart sensor & periodic restart
*/1 * * * * if [ -n "$(ps -ef | grep -v grep | grep 'sensor.py')" ]; then : ; else python3 /opt/maltrail/sensor.py -c /etc/maltrail/maltrail.conf; fi
2 1 * * * /usr/bin/pkill -f maltrail
Включить как службы systemd (только Linux):
sudo cp /opt/maltrail/maltrail-sensor.service /etc/systemd/system/maltrail-sensor.service
sudo cp /opt/maltrail/maltrail-server.service /etc/systemd/system/maltrail-server.service
sudo systemctl daemon-reload
sudo systemctl start maltrail-server.service
sudo systemctl start maltrail-sensor.service
sudo systemctl enable maltrail-server.service
sudo systemctl enable maltrail-sensor.service
systemctl status maltrail-server.service && systemctl status maltrail-sensor.service
Примечание . /maltrail-sensor.service
можно запустить как выделенную службу без предварительного запуска /maltrail-server.service
. Это полезно в случае, когда /maltrail-server.service
установлен и работает на другом компьютере в вашей сетевой среде.
Это программное обеспечение предоставляется по лицензии MIT. Дополнительную информацию см. в прилагаемом файле ЛИЦЕНЗИИ.
1 Использование (только) троп
2 Разъем для дорожек (только)