10.26. FTP/FTP-DATA 关键词

10.26.1. ftpdata_command

基于FTP命令通道使用的命令过滤FTP数据通道。 当前支持的命令包括RETR(获取文件)和STOR(上传文件)。

语法:

ftpdata_command:(retr|stor)

规则示例:

alert ftp-data any any -> any any (msg:"FTP存储密码"; filestore; filename:"password"; ftpdata_command:stor; sid:3; rev:1;)

10.26.2. ftpbounce

检测FTP反弹攻击。

语法:

ftpbounce

10.26.3. file.name

file.name 关键词可用于FTP应用层。

规则示例:

alert ftp-data any any -> any any (msg:"FTP file.name使用"; file.name; content:"file.txt"; classtype:bad-unknown; sid:1; rev:1;)

关于 file.name 关键词的更多信息,请参阅 文件关键词

10.26.4. ftp.command

该关键词匹配FTP客户端请求中的命令名称。ftp.command 是粘性缓冲区,可用作快速模式。

语法:

ftp.command; content: <command>;

规则示例:

alert ftp any any -> any any (ftp.command; content:"PASS"; sid: 1;)

命令示例:

  • USER

  • PASS

  • PORT

  • EPRT

  • PASV

  • RETR

10.26.5. ftp.command_data

该关键词匹配FTP客户端请求中的命令数据。 ftp.command_data 是粘性缓冲区,可用作快速模式。

语法:

ftp.command_data; content: <command_data>;

规则示例:

alert ftp any any -> any any (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命令及数据的规则示例:

alert ftp any any -> any any (ftp.command; content: "USER"; ftp.command_data; content:"anonymous"; sid: 1;)

alert ftp any any -> any any (ftp.command_data; content:"anonymous"; sid: 1;)

alert ftp any any -> any any (ftp.command_data; content:"temp.txt"; sid: 2;)

alert ftp any any -> any any (ftp.command_data; content:"192,168,0,13,234,10"; sid: 3;)

10.26.6. ftp.completion_code

该关键词匹配FTP完成码字符串。注意一个FTP命令可能返回多个响应字符串,因此需要检查多个完成码值。ftp.completion_code 是粘性缓冲区,可用作快速模式。不要在匹配的 content 中包含响应字符串(参见示例)。

语法:

ftp.completion_code; content: <quoted-completion-code>;

规则示例:

alert ftp any any -> any any (ftp.completion_code; content:"226"; sid: 1;)

以下示例展示了一个FTP命令(RETR)及其包含多个响应字符串的回复:

RETR temp.txt
150 Opening BINARY mode data connection for temp.txt (1164 bytes).
226 Transfer complete.

由于存在多个完成码和响应,规则可以同时匹配 ftp.replyftp.completion_code。但Suricata无法保证这些匹配来自同一个响应。

规则示例:

alert ftp any any -> any any (ftp.reply; content:"Opening BINARY mode data connection for temp."; ftp.completion_code; content: "150"; sid: 1;)

alert ftp any any -> any any (ftp.completion_code; content: "226"; sid: 2;)

alert ftp any any -> any any ( ftp.reply; content: "Transfer complete."; ftp.completion_code; content: "226"; sid: 3;)

10.26.7. ftp.dynamic_port

该关键词匹配FTP会话期间通过以下命令协商的动态端口:

  • IPv4: PORTEPRT

  • IPv6: PASVEPSV

语法:

ftp.dynamic_port: <port-spec>;

port-spec 可以是以下形式之一:

  • > (大于)

  • < (小于)

  • >= (大于等于)

  • <= (小于等于)

  • arg1-arg2 (范围区间)

规则示例:

alert ftp any any -> any any (ftp.dynamic_port: 59914; sid: 1;)

以下规则也会对端口 59914 发出警报:

alert ftp any any -> any any (ftp.dynamic_port: 59913-59915; sid: 1;)

alert ftp any any -> any any (ftp.dynamic_port: =59914; sid: 1;)

结合 ftp.dynamic_portftp.command 的规则示例:

alert ftp any any -> any any (ftp.command; content: "PORT"; ftp.dynamic_port: 59914; sid: 1;)

alert ftp any any -> any any (ftp.command; content: "EPSV"; ftp.dynamic_port: 58612; sid: 1;)

10.26.8. ftp.mode

该关键词匹配FTP会话是主动模式还是被动模式。 在 active 模式下,服务器建立数据通道。 在 passive 模式下,客户端建立数据通道。主动 模式会话通过 PORT (IPv6使用 EPRT)命令建立; 被动模式会话使用 PASV (IPv6使用 EPSV)。

语法:

ftp.mode: active|passive;

规则示例:

alert ftp any any -> any any (ftp.mode: active; sid: 1;)

alert ftp any any -> any any (ftp.mode: passive; sid: 1;)

结合 ftp.commandftp.mode 的规则示例:

alert ftp any any -> any any (ftp.command; content: "PORT"; ftp.mode: active; sid:1;)

alert ftp any any -> any any (ftp.command; content: "PASV"; ftp.mode: passive; sid:1;)

10.26.9. ftp.reply

该关键词匹配FTP响应字符串。注意一个FTP命令可能返回多个响应字符串。ftp.reply 是粘性缓冲区,可用作快速模式。不要在匹配的 content 中包含完成码(参见示例)。

语法:

ftp.reply; content: <reply-string>;

以下示例展示了一个FTP命令(RETR)及其包含多个响应字符串的回复:

RETR temp.txt
150 Opening BINARY mode data connection for temp.txt (1164 bytes).
226 Transfer complete.

规则示例:

alert ftp any any -> any any (ftp.reply; content:"Please specify the password."; sid: 1;)

alert ftp any any -> any any (ftp.reply; content:"Opening BINARY mode data connection for temp."; sid: 1;)

alert ftp any any -> any any (ftp.reply; content:"Transfer complete."; sid: 2;)

10.26.10. ftp.reply_received

该关键词匹配是否接收到FTP响应字符串。EVE日志中 FTP事件类型包含名为 reply_received 的字段。使用此 关键词可在收到(或未收到)回复时发出警报。ftp.reply_received 不是粘性缓冲区,并使用不同的语法表达其值。

语法:

ftp.reply_received: yes|on|true|1|no|off|false|0;

规则示例:

alert ftp any any -> any any (ftp.reply_received: yes; sid: 1;)

alert ftp any any -> any any (ftp.reply_received: no; sid: 1;)