使用ModSecurity 保護(hù)Web服務(wù)安全(5) |
發(fā)布時(shí)間: 2012/9/15 19:08:49 |
3 了解mod_security 配置文件 /etc/httpd/conf.d/mod_security.conf :mod_security模塊主配置文件 SecRuleEngine On 4 設(shè)置mod_security 上述的步驟只是將Mod Security啟動(dòng)而已,但實(shí)際上并不會(huì)為你的web服務(wù)器做任何的防護(hù)動(dòng)作;因此需要額外設(shè)定才會(huì)讓Mod Security發(fā)揮功能,此部分將會(huì)對(duì)如何設(shè)定Mod Security做一個(gè)說(shuō)明。 下面開始介紹Mod Securit的四種主要的設(shè)定指令。 (1)一般的設(shè)定,包括裝規(guī)則引擎(rule engineer)開啟等基本指令,常見(jiàn)的設(shè)定如下: #Basic configuration options # 打開過(guò)濾引擎開關(guān)。如果是Off,那么下面這些都不起作用了。 SecRuleEngine On #配置是否讓ModSecurity默認(rèn)處理或緩沖請(qǐng)求體 SecRequestBodyAccess On #配置ModSecurity允許的最大請(qǐng)求體的緩存區(qū)大小 SecResponseBodyAccess On #配置攔截文件存儲(chǔ)的目錄 SecUploadDir /opt/apache-fronted/tmp/ #配置是否保存事務(wù)處理后的攔截文件 SecUploadKeepFiles Off #配置ModSecurity允許的最大請(qǐng)求體的緩存區(qū) SecRequestBodyLimit 131072 #配置ModSecurity使用內(nèi)存保存的最大請(qǐng)求體大小 SecRequestBodyInMemoryLimit 131072 #配置ModSecurity允許的最大請(qǐng)求體的緩存區(qū)大小,除了請(qǐng)求中正在傳送的文件大小。這項(xiàng)指令便于在受到某些使用大尺寸請(qǐng)求進(jìn)行DoS攻擊時(shí)減少影響。提供上傳文件服務(wù)的WEB應(yīng)用必須配置SecRequestBodyLimit為一個(gè)很大的值。由于大文件直接進(jìn)行磁盤文件存取,不會(huì)加大內(nèi)存的消耗。但是,仍然有可能有人利用超大請(qǐng)求體限制和發(fā)送大量大小的非上傳請(qǐng)求。該指令消除這一漏洞。 SecResponseBodyLimit 524288 (2)設(shè)定Mod Security如何執(zhí)行調(diào)試的日志部分,常見(jiàn)的設(shè)定如下: #指定ModSecurity調(diào)試日志文件的路徑 SecDebugLog logs/modsec_debug.log #配置冗長(zhǎng)的調(diào)試日志數(shù)據(jù) SecDebugLogLevel 0 (3) 設(shè)定Mod Security如何執(zhí)行審計(jì)的日志部分,常見(jiàn)的設(shè)定如下: #定義主審計(jì)日志文件 SecAuditEngine RelevantOnly SecAuditLogRelevantStatus ^5 SecAuditLogParts ABIFHZ SecAuditLogType Serial SecAuditLog logs/modsec_audit.log (4) Rules Mod Security最主要的設(shè)定部分,是一個(gè)以事件為基礎(chǔ)的語(yǔ)言。 語(yǔ)法:SecRule VARIABLES OPERATOR [ACTIONS] VARIABLES:指定哪些變量要進(jìn)行處理 OPERATOR:要如何處理這些變量取得我們想要的 ACTIONS (optional):當(dāng)達(dá)到上述的處理時(shí),要做什么動(dòng)作 (5)Rule處理的階段 ModSecurity 2.x允許把規(guī)則置于下述五個(gè)階段之一: 請(qǐng)求頭(REQUEST_HEADERS) 階段 這個(gè)階段的規(guī)則會(huì)在apache完成請(qǐng)求頭的讀取后立即被執(zhí)行(post-read-request階段),這時(shí),還沒(méi)有讀取請(qǐng)求體,意味著不是所有的參數(shù)都可用。如果你必須讓規(guī)則盡早運(yùn)行,應(yīng)把規(guī)則放在這個(gè)階段(在apache使用這個(gè)請(qǐng)求做某些事前),在請(qǐng)求體被讀取前做些事情,從而決定是否緩存這個(gè)請(qǐng)求體,或者決定你將希望這個(gè)請(qǐng)求體如何被處理(如是否以XML格式解析或不解析)。 請(qǐng)求體(REQUEST_BODY) 階段 這是通用輸入分析階段,大部分傳統(tǒng)的應(yīng)用規(guī)則不在這兒,這個(gè)階段你肯定能收到參數(shù)(只有讀取過(guò)請(qǐng)求體后),在請(qǐng)求體階段,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應(yīng)用還沒(méi)有使用其它的編碼方法。 響應(yīng)頭(RESPONSE_HEADERS) 階段 發(fā)生在響應(yīng)頭被發(fā)送到客戶端之前,如果你想觀察響應(yīng)發(fā)生前就在這兒運(yùn)行,如果你想使用響應(yīng)頭來(lái)決定你是否想緩存響應(yīng)體也行。注意一些響應(yīng)狀態(tài)碼(如404)在請(qǐng)求環(huán)的早期就被apache管理著,我也無(wú)法觸發(fā)預(yù)期。加上apache在后面的勾子上雙增加了一些響應(yīng)頭(如日期、服務(wù)器和連接信息等),這些我們無(wú)法觸發(fā)和審查。在代理配置模式下或使用phase:5(logging)工作的較好。 響應(yīng)體(RESPONSE_BODY) 階段 這是通用輸出分析階段,這里你能運(yùn)行規(guī)則截?cái)囗憫?yīng)體(當(dāng)然提供緩存)。這個(gè)階段你想檢查輸出的HTML信息公布、錯(cuò)誤消息和失敗的驗(yàn)證文字。 記錄(LOGGING) 階段 在日志發(fā)生前運(yùn)行的一個(gè)階段,放在這個(gè)階段的規(guī)則只能影響日志記錄器如何執(zhí)行,這個(gè)階段可以檢測(cè)apache記錄的錯(cuò)誤消息,在這個(gè)階段你不能拒絕或阻斷連接,因?yàn)樘t了,這個(gè)階段也允許檢測(cè)其它的響應(yīng)頭,如那在phase:3或者phase:4階段中不可用的。注意在這個(gè)階段,你應(yīng)當(dāng)小心不要繼承破壞性的動(dòng)作到規(guī)則中,這樣的情況在ModSecurity2.5.0及其以后的版本中被當(dāng)作配置錯(cuò)誤。 圖-4是標(biāo)準(zhǔn)的apache請(qǐng)求流程,5個(gè)ModSecurity處理階段顯示其中。因此,在rule的部分即可指定你要處理的哪一部份進(jìn)行處理。 圖-4 (6)Rules 簡(jiǎn)介 SecRule是ModSecurity主要的指令,用于分析數(shù)據(jù)并根據(jù)結(jié)果執(zhí)行動(dòng)作。通常規(guī)則的格式如下: SecRule VARIABLES OPERATOR [ACTIONS] l VARIABLES 規(guī)則中的變量 第一部分,VARIABLES描述哪個(gè)變量被檢查,舉個(gè)例子,下述規(guī)則會(huì)拒絕URI中含有單詞dirty的事務(wù)。 SecRule ARGS dirty 每條規(guī)則可以指定一個(gè)或多個(gè)變量 SecRule ARGS|REQUEST_HEADERS:User-Agent dirty XPath格式是選擇操作的第三方支持格式。XPath格式僅能針對(duì)特殊變量XML使用,只有請(qǐng)求體使用XML格式時(shí)可用。 SecRule XML:/xPath/Expression dirty 注意:不是所有的集合支持選擇操作格式類型,你需要參考各個(gè)集合的文檔來(lái)決定是否支持。 一些常見(jiàn)的變量: 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中的變量部分可以一個(gè)以上, 以”|”來(lái)區(qū)隔即可,如果設(shè)定的規(guī)則超過(guò)多行,則可用”\”來(lái)進(jìn)行分隔。 l OPERATOR 第二部分,OPERATOR描述如何進(jìn)行檢查。OPERATOR是正則表達(dá)式(Regular Expression),但其實(shí)ModSecurity提供不少可用的OPERATOR,利用”@”即可指定要用何種OPERATOR,例如SecRule REQUEST_URI “@rx iii”。 以下是一些范例: SecRule REMOTE_ADDR "^192\.168\.1\.101$" REMOTE_ADDR:指定變量對(duì)象為遠(yuǎn)程聯(lián)機(jī)的IP地址 "^192\.168\.1\.101$":針對(duì)上述的變量進(jìn)行比對(duì),如果非192.168.1.101,則符合,可指定要做何種動(dòng)作 SecRule ARGS "@validateUtf8Encoding" ARGS:指定變數(shù)為http傳遞的參數(shù) "@validateUtf8Encoding":指定OPERATOR為對(duì)這些參數(shù)進(jìn)行Utf8編碼進(jìn)行檢查 SecRule FILES_TMPNAMES "@inspectFile /path/to/inspect_script.pl" FILES_TMPNAMES:指定變量為上傳檔案的暫存名稱 "@inspectFile /path/to/inspect_script.pl":指定利用inspect_script.pl檔案的語(yǔ)法來(lái)檢查上傳檔案 l ACTIONS 第三部分可選的,ACTIONS,描述當(dāng)操作進(jìn)行成功的匹配一個(gè)變量時(shí)具體怎么做。指定如果VARIABLE有符合OPERATOR的情況時(shí),要執(zhí)行何種動(dòng)作。ACTIONS主要區(qū)分為五種型態(tài): (1)Disruptive actions (中斷目前的處理) deny、drop、redirect、proxy、pause… (2)Non-disruptive actions (改變狀態(tài)) Append、auditlog、exec… (3)Flow actions (改變規(guī)則流動(dòng)) allow、chain、pass、skip… (4)Meta-data actions (包含規(guī)則的metadata) id、rev、severity、msg、phase、log, nolog、… (5)Data actions (可放置內(nèi)容給其它action用) capture、status、t、xmlns… 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |