|
|
|
@ -66,8 +66,7 @@ static int DetectFileMd5SetupNoSupport (DetectEngineCtx *a, Signature *b, char *
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
void DetectFileMd5Register(void) {
|
|
|
|
void DetectFileMd5Register(void) {
|
|
|
|
sigmatch_table[DETECT_FILEMD5].name = "filemd5";
|
|
|
|
sigmatch_table[DETECT_FILEMD5].name = "filemd5";
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Match = NULL;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].FileMatch = NULL;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].AppLayerMatch = NULL;
|
|
|
|
|
|
|
|
sigmatch_table[DETECT_FILEMD5].alproto = ALPROTO_HTTP;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].alproto = ALPROTO_HTTP;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Setup = DetectFileMd5SetupNoSupport;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Setup = DetectFileMd5SetupNoSupport;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Free = NULL;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Free = NULL;
|
|
|
|
@ -79,18 +78,18 @@ void DetectFileMd5Register(void) {
|
|
|
|
|
|
|
|
|
|
|
|
#else /* HAVE_NSS */
|
|
|
|
#else /* HAVE_NSS */
|
|
|
|
|
|
|
|
|
|
|
|
int DetectFileMd5Match (ThreadVars *, DetectEngineThreadCtx *, Flow *, uint8_t, void *, Signature *, SigMatch *);
|
|
|
|
static int DetectFileMd5Match (ThreadVars *, DetectEngineThreadCtx *,
|
|
|
|
|
|
|
|
Flow *, uint8_t, File *, Signature *, SigMatch *);
|
|
|
|
static int DetectFileMd5Setup (DetectEngineCtx *, Signature *, char *);
|
|
|
|
static int DetectFileMd5Setup (DetectEngineCtx *, Signature *, char *);
|
|
|
|
void DetectFileMd5RegisterTests(void);
|
|
|
|
static void DetectFileMd5RegisterTests(void);
|
|
|
|
void DetectFileMd5Free(void *);
|
|
|
|
static void DetectFileMd5Free(void *);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* \brief Registration function for keyword: filemd5
|
|
|
|
* \brief Registration function for keyword: filemd5
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
void DetectFileMd5Register(void) {
|
|
|
|
void DetectFileMd5Register(void) {
|
|
|
|
sigmatch_table[DETECT_FILEMD5].name = "filemd5";
|
|
|
|
sigmatch_table[DETECT_FILEMD5].name = "filemd5";
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Match = NULL;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].FileMatch = DetectFileMd5Match;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].AppLayerMatch = DetectFileMd5Match;
|
|
|
|
|
|
|
|
sigmatch_table[DETECT_FILEMD5].alproto = ALPROTO_HTTP;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].alproto = ALPROTO_HTTP;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Setup = DetectFileMd5Setup;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Setup = DetectFileMd5Setup;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Free = DetectFileMd5Free;
|
|
|
|
sigmatch_table[DETECT_FILEMD5].Free = DetectFileMd5Free;
|
|
|
|
@ -158,22 +157,24 @@ static int MD5MatchLookupString(ROHashTable *hash, char *string) {
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* \brief match the specified filemd5
|
|
|
|
* \brief match the specified filemd5
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* \param t pointer to thread vars
|
|
|
|
* \param t thread local vars
|
|
|
|
* \param det_ctx pointer to the pattern matcher thread
|
|
|
|
* \param det_ctx pattern matcher thread local data
|
|
|
|
* \param p pointer to the current packet
|
|
|
|
* \param f *LOCKED* flow
|
|
|
|
* \param m pointer to the sigmatch that we will cast into DetectFileMd5Data
|
|
|
|
* \param flags direction flags
|
|
|
|
|
|
|
|
* \param file file being inspected
|
|
|
|
|
|
|
|
* \param s signature being inspected
|
|
|
|
|
|
|
|
* \param m sigmatch that we will cast into DetectFileMd5Data
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* \retval 0 no match
|
|
|
|
* \retval 0 no match
|
|
|
|
* \retval 1 match
|
|
|
|
* \retval 1 match
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
int DetectFileMd5Match (ThreadVars *t, DetectEngineThreadCtx *det_ctx, Flow *f, uint8_t flags, void *state, Signature *s, SigMatch *m)
|
|
|
|
static int DetectFileMd5Match (ThreadVars *t, DetectEngineThreadCtx *det_ctx,
|
|
|
|
|
|
|
|
Flow *f, uint8_t flags, File *file, Signature *s, SigMatch *m)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
SCEnter();
|
|
|
|
SCEnter();
|
|
|
|
int ret = 0;
|
|
|
|
int ret = 0;
|
|
|
|
DetectFileMd5Data *filemd5 = (DetectFileMd5Data *)m->ctx;
|
|
|
|
DetectFileMd5Data *filemd5 = (DetectFileMd5Data *)m->ctx;
|
|
|
|
|
|
|
|
|
|
|
|
File *file = (File *)state;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (file->txid < det_ctx->tx_id) {
|
|
|
|
if (file->txid < det_ctx->tx_id) {
|
|
|
|
SCReturnInt(0);
|
|
|
|
SCReturnInt(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -211,7 +212,7 @@ int DetectFileMd5Match (ThreadVars *t, DetectEngineThreadCtx *det_ctx, Flow *f,
|
|
|
|
* \retval filemd5 pointer to DetectFileMd5Data on success
|
|
|
|
* \retval filemd5 pointer to DetectFileMd5Data on success
|
|
|
|
* \retval NULL on failure
|
|
|
|
* \retval NULL on failure
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
DetectFileMd5Data *DetectFileMd5Parse (char *str)
|
|
|
|
static DetectFileMd5Data *DetectFileMd5Parse (char *str)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DetectFileMd5Data *filemd5 = NULL;
|
|
|
|
DetectFileMd5Data *filemd5 = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
@ -341,7 +342,7 @@ error:
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* \param filemd5 pointer to DetectFileMd5Data
|
|
|
|
* \param filemd5 pointer to DetectFileMd5Data
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
void DetectFileMd5Free(void *ptr) {
|
|
|
|
static void DetectFileMd5Free(void *ptr) {
|
|
|
|
if (ptr != NULL) {
|
|
|
|
if (ptr != NULL) {
|
|
|
|
DetectFileMd5Data *filemd5 = (DetectFileMd5Data *)ptr;
|
|
|
|
DetectFileMd5Data *filemd5 = (DetectFileMd5Data *)ptr;
|
|
|
|
if (filemd5->hash != NULL)
|
|
|
|
if (filemd5->hash != NULL)
|
|
|
|
|