2013年3月24日 星期日

九種突破IDS入侵檢測系統的實用方法

九種突破IDS入侵檢測系統的實用方法

入侵檢測系統,英文簡寫為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.dll Iloveheikefangxian,用Winhex將.dll與Ilove之間的空格換為00的ASCII碼,保存後再用NC配合管道符提交。這樣在有些IDS看來/msadc/msadcs.dll Iloveheikefangxian並不與它的規則集文件中規定為具有攻擊意圖的字符串相同,從而它就會對攻擊者的行為無動於衷。瞧!「計算機處理字符串時在ASCII碼為00處自動截斷」這一原理的應用多麼廣泛啊!從哲學上講,事物之間相互存在著聯繫,我們應該多思考,挖掘出內在規律,這樣就會有新的發現。

第三招:使用路徑分隔符「\」

對於像微軟的IIS這類Web服務器,「\「也可以當「/」一樣作為路徑分隔符。有些IDS在設置規則集文件時並沒有考慮到非標準路徑分隔符「\」。如果我們把/msadc/msadcs.dll改寫為\msadc\ msadcs.dll就可以逃過snort的法眼了,因為snort的規則集文件裡沒有\msadc\ msadcs.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編碼來表示:

「/」字符表示方式 二進制 十六進制

單字節 0xxxxxxx 00101111 2F

雙字節 110xxxxx 10xxxxxx 11000000 10101111 C0 AF

三字節 1110xxxx 10xxxxxx 10xxxxxx 11100000 10000000 10101111 E0 80 AF

按照此方法,我們可以對整個字符串都進行相應的編碼。雖然編碼後的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。

第九招:綜合多態編碼

聰明的你一看這個小標題就知道了,所謂綜合,就是把以上介紹的幾種多態變形編碼技術結合起來使用,這樣的話效果會更好。

後記:當我剛才提到「00 ASCII碼」以及非標準路徑分隔符「\」時,大家可能會倍感熟悉,因為這與前段時間流行的動網上傳漏洞以及暴庫大法有著密切聯繫。黑客是門藝術,黑客講究的是靈感是思路,我們通過深入思考,舊的知識也可以創造出新的技術!

轉載自《遊俠安全網》

沒有留言:

張貼留言