【网络协议安全】分析恶意流量pcap并编写Snort规则进行检测

全部覚えて、全部忘れて

参考:

https://blog.csdn.net/weixin_44357071/article/details/135000825

https://sec.run/posts/netproto-maltraffic-analysis/

题目

简介

malware.pcap中提供了恶意活动的流量。在这个场景中,一台Windows主机被恶意文件感染。

实验要求 :

被感染主机的IP地址和MAC地址是?

从pcap中提取恶意文件,获取该文件的SHA256。

编写一条Snort规则,使Snort能从pcap中检测到恶意文件正在被下载。

撰写实验报告时须提供被感染主机的信息,SHA256,编写的Snort规则,和进行分析的过程及截图。

选做:

分析该恶意文件,包括但不限于:这个恶意文件是什么类型的恶意文件,有什么恶意行为,etc.

所需工具

Wireshark Snort www.wireshark.org www.snort.org 需要用到的背景知识 利用Wireshark从pcap中导出文件。

A Tutorial:

Snort的基本使用。 Exporting Objects from a Pcap https://www.snort.org/#get-started 编写Snort规则。官方文档: Writing Snort Rules

提示

关注malware.pcap中的HTTP流量。 在Wireshark追踪HTTP流。 Wireshark中文件-导出对象-HTTP可以提取HTTP流中的文件。 VirusTotal或微步在线云沙箱也许有帮助。 如果在Windows运行Snort,注意修改配置文件中文件路径的表示方式 可以考虑通过匹配传输恶意文件的数据包中的某个字段来实现Snort规则,在匹配部分字符时需用 十六进制表示 一个最简单的snort rule示例,该rule关注从外部主机到本机的tcp-http流量,匹配”example”字 段,并输出“This is an example”警报: alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (msg:”This is an example”; content:”example”;sid:1983330;)

备注

如果在Windows实机进行分析,需要暂时关闭安全软件,请勿运行从pcap提取的恶意文件。 Snort规则只需能在提供的pcap中检出正在下载malware即可,可采取任意思路编写规则

被感染主机的信息

被感染主机的IP地址和MAC地址是?

用Wireshark打开恶意流量pcap,基本上看得出被感染主机IP是10.8.19.101

image-20260102232016073

点开一个能看到MAC地址是Source: HewlettPacka_1c:47:ae (00:08:02:1c:47:ae)

image-20260102232204214

提取和分析恶意文件

从pcap中提取恶意文件,获取该文件的SHA256。

过滤出所有的http请求,在过滤框输入http.request

image-20260102231522410

导出对象-HTTP,选择那个pdf文件

image-20260102231619533

被杀软拦了。暂时关闭杀毒软件导出,然后丢进虚拟机,使用file查看文件以及计算sha256

1
shasum -a 256 ooiwy.pdf

image-20260103101322450

SHA256值:f25a780095730701efac67e9d5b84bc289afea56d96d8aff8a44af69ae606404。该文件是PE32可执行文件

提交到微步云沙箱进行分析(哦直接交这不就好了,SHA也算出来了)属于Trickster家族的木马

image-20260103102502956

恶意行为有暴力枚举进程、信息搜集、改内存权限、结束其他进程等

image-20260103102710799

编写snort规则进行检测

编写一条Snort规则,使Snort能从pcap中检测到恶意文件正在被下载。

安装snort3(Ubuntu 22.04)

https://www.cnblogs.com/jikefan/articles/18220328

https://blog.csdn.net/m0_72892640/article/details/146405167

更新

1
sudo apt-get update && sudo apt-get upgrade -y

依赖

1
sudo apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev -y

Snort DAQ(数据采集库)。新建一个snort目录来存放(记得开梯子我服了

1
git clone https://github.com/snort3/libdaq.git

Snort

1
git clone https://github.com/snort3/snort3.git

image-20260103112620346

编译安装

1
2
3
4
5
cd snort3/          //进入snort3目录
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc //配置snort3
cd build/ //进入build目录
make //编译
make install //安装

./configure的时候报错

image-20260103112949798

说是libdap的问题。去翻了libdap的README

image-20260103113548768

那就先安装libdap吧。进libdap目录:

1
2
3
4
./bootstrap
./configure
make
make install

image-20260103114023522

缺权限,改成sudo。OK了。回去搞snort

image-20260103114139133

额啊啊啊依赖写少了。image-20260103114802867

啊这个就是参考博客里的TCMalloc。行吧装吧,缺一个装一个就是了

1
sudo apt install libpcre2-dev libgoogle-perftools-dev

成功

image-20260103114923119

继续

1
2
3
cd build/          //进入build目录
make //编译
sudo make install //安装

完成。更新共享库

1
sudo ldconfig 

查看snort版本

1
snort -V 

image-20260103144208979

编写snort规则

官方文档:3. Writing Snort Rules

snort3使用:https://developer.volcengine.com/articles/7539483541496283162

就是对那条下载pdf文件的流量进行报警就行了

snort3的规则定义和snort2不太一样,在这个目录下(大概)。可以把这个自定义规则路径写进/usr/local/etc/snort/snort.lua配置文件中,在ips部分定义规则集的路径,再include = ‘自定义规则集的路径’

image-20260103150555823

在这里新建一个规则ooi.rules

1
2
3
4
5
6
7
8
alert tcp any any -> any any (
msg:"malware detected in PDF flow";
http_header;
content:"Content-Type: application/pdf";
file_data;
content:"|4D 5A|";
sid:1000001;
)

tcp any any -> any any监控网络中任何方向的 TCP 流量,在http_header中查找content:”Content-Type: application/pdf”(也就是传输pdf),然后到file_data(就是在http正文里)查找|4D 5A|,对应MZ,MZ 是 Windows 可执行文件 (EXE, DLL) 的文件头标志。所以会检测到伪装成下载pdf实则在下载可执行文件的流量

临时追加,检查规则是否正确

1
snort -c snort.lua -R ooi.rules

看多了觉得这个半边猪脸萌萌的。。。

image-20260103151308845

没问题,在snort.lua里加上这个规则的路径

image-20260103163605882

检测pcap

1
snort -c snort.lua -r /path/to/file.pcap -A alert_fast -l /path/to/log

image-20260103165430945