[點晴永久免費OA]ModSecurity:免費開源 WAF(WEB網站應用防火墻)簡介
當前位置:點晴教程→點晴OA辦公管理信息系統
→『 經驗分享&問題答疑 』
1 ModSecurity 簡介 ModSecurity是一個入侵偵測與防護引擎,它主要是用于Web 應用程序,所以也被稱為Web應用程序防火墻。 它可以作為Apache Web服務器的模塊或是單獨的應用程序來運作。ModSecurity的功能是增強Web application的安全性和保護Web application以避免遭受來自已知與未知的攻擊。 ModSecurity計劃是從2002年開始,后來由Breach Security Inc.收購,但Breach Security Inc.允諾ModSecurity仍舊為open source,并開放源代碼給大家使用。最新版的ModSecurity(一個開源的Web應用防火墻,即WAF)開始支持核心規則集(Core Rule Set,即CRS,可用于定義旨在保護Web應用免受零日及其他安全攻擊的規則)了。ModSecurity團隊發布的2.5.10 版還包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡號檢測等,同時還支持內容注入、自動化的規則更新和腳本等內容。可以通過ModSecurity手工創建安全過濾器、定義攻擊并實現主動的安全輸入驗證。此外,它還提供了一個面向Lua語言的新的API,為開發者提供一個腳本平臺以實現用于保護Web應用的復雜邏輯。 ModSecurity的運作設計有以下的基礎概念: l 讓使用者可以做任何想做的事情(Empower users to do what they want) l 使用者設定的動作才會執行(Don’t do anything implicitly) l 預設是不做任何動作(Be passive) ModSecurity的部署架構 l 與Web Server結合 。 l 與Apache結合部署為網關,當作一個反向代理。 總結: ModSecurity是一個Web應用防火墻(WAF)。當前已經有超過70%的攻擊發生在網絡應用層,各級組織急需要能夠保證他們的系統安全性的幫助。WAF系統的部署,可以為web應用增加一個外部安全層來檢測或防止攻擊。針對一系列的攻擊,ModSecurity為web應用提供了強大的保護,并對HTTP流量進行監測和實時分析,這些都只是很少或是根本沒有影響系統的基礎設施。 HTTP流量記錄 web服務器已有的日志功能已經足夠進行訪問請求分析,但是就web的應用分析還有些不足,特別是大多情況下沒辦法記錄下請求體。你的對手很清楚這一點,所以很多時候的攻擊是通過POST請求產生,并導致您的系統失明。ModSecurity充分的獲取HTTP交互中的所以內容,并記錄完整的請求和響應。其日志功能可以允許您更細致的做出判斷究竟什么是登錄的時候,并確保相關的數據都被記錄下來。一些請求和響應中的某些關鍵字段可能包含敏感數據,ModSecurity可以被配置成在記錄這些審計日志前隱藏它。 實時監控和攻擊檢測 除了提供記錄日志功能外,ModSecurity還能實時的監控HTTP的流量以檢測攻擊。在某些時候,ModSecurity做為一個WEB入侵檢測工具,可以讓你對發生在WEB系統上的一些可疑事件做出響應。 攻擊防御和及時修補 ModSecurity能夠立即針對你的WEB應用系統進行攻擊防御,有三種通用的方法: 1、消極(negative)安全模型:消極安全模型監控那些異常的、不常用的和通用的WEB攻擊類請求。它統計每個請求的有關IP地址、應該連接、和用戶帳戶的異常分數,當出現較高的異常分數時,會記錄日志并完全的阻止訪問。 2、積極安全模開型:部署積極安全模型后,只有那些明確的請求被允許通過,其它的一律禁止。這個模式要求你對需要保護的WEB應用要非常的了解。因此積極安全模式最好是用于那種大量訪問卻很少更新的系統,這樣才能使這種模型的維護工作量降到最低。 3、已知漏洞攻擊:其規則語言使ModSecurity成為一個理想的外部修補工具,外部修補(有時是指虛擬修補)可以減少機會之窗。一些組織修補這些應用的漏洞通常需要幾周的時間,使用ModSecurity,應用系統可以從外部修補,根本不用改應用的源碼(甚至時不用去管它),可以保證你的系統安全直到有一個合適的補丁來應用到系統中。 靈活的規則引擎 靈活的規則引擎是ModSecurity的核心,其實現了ModSecurity的規則語言,這是一個專用的程序語言設計的用于處理HTTP的傳輸數據。ModSecurity規則語言被設計的簡單易用,非常的靈活:通用的操作是簡單的,而復雜的操作也是可以實現的。經過認證的ModSecurity規則,放在ModSecurity中,包含了一整套規則,它實現了通用目的強化、協議正規化和對一些通用web應用安全問題的檢測。大量評論認為,這些規則可以用于學習研究使用。 嵌入式模式部署 ModSecurity是一個可嵌入式的WEB應用防火墻,意思就是它可以做為以apache為基礎的已經提供WEB服務的WEB服務器的一部分。這樣的部署譯意風一些特殊的優勢: 1、不改變已有的網絡結構。只需要花幾分鐘就可以為你的WEB服務器添加ModSecurity,而且由于它默認被設計為完全的被動方式,你可以自由的逐步部署并且只使用你需要的特性。同樣也可以根據你的需要輕松的刪除或停用它。 2、不存在單點故障。與網絡設備部署方式不同,你不會給你的系統帶來新的故障點。 3、絕對支持負載均衡。因為它以嵌入方式運行在WEB服務器上,ModSecurity會自動的利用附加的負載均衡特性。你不需要考慮負載均衡,除非你的系統本來就需要它。 4、極少開銷。因為它在WEB服務器進程內工作,不會帶來網絡間接通信的負載,而且只進行最小的分析和數據交換開銷。 5、加密或壓縮內容沒問題。許多IDS系統分析SSL流量的時候很困難,但對于ModSecurity沒有麻煩,因為它工作于已解密和解壓的數據環節。 基于網絡的部署 在基于apache的反向代理模式上ModSecurity同樣能工作的很好,我們很多客戶選擇這樣做。在這種情形下,裝了ModSecurity的可以保護任一一種WEB服務器(即使它不是apache的)。 可移植性 眾所周知,ModSecurity可以很好的工作在眾多操作系統上,已經將它成功運行在Linux, Windows, Solaris, FreeBSD, OpenBSD, NetBSD, AIX, Mac OS X, 和HP-UX等系統上。 1.了解mod_security 配置文件 /etc/httpd/conf.d/mod_security.conf :mod_security模塊主配置文件 /etc/httpd/modsecurity.d/ – 配置文件目錄。 /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf – 特別配置文件 /var/log/httpd/modsec_debug.log –調試文件日志。 /var/log/httpd/modsec_audit.log ModSecurity報警信息文件。 查看/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf 確保下面有一行: SecRuleEngine On 2.設置mod_security 上述的步驟只是將Mod Security啟動而已,但實際上并不會為你的web服務器做任何的防護動作;因此需要額外設定才會讓Mod Security發揮功能,此部分將會對如何設定Mod Security做一個說明。 下面開始介紹Mod Securit的四種主要的設定指令。 (1)一般的設定,包括裝規則引擎(rule engineer)開啟等基本指令,常見的設定如下: #Basic configuration options # 打開過濾引擎開關。如果是Off,那么下面這些都不起作用了。 SecRuleEngine On #配置是否讓ModSecurity默認處理或緩沖請求體 SecRequestBodyAccess On #配置ModSecurity允許的最大請求體的緩存區大小 SecResponseBodyAccess On #配置攔截文件存儲的目錄 SecUploadDir /opt/apache-fronted/tmp/ #配置是否保存事務處理后的攔截文件 SecUploadKeepFiles Off #配置ModSecurity允許的最大請求體的緩存區 SecRequestBodyLimit 131072 #配置ModSecurity使用內存保存的最大請求體大小 SecRequestBodyInMemoryLimit 131072 #配置ModSecurity允許的最大請求體的緩存區大小,除了請求中正在傳送的文件大小。這項指令便于在受到某些使用大尺寸請求進行DoS攻擊時減少影響。提供上傳文件服務的WEB應用必須配置SecRequestBodyLimit為一個很大的值。由于大文件直接進行磁盤文件存取,不會加大內存的消耗。但是,仍然有可能有人利用超大請求體限制和發送大量大小的非上傳請求。該指令消除這一漏洞。 SecResponseBodyLimit 524288 (2)設定Mod Security如何執行調試的日志部分,常見的設定如下: #指定ModSecurity調試日志文件的路徑 SecDebugLog logs/modsec_debug.log #配置冗長的調試日志數據 SecDebugLogLevel 0 (3) 設定Mod Security如何執行審計的日志部分,常見的設定如下: #定義主審計日志文件 SecAuditEngine RelevantOnly SecAuditLogRelevantStatus ^5 SecAuditLogParts ABIFHZ SecAuditLogType Serial SecAuditLog logs/modsec_audit.log (4) Rules Mod Security最主要的設定部分,是一個以事件為基礎的語言。 語法:SecRule VARIABLES OPERATOR [ACTIONS] VARIABLES:指定哪些變量要進行處理 OPERATOR:要如何處理這些變量取得我們想要的 ACTIONS (optional):當達到上述的處理時,要做什么動作 (5)Rule處理的階段 ModSecurity 2.x允許把規則置于下述五個階段之一: 請求頭(REQUEST_HEADERS) 階段 這個階段的規則會在apache完成請求頭的讀取后立即被執行(post-read-request階段),這時,還沒有讀取請求體,意味著不是所有的參數都可用。如果你必須讓規則盡早運行,應把規則放在這個階段(在apache使用這個請求做某些事前),在請求體被讀取前做些事情,從而決定是否緩存這個請求體,或者決定你將希望這個請求體如何被處理(如是否以XML格式解析或不解析)。 請求體(REQUEST_BODY) 階段 這是通用輸入分析階段,大部分傳統的應用規則不在這兒,這個階段你肯定能收到參數(只有讀取過請求體后),在請求體階段,ModSecurity支持三種編碼類型。 l application/x-www-form-urlencoded – used to transfer form data l multipart/form-data – used for file transfers l text/xml – used for passing XML data 大部分WEB應用還沒有使用其它的編碼方法。 響應頭(RESPONSE_HEADERS) 階段 發生在響應頭被發送到客戶端之前,如果你想觀察響應發生前就在這兒運行,如果你想使用響應頭來決定你是否想緩存響應體也行。注意一些響應狀態碼(如404)在請求環的早期就被apache管理著,我也無法觸發預期。加上apache在后面的勾子上雙增加了一些響應頭(如日期、服務器和連接信息等),這些我們無法觸發和審查。在代理配置模式下或使用phase:5(logging)工作的較好。 響應體(RESPONSE_BODY) 階段 這是通用輸出分析階段,這里你能運行規則截斷響應體(當然提供緩存)。這個階段你想檢查輸出的HTML信息公布、錯誤消息和失敗的驗證文字。 記錄(LOGGING) 階段 在日志發生前運行的一個階段,放在這個階段的規則只能影響日志記錄器如何執行,這個階段可以檢測apache記錄的錯誤消息,在這個階段你不能拒絕或阻斷連接,因為太遲了,這個階段也允許檢測其它的響應頭,如那在phase:3或者phase:4階段中不可用的。注意在這個階段,你應當小心不要繼承破壞性的動作到規則中,這樣的情況在ModSecurity2.5.0及其以后的版本中被當作配置錯誤。 (6)Rules 簡介 SecRule是ModSecurity主要的指令,用于分析數據并根據結果執行動作。通常規則的格式如下: SecRule VARIABLES OPERATOR [ACTIONS] l VARIABLES 規則中的變量 第一部分,VARIABLES描述哪個變量被檢查,舉個例子,下述規則會拒絕URI中含有單詞dirty的事務。 SecRule ARGS dirty 每條規則可以指定一個或多個變量 SecRule ARGS|REQUEST_HEADERS:User-Agent dirty XPath格式是選擇操作的第三方支持格式。XPath格式僅能針對特殊變量XML使用,只有請求體使用XML格式時可用。 SecRule XML:/xPath/Expression dirty 注意:不是所有的集合支持選擇操作格式類型,你需要參考各個集合的文檔來決定是否支持。 一些常見的變量: ARGS、ARGS_NAMES、ARGS_GET、ARGS_GET_NAMES、ARGS_POST、ARGS_POST_NAMES AUTH_TYPE REQBODY_PROCESSOR、REQBODY_PROCESSOR_ERROR FILES、FILES_NAMES、FILE_SIZES REMOTE_ADDR、REMOTE_HOST、REMOTE_PORT REQUEST_BODY、REQUEST_COOKIES、REQUEST_COOKIES_NAMES、REQUEST_FILENAME RESPONSE_BODY Rule中的變量部分可以一個以上, 以”|”來區隔即可,如果設定的規則超過多行,則可用”\”來進行分隔。 l OPERATOR 第二部分,OPERATOR描述如何進行檢查。OPERATOR是正則表達式(Regular Expression),但其實ModSecurity提供不少可用的OPERATOR,利用”@”即可指定要用何種OPERATOR,例如SecRule REQUEST_URI “@rx iii”。 以下是一些范例: SecRule REMOTE_ADDR “^192\.168\.1\.101$” REMOTE_ADDR:指定變量對象為遠程聯機的IP地址 “^192\.168\.1\.101$”:針對上述的變量進行比對,如果非192.168.1.101,則符合,可指定要做何種動作 SecRule ARGS “@validateUtf8Encoding” ARGS:指定變數為http傳遞的參數 “@validateUtf8Encoding”:指定OPERATOR為對這些參數進行Utf8編碼進行檢查 SecRule FILES_TMPNAMES “@inspectFile /path/to/inspect_script.pl” FILES_TMPNAMES:指定變量為上傳檔案的暫存名稱 “@inspectFile /path/to/inspect_script.pl”:指定利用inspect_script.pl檔案的語法來檢查上傳檔案 l ACTIONS 第三部分可選的,ACTIONS,描述當操作進行成功的匹配一個變量時具體怎么做。指定如果VARIABLE有符合OPERATOR的情況時,要執行何種動作。ACTIONS主要區分為五種型態: (1)Disruptive actions (中斷目前的處理) deny、drop、redirect、proxy、pause… (2)Non-disruptive actions (改變狀態) Append、auditlog、exec… (3)Flow actions (改變規則流動) allow、chain、pass、skip… (4)Meta-data actions (包含規則的metadata) id、rev、severity、msg、phase、log, nolog、… (5)Data actions (可放置內容給其它action用) capture、status、t、xmlns… 5 使用例子 SecRule REQBODY_PROCESSOR_ERROR “!@eq 0“ “phase:2,log,deny,msg:’Failed to parse request body.’,severity:2“ 說明: REQBODY_PROCESSOR_ERROR:指定針對request body發生的進程發生的錯誤的代碼 “!@eq 0“:當不等于0時,即有錯誤發生時 處理動作 “phase:2,log,deny,msg:’Failed to parse request body.’,severity:2“ phase:2:由于對象為request body,因此指定在phase:2進行 log:當情況符合(發生錯誤),將錯誤記錄 deny:將這個處理拒絕 msg:’Failed to parse request body’:網頁上并顯示出這樣的錯誤訊息 severity:2:將此狀況列為嚴重程度為2 6 (ModSecurity Core Rules) 核心規則內容 ModSecurity是一個WEB應用防火墻引擎,自身所提供的保護非常少。為了變得更有用些,ModSecurity必須啟用規則配置。為了讓用戶能夠充分利用ModSecurity離開方塊,Breach Security, Inc.為ModSecurity 2.x提供了一套免費的認證規則集。和入侵檢測及防御系統不一樣,它們依賴于具體的簽名過的已知漏洞,而這一核心規則卻是為從網絡應用中發現的不知名的漏洞提供一般的保護,通常這些漏洞大多數情況下都是自定義編碼的。這一核心規則有了大量的評論,從而使得這些能夠被用來做ModSecurity的部署向導。最新的核心規則可能通過ModeSecurity的站點找到-http://www.modsecurity.org/projects/rules。 核心規則內容 為了提供一般WEB應用保護,核心規則使用以下技術: l HTTP保護 – HTTP協議正規劃檢測,并啟用本地有效策略 l 一般WEB攻擊保護 – 檢測一般WEB應用的安全攻擊 l 自動檢測 – 檢測機器人、爬蟲、掃描器和其它的表面惡意行動 l 木馬檢測 – 檢測木馬程序進入 l 過失隱藏 – 偽裝服務器發出錯誤消息 8 開源的ModSecurity與那些商業產品相比的不同之處 硬件設備對比軟件方案:ModSecurity是一個軟件Web 應用防火墻引擎,本質上是個Apache模塊。這意味著它是嵌入在目標Web服務器當中的,而并非部署在單獨的設備中。然而,我們也可以將Apache配置成一個反向代理并達到類似的目的,但要知道ModSecurity本身并不會處理這個方面。軟件WAF方案的優勢:有些情況需要進行大規模的部署,在這種情況下,將 WAF分布在目標Web服務器當中要比從垂直方向上增加外部硬件設備實際的多。嵌入式部署的另一個好處是無需再去處理SSL解碼了,因為Web服務器會進行預處理并將數據回傳給ModSecurity。軟件WAF方案也并非完美無缺,其缺點如下: · 可能無法將新的軟件加到Web服務器當中。 · 會使用到本地資源。 · 反應時間的影響——很多商業WAF設備可以在Sniff模式下進行非線性部署,這樣就無法評估在線性情況下對HTTP事務的訪問所需的反應時間了。商業與開源產品高級功能對比:ModSecurity擁有一個高級的規則語言和Lua API以編寫復雜邏輯。我們既可以創建消極安全規則(尋找已知的壞輸入),也可以創建積極安全規則(只允許已知的好輸入)以規定輸入驗證的防護類型。這種方式的主要限制在于ModSecurity無法自動化創建這些規則,所以必須手工創建。但只在以下兩種場合之一才行: A.如果Web應用不經常變化 B.響應攻擊掃描報告,在這種情況下可以使用目標的積極安全規則 如果將ModSecurity作為一個對已知問題的虛擬修補方案,那么它就不太適合于B了。高端的商業WAF都具有自動化的學習和分析機制以創建這些積極安全規則,同時還能夠從客戶端與Web應用之間的交互中進行學習。 該文章在 2024/7/5 18:20:59 編輯過 |
關鍵字查詢
相關文章
正在查詢... |