10.15. 文件关键词¶
Suricata提供了多个规则关键词用于匹配文件的各种属性。这些关键词依赖于正确配置的:doc:../file-extraction/file-extraction。
10.15.1. file.data¶
file.data``粘性缓冲区用于匹配Suricata评估的流中出现的文件内容。可以与``file.data``结合使用的各种负载关键词包括(例如``startswith
、nocase``和``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``结合使用的各种负载关键词包括(例如``startswith
、nocase``和``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可以知道文件大于某个值(已经看到部分内容),但无法知道最终大小是否在范围内、等于某个值或小于某个值。