25.1. nDPI¶
25.1.1. 安装¶
在使用nDPI之前,必须编译支持nDPI的Suricata,例如:
./configure --enable-ndpi --with-ndpi=/home/user/src/nDPI
然后确保在 suricata.yaml
中加载了插件:
plugins:
- /usr/lib/suricata/ndpi.so
在编译支持nDPI的Suricata后,默认配置文件中应该已经包含此配置。
有关nDPI的更多信息,请参阅 https://www.ntop.org/products/deep-packet-inspection/ndpi/。
25.1.2. 关键词¶
加载nDPI插件后,可以使用以下关键词:
ndpi-protocol
ndpi-risk
25.1.2.1. ndpi-protocol
¶
匹配nDPI检测到的第7层协议。
注意,使用 ndpi-protocol
的规则应通过 requires
检查 ndpi-protocol
关键词是否存在,例如::
requires: keyword ndpi-protocol
语法::
ndpi-protocol:[!]<protocol>;
其中 <protocol> 是nDPI检测到的应用协议之一。请查看 ndpiReader -H 获取完整列表。可以指定传输协议、应用协议或两者(用点分隔)。
示例::
ndpi-protocol:HTTP; ndpi-protocol:!TLS; ndpi-protocol:TLS.YouTube;
以下是一个匹配端口53上的TLS流量的规则示例:
alert tcp any any -> any 53 (msg:"TLS traffic over DNS standard port"; requires:keyword ndpi-protocol; ndpi-protocol:TLS; sid:1;)
25.1.2.2. ndpi-risk
¶
匹配nDPI检测到的流风险。风险是nDPI在数据包解析过程中检测到的潜在问题,包括:
非标准端口上的已知协议
二进制应用程序传输
自签名证书
可疑的DGA域名
恶意软件主机连接
以及其他许多风险...
此外,使用 ndpi-risk
关键词的规则应通过 requires
检查该关键词是否存在,例如::
requires: keyword ndpi-risk
语法::
ndpi-risk:[!]<risk>;
其中风险是nDPI支持的一个或多个(逗号分隔)风险代码(例如 NDPI_BINARY_APPLICATION_TRANSFER)。请查看 ndpiReader -H
获取完整列表。
示例::
ndpi-risk:NDPI_BINARY_APPLICATION_TRANSFER; ndpi-risk:NDPI_TLS_OBSOLETE_VERSION,NDPI_TLS_WEAK_CIPHER;
以下是一个匹配传输二进制应用程序的HTTP流量的规则示例:
alert tcp any any -> any any (msg:"Binary application transfer over HTTP"; requires:keyword ndpi-protocol, keyword ndpi-risk; ndpi-protocol:HTTP; ndpi-risk:NDPI_BINARY_APPLICATION_TRANSFER; sid:1;)