BarakMozesPro/secureflow-detect
GitHub: BarakMozesPro/secureflow-detect
基于 50+ 威胁情报源的网络恶意流量检测系统,提供实时仪表盘和启发式威胁发现能力。
Stars: 0 | Forks: 0

[](https://www.python.org/) [](https://github.com/stamparm/maltrail#license) [](https://x.com/maltrail)
## 目录
- [简介](#introduction)
- [架构](#architecture)
- [演示页面](#demo-pages)
- [系统要求](#requirements)
- [快速入门](#quick-start)
- [管理员指南](#administrators-guide)
- [Sensor(传感器)](#sensor)
- [Server(服务器)](#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** 是一个恶意流量检测系统,利用公开可用的(黑)名单(其中包含恶意和/或一般可疑的痕迹),以及从各种 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 基于 **流量** -> **Sensor(传感器)** <-> **Server(服务器)** <-> **Client(客户端)** 的架构。**Sensor(s)** 是一个独立组件,运行在监控节点(例如被动连接到 SPAN/镜像端口或透明内联在 Linux 网桥上的 Linux 平台)或在独立机器(例如 Honeypot)上,它“监控”通过的黑名单项目/痕迹(即域名、URL 和/或 IP)的 **Traffic**。如果匹配成功,它会将事件详细信息发送到(中央)**Server**,在那里它们被存储在适当的日志目录中(即 *配置* 部分中描述的 `LOG_DIR`)。如果 **Sensor** 与 **Server** 运行在同一台机器上(默认配置),日志将直接存储到本地日志目录中。否则,它们将通过 UDP 消息发送到远程服务器(即 *配置* 部分中描述的 `LOG_SERVER`)。

**Server** 的主要角色是存储事件详细信息并为报告 Web 应用程序提供后端支持。在默认配置中,服务器和 Sensor 将在同一台机器上运行。因此,为了防止 Sensor 活动中的潜在中断,前端报告部分基于 ["Fat client"](https://en.wikipedia.org/wiki/Fat_client) 架构(即所有数据后处理都在客户端的 Web 浏览器实例中完成)。所选(24小时)期间的事件(即日志条目)被传输到 **Client**,其中报告 Web 应用程序仅负责展示部分。数据以压缩块的形式发送到客户端,并在那里按顺序处理。最终报告以高度压缩的形式创建,实际上允许展示几乎无限数量的事件。
注意:**Server** 组件可以完全跳过,仅使用独立的 **Sensor**。在这种情况下,所有事件都将存储在本地日志目录中,而日志条目可以手动检查或通过某些 CSV 读取应用程序进行检查。
## 演示页面
具有收集的真实威胁的完整功能演示页面可以在[这里](https://maltraildemo.github.io/)找到。
## 系统要求
要正常运行 Maltrail,\*nix/BSD 系统需要 [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)。
- **Sensor** 组件在单进程模式下运行至少需要 1GB RAM,如果在多处理模式下运行,则可能需要更多,具体取决于选项 `CAPTURE_BUFFER` 使用的值。此外,**Sensor** 组件(在一般情况下)需要管理员/root 权限。
- **Server** 组件没有任何特殊要求。
## 快速入门
以下命令集应能让您的 Maltrail **Sensor** 启动并运行(开箱即用,使用默认设置和监控接口 "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
```

要在同一台机器上启动(可选的)**Server**,请打开一个新终端并执行以下命令:
```
[[ -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
```

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

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

如果选项 `USE_MULTIPROCESSING` 设置为 `true`,则将使用所有 CPU 核心。一个核心仅用于数据包捕获(具有适当的亲和性、IO 优先级和 nice 级别设置),而其他核心用于数据包处理。否则,所有内容都将在单个核心上运行。选项 `USE_FEED_UPDATES` 可用于完全关闭来自数据源的痕迹更新(仅使用提供的静态痕迹)。选项 `UPDATE_PERIOD` 包含每次自动痕迹更新之间的秒数(注意:默认值设置为 `86400`(即一天)),使用 `trails` 目录内的定义(注意:**Sensor** 和 **Server** 都负责痕迹更新)。用户可以使用选项 `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` 值中的名称,以便区分来自一个 Sensor 的事件与另一个。如果设置了选项 `LOG_SERVER`,则所有事件将远程发送到 **Server**,否则它们将直接存储在由选项 `LOG_DIR` 设置的日志目录中,该选项可以在 `maltrail.conf` 文件的 `[All]` 部分找到。如果设置了选项 `UPDATE_SERVER`,则所有痕迹都将从给定位置拉取,否则它们将从位于安装内部的痕迹定义中更新。
选项 `SYSLOG_SERVER` 和/或 `LOGSTASH_SERVER` 可用于将 Sensor 事件(即日志数据)发送到非 Maltrail 服务器。在 `SYSLOG_SERVER` 的情况下,事件数据将以 CEF (*Common Event Format*) 格式发送到在给定地址(例如 `192.168.2.107:514`)监听的 UDP(例如 Syslog)服务,而在 `LOGSTASH_SERVER` 的情况下,事件数据将以 JSON 格式发送到在给定地址(例如 `192.168.2.107:5000`)监听的 UDP(例如 Logstash)服务。
通过 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)"}```
当首次运行 Sensor(例如 `sudo python sensor.py`)和/或在长时间未运行后,它将自动从痕迹定义更新痕迹(注意:存储在 `trails` 目录内)。初始化后,它将开始监控配置的接口(`maltrail.conf` 中的选项 `MONITOR_INTERFACE`),并将事件写入配置的日志目录(`maltrail.conf` 文件 `[All]` 部分中的选项 `LOG_DIR`)或远程发送到日志/报告 **Server**(选项 `LOG_SERVER`)。

检测到的事件存储在 **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 32985 8.8.8.8 53 DNS 0000mps.webpreview.dsl.net malicious siteinspector.comodo.com`):

### Server
Server 的配置可以在 `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` 结合使用时,它可用于区分(多个)**Sensor** <-> **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`。
与 **Sensor** 相同,当首次运行 **Server**(例如 `python server.py`)和/或在长时间未运行后,如果选项 `USE_SERVER_UPDATE_TRAILS` 设置为 `true`,它将自动从痕迹定义更新痕迹(注意:存储在 `trails` 目录内)。其基本功能是将日志条目存储在日志目录(即 `maltrail.conf` 文件 `[All]` 部分中的选项 `LOG_DIR`)内,并提供 Web 报告界面以向最终用户展示这些条目(注意:无需安装 Apache 等 3rd party Web 服务器软件包):

## 用户指南
### 报告界面
进入 **Server** 的报告界面(即通过选项 `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` 包含触发事件的 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)。在下面的屏幕截图中,您将发现针对先前被列入黑名单的攻击者(在这种情况下由 [alienvault.com](http://alienvault.com) 和其他两个黑名单)针对 UDP 端口 60(即 SIP)搜索[配置错误的 VoIP 设备](https://isc.sans.edu/diary/Targeting+VoIP%3A+Increase+in+SIP+Connections+on+UDP+port+5060/9193)的一个此类案例:

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

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

如果我们在 `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 容易出现“[false positives](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 # 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
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 年([摘要](https://www.linux-magazine.com/Issues/2022/258/Maltrail))
* 最佳网络威胁情报源 ([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 Gateway Plugin](https://github.com/opnsense/plugins/pull/1257)
* [D4 Project](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 Add-on for Splunk](https://splunkbase.splunk.com/app/7211)
* [Maltrail decoder and rules for Wazuh](https://github.com/MikhailKasimov/maltrail-wazuh-decoder-and-rules)
* [GScan](https://github.com/grayddq/GScan) 1
* [MalwareWorld](https://www.malwareworld.com/) 1
* [oisd | domain blocklist](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 Mobile Audit](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 连接到痕迹(仅)
标签:AMSI绕过, C2检测, IP 地址批量处理, Maltrail, PB级数据处理, Python, Suspicious Domain, Threat Hunting, Traffic Analysis, 域名黑名单, 威胁情报, 威胁检测, 安全可视化, 安全运维, 实时仪表盘, 密码管理, 开发者工具, 开源安全工具, 恶意流量分析, 情报源聚合, 无后门, 网络安全, 网络流量分析, 请求拦截, 逆向工具, 逆向工程平台, 隐私保护