文件关键词 ============= Suricata提供了多个规则关键词用于匹配文件的各种属性。这些关键词依赖于正确配置的:doc:`../file-extraction/file-extraction`。 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是旧式写法,但仍可使用。 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; 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"; 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`。 filestore --------- 如果签名匹配,则将文件存储到磁盘。 语法:: filestore:<方向>,<范围>; 方向可以是: * request/to_server: 在请求/到服务器方向存储文件 * response/to_client: 在响应/到客户端方向存储文件 * both: 存储两个方向 范围可以是: * file: 仅存储匹配的文件(用于filename、fileext、filemagic匹配) * tx: 存储匹配的HTTP事务中的所有文件 * ssn/flow: 存储TCP会话/流中的所有文件。 如果省略方向和范围,方向将与规则相同,范围为每个文件。 filemd5 ------- 将文件的:ref:`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/ filesha1 -------- 将文件的SHA1与SHA1校验和列表进行匹配。 语法:: filesha1:[!]文件名; 文件名会扩展为包含规则目录。默认情况下会变为/etc/suricata/rules/文件名。使用感叹号进行否定匹配,允许白名单。 示例:: filesha1:sha1黑名单; filesha1:!sha1白名单; *文件格式* 与md5文件格式相同。 filesha256 ---------- 将文件的SHA256与SHA256校验和列表进行匹配。 语法:: filesha256:[!]文件名; 文件名会扩展为包含规则目录。默认情况下会变为/etc/suricata/rules/文件名。使用感叹号进行否定匹配,允许白名单。 示例:: filesha256:sha256黑名单; filesha256:!sha256白名单; *文件格式* 与md5文件格式相同。 filesize -------- 匹配传输中的文件大小。 filesize使用:ref:`无符号64位整数 `。 语法:: filesize:<值>; 可能的单位是KB、MB和GB,无单位时默认为字节。 示例:: filesize:100; # 精确100字节 filesize:100<>200; # 大于100且小于200 filesize:>100MB; # 大于100兆字节 filesize:<100MB; # 小于100兆字节 **注意**: 对于因丢包或stream.reassembly.depth限制而未完全跟踪的文件,仅检查"大于"条件。这是因为Suricata可以知道文件大于某个值(已经看到部分内容),但无法知道最终大小是否在范围内、等于某个值或小于某个值。