将自定义特征码包上载到 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 内容。