suricata
detect-engine-mpm.h File Reference
#include "detect.h"
Include dependency graph for detect-engine-mpm.h:

Go to the source code of this file.

Data Structures

struct  PrefilterMpmListId
 
struct  MpmListIdDataArgs
 

Typedefs

typedef int(* PrefilterRegisterFunc) (DetectEngineCtx *de_ctx, SigGroupHead *sgh, MpmCtx *mpm_ctx, const DetectBufferMpmRegistry *mpm_reg, int list_id)
 
typedef struct PrefilterMpmListId PrefilterMpmListId
 

Functions

void DetectMpmInitializeFrameMpms (DetectEngineCtx *de_ctx)
 
int DetectMpmPrepareFrameMpms (DetectEngineCtx *de_ctx)
 initialize mpm contexts for applayer buffers that are in "single or "shared" mode.
 
void DetectMpmInitializePktMpms (DetectEngineCtx *de_ctx)
 
int DetectMpmPreparePktMpms (DetectEngineCtx *de_ctx)
 initialize mpm contexts for applayer buffers that are in "single or "shared" mode.
 
void DetectMpmInitializeAppMpms (DetectEngineCtx *de_ctx)
 
int DetectMpmPrepareAppMpms (DetectEngineCtx *de_ctx)
 initialize mpm contexts for applayer buffers that are in "single or "shared" mode.
 
void DetectMpmInitializeBuiltinMpms (DetectEngineCtx *de_ctx)
 
int DetectMpmPrepareBuiltinMpms (DetectEngineCtx *de_ctx)
 initialize mpm contexts for builtin buffers that are in "single or "shared" mode.
 
uint32_t PatternStrength (uint8_t *, uint16_t)
 Predict a strength value for patterns.
 
uint8_t PatternMatchDefaultMatcher (void)
 Function to return the multi pattern matcher algorithm to be used by the engine, based on the mpm-algo setting in yaml Use the default mpm if none is specified in the yaml file.
 
void PatternMatchPrepare (MpmCtx *, uint16_t)
 
void PatternMatchThreadPrepare (MpmThreadCtx *, uint16_t type)
 
void PatternMatchDestroy (MpmCtx *, uint16_t)
 
void PatternMatchThreadDestroy (MpmThreadCtx *mpm_thread_ctx, uint16_t)
 
int PatternMatchPrepareGroup (DetectEngineCtx *, SigGroupHead *)
 Prepare the pattern matcher ctx in a sig group head.
 
int SignatureHasPacketContent (const Signature *)
 check if a signature has patterns that are to be inspected against a packets payload (as opposed to the stream payload)
 
int SignatureHasStreamContent (const Signature *)
 check if a signature has patterns that are to be inspected against the stream payload (as opposed to the individual packets payload(s))
 
void RetrieveFPForSig (const DetectEngineCtx *de_ctx, Signature *s)
 
int MpmStoreInit (DetectEngineCtx *)
 Initializes the MpmStore mpm hash table to be used by the detection engine context.
 
void MpmStoreFree (DetectEngineCtx *)
 Frees the hash table - DetectEngineCtx->mpm_hash_table, allocated by MpmStoreInit() function.
 
void MpmStoreReportStats (const DetectEngineCtx *de_ctx)
 
MpmStoreMpmStorePrepareBuffer (DetectEngineCtx *de_ctx, SigGroupHead *sgh, enum MpmBuiltinBuffers buf)
 Get MpmStore for a built-in buffer type.
 
int DetectSetFastPatternAndItsId (DetectEngineCtx *de_ctx)
 Figure out the FP and their respective content ids for all the sigs in the engine.
 
void DetectAppLayerMpmRegister (const char *name, int direction, int priority, PrefilterRegisterFunc PrefilterRegister, InspectionBufferGetDataPtr GetData, AppProto alproto, int tx_min_progress)
 register an app layer keyword for mpm
 
void DetectAppLayerMpmRegisterSingle (const char *name, int direction, int priority, PrefilterRegisterFunc PrefilterRegister, InspectionSingleBufferGetDataPtr GetData, AppProto alproto, int tx_min_progress)
 
void DetectAppLayerMpmMultiRegister (const char *name, int direction, int priority, PrefilterRegisterFunc PrefilterRegister, InspectionMultiBufferGetDataPtr GetData, AppProto alproto, int tx_min_progress)
 
void DetectAppLayerMpmRegisterByParentId (DetectEngineCtx *de_ctx, const int id, const int parent_id, DetectEngineTransforms *transforms)
 copy a mpm engine from parent_id, add in transforms
 
void DetectPktMpmRegister (const char *name, int priority, PrefilterRegisterFunc PrefilterRegister, InspectionBufferGetPktDataPtr GetData)
 
void DetectPktMpmRegisterByParentId (DetectEngineCtx *de_ctx, const int id, const int parent_id, DetectEngineTransforms *transforms)
 copy a mpm engine from parent_id, add in transforms
 
void DetectFrameMpmRegister (const char *name, int direction, int priority, int(*PrefilterRegister)(DetectEngineCtx *de_ctx, SigGroupHead *sgh, MpmCtx *mpm_ctx, const DetectBufferMpmRegistry *mpm_reg, int list_id), AppProto alproto, uint8_t type)
 register a MPM engine
 
void DetectFrameMpmRegisterByParentId (DetectEngineCtx *de_ctx, const int id, const int parent_id, DetectEngineTransforms *transforms)
 copy a mpm engine from parent_id, add in transforms
 
void DetectEngineFrameMpmRegister (DetectEngineCtx *de_ctx, const char *name, int direction, int priority, int(*PrefilterRegister)(DetectEngineCtx *de_ctx, SigGroupHead *sgh, MpmCtx *mpm_ctx, const DetectBufferMpmRegistry *mpm_reg, int list_id), AppProto alproto, uint8_t type)
 
int PrefilterGenericMpmFrameRegister (DetectEngineCtx *de_ctx, SigGroupHead *sgh, MpmCtx *mpm_ctx, const DetectBufferMpmRegistry *mpm_reg, int list_id)
 
void EngineAnalysisAddAllRulePatterns (DetectEngineCtx *de_ctx, const Signature *s)
 add all patterns on our stats hash Used to fill the hash later used by DumpPatterns()
 
bool DetectBufferToClient (const DetectEngineCtx *de_ctx, int buf_id, AppProto alproto)
 

Detailed Description

Typedef Documentation

◆ PrefilterMpmListId

◆ PrefilterRegisterFunc

typedef int(* PrefilterRegisterFunc) (DetectEngineCtx *de_ctx, SigGroupHead *sgh, MpmCtx *mpm_ctx, const DetectBufferMpmRegistry *mpm_reg, int list_id)

Definition at line 72 of file detect-engine-mpm.h.

Function Documentation

◆ DetectAppLayerMpmMultiRegister()

void DetectAppLayerMpmMultiRegister ( const char *  name,
int  direction,
int  priority,
PrefilterRegisterFunc  PrefilterRegister,
InspectionMultiBufferGetDataPtr  GetData,
AppProto  alproto,
int  tx_min_progress 
)

Definition at line 168 of file detect-engine-mpm.c.

References name.

Referenced by DetectAppLayerMultiRegister().

Here is the caller graph for this function:

◆ DetectAppLayerMpmRegister()

void DetectAppLayerMpmRegister ( const char *  name,
int  direction,
int  priority,
PrefilterRegisterFunc  PrefilterRegister,
InspectionBufferGetDataPtr  GetData,
AppProto  alproto,
int  tx_min_progress 
)

register an app layer keyword for mpm

Parameters
namebuffer name
directionSIG_FLAG_TOSERVER or SIG_FLAG_TOCLIENT
prioritympm keyword priority
PrefilterRegisterPrefilter api registration function
GetDatacallback to setup a InspectBuffer. May be NULL.
alprotoAppProto this MPM engine inspects
tx_min_progressmin tx progress needed to invoke this engine.
Note
direction must be set to either toserver or toclient. If both are needed, register the keyword twice.

Definition at line 152 of file detect-engine-mpm.c.

References name.

Referenced by DetectDceStubDataRegister(), DetectDnsResponseRegister(), DetectFileRegisterFileProtocols(), DetectHttpClientBodyRegister(), DetectHttpCookieRegister(), DetectHttpHeaderNamesRegister(), DetectHttpHeaderRegister(), DetectHttpHHRegister(), DetectHttpMethodRegister(), DetectHttpProtocolRegister(), DetectHttpRawHeaderRegister(), DetectHttpRequestLineRegister(), DetectHttpResponseLineRegister(), DetectHttpStartRegister(), DetectHttpStatCodeRegister(), DetectHttpStatMsgRegister(), DetectHttpUARegister(), DetectHttpUriRegister(), DetectIkeKeyExchangeRegister(), DetectIkeNonceRegister(), DetectIkeSpiRegister(), DetectJa4HashRegister(), DetectQuicSniRegister(), DetectQuicUaRegister(), DetectQuicVersionRegister(), DetectSipMethodRegister(), DetectSipUriRegister(), DetectSmbNamedPipeRegister(), DetectSmbNtlmsspDomainRegister(), DetectSmbNtlmsspUserRegister(), DetectSmbShareRegister(), DetectSshHasshRegister(), DetectSshHasshServerRegister(), DetectSshHasshServerStringRegister(), DetectSshHasshStringRegister(), DetectSshProtocolRegister(), DetectSshSoftwareRegister(), DetectTlsFingerprintRegister(), DetectTlsIssuerRegister(), DetectTlsJa3HashRegister(), DetectTlsJa3SHashRegister(), DetectTlsJa3SStringRegister(), DetectTlsJa3StringRegister(), DetectTlsRandomBytesRegister(), DetectTlsRandomRegister(), DetectTlsRandomTimeRegister(), DetectTlsSerialRegister(), DetectTlsSniRegister(), DetectTlsSubjectRegister(), and SCDetectSMTPRegister().

◆ DetectAppLayerMpmRegisterByParentId()

◆ DetectAppLayerMpmRegisterSingle()

void DetectAppLayerMpmRegisterSingle ( const char *  name,
int  direction,
int  priority,
PrefilterRegisterFunc  PrefilterRegister,
InspectionSingleBufferGetDataPtr  GetData,
AppProto  alproto,
int  tx_min_progress 
)

Definition at line 160 of file detect-engine-mpm.c.

References name.

Referenced by SCDetectHelperBufferMpmRegister().

Here is the caller graph for this function:

◆ DetectBufferToClient()

bool DetectBufferToClient ( const DetectEngineCtx de_ctx,
int  buf_id,
AppProto  alproto 
)

◆ DetectEngineFrameMpmRegister()

◆ DetectFrameMpmRegister()

◆ DetectFrameMpmRegisterByParentId()

◆ DetectMpmInitializeAppMpms()

◆ DetectMpmInitializeBuiltinMpms()

◆ DetectMpmInitializeFrameMpms()

◆ DetectMpmInitializePktMpms()

◆ DetectMpmPrepareAppMpms()

int DetectMpmPrepareAppMpms ( DetectEngineCtx de_ctx)

initialize mpm contexts for applayer buffers that are in "single or "shared" mode.

Definition at line 295 of file detect-engine-mpm.c.

References DetectEngineCtx_::app_mpms_list, de_ctx, DetectBufferMpmRegistry_::direction, DetectEngineCtx_::mpm_cfg, MPM_CTX_FACTORY_UNIQUE_CONTEXT, DetectEngineCtx_::mpm_matcher, mpm_table, MpmFactoryGetMpmCtxForProfile(), DetectBufferMpmRegistry_::next, MpmTableElmt_::Prepare, DetectBufferMpmRegistry_::sgh_mpm_context, and SIG_FLAG_TOSERVER.

Referenced by SigGroupBuild().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DetectMpmPrepareBuiltinMpms()

int DetectMpmPrepareBuiltinMpms ( DetectEngineCtx de_ctx)

◆ DetectMpmPrepareFrameMpms()

int DetectMpmPrepareFrameMpms ( DetectEngineCtx de_ctx)

initialize mpm contexts for applayer buffers that are in "single or "shared" mode.

Definition at line 522 of file detect-engine-mpm.c.

References de_ctx, DetectBufferMpmRegistry_::direction, DetectEngineCtx_::frame_mpms_list, DetectEngineCtx_::mpm_cfg, MPM_CTX_FACTORY_UNIQUE_CONTEXT, DetectEngineCtx_::mpm_matcher, mpm_table, MpmFactoryGetMpmCtxForProfile(), DetectBufferMpmRegistry_::name, DetectBufferMpmRegistry_::next, MpmTableElmt_::Prepare, SCLogDebug, DetectBufferMpmRegistry_::sgh_mpm_context, and SIG_FLAG_TOSERVER.

Referenced by SigGroupBuild().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DetectMpmPreparePktMpms()

int DetectMpmPreparePktMpms ( DetectEngineCtx de_ctx)

initialize mpm contexts for applayer buffers that are in "single or "shared" mode.

Definition at line 687 of file detect-engine-mpm.c.

References de_ctx, DetectEngineCtx_::mpm_cfg, MPM_CTX_FACTORY_UNIQUE_CONTEXT, DetectEngineCtx_::mpm_matcher, mpm_table, MpmFactoryGetMpmCtxForProfile(), DetectBufferMpmRegistry_::name, DetectBufferMpmRegistry_::next, DetectEngineCtx_::pkt_mpms_list, MpmTableElmt_::Prepare, SCLogDebug, and DetectBufferMpmRegistry_::sgh_mpm_context.

Referenced by SigGroupBuild().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DetectPktMpmRegister()

void DetectPktMpmRegister ( const char *  name,
int  priority,
PrefilterRegisterFunc  PrefilterRegister,
InspectionBufferGetPktDataPtr  GetData 
)

◆ DetectPktMpmRegisterByParentId()

◆ DetectSetFastPatternAndItsId()

int DetectSetFastPatternAndItsId ( DetectEngineCtx de_ctx)

Figure out the FP and their respective content ids for all the sigs in the engine.

Parameters
de_ctxDetection engine context.
Return values
0On success.
-1On failure.

Definition at line 2459 of file detect-engine-mpm.c.

References BUG_ON, DetectPatternTracker::cd, DetectPatternTracker::cnt, cnt, SigMatch_::ctx, de_ctx, DETECT_CONTENT_MPM, DetectContentData_::flags, HashListTableAdd(), HashListTableFree(), HashListTableInit(), HashListTableLookup(), DetectContentData_::id, Signature_::id, Signature_::init_data, DetectPatternTracker::mpm, SignatureInitData_::mpm_sm, SignatureInitData_::mpm_sm_list, Signature_::next, PatIntId, SCCalloc, SCLogDebug, DetectEngineCtx_::sig_list, and DetectPatternTracker::sm_list.

Referenced by SigGroupBuild().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EngineAnalysisAddAllRulePatterns()

◆ MpmStoreFree()

void MpmStoreFree ( DetectEngineCtx de_ctx)

Frees the hash table - DetectEngineCtx->mpm_hash_table, allocated by MpmStoreInit() function.

Parameters
de_ctxPointer to the detection engine context.

Definition at line 1569 of file detect-engine-mpm.c.

References de_ctx, HashListTableFree(), and DetectEngineCtx_::mpm_hash_table.

Referenced by DetectEngineCtxFree().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MpmStoreInit()

int MpmStoreInit ( DetectEngineCtx de_ctx)

Initializes the MpmStore mpm hash table to be used by the detection engine context.

Parameters
de_ctxPointer to the detection engine context.
Return values
0On success.
-1On failure.

Definition at line 1406 of file detect-engine-mpm.c.

References de_ctx, HashListTableInit(), and DetectEngineCtx_::mpm_hash_table.

Here is the call graph for this function:

◆ MpmStorePrepareBuffer()

◆ MpmStoreReportStats()

◆ PatternMatchDefaultMatcher()

uint8_t PatternMatchDefaultMatcher ( void  )

Function to return the multi pattern matcher algorithm to be used by the engine, based on the mpm-algo setting in yaml Use the default mpm if none is specified in the yaml file.

Return values
mpmalgo value

Definition at line 861 of file detect-engine-mpm.c.

References FatalError, mpm_default_matcher, mpm_table, MPM_TABLE_SIZE, name, SCConfGet(), and SCLogWarning.

Referenced by AppLayerProtoDetectSetup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PatternMatchDestroy()

void PatternMatchDestroy ( MpmCtx mpm_ctx,
uint16_t  mpm_matcher 
)

Definition at line 907 of file detect-engine-mpm.c.

References MpmTableElmt_::DestroyCtx, mpm_table, and SCLogDebug.

◆ PatternMatchPrepare()

void PatternMatchPrepare ( MpmCtx ,
uint16_t   
)

◆ PatternMatchPrepareGroup()

int PatternMatchPrepareGroup ( DetectEngineCtx de_ctx,
SigGroupHead sh 
)

Prepare the pattern matcher ctx in a sig group head.

Definition at line 2268 of file detect-engine-mpm.c.

References de_ctx, MpmStore_::mpm_ctx, MPMB_OTHERIP, MPMB_TCP_PKT_TC, MPMB_TCP_PKT_TS, MPMB_TCP_STREAM_TC, MPMB_TCP_STREAM_TS, MPMB_UDP_TC, MPMB_UDP_TS, MpmStorePrepareBuffer(), PrefilterPktPayloadRegister(), PrefilterPktStreamRegister(), SGH_DIRECTION_TC, SGH_DIRECTION_TS, and SGH_PROTO.

Referenced by PrefilterSetupRuleGroup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PatternMatchThreadDestroy()

void PatternMatchThreadDestroy ( MpmThreadCtx mpm_thread_ctx,
uint16_t  mpm_matcher 
)

Definition at line 913 of file detect-engine-mpm.c.

References MpmDestroyThreadCtx(), and SCLogDebug.

Here is the call graph for this function:

◆ PatternMatchThreadPrepare()

void PatternMatchThreadPrepare ( MpmThreadCtx mpm_thread_ctx,
uint16_t  type 
)

Definition at line 918 of file detect-engine-mpm.c.

References MpmInitThreadCtx(), and SCLogDebug.

Here is the call graph for this function:

◆ PatternStrength()

uint32_t PatternStrength ( uint8_t *  pat,
uint16_t  patlen 
)

Predict a strength value for patterns.

Patterns with high character diversity score higher. Alpha chars score not so high Other printable + a few common codes a little higher Everything else highest. Longer patterns score better than short patters.

Parameters
patpattern
patlenlength of the pattern
Return values
spattern score

Definition at line 937 of file detect-engine-mpm.c.

◆ PrefilterGenericMpmFrameRegister()

◆ RetrieveFPForSig()

◆ SignatureHasPacketContent()

int SignatureHasPacketContent ( const Signature s)

check if a signature has patterns that are to be inspected against a packets payload (as opposed to the stream payload)

Parameters
ssignature
Return values
1true
0false

Definition at line 803 of file detect-engine-mpm.c.

References DETECT_SM_LIST_PMATCH, Signature_::flags, Signature_::init_data, DetectProto_::proto, Signature_::proto, SCEnter, SCLogDebug, SCReturnInt, SIG_FLAG_REQUIRE_PACKET, and SignatureInitData_::smlists.

Referenced by MpmStorePrepareBuffer().

Here is the caller graph for this function:

◆ SignatureHasStreamContent()

int SignatureHasStreamContent ( const Signature s)

check if a signature has patterns that are to be inspected against the stream payload (as opposed to the individual packets payload(s))

Parameters
ssignature
Return values
1true
0false

Definition at line 833 of file detect-engine-mpm.c.

References DETECT_SM_LIST_PMATCH, Signature_::flags, Signature_::init_data, DetectProto_::proto, Signature_::proto, SCEnter, SCLogDebug, SCReturnInt, SIG_FLAG_REQUIRE_STREAM, and SignatureInitData_::smlists.

Referenced by MpmStorePrepareBuffer().

Here is the caller graph for this function: