10.15. 文件关键词

Suricata提供了多个规则关键词用于匹配文件的各种属性。这些关键词依赖于正确配置的:doc:../file-extraction/file-extraction

10.15.1. file.data

file.data``粘性缓冲区用于匹配Suricata评估的流中出现的文件内容。可以与``file.data``结合使用的各种负载关键词包括(例如``startswithnocase``和``bsize)。

示例:

 alert smtp any any -> any any (msg:"smtp应用层file.data示例"; \
file.data; content:"示例文件内容"; sid:1; rev:1)

 alert http any any -> any any (msg:"http应用层file.data示例"; \
file.data; content:"示例文件内容"; sid:2; rev:1)

 alert http2 any any -> any any (msg:"http2应用层file.data示例"; \
file.data; content:"示例文件内容"; sid:3; rev:1;)

 alert nfs any any -> any any (msg:"nfs应用层file.data示例"; \
file.data; content:" "; sid:5; rev:1)

 alert ftp-data any any -> any any (msg:"ftp应用层file.data示例"; \
file.data; content:"示例文件内容"; sid:6; rev:1;)

 alert tcp any any -> any any (msg:"tcp file.data示例"; \
file.data; content:"示例文件内容"; sid:4; rev:1)

注意 file_data是旧式写法,但仍可使用。

10.15.2. file.name

file.name``是一个粘性缓冲区,用于检查Suricata评估的流中出现的文件名。可以与``file.name``结合使用的各种负载关键词包括(例如``startswithnocase``和``bsize)。

示例:

file.name; content:"示例文件名";

``file.name``支持多缓冲区匹配,参见:doc:multi-buffer-matching

注意 filename``仍可使用。``file.name``和``filename``的一个显著区别是``filename``默认假设``nocase。在下面的示例中,两条规则被视为相同。

示例:

filename:"示例文件名";

file.name; content:"示例文件名"; nocase;

10.15.3. fileext

``fileext``用于检查Suricata评估的流中出现的单个文件扩展名。

示例:

fileext:"pdf";

注意: ``fileext``不允许部分匹配。例如,如果一个PDF文件(.pdf)被Suricata签名检测到,但签名中使用了fileext:"pd";,则不会触发警报。

注意: fileext``默认假设``nocase。这意味着扩展名为.PDF的文件会被视为与扩展名为.pdf的文件相同。

注意: ``fileext``和``file.name``均可用于匹配文件扩展名。在下面的示例中,两条规则被视为相同。

示例:

fileext:"pdf";

file.name; content:".pdf"; nocase; endswith;

注意: 虽然``fileext``和``file.name``均可用于匹配文件扩展名,但``file.name``允许对文件扩展名进行部分匹配。以下规则会匹配扩展名为.pd和.pdf的文件。

示例:

file.name; content:".pd";

10.15.4. file.magic

匹配libmagic返回的文件信息。

示例:

file.magic; content:"MS Windows可执行文件";

注意 filemagic``仍可使用。``file.magic``和``filemagic``的唯一区别是``filemagic``默认假设``nocase。在下面的示例中,两条规则被视为相同。

示例:

filemagic:"MS Windows可执行文件";

file.magic; content:"MS Windows可执行文件"; nocase;

注意: Suricata目前使用其底层操作系统的libmagic版本/实现。不同版本和实现的libmagic返回的信息可能不同。此外,libmagic的版本和实现会影响Suricata的性能。更多关于Suricata和libmagic的信息可在此处找到: https://redmine.openinfosecfoundation.org/issues/437

``file.magic``支持多缓冲区匹配,参见:doc:multi-buffer-matching

10.15.5. filestore

如果签名匹配,则将文件存储到磁盘。

语法:

filestore:<方向>,<范围>;

方向可以是:

  • request/to_server: 在请求/到服务器方向存储文件

  • response/to_client: 在响应/到客户端方向存储文件

  • both: 存储两个方向

范围可以是:

  • file: 仅存储匹配的文件(用于filename、fileext、filemagic匹配)

  • tx: 存储匹配的HTTP事务中的所有文件

  • ssn/flow: 存储TCP会话/流中的所有文件。

如果省略方向和范围,方向将与规则相同,范围为每个文件。

10.15.6. filemd5

将文件的:ref:`MD5 <md5>`与MD5校验和列表进行匹配。

语法:

filemd5:[!]文件名;

文件名会扩展为包含规则目录。默认情况下会变为/etc/suricata/rules/文件名。使用感叹号进行否定匹配,允许白名单。

示例:

filemd5:md5黑名单;
filemd5:!md5白名单;

文件格式

文件格式简单。每行开头是一个十六进制表示的MD5。行中的其他信息会被忽略。

md5sum的输出是可接受的:

2f8d0355f0032c3e6311c6408d7c2dc2  util-path.c
b9cf5cf347a70e02fde975fc4e117760  util-pidfile.c
02aaa6c3f4dbae65f5889eeb8f2bbb8d  util-pool.c
dd5fc1ee7f2f96b5f12d1a854007a818  util-print.c

仅MD5也可以:

2f8d0355f0032c3e6311c6408d7c2dc2
b9cf5cf347a70e02fde975fc4e117760
02aaa6c3f4dbae65f5889eeb8f2bbb8d
dd5fc1ee7f2f96b5f12d1a854007a818

内存需求

每个MD5占用16字节内存。2000万个MD5占用约310 MiB内存。

另见: https://blog.inliniac.net/2012/06/09/suricata-md5-blacklisting/

10.15.7. filesha1

将文件的SHA1与SHA1校验和列表进行匹配。

语法:

filesha1:[!]文件名;

文件名会扩展为包含规则目录。默认情况下会变为/etc/suricata/rules/文件名。使用感叹号进行否定匹配,允许白名单。

示例:

filesha1:sha1黑名单;
filesha1:!sha1白名单;

文件格式

与md5文件格式相同。

10.15.8. filesha256

将文件的SHA256与SHA256校验和列表进行匹配。

语法:

filesha256:[!]文件名;

文件名会扩展为包含规则目录。默认情况下会变为/etc/suricata/rules/文件名。使用感叹号进行否定匹配,允许白名单。

示例:

filesha256:sha256黑名单;
filesha256:!sha256白名单;

文件格式

与md5文件格式相同。

10.15.9. filesize

匹配传输中的文件大小。

filesize使用:ref:无符号64位整数 <rules-integer-keywords>

语法:

filesize:<>;

可能的单位是KB、MB和GB,无单位时默认为字节。

示例:

filesize:100; # 精确100字节
filesize:100<>200; # 大于100且小于200
filesize:>100MB; # 大于100兆字节
filesize:<100MB; # 小于100兆字节

注意: 对于因丢包或stream.reassembly.depth限制而未完全跟踪的文件,仅检查"大于"条件。这是因为Suricata可以知道文件大于某个值(已经看到部分内容),但无法知道最终大小是否在范围内、等于某个值或小于某个值。