前言
本想写纯技术文档,但近期私信我的几个读者应该都是刚开始接触网络安全,所以我觉得我还是应该记录的更详细一点,不能说完全记录透彻,但应该能指出一个知识大概是哪一块领域的,方便百度。
此文章是我记录流量分析的开篇,所以文字叙述比较多。之后会结合个人经验详细记录检测规则集说明、检测规则的告警分类思路等,并且我会在公网搭建一个离线数据包分析平台供大家使用,兼容市面上的主流规则集和我自己编写的部分规则(其中包含此前分析的一些APT组织样本提取的特征)。
对我个人而言,做病毒样本分析实际上是受流量分析的启发。因为加密通讯流量的普及,单纯的流量分析有着很大的局限性。比如在窃密事件中,受害者端木马程序对传输的窃密文件先加密在传输,流量会话中只会捕获到一连串无意义的二进制流,这时候可以获取样本的话,结合木马分析,我可以去逆向它的加密和通讯逻辑、提取到密钥及外联地址等。
除了可以完成解密失窃内容做危害评估以外,也可能获取以下一些内容,它们都可以作为此木马的通讯特征,在其他流量中被检测。
-
外链地址(域名、IP等)。 -
硬编码在木马样本中的字符被传输,它们可能(无随机数参与加密)在流量中的密文是固定的。 -
行为特征,使用的加密或编码算法使得通讯流量具有一定的长度或者ascll码组成特征。(以常见工具举例,冰蝎3.*上下行流量分别为BASE64和二进制乱码,冰蝎4.0中使用默认加密算法使得响应载荷长度是256整数倍;前文中写的NSA木马,它的指令下发载荷密文长度在通讯流量中是固定的)
这些通讯特征就可以被编写为检测规则,被入侵检测引擎在通讯流量中被匹配,于是乎介绍到这样一个强大的工具SURICATA。
背景
SURICATA是一个开源的网络入侵检测系统(IDS)和入侵防御系统(IPS),目前最新的版本为了7.02版本。
它可以捕获通讯流量并对其做协议解析,识别或防御通讯流量中可疑或恶意的行为。国内大部分厂商基于流量的IDS的数据包捕获、协议解析、检测引擎等关键模块都是在此基础上做修改和扩展优化的。
一个示例
首先看一个应用示例,以下是一个针对OA服务的漏洞扫描工具,以通达OA为例,捕获其通讯流量,保存数据包。
捕获部分通讯流量如下。
调用suricata进行分析。
suricata做规则内容和配置文件自检,然后开始、结束扫描。
查看输出的日志信息。
查看fast.log输出的告警信息,其中通达OA关联的检测规则是我编写的。
这样就在流量中发现了恶意的攻击行为,检测引擎对这些可以选择丢弃或告警输出,这样就成了实现了检测和防御两个方面的功能。
安装
安装suricata 7.02走官方文档的流程方法会有一些棘手的依赖问题,尤其是在centos8+ 上,该版本用了一些很新的库(例如dpdk2.2),常规的下载源中还没有收录,只有自己源码编译安装。
如果遇到难解决的问题你可以私信我,我将编译好的SURICATA二进制文件和其所需依赖打包给你。
你可以在文件“/etc/ld.so.conf”中手动添加动态链接库路径,将缺失库放入路径,SURICATA就可以执行了。
基本使用
做安全研究主要是使用离线数据包分析模块,SURICATA提供了接口加载配置文件、加载待检测数据包、输出告警信息。
suricata -c ../suricata.yaml -r ../*.pcapng -l ../output/
suricata.yaml 检测引擎配置文件
*.pcapng 待检测数据包
output 告警信息等输出文件
修改配置文件suricata.yaml
按官方的分法,配置文件主要分为四个模块,规则文件的配置独立于于这四个模块以外。
-
模块一,定义网络信息。例如本地资产,熟知端口等,可以在检测规则中使用这些定义。
-
模块二,选择启用哪些输出模块,用于记录 Suricata的日志。例如轻量级告警日志“fast.log”,EVE JSON 格式的日志“eve-log”等,也可以解析和输出部分应用层协议日志,例如http访问日志。
-
模块三,配置 Suricata的捕获设置。指定使用的捕获引擎和捕获的网络接口,还有一些捕获策略,(做离线分析的话,这个模块用的不多,主要是研发、运维等人员用)。
-
模块四,配置应用层协议的设置,包括应用层协议的解析和检测。(用默认的基本可以满足) 。
-
规则模块配置,也是最重要的配置。在路径“default-rule-path”存放检测规则,在“rule-files”下添加文件名使得规则生效,“classification-file”是对应规则字段classtype的规则分类信息。
-
检测规则还可以用信誉度检测(其实就是黑名单),目标IP低于信誉度阈值,即可报警。也可以编写lua脚本去做更复杂更灵活的恶意流量检测(例如cobalt strike的部分通讯流量) 。
待检测数据包
在日常渗透测试当中捕获,扫描探测、漏洞利用、远程控制、内网横向、等各个攻击链阶段均可。
介绍一个获取恶意通讯数据包的网站,一抓一大把。
https://www.netresec.com
https://www.malware-traffic-analysis.net(时常关闭)
检测规则
开源渠道获取即可,其中包括一些商用的,关于规则后续将写一篇,详细说明各个规则库情况,现在仅做列举。在我后续搭建的平台将兼容以下所有规则。
1.
规则集名称:Proofpoint -- Emerging Threats Open Ruleset [et/open]
获取:https://rules.emergingthreats.net/open/
2.
规则集名称:Proofpoint -- Emerging Threats Pro Ruleset [et/pro]
获取:https://rules.emergingthreats.net/PRO_download_instructions.html
3.
规则集名称:OISF -- Suricata Traffic ID ruleset [oisf/trafficid]
获取:https://openinfosecfoundation.org/rules/trafficid/trafficid.rules
4.
规则集名称:Positive Technologies -- Positive Technologies Attack Detection Team ruleset [ptresearch/attackdetection]
获取:https://raw.githubusercontent.com/ptresearch/AttackDetection/master/pt.rules.tar.gz
5.
规则集名称:Secureworks -- Secureworks suricata-enhanced ruleset [scwx/enhanced]
获取:https://www.secureworks.com/contact/
6.
规则集名称:Secureworks -- Secureworks suricata-malware ruleset
获取:https://www.secureworks.com/contact/
7.
规则集名称:Secureworks -- Secureworks suricata-security ruleset [scwx/security]
获取:https://www.secureworks.com/contact/
8.
规则集名称:Abuse.ch -- Abuse.ch SSL Blacklist
获取:https://sslbl.abuse.ch/blacklist/sslblacklist.rules
9.
规则集名称:Abuse.ch -- Abuse.ch Suricata JA3 Fingerprint Ruleset [sslbl/ja3-fingerprints]
获取:https://sslbl.abuse.ch/blacklist/ja3_fingerprints.rules
10.
规则集名称:Etnetera a.s. -- Etnetera aggressive IP blacklist
获取:https://security.etnetera.cz/feeds/etn_aggressive.rules
11.
规则集名称:tgreen -- Threat hunting rules [tgreen/hunting]
获取:https://raw.githubusercontent.com/travisbgreen/hunting-rules/master/hunting.rules
12.
规则集名称:malsilo -- Commodity malware rules [malsilo/win-malware]
获取:
https://malsilo.gitlab.io/feeds/dumps/malsilo.rules.tar.gz
13.
规则集名称:Stamus Networks -- Lateral movement rules [stamus/lateral]
获取:
https://ti.stamus-networks.io/open/stamus-lateral-rules.tar.gz
将获取到的规则集,置于规则文件置于”default-rule-path“路径中,再把文件名写入在“rule-files”即可生效。
输出
运行命令即可,举例如下
suricata -c /home/suricata/config/suricata.yaml -r /home/work/test-data/* -l /home/suricata/config/log -k none
如果你不修改输出的相关配置,输出将会有如下四个。
-
suricata.log ,包含 Suricata 运行时的日志信息,如启动、关闭、规则加载等,用于故障排除和监视。 -
stats.log,包含 Suricata 的统计信息,如流量统计、规则匹配统计等,,用于性能调优和网络活动分析。 -
fast.log,就是告警输出日志了,通常看这个就可以。 -
eve.json,详细的事件记录,以 JSON 格式呈现,包括有关规则匹配事件的详细信息,包括协议解析、源和目标地址、端口、负载数据等,用于深入分析和检测。这也是各家公司将suricata产品化后主要数据来源。
原文始发于微信公众号(帅仔回忆录):入侵检测之流量分析–SURICATA应用