0|前言
前文对木马样本运行流程做了分析,有兴趣可以移步看一看。提取通讯特征和相关IOC是木马逆向的主要目的之一,域名、IP等、hash等IOC信息可以放入黑名单库中,而通讯特征可以编写检测规则在流量中匹配。
文章使用suricata6.0检测引擎,编写配套规则匹配“badnews”木马通讯特征。
1|背景
Suricata是一个强大的、开源的网络入侵检测系统(IDS)和网络安全监控工具,它的检测引擎用于检测网络流量中的恶意活动和安全事件,Suricata的检测引擎基于规则和模式匹配技术,它可以分析网络流量,检测各种安全威胁,包括病毒、蠕虫、恶意软件、入侵尝试、DoS(拒绝服务)攻击等等。
诸位师傅们在护网行动、重保见过多数厂商的流量设备,其“流量捕获”、“检测引擎”两大模块都改自Suricata。
2|检测规则编写
检测规则编写两个关键点,一是正确匹配,二是精度匹配,正确告警和降低误报都很重要。
首先特征提取,不同通讯协议的木马采用不同的优化匹配顺序,“badnews”木马使用http协议通讯,该类数据包通常先匹配应用层协议固定字段(即http头),再匹配用户定义字段(即http主体)。若该层协议特征不明显或者密文,再下到传输层匹配(例如外连端口、标志位、载荷长度等),网络层IP、TTL值等。
通过前文逆向调试分析发现,该样本如下表格字段都是硬编码写在木马程序中的,都可以作为特征匹配(字段比较多,特征还是很明显的,这里列举部分关键的)。
字段名称 | 值(说明) | 通讯阶段 |
http.method |
POST |
全阶段 |
http.url | /vwnykzjzy2si478c7a2w/terncpx8yr2ufvisgd2j/x8jb9g97kkexor5ihnbq/d91ng62l00hc4vgaxkf.php | 全阶段 |
http.content-type |
application/x-www-form-urlencoded; charset=utf-8 | 全阶段 |
http.host | bingoplant.live | 全阶段 |
qadc= | uuid,动态密文 | 全阶段 |
jsve= | 受害主机用户名,动态密文 | 心跳包 |
SL= | 受害者网络出口IP,动态密文 | 心跳包 |
edcaa= | ZG9uZQ==,base64编码固定字段 | 上线结束包 |
olmn= | huik,固定字段 | 上线结束包 |
规则详细字段就不赘述了,若感兴趣可以访问suricata官方文档。
https://docs.suricata.io/en/suricata-6.0.0/index.html
这里直接给到规则,若有需求自便。
#上线数据包
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"APT白象 武器-badnews-2023 上线"; flow:established,to_server; content:"POST"; http_method; content:"/vwnykzjzy2si478c7a2w/terncpx8yr2ufvisgd2j/x8jb9g97kkexor5ihnbq/d91ng62l00hc4vgaxkf.php";http_uri; http.content_type; content:"application/x-www-form-urlencoded; charset=utf-8"; http.request_body;pcre:"/qadc=/";pcre:"/olmn=puik/"; sid:12003120; )
#上线结束数据包
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"APT白象 武器-badnews-2023 上线结束"; flow:established,to_server; content:"POST"; http_method; content:"/vwnykzjzy2si478c7a2w/terncpx8yr2ufvisgd2j/x8jb9g97kkexor5ihnbq/d91ng62l00hc4vgaxkf.php";http_uri; http.content_type; content:"application/x-www-form-urlencoded; charset=utf-8";http.request_body; pcre:"/edcaa=ZG9uZQ==/";pcre:"/olmn=/"; sid:12003121; )
#心跳包
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"APT白象 武器-badnews-2023 心跳"; flow:established,to_server; content:"POST"; http_method; content:"/vwnykzjzy2si478c7a2w/terncpx8yr2ufvisgd2j/x8jb9g97kkexor5ihnbq/d91ng62l00hc4vgaxkf.php";http_uri; http.content_type; content:"application/x-www-form-urlencoded; charset=utf-8"; http.request_body;pcre:"/jsve=/";pcre:"/SL=/"; sid:1200312; )
通常会去除域名、url匹配,保留通讯细则特征再写一套规则,因为目标可能会更换外联地址为别的域名,若木马使用相同的通讯结构,这样还可能发现新的外链地址。
3|告警信息输出
在调试木马时我抓取了数据包。
直接导入配置好的检测引擎。
suicata的原生告警输出如下。
09/18/2023-15:04:30.794206 [1:12003120:0] APT白象 武器-badnews-2023 上线 [高危] [Classification: APT事件] [Priority: 3] {TCP} 169.254.216.11:52046 -> 169.254.144.149:80
09/18/2023-15:46:36.779496 [1:12003121:0] APT白象 武器-badnews-2023 上线结束 [高危] [Classification: APT事件] [Priority: 3] {TCP} 169.254.216.11:52457 -> 169.254.144.149:80
09/19/2023-14:03:03.283421 [1:1200312:0] APT白象 武器-badnews-2023 心跳 [高危] [Classification: APT事件] [Priority: 3] {TCP} 169.254.216.11:53284 -> 169.254.144.149:80
#告警数据包通讯时间 [?] 告警信息 [威胁等级] [告警分类] [优先级信息] 五元组信息
这样在其他网络环境中能有此告警,匹配到就是一个APT事件了,蓝队上大分。
原文始发于微信公众号(帅仔回忆录):“白象”2023年迭代武器“badnews”通讯流量检测–Suricata6.0