前言
在高级持续性威胁(APT)检测中,使用 Suricata 结合各种 IOC(Indicator of Compromise)检测和分析全流量是一种有效的方法。我们可以借助 Suricata 强大的 DPI 功能对流量中的domain、IP、JA3/JA3S、tls.fingerprint、tls.cert_serial、tls.cert_subject和文件哈希等进行全面分析,以提高网络攻击检测和防御能力。
目录
1. 域名 和 IP地址 检测
域名 和 IP地址 检测
dnslog检测
2. 敏感信息泄露
3. TLS 指纹
4. JA3S 哈希检测
5. 文件哈希监控
6. 整合 IOC 数据集
feed汇总(maltrail)
AutonomousThreatSweeper
fofa
7. 日志分析与告警集成
8. 相关文件汇总
1. 域名 和 IP地址 检测
可以通过在 rules 文件中使用 dataset 关键字将恶意域名和 IP 地址列表进行批量加载,提升规则匹配的灵活性。
域名 和 IP地址 检测
##域名全匹配,base64
#alert dns any any -> any 53 (msg:"dataset detect domain";dns.query;dataset:isset,domain.base64.list,type string,load /mnt/d/poc/blue/ioc/all.domain.base64.txt;sid:1001;)
##ip
#alert ip any any -> any any (msg:"dataset detect ip"; ip.dst; dataset:isset,ip.list,type ip,load /mnt/d/poc/blue/ioc/all.ip.txt;sid:1002;)
dataset支持文件行内容为ipv4、ipv6、md5、sha256、string(base64);域名归类为string,需要base64编码,一行一个
dnslog检测
利用pcrexform正则提取dns请求的主域名(oastify.com), 结合dataset检测各dnslog的子域名(abc*.oastify.com),学自kavia师傅的文章《Suricata之dnslog域名检测》
https://mp.weixin.qq.com/s/b5hyAxjqVIt-uvmYq-0NYg
##*.*子域名,base64
#alert dns any any -> any 53 (msg:"pcrexform+dataset detect domain";dns.query;pcrexform:"(.[^.]+.[^.]+)$";dataset:isset,dnslog.base64.list,type string,load /mnt/d/poc/blue/ioc/dnslog.base64.txt;sid:1000;)
dnslog列表示例
.0kee.360.cn
.2xss.cc
.burpcollaborator.net
.bxss.me
.ceye.io
.dnslog.cn
.eu.org
.exeye.io
.eyes.sh
.godns.vip
.ngrok.io
.nip.io
.oastify.com
.pipedream.net
.r87.me
.sslip.io
.tu4.org
.vcap.me
.vuleye.pw
.xip.io
.xip.name
.xn--9tr.com
2. 敏感信息泄露
身份证、手机号
正则匹配身份证和手机号等敏感信息
##身份证
#alert tcp any any -> any any (msg:"Detected 18-digit Chinese ID card number"; pcre:"/bd{6}(19|20)d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])d{3}[dXx]b/"; sid:1003;)
##手机号
#alert tcp any any -> any any (msg:"Detected 11-digit Chinese mobile phone number"; pcre:"/b1[3-9]d{9}b/"; sid:1004;)
3. TLS 指纹
tls证书序列号、指纹、颁发人
在 APT 攻击中,许多恶意 TLS 连接会使用特定的 SNI(Server Name Indication)或证书颁发机构(Issuer)。通过分析 SNI 和 Issuer 字段,我们可以检测出可疑的加密流量。
tls.fingerprint支持dataset,可以加载一个指纹列表
#tls.cert_serial,7.0.7最高支持tls1.2
"tls.cert_serial";tls.cert_serial; content:"04:61:B0:D9:F5:38:89:DC:37:30:9D:0A:31:B0:58:2F:48:B2"; sid:1005;) alert tls any any -> any any (msg:
##tls.fingerprint,7.0.7最高支持tls1.2
"tls.fingerprint";tls.fingerprint:"8E:DC:64:BD:3D:EA:A4:39:7A:F5:45:3A:EE:89:3F:A6:70:4D:FA:BF"; sid:1006;) alert tls any any -> any any (msg:
##tls.cert_subject,7.0.7最高支持tls1.2,fast_pattern,CN=/O=
"tls.cert_subject";tls.cert_subject; content:"CN=email.instant-patch.online"; sid:1007;) alert tls any any -> any any (msg:
根据apt38使用过的ssl序列号381691609147718260459780208541489433626802进行检测
tls.cert_serial/tls.fingerprint/tls.cert_subject这三个关键字最高支持tls1.2,不支持tls1.3,建议使用ja3指纹
平时我们在fofa搜索时使用的序列号是十进制格式,它是从证书的原始字节流转换为大整数后得到的,suricata的tls.cert_serial关键字检测的是原始字节流
十进制格式 和 原始字节流可以相互转换
4. JA3S 哈希检测
ja3s等tls指纹不用自己算,在配置文件中将outputs.eve-log.types.tls.enabled置为yes,suricata运行检测一遍pcap文件,就会自动把相关tls关键字的键值对输出到日志文件中
##ja3s.hash,7.0.7最高支持tls1.3,6aea764ee67f71caf3dc723118906199
#alert tls any any -> any any (msg:"ja3s.hash"; ja3s.hash; content:"6aea764ee67f71caf3dc723118906199"; sid:100008;)
5. 文件哈希监控
APT 攻击中,恶意文件的传播通常是通过网络传输完成的。Suricata 支持从数据包中提取文件,基于文件哈希检测攻击行为。且filesha256、filemd5、filesha1支持loadfile加载百万级大列表。
##filesha256
##md5: 5e0845a9f08c1cfc7966824758b6953a
##sha1: 0f53892c43ccc3f64c524f7b04ab914123e36d48
##sha256: 16bef09e16119f1754a6b4283e93ff7a17cfdd7c043c3ff05a3d41f128ead52e
#alert tcp any any -> any any (msg:"filesha256";filesha256:/mnt/d/poc/blue/ioc/all.sha256.txt; sid:100009;)
#alert tcp any any -> any any (msg:"filemd5";filemd5:/mnt/d/poc/blue/ioc/all.md5.txt; sid:100010;)
#alert tcp any any -> any any (msg:"filesha1";filesha1:/mnt/d/poc/blue/ioc/all.sha1.txt; sid:100011;)
suricata的”features”跟它配置文件里的几百个项成正比,比如从http数据包中提取文件默认最大为100kb,不修改response-body-limit的话,超过100kb的文件就会被截断,生成错误hash
6. 整合 IOC 数据集
APT 攻击通常涉及大量 IOC 数据,包括域名、IP 地址、文件哈希等。可以使用 Suricata 的 dataset 功能,将数以百万 IOC 数据导入为一份独立的文件,动态更新 IOC 列表而无需更改规则。
feed汇总(maltrail)
https://github.com/stamparm/maltrail/tree/28c3ef8038f0b416f584e8b63be0fbb459dd21c8/trails/feeds
maltrail汇总了feed,但只包含部分ioc数据,且没有文件hash,全量的得自己提取,每个feed文件点进去就可以看到一个开源ioc数据集,一共52个源
https://github.com/stamparm/maltrail/tree/28c3ef8038f0b416f584e8b63be0fbb459dd21c8/trails/static/malware
还按恶意行为、组织等分类了,方便研究员单独关注各个组织的行为
提取apt相关的ioc
AutonomousThreatSweeper
https://github.com/Securonix/AutonomousThreatSweeper
更新最快的repo
fofa
fofa有两个关键词category=”黑客工具”和category=”区块链”,已经标识了BitRAT、Mythic、CS等C2,和矿池节点,方便检测人工渗透和挖矿木马等。
提取ioc
7. 日志分析与告警集成
APT 检测不仅依赖 Suricata 规则告警,还需要有效的日志分析。将 Suricata 日志整合到 SIEM 平台,如 ELK、Splunk 或 wazuh,或者arkime等全流量平台,可以帮助安全团队更快速地响应告警事件。同时,通过 Suricata 的 eve.json 文件中的 fileinfo、tls 和 alert 日志,团队可以更全面地分析攻击源和攻击路径。
8. 相关文件汇总
测试环境:
Ubuntu 22.04.4 LTS
Suricata version 7.0.7 RELEASE
配置文件:
1.1
---
"7.0" :
#vars:
# address-groups:
# HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
# EXTERNAL_NET: "!$HOME_NET"
vars:
:
HOME_NET: "any"
EXTERNAL_NET: "any"
outputs:
eve-log:
enabled: yes
filename: all.json
yes :
types:
alert:
yes # 是否包含触发告警的数据包 :
payload: yes # 启用数据包的十六进制转储(可选)
yes # 可打印的数据包内容(可选) :
packet: yes # 是否记录原始数据包
no # 启用 HTTP body 内容记录 :
metadata: no # 记录规则中定义的元数据
metadata:
rule:
metadata: true
dns:
enabled: no
tls:
enabled: no
custom: [subject, issuer, session_resumed, serial, fingerprint, sni, version, not_before, not_after, certificate, ja3, ja3s, ja4, client_certificate]
files:
no :
[md5, sha1, sha256] :
enabled: no
:
protocols:
http:
enabled: yes
libhtp:
:
0 :
tls:
enabled: yes
yes :
yes :
:
/mnt/d/poc/blue/suricata/rules/mine.yaml
# - /mnt/d/poc/blue/suricata/rules/*/*.rules
规则:
##*.*子域名,base64
#alert dns any any -> any 53 (msg:"pcrexform+dataset detect domain";dns.query;pcrexform:"(.[^.]+.[^.]+)$";dataset:isset,dnslog.base64.list,type string,load /mnt/d/poc/blue/ioc/dnslog.base64.txt;sid:1000;)
##域名全匹配,base64
#alert dns any any -> any 53 (msg:"dataset detect domain";dns.query;dataset:isset,domain.base64.list,type string,load /mnt/d/poc/blue/ioc/all.domain.base64.txt;sid:1001;)
##ip
#alert ip any any -> any any (msg:"dataset detect ip"; ip.dst; dataset:isset,ip.list,type ip,load /mnt/d/poc/blue/ioc/all.ip.txt;sid:1002;)
##身份证
#alert tcp any any -> any any (msg:"Detected 18-digit Chinese ID card number"; pcre:"/bd{6}(19|20)d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])d{3}[dXx]b/"; sid:1003;)
##手机号
#alert tcp any any -> any any (msg:"Detected 11-digit Chinese mobile phone number"; pcre:"/b1[3-9]d{9}b/"; sid:1004;)
##tls.cert_serial,7.0.7最高支持tls1.2
#alert tls any any -> any any (msg:"tls.cert_serial";tls.cert_serial; content:"04:61:B0:D9:F5:38:89:DC:37:30:9D:0A:31:B0:58:2F:48:B2"; sid:1005;)
##tls.fingerprint,7.0.7最高支持tls1.2
#alert tls any any -> any any (msg:"tls.fingerprint";tls.fingerprint:"8E:DC:64:BD:3D:EA:A4:39:7A:F5:45:3A:EE:89:3F:A6:70:4D:FA:BF"; sid:1006;)
##tls.cert_subject,7.0.7最高支持tls1.2,fast_pattern,CN=/O=
#alert tls any any -> any any (msg:"tls.cert_subject";tls.cert_subject; content:"CN=email.instant-patch.online"; sid:1007;)
##ja3s.hash,7.0.7最高支持tls1.3,6aea764ee67f71caf3dc723118906199
#alert tls any any -> any any (msg:"ja3s.hash"; ja3s.hash; content:"6aea764ee67f71caf3dc723118906199"; sid:100008;)
##filesha256
##md5: 5e0845a9f08c1cfc7966824758b6953a
##sha1: 0f53892c43ccc3f64c524f7b04ab914123e36d48
##sha256: 16bef09e16119f1754a6b4283e93ff7a17cfdd7c043c3ff05a3d41f128ead52e
#alert tcp any any -> any any (msg:"filesha256";filesha256:/mnt/d/poc/blue/ioc/all.sha256.txt; sid:100009;)
#alert tcp any any -> any any (msg:"filemd5";filemd5:/mnt/d/poc/blue/ioc/all.md5.txt; sid:100010;)
#alert tcp any any -> any any (msg:"filesha1";filesha1:/mnt/d/poc/blue/ioc/all.sha1.txt; sid:100011;)
最后,欢迎对写规则感兴趣的师傅们加入指导,群里有kavia师傅坐镇。
公众号后台消息基本不看,有事滴滴,欢迎指正
原文始发于微信公众号(流浪猫收容所):suricata结合ioc检测apt攻击