亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        對WehnTrust入侵防御功能的測試與分析

        2011-07-25 06:48:48任高明喬向東白軍亮
        關(guān)鍵詞:格式化字符串調(diào)用

        任高明, 喬向東, 楊 仝, 白軍亮

        (空軍工程大學(xué)電訊工程學(xué)院,陜西西安710077)

        0 引 言

        WehnTrust是一款由微軟安全工程師研發(fā)的基于主機(jī)的入侵防御系統(tǒng)[1-4],其研發(fā)者聲稱WehnTrust主要具有3種特性:地址空間隨機(jī)化[5-6]、防止SEH(即結(jié)構(gòu)化異常處理)覆寫攻擊[7],防止格式化字符串[8-9]攻擊,但WehnTrust的防御性能到底如何,卻鮮有人給出書面性的測試報(bào)告。本文為了驗(yàn)證其防御能力,針對性地設(shè)計(jì)并模擬實(shí)現(xiàn)了3個(gè)實(shí)驗(yàn),對此入侵防御系統(tǒng)的性能進(jìn)行了測試。

        1 WehnTrust源碼分析

        圖1 WehnTrust主界面

        在WehnTrust的主頁下載安裝包及源代碼,運(yùn)行后界面如圖1所示。WehnTrust采用visual studio 2008開發(fā)環(huán)境,包含7個(gè)項(xiàng)目:Common,de_DE,en_us,es_ES,NRER,WehnServ,WehnTrust。其中Common為靜態(tài)庫,de_DE,en_us,es_ES,NRER為動態(tài)鏈接庫,而WehnServ,WehnTrust為應(yīng)用程序。其中,NRER動態(tài)鏈接庫的核心代碼在3個(gè)源文件中:NRER.c,SEH.c,format.c。NRER.c負(fù)責(zé)完成地址空間隨機(jī)化;SEH.c實(shí)現(xiàn)防止結(jié)構(gòu)化異常處理攻擊;format.c負(fù)責(zé)實(shí)現(xiàn)防止格式化串攻擊。

        2 WehnTrust存在的問題

        可以看出,WehnTrust阻止攻擊的主要功能是在NRER.dll實(shí)現(xiàn)的。但是,經(jīng)過大量反復(fù)的調(diào)試、測試和源碼分析,發(fā)現(xiàn)該動態(tài)鏈接庫從未被調(diào)用,但是動態(tài)鏈接庫已經(jīng)生成。嘗試使用動態(tài)加載和隱式調(diào)用兩種方法,都以失敗告終。所以,我們認(rèn)為動態(tài)鏈接庫NRER.dll本身的編寫就有問題。這樣,就有充足的理由懷疑其防御攻擊的能力。為此,模擬了C++虛函數(shù)攻擊、SEH攻擊、格式化字符串攻擊,對其進(jìn)行測試。

        3 攻擊測試

        為了驗(yàn)證WehnTrust是否對緩沖區(qū)溢出具有預(yù)期的防御和檢測效果,搭建實(shí)驗(yàn)環(huán)境,完成了4類緩沖區(qū)溢出實(shí)驗(yàn)。

        3.1 使用Metasploit Framework進(jìn)行攻擊測試

        MetasploitFramework是一個(gè)開源攻擊平臺。我們嘗試了幾種攻擊,下面是攻擊過程說明,由于篇幅所限,只給出實(shí)驗(yàn)1的攻擊成功界面截圖。

        (1)實(shí)驗(yàn)1:選取漏洞exploit為:windows/smb/ms08_067_netapi,選取有效載荷payload為windows/shell/bind_tcp;目標(biāo)主機(jī)選擇使用Windows XP SP1中文版。

        攻擊時(shí),目標(biāo)主機(jī)地址設(shè)置為200.200.200.66,目標(biāo)端口設(shè)置為445,強(qiáng)制打開的端口設(shè)置為4444。

        攻擊成功界面如圖2所示,已經(jīng)進(jìn)入了目標(biāo)主機(jī)的命令提示符窗口,此時(shí)可以在目標(biāo)主機(jī)上進(jìn)行任意操作,說明攻擊成功。安裝WehnTrust后攻擊還可以成功。

        圖2 攻擊成功界面

        (2)實(shí)驗(yàn) 2:選取漏洞 exploit為:windows/smb/psexec;選取有效載荷payload為:windows/shell/bind_tcp;目標(biāo)主機(jī)使用Windows 2000中文版。安裝WehnTrust后仍可以攻擊成功。

        (3)實(shí)驗(yàn)3:選取漏洞exploit為:windows/browser/ani_loadimage_chunksize;選取有效載荷payload為:windows/shell/bind_tcp;目標(biāo)主機(jī)使用Windows XP SP1中文版。安裝WehnTrust后仍可以攻擊成功。

        (4)實(shí)驗(yàn)4:選取漏洞exploit為:windows/browser/aim_goaway;選取有效載荷payload為:windows/shell/bind_tcp;目標(biāo)主機(jī)使用Windows XP SP1中文版。安裝WehnTrust后仍可以攻擊成功。

        (5)實(shí)驗(yàn)5:選取漏洞exploit為:windows/browser/aol_ampx_convertfile;選取有效載荷payload為:windows/shell/bind_tcp;目標(biāo)主機(jī)使用Windows XP SP1中文版。安裝WehnTrust后仍可以攻擊成功。

        上述5種成功的攻擊實(shí)驗(yàn),WehnTrust都不能阻止攻擊行為,甚至根本無法發(fā)現(xiàn)。這樣就驗(yàn)證了對其防御能力的懷疑。為了進(jìn)一步確定我們的結(jié)論,模擬實(shí)現(xiàn)了 C++虛函數(shù)攻擊、SEH覆寫攻擊、格式化字符串攻擊,進(jìn)行針對性測試。

        3.2 攻擊C++虛函數(shù)

        首先編寫一個(gè)通用的shellcode[10-11],下文中都將用到這個(gè)shellcode,它的功能是彈出一個(gè)對話框,顯示字符串“success!”。

        char shellcode[]=

        "xFCx68x6Ax0Ax38x1Ex68x63x89xD1x4Fx68x32x74x91x0C"

        "x8BxF4x8Dx7ExF4x33xDBxB7x04x2BxE3x66xBBx33x32x53"

        "x68x75x73x65x72x54x33xD2x64x8Bx5Ax30x8Bx4Bx0Cx8B"

        "x49x1Cx8Bx09x8Bx69x08xADx3Dx6Ax0Ax38x1Ex75x05x95"

        "xFFx57xF8x95x60x8Bx45x3Cx8Bx4Cx05x78x03xCDx8Bx59"

        "x20x03xDDx33xFFx47x8Bx34xBBx03xF5x99x0FxBEx06x3A"

        "xC4x74x08xC1xCAx07x03xD0x46xEBxF1x3Bx54x24x1Cx75"

        "xE4x8Bx59x24x03xDDx66x8Bx3Cx7Bx8Bx59x1Cx03xDDx03"

        "x2CxBBx95x5FxABx57x61x3Dx6Ax0Ax38x1Ex75xA9x33xDB"

        "x53x68x65x73x73x21x68x73x75x63x63x8BxC4x53x50x50"

        "x53xFFx57xFCx53xFFx57xF8x90x90x90x90x90x90x90x90";

        關(guān)于C++虛函數(shù)存在的漏洞,請參考相關(guān)文獻(xiàn),這里不再贅述。當(dāng)內(nèi)存中有多個(gè)虛表對象時(shí),如果上一對象中的成員變量[12-13]發(fā)生溢出,能夠有機(jī)會去修改下一對象的虛表指針,就可以通過人為修改,使程序在調(diào)用下一個(gè)對象的虛函數(shù)時(shí),轉(zhuǎn)而去執(zhí)行設(shè)計(jì)好的shellcode。設(shè)計(jì)的源碼的核心代碼如下:

        int*addr=(int*)(overflow.buf-4);

        int*my_addr=(int*)(my_overflow.my_buf-4);

        int addr_shellcode=(int)&shellcode;

        int addr_proc=(int)&addr_shellcode;

        *my_addr=addr_proc;

        strcpy(overflow.buf,bufoverflow);

        Cmy_test*p=&my_overflow;

        p->my_test();

        程序中通過addr=overflow.buf-4定位到虛表指針1;上一對象的成員變量向下溢出,使其精確地覆蓋掉第2個(gè)對象的虛表指針,將其修改為定制的虛表地址;當(dāng)程序調(diào)用第2個(gè)對象的虛函數(shù)時(shí),會找到偽造的虛表地址,進(jìn)而找到定制的shellcode,并執(zhí)行它。本過程如圖3所示。

        實(shí)驗(yàn)環(huán)境為:WindowsXPSP2,VisualC++6.0Debug版本。按照上述的環(huán)境運(yùn)行,可以得出的結(jié)果如圖4所示。

        安裝WehnTrust后,WehnTrust修改了注冊表,并生成了系統(tǒng)目錄下的驅(qū)動文件baserand.sys,此時(shí),不能阻止實(shí)驗(yàn)成功。重啟計(jì)算機(jī)后,實(shí)驗(yàn)不能成功。刪除baserand.sys,再次重啟計(jì)算機(jī)后,實(shí)驗(yàn)可以正常進(jìn)行,WehnTrust并不能阻止,由此可以說明,正是baserand.sys阻止了實(shí)驗(yàn)的正常進(jìn)行。

        3.3 SEH攻擊測試

        關(guān)于SEH攻擊[14]的詳細(xì)原理,請參考相關(guān)文獻(xiàn)。本次實(shí)驗(yàn)使用的shellcode1中的“…shellcode…”部分為上文用到的shellcode內(nèi)容。測試代碼如下:

        圖3 攻擊C++虛函數(shù)過程

        圖4 C++虛函數(shù)攻擊成功界面

        char shellcode1[]=

        "x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90"

        "x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90"

        "… shellcode…"

        "x90x90x90x90"

        "x98xFEx12x00";//shellcode1的地址

        void test(shellcode1)

        {char buf[200];

        int zero=0;

        __try

        {strcpy(buf,shellcode1);

        zero=4/zero; }

        __except(MyExceptionhandler()){} }

        對代碼說明如下:

        (1)函數(shù)test()中使用了函數(shù)strcpy()創(chuàng)造一個(gè)典型的棧溢出漏洞;除零操作zero=4/zero會產(chǎn)生一個(gè)異常。

        (2)由于函數(shù)中使用了_try{}_except{},編譯器將會在test的函數(shù)棧幀中安裝一個(gè)SEH結(jié)構(gòu)來實(shí)現(xiàn)異常處理。

        (3)當(dāng)strcpy操作沒有產(chǎn)生溢出時(shí),除零操作的異常將最終被MyExceptionhandler函數(shù)處理。

        (4)當(dāng)strcpy操作產(chǎn)生溢出,并精確地將棧幀中的SEH異常處理句柄修改為shellcode的入口地址時(shí),操作系統(tǒng)將會錯(cuò)誤地使用shellcode去處理除零異常。

        本實(shí)驗(yàn)的關(guān)鍵在于確定棧幀中SEH回調(diào)句柄的偏移,然后布置緩沖區(qū),精確地淹沒這個(gè)位置,將該句柄修改為shellcode的起始位置。使用環(huán)境為:Windows2000,VisualC++6.0Release版本。SEH攻擊過程如圖5所示,攻擊成功界面如圖6所示。

        圖5 SEH攻擊過程

        圖6 SEH攻擊成功界面

        安裝WehnTrust后的實(shí)驗(yàn)結(jié)果與攻擊C++虛函數(shù)的實(shí)驗(yàn)結(jié)果相同,也就是說,baserand.sys驅(qū)動文件阻止了攻擊行為。

        3.4 利用格式化字符串攻擊測試

        格式化字符串漏洞[15]的有關(guān)內(nèi)容請參考相關(guān)文獻(xiàn)。在本次實(shí)驗(yàn)中,采用最常用的printf()函數(shù)。源代碼如下:

        int p=111,q=222;

        printf("p=%d,q=%b",p,q);

        printf(" p=%d,q=%d,t=%d ");

        int m=0;

        printf("寫入之前:m=%d ",m);

        printf("success:%d%n ",m,&m);

        printf("寫入之后:m=%d ",m);

        上面代碼中,第1個(gè)printf()函數(shù)的調(diào)用是正確的,而第2個(gè)printf()函數(shù)則缺少了輸出數(shù)據(jù)的變量列表。

        本次實(shí)驗(yàn)環(huán)境為:WindowsXPSP2,Release版本。編譯運(yùn)行后,實(shí)驗(yàn)結(jié)果如圖7所示。

        圖7 格式化串實(shí)驗(yàn)截圖

        第2個(gè)printf()函數(shù)編譯器并沒有報(bào)錯(cuò),程序可以正常運(yùn)行,但結(jié)果為“p=4223088,q=111,t=222”。使用OllyDbg調(diào)試后得到,第1次調(diào)用printf()時(shí),參數(shù)按照從右向左的順序入棧。第2次調(diào)用發(fā)生時(shí),由于參數(shù)中少了數(shù)據(jù)列表部分,故只壓入格式控制符參數(shù)。這時(shí)棧中狀態(tài)如圖8所示。

        圖8 printf調(diào)用時(shí)的內(nèi)存格局

        由于printf()函數(shù)調(diào)用時(shí),沒有給出“輸出數(shù)據(jù)列表”,但系統(tǒng)仍按照“格式控制符”所指明的方式輸出棧中緊隨其后的兩個(gè)DWORD。故4223088的十六進(jìn)制形式為0x00407070,是指向格式控制符“p=%d,q=%d,t=%d ”的指針;111是殘留下來的變量p的值,而222是殘留下來的q的值。

        第4個(gè)printf()函數(shù)中使用了控制符“%n”,此控制符用于把當(dāng)前輸出的所有數(shù)據(jù)的長度寫入一個(gè)變量中去。這條語句會將調(diào)用最終輸出的字符串長度寫入變量m中,“success:0”長度為9,所以這次調(diào)用后m將被修改為9。安裝上WehnTrust之后,程序依然可以運(yùn)行,并且結(jié)果正常。此實(shí)驗(yàn)表明WehnTrust并不能阻止格式化串攻擊。格式化串漏洞原理如圖9所示。

        圖9 格式化串漏洞原理

        4 結(jié)束語

        通過對WehnTrust源碼的分析及調(diào)試,使用緩沖區(qū)溢出工具 Metasploit Framework進(jìn)行了 5種攻擊實(shí)驗(yàn),并針對WehnTrust所具有的特性,設(shè)計(jì)了3種針對性的攻擊實(shí)驗(yàn),可以得出如下結(jié)論:8次攻擊實(shí)驗(yàn),只有兩次攻擊被baserand.sys阻止,但WehnTrust沒有檢測到攻擊行為;刪除baserand.sys后,WehnTrust沒有任何防御攻擊的能力。因此,可以看出,WehnTrust并不完全具備其研發(fā)者所聲稱的防御特性,只能的阻止部分攻擊。盡管如此,但該開源項(xiàng)目所提出的思想及設(shè)想很有價(jià)值,對其進(jìn)行研究并在此基礎(chǔ)上開發(fā)、擴(kuò)展,將是下一步的工作重點(diǎn)。

        [1]wehnus.WehnTrust[OL].http://www.wehnus.com/products.pl,2006.

        [2]吳海燕,蔣東興,程志銳,等.入侵防御系統(tǒng)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(24):5844-5866.

        [3]李小平,王意潔,王勇軍.入侵防御系統(tǒng)的研究與設(shè)計(jì)[J].微計(jì)算機(jī)信息,2006,22(11-3):88-90.

        [4]Wang Jie,Zheng Xiao,Liu Ya-bin.Complete rule base of intrusion prevention system[J].Computer Engineering and Application,2009,45(9):88-91.

        [5]ShachamH.Ontheeffectivenessofaddress-spacerandomization[C].Washington,DC:Proceedings of the 11th ACM Conference on Computer and Communications Security,2004:53-61.

        [6]LiLixin,JamesE just.Address-spacerandomization for windows systems[C].Virginia:Defense Advanced Research Project Agency,2007:72-79.

        [7]Nagy B.SEH(structured exception handling)security changes in XP SP2 and SP1[C].Phoenix:eEye Digital Security,2006:60-66.

        [8]James E S,Ravi N.Virtual machines versatile platforms for systems and process[M].San Francisco:Morgan Kaufmann,2006:12-49.

        [9]Wei Li,Tzi-cker Chiueh.Automated format string attack prevention for Win32/X86 binaries[C].Miami:23rd Annual Computer Security Applications Conference,2007:398-407.

        [10]王清.0day安全:軟件漏洞分析技術(shù)[M].北京:電子工業(yè)出版社,2008:72-79.

        [11]Meyers S.More effective C++[M].北京:電子工業(yè)出版社,2006:77-94.

        [12]Roos T,Wetting H,Grunwald P.On discriminative bayesian network classifiers and logistic regression[J].Machine Learning,2005,59(3):267-296.

        [13]CWE,Vulnerability type distributions in CVE[OL].http://cwemitre.org/documents/vulntrends/index.htm#introduction,2007.

        [14]Pietrek,Matt.A crash course on the depths of Win32 structured exception handling[OL].http://www.microsoft.com/msj/0197/exception/excep-tion.aspx,2006.

        [15]Chen S,Tang Y,Stateful D.Dos attacks and targeted filtering[J].Journal of Networking and Computer Applications,2007,30(3):20-26.

        猜你喜歡
        格式化字符串調(diào)用
        現(xiàn)代人守則:昏死之前請把手機(jī)格式化
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        格式化
        詩林(2016年5期)2016-10-25 07:51:39
        一種新的基于對稱性的字符串相似性處理算法
        利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
        依據(jù)字符串匹配的中文分詞模型研究
        一種針對Java中字符串的內(nèi)存管理方案
        久久久极品少妇刺激呻吟网站| 国产老妇伦国产熟女老妇高清| 特黄三级一区二区三区| av免费资源在线观看| 成熟丰满熟妇av无码区| 成人h动漫精品一区二区| A阿V天堂免费无码专区| 丝袜美腿诱惑区在线播放| √天堂资源中文www| 色视频www在线播放国产人成| 无码在线观看123| 精品国产a毛片久久久av| 久久人人爽av亚洲精品| 成人性生交片无码免费看| 国产成人精品无码一区二区老年人 | 中文字幕乱码日本亚洲一区二区 | av一区无码不卡毛片| 一二区视频免费在线观看| 狂猛欧美激情性xxxx大豆行情| 亚洲国产精品久久久久婷婷老年 | 日韩av天堂一区二区三区在线| 国产免费a∨片在线软件| 两个黑人大战嫩白金发美女| 久久亚洲一级av一片| 亚洲国产一区二区三区| 无码福利写真片视频在线播放| 伊人久久大香线蕉在观看| 美女被躁到高潮嗷嗷免费观看| 精品久久久久久无码专区| 蜜桃av噜噜一区二区三区| 熟女少妇av免费观看| 亚洲黄片av在线播放| 日韩激情无码免费毛片| 日韩人妻无码精品久久伊人| 亚洲天堂av一区二区三区不卡| 波多野结衣久久精品99e| 欧美亚洲日本在线| 色婷婷一区二区三区四| 无码中文字幕人妻在线一区| 久久久久亚洲av无码专区| 精品中文字幕手机在线|