我在 Linux Ubuntu 20.04 虚拟机上安装了 Suricata 7.0.2 IDS。在我的虚拟环境中,我有两个虚拟网络。在第一个网络中,我有一个邮件用户代理(攻击者),它将电子邮件发送到本地 Postfix 邮件服务器(攻击者邮件服务器,IP 地址 10.0.3.17),然后将发送的邮件中继到接收方 SMTP 服务器(目标邮件服务器,IP地址10.0.2.1)使用端口25上的SMTP协议。该电子邮件系统模型如下所示:SMTP 电子邮件系统
我希望配置 Suricata 来监控从攻击者邮件服务器到目标邮件服务器通过端口 25。我使用 WireShark 执行数据包捕获来监控 SMTP 流量,如下所示:使用 WireShark 捕获 SMTP 数据包
SMTP 流量以及源和目标 IP 地址可见,表明 SMTP 流量正在按照预期方向流动。
我希望使用 Suricata IDS 将 SMTP 流量检测为协议警报,并将生成的警报记录到 Suricata 输出日志文件 /var/log/suricata/eve.json,如 Suricata 文档中所述。我为我的 Suricata IDS 编写了自己的自定义规则,如下所示:
- 警报 tcp any any -> [10.0.2.0/24] 25 (msg:“SMTP 中继连接”;flow:to_server,已建立;sid:9998088;rev:8;)
- 警报 smtp any any -> [10.0.2.0/24] any (msg:“SMTP 协议活动”;flow:to_server,已建立;sid:9900066;rev:2;)
我已将这些规则添加到新文件中,并编辑了 Suricata 配置文件以将此文件包含在“rule-files:”部分下。为了支持 SMTP 应用程序层检测和将日志输出到 eve-output 文件,我还在“app_layer”和“outputs:eve-log:types”部分下编辑了配置文件,如下所示。配置如两个屏幕截图所示:SMTP 流量检测 SMTP 日志输出
编辑配置文件 /etc/suricata/suricata.yaml 后,我运行了以下命令:
sudo suricata -T -c /etc/suricata/suricata.yaml -v
sudo systemctl restart suricata
这些命令没有产生错误,这意味着我的自定义 Suricata 规则没有语法错误,并且它们已加载,因此没有配置错误。
最后,为了测试 Suricata 规则检测,我向目标网络中的本地用户帐户发送了一封电子邮件,该电子邮件从攻击者邮件服务器到目标邮件服务器通过端口 25。使用当前的 Suricata 配置,这应该在输出日志文件 /var/log/suricata/eve.json 中记录一条警报,其中带有来自我的自定义 Suricata 规则的标签签名“SMTP 中继连接”或“SMTP 协议活动”。但是,事实并非如此。任何有关为什么会这样帮助都将不胜感激?
答案1
Suricata 默认已包含 smtp 规则 https://github.com/OISF/suricata/blob/master/rules/smtp-events.rules
但是,如果您启用更多来源并获取/更新这些规则,您将获得更多 smtp 规则。对于这些来源和更新,您需要 suricata-update https://suricata-update.readthedocs.io/en/latest/quickstart.html#list-enabled-sources
例如,如果您启用源 et/open(et=emergingthreatening),您将获得所有这些 smtp 规则 https://rules.emergingthreats.net/open/suricata-5.0/rules/emerging-smtp.rules
关于您的规则未加载,您的 suricata.log 说了什么?
您是否还在 suricata.yaml 中启用了以下内容
还可以尝试在 suricata.yaml 中启用此功能
- smtp:
#extended: yes
# enable this for extended logging information
# this includes: bcc, message-id, subject, x_mailer, user-agent
# custom fields logging from the list:
# reply-to, bcc, message-id, subject, x-mailer, user-agent, received,
# x-originating-ip, in-reply-to, references, importance, priority,
# sensitivity, organization, content-md5, date
#custom: [received, x-mailer, x-originating-ip, relays, reply-to, bcc]
custom: [received, x-mailer, x-originating-ip, relays, reply-to, bcc,
reply-to, bcc, message-id, subject, x-mailer, user-agent, received,
x-originating-ip, in-reply-to, references, importance, priority,
sensitivity, organization, content-md5, date]
# output md5 of fields: body, subject
# for the body you need to set app-layer.protocols.smtp.mime.body-md5
# to yes
md5: [body, subject]
另外,检查 selks 它有一个预先配置了 elk stack 的 suricata 解决方案 https://github.com/StamusNetworks/SELKS