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;)