入侵檢測系統,英文簡寫為IDS,顧名思義,它是用來實時檢測攻擊行為以及報告攻擊的。如果把防火墻比作守衛網絡大門的門衛的話,那么入侵檢測系統(IDS)就是可以主動尋找罪犯的巡警。因而尋求突破IDS的技術對漏洞掃描、腳本注入、URL攻擊等有著非凡的意義,同時也是為了使IDS進一步趨向完善。
Snort是很多人都在用的一個IDS了,其實它也并不是萬能的,筆者下面就來談談突破諸如Snort這類基于網絡的IDS的方法:多態URL技術。
提起多態二字,大家可能會聯想到編寫病毒技術中的“多態”、“變形”等加密技術,其實我這里所要講的URL多態編碼技術和病毒的多態變形技術也有神似之處,就是用不同的表現形式來實現相同的目的。
對于同一個URL,我們可以用不同形式的編碼來表示。IDS在實時檢測時,將它檢測到的數據與其本身規則集文件中規定為具有攻擊意圖的字符串進行對比,如果相匹配的話,則說明系統正在受攻擊,從而阻止攻擊以及發出警報。因為實現同一目的的URL可以用不同的形式來表示,所以經過變形編碼后的URL可能就不在IDS的規則集文件中,也就擾亂了IDS的識別標志分析引擎,從而就實現了突破、繞過IDS的效果!
多態URL編碼技術有許多種,筆者在此介紹9種常用且有一定代表性的方法。為了便于講解,這里以提交地址為/msadc/msadcs.dll的URL來作為例。“/msadc/msadcs.dll”已經被收集到snort等各大IDS的規則集文件中,因而當我們向目標機器直接提交/msadc/msadcs.dll時都會被IDS截獲并報警。
第一招:“/./”字符串插入法
鑒于“./”的特殊作用,我們可以把它插入進URL中來實現URL的變形。比如對于/msadc/msadcs.dll,我們可以將它改寫為/././msadc/././msadcs.dll、/./msadc/.//./msadcs.dll等形式來擾亂了IDS的識別標志分析引擎,實現了欺騙IDS的目的。而且改寫后編碼后的URL與未修改時在訪問效果上是等效的。筆者曾經通過實驗表明這種方法可以繞過Snort等IDS。
第二招:“00”ASCII碼
前段時間動網上傳漏洞就是利用的這一特性,大家肯定對此很熟悉了。它的原理就是計算機處理字符串時在ASCII碼為00處自動截斷。我們就可以把/msadc/msadcs.dll改寫為/msadc/msadcs.dllIloveheikefangxian,用Winhex將.dll與Ilove之間的空格換為00的ASCII碼,保存后再用NC配合管道符提交。這樣在有些IDS看來/msadc/msadcs.dllIloveheikefangxian并不與它的規則集文件中規定為具有攻擊意圖的字符串相同,從而它就會對攻擊者的行為無動于衷。瞧!“計算機處理字符串時在ASCII碼為00處自動截斷”這一原理的應用多么廣泛啊!從哲學上講,事物之間相互存在著聯系,我們應該多思考,挖掘出內在規律,這樣就會有新的發現。
第三招:使用路徑分隔符“”
對于像微軟的IIS這類Web服務器,““也可以當“/”一樣作為路徑分隔符。有些IDS在設置規則集文件時并沒有考慮到非標準路徑分隔符“”。如果我們把/msadc/msadcs.dll改寫為msadcmsadcs.dll就可以逃過snort的法眼了,因為snort的規則集文件里沒有msadcmsadcs.dll這一識別標志。值得一提的是路徑分隔符“”還有個妙用,就是前段時間《黑客防線》上提到的“%5c”暴庫大法,“%5c”就是“”的16進制表現形式。
第四招:十六進制編碼
對于一個字符,我們可以用轉義符號“%”加上其十六進制的ASCII碼來表示。比如/msadc/msadcs.dll中第一個字符“/”可以表示為%2F,接下來的字符可以用它們對應的16進制的ASCII碼結合“%”來表示,經過此法編碼后的URL就不再是原先的模樣了,IDS的規則集文件里可能沒有編碼后的字符串,從而就可以繞過IDS。但是這種方法對采用了HTTP預處理技術的IDS是無效的。
第五招.非法Unicode編碼
UTF-8編碼允許字符集包含多余256個字符,因此也就允許編碼位數多于8位。“/”字符的十六進制的ASCII碼是2F,用二進制數表示就是00101111。UTF-8格式中表示2F的標準方法仍然是2F,但是也可以使用多字節UTF-8來表示2F。字符“/”可以像下表中所示使用單字節、雙字節、三字節的UTF-8編碼來表示:
“/”字符表示方式二進制十六進制
單字節0xxxxxxx001011112F
雙字節110xxxxx10xxxxxx1100000010101111C0AF
三字節1110xxxx10xxxxxx10xxxxxx111000001000000010101111E080AF
按照此方法,我們可以對整個字符串都進行相應的編碼。雖然編碼后的URL的最終指向的資源都相同,但它們的表達方式不同,IDS的規則集文件中就可能不存在此過濾字符串,從而就實現了突破IDS的目的。
第六招:多余編碼法
多余編碼又稱雙解碼。還記的2000-2001年IIS的Unicode解碼漏洞和雙解碼漏洞鬧得沸沸揚揚,那時有許多朋友稀里糊涂的以為Unicode解碼漏洞就是雙解碼漏洞,其實它們兩者是兩回事,前者的原理筆者已在上述的“非法Unicode編碼”中有所描述。而多余編碼就是指對字符進行多次編碼。比如“/”字符可以用%2f表示,“%2f”中的“%”、“2”、“f”字符又都可以分別用它的ASCII碼的十六進制來表示,根據數學上的排列組合的知識可知,其編碼的形式有2的3次方,于是“%2f”可以改寫為:“%25%32%66”、“%252f”等等來實現URL的多態,編碼后的字符串可能沒被收集在IDS的規則集文件中,從而可以騙過有些IDS。
第七招.加入虛假路徑
在URL中加入“../”字符串后,在該字符串后的目錄就沒有了意義,作廢了。因此利用“../”字符串可以達到擾亂了識別標志分析引擎、突破IDS的效果!
第八招:插入多斜線
我們可以使用多個“/”來代替單個的“/”。替代后的URL仍然能像原先一樣工作。比如對/msadc/msadcs.dll的請求可以改為////msadc////msadcs.dll,經筆者曾經實驗,這種方法可以繞過某些IDS。
第九招:綜合多態編碼
聰明的你一看這個小標題就知道了,所謂綜合,就是把以上介紹的幾種多態變形編碼技術結合起來使用,這樣的話效果會更好。
后記:當我剛才提到“00ASCII碼”以及非標準路徑分隔符“”時,大家可能會倍感熟悉,因為這與前段時間流行的動網上傳漏洞以及暴庫大法有著密切聯系。黑客是門藝術,黑客講究的是靈感是思路,我們通過深入思考,舊的知識也可以創造出新的技術!
九種突破IDS入侵檢測系統的實用方法
責任編輯:xlong | 2013-03-17 14:00:00 原創文章 企業網D1Net