首頁 > 新聞 > 專家觀點 >

攻防:黑客技術與Fuzz測試

2015-01-27 14:28:45   作者:   來源:CTI論壇   評論:0  點擊:


  對于信息安全領域,2014年無疑是動蕩不安的一年,Heartbeat、Shellshock、貴賓犬、沙蟲等漏洞接二連三的發(fā)生。對于普通大眾和相當一部分技術人員來說黑客技術總是帶著一些神秘的色彩,但是任何人在仔細研究之后都會發(fā)現(xiàn),黑客技術并沒有那么神秘,它和我們寫的每一行代碼、設計的每一個測試用例一樣,都遵循最基本的原理。

  一、 黑客技術

  黑客技術是很多技術的集合,涵蓋計算機技術的多個方面從硬件、系統(tǒng)、應用到WEB等,由于涉及的知識較多,很少有研究者能夠在各個方面都做到精通,因此把握其本質(zhì)和主線就顯得尤為重要。

  1. 漏洞與黑客技術

  在了解黑客技術之前我們有必要先了解一些黑客技術的對立面—信息安全方面的一些知識。如圖 1所示,信息安全的核心在于權(quán)限管理,保密性、完整性、可用性、不可抵賴性等要素都是圍繞著權(quán)限展開的;認證、防火墻、入侵檢測等技術本質(zhì)上都是為了確保信息被擁有權(quán)限的主體使用。

  而黑客技術和信息安全正好相反,黑客技術則是為了獲得非法權(quán)限(如圖 2所示),F(xiàn)實中任何系統(tǒng)在設計的時候都會做一些權(quán)限的限制,但由于種種原因,這些限制并非牢不可破,其中往往存在各種各樣的漏洞,或者是操作人員的失誤、或者軟件設計的漏洞,正是因為這些漏洞的存在,黑客技術才得以成為現(xiàn)實。因此黑客技術的核心在于獲取非法權(quán)限,其實現(xiàn)方式是挖掘和利用漏洞。

  由前面的分析可知漏洞是理解黑客技術的主線與核心,所以漏洞挖掘技術和利用技術是黑客的兩大核心技能。對于任何一個軟件系統(tǒng)或IT系統(tǒng),其安全性或攻擊難度取決于漏洞的多少和漏洞的利用難度。傳統(tǒng)的安防產(chǎn)品的思路是提高漏洞的利用難度,而減少漏洞的數(shù)量則是軟件或設備提供商考慮的事情,但也有一些新興的安全公司例如Codenomicon提供專業(yè)漏洞挖掘的產(chǎn)品。

  圖 1 信息安全3要素

  圖 2 黑客技術的核心

  2. 安全漏洞的分類

  由于信息技術的高速發(fā)展,現(xiàn)在的軟件系統(tǒng)異常復雜。最初的軟件產(chǎn)品只分為硬件和軟件兩個組成部分,相對而言,漏洞的種類比較有限;現(xiàn)在的軟件產(chǎn)品軟件層面多,可分為驅(qū)動、操作系統(tǒng)、應用程序、腳本、WEB等層面,而且軟件產(chǎn)品的種類也非常多,因此為漏洞的分類提出了巨大的挑戰(zhàn)。

  目前對于漏洞分類最權(quán)威的是由美國網(wǎng)絡安全與通信辦公室、美國國土安共同推出的CWE(Common Weakness Enumeration,通用漏洞枚舉),CWE收錄了上千種漏洞類型,當然包括熟悉的緩沖區(qū)溢出、DDoS、SQL注入、跨站腳本等,這些資料對于研究安全漏洞是非常重要的,不過對于了解黑客技術來講顯得過于細節(jié)化了。為了便于了解我們可以簡單得將漏洞分為如下幾個層面:

  表1 漏洞的簡單分類

  在現(xiàn)實的滲透測試中,部署應用和運作管理漏洞是最常見的,Rapid 7 首席信息安全官表示:“使用默認密碼可以訪問幾乎一半的互聯(lián)網(wǎng)。”很多人對于黑客技術的誤解就在于此,任何單個的技術看起來都是簡單的,但各種技術組合起來,效果可能會相當驚人。但對于網(wǎng)絡設備廠商,軟件編碼漏洞和軟件設計漏洞才是最值得關注的。

  二、 Fuzz測試

  1. 什么是Fuzz測試?

  漏洞挖掘有三種方法:白盒代碼審計、灰盒逆向工程、黑盒測試。其中黑盒的Fuzz測試是效率最高的一種,能夠快速驗證大量潛在的安全威脅。

  Fuzz測試,也叫做“模糊測試”,是一種挖掘軟件安全漏洞、檢測軟件健壯性的黑盒測試,它通過向軟件輸入非法的字段,觀測被測試軟件是否異常而實現(xiàn)。Fuzz測試的概念非常容易理解,如果我們構(gòu)造非法的報文并且通過測試工具打入被測設備,那么這就是一個Fuzz測試的測試例執(zhí)行,大多數(shù)測試工程師肯定都嘗試過這種測試手段。

  對于網(wǎng)絡協(xié)議漏洞挖掘來說,F(xiàn)uzz測試也就意味著打入各種異常報文,然后觀察設備是否有異常。

  2. 針對FTP sever的Fuzz測試

  在本節(jié)我們將設計一個簡單的針對FTP server的Fuzz測試腳本。從原理上設計Fuzz測試用例是比較簡單的,無非是閱讀RFC,根據(jù)報文設計異常字段,但在實際實施過程中將會遇到以下幾個問題。

  m 網(wǎng)絡協(xié)議是有狀態(tài)的,最常見的一種情況就是,我們需要在協(xié)議狀態(tài)機進行到某種狀態(tài)的時候發(fā)送某種報文,比如FTP協(xié)議,如果我們想對put命令的參數(shù)進行變異、發(fā)送異常報文,則我們需要先通過FTP認證;因此要想實現(xiàn)協(xié)議的fuzz測試,則只能手工編寫腳本,現(xiàn)有的工具和測試儀都無法實現(xiàn)這些復雜邏輯。

  m 另外如何構(gòu)造異常,這是一個和經(jīng)驗相關性比較大的問題,需要長期積累,以及對安全漏洞有較深入的研究。

  m 如何檢測被測設備是否異常,這也是一個非常棘手的問題,比如內(nèi)存泄露,可能只是泄露幾個字節(jié)的內(nèi)存,這時候被測設備外部表現(xiàn)正常。

  在本節(jié)中介紹的FTP server的Fuzz測試中,僅構(gòu)造比較簡單的異常—--超長的報文;設備異常通過檢查FTP連接的狀態(tài)來判斷。被測設備選擇MSR36設備和日常工作中常用的3CDaemon FTP server2.0。具體測試步驟分為如下。

  • 輸入超長的FTP用戶名,被測設備應該表現(xiàn)正常;
  • 正常登陸FTP后,對于FTP命令“mdelete、cd、mkdir、cwd、mdir、mput、rename”輸入超長參數(shù), 被測設備應該表現(xiàn)正常。

  根據(jù)測試用例設計相應的測試腳本,測試腳本使用python語言編寫。腳本主要由三個函數(shù)組成。

  m get_fuzz_str()函數(shù),用于生成Fuzz str,即異常報文的關鍵部分;在本例中用于生成超長的字符串“aaaaaa…”(如圖3所示)。

  圖3 get_fuzz_str代碼

  m fuzz_FTP_usr()函數(shù),用于發(fā)送超長的用戶名,關鍵代碼如圖4所示,將超長的字符串4串拼接在一起,作為user的參數(shù)發(fā)送給服務器。

  圖4 fuzz_FTP_user()函數(shù)關鍵代碼

  m fuzz_FTP_cmd()函數(shù),用于發(fā)送超長的命令,關鍵代碼如圖5所示,對每一個命令構(gòu)造異常的參數(shù),然后發(fā)送給服務器。

  圖5 fuzz_FTP_cmd()函數(shù)關鍵代碼

  之后,執(zhí)行測試用例,設定被測設備為MSR36設備,MSR36設備表現(xiàn)正常,未發(fā)現(xiàn)任何問題(如圖6所示)。

  圖6 MSR36測試結(jié)果

  將被測設備設定為3CDaemon FTP server,測試結(jié)果如圖7所示,看起來腳本找到了一個安全漏洞;為了驗證我們用windbg調(diào)試FTP server看一看,如圖8所示可以看到3CDaemon FTP server已經(jīng)被溢出了,EIP寄存器被我們的字符串“aaaa”覆蓋,從而導致程序崩潰,而且從調(diào)試器看到這是一個棧溢出漏洞,這些信息會為進一步的漏洞利用提供線索。

  圖7 3CDaemon FTP server測試結(jié)果

  圖8 3CDaemon FTP server調(diào)試結(jié)果

  通過這個簡單的Fuzz測試腳本成功找到了一個緩沖區(qū)溢出漏洞。

  三、 結(jié)束語

  如果將漏洞作為理解黑客技術的核心,黑客技術本身已經(jīng)不再神秘,在日常測試中,經(jīng)過簡單設計的測試用例即可完成漏洞挖掘的工作。但是應該看到的是隨著安全技術的發(fā)展,挖掘漏洞和利用漏洞必定更為復雜。實際上針對協(xié)議設計Fuzz測試腳本并不是一件簡單的事情,其復雜程度往往超過實現(xiàn)協(xié)議本身,在實際的測試中往往需要借助專業(yè)的測試框架、測試套件,或者根據(jù)實際情況設計比較有針對性的測試用例進行測試。

分享到: 收藏

專題