1、前言
最近工作需要對網站的關鍵字進行檢測,找出敏感詞。這個過程需要對報文進行收集、解碼、檢測和記錄日志。當前只是簡單實現(xiàn)功能,根據(jù)關鍵字進行簡單的匹配,而沒有進行關鍵字的語義分析。導致的結果就是JAVA可以匹配AV這個敏感關鍵字。報文檢測這方面,開源項目已經做得非常好了,我所了解的有snort、suircata、bro,這三個都是非常優(yōu)秀的IDS(入侵檢測系統(tǒng))。由于對bro沒有深入了解,我們對比了snort和suricata,結合suricata的多線程和模塊化,全面兼容snort規(guī)則,我們選用了suricata進行關鍵字檢測。
剛開始接觸suricata的時候,壓根不知道這個單詞怎么發(fā)音,于是乎趕緊再詞典上查一下。suircata是一款支持IDS、IPS和NSM的系統(tǒng)。關于suircata的詳細介紹可以參考官網:https://suricata-ids.org/。
備注:
IDS:英文“Intrusion Detection Systems”的縮寫,中文意思是“入侵檢測系統(tǒng)”。依照一定的安全策略,通過軟、硬件,對網絡、系統(tǒng)的運行狀況進行監(jiān)視,盡可能發(fā)現(xiàn)各種攻擊企圖、攻擊行為或者攻擊結果,以保證網絡系統(tǒng)資源的機密性、完整性和可用性。
IPS是英文“Intrusion Prevention System”的縮寫,中文意思是入侵防御系統(tǒng)。隨著網絡攻擊技術的不斷提高和網絡安全漏洞的不斷發(fā)現(xiàn),傳統(tǒng)防火墻技術加傳統(tǒng)IDS的技術,已經無法應對一些安全威脅。在這種情況下,IPS技術應運而生,IPS技術可以深度感知并檢測流經的數(shù)據(jù)流量,對惡意報文進行丟棄以阻斷攻擊,對濫用報文進行限流以保護網絡帶寬資源。
NSM:英文“network security monitoring”的縮寫,中文意思是“網絡安全監(jiān)控”。
2、總體架構
報文檢測系統(tǒng)通常四大部分,報文獲取、報文解碼、報文檢測、日志記錄;suricata不同的功能安裝模塊劃分,一個模塊的輸出是另一個模塊的輸入,suricata通過線程將模塊串聯(lián)起來。
接下來以IDS為例來說明suircata的線程與模塊之間是如何連接起來的。
首先注冊runmods,運行方式指定suricata獲取報文的方式,例如libpcap、netmap、af-packet等,代碼如下圖所示:
然后再根據(jù)設置suricata的工作模式,找到對應獲取報文的處理模塊。suircata默認是通過af-packet mmap獲取報文,然后調用獲取報文模塊當然入口函數(shù),
入口函數(shù)中函數(shù)添加了解碼模塊、流處理模塊(檢測報文)、日志處理模塊。通過slot鏈條安裝注冊順序串聯(lián)起來。每一個線程都包含一個slot的鏈表,每個結點都懸掛著不同的模塊,程序執(zhí)行的時候會遍歷slot鏈表,按照加入鏈表的熟悉執(zhí)行模塊。
創(chuàng)建線程,并將模塊添加到slot鏈表過程代碼如下所示: