suricata
detect-engine.h
Go to the documentation of this file.
1 /* Copyright (C) 2007-2021 Open Information Security Foundation
2  *
3  * You can copy, redistribute or modify this Program under the terms of
4  * the GNU General Public License version 2 as published by the Free
5  * Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * version 2 along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15  * 02110-1301, USA.
16  */
17 
18 /**
19  * \file
20  *
21  * \author Victor Julien <victor@inliniac.net>
22  */
23 
24 #ifndef __DETECT_ENGINE_H__
25 #define __DETECT_ENGINE_H__
26 
27 #include "detect.h"
28 #include "tm-threads.h"
29 #include "flow-private.h"
30 
31 void InspectionBufferInit(InspectionBuffer *buffer, uint32_t initial_size);
32 void InspectionBufferSetup(DetectEngineThreadCtx *det_ctx, const int list_id,
33  InspectionBuffer *buffer, const uint8_t *data, const uint32_t data_len);
35 void InspectionBufferCheckAndExpand(InspectionBuffer *buffer, uint32_t min_size);
36 void InspectionBufferCopy(InspectionBuffer *buffer, uint8_t *buf, uint32_t buf_len);
38  const DetectEngineTransforms *transforms);
40  const uint8_t *content, uint16_t content_len, const char **namestr);
42 InspectionBuffer *InspectionBufferGet(DetectEngineThreadCtx *det_ctx, const int list_id);
44  const uint8_t *data, const uint32_t data_len);
46  DetectEngineThreadCtx *det_ctx, const int list_id, uint32_t local_id);
47 
48 int DetectBufferTypeRegister(const char *name);
49 int DetectBufferTypeGetByName(const char *name);
50 void DetectBufferTypeSupportsMpm(const char *name);
51 void DetectBufferTypeSupportsPacket(const char *name);
52 void DetectBufferTypeSupportsTransformations(const char *name);
53 int DetectBufferTypeMaxId(void);
55 void DetectBufferTypeSetDescriptionByName(const char *name, const char *desc);
56 const char *DetectBufferTypeGetDescriptionByName(const char *name);
57 void DetectBufferTypeRegisterSetupCallback(const char *name,
58  void (*Callback)(const DetectEngineCtx *, Signature *));
59 void DetectBufferTypeRegisterValidateCallback(const char *name,
60  bool (*ValidateCallback)(const Signature *, const char **sigerror));
61 
63  TransformData *transforms, int transform_cnt);
64 const char *DetectBufferTypeGetNameById(const DetectEngineCtx *de_ctx, const int id);
67 const char *DetectBufferTypeGetDescriptionById(const DetectEngineCtx *de_ctx, const int id);
68 void DetectBufferRunSetupCallback(const DetectEngineCtx *de_ctx, const int id, Signature *s);
69 bool DetectBufferRunValidateCallback(const DetectEngineCtx *de_ctx, const int id, const Signature *s, const char **sigerror);
70 
71 /* prototypes */
77 
78 int DetectRegisterThreadCtxGlobalFuncs(const char *name,
79  void *(*InitFunc)(void *), void *data, void (*FreeFunc)(void *));
81 
82 TmEcode DetectEngineThreadCtxInit(ThreadVars *, void *, void **);
84 //inline uint32_t DetectEngineGetMaxSigId(DetectEngineCtx *);
85 /* faster as a macro than a inline function on my box -- VJ */
86 #define DetectEngineGetMaxSigId(de_ctx) ((de_ctx)->signum)
88 void DetectEngineRegisterTests(void);
90 
91 uint32_t DetectEngineGetVersion(void);
92 void DetectEngineBumpVersion(void);
96 void DetectEnginePruneFreeList(void);
100 int DetectEngineReload(const SCInstance *suri);
101 int DetectEngineEnabled(void);
102 int DetectEngineMTApply(void);
105 
106 int DetectEngineReloadStart(void);
107 int DetectEngineReloadIsStart(void);
108 void DetectEngineReloadSetIdle(void);
109 int DetectEngineReloadIsIdle(void);
110 
111 int DetectEngineLoadTenantBlocking(uint32_t tenant_id, const char *yaml);
112 int DetectEngineReloadTenantBlocking(uint32_t tenant_id, const char *yaml, int reload_cnt);
113 
114 int DetectEngineTentantRegisterLivedev(uint32_t tenant_id, int device_id);
115 int DetectEngineTentantRegisterVlanId(uint32_t tenant_id, uint16_t vlan_id);
116 int DetectEngineTentantUnregisterVlanId(uint32_t tenant_id, uint16_t vlan_id);
117 int DetectEngineTentantRegisterPcapFile(uint32_t tenant_id);
118 int DetectEngineTentantUnregisterPcapFile(uint32_t tenant_id);
119 
121  const Signature *, const SigMatchData *, Flow *, const uint8_t, void *, void *, uint64_t);
122 
125  const DetectEngineAppInspectionEngine *engine,
126  const Signature *s,
127  Flow *f, uint8_t flags, void *alstate, void *txv, uint64_t tx_id);
128 
130  DetectEngineThreadCtx *det_ctx,
131  const DetectEnginePktInspectionEngine *engine,
132  const Signature *s, Packet *p, uint8_t *alert_flags);
133 
134 /**
135  * \brief Registers an app inspection engine.
136  *
137  * \param name Name of the detection list
138  * \param alproto App layer protocol for which we will register the engine.
139  * \param direction The direction for the engine: SIG_FLAG_TOSERVER or
140  * SIG_FLAG_TOCLIENT
141  * \param progress Minimal progress value for inspect engine to run
142  * \param Callback The engine callback.
143  */
144 void DetectAppLayerInspectEngineRegister2(const char *name,
145  AppProto alproto, uint32_t dir, int progress,
146  InspectEngineFuncPtr2 Callback2,
148 
149 void DetectPktInspectEngineRegister(const char *name,
152 
155 
157  DetectEngineThreadCtx *det_ctx, const Signature *s,
158  Flow *f, Packet *p,
159  uint8_t *alert_flags);
161 
165 
166 int WARN_UNUSED DetectBufferSetActiveList(Signature *s, const int list);
168 
170  ThreadVars *tv, DetectEngineCtx *new_de_ctx, int mt);
171 
172 #endif /* __DETECT_ENGINE_H__ */
tm-threads.h
DetectEngineAppInspectionEngine_
Definition: detect.h:397
DetectBufferTypeValidateTransform
bool DetectBufferTypeValidateTransform(DetectEngineCtx *de_ctx, int sm_list, const uint8_t *content, uint16_t content_len, const char **namestr)
Check content byte array compatibility with transforms.
Definition: detect-engine.c:1167
DetectBufferSetActiveList
int WARN_UNUSED DetectBufferSetActiveList(Signature *s, const int list)
Definition: detect-engine.c:941
DetectEngineReloadIsIdle
int DetectEngineReloadIsIdle(void)
Definition: detect-engine.c:1550
DetectBufferTypeRegister
int DetectBufferTypeRegister(const char *name)
Definition: detect-engine.c:785
DetectEnginePktInspectionEngine
Definition: detect.h:449
InspectionBufferGet
InspectionBuffer * InspectionBufferGet(DetectEngineThreadCtx *det_ctx, const int list_id)
Definition: detect-engine.c:1010
DetectBufferTypeGetNameById
const char * DetectBufferTypeGetNameById(const DetectEngineCtx *de_ctx, const int id)
Definition: detect-engine.c:838
DetectBufferTypeGetByName
int DetectBufferTypeGetByName(const char *name)
Definition: detect-engine.c:829
DetectEngineTransforms
Definition: detect.h:378
DetectEnginePktInspectionRun
bool DetectEnginePktInspectionRun(ThreadVars *tv, DetectEngineThreadCtx *det_ctx, const Signature *s, Flow *f, Packet *p, uint8_t *alert_flags)
Definition: detect-engine.c:1433
InspectionBufferMultipleForListGet
InspectionBuffer * InspectionBufferMultipleForListGet(DetectEngineThreadCtx *det_ctx, const int list_id, uint32_t local_id)
for a InspectionBufferMultipleForList get a InspectionBuffer
Definition: detect-engine.c:1030
DetectBufferTypeSetDescriptionByName
void DetectBufferTypeSetDescriptionByName(const char *name, const char *desc)
Definition: detect-engine.c:857
AppProto
uint16_t AppProto
Definition: app-layer-protos.h:77
InspectionBuffer
Definition: detect.h:344
flow-private.h
Flow_
Flow data structure.
Definition: flow.h:353
InspectionBufferFree
void InspectionBufferFree(InspectionBuffer *buffer)
Definition: detect-engine.c:1108
DetectEngineReference
DetectEngineCtx * DetectEngineReference(DetectEngineCtx *)
Definition: detect-engine.c:3230
InspectionBufferGetDataPtr
InspectionBuffer *(* InspectionBufferGetDataPtr)(struct DetectEngineThreadCtx_ *det_ctx, const DetectEngineTransforms *transforms, Flow *f, const uint8_t flow_flags, void *txv, const int list_id)
Definition: detect.h:384
DetectEngineAppInspectionEngine2Signature
int DetectEngineAppInspectionEngine2Signature(DetectEngineCtx *de_ctx, Signature *s)
Definition: detect-engine.c:415
DetectThreadCtxGetGlobalKeywordThreadCtx
void * DetectThreadCtxGetGlobalKeywordThreadCtx(DetectEngineThreadCtx *det_ctx, int id)
Retrieve thread local keyword ctx by id.
Definition: detect-engine.c:3162
DetectEngineCtx_
main detection engine ctx
Definition: detect.h:758
DetectEngineReloadIsStart
int DetectEngineReloadIsStart(void)
Definition: detect-engine.c:1530
DetectEngineResetMaxSigId
void DetectEngineResetMaxSigId(DetectEngineCtx *)
Definition: detect-engine.c:2449
InspectionBufferClean
void InspectionBufferClean(DetectEngineThreadCtx *det_ctx)
Definition: detect-engine.c:984
InspectionBufferGetPktDataPtr
InspectionBuffer *(* InspectionBufferGetPktDataPtr)(struct DetectEngineThreadCtx_ *det_ctx, const DetectEngineTransforms *transforms, Packet *p, const int list_id)
Definition: detect.h:444
DetectEnginePktInspectionSetup
int DetectEnginePktInspectionSetup(Signature *s)
Definition: detect-engine.c:1480
DetectEngineReload
int DetectEngineReload(const SCInstance *suri)
Reload the detection engine.
Definition: detect-engine.c:4038
DetectEngineLoadTenantBlocking
int DetectEngineLoadTenantBlocking(uint32_t tenant_id, const char *yaml)
Load a tenant and wait for loading to complete.
Definition: detect-engine.c:3433
SigMatchData_
Data needed for Match()
Definition: detect.h:329
DetectEngineCtxInit
DetectEngineCtx * DetectEngineCtxInit(void)
Definition: detect-engine.c:2023
TransformData_
Definition: detect.h:373
DetectAppLayerInspectEngineRegister2
void DetectAppLayerInspectEngineRegister2(const char *name, AppProto alproto, uint32_t dir, int progress, InspectEngineFuncPtr2 Callback2, InspectionBufferGetDataPtr GetData)
Registers an app inspection engine.
Definition: detect-engine.c:174
DetectEnginePruneFreeList
void DetectEnginePruneFreeList(void)
Definition: detect-engine.c:3999
DetectBufferTypeGetDescriptionByName
const char * DetectBufferTypeGetDescriptionByName(const char *name)
Definition: detect-engine.c:875
DetectBufferTypeRegisterSetupCallback
void DetectBufferTypeRegisterSetupCallback(const char *name, void(*Callback)(const DetectEngineCtx *, Signature *))
Definition: detect-engine.c:902
DetectEngineCtxFree
void DetectEngineCtxFree(DetectEngineCtx *)
Free a DetectEngineCtx::
Definition: detect-engine.c:2068
DetectEngineGetByTenantId
DetectEngineCtx * DetectEngineGetByTenantId(int tenant_id)
Definition: detect-engine.c:3882
DetectEngineThreadCtxInit
TmEcode DetectEngineThreadCtxInit(ThreadVars *, void *, void **)
initialize thread specific detection engine context
Definition: detect-engine.c:2772
DetectEngineUnsetParseMetadata
void DetectEngineUnsetParseMetadata(void)
Definition: detect-engine.c:4202
InspectionBufferSetup
void InspectionBufferSetup(DetectEngineThreadCtx *det_ctx, const int list_id, InspectionBuffer *buffer, const uint8_t *data, const uint32_t data_len)
setup the buffer with our initial data
Definition: detect-engine.c:1091
DetectBufferTypeSupportsPacketGetById
bool DetectBufferTypeSupportsPacketGetById(const DetectEngineCtx *de_ctx, const int id)
Definition: detect-engine.c:884
InspectionBufferPktInspectFunc
int(* InspectionBufferPktInspectFunc)(struct DetectEngineThreadCtx_ *, const struct DetectEnginePktInspectionEngine *engine, const struct Signature_ *s, Packet *p, uint8_t *alert_flags)
Definition: detect.h:437
DetectSigmatchListEnumToString
const char * DetectSigmatchListEnumToString(enum DetectSigmatchListEnum type)
Definition: detect-engine.c:4212
type
uint8_t type
Definition: decode-icmpv4.h:0
de_ctx
DetectEngineCtx * de_ctx
Definition: fuzz_siginit.c:17
DetectBufferTypeGetByIdTransforms
int DetectBufferTypeGetByIdTransforms(DetectEngineCtx *de_ctx, const int id, TransformData *transforms, int transform_cnt)
Definition: detect-engine.c:1288
DetectEngineReloadTenantBlocking
int DetectEngineReloadTenantBlocking(uint32_t tenant_id, const char *yaml, int reload_cnt)
Reload a tenant and wait for loading to complete.
Definition: detect-engine.c:3447
InspectionBufferCopy
void InspectionBufferCopy(InspectionBuffer *buffer, uint8_t *buf, uint32_t buf_len)
Definition: detect-engine.c:1137
DetectEngineThreadCtx_
Definition: detect.h:1003
DetectEngineReloadSetIdle
void DetectEngineReloadSetIdle(void)
Definition: detect-engine.c:1542
DetectEngineTentantUnregisterPcapFile
int DetectEngineTentantUnregisterPcapFile(uint32_t tenant_id)
Definition: detect-engine.c:3871
DetectEngineGetCurrent
DetectEngineCtx * DetectEngineGetCurrent(void)
Definition: detect-engine.c:3207
DetectBufferTypeGetDescriptionById
const char * DetectBufferTypeGetDescriptionById(const DetectEngineCtx *de_ctx, const int id)
Definition: detect-engine.c:866
DetectEngineCtxInitStubForMT
DetectEngineCtx * DetectEngineCtxInitStubForMT(void)
Definition: detect-engine.c:2013
detect.h
ThreadVars_
Per thread variable structure.
Definition: threadvars.h:58
InspectionBufferApplyTransforms
void InspectionBufferApplyTransforms(InspectionBuffer *buffer, const DetectEngineTransforms *transforms)
Definition: detect-engine.c:1192
DetectBufferTypeSupportsMpmGetById
bool DetectBufferTypeSupportsMpmGetById(const DetectEngineCtx *de_ctx, const int id)
Definition: detect-engine.c:893
DetectEngineThreadCtxDeinit
TmEcode DetectEngineThreadCtxDeinit(ThreadVars *, void *)
Definition: detect-engine.c:2980
DetectEngineDeReference
void DetectEngineDeReference(DetectEngineCtx **de_ctx)
Definition: detect-engine.c:3908
DetectEngineMustParseMetadata
int DetectEngineMustParseMetadata(void)
Definition: detect-engine.c:4207
InspectionBufferSetupMulti
void InspectionBufferSetupMulti(InspectionBuffer *buffer, const DetectEngineTransforms *transforms, const uint8_t *data, const uint32_t data_len)
setup the buffer with our initial data
Definition: detect-engine.c:1077
DetectEngineGetVersion
uint32_t DetectEngineGetVersion(void)
Definition: detect-engine.c:3188
DetectBufferGetActiveList
int DetectBufferGetActiveList(DetectEngineCtx *de_ctx, Signature *s)
Definition: detect-engine.c:954
DetectBufferTypeSupportsTransformations
void DetectBufferTypeSupportsTransformations(const char *name)
Definition: detect-engine.c:819
DetectEngineTentantUnregisterVlanId
int DetectEngineTentantUnregisterVlanId(uint32_t tenant_id, uint16_t vlan_id)
Definition: detect-engine.c:3860
Packet_
Definition: decode.h:414
DetectEngineReloadStart
int DetectEngineReloadStart(void)
Definition: detect-engine.c:1516
DetectBufferTypeSupportsPacket
void DetectBufferTypeSupportsPacket(const char *name)
Definition: detect-engine.c:799
TmEcode
TmEcode
Definition: tm-threads-common.h:79
InspectionBufferInit
void InspectionBufferInit(InspectionBuffer *buffer, uint32_t initial_size)
Definition: detect-engine.c:1067
DetectEngineAddToMaster
int DetectEngineAddToMaster(DetectEngineCtx *de_ctx)
Definition: detect-engine.c:3932
DetectEngineThreadCtxInitForReload
DetectEngineThreadCtx * DetectEngineThreadCtxInitForReload(ThreadVars *tv, DetectEngineCtx *new_de_ctx, int mt)
Definition: detect-engine.c:2835
DetectEngineTentantRegisterPcapFile
int DetectEngineTentantRegisterPcapFile(uint32_t tenant_id)
Definition: detect-engine.c:3865
DetectBufferRunValidateCallback
bool DetectBufferRunValidateCallback(const DetectEngineCtx *de_ctx, const int id, const Signature *s, const char **sigerror)
Definition: detect-engine.c:931
DetectBufferRunSetupCallback
void DetectBufferRunSetupCallback(const DetectEngineCtx *de_ctx, const int id, Signature *s)
Definition: detect-engine.c:912
flags
uint8_t flags
Definition: decode-gre.h:0
DetectPktInspectEngineRegister
void DetectPktInspectEngineRegister(const char *name, InspectionBufferGetPktDataPtr GetPktData, InspectionBufferPktInspectFunc Callback)
register inspect engine at start up time
Definition: detect-engine.c:131
InspectionBufferCheckAndExpand
void InspectionBufferCheckAndExpand(InspectionBuffer *buffer, uint32_t min_size)
make sure that the buffer has at least 'min_size' bytes Expand the buffer if necessary
Definition: detect-engine.c:1120
DetectEngineTentantRegisterLivedev
int DetectEngineTentantRegisterLivedev(uint32_t tenant_id, int device_id)
Definition: detect-engine.c:3850
DetectBufferTypeMaxId
int DetectBufferTypeMaxId(void)
Definition: detect-engine.c:688
DetectEngineSetParseMetadata
void DetectEngineSetParseMetadata(void)
Definition: detect-engine.c:4197
DetectEngineEnabled
int DetectEngineEnabled(void)
Check if detection is enabled.
Definition: detect-engine.c:3174
DetectEngineCtxInitStubForDD
DetectEngineCtx * DetectEngineCtxInitStubForDD(void)
Definition: detect-engine.c:2018
DetectEngineInspectGenericList
int DetectEngineInspectGenericList(const DetectEngineCtx *, DetectEngineThreadCtx *, const Signature *, const SigMatchData *, Flow *, const uint8_t, void *, void *, uint64_t)
Do the content inspection & validation for a signature.
Definition: detect-engine.c:1574
DetectBufferTypeCloseRegistration
void DetectBufferTypeCloseRegistration(void)
Definition: detect-engine.c:1281
tv
ThreadVars * tv
Definition: fuzz_decodepcapfile.c:29
DetectRegisterThreadCtxGlobalFuncs
int DetectRegisterThreadCtxGlobalFuncs(const char *name, void *(*InitFunc)(void *), void *data, void(*FreeFunc)(void *))
Register Thread keyword context Funcs (Global)
Definition: detect-engine.c:3118
DetectEngineMultiTenantEnabled
int DetectEngineMultiTenantEnabled(void)
Definition: detect-engine.c:3239
DetectEngineMoveToFreeList
int DetectEngineMoveToFreeList(DetectEngineCtx *de_ctx)
Definition: detect-engine.c:3948
Signature_
Signature container.
Definition: detect.h:517
DetectEngineMTApply
int DetectEngineMTApply(void)
Definition: detect-engine.c:4142
DetectEngineRegisterTests
void DetectEngineRegisterTests(void)
Definition: detect-engine.c:4508
DetectEngineCtxInitWithPrefix
DetectEngineCtx * DetectEngineCtxInitWithPrefix(const char *prefix)
Definition: detect-engine.c:2028
DetectEngineInspectPktBufferGeneric
int DetectEngineInspectPktBufferGeneric(DetectEngineThreadCtx *det_ctx, const DetectEnginePktInspectionEngine *engine, const Signature *s, Packet *p, uint8_t *alert_flags)
Do the content inspection & validation for a signature.
Definition: detect-engine.c:1681
SCInstance_
Definition: suricata.h:123
DetectBufferTypeSupportsMpm
void DetectBufferTypeSupportsMpm(const char *name)
Definition: detect-engine.c:809
DetectEngineBumpVersion
void DetectEngineBumpVersion(void)
Definition: detect-engine.c:3198
DetectSigmatchListEnum
DetectSigmatchListEnum
Definition: detect.h:88
DetectEngineAppInspectionEngineSignatureFree
void DetectEngineAppInspectionEngineSignatureFree(DetectEngineCtx *, Signature *s)
free app inspect engines for a signature
Definition: detect-engine.c:617
DetectEngineInspectBufferGeneric
int DetectEngineInspectBufferGeneric(DetectEngineCtx *de_ctx, DetectEngineThreadCtx *det_ctx, const DetectEngineAppInspectionEngine *engine, const Signature *s, Flow *f, uint8_t flags, void *alstate, void *txv, uint64_t tx_id)
Do the content inspection & validation for a signature.
Definition: detect-engine.c:1616
WARN_UNUSED
#define WARN_UNUSED
Definition: suricata-common.h:380
DetectEngineMultiTenantSetup
int DetectEngineMultiTenantSetup(void)
setup multi-detect / multi-tenancy
Definition: detect-engine.c:3582
DetectBufferTypeRegisterValidateCallback
void DetectBufferTypeRegisterValidateCallback(const char *name, bool(*ValidateCallback)(const Signature *, const char **sigerror))
Definition: detect-engine.c:921
InspectEngineFuncPtr2
int(* InspectEngineFuncPtr2)(struct DetectEngineCtx_ *de_ctx, struct DetectEngineThreadCtx_ *det_ctx, const struct DetectEngineAppInspectionEngine_ *engine, const struct Signature_ *s, Flow *f, uint8_t flags, void *alstate, void *txv, uint64_t tx_id)
Definition: detect.h:391
DetectEngineTentantRegisterVlanId
int DetectEngineTentantRegisterVlanId(uint32_t tenant_id, uint16_t vlan_id)
Definition: detect-engine.c:3855