FTP/FTP-DATA 关键词 ===================== .. role:: example-rule-options ftpdata_command --------------- 基于FTP命令通道使用的命令过滤FTP数据通道。 当前支持的命令包括RETR(获取文件)和STOR(上传文件)。 语法:: ftpdata_command:(retr|stor) 规则示例: .. container:: example-rule alert ftp-data any any -> any any (msg:"FTP存储密码"; \ filestore; filename:"password"; \ :example-rule-options:`ftpdata_command:stor;` sid:3; rev:1;) ftpbounce --------- 检测FTP反弹攻击。 语法:: ftpbounce file.name --------- ``file.name`` 关键词可用于FTP应用层。 规则示例: .. container:: example-rule alert ftp-data any any -> any any (msg:"FTP file.name使用"; \ :example-rule-options:`file.name; content:"file.txt";` \ classtype:bad-unknown; sid:1; rev:1;) 关于 ``file.name`` 关键词的更多信息,请参阅 :doc:`file-keywords`。 ftp.command ----------- 该关键词匹配FTP客户端请求中的命令名称。``ftp.command`` 是粘性缓冲区,可用作快速模式。 语法:: ftp.command; content: ; 规则示例: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.command; content:"PASS";` sid: 1;) 命令示例: * USER * PASS * PORT * EPRT * PASV * RETR ftp.command_data ---------------- 该关键词匹配FTP客户端请求中的命令数据。 ``ftp.command_data`` 是粘性缓冲区,可用作快速模式。 语法:: ftp.command_data; content: ; 规则示例: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.command_data; content:"anonymous";` sid: 1;) ``ftp.command_data`` 匹配与FTP命令关联的数据。参考以下FTP命令示例:: USER anonymous RETR temp.txt PORT 192,168,0,13,234,10 针对上述FTP命令及数据的规则示例: .. container:: example-rule alert ftp any any -> any any (ftp.command; content: "USER"; :example-rule-options:`ftp.command_data; content:"anonymous";` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.command_data; content:"anonymous";` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.command_data; content:"temp.txt";` sid: 2;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.command_data; content:"192,168,0,13,234,10";` sid: 3;) ftp.completion_code ------------------- 该关键词匹配FTP完成码字符串。注意一个FTP命令可能返回多个响应字符串,因此需要检查多个完成码值。``ftp.completion_code`` 是粘性缓冲区,可用作快速模式。不要在匹配的 `content` 中包含响应字符串(参见示例)。 语法:: ftp.completion_code; content: ; 规则示例: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.completion_code; content:"226";` sid: 1;) .. 注意 :: FTP命令可能返回多个响应字符串。每个 ``ftp.completion_code`` 关键词应指定单个完成码。 以下示例展示了一个FTP命令(``RETR``)及其包含多个响应字符串的回复:: RETR temp.txt 150 Opening BINARY mode data connection for temp.txt (1164 bytes). 226 Transfer complete. 由于存在多个完成码和响应,规则可以同时匹配 ``ftp.reply`` 和 ``ftp.completion_code``。但Suricata无法保证这些匹配来自同一个响应。 规则示例: .. container:: example-rule alert ftp any any -> any any (ftp.reply; content:"Opening BINARY mode data connection for temp."; \ :example-rule-options:`ftp.completion_code; content: "150";` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.completion_code; content: "226";` sid: 2;) .. container:: example-rule alert ftp any any -> any any ( ftp.reply; content: "Transfer complete."; :example-rule-options:`ftp.completion_code; content: "226";` sid: 3;) ftp.dynamic_port ---------------- 该关键词匹配FTP会话期间通过以下命令协商的动态端口: * IPv4: ``PORT`` 和 ``EPRT`` * IPv6: ``PASV`` 和 ``EPSV`` 语法:: ftp.dynamic_port: ; ``port-spec`` 可以是以下形式之一: * ``>`` (大于) * ``<`` (小于) * ``>=`` (大于等于) * ``<=`` (小于等于) * ``arg1-arg2`` (范围区间) 规则示例: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.dynamic_port: 59914;` sid: 1;) 以下规则也会对端口 ``59914`` 发出警报: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.dynamic_port: 59913-59915;` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.dynamic_port: =59914;` sid: 1;) 结合 ``ftp.dynamic_port`` 与 ``ftp.command`` 的规则示例: .. container:: example-rule alert ftp any any -> any any (ftp.command; content: "PORT"; :example-rule-options:`ftp.dynamic_port: 59914;` sid: 1;) .. container:: example-rule alert ftp any any -> any any (ftp.command; content: "EPSV"; :example-rule-options:`ftp.dynamic_port: 58612;` sid: 1;) ftp.mode -------- 该关键词匹配FTP会话是主动模式还是被动模式。 在 `active` 模式下,服务器建立数据通道。 在 `passive` 模式下,客户端建立数据通道。主动 模式会话通过 ``PORT`` (IPv6使用 ``EPRT``)命令建立; 被动模式会话使用 ``PASV`` (IPv6使用 ``EPSV``)。 语法:: ftp.mode: active|passive; 规则示例: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.mode: active;` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.mode: passive;` sid: 1;) 结合 ``ftp.command`` 与 ``ftp.mode`` 的规则示例: .. container:: example-rule alert ftp any any -> any any (ftp.command; content: "PORT"; :example-rule-options:`ftp.mode: active;` sid:1;) .. container:: example-rule alert ftp any any -> any any (ftp.command; content: "PASV"; :example-rule-options:`ftp.mode: passive;` sid:1;) ftp.reply --------- 该关键词匹配FTP响应字符串。注意一个FTP命令可能返回多个响应字符串。``ftp.reply`` 是粘性缓冲区,可用作快速模式。不要在匹配的 `content` 中包含完成码(参见示例)。 语法:: ftp.reply; content: ; .. 注意 :: FTP命令可能返回多个响应字符串。每个 ``ftp.reply`` 关键词应指定单个响应。 以下示例展示了一个FTP命令(``RETR``)及其包含多个响应字符串的回复:: RETR temp.txt 150 Opening BINARY mode data connection for temp.txt (1164 bytes). 226 Transfer complete. 规则示例: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.reply; content:"Please specify the password.";` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.reply; content:"Opening BINARY mode data connection for temp.";` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.reply; content:"Transfer complete.";` sid: 2;) ftp.reply_received ------------------ 该关键词匹配是否接收到FTP响应字符串。EVE日志中 FTP事件类型包含名为 ``reply_received`` 的字段。使用此 关键词可在收到(或未收到)回复时发出警报。``ftp.reply_received`` 不是粘性缓冲区,并使用不同的语法表达其值。 .. 注意 :: 匹配值无需使用引号,例如使用yes而非"yes"。 语法:: ftp.reply_received: yes|on|true|1|no|off|false|0; 规则示例: .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.reply_received: yes;` sid: 1;) .. container:: example-rule alert ftp any any -> any any (:example-rule-options:`ftp.reply_received: no;` sid: 1;)