17. 文件提取

17.1. 建筑

文件提取代码在选定的协议解析器之上工作(请参阅下面支持的协议)。应用层解析器运行在流重组引擎和UDP流跟踪之上。

在HTTP的情况下,如果需要,解析器会处理请求和/或响应数据的解压和解压。

这意味着流引擎、重新组装引擎和应用层解析器中的设置都会影响文件提取的工作。

规则语言控制在磁盘上提取和存储哪些文件。

支持的协议包括:

  • HTTP

  • SMTP

  • FTP

  • NFS

  • SMB

  • HTTP2

17.2. 设置

stream.checksum_validation 控制流引擎是否拒绝具有无效校验和的数据包。通常是一个好主意,但网络接口执行校验和卸载,许多数据包似乎已损坏。默认情况下启用此设置,并可通过设置为“否”禁用此设置。请注意,每个接口都可以控制校验和处理,请参见示例配置中的“校验和检查”。

file-store.stream-depth 控制在流重组中完成的距离。超过此值将不进行重新组装。这意味着在该值之后,将不再跟踪HTTP会话。默认情况下,使用1兆字节的设置。0将其设置为“无限制”。如果设置为“否”,则禁用并流。重组。深度被考虑。非零值必须大于 stream.stream-depth 待使用。

libhtp.default-config.request-body-limit / libhtp.server-config.<config>.request-body-limit 控制跟踪多少HTTP请求正文以供检查 http_client_body 但也用关键字检查文件。值为0表示无限制。

libhtp.default-config.response-body-limit / libhtp.server-config.<config>.response-body-limit 与请求主体限制类似,只适用于HTTP响应主体。

17.3. 产量

17.3.1. 文件存储和EVE文件信息

有两个输出模块用于记录有关提取文件的信息。首先是 eve.files 这是一个 eve 记录的子记录器 fileinfo 记录。这些 fileinfo 记录提供有关文件的元数据,但不提供实际文件内容。

必须在 eve 输出:

- outputs:
    - eve-log:
      types:
          - files:
              force-magic: no
              force-hash: [md5,sha256]

EVE(可扩展事件格式) 有关使用 eve 输出。

另一个输出模块, file-store 将实际文件存储到磁盘。

这个 file-store 模块使用自己的日志目录(默认: filestore 在默认的日志目录中),并使用内容的sha256作为文件名来记录文件。然后将每个文件放在名为 00ff 其中目录共享文件名的前2个字符。例如,如果提取文件的sha256十六进制字符串以“f9bc6d…”开头,则我们将把该文件放在目录中 filestore/f9 .

可存储的文件大小取决于 file-store.stream-depth ,如果达到此值,则文件可能会被截断,并且可能无法完全存储。如果未启用, stream.reassembly.depth 会考虑的。

设置 file-store.stream-depth 到0允许存储整个文件;这里,0表示“不受限制”

file-store.stream-depth 将始终覆盖 stream.reassembly.depth 当使用filestore关键字时。但是,无法设置 file-store.stream-depth 值小于 stream.reassembly.depth . 小于此值的值将被忽略,并显示警告消息。

协议解析器,比如modbus,可以设置不同的存储深度值,并使用它而不是 file-store.stream-depth .

使用sha256作为文件名允许自动对提取的文件进行重复数据消除。但是,如果再次提取相同的文件,则会更新预先存在的文件的时间戳,类似于 touch 命令。

可选择地 fileinfo 可以将记录写入其自己的文件,该文件与它引用的文件共享相同的sha256。为了处理记录提取文件每次出现的元数据,这些文件名包括一些额外的字段以确保唯一性。当前格式为:

<SHA256>.<SECONDS>.<ID>.json

在哪里? <SECONDS> 是从触发存储文件关闭的数据包开始的秒数,并且 <ID> 是Suricata实例运行时的唯一ID。这些值不应该依赖于,只是用来确保唯一性。

这些 fileinfo 记录与 fileinfo 记录到 eve 输出。

文件存储(文件提取) 有关配置文件存储输出的详细信息。

注解

本节记录了 file-store . 从Suricata版本6起,文件存储的版本1已被删除。

17.4. 规则

如果没有适当的规则,提取将不会发生。最简单的规则是:

alert http any any -> any any (msg:"FILE store all"; filestore; sid:1; rev:1;)

这只需将所有文件存储到磁盘。

是否要存储具有PDF扩展名的所有文件?

alert http any any -> any any (msg:"FILE PDF file claimed"; fileext:"pdf"; filestore; sid:2; rev:1;)

还是所有实际的PDF文件?

alert http any any -> any any (msg:"FILE pdf detected"; filemagic:"PDF document"; filestore; sid:3; rev:1;)

或者只存储黑名单校验和MD5中的文件?

alert http any any -> any any (msg:"Black list checksum match and extract MD5"; filemd5:fileextraction-chksum.list; filestore; sid:4; rev:1;)

或者只存储黑名单校验和sha1中的文件?

alert http any any -> any any (msg:"Black list checksum match and extract SHA1"; filesha1:fileextraction-chksum.list; filestore; sid:5; rev:1;)

还是最终存储黑名单校验和sha256中的文件?

::

警报http any any->any(msg:“黑名单校验和匹配并提取SHA256”;filesha256:fileextraction-chksum.列表;文件存储;sid:6;版次:1;)

与Suricata下载捆绑在一起的是一个包含更多示例规则的文件。在档案室,转到 rules 目录并检查 files.rules 文件。

17.5. MD5型

Suricata可以实时计算文件的MD5校验和并记录它们。参见 存储MD5校验和 有关如何启用此功能的说明。

17.6. 更新文件存储配置