suricata新增Mysql告警規則處理

suricata新增Mysql告警規則處理

  • 協議解析后續處理內容
  • 新增規則
  • 規則解析關鍵字新增
  • Setup用于初始化檢測項
  • Free用于資源釋放
  • AppLayerTxMatch用于協議解析完成后的規則檢測
  • 針對pcap文件進行檢測
  • 總結

協議解析后續處理內容

經過Mysql協議解析處理流程 介紹,我們在suricata中,新增加了Mysql協議處理相關的內容;
Mysql協議處理后,有兩種方式進行處理,
一是將協議解析的內容,進行結果輸出;(該內容相對比較簡單,在協議框架生成包含了相關處理內容)
二是,將解析的內容與檢測規則結合一起進行告警檢測
在這里插入圖片描述

新增規則

假設,我們需要檢測Mysql sql語句中的所有truncate 語句,并進行告警。則規則形如:

alert mysql any any -> any 3306 (msg:"test mysql detect";mysql.sql:truncate;sid:10001;rev:1;)

規則解析關鍵字新增

如果,新增了以上規則,通過suricata進行引擎分析

suricata -c suricata.yaml --engine-analysis

會提示如下錯誤:

E: detect-parse: unknown rule keyword 'mysql.sql'.
E: detect: error parsing signature "alert mysql any any -> any 3306 (msg:"test mysql detect";mysql.sql:truncate;sid:10001;rev:1;)"

首先將mysql.sql加入到引擎檢測關鍵字列表中;
在協議框架生成會生成detect-mysql-mysql.h及detect-mysql-mysql.c兩個文件。
同時DetectMysqlmysqlRegister為注冊關鍵字及檢測函數的入口,
檢測注冊代碼如下

void DetectMysqlmysqlRegister(void)
{sigmatch_table[DETECT_AL_MYSQL_MYSQL].name = "mysql.sql";sigmatch_table[DETECT_AL_MYSQL_MYSQL].desc ="Mysql content modifier to match on the mysql buffers";sigmatch_table[DETECT_AL_MYSQL_MYSQL].Setup = DetectMysqlmysqlSetup;sigmatch_table[DETECT_AL_MYSQL_MYSQL].Free = DetectMysqlmysqlFree;sigmatch_table[DETECT_AL_MYSQL_MYSQL].AppLayerTxMatch = DetectMysqlMatch;
#ifdef UNITTESTSsigmatch_table[DETECT_AL_MYSQL_MYSQL].RegisterTests = DetectMysqlmysqlRegisterTests;
#endifsigmatch_table[DETECT_AL_MYSQL_MYSQL].flags |= SIGMATCH_INFO_STICKY_BUFFER;/* register inspect engines */DetectAppLayerInspectEngineRegister2("mysql.sql", ALPROTO_MYSQL, SIG_FLAG_TOSERVER, 0,DetectEngineInspectGenericList, NULL);g_mysql_rust_id = DetectBufferTypeGetByName("mysql.sql");SCLogNotice("Mysql application layer detect registered.");
}

其中sigmatch_table,為注冊各關鍵字的全局數組。
DETECT_AL_MYSQL_MYSQL為枚舉值,在協議框架生成時自動生成在enum DetectKeywordId 中

enum DetectKeywordId {DETECT_SID,DETECT_PRIORITY,DETECT_REV,DETECT_CLASSTYPE,...,DETECT_TARGET,DETECT_AL_MYSQL_MYSQL,...DETECT_AL_TEMPLATE_BUFFER,DETECT_AL_DHCP_LEASETIME,
}

同時將DetectMysqlmysqlRegister的調用加入到SigTableSetup中

void SigTableSetup(void)
{memset(sigmatch_table, 0, sizeof(sigmatch_table));DetectSidRegister();DetectPriorityRegister();DetectPrefilterRegister();DetectRevRegister();DetectClasstypeRegister();DetectReferenceRegister();DetectTagRegister();DetectThresholdRegister();DetectMetadataRegister();...DetectMysqlmysqlRegister();/* close keyword registration */DetectBufferTypeCloseRegistration();
}

完成以上代碼注冊后,再次執行引擎分析,發現錯誤已經消失。

Setup用于初始化檢測項

此例初始化中,對應mysql.sql:truncate,在執行Setup時,需要將truncate進行緩存,后續在規則檢測時進行處理。其處理代碼如下:

int DetectMysqlmysqlSetup(DetectEngineCtx *de_ctx, Signature *s, const char *str)
{uint8_t *de = NULL;SigMatch *sm = NULL;s->init_data->list = g_mysql_rust_id;if (DetectSignatureSetAppProto(s, ALPROTO_MYSQL) != 0)return -1;sm = SigMatchAlloc();if (sm == NULL)goto error;sm->type = DETECT_AL_MYSQL_MYSQL;char *value = SCMalloc(strlen(str) + 1);strcpy(value, str);sm->ctx = (SigMatchCtx *)value;SigMatchAppendSMToList(s, sm, g_mysql_rust_id);return 0;error:if (de != NULL)SCFree(de);if (sm != NULL)SCFree(sm);return -1;return 0;
}

從以上代碼不難看出,此函數的處理,是把truncate進行了緩存處理。

Free用于資源釋放

在上一節的,初始化過程中,存在SigMatchAlloc申請資源的情況,需要在程序退出前執行資源釋放

void DetectMysqlmysqlFree(DetectEngineCtx *de_ctx, void *de_ptr)
{if (de_ptr != NULL)SCFree(de_ptr);
}

AppLayerTxMatch用于協議解析完成后的規則檢測

sigmatch_table[DETECT_AL_MYSQL_MYSQL].AppLayerTxMatch = DetectMysqlMatch;
此處注冊的函數DetectMysqlMatch,在Mysql協議解析過程中的每個Transaction都會執行一次檢測;本例中,相當于每執行一條sql語句就會執行一遍。
函數定義如下

static int DetectMysqlMatch(DetectEngineThreadCtx *det_ctx,Flow *f, uint8_t flags, void *state,void *txv, const Signature *s,const SigMatchCtx *ctx) {uint8_t ret = 0;const uint8_t *data = NULL;uint32_t data_len = 0;SCLogDebug("DetectMysqlMatch: flags %d, txv %p, s %p, ctx %p", flags, txv, s, ctx);if (flags & STREAM_TOSERVER) {rs_mysql_get_request_buffer(txv, &data, &data_len);} else if (flags & STREAM_TOCLIENT) {rs_mysql_get_response_buffer(txv, &data, &data_len);      }SCLogDebug("DetectMysqlMatch: flags %d, txv %p, s %p, ctx %p done", flags, txv, s, ctx);if (data != NULL) {char* de = (char *)ctx;char *stripped_data = strip((const char *)data);return startsWith((const char *)stripped_data, de) ;}return 0;
}

其中rs_mysql_get_request_buffer,rs_mysql_get_response_buffer是rust中根據解析的內容,并返回緩存的函數。
其定義如下:

pub unsafe extern "C" fn rs_mysql_get_request_buffer(tx: *mut c_void, buf: *mut *const u8, len: *mut u32,
) -> u8 {let tx = cast_pointer!(tx, MysqlTransaction);if let Some(ref request) = tx.request {match request {MysqlFEMessage::SimpleQuery(quey) => {// If we have a login request, we can return the request buffer.if !quey.is_empty() {*len = quey.len() as u32;*buf = quey.as_ptr();return 1; // success}}_ => {return 0;}}}return 0;
}

此處,我們只返回了SimpleQuery對應的sql語句,正好對應了mysql.sql,對于其他關鍵字,可以根據實際情況進行修改,比如,檢測使用超級用戶(root/admin)進行遠程登錄,其檢測規則就需要修改成mysql.login_user:root;而后增加相應的規則處理即可。
此外,在檢測之前,執行了strip操作,是因為;默認sql語句前面會增加一些注釋,所以執行strip先去除注釋內容,而后使用startsWith函數進行檢測。(更嚴謹的做法,可能需要對sql語句進行語法分析后再檢測;待完善–)

針對pcap文件進行檢測

完成以上步驟后,使用pcap文件檢驗規則是否能產生告警

suricata -c suricata.yaml -k none -r mysql.pcap 

打開eve.json后,查看alert情況

{"time":"2025-07-09T09:32:25.481582+0000","timestamp":1752053545481,"flow_id":"2036907348195717","pcap_cnt":54,"alarm_type":"alert","src_ip":"10.1.30.200","src_port":54366,"dest_ip":"10.1.1.3","dest_port":3306,"proto":"TCP","pkt_src":"wire/pcap","event_id":"ec830925-9c01-434c-9651-5e43c836da5f","tx_id":9,"alert":{"action":"allowed","gid":1,"signature_id":10001,"classification":"","rev":1,"signature":"test mysql detect","category":"","severity":3,"attack_result":"attempt","severity":3,"sid":10001},"tx_id":10,"request":{"message":"SimpleQuery","query":"/* ApplicationName=DBeaver 24.1.3 - SQLEditor <Script-17.sql> */ truncate tb_attack_20250111"},"protocol":"mysql","direction":"to_server","flow":{"pkts_toserver":35,"pkts_toclient":19,"bytes_toserver":5220,"bytes_toclient":11003,"start":"2025-07-09T09:31:27.146574+0000","src_ip":"10.1.30.200","dest_ip":"10.1.1.3","src_port":54366,"dest_port":3306}}

總結

通過以上操作,即完成了Mysql協議一條告警規則的新增及處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89921.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用位運算優化 Vue.js 應用:高效狀態管理技巧

在 Vue.js 開發中&#xff0c;位運算&#xff08;Bitwise Operations&#xff09;是一種高效的工具&#xff0c;尤其適用于需要管理大量布爾狀態或優化性能的場景。位運算通過操作二進制位來實現狀態的存儲和檢查&#xff0c;相比傳統的數組或對象操作&#xff0c;內存占用更低…

【Java SE】Clonable接口和深拷貝

目錄 一.Clonable接口 實現步驟&#xff1a; 完整代碼&#xff1a; 二.深拷貝 實現步驟&#xff1a; 完整代碼&#xff1a; 淺拷貝與深拷貝的對比 使用場景建議 完 淺拷貝&#xff08;Shallow Copy&#xff09;和深拷貝&#xff08;Deep Copy&#xff09;是對象復制的兩…

accelerate 在Pycham中執行的設置方法

背景 使用 accelerate 進行分布式代碼訓練時&#xff0c;需要在pycharm中進行調試&#xff0c;此時需要在pycharm中運行。 終端執行命令 # *[Specify the config file path and the GPU devices to use] export CUDA_VISIBLE_DEVICES0# *[Specify the config file path] expo…

探索量子計算與法律理論的交叉領域

文章目錄 前言 一、引言 二、內容 (一)知識產權 (二)隱私與安全 (三)責任認定 (四)證據與證明 (五)法律推理與決策 三、結論 總結 前言 隨著量子計算技術的突破性發展,其引發的法律范式重構問題日益凸顯。烏茲別克斯坦學者伊索姆別克?阿卜迪哈基莫夫于2024年在《量…

js迭代器

文章目錄前言實現原理&#xff1a;調用迭代器自制迭代器前言 迭代器是 JSt 中一種特殊的對象&#xff0c;它提供了一種統一的、通用的方式遍歷個各種不同類型的數據結構。 可以遍歷的數據結構包括&#xff1a;數組、字符串、Set、Map 等可迭代對象。我們也可以自定義實現迭代器…

chainlink VRF中文教程(含mock),解決error: Arithmetic Underflow in createSubscription

?我使用的版本&#xff1a;chainlink-brownie-contracts version:1.3.0?1. Import 相關包 ,,, import {VRFConsumerBaseV2Plus} from "chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2PLUS.sol"; import {VRFV2PlusClient} from "chainlink/contract…

非線性優化框架CasADi工具箱求解最優控制問題OCP

CasADi是一個開源的Python/MATLAB庫&#xff0c;主要用于數值優化&#xff0c;特別是最優控制問題。它提供了一個易于使用的符號框架&#xff0c;用于處理和生成表達式&#xff0c;以及高效地生成導數信息。 https://web.casadi.org/get/https://web.casadi.org/get/ 所有OCP…

Type-C接口臺式顯示器:LDR6021引領新潮流

Type-C單口便攜顯示器LDR6021是市場上一種新興的顯示設備&#xff0c;以下是對其的詳細介紹一、主要特點 便攜性:LDR6021采用了Type-C接口作為數據傳輸和供電接口&#xff0c;這種設計使得它能夠與各種支持Type-C接口的設備無縫連接&#xff0c;如筆記本電腦、智能手機、平板電…

在翻譯語義相似度和會議摘要相似度評估任務中 ,分類任務 回歸任務 生成任務區別

在翻譯語義相似度&#xff08;Translation Semantic Similarity&#xff09;和會議摘要相似度&#xff08;Meeting Summary Similarity&#xff09;等任務中&#xff0c;通常會根據任務的目標和輸出形式&#xff0c;將其劃分為三類常見的任務類型&#xff1a;1. 分類任務定義&a…

UGUI 性能優化系列:第二篇——Canvas 與 UI 元素管理

UGUI 性能優化系列&#xff1a;第一篇——基礎優化與資源管理 UGUI 性能優化系列&#xff1a;第二篇——Canvas 與 UI 元素管理 UGUI 性能優化系列&#xff1a;第三篇——渲染與像素填充率優化 UGUI 性能優化系列&#xff1a;第四篇——高級優化與注意事項 在 UGUI 性能優化…

企業開發轉型 | 前端AI化數字化自動化現狀

文章目錄前端AI化數字化自動化發展現狀引言調研背景與目的調研范圍與方法前端AI化技術現狀與工具生態主流AI工具分類與能力矩陣工具能力對比分析關鍵能力指標深度解析大模型技術成熟度評估前端AI化核心應用場景與人力優化路徑代碼生成與自動化開發設計到代碼全鏈路自動化自動化…

Mysql(運維-日志)

黑馬mysql筆記 最好開兩個窗口&#xff0c;一個用于mysql命令&#xff0c;一個用于liunx命令 目錄 錯誤日志 二進制日志 介紹 日志格式 mysq默認二進制日志文件為ROW 日志查看 二進制日志查看命令 默認日志文件格式下查看日志內容 更改日志文件格式查看日志內容 日志…

RabbitMQ:解鎖高效消息傳遞的密碼[特殊字符]

目錄 一、RabbitMQ 核心概念 1.1整體框架 1.2元素詳解 1.2.1 生產者&#xff08;Producer&#xff09;&消費者&#xff08;Consumer&#xff09; 1.2.2 交換機&#xff08;Exchange&#xff09; ①fanout &#xff08;廣播型&#xff09; ②direct &#xff08;直連型…

StarRocks × MinIO:打造靈活高效的存算分離方案

“存算分離”&#xff08;Decoupled Storage and Compute&#xff09;是一種在現代數據系統中被廣泛采用的架構設計。它將計算和存儲解耦&#xff0c;使二者可以獨立擴展&#xff0c;提升資源利用率并降低運維成本。StarRocks 從 3.0 版本開始支持這一架構&#xff0c;允許用戶…

R語言的分位數回歸實踐技術高級應用

回歸是科研中最常見的統計學研究方法之一&#xff0c;在研究變量間關系方面有著極其廣泛的應用。由于其基本假設的限制&#xff0c;包括線性回歸及廣義線性回歸在內的各種常見的回歸方法都有三個重大缺陷&#xff1a;(1)對于異常值非常敏感&#xff0c;極少量的異常值可能導致結…

Tomcat的部署、單體架構、session會話、spring

一、Tomcat的部署①②③④⑤二.web項目在tomcat服務中如何運行&#xff1a;1.web項目源碼部署在服務器的webapps目錄里面2.將web項目打包(war),部署在服務器的webapps目錄里面。三 單體架構和前后端分離單體架構是將所有功能模塊&#xff08;包括前端界面、后端邏輯、數據庫交互…

海康威視視覺算法崗位30問及詳解

海康威視視覺算法崗位30問及詳解 前言 視覺算法工程師是人工智能領域的熱門崗位&#xff0c;尤其在安防、自動駕駛、工業檢測等行業有著廣泛應用。海康威視作為行業龍頭&#xff0c;對視覺算法崗位的要求較高&#xff0c;面試問題既考察基礎理論&#xff0c;也關注工程實現。本…

14.7 Alpaca格式深度解析:3倍指令準確率提升的LLM微調秘訣

文章目錄 Alpaca格式深度解析:3倍指令準確率提升的LLM微調秘訣 指令微調格式:Alpaca Format 深度解析 14.3.1 Alpaca 格式誕生背景與技術價值 14.3.2 Alpaca 格式結構解析 14.3.3 實戰 Dolly-15K 數據轉 Alpaca 格式 14.3.4 Alpaca 格式的工程化實踐 14.3.5 格式擴展與挑戰應…

42.sentinel實現線程隔離

線程隔離有兩種實現方式: 1.線程池隔離 優點: 1.支持主動超時,線程池中的線程都是可控的,可以停掉某個線程。 2.支持異步調用,每個請求都是一個獨立的線程,線程之間不受影響。 缺點: 線程的額外開銷比較大 適用場景: 低扇出(一個微服務,不會依賴很多微服務)…

【過擬合和欠擬合】——深度學習.全連接神經網絡

目錄 1 概念認知 1.1 過擬合 1.2 欠擬合 1.3 如何判斷 2 解決欠擬合 3 解決過擬合 3.1 L2正則化 3.1.1 數學表示 3.1.2 梯度更新 3.1.3 作用 3.1.4 代碼實現 3.2 L1正則化 3.2.1 數學表示 3.2.2 梯度更新 3.2.3 作用 3.2.4 與L2對比 3.2.5 代碼實現 3.3 Drop…