stamparm/maltrail
GitHub: stamparm/maltrail
一个基于威胁情报的恶意流量检测系统,通过整合多源黑名单和启发式分析,在网络层面实时发现恶意通信和可疑行为。
Stars: 8261 | Forks: 1247

[](https://www.python.org/) [](https://github.com/stamparm/maltrail#license) [](https://x.com/maltrail)
## 目录
- [简介](#introduction)
- [架构](#architecture)
- [演示页面](#demo-pages)
- [系统要求](#requirements)
- [快速入门](#quick-start)
- [管理员指南](#administrators-guide)
- [传感器](#sensor)
- [服务器](#server)
- [用户指南](#users-guide)
- [报告界面](#reporting-interface)
- [真实案例](#real-life-cases)
- [批量扫描](#mass-scans)
- [匿名攻击者](#anonymous-attackers)
- [服务攻击者](#service-attackers)
- [恶意软件](#malware)
- [可疑域名查询](#suspicious-domain-lookups)
- [可疑 ipinfo 请求](#suspicious-ipinfo-requests)
- [可疑直接文件下载](#suspicious-direct-file-downloads)
- [可疑 HTTP 请求](#suspicious-http-requests)
- [端口扫描](#port-scanning)
- [DNS 资源耗尽](#dns-resource-exhaustion)
- [数据泄露](#data-leakage)
- [误报](#false-positives)
- [最佳实践](#best-practices)
- [许可证](#license)
- [赞助商](#sponsors)
- [开发者](#developers)
- [演示](#presentations)
- [出版物](#publications)
- [黑名单](#blacklist)
- [致谢](#thank-you)
- [第三方集成](#third-party-integrations)
## 简介
**Maltrail** 是一个恶意流量检测系统,利用公开可用的(黑)列表,其中包含恶意和/或通常可疑的痕迹(trail),以及从各种 AV 报告和用户自定义列表中编译的静态痕迹。这里的痕迹可以是任何内容,从域名(例如 [Banjori](https://bin.re/blog/the-dga-of-banjori/) 恶意软件的 `zvpprsensinaix.com`)、URL(例如已知恶意[可执行文件](https://www.virustotal.com/en/file/61f56f71b0b04b36d3ef0c14bbbc0df431290d93592d5dd6e3fffcc583ec1e12/analysis/)的 `hXXp://109.162.38.120/harsh02.exe`)、IP 地址(例如已知攻击者的 `185.130.5.231`)或 HTTP User-Agent 头值(例如用于自动 SQL 注入和数据库接管工具的 `sqlmap`)。此外,它使用(可选的)高级启发式机制,可以帮助发现未知威胁(例如新恶意软件)。

以下(黑)列表(即数据源)正在被使用:
```
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.
```
至于静态条目,以下恶意实体(例如恶意软件 C&C 或 Sinkhole)的痕迹已被手动纳入(来自各种 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 基于 **流量** -> **传感器** <-> **服务器** <-> **客户端** 架构。**传感器** 是一个独立组件,运行在监控节点(例如被动连接到 SPAN/镜像端口或透明内联在 Linux 网桥上的 Linux 平台)或独立机器(例如 Honeypot)上,它“监控”通过的 **流量** 以查找黑名单中的项目/痕迹(即域名、URL 和/或 IP)。如果匹配成功,它会将事件详细信息发送到(中央)**服务器**,在那里它们被存储在适当的日志目录中(即 *配置* 部分中描述的 `LOG_DIR`)。如果 **传感器** 与 **服务器** 在同一台机器上运行(默认配置),日志将直接存储到本地日志目录中。否则,它们将通过 UDP 消息发送到远程服务器(即 *配置* 部分中描述的 `LOG_SERVER`)。

**服务器** 的主要角色是存储事件详细信息并为报告 Web 应用程序提供后端支持。在默认配置中,服务器和传感器将在同一台机器上运行。因此,为了防止传感器活动中潜在的中断,前端报告部分基于 ["胖客户端"](https://en.wikipedia.org/wiki/Fat_client) 架构(即所有数据后处理都在客户端的 Web 浏览器实例中完成)。所选(24小时)时间段的事件(即日志条目)被传输到 **客户端**,那里的报告 Web 应用程序仅负责展示部分。数据以压缩块的形式发送给客户端,并在那里按顺序处理。最终报告以高度压缩的形式创建,实际上允许展示几乎无限数量的事件。
注意:**服务器** 组件可以完全跳过,只使用独立的 **传感器**。在这种情况下,所有事件都将存储在本地日志目录中,而日志条目可以手动或通过某些 CSV 读取应用程序进行检查。
## 演示页面
具有收集到的真实威胁的全功能演示页面可以在[这里](https://maltraildemo.github.io/)找到。
## 系统要求
要在 \*nix/BSD 系统上正常运行 Maltrail,需要 [Python](https://www.python.org/download/) **2.6**、**2.7** 或 **3.x**,并安装 [pcapy-ng](https://pypi.org/project/pcapy-ng/) 包。
**注意:** 请使用 `pcapy-ng`。较旧的 `pcapy` 库已弃用,并且会在 Python 3 环境中导致问题。[示例](https://github.com/stamparm/maltrail/issues?q=label%3Apcapy-ng-related+is%3Aclosed)。
- **传感器** 组件在单进程模式下运行至少需要 1GB RAM,如果在多处理模式下运行则需要更多,具体取决于选项 `CAPTURE_BUFFER` 使用的值。此外,**传感器** 组件(在一般情况下)需要管理员/root 权限。
- **服务器** 组件没有任何特殊要求。
## 快速入门
以下命令集应该能让你的 Maltrail **传感器** 启动并运行(开箱即用,使用默认设置并监控接口 "any"):
- 对于 **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
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
sudo python3 sensor.py
```
- 对于 **SUSE/openSUSE**
```
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
```
不要忘记根据需要将接口设置为混杂模式:
```
for dev in $(ifconfig | grep mtu | grep -Eo '^\w+'); do ifconfig $dev promisc; done
```

要在同一台机器上启动(可选的)**服务器**,打开一个新终端并执行以下命令:
```
[[ -d maltrail ]] || git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail
python server.py
```

- 对于 **Docker**
目前只有服务器可作为容器镜像使用。
使用 `docker run` 启动容器:
```
# 构建镜像
# 启动服务器
docker run -d --name maltrail --restart=unless-stopped -p 8338:8338/tcp -p 8337:8337/udp -v /etc/maltrail.conf:/opt/maltrail/maltrail.conf:ro ghcr.io/stamparm/maltrail:latest
# 定期更新镜像
docker stop maltrail
docker pull ghcr.io/stamparm/maltrail:latest
docker start maltrail
```
如果你需要固定版本,请更改 `docker run` 命令,不要启动 `ghcr.io/stamparm/maltrail:latest`,而是例如 `ghcr.io/stamparm/maltrail:0.84`
... 或者使用 `docker compose`:
```
# 两者皆适用
docker compose up -d
# 定期更新镜像
docker compose down --remove-orphans
docker compose build
docker compose up -d
```
不要直接编辑 `docker-compose.yml` 文件,因为它会被 `git pull` 覆盖。相反,将其复制到 `docker-compose.override.yml` 并编辑该文件;它已包含在此仓库的 `.gitignore` 中。
要测试一切是否已启动并运行,请执行以下命令:
```
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
```

要停止 **传感器** 和 **服务器** 实例(如果在后台运行),请执行以下命令:
```
sudo pkill -f sensor.py
pkill -f server.py
```
通过在 Web 浏览器中访问 http://127.0.0.1:8338(默认凭据:`admin:changeme!`)来访问报告界面(即 **客户端**):

## 管理员指南
### 传感器
传感器的配置可以在 `maltrail.conf` 文件的 `[Sensor]` 部分找到:

如果选项 `USE_MULTIPROCESSING` 设置为 `true`,则将使用所有 CPU 核心。一个核心将仅用于数据包捕获(具有适当的关联性、IO 优先级和 nice 级别设置),而其他核心将用于数据包处理。否则,所有内容都将在单个核心上运行。选项 `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)`(直接 .exe 下载(可疑))等),这可能会引入误报。选项 `CAPTURE_BUFFER` 表示在多处理模式下用于在环形缓冲区中存储数据包捕获以供非捕获进程进一步处理的总内存(以字节为单位或总物理内存的百分比)。选项 `MONITOR_INTERFACE` 应包含捕获接口的名称。使用值 `any` 从所有接口捕获(如果操作系统支持)。选项 `CAPTURE_FILTER` 应包含网络捕获(`tcpdump`)过滤器,以跳过不感兴趣的数据包并简化捕获过程。选项 `SENSOR_NAME` 包含应出现在事件 `sensor_name` 值中的名称,以便区分来自一个传感器的事件与另一个。如果设置了选项 `LOG_SERVER`,则所有事件将被远程发送到 **服务器**,否则它们将直接存储在由选项 `LOG_DIR` 设置的日志目录中,该选项可以在 `maltrail.conf` 文件的 `[All]` 部分找到。如果设置了选项 `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` 目录内)。初始化后,它将开始监控配置的接口(`maltrail.conf` 中的选项 `MONITOR_INTERFACE`),并将事件写入配置的日志目录(`maltrail.conf` 文件 `[All]` 部分中的选项 `LOG_DIR`)或远程发送到日志/报告 **服务器**(选项 `LOG_SERVER`)。

检测到的事件存储在 **服务器** 的日志目录中(即 `maltrail.conf` 文件 `[All]` 部分中的选项 `LOG_DIR`),格式为易读的 CSV 格式(注意:空格 ' ' 用作分隔符),作为单行条目,包括:`time` `sensor` `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 2985 8.8.8.8 53 UDP DNS 0000mps.webpreview.dsl.net malicious siteinspector.comodo.com`):

### 服务器
服务器的配置可以在 `maltrail.conf` 的 `[Server]` 部分找到:

选项 `HTTP_ADDRESS` 包含 Web 服务器的监听地址(注意:使用 `0.0.0.0` 监听所有接口)。选项 `HTTP_PORT` 包含 Web 服务器的监听端口。默认监听端口设置为 `8338`。如果选项 `USE_SSL` 设置为 `true`,则访问 Web 服务器时将使用 `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` 结合使用时,它可用于不同的(多个)**传感器** <-> **服务器** 架构。
选项 `FAIL2BAN_REGEX` 包含正则表达式(例如 `attacker|reputation|potential[^"]*(web scan|directory traversal|injection|remote code|iot-malware download|spammer|mass scanner`),用于 `/fail2ban` Web 调用以提取当天的攻击者源 IP。这允许通过从远程位置周期性拉取黑名单 IP 地址来使用 IP 阻断机制(例如 `fail2ban`、`iptables` 或 `ipset`)。示例用法是以下脚本(例如:以 `root` 身份每分钟作为 cronjob 运行):
```
#!/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` 指示要比较的字段,可以是:`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`。
与 **传感器** 相同,当首次运行 **服务器**(例如 `python server.py`)和/或在较长时间未运行后,如果选项 `USE_SERVER_UPDATE_TRAILS` 设置为 `true`,它将自动从痕迹定义更新痕迹(注意:存储在 `trails` 目录内)。其基本功能是将日志条目存储在日志目录中(即 `maltrail.conf` 文件 `[All]` 部分中的选项 `LOG_DIR`),并提供 Web 报告界面以将这些条目展示给最终用户(注意:无需安装 Apache 等 3rd 方 Web 服务器包):

## 用户指南
### 报告界面
进入 **服务器** 的报告界面(即通过选项 `HTTP_ADDRESS` 和 `HTTP_PORT` 定义的地址)时,用户将看到以下身份验证对话框。用户必须输入服务器管理员在配置文件 `maltrail.conf` 中设置的正确凭据(注意:默认凭据是 `admin:changeme!`):

进入后,用户将看到以下报告界面:

顶部包含一个滑动时间线(注意:单击当前日期标签和/或日历图标后激活),用户可以在其中选择过去事件的日志(注意:鼠标悬停事件将触发显示当前日期的大致事件数量的工具提示)。日期按月分组,其中 4 个月的数据显示在小部件本身内。但是,通过使用提供的滑块(即 ),用户可以轻松访问以前月份的事件。

单击日期后,该特定日期的所有事件应由客户端的 Web 浏览器加载和展示。根据事件数量和网络连接速度,日志事件的加载和显示可能需要几秒钟到几分钟(例如:100,000 个事件总共大约需要 5 秒)。在整个处理时间内,动画加载器将显示在禁用的用户界面上:

中间部分包含显示事件的摘要。`Events` 框表示所选 24 小时周期内的总事件数,其中红线表示基于 IP 的事件,蓝线表示基于 DNS 的事件,黄线表示基于 URL 的事件。`Sources` 框以堆积柱形图的形式表示每个顶级源的事件数,顶部是源的总数。`Threats` 框以饼图的形式表示顶级威胁的百分比(注意:灰色区域包含所有在总事件中各占 <1% 的威胁),顶部是威胁的总数。`Trails` 框以饼图的形式表示顶级痕迹的百分比(注意:灰色区域包含所有在总事件中各占 <1% 的痕迹),顶部是痕迹的总数。这些框中的每一个都是活动的,因此单击其中一个将导致更详细的图表。

底部以分页表格的形式包含日志事件的压缩表示。每个条目包含单个威胁的详细信息(注意:由一对 `(src_ip, trail)` 唯一标识,如果 `src_ip` 与 `trail` 相同,则由 `(dst_ip, trail)` 标识,就像来自外部的攻击一样):

列 `threat` 包含威胁的唯一 ID(例如 `85fdb08d`)和颜色(注意:从威胁 ID 中提取),`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` 包含关于威胁/痕迹的更多信息(例如已知攻击者 IP 地址的 `known attacker`,或恶意软件启动时常用的已知 IP 信息服务的 `ipinfo`),`reference` 包含黑名单条目的来源(例如静态痕迹的 `(static)`,或从该来源检索的动态数据源的 `myip.ms`),`tags` 包含给定痕迹的用户定义标签(例如 `APT28`)。
当鼠标移到 `src_ip` 和 `dst_ip` 表格条目上时,会显示包含详细反向 DNS 和 WHOIS 信息的工具提示(注意:[RIPE](http://www.ripe.net/) 是信息提供者):

在同一威胁条目内不同的事件详细信息(例如 `src_port`、`dst_port`、`proto` 等)以气泡图标(即 )的形式压缩。这样做是为了保持可用的报告界面,行数尽可能少。将鼠标移到此类图标上将导致显示包含所有项目的工具提示(例如 `attacker` 扫描的所有端口号):

单击此类图标将打开一个新对话框,包含所有存储的项目(注意:以其未压缩的形式),准备复制粘贴以进行进一步分析:

当鼠标指针悬停在威胁的痕迹上几秒钟时,将产生一个框架,其中包含使用该痕迹作为搜索词针对 [searX](https://searx.nixnet.services/) 搜索引擎执行的结果。在很多情况下,这提供了关于威胁本身的基本信息,无需用户手动搜索。在打开的框架窗口的右上角有两个额外的按钮。通过单击第一个(即 ),结果框架将在浏览器的新标签页(或窗口)中打开,而通过单击第二个(即 )将立即关闭框架(注意:通过将鼠标指针移出框架边界也可实现相同操作):

对于每个威胁,都有一个列 `tag`,可以用任意“标签”填充,以紧密描述共享同一痕迹的所有威胁。此外,这是单独描述威胁的好方法,以便以后可以将共享同一标签(例如 `yahoo`)的所有威胁分组:

### 真实案例
在下一节中,将通过真实案例描述一些“常见嫌疑人”场景。
#### 批量扫描
批量扫描是一种相当普遍的现象,个人和/或组织每天赋予自己扫描整个 0.0.0.0/0 IP 范围(即整个互联网)的权利,并在免责声明中表示如果你不喜欢它,你应该私下联系他们以便在未来的扫描中被跳过。

更糟糕的是,像 [Shodan](https://www.shodan.io/) 和 [ZoomEye](http://www.zoomeye.org) 这样的组织通过其搜索引擎让所有结果(对其他潜在攻击者)免费可用。在以下屏幕截图中,您将看到 Shodan 在一天内扫描的详细信息。
这是“攻击者”地址的反向 DNS 和 WHOIS 查找:

当鼠标指针悬停在 `trail` 列的内容(IP 地址)上时,您将看到来自 [searX](https://searx.nixnet.services/) 的搜索结果,您将能够在其中找到有关“攻击者”的更多信息:

在 `dst_ip` 列中,如果您有一个大型组织,您将看到大量被扫描 IP 地址的列表:

在 `dst_port` 列中,您将能够看到此类批量扫描已扫描的所有端口:

在其他类似情况下,您将看到相同的行为,来自黑名单中的个人攻击者(在这种情况下由 [cinsscore.com](http://cinsscore.com/) 列入):

另一种常见的行为是扫描整个 0.0.0.0/0 IP 范围(即互联网)以搜索特定端口(例如发现 [Heartbleed](http://heartbleed.com/) 时的 TCP 端口 443)。在以下屏幕截图中,您将发现以前被列入黑名单的攻击者针对 UDP 端口 5060(即 SIP)搜索[配置错误的 VoIP 设备](https://isc.sans.edu/diary/Targeting+VoIP%3A+Increase+in+SIP+Connections+on+UDP+port+5060/9193)的一个此类案例(在这种情况下由alienvault.com](http://alienvault.com) 和其他两个黑名单列入):

#### 匿名攻击者
为了发现隐藏在 [Tor](https://www.torproject.org/) 匿名网络背后的潜在攻击者,Maltrail 利用公开可用的 Tor 出口节点列表。在以下屏幕截图中,您将看到一个案例,其中潜在攻击者利用 Tor 网络以可疑方式访问我们组织范围内的 Web 目标(通过 HTTP)(10 分钟内总共 171 个连接请求):

#### 服务攻击者
与前一种情况相当相似的是,以前被列入黑名单的攻击者试图以相当可疑的方式访问我们组织范围内的特定(例如非 HTTP(s))服务(即在不到 15 分钟内总共 1513 次连接尝试):

如果我们在 `Filter` 字段中输入 `ssh attacker`,我们将能够看到那一天的所有类似情况,但在这种情况下是针对端口 22(即 SSH):

#### 恶意软件
在来自我们组织内受感染计算机的连接尝试指向已知 C&C 服务器的情况下,您将能够找到类似以下的威胁(在这种情况下是 [Beebone](https://www.microsoft.com/security/portal/threat/encyclopedia/entry.aspx?Name=Win32/Beebone)):

在 DNS 请求包含已知 [DGA](https://en.wikipedia.org/wiki/Domain_generation_algorithm) 域名的情况下,威胁将显示如下(在这种情况下是 [Necurs](https://www.microsoft.com/security/portal/threat/encyclopedia/entry.aspx?Name=Win32/Necurs)):

在以下情况下,发生了从黑名单(在这种情况下由 [malwarepatrol.net](https://malwarepatrol.net/) 列入)URL 的文件下载:

如果我们在 `Filter` 字段中输入特定的恶意软件名称(在这种情况下是 [Ramnit](https://www.microsoft.com/security/portal/threat/encyclopedia/entry.aspx?Name=Win32%2fRamnit)),则只会过滤掉已知与此恶意软件相关的威胁(向您显示所有受影响的内部计算机):

更一般地说,如果我们在 `Filter` 字段中输入 `malware`,则将过滤掉由恶意软件(相关)痕迹(例如 `IP` 地址)发现的所有威胁:

#### 可疑域名查询
Maltrail 使用静态 [TLD 域名](https://github.com/stamparm/maltrail/blob/master/trails/static/suspicious/domain.txt) 列表,这些域名已知通常涉及可疑活动。大多数此类 [TLD](https://en.wikipedia.org/wiki/Top-level_domain) 域名来自免费域名注册商(例如 [Freenom](http://www.freenom.com)),因此应受到更严格的审查。在以下屏幕截图中,我们可以发现一个案例,其中一个此类 TLD 域名 `.cm` 被未知恶意软件使用,该恶意软件使用 [DGA](https://en.wikipedia.org/wiki/Domain_generation_algorithm) 算法联系其 [C&C](https://www.trendmicro.com/vinfo/us/security/definition/command-and-control-%28c-c%29-server) 服务器:

也有完全有效的 TLD 域名(例如 `.ru`)被用于可疑活动的情况,例如在这种情况下(例如 `long domain name (suspicious)`),其中域名显然是由未知恶意软件 DGA 生成的:

Maltrail 使用所谓的“动态域名”静态[列表](https://github.com/stamparm/maltrail/blob/master/trails/static/suspicious/dynamic_domain.txt),这些域名通常用于可疑活动(例如用于经常更改目标 IP 地址的恶意软件 C&C 服务器):

此外,Maltrail 使用“onion”相关域名的静态[列表](https://github.com/stamparm/maltrail/blob/master/trails/static/suspicious/onion.txt),这些域名也经常用于可疑活动(例如恶意软件通过使用 Tor2Web 服务联系 C&C 服务器):

对于位于组织受感染内部计算机上的旧和/或过时恶意软件,通常有一种“现象”,即恶意软件持续尝试联系早已死亡的 C&C 服务器域名,而没有任何 DNS 解析。因此,这类(潜在)威胁将被标记为 `excessive no such domain (suspicious)`:

如果一个痕迹导致太多威胁(例如在 DNS 放大攻击中像假源 IP 的情况),所有类似的威胁将被归组在单个 `flood` 威胁下(注意:威胁的 ID 将用后缀 `F0` 标记),就像在以下示例中一样:

#### 可疑 ipinfo 请求
许多恶意软件使用某种 `ipinfo` 服务(例如 [ipinfo.io](http://ipinfo.io))来找出受害者的互联网 IP 地址。在正常情况下,特别是在非工作时间,这类请求应受到密切监控,就像在以下示例中一样:

通过使用过滤器 `ipinfo`,可以列出我们组织范围内共享此类可疑行为的所有潜在受感染计算机:

#### 可疑直接文件下载
Maltrail 跟踪所有可疑的直接文件下载尝试(例如 `.apk`、`.bin`、`.class`、`.chm`、`.dll`、`.egg`、`.exe`、`.hta`、`.hwp`、`.lnk`、`.ps1`、`.scr`、`.sct`、`.wbk` 和 `.xpi` 文件扩展名)。这可能会触发许多误报,但最终可能有助于重建感染链(注意:合法的服务提供商,如 Google,通常使用加密的 HTTPS 执行此类下载):

#### 可疑 HTTP 请求
在来自外部 Web 应用程序安全扫描程序的可疑请求(例如搜索 SQLi、XSS、LFI 等漏洞)和/或内部用户对未知网站的恶意尝试的情况下,可能会发现类似以下的威胁(攻击者试图利用 Joomla! CMS CVE-2015-7297、CVE-2015-7857 和 CVE-2015-7858 [漏洞](https://blog.sucuri.net/2015/10/joomla-3-4-5-released-fixing-a-serious-sql-injection-vulnerability.html) 的真实案例):

在以下示例中,Web 应用程序漏洞扫描已被标记为“可疑”:

如果我们单击气泡图标(即 )以获取详细信息并将整个内容复制粘贴到文本文件中,我们将能够看到所有可疑的 HTTP 请求:

在以下屏幕截图中,可以在我们的日志中找到流行的 SQLi 漏洞工具 [sqlmap](https://github.com/sqlmapproject/sqlmap/) 的运行:

#### 端口扫描
在针对相当数量的不同 TCP 端口进行过多连接尝试的情况下,Maltrail 将作为其启发式机制检测的结果警告潜在的端口扫描。在以下屏幕截图中,可以找到流行端口扫描工具 [nmap](https://nmap.org/) 运行的此类警告:

#### DNS 资源耗尽
针对 Web 服务器基础结构的一种流行 DDoS 攻击是通过对其(主)DNS 服务器进行有效的 DNS 递归查询(针对(伪)随机子域名(例如 `abpdrsguvjkyz.www.dedeni.com`))来耗尽其资源:

#### 数据泄露
各种程序(尤其是基于移动设备的)表现出恶意软件(类)行为,它们将潜在敏感数据发送到远程信标帖子。Maltrail 将尝试捕获此类行为,就像在以下示例中一样:

#### 误报
像所有其他安全解决方案一样,Maltrail 容易出现“[误报](https://en.wikipedia.org/wiki/False_positives_and_false_negatives)”。在这些情况下,Maltrail 将(特别是在 `suspicious` 威胁的情况下)记录常规用户的行为并将其标记为恶意和/或可疑。在以下示例中,可以看到黑名单数据源提供商 `blocklist.de` 将常规 Google 服务器标记为 `attacker`,从而导致以下威胁:

通过将鼠标悬停在痕迹上,带有 [searX](https://searx.nixnet.services/) 搜索结果的框架显示这(很可能)是一个常规 Google 服务器:

作为另一个示例,访问常规 `.work` 域名(用于恶意目的的流行 TLD)导致了以下威胁:

尽管如此,管理员应该投入一些额外的时间,并(通过其他方式)检查“可疑”是否意味着恶意,就像在以下示例中一样:

## 最佳实践
1. 安装 Maltrail:
- 在 **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
2. 设置工作环境:
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
3. 设置运行环境:
* `crontab -e # 自动启动服务器和定期更新`
*/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 # 自动启动传感器和定期重启`
*/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
4. 启用为 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 许可证下提供。有关更多信息,请参阅随附的 [LICENSE](https://github.com/stamparm/maltrail/blob/master/LICENSE) 文件。
## 赞助商
* [Sansec](https://sansec.io/) (2024-2025)
* [Sansec](https://sansec.io/) (2020-2021)
## 开发者
* Miroslav Stampar ([@stamparm](https://github.com/stamparm))
* Mikhail Kasimov ([@MikhailKasimov](https://github.com/MikhailKasimov))
## 演示
* 第 47 届 TF-CSIRT 会议,布拉格(捷克共和国),2016 年([幻灯片](https://www.terena.org/activities/tf-csirt/meeting47/M.Stampar-Maltrail.pdf))
## 出版物
* 使用 Maltrail 检测网络攻击,Linux Magazine,2022 年([摘要]( ))
* 最佳网络威胁情报源 ([SilentPush 评论, 2022](https://www.silentpush.com/blog/best-cyber-threat-intelligence-feeds))
* 基于 Maltrail 的网络恶意流量检测系统研究 ([Nanotechnology Perceptions, ISSN 1660-6795, 2024](https://nano-ntp.com/index.php/nano/article/view/1915/1497))
## 黑名单
* Maltrail 每日更新的恶意软件相关域名黑名单可以在[这里](https://raw.githubusercontent.com/stamparm/aux/master/maltrail-malware-domains.txt)找到。它基于 [trails/static/malware](trails/static/malware) 中发现的痕迹,可以安全地用于 DNS 流量阻断目的。
## 致谢
* Thomas Kristner
* Eduardo Arcusa Les
* James Lay
* Ladislav Baco (@laciKE)
* John Kristoff (@jtkdpu)
* Michael Münz (@mimugmail)
* David Brush
* @Godwottery
* Chris Wild (@briskets)
* Keith Irwin (@ki9us)
* Simon Szustkowski (@simonszu)
## 第三方集成
* [FreeBSD Port](https://www.freshports.org/security/maltrail)
* [OPNSense 网关插件](https://github.com/opnsense/plugins/pull/1257)
* [D4 项目](https://www.d4-project.org/2019/09/25/maltrail-integration.html)
* [BlackArch Linux](https://github.com/BlackArch/blackarch/blob/master/packages/maltrail/PKGBUILD)
* [Validin LLC](https://x.com/ValidinLLC/status/1719666086390517762)
* [Maltrail Splunk 插件](https://splunkbase.splunk.com/app/7211)
* [Maltrail Wazuh 解码器和规则](https://github.com/MikhailKasimov/maltrail-wazuh-decoder-and-rules)
* [GScan](https://github.com/grayddq/GScan) 1
* [MalwareWorld](https://www.malwareworld.com/) 1
* [oisd | 域名拦截列表](https://oisd.nl/?p=inc) 1
* [NextDNS](https://github.com/nextdns/metadata/blob/e0c9c7e908f5d10823b517ad230df214a7251b13/security/threat-intelligence-feeds.json) 1
* [NoTracking](https://github.com/notracking/hosts-blocklists/blob/master/SOURCES.md) 1
* [OWASP 移动审计](https://github.com/mpast/mobileAudit#environment-variables) 1
* [Mobile-Security-Framework-MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF/commit/12b07370674238fa4281fc7989b34decc2e08876) 1
* [pfBlockerNG-devel](https://github.com/pfsense/FreeBSD-ports/blob/devel/net/pfSense-pkg-pfBlockerNG-devel/files/usr/local/www/pfblockerng/pfblockerng_feeds.json) 1
* [Sansec eComscan](https://sansec.io/kb/about-ecomscan/ecomscan-license)1
* [Palo Alto Networks Cortex XSOAR](https://xsoar.pan.dev/docs/reference/integrations/github-maltrail-feed)2
1 使用(仅)痕迹
2 连接到痕迹(仅)
标签:Beacon Object File, C2检测, DNS监控, IP 地址批量处理, PB级数据处理, Python, SIEM工具, 代理服务器, 入侵检测系统, 威胁情报, 安全数据湖, 安全运维, 密码管理, 开发者工具, 开源安全工具, 恶意流量检测, 数据泄露防护, 无后门, 端口扫描检测, 网络安全, 网络探测, 请求拦截, 逆向工具, 逆向工程平台, 隐私保护, 黑名单