Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程

Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程

相关阅读

如果您还没有安装Suricata,您可以参考这篇文章

杂谈

Suricata去年就在捣鼓了,最近客户要用,因此又捣鼓了一下,本篇主要讲一下Suricata的文件还原/文件导出功能,在Suricata官方文档中该功能称为File Extraction,你也可以叫他是文件提取。通俗地讲,无论是实时流量还是离线流量pcap包中,Suricata都可以将其中传输的文件还原出来,比方说我通过FTP给服务器上传了一个php文件,它可以还原出来php文件内容;再比方说,我通过HTTP协议,在网页上下载了一个MP3的音乐,它可以还原出来MP3音乐文件。是不是听起来还蛮不错的!

通过这个功能(web界面本质上就是通过suricata的filestore功能实现,然后再写个前端,很简单!)

图片[1]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

我居然看到了办公室同事浏览的视频内容,有图有真相(手动滑稽)

图片[2]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

原来上班的时候还在想着怎么赚钱,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

然后调整下面的第456行

write-fileinfo: yes
图片[4]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

这里是开启了file-store 2.0版本,下面的1.0版本是关的,无需理会。

再往下看有一个配置,这里比较细节,也讲解一下,我们这里是关闭的

图片[5]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog
  • force-filestore(可以译为强制存储文件)

关闭上述选项意味着文件还原/文件提取只提告警的文件,如果开启了则全部文件都会进行还原

#force-filestore: yes 

因此,我们在这里需要配合告警规则来使用,同样是 /usr/local/etc/suricata/suricata.yaml文件中,大约第1883行

图片[6]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

我们在最后一行加上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

fancypig目录下,我们加入专门针对文件还原的规则(规则在下面的代码可以复制)

图片[8]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

为了防止与官方的编号重复,导致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

我们启动后,主动的去浏览一下图片、音乐媒体

图片[10]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog
图片[11]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

然后我们去看一下suricata中fast.log日志,看看有没有告警,发现有JPG、MP3文件还原

图片[12]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

然后,我们去看下filestore文件夹,最笨的办法是用tree命令将全部文件都显示

图片[13]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

当然,这样并不智能,我们前面开启了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

进入/home/fancypig/Desktop/fancypig/filestore/d5目录下,我们看到在json文件旁边对应着还原的文件

图片[15]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

我们可以打开看一下

图片[16]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

发现完美还原!

你还可以通过.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

除此之外,您还可以自行探索一下,比方说还可以支持MP3zipexe其他各种格式的文件还原,无论是上传、下载,只要是在内网,都可以进行文件还原/文件提取!

骚操作延申:你甚至可以在公司将路由器的流量做一个镜像,然后接到对应网卡,开始监听!然后你就可以看到哪些同事上班的时候划水了,或者他们浏览了什么网站,看了什么图片,下了什么音乐,都可以完美用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

我们进入/home/ubuntu/suricata-all/pcap/log,可以看到有五个文件,一个文件夹,下面详细介绍每个的作用

图片[19]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog
  • 文件介绍(刚才实时流量我们没有讲解,这里做一个详细的补充)

点击下方文件查看具体功能特性

文件夹 filestore

研究filestore中还原的mp3文件

/home/ubuntu/suricata-all/log/filestore路径下

find  -name '*.json' |xargs  grep -l 'mp3'
图片[26]-Suricata的实时流量、Pcap离线重放中的文件还原/文件提取功能教程-FancyPig's blog

然后同样方式找到原文件,这里需要手动将原文件后缀修改加上mp3后缀,然后你就可以听到这些音乐了!

© 版权声明
THE END
喜欢就支持一下吧
点赞30赞赏 分享
评论 共3条

请登录后发表评论