入侵躲避技術初探
什么是入侵躲避技術
2010年10月18日,芬蘭的Stonesoft公司宣布發現了一種新型的高級逃逸技術(AET:Advanced Evasion Technique),可以輕松躲避目前的IPS/IDS檢測,成功入侵目標服務器,震驚了信息安全界。作為這個技術的佐證之一,就是近年來令大家迷惑的未知攻擊越來越多,未知攻擊就是只知道被攻擊了的事實,卻不知道黑客采用了什么手段,何時進行的入侵,遺憾的是目前的安全措施都沒有發現其蹤跡。
后來,Stonesoft公開了其中的部分技術細節,大概40多種組合躲避技術,并發布一個針對漏洞(CVE-2008-4250/CVE-2004-1315)的躲避技術演示工具軟件。演示結果簡單明了:入侵者對沒有打補丁的目標服務器直接入侵,成功建立遠程SHELL;中間部署IPS設備后,開啟安全防護策略,直接入侵則不再成功;通過調整軟件上的組合參數,如IP參數、TCP參數等,很快入侵成功的SHELL窗口再次打開。
其實早在1998年Newsham和Ptacek就發表論文,討論利用IP碎片技術躲避網絡入侵檢測設備了,只是當時沒有引起安全界的重視,而他們的研究對黑客來說,可謂是思路廣開,隨后的幾年,這種技術被廣泛使用于實際的入侵攻擊中,尤其是APT攻擊,針對性很強,效果非常好。
高級逃逸技術(AET)是黑客利用協議組合的技巧,躲過網絡上安全措施的檢查,成功抵達目標,實施入侵攻擊。我更喜歡翻譯成為高級躲避技術,或者是入侵躲避技術;躲避是指還處在你監視環境下繼續生存,但我成功地“隱身”了自己,逃逸則是我設法逃出你的監視范圍。入侵躲避技術的目的還是要入侵,而不是逃走了事。下圖是入侵躲避技術的原理:
入侵躲避技術的分類:
入侵躲避技術可謂是種類繁多,實際上就是利用安全設備與目標主機對各種協議、各種字符集,以及他們的組合處理的差異,合理地躲避了檢查,成功入侵了目標。因此,入侵躲避技術是有針對性的,不是一種方式走天下,而是在具體的入侵環境中,選擇不同的參數組合、協議組合、字符集組合,達到躲避的目的。
根據躲避安全措施的不同分為:
1. 網絡入侵躲避技術:躲避網絡上的安全檢查,如FWIDSIPSWAFUTM等,其中主要部分是IPS。需要躲避的是入侵時的攻擊行為,如漏洞探測,上傳的惡意代碼,如ShellCode,下傳敏感信息,如口令文件;
2. 主機入侵躲避技術:躲避主機(目標服務器)上的安全檢查,如主機防入侵防御軟件主機防病毒軟件等。典型的技術是進程注入、rootkit等。
其中網絡躲避又可以根據躲避的方向分為:
1. 單向躲避:目標點沒有接應的,躲避了安全檢查的攻擊流應該能被目標主機正常“理解”,完成入侵行為,否則即使躲避了中間的安全檢查,也達不到入侵的目的。單向躲避一般應用在入侵過程中;
2. 雙向躲避:目標點有接應者,只要躲避了中間的安全檢查,到達目標后,接應者負責信息的還原。雙向躲避一般應用在攻擊成功后的惡意代碼傳遞與遠程控制聯絡。
常見的網絡躲避技術有下面幾類:
1. 字符變換:IPS一般基于特征比對與行為模式識別,若把傳輸的內容變成檢查者不認識的“外文”,就容易蒙混過關。這個方法常被用在注入攻擊中的不同字符集之間的轉換。尋找到IPS與目標主機對某字符集解釋的差異,就可以實施躲避攻擊;典型的方式是SQL注入;
2. 協議組合:每個業務鏈接會使用多個協議,利用網絡各種協議的參數組合,如包大小、碎片處理、重疊處理、多線程傳送等,由于IPS與目標主機解析協議的處理方式不同,就可以躲避IPS的特征檢查,同時又可以達到攻擊的目的;
3. 傳輸加密:加密本是直接躲避技術的首選,但加密需要到達目標解密后才能使用,而在攻擊過程中,目標的解析者是標準的應用服務,加密就不能達到入侵效果。同時,越來越的網絡環境中限制加密的連接,因為管理者不能監控你的通訊內容;因此,加密方法一般使用在雙向躲避的部分環境中。
涉及主機躲避技術,本人在《服務器入侵加固的幾種方式》中有所介紹,本文主要討論網絡躲避技術,就重疊分片躲避與多線程躲避為例,分析一下網絡躲避技術的原理。
重疊分片躲避技術分析
把一個大的數據包分成多個切片(IP包)傳輸,是TCP協議的功能之一。正常的情況下接收端按照切片的編號、偏移量,再重新組裝成完整的數據包。
正常的協議解析過程是每個分片順序排列,并且按序號送達目的主機。由于網絡的不同路徑延遲不同,造成到達目標的分片不一定是順序的;某個分片或許中途損壞要重傳,延遲自然更大一些;有些系統本身的Bug,分片時偏移量寫錯了,造成分片之間有重疊…
這里只討論一種分片重疊的躲避技術:
我們可以看到,在正常的分片中,第二個分片中有惡意代碼的特征,IPS通過緩存各個分片的負載,就可以還原數據包,自然就可以發現這個特征。
為了躲避IPS的檢測,我們故意把第一分片的后面增加了一段隨機數據(其大小甚至可以覆蓋分片2,或更長),同時增加分片1的長度,分片2與分片3都不做改動。
這樣分片1與分片2的內容就有重合了,目標服務器接收時,對于重合的部分是選分片1的,還是選分片2的呢?我們知道,這個最終結果要根據目標服務器的操作系統而定,不同操作系統,或者有些版本之間的處理方式是不同,歸結為TCP/IP協議棧的代碼編寫。有選分片1的,也有選分片2的,但告知發送方分片有錯誤,要求重傳的不多。
這樣就出現了一個問題:負責安全檢查的IPS采用的方式是前向的,還是后向的呢?目前大部分IPS廠商還不能確定其后邊的服務器采用什么樣的操作系統,無法自動匹配具體的應用環境,要兩種方式都檢查的話,需要設立雙倍的緩沖區內存,顯然是不劃算的。因此,大部分廠家都只選擇一種,比如是前向的,即分片重疊時,數據選擇前一個編號的數據為準。