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";
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使用";
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 (
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 (
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";
sid: 1;)alert ftp any any -> any any (
sid: 1;)alert ftp any any -> any any (
sid: 2;)alert ftp any any -> any any (
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 (
sid: 1;)以下示例展示了一个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无法保证这些匹配来自同一个响应。
规则示例:
alert ftp any any -> any any (ftp.reply; content:"Opening BINARY mode data connection for temp.";
sid: 1;)alert ftp any any -> any any (
sid: 2;)alert ftp any any -> any any ( ftp.reply; content: "Transfer complete.";
sid: 3;)10.26.7. ftp.dynamic_port¶
该关键词匹配FTP会话期间通过以下命令协商的动态端口:
IPv4:
PORT
和EPRT
IPv6:
PASV
和EPSV
语法:
ftp.dynamic_port: <port-spec>;
port-spec
可以是以下形式之一:
>
(大于)<
(小于)>=
(大于等于)<=
(小于等于)arg1-arg2
(范围区间)
规则示例:
alert ftp any any -> any any (
sid: 1;)以下规则也会对端口 59914
发出警报:
alert ftp any any -> any any (
sid: 1;)alert ftp any any -> any any (
sid: 1;)结合 ftp.dynamic_port
与 ftp.command
的规则示例:
alert ftp any any -> any any (ftp.command; content: "PORT";
sid: 1;)alert ftp any any -> any any (ftp.command; content: "EPSV";
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 (
sid: 1;)alert ftp any any -> any any (
sid: 1;)结合 ftp.command
与 ftp.mode
的规则示例:
alert ftp any any -> any any (ftp.command; content: "PORT";
sid:1;)alert ftp any any -> any any (ftp.command; content: "PASV";
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 (
sid: 1;)alert ftp any any -> any any (
sid: 1;)alert ftp any any -> any any (
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 (
sid: 1;)alert ftp any any -> any any (
sid: 1;)