mirror of https://github.com/OISF/suricata
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
368 lines
9.6 KiB
C
368 lines
9.6 KiB
C
/* Copyright (C) 2007-2024 Open Information Security Foundation
|
|
*
|
|
* You can copy, redistribute or modify this Program under the terms of
|
|
* the GNU General Public License version 2 as published by the Free
|
|
* Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* version 2 along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
* 02110-1301, USA.
|
|
*/
|
|
|
|
/**
|
|
* \file
|
|
*
|
|
* \author Victor Julien <victor@inliniac.net>
|
|
*/
|
|
|
|
#ifndef SURICATA_DETECT_ENGINE_REGISTER_H
|
|
#define SURICATA_DETECT_ENGINE_REGISTER_H
|
|
|
|
enum DetectKeywordId {
|
|
DETECT_SID,
|
|
DETECT_PRIORITY,
|
|
DETECT_REV,
|
|
DETECT_CLASSTYPE,
|
|
|
|
/* sorted by prefilter priority. Higher in this list means it will be
|
|
* picked over ones lower in the list */
|
|
DETECT_APP_LAYER_PROTOCOL,
|
|
DETECT_ACK,
|
|
DETECT_SEQ,
|
|
DETECT_WINDOW,
|
|
DETECT_IPOPTS,
|
|
DETECT_IPADDR_SRC,
|
|
DETECT_IPADDR_DST,
|
|
DETECT_FLAGS,
|
|
DETECT_FRAGBITS,
|
|
DETECT_FRAGOFFSET,
|
|
DETECT_TTL,
|
|
DETECT_TOS,
|
|
DETECT_ITYPE,
|
|
DETECT_ICODE,
|
|
DETECT_ICMP_ID,
|
|
DETECT_ICMP_SEQ,
|
|
DETECT_ICMPV4HDR,
|
|
DETECT_IGMPHDR,
|
|
DETECT_IGMP_TYPE,
|
|
DETECT_DSIZE,
|
|
|
|
DETECT_FLOW,
|
|
/* end prefilter sort */
|
|
|
|
/* values used in util-var.c go here, to avoid int overflows */
|
|
DETECT_THRESHOLD,
|
|
DETECT_FLOWBITS,
|
|
DETECT_FLOWVAR,
|
|
DETECT_FLOWVAR_POSTMATCH,
|
|
DETECT_FLOWINT,
|
|
DETECT_HOSTBITS,
|
|
DETECT_XBITS,
|
|
DETECT_PKTVAR,
|
|
/* end util-var.c logic */
|
|
|
|
/* content inspection */
|
|
DETECT_CONTENT,
|
|
DETECT_URICONTENT,
|
|
DETECT_PCRE,
|
|
DETECT_DEPTH,
|
|
DETECT_STARTS_WITH,
|
|
DETECT_ENDS_WITH,
|
|
DETECT_DISTANCE,
|
|
DETECT_WITHIN,
|
|
DETECT_OFFSET,
|
|
DETECT_REPLACE,
|
|
DETECT_NOCASE,
|
|
DETECT_FAST_PATTERN,
|
|
DETECT_RAWBYTES,
|
|
DETECT_BYTETEST,
|
|
DETECT_BYTEJUMP,
|
|
DETECT_BYTEMATH,
|
|
DETECT_BYTE_EXTRACT,
|
|
DETECT_DATASET,
|
|
DETECT_DATAREP,
|
|
DETECT_BASE64_DECODE,
|
|
DETECT_BASE64_DATA,
|
|
DETECT_BSIZE,
|
|
DETECT_ASN1,
|
|
DETECT_LUA,
|
|
DETECT_ISDATAAT,
|
|
DETECT_URILEN,
|
|
DETECT_ABSENT,
|
|
DETECT_ENTROPY,
|
|
/* end of content inspection */
|
|
|
|
DETECT_METADATA,
|
|
DETECT_REFERENCE,
|
|
DETECT_TAG,
|
|
DETECT_MSG,
|
|
DETECT_SAMEIP,
|
|
DETECT_GEOIP,
|
|
DETECT_IPPROTO,
|
|
DETECT_FTPBOUNCE,
|
|
DETECT_FTP_DYNPORT,
|
|
DETECT_ID,
|
|
DETECT_RPC,
|
|
DETECT_NOALERT,
|
|
DETECT_ALERT,
|
|
DETECT_IPV4_CSUM,
|
|
DETECT_TCPV4_CSUM,
|
|
DETECT_TCPV6_CSUM,
|
|
DETECT_UDPV4_CSUM,
|
|
DETECT_UDPV6_CSUM,
|
|
DETECT_ICMPV4_CSUM,
|
|
DETECT_ICMPV6_CSUM,
|
|
DETECT_IGMP_CSUM,
|
|
DETECT_STREAM_SIZE,
|
|
DETECT_DETECTION_FILTER,
|
|
|
|
DETECT_DECODE_EVENT,
|
|
DETECT_GID,
|
|
DETECT_MARK,
|
|
|
|
DETECT_FRAME,
|
|
|
|
DETECT_FLOW_AGE,
|
|
DETECT_FLOW_PKTS,
|
|
DETECT_FLOW_PKTS_TO_SERVER,
|
|
DETECT_FLOW_PKTS_TO_CLIENT,
|
|
DETECT_FLOW_BYTES,
|
|
DETECT_FLOW_BYTES_TO_SERVER,
|
|
DETECT_FLOW_BYTES_TO_CLIENT,
|
|
DETECT_FLOW_ELEPHANT,
|
|
|
|
DETECT_REQUIRES,
|
|
|
|
DETECT_TLS_VERSION,
|
|
DETECT_TLS_SUBJECT,
|
|
DETECT_TLS_ISSUERDN,
|
|
DETECT_TLS_NOTBEFORE,
|
|
DETECT_TLS_NOTAFTER,
|
|
DETECT_TLS_EXPIRED,
|
|
DETECT_TLS_VALID,
|
|
DETECT_TLS_FINGERPRINT,
|
|
DETECT_TLS_STORE,
|
|
DETECT_TLS_CHAIN_LEN,
|
|
DETECT_TLS_ALPN,
|
|
|
|
DETECT_HTTP_COOKIE_CM,
|
|
DETECT_HTTP_COOKIE,
|
|
DETECT_HTTP_METHOD_CM,
|
|
DETECT_HTTP_METHOD,
|
|
DETECT_HTTP_PROTOCOL,
|
|
DETECT_HTTP_START,
|
|
DETECT_HTTP_CLIENT_BODY,
|
|
DETECT_HTTP_REQUEST_BODY,
|
|
DETECT_HTTP_SERVER_BODY,
|
|
DETECT_HTTP_RESPONSE_BODY,
|
|
DETECT_HTTP_HEADER_CM,
|
|
DETECT_HTTP_HEADER,
|
|
DETECT_HTTP_HEADER_NAMES,
|
|
DETECT_HTTP_HEADER_ACCEPT,
|
|
DETECT_HTTP_HEADER_ACCEPT_LANG,
|
|
DETECT_HTTP_HEADER_ACCEPT_ENC,
|
|
DETECT_HTTP_HEADER_CONNECTION,
|
|
DETECT_HTTP_HEADER_CONTENT_LEN,
|
|
DETECT_HTTP_HEADER_CONTENT_TYPE,
|
|
DETECT_HTTP_HEADER_LOCATION,
|
|
DETECT_HTTP_HEADER_SERVER,
|
|
DETECT_HTTP_HEADER_REFERER,
|
|
DETECT_HTTP_RAW_HEADER_CM,
|
|
DETECT_HTTP_RAW_HEADER,
|
|
DETECT_HTTP_URI_CM,
|
|
DETECT_HTTP_URI,
|
|
DETECT_HTTP_URI_RAW,
|
|
DETECT_HTTP_RAW_URI,
|
|
DETECT_HTTP_STAT_MSG_CM,
|
|
DETECT_HTTP_STAT_MSG,
|
|
DETECT_HTTP_STAT_CODE_CM,
|
|
DETECT_HTTP_STAT_CODE,
|
|
DETECT_HTTP_USER_AGENT,
|
|
DETECT_HTTP_UA,
|
|
DETECT_HTTP_HOST_CM,
|
|
DETECT_HTTP_HOST,
|
|
DETECT_HTTP_RAW_HOST,
|
|
DETECT_HTTP_HOST_RAW,
|
|
DETECT_HTTP_REQUEST_LINE,
|
|
DETECT_HTTP_RESPONSE_LINE,
|
|
DETECT_NFS_VERSION,
|
|
DETECT_SSL_VERSION,
|
|
DETECT_SSL_STATE,
|
|
DETECT_FILE_DATA,
|
|
DETECT_PKT_DATA,
|
|
DETECT_APP_LAYER_EVENT,
|
|
DETECT_APP_LAYER_STATE,
|
|
|
|
DETECT_HTTP2_FRAMETYPE,
|
|
DETECT_HTTP2_ERRORCODE,
|
|
DETECT_HTTP2_PRIORITY,
|
|
DETECT_HTTP2_WINDOW,
|
|
DETECT_HTTP2_SIZEUPDATE,
|
|
DETECT_HTTP2_SETTINGS,
|
|
DETECT_HTTP2_HEADERNAME,
|
|
DETECT_HTTP_REQUEST_HEADER,
|
|
DETECT_HTTP_RESPONSE_HEADER,
|
|
|
|
DETECT_ENGINE_EVENT,
|
|
DETECT_STREAM_EVENT,
|
|
|
|
DETECT_CONFIG,
|
|
|
|
DETECT_FILENAME,
|
|
DETECT_FILE_NAME,
|
|
DETECT_FILEEXT,
|
|
DETECT_FILESTORE,
|
|
DETECT_FILESTORE_POSTMATCH,
|
|
DETECT_FILEMAGIC,
|
|
DETECT_FILE_MAGIC,
|
|
DETECT_FILEMD5,
|
|
DETECT_FILESHA1,
|
|
DETECT_FILESHA256,
|
|
DETECT_FILESIZE,
|
|
|
|
DETECT_L3PROTO,
|
|
DETECT_IPREP,
|
|
|
|
DETECT_DNS_RESPONSE,
|
|
DETECT_TLS_SNI,
|
|
DETECT_TLS_CERTS,
|
|
DETECT_TLS_CERT_ISSUER,
|
|
DETECT_TLS_CERT_SUBJECT,
|
|
DETECT_TLS_CERT_SERIAL,
|
|
DETECT_TLS_CERT_FINGERPRINT,
|
|
DETECT_TLS_SUBJECTALTNAME,
|
|
DETECT_TLS_RANDOM_TIME,
|
|
DETECT_TLS_RANDOM_BYTES,
|
|
DETECT_TLS_RANDOM,
|
|
|
|
DETECT_TLS_JA3_HASH,
|
|
DETECT_TLS_JA3_STRING,
|
|
DETECT_TLS_JA3S_HASH,
|
|
DETECT_TLS_JA3S_STRING,
|
|
|
|
DETECT_MODBUS,
|
|
|
|
DETECT_DNP3DATA,
|
|
DETECT_DNP3FUNC,
|
|
DETECT_DNP3IND,
|
|
DETECT_DNP3OBJ,
|
|
|
|
DETECT_KRB5_ERRCODE,
|
|
DETECT_KRB5_CNAME,
|
|
DETECT_KRB5_SNAME,
|
|
DETECT_KRB5_TICKET_ENCRYPTION,
|
|
|
|
DETECT_SIP_METHOD,
|
|
DETECT_SIP_URI,
|
|
DETECT_TEMPLATE,
|
|
DETECT_ETHERHDR,
|
|
DETECT_IPV4HDR,
|
|
DETECT_IPV6HDR,
|
|
DETECT_ICMPV6HDR,
|
|
DETECT_ICMPV6MTU,
|
|
DETECT_TCPHDR,
|
|
DETECT_UDPHDR,
|
|
DETECT_TCPMSS,
|
|
DETECT_TCP_WSCALE,
|
|
DETECT_FTPDATA,
|
|
DETECT_TARGET,
|
|
|
|
DETECT_BYPASS,
|
|
|
|
DETECT_PREFILTER,
|
|
|
|
DETECT_TRANSFORM_PCREXFORM,
|
|
DETECT_TRANSFORM_LUAXFORM,
|
|
|
|
DETECT_JA4_HASH,
|
|
|
|
DETECT_FTP_COMMAND,
|
|
DETECT_FTP_COMMAND_DATA,
|
|
DETECT_FTP_REPLY,
|
|
DETECT_FTP_MODE,
|
|
DETECT_FTP_REPLY_RECEIVED,
|
|
DETECT_FTP_COMPLETION_CODE,
|
|
|
|
DETECT_VLAN_ID,
|
|
DETECT_VLAN_LAYERS,
|
|
|
|
/* make sure this stays last */
|
|
DETECT_TBLSIZE_STATIC,
|
|
};
|
|
|
|
extern int DETECT_TBLSIZE;
|
|
extern int DETECT_TBLSIZE_IDX;
|
|
// step for reallocating sigmatch_table
|
|
#define DETECT_TBLSIZE_STEP 256
|
|
|
|
// no macro for bindgen
|
|
/** sigmatch has no options, so the parser shouldn't expect any */
|
|
#define SIGMATCH_NOOPT (1UL << (0))
|
|
/** sigmatch is compatible with a ip only rule */
|
|
#define SIGMATCH_IPONLY_COMPAT (1UL << (1))
|
|
/** sigmatch is compatible with a decode event only rule */
|
|
#define SIGMATCH_DEONLY_COMPAT (1UL << (2))
|
|
/** sigmatch may have options, so the parser should be ready to
|
|
* deal with both cases */
|
|
#define SIGMATCH_OPTIONAL_OPT (1UL << (3))
|
|
/** input may be wrapped in double quotes. They will be stripped before
|
|
* input data is passed to keyword parser */
|
|
#define SIGMATCH_QUOTES_OPTIONAL (1UL << (4))
|
|
/** input MUST be wrapped in double quotes. They will be stripped before
|
|
* input data is passed to keyword parser. Missing double quotes lead to
|
|
* error and signature invalidation. */
|
|
#define SIGMATCH_QUOTES_MANDATORY (1UL << (5))
|
|
/** negation parsing is handled by the rule parser. Signature::init_data::negated
|
|
* will be set to true or false prior to calling the keyword parser. Exclamation
|
|
* mark is stripped from the input to the keyword parser. */
|
|
#define SIGMATCH_HANDLE_NEGATION (1UL << (6))
|
|
/** keyword is a content modifier */
|
|
#define SIGMATCH_INFO_CONTENT_MODIFIER (1UL << (7))
|
|
/** keyword is a sticky buffer */
|
|
#define SIGMATCH_INFO_STICKY_BUFFER (1UL << (8))
|
|
/** keyword is deprecated: used to suggest an alternative */
|
|
#define SIGMATCH_INFO_DEPRECATED (1UL << (9))
|
|
/** strict parsing is enabled */
|
|
#define SIGMATCH_STRICT_PARSING (1UL << (10))
|
|
/** keyword supported by firewall rules */
|
|
#define SIGMATCH_SUPPORT_FIREWALL (1UL << (11))
|
|
/** keyword supporting setting an optional direction */
|
|
#define SIGMATCH_SUPPORT_DIR (1UL << (12))
|
|
/** keyword is a multi buffer */
|
|
#define SIGMATCH_INFO_MULTI_BUFFER (1UL << (13))
|
|
/** keyword is a unsigned 8-bit integer */
|
|
#define SIGMATCH_INFO_UINT8 (1UL << (14))
|
|
/** keyword is a unsigned 16-bit integer */
|
|
#define SIGMATCH_INFO_UINT16 (1UL << (15))
|
|
/** keyword is a unsigned 32-bit integer */
|
|
#define SIGMATCH_INFO_UINT32 (1UL << (16))
|
|
/** keyword is a unsigned 64-bit integer */
|
|
#define SIGMATCH_INFO_UINT64 (1UL << (17))
|
|
/** keyword is a multi uint */
|
|
#define SIGMATCH_INFO_MULTI_UINT (1UL << (18))
|
|
/** keyword is an uint with enumeration stringer */
|
|
#define SIGMATCH_INFO_ENUM_UINT (1UL << (19))
|
|
/** keyword is an uint with bitflags */
|
|
#define SIGMATCH_INFO_BITFLAGS_UINT (1UL << (20))
|
|
/** keyword cannot be used in firewall rules */
|
|
#define SIGMATCH_BAN_FIREWALL_RULE (1UL << (21))
|
|
/** keyword cannot be used in firewall mode */
|
|
#define SIGMATCH_BAN_FIREWALL_MODE (1UL << (22))
|
|
|
|
int SigTableList(const char *keyword);
|
|
void SigTableCleanup(void);
|
|
void SigTableInit(void);
|
|
void SigTableSetup(void);
|
|
int SCSigTablePreRegister(void (*KeywordsRegister)(void));
|
|
void SigTableRegisterTests(void);
|
|
bool SCSigTableHasKeyword(const char *keyword);
|
|
void SCDetectHelperKeywordSetCleanCString(uint16_t id);
|
|
|
|
#endif /* SURICATA_DETECT_ENGINE_REGISTER_H */
|