将自定义特征码包上载到 NSX IDS/IPS 引擎。

上载自定义特征码时需遵循的注意事项:

  • NSX IDS/IPS 部署自定义特征码时,请确保其中仅包含与 NSX 兼容的受支持关键字。请参见下面的受支持关键字列表。

  • 确认您的特征码中仅使用了受支持的地址组和端口:

    address-groups:
    HOME_NET: "any"    EXTERNAL_NET: "any"    HOME_NETWORK: "[10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fd00::/8]"    HTTP_SERVERS: "$HOME_NET"    SMTP_SERVERS: "$HOME_NET"    SQL_SERVERS: "$HOME_NET"    DNS_SERVERS: "$HOME_NET"    TELNET_SERVERS: "$HOME_NET"    AIM_SERVERS: "$EXTERNAL_NET"    DC_SERVERS: "$HOME_NET"    DNP3_SERVER: "$HOME_NET"    DNP3_CLIENT: "$HOME_NET"    MODBUS_CLIENT: "$HOME_NET"    MODBUS_SERVER: "$HOME_NET"    ENIP_CLIENT: "$HOME_NET"    ENIP_SERVER: "$HOME_NET"
    
    port-groups:
    HTTP_PORTS: "any"    SHELLCODE_PORTS: "!80"    ORACLE_PORTS: 1521    SSH_PORTS: 22    DNP3_PORTS: 20000    MODBUS_PORTS: 502    FILE_DATA_PORTS: "[$HTTP_PORTS,110,143]"    FTP_PORTS: 21    VXLAN_PORTS: "4789"
  • 确认要上载的自定义特征码包的格式正确;它必须具有 .zip 扩展名(例如,sample_rules.zip)。请注意,由于 NSX 不会跟踪自定义特征码的依赖关系,请确保在发布过程中包含所有从属特征码。

  • 如果发布了有效的自定义特征码,且随后用仅包含无效自定义特征码的新包覆盖了该自定义特征码,则 NSX 不允许您发布新包。NSX 将显示以下错误消息:“仅允许覆盖有效/警告特征码”(Overridden signature is only allowed for VALID/WARNING signature)。此外,之前更新为使用旧包中特征码的任何 IDPS 配置文件都将变为无效,因为新包中不包含这些特征码。如果新包中也包含属于旧包一部分的自定义特征码,则这些特征码将显示为现有特征码,并且它们仍是现有配置文件的有效特征码。

  • 确保所有自定义特征码都使用受支持的关键字。下面是受支持的关键字列表:

    sid

    设置规则 ID。

    priority

    首先会检查优先级较高的规则。

    rev

    设置规则版本。

    classtype

    有关规则和警示分类的信息。

    app-layer-protocol

    匹配检测到的应用程序层协议。

    tcp.ack

    检查特定 TCP 确认号。

    tcp.seq

    检查特定 TCP 序列号。

    tcp.window

    检查特定 TCP 窗口大小。

    ipopts

    检查是否设置了特定 IP 选项。

    tcp.flags

    检测在 TCP 标头中设置的标记。

    fragbits

    检查是否在 IP 标头中设置了分段和预留位。

    fragoffset

    匹配 IP 分段偏移字段的特定十进制值。

    ttl

    检查特定 IP 活动时间值。

    tos

    匹配 IP 标头 TOS 字段的特定十进制值。

    itype

    匹配特定 ICMP 类型。

    icode

    匹配特定 ICMP ID 值。

    icmp_id

    检查 ICMP ID。

    icmp_seq

    检查 ICMP 序列号。

    dsize

    匹配数据包负载大小。

    flow

    匹配流量的方向和状态。

    threshold

    控制规则的警示频率。

    metadata

    用于日志记录。

    reference

    定向到可找到规则相关信息的位置。

    tag

    定义标记。

    msg

    有关规则和可能警示的信息。

    content

    匹配负载内容。

    uricontent

    用于匹配请求 URI 缓冲区的旧版关键字。

    pcre

    匹配正则表达式。

    depth

    指定将检查负载开头的多少个字节。

    startswith

    模式必须位于缓冲区的起始位置(与“depth:<pattern len>”相同)。

    endswith

    确保先前的内容与缓冲区末尾的内容完全匹配。

    distance

    指示此内容关键字与其前面的内容之间的关系。

    within

    指示此内容匹配项必须在前一个内容关键字匹配项的一定距离内。

    abs_offset

    指定从流中的哪个字节开始查找匹配项。

    offset

    指定从负载中的哪个字节开始查找匹配项。

    replace

    仅在 IPS 模式下使用。

    nocase

    将内容匹配项修改为不区分大小写。

    fast_pattern

    强制在多模式匹配器中使用前面的内容。

    rawbytes

    包含在内,以便与使用它的特征码兼容。

    byte_test

    提取特定 <偏移量> 处的 <字节数>,并对 <测试值> 中的值执行 <运算符> 所选的操作。

    byte_jump

    可以选择 <偏移量> 处的 <字节数>,并将检测指针移至该位置。

    sameip

    检查源的 IP 地址是否与目标的 IP 地址相同。

    geoip

    匹配网络流量的源 IP 地址和/或目标 IP 地址,并了解 IP 地址属于哪个国家/地区。

    ip_proto

    匹配数据包标头中的 IP 协议。

    ftpbounce

    检测 FTP 反弹攻击。

    isdataat

    检查负载的特定部分中是否仍存在数据。

    id

    匹配特定 IP ID 值。

    rpc

    匹配 RPC 过程号和 RPC 版本。

    flowvar

    设置流量变量。

    flowint

    对按流整数执行操作。

    pktvar

    定义数据包变量。

    noalert

    规则不会生成任何警示。

    flowbits

    对流量标记执行操作。

    hostbits

    对主机标记执行操作。

    ipv4-csum

    检查 IPv4 校验和错误。

    tcpv4-csum

    检查 TCPv4 校验和错误。

    tcpv6-csum

    检查 TCPv6 校验和错误。

    udpv4-csum

    检查 UDPv4 校验和错误。

    udpv6-csum

    检查 UDPv6 校验和错误。

    icmpv4-csum

    检查 ICMPv4 校验和错误。

    icmpv6-csum

    检查 ICMPv6 校验和错误。

    stream_size

    匹配流的字节数。

    detection_filter

    达到阈值后每次匹配时出现警示。

    dataset

    将粘滞缓冲区与数据集进行匹配(实验)。

    datarep

    对数据集执行操作(实验)。

    decode-event

    解码单个数据包时检测到的值和条件。

    gid

    为不同的特征码组指定不同的 ID 值。

    nfq_set_mark

    在 iptables 规则中使用 NFQUEUE,以将数据包发送到 Suricata。

    bsize

    匹配缓冲区的长度。

    tls.version

    匹配 TLS/SSL 版本。

    tls.subject

    匹配 TLS/SSL 证书主体字段。

    tls.issuerdn

    匹配 TLS/SSL 证书颁发者 DN 字段。

    tls_cert_notbefore

    匹配 TLS 证书 notBefore 字段。

    tls_cert_notafter

    匹配 TLS 证书 notAfter 字段。

    tls_cert_expired

    匹配过期的 TLS 证书。

    tls_cert_valid

    匹配有效的 TLS 证书。

    tls.fingerprint

    匹配 TLS/SSL 证书 SHA1 指纹。

    tls_store

    将 TLS/SSL 证书存储在磁盘上。

    http_cookie

    仅匹配 HTTP Cookie 缓冲区的内容修饰符。

    http.cookie

    匹配 HTTP Cookie/Set-Cookie 缓冲区的粘滞缓冲区。

    http_method

    仅匹配 HTTP 方法缓冲区的内容修饰符。

    http.method

    专门匹配且仅匹配 HTTP 方法缓冲区的粘滞缓冲区。

    http.protocol

    定义 http_protocol 粘滞缓冲区。

    http.start

    定义 http_start 粘滞缓冲区。

    urilen

    匹配 HTTP URI 的长度。

    http_client_body

    仅匹配 HTTP 请求正文的内容修饰符。

    http.request_body

    匹配 HTTP 请求正文缓冲区的粘滞缓冲区。

    http_server_body

    匹配 HTTP 响应正文的内容修饰符。

    http.response_body

    匹配 HTTP 响应正文缓冲区的粘滞缓冲区。

    http_header

    仅匹配 HTTP 标头缓冲区的内容修饰符。

    http.header

    匹配规范化 HTTP 标头缓冲区的粘滞缓冲区。

    http.header_names

    定义 http_header_names 粘滞缓冲区。

    http.accept

    为 http accept 标头定义 http.accept 粘滞缓冲区。

    http.accept_lang

    为 http accept language 标头定义 http.accept_lang 粘滞缓冲区。

    http.accept_enc

    为 http accept encoding 标头定义 http.accept_enc 粘滞缓冲区。

    http.connection

    为 http connection 标头定义 http.connection 粘滞缓冲区。

    http.content_len

    为 http content length 标头定义 http.content_len 粘滞缓冲区。

    http.content_type

    为 http content type 标头定义 http.content_type 粘滞缓冲区。

    http.location

    为 http location 标头定义 http.location 粘滞缓冲区。

    http.server

    为 http server 标头定义 http.server 粘滞缓冲区。

    http.referer

    为 http referer 标头定义 http.referer 粘滞缓冲区。

    http_raw_header

    匹配原始 HTTP 标头缓冲区的内容修饰符。

    http.header.raw

    匹配原始 HTTP 标头缓冲区的粘滞缓冲区。

    http_uri

    专门匹配且仅匹配 HTTP URI 缓冲区的内容修饰符。

    http.uri

    专门匹配且仅匹配规范化 HTTP URI 缓冲区的粘滞缓冲区。

    http.uri.raw

    专门匹配且仅匹配原始 HTTP URI 缓冲区的粘滞缓冲区。

    http_raw_uri

    匹配原始 HTTP URI 的内容修饰符。

    http_stat_msg

    匹配 HTTP 统计消息缓冲区的内容修饰符。

    http.stat_msg

    匹配 HTTP 响应状态消息的粘滞缓冲区。

    http_stat_code

    仅匹配 HTTP 统计代码缓冲区的内容修饰符。

    http.stat_code

    仅匹配 HTTP 统计代码缓冲区的粘滞缓冲区。

    http_user_agent

    仅匹配 HTTP User-Agent 标头的内容修饰符。

    http.user_agent

    专门匹配且仅匹配 HTTP 用户代理缓冲区的粘滞缓冲区。

    http_host

    匹配 HTTP 主机名的内容修饰符。

    http.host

    匹配 HTTP 主机缓冲区的粘滞缓冲区。

    http_raw_host

    匹配 HTTP host 标头或 HTTP URI 中原始主机名的内容修饰符。

    http.host.raw

    匹配 HTTP host 标头或 HTTP URI 中原始主机名的粘滞缓冲区。

    http.request_line

    匹配 HTTP 请求行的粘滞缓冲区。

    http.response_line

    仅匹配 HTTP 响应行的内容修饰符。

    nfs_procedure

    匹配 NFS 过程的粘滞缓冲区。

    nfs.version

    匹配 NFS 版本的粘滞缓冲区。

    ssh.proto

    匹配 SSH 协议的粘滞缓冲区。

    ssh.protoversion

    匹配 SSH 协议版本的粘滞缓冲区。

    ssh.software

    匹配 SSH 软件的粘滞缓冲区。

    ssh.softwareversion

    匹配 SSH 软件字符串的粘滞缓冲区。

    ssl_version

    匹配 SSL/TLS 记录版本的粘滞缓冲区。

    ssl_state

    匹配 SSL 连接状态的粘滞缓冲区。

    byte_extract

    提取特定 <偏移量> 处的 <字节数>,并将其存储到 <变量名称> 中。

    file.data

    使内容关键字与文件数据匹配。

    pkt_data

    将检测指针重置为数据包负载的开头。

    app-layer-event

    匹配应用程序层解析器和协议检测引擎生成的事件。

    dcerpc.iface

    匹配 DCERPC 标头中的接口 UUID 值。

    dcerpc.opnum

    匹配 DCERPC 标头的接口中的一个或多个操作编号和/或操作编号范围。

    dcerpc.stub_data

    匹配给定 DCERPC 数据包中的存根数据。这是一个“粘滞缓冲区”。

    smb.named_pipe

    匹配树连接中的 SMB 命名管道的粘滞缓冲区。

    smb.share

    匹配树连接中的 SMB 共享名称的粘滞缓冲区。

    asn1

    是用于构造和描述数据的标准表示法。

    engine-event

    Suricata 入侵检测系统中检测事件的一条记录。

    stream-event

    用于匹配 TCP 流引擎事件的规则。

    filename

    匹配文件名。

    file.name

    匹配文件名的粘滞缓冲区。

    fileext

    匹配文件名的扩展名。

    filestore

    如果规则匹配,则将文件存储到磁盘上。

    filemagic

    匹配 libmagic 返回的有关文件的信息。

    file.magic

    匹配文件魔法的粘滞缓冲区。

    filemd5

    将文件 MD5 与 MD5 校验和列表进行匹配。

    filesha1

    将文件 SHA-1 与 SHA-1 校验和列表进行匹配。

    filesha256

    将文件 SHA-256 与 SHA-256 校验和列表进行匹配。

    filesize

    匹配所传输文件的大小。

    l3_proto

    指定特征码是否必须与 IPv4 和/或 IPv6 匹配。

    lua

    使用 lua 脚本进行匹配。

    iprep

    匹配主机的 IP 信誉信息。

    dns.query

    匹配 DNS 查询缓冲区的粘滞缓冲区。

    dns.opcode

    匹配 DNS 标头 opcode 标记。

    tls.sni

    专门匹配且仅匹配 TLS SNI 缓冲区的内容修饰符。

    tls.certs

    匹配 TLS 证书粘滞缓冲区的内容修饰符。

    tls.cert_issuer

    专门匹配且仅匹配 TLS 证书颁发者缓冲区的内容修饰符。

    tls.cert_subject

    专门匹配且仅匹配 TLS 证书主体缓冲区的内容修饰符。

    tls.cert_serial

    匹配 TLS 证书串行缓冲区的内容修饰符。

    tls.cert_fingerprint

    匹配 TLS 证书指纹缓冲区。

    ja3.hash

    匹配 JA3 哈希缓冲区的内容修饰符。

    ja3.string

    匹配 JA3 字符串缓冲区的内容修饰符。

    ja3s.hash

    匹配 JA3S 哈希粘滞缓冲区的内容修饰符。

    ja3s.string

    匹配 JA3S 字符串粘滞缓冲区的内容修饰符。

    modbus

    匹配 Modbus 请求的各种属性。

    cip_service

    匹配 CIP 服务。

    enip_command

    用于检测 EtherNet/IP 命令的规则。

    dnp3.data

    使以下内容选项与重新组合的应用程序缓冲区匹配。

    dnp3_func

    匹配 DNP3 请求和响应中找到的应用程序功能代码。

    dnp3_ind

    匹配 response application 标头中的 DNP3 内部指示器标记。

    dnp3_obj

    匹配 DNP3 应用程序数据对象。

    xbits

    对位执行操作。

    base64_decode

    对 base64 编码数据进行解码。

    base64_data

    内容与 base64 解码数据匹配。

    krb5_err_code

    匹配 Kerberos 5 错误代码。

    krb5_msg_type

    匹配 Kerberos 5 消息类型。

    krb5.cname

    匹配 Kerberos 5 客户端名称的粘滞缓冲区。

    krb5.sname

    匹配 Kerberos 5 服务器名称的粘滞缓冲区。

    sip.method

    匹配 SIP 方法缓冲区的粘滞缓冲区。

    sip.uri

    匹配 SIP URI 的粘滞缓冲区。

    sip.protocol

    匹配 SIP 协议的粘滞缓冲区。

    sip.stat_code

    匹配 SIP 状态代码的粘滞缓冲区。

    sip.stat_msg

    匹配 SIP 状态消息的粘滞缓冲区。

    sip.request_line

    匹配 SIP 请求行的粘滞缓冲区。

    sip.response_line

    匹配 SIP 响应行的粘滞缓冲区。

    template2

    模板。

    ipv4.hdr

    匹配 IPV4 标头的粘滞缓冲区。

    ipv6.hdr

    匹配 IPV6 标头的粘滞缓冲区。

    tcp.hdr

    匹配 TCP 标头的粘滞缓冲区。

    udp.hdr

    匹配 UDP 标头的粘滞缓冲区。

    tcp.mss

    匹配 TCP MSS 选项字段的粘滞缓冲区。

    ftpdata_command

    匹配用于触发 FTP 数据通道的 FTP 命令。

    target

    向输出模块指示哪一侧是攻击目标。

    snmp.version

    匹配 SNMP 版本。

    snmp.community

    匹配 SNMP 社区的 SNMP 内容修饰符。

    snmp.pdu_type

    匹配 SNMP PDU 类型。

    bypass

    完成 sig 匹配后,调用绕过回调。

    prefilter

    强制将条件用作预筛选器。

    compress_whitespace

    修改缓冲区以在检查之前将多个连续空格字符压缩为一个空格字符。

    strip_whitespace

    修改缓冲区以在检查之前删除空格。

    to_md5

    转换为缓冲区的 md5 哈希值。

    to_sha1

    转换为缓冲区的 sha1 哈希值。

    to_sha256

    转换为缓冲区的 sha256 哈希值。

    dotprefix

    修改缓冲区以提取点前缀。

    nopcap

    避免在出现警示时从流量中截取 pcap 内容。

过程

  1. NSX Manager,转到安全 > IDS/IPS 和 Malware Prevention(在“策略管理”部分下)。
  2. IDS/IPS 和 Malware Prevention 页面上,转到特征码管理选项卡,然后选择自定义特征码
  3. 单击添加,然后选择从文件加载选项。
  4. 如果之前已上载特征码包,请注意所有特征码都将替换为要上载的新包。因此,请将现有包导出到您的计算机上,使用新特征码进行更新,然后上载修改后的包。
  5. 如果您是首次上载自定义特征码包,请在定义新特征码集窗口中,输入特征码名称,然后浏览到计算机上的相应位置来选择特征码包。单击验证
  6. 在发布特征码之前,请注意,只能将“有效”和明确选择的“警告”特征码发布到传输节点和 NSX Edge。
    注:

    “无效”特征码和未选择的“警告”特征码不会发布到传输节点和 NSX Edge。

  7. 单击发布。尚未发布的新特征码包仍然可以恢复,并且可以保留现有特征码。您可以从 NSX Manager UI 恢复未发布的特征码。