相关阅读
如果您还没有安装Suricata,您可以参考这篇文章
杂谈
Suricata去年就在捣鼓了,最近客户要用,因此又捣鼓了一下,本篇主要讲一下Suricata的文件还原/文件导出功能,在Suricata官方文档中该功能称为File Extraction,你也可以叫他是文件提取。通俗地讲,无论是实时流量还是离线流量pcap包中,Suricata都可以将其中传输的文件还原出来,比方说我通过FTP给服务器上传了一个php文件,它可以还原出来php文件内容;再比方说,我通过HTTP协议,在网页上下载了一个MP3的音乐,它可以还原出来MP3音乐文件。是不是听起来还蛮不错的!
通过这个功能(web界面本质上就是通过suricata的filestore功能实现,然后再写个前端,很简单!)
![图片[1]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117091001255-1024x228.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
我居然看到了办公室同事浏览的视频内容,有图有真相(手动滑稽)
![图片[2]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117090847773.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
原来上班的时候还在想着怎么赚钱,emmm,真香!
相关配置
suricata.yaml文件中
- file-store中的enabled调成yes
- file-store中的write-fileinfo调成yes
- 如果要还原全部文件,force-filestore: yes前面的#去掉(默认只还原触发告警的文件)
请先检查下面的配置,以下配置决定了你是否开启Filestore功能,如果没开启,则无法完成文件还原/文件提取
在/usr/local/etc/suricata/suricata.yaml中,约445行的位置
- file-store:
version: 2
enabled: yes
![图片[3]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117062120577-1024x580.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
然后调整下面的第456行
write-fileinfo: yes
![图片[4]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117091255601.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
这里是开启了file-store 2.0版本,下面的1.0版本是关的,无需理会。
再往下看有一个配置,这里比较细节,也讲解一下,我们这里是关闭的。
![图片[5]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117062836918.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
- force-filestore(可以译为强制存储文件)
关闭上述选项意味着文件还原/文件提取只提告警的文件,如果开启了则全部文件都会进行还原。
#force-filestore: yes
因此,我们在这里需要配合告警规则来使用,同样是 /usr/local/etc/suricata/suricata.yaml文件中,大约第1883行
![图片[6]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117064100589-1024x478.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
我们在最后一行加上file/fancypig_file.rules,让它引用我们新建的这个文件中的规则 ,可以引用fancypig
目录下的全部.rules文件,这样通配的写法后续补充规则就简单一些了!
rule-files:
- suricata.rules
- fancypig/*.rules
然后,在/usr/local/var/lib/suricata/rules
下新建fancypig
目录
![图片[7]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117064308642.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
在fancypig
目录下,我们加入专门针对文件还原的规则(规则在下面的代码可以复制)
![图片[8]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117065102543.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
为了防止与官方的编号重复,导致suricata无法启动。
下面sid我重新写的,以日期和编号的方式进行命名的。为了防止与官方的编号重复,导致suricata无法启动
# Example rules for using the file handling and extraction functionality in Suricata.
#
# For storing files make sure you enable the "file" output.
# Also, make sure you read the comments that go with it in the suricata.yaml file.
# Alert on files with jpg or bmp extensions
alert http any any -> any any (msg:"FILEEXT JPG file claimed"; fileext:"jpg"; sid:2021122001; rev:1;)
alert http any any -> any any (msg:"FILEEXT BMP file claimed"; fileext:"bmp"; sid:2021122002; rev:1;)
# Store all files with jpg or pdf extension.
alert http any any -> any any (msg:"FILESTORE jpg"; flow:established,to_server; fileext:"jpg"; filestore; sid:2021122003; rev:1;)
alert http any any -> any any (msg:"FILESTORE pdf"; flow:established,to_server; fileext:"pdf"; filestore; sid:2021122004; rev:1;)
# Store all PDF files, regardless of their name.
alert http any any -> any any (msg:"FILEMAGIC pdf"; flow:established,to_server; filemagic:"PDF document"; filestore; sid:2021122005; rev:1;)
# Same for JPEG's.
alert http any any -> any any (msg:"FILEMAGIC jpg(1)"; flow:established,to_server; filemagic:"JPEG image data"; filestore; sid:2021122006; rev:1;)
alert http any any -> any any (msg:"FILEMAGIC jpg(2)"; flow:established,to_server; filemagic:"JFIF"; filestore; sid:2021122007; rev:1;)
# Unually short file
alert http any any -> any any (msg:"FILEMAGIC short"; flow:established,to_server; filemagic:"very short file (no magic)"; filestore; sid:2021122008; rev:1;)
# Simply store all files we encounter, no alerts.
alert http any any -> any any (msg:"FILE store all"; filestore; noalert; sid:2021122009; rev:1;)
# Store all JPG files, don't alert.
alert http any any -> any any (msg:"FILE magic"; filemagic:"JFIF"; filestore; noalert; sid:2021122010; rev:1;)
alert http any any -> any any (msg:"FILE magic"; filemagic:"GIF"; filestore; noalert; sid:2021122011; rev:1;)
alert http any any -> any any (msg:"FILE magic"; filemagic:"PNG"; filestore; noalert; sid:2021122012; rev:1;)
# Store all Windows executables
alert http any any -> any any (msg:"FILE magic -- windows"; flow:established,to_client; filemagic:"executable for MS Windows"; filestore; sid:2021122013; rev:1;)
# Alert on PNG with 1x1 pixels (tracking)
alert http any any -> any any (msg:"FILE tracking PNG (1x1 pixel) (1)"; filemagic:"PNG image data, 1 x 1,"; sid:2021122014; rev:1;)
alert http any any -> any any (msg:"FILE tracking PNG (1x1 pixel) (2)"; filemagic:"PNG image data, 1 x 1|00|"; sid:2021122015; rev:1;)
# Alert on GIF with 1x1 pixels (tracking)
#The pattern matches on |00| which is the end of the magic buffer, this way we won't match on 1 x 128.
alert http any any -> any any (msg:"FILE tracking GIF (1x1 pixel)"; filemagic:"GIF image data, version 89a, 1 x 1|00|"; sid:2021122016; rev:1;)
# Alert and store pdf attachment but not pdf file
alert http any any -> any any (msg:"FILE pdf claimed, but not pdf"; flow:established,to_client; fileext:"pdf"; filemagic:!"PDF document"; filestore; sid:2021122017; rev:1;)
# Alert and store files over SMTP
alert smtp any any -> any any (msg:"File Found over SMTP and stored"; filestore; sid:2021122018; rev:1;)
# Alert and store files from black list checksum: md5 or sha1 or sha256
#alert http any any -> any any (msg:"Black list checksum match and extract MD5"; filemd5:fileextraction-chksum.list; filestore; sid:2021122019; rev:1;)
#alert http any any -> any any (msg:"Black list checksum match and extract SHA1"; filesha1:fileextraction-chksum.list; filestore; sid:2021122020; rev:1;)
#alert http any any -> any any (msg:"Black list checksum match and extract SHA256"; filesha256:fileextraction-chksum.list; filestore; sid:2021122021; rev:1;)
# Alert and store files over FTP
alert ftp-data any any -> any any (msg:"File Found within FTP and stored"; filestore; filename:"password"; ftpdata_command:stor; sid:2021122022; rev:1;)
# Alert and store files over SMB (with RUST activated)
alert smb any any -> any any (msg:"File Found over SMB and stored"; filestore; sid:2021122023; rev:1;)
# Alert and store files over NFS (with RUST activated)
alert nfs any any -> any any (msg:"File found within NFS and stored"; filestore; sid:2021122024; rev:1;)
# MP3文件
alert tcp any any -> any any (msg:"FILEEXT MP3 file claimed"; fileext:"mp3"; sid:2021122025; rev:1;)
# M4A文件
alert tcp any any -> any any (msg:"FILEEXT M4A file claimed"; fileext:"m4a"; sid:2021122026; rev:1;)
# MOV文件
alert tcp any any -> any any (msg:"FILEEXT MOV file claimed"; fileext:"mov"; sid:2021122027; rev:1;)
相关场景
实时流量测试
实验环境准备
- CenOs虚拟机
192.168.244.129
(后面简称服务器)搭建了web服务,准备了一个简单的页面可以上传图片、下载图片 - kali虚拟机
192.168.244.128
(后面简称客户端)用来上传图片、下载图片
以上两台机器均用于测试,我们最终的目的是能够通过192.168.244.131
这台Ubuntu虚拟机,将上面两台服务器传输的媒体文件进行还原!
上面配置都配置好之后,可以通过2种方式进行测试,第一种就是实时流量测试
启动suricata
- -c表示指定的配置文件
- -i表示要监听的网卡
- -l表示要输出的log日志路径
suricata -c /usr/local/etc/suricata/suricata.yaml -i ens33 -l /home/fancypig/Desktop/fancypig
输出完成后,你可以在log路径下看到完整的日志,在filestore文件中可以看到还原的文件及json文件,一般修改还原的文件后缀便可以查看相关文件内容。
![图片[9]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117082445882.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
我们启动后,主动的去浏览一下图片、音乐媒体
![图片[10]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117083949948-1024x792.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
![图片[11]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117082547680-1024x673.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
然后我们去看一下suricata中fast.log日志,看看有没有告警,发现有JPG、MP3文件还原
![图片[12]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117084444879-1024x331.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
然后,我们去看下filestore
文件夹,最笨的办法是用tree
命令将全部文件都显示
![图片[13]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117084119712.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
当然,这样并不智能,我们前面开启了info信息,这里每个文件会生成一个对应的json文件,那我们可以用下面的语句来快速筛选我们想要得到的内容,例如,我们想看还原的jpg文件
find -name '*.json' |xargs grep -l 'jpg'
这里,我们确认刚才的图片名称是pigpig.jpg
,我们可以直接用下面的命令
find -name '*.json' |xargs grep -l 'pigpig'
![图片[14]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117084232844.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
进入/home/fancypig/Desktop/fancypig/filestore/d5
目录下,我们看到在json文件旁边对应着还原的文件
![图片[15]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117084253183.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
我们可以打开看一下
![图片[16]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117084311737.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
发现完美还原!
你还可以通过.json文件查看这个流量的具体信息,这里可以看到源IP是192.168.244.129
(服务器),目的IP是192.168.244.128
(客户端)这里的url是/upload/pigpig.jpg
这条信息记录了192.168.244.129
(服务器)返回给192.168.244.128
(客户端)的图片
你可以理解成就是我们用192.168.244.128
(客户端)浏览了这张图片,然后流量就被我们的suricata捕获了,在我们的suricata的虚拟机192.168.244.131
下完成了还原,也可以叫做文件提取!
![图片[17]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/01/20220117084907473-1024x478.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
除此之外,您还可以自行探索一下,比方说还可以支持MP3、zip、exe其他各种格式的文件还原,无论是上传、下载,只要是在内网,都可以进行文件还原/文件提取!
骚操作延申:你甚至可以在公司将路由器的流量做一个镜像,然后接到对应网卡,开始监听!然后你就可以看到哪些同事上班的时候划水了,或者他们浏览了什么网站,看了什么图片,下了什么音乐,都可以完美用suricata的文件还原/文件提取完成!
离线Pcap包测试
第二种是导入pcap包,离线测试(下面的思路和上面的完全一致,这里是我用同事的电脑在某企业内网进行测试的)
启动suricata
- -c表示指定的配置文件
- -r表示要重放的pcap包(也可以填一个目录,可以读这个目录下的全部pcap包)
- -l表示要输出的log日志路径
suricata -c /etc/suricata/suricata.yaml -r /home/ubuntu/suricata-all/pcap/fancypig/media_test.pcap -l /home/ubuntu/suricata-all/pcap/log
这里,我们导入我之前抓的pcap包,并进行文件还原、告警展示。
运行结果,这里可以看到Alerts:994,代表发生了994次告警
![图片[18]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2021/12/20211220123110903-1024x495.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
我们进入/home/ubuntu/suricata-all/pcap/log,可以看到有五个文件,一个文件夹,下面详细介绍每个的作用
![图片[19]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2021/12/20211220123315899.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
- 文件介绍(刚才实时流量我们没有讲解,这里做一个详细的补充)
点击下方文件查看具体功能特性
文件夹 filestore
研究filestore中还原的mp3文件
在/home/ubuntu/suricata-all/log/filestore路径下
find -name '*.json' |xargs grep -l 'mp3'
![图片[26]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2021/12/20211220131505117.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
然后同样方式找到原文件,这里需要手动将原文件后缀修改加上mp3后缀,然后你就可以听到这些音乐了!
- 最新
- 最热
只看作者