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

        ?

        基于逆向分析的緩沖區(qū)溢出實(shí)驗(yàn)設(shè)計(jì)與研究

        2020-12-28 11:53:14李春秋何軍朱靜怡
        電腦知識與技術(shù) 2020年31期
        關(guān)鍵詞:緩沖區(qū)漏洞安全

        李春秋 何軍 朱靜怡

        摘要:隨著云計(jì)算、大數(shù)據(jù)和人工智能的飛速發(fā)展,安全問題也日益突出?!皼]有網(wǎng)絡(luò)安全就沒有國家安全”,緩沖區(qū)溢出作為網(wǎng)絡(luò)安全漏洞中的高發(fā)地帶,在操作系統(tǒng)和眾多的應(yīng)用軟件中廣泛存在,且很難被主動發(fā)現(xiàn)。緩沖區(qū)溢出的學(xué)習(xí)成本較低,造成的破壞力極大。該實(shí)驗(yàn)構(gòu)建兩個(gè)虛擬網(wǎng)絡(luò),模擬搭建含有緩沖區(qū)溢出漏洞的Linux服務(wù)器,使用GDB逆向分析技術(shù),探測并計(jì)算緩沖區(qū)buffer的長度,計(jì)算出ESP,手工編寫程序,利用緩沖區(qū)溢出漏洞發(fā)起進(jìn)攻的演示。闡述緩沖區(qū)溢出漏洞造成的危害以及如何檢測和防御緩沖區(qū)溢出漏洞,以降低緩沖區(qū)溢出帶來的安全風(fēng)險(xiǎn)。

        關(guān)鍵詞:逆向分析;緩沖區(qū);漏洞;安全;溢出

        中圖分類號:TP311 ? ? ? ?文獻(xiàn)標(biāo)識碼:A

        文章編號:1009-3044(2020)31-0240-04

        Abstract: With the rapid development of cloud computing, big data and artificial intelligence, security issues are increasingly prominent. "Without network security, there is no national security". As a high incidence area of network security vulnerabilities, buffer overflow exists widely in the operating system and many application software, and it is difficult to be found actively. The learning cost of buffer overflow is low, which causes great damage. In this experiment, we build two virtual networks, simulate the Linux server with buffer overflow vulnerability, use GDB reverse analysis technology to detect and calculate the length of buffer, calculate ESP, write programs manually, and use buffer overflow vulnerability to launch attack demonstration. This paper expounds the harm caused by buffer overflow and how to detect and defend buffer overflow to reduce the security risk brought by buffer overflow.

        Key words: reverse analysis;buffer;vulnerability;security;overflow

        當(dāng)我們在計(jì)算機(jī)上執(zhí)行程序時(shí),操作系統(tǒng)會在內(nèi)存區(qū)域分配一段連續(xù)的區(qū)域用來存放需要的數(shù)據(jù),然后將計(jì)算機(jī)的外存?zhèn)鬏數(shù)絻?nèi)存中用于等待指令操作,這一段連續(xù)的區(qū)域就是緩沖區(qū)區(qū)域。緩沖區(qū)的區(qū)域由程序本身定義,所以當(dāng)攻擊者探測出緩沖區(qū)的長度,并將大于緩沖區(qū)長度的數(shù)據(jù)惡意寫入,就會觸發(fā)緩沖區(qū)溢出。對于存在這種問題的程序,就有緩沖區(qū)溢出漏洞,攻擊者往往會根據(jù)緩沖區(qū)溢出漏洞,基于探測或者逆向分析技術(shù),精準(zhǔn)找出RET的ESP,然后構(gòu)造shellcode,對目標(biāo)機(jī)器發(fā)起攻擊。攻擊者使用未授權(quán)的管理員權(quán)限,可以對目標(biāo)機(jī)器執(zhí)行任何操作,如開后門、掛木馬、暴露數(shù)據(jù)庫、安裝挖礦程序等,更大的威脅是可以對目標(biāo)機(jī)器的內(nèi)網(wǎng)進(jìn)行滲透,對整個(gè)單位的數(shù)據(jù)和應(yīng)用程序安全形成巨大的隱患。

        緩沖區(qū)溢出已經(jīng)成為十分嚴(yán)重的安全問題,產(chǎn)生的原因是馮·諾伊曼結(jié)構(gòu)的計(jì)算機(jī)內(nèi)存中并未對存儲的數(shù)據(jù)進(jìn)行校驗(yàn),無法區(qū)分內(nèi)存中的數(shù)據(jù)和代碼,且現(xiàn)階段去更換計(jì)算機(jī)結(jié)構(gòu)的概率幾乎為零,所以只能從現(xiàn)有的技術(shù)中去發(fā)掘檢測和防御緩沖區(qū)溢出漏洞的方法,而DEP(數(shù)據(jù)執(zhí)行保護(hù))就能從區(qū)分?jǐn)?shù)據(jù)和代碼這一功能上進(jìn)行防御。

        緩沖區(qū)溢出常見類型一般分為棧溢出和堆溢出[1]。堆溢出發(fā)生的主要原因是堆在接收到內(nèi)存分配指令后,沒有對寫入內(nèi)存中的數(shù)據(jù)進(jìn)行檢查;棧溢出產(chǎn)生的主要原因是C語言的標(biāo)準(zhǔn)庫中沒有對復(fù)制到緩沖區(qū)中數(shù)據(jù)的長度進(jìn)行檢查[2],所以當(dāng)復(fù)制到緩沖區(qū)中數(shù)據(jù)的長度大于原本設(shè)定的緩沖區(qū)長度,就會觸發(fā)溢出。

        1理論分析

        1.1緩沖區(qū)溢出

        能夠查到記載的緩沖區(qū)溢出漏洞的惡意利用是在1988年,這是Morris蠕蟲在互聯(lián)網(wǎng)上少量的幾個(gè)漏洞其中之一,含有漏洞的是一個(gè)叫finger的服務(wù)程序,源自Unix操作系統(tǒng),利用的是棧溢出漏洞。2017年,一個(gè)名為“永恒之藍(lán)”的勒索病毒造成的波及范圍極大,這款病毒同樣也是利用了緩沖區(qū)溢出漏洞[3],較近的CVE2018-6789漏洞是利用Linux上的郵件傳輸代理服務(wù)造成的,該漏洞是由于base64d()函數(shù)中b64decode的緩沖區(qū)長度沒有有效檢測,當(dāng)惡意觸發(fā)計(jì)算錯(cuò)誤并無法解析時(shí),base64字符串則可能會覆蓋堆內(nèi)存,進(jìn)而覆蓋關(guān)鍵數(shù)據(jù),base64解碼是一種廣泛使用的函數(shù),并且字節(jié)是開發(fā)者自行設(shè)計(jì),因此增加了易用性,可以廣泛用于使用遠(yuǎn)程代碼執(zhí)行來控制目標(biāo)機(jī)器。

        2018年OWASP(開放式Web應(yīng)用程序安全項(xiàng)目)的Web應(yīng)用十大最嚴(yán)重的安全風(fēng)險(xiǎn)中,使用含有已知漏洞的組件C(Using Components with KnownVulnerabilities)排名第9[5]。2010-2011年,CWE/SANS組織統(tǒng)計(jì)的數(shù)據(jù)中顯示,緩沖區(qū)溢出漏洞在最危險(xiǎn)的程序設(shè)計(jì)錯(cuò)誤中排第3[6],并且,CWE公布自身的軟件脆弱性枚舉庫中,涉及緩沖區(qū)溢出漏洞的有21條[7]。2018年12月,CNNVD(國家信息安全漏洞庫)報(bào)告公布新增安全漏洞1275個(gè),其中緩沖區(qū)漏洞就有196個(gè),占比約為15.37%。

        1.2 windows緩沖區(qū)溢出

        首先,需要了解windows環(huán)境中函數(shù)的執(zhí)行原理。當(dāng)系統(tǒng)需要去調(diào)用某個(gè)函數(shù)的時(shí)候,計(jì)算機(jī)需要按下列步驟執(zhí)行:

        (1)首先架設(shè)有4個(gè)參數(shù),名稱分別為parameter1,parameter2、parameter3和parameter4,按照從右到左的順序依次入棧;

        (2)EIP(指令寄存器)的數(shù)據(jù)作為RET入棧;

        (3)EBP(基址寄存器)的數(shù)據(jù)入棧;

        (4)將當(dāng)前ESP的數(shù)據(jù)賦值給EBP;

        (5)假設(shè)有兩個(gè)變量var1,var2,其數(shù)據(jù)類型為int,為函數(shù)的變量開辟內(nèi)存空間時(shí),var1的變量地址為[EBP-4],var2的變量地址為[EBP-8]。

        當(dāng)函數(shù)執(zhí)行周期結(jié)束,根據(jù)先進(jìn)后出的棧規(guī)則,出棧順序?yàn)椋簐ar2,var1,EBP的數(shù)據(jù),EIP的數(shù)據(jù),parameter1,parameter2、parameter3和parameter4。

        若定義一個(gè)數(shù)組buffer長度為8,那么buffer本身8個(gè)元素在內(nèi)存中的地址的從高到低分別是[EBP-4],[EBP-8],…,[EBP-32]。當(dāng)使用函數(shù)strcpy()給buffer數(shù)組賦值時(shí),入棧的順序就是從低地址向高地址,若此時(shí)入棧的字符串長度大于8個(gè)字符,多出部分的字符串就會去覆蓋原有的EBP和RET,從而觸發(fā)緩沖區(qū)溢出。

        1.3 linux緩沖區(qū)溢出

        程序通常都是由代碼和數(shù)據(jù)構(gòu)成的,默認(rèn)情況下代碼和數(shù)據(jù)都是靜態(tài)。需要運(yùn)行程序時(shí),操作系統(tǒng)會首先創(chuàng)建所需進(jìn)程,接著會在內(nèi)存中為進(jìn)程開辟虛擬地址空間,為代碼段和數(shù)據(jù)段建立映射關(guān)系。程序想要正式運(yùn)行,僅有代碼段和數(shù)據(jù)段是無法完成的,還需要很多動態(tài)環(huán)境,堆和棧就是最重要的環(huán)境。Linux的進(jìn)程地址空間布局見圖1。

        首先會由execve(2)為進(jìn)程的代碼段和數(shù)據(jù)段建立映射關(guān)系,接下來操作系統(tǒng)的缺頁異常處理會將代碼段和數(shù)據(jù)段讀入內(nèi)存,同時(shí)execve(2)會清零bss段,這也就合理解釋了當(dāng)未賦值的全局變量及靜態(tài)變量默認(rèn)初值為零的原因。進(jìn)程空間的最高位地址用于存放命令參數(shù)和環(huán)境變量等,堆和棧就在中間位置,作為進(jìn)程動態(tài)運(yùn)行環(huán)境,棧向下伸展,而堆向上伸展。堆棧中存放了C語言標(biāo)準(zhǔn)庫中的函數(shù)對應(yīng)的堆棧幀,當(dāng)需要調(diào)用函數(shù)時(shí),被調(diào)用函數(shù)的堆棧幀被壓入,當(dāng)需要返回時(shí),被壓入的堆棧幀從堆棧中彈出。一般堆棧幀的結(jié)構(gòu)如圖2所示。由高往低,依次是函數(shù)的實(shí)參、函數(shù)的返回地址、前一個(gè)堆棧幀的指針和函數(shù)局部變量使用的空間。一般堆棧幀有兩個(gè)指針,一個(gè)是堆棧幀指針,指向的位置是固定的,一個(gè)是棧頂指針,在函數(shù)運(yùn)行過程中指向的位置是可變的。所以,在函數(shù)訪問實(shí)參和局部變量時(shí),都是以堆棧指針為基礎(chǔ)地址,加上偏移量確定。

        函數(shù)調(diào)用的過程如下:

        (1)調(diào)用函數(shù)時(shí),堆棧從由高往低依次是被調(diào)用函數(shù)的實(shí)參、EIP原始值、EBP原始值、被調(diào)用函數(shù)的局部變量。

        (2)由于被調(diào)用函數(shù)的局部變量的地址是已知的,EIP原始的位置就和局部變量地址位置較近。

        (3)被調(diào)用函數(shù)需要返回時(shí),由返回地址報(bào)對戰(zhàn)中的EIP原始值重新賦予EIP。所以,只要找到堆棧中的EIP原始值的位置,修改為Shellcode的地址就能觸發(fā)攻擊。

        1.4軟件逆向工程

        軟件逆向工程(Software Reverse Engineering),又被稱軟件反向工程。泛指從已設(shè)計(jì)成型且可運(yùn)行的程序系統(tǒng)研究開始,綜合運(yùn)用密碼學(xué)加密解密、匯編和反匯編、操作系統(tǒng)分析和程序邏輯分析等多種計(jì)算機(jī)技術(shù),對程序的編程語言、代碼結(jié)構(gòu)、流程算法等方面進(jìn)行逆向分析,從而推導(dǎo)出程序的源代碼、設(shè)計(jì)思想、流程算法、過程處理等相關(guān)內(nèi)容。這個(gè)綜合分析的過程一般被統(tǒng)稱為軟件逆向工程技術(shù)。在實(shí)際操作中,推導(dǎo)出源代碼和算法的概率極小,軟件逆向工程的目的是用于研究和學(xué)習(xí)。

        2實(shí)驗(yàn)設(shè)計(jì)

        本次實(shí)驗(yàn)設(shè)計(jì)使用strcpy()函數(shù)作為產(chǎn)生緩沖區(qū)溢出的不安全因素。strcpy()的API函數(shù)實(shí)現(xiàn)如下:

        char* strcpy(char *d, const char *s)

        {

        char *r=d;

        while((*d++=*s++));

        return r;

        }

        可以看出,strcpy這個(gè)函數(shù)通過while循環(huán)將所有字符依次賦值給了指針d,再將字符指針r指向d的開始位置(d[0]的地址),并返回r指針的地址。

        舉例說明,假設(shè)A值8字符、B值16字符。若使用strcpy()函數(shù)將B賦值給A,由于B的字符串長度大于A的字符串長度,就會產(chǎn)生溢出。若當(dāng)溢出的值剛好覆蓋到ret的返回地址時(shí),再將需要的地址準(zhǔn)確地覆蓋到ret的esp處,就會執(zhí)行溢出的值。通過構(gòu)造shellcode,從而獲取計(jì)算機(jī)的控制權(quán)限。

        我們將虛擬機(jī)VM1作為服務(wù)器,虛擬機(jī)VM2作為攻擊機(jī)。VM1操作系統(tǒng)為CentOS Linux 5.5,僅安裝工具GCC、GDB和Nginx。VM2操作系統(tǒng)為CentOS Linux 5.5,安裝工具GCC、GDB和Python3/Python2.

        2.1網(wǎng)絡(luò)環(huán)境設(shè)計(jì)

        為了實(shí)現(xiàn)不同網(wǎng)絡(luò)的拓?fù)湓O(shè)計(jì),我們將VM1的網(wǎng)絡(luò)連接模式設(shè)置為“僅主機(jī)模式”,通過共享物理網(wǎng)卡信息,連接網(wǎng)絡(luò)。將VM2的網(wǎng)絡(luò)連接模式設(shè)置為“NAT模式”, 將VM2的網(wǎng)卡連接到虛擬交換機(jī)Vmnet8,然后將連接Vmnet8的虛擬NAT設(shè)備與虛擬DHCP服務(wù)器一起連接在物理網(wǎng)卡上,實(shí)現(xiàn)VM2的網(wǎng)絡(luò)連接。這樣就可以虛擬出兩個(gè)不同的網(wǎng)絡(luò),擺脫了局域網(wǎng)實(shí)驗(yàn)的困境。

        使用Socket編程中的sockaddr_in結(jié)構(gòu)體完成漏洞程序端口的設(shè)計(jì),首先給sockaddr_in變量賦值,因?yàn)轭愋筒煌?,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,然后給sockaddr做參數(shù)。sockaddr_in的作用是定義socket和賦值,sockaddr的作用是函數(shù)參數(shù),最后使用accept綁定端口。

        使用strcpy()函數(shù)的漏洞缺陷,設(shè)計(jì)buffer長度為1000,通過傳參的形式,觸發(fā)緩沖區(qū)溢出漏洞,漏洞程序設(shè)計(jì)如圖3所示。

        將端口綁定程序和緩沖區(qū)溢出漏洞程序整合為vuln.c,使用GCC編譯該文件后,執(zhí)行并設(shè)置綁定任意端口,但不得與現(xiàn)有端口重合。同時(shí)將編譯后的文件vuln放置Nginx目錄,因?yàn)槌R?guī)情況下,做逆向分析都會有原始的安裝程序,此編譯后的程序用于逆向分析,所以必須提供。

        2.2 逆向分析探測設(shè)計(jì)

        使用python編寫ARP掃描工具,使得VM2可以對VM1進(jìn)行端口探測,找出Nginx的目錄,下載編譯后的程序,同時(shí)根據(jù)網(wǎng)絡(luò)基礎(chǔ)知識和社會工程學(xué)查找含有緩沖區(qū)溢出漏洞的服務(wù)端口。通過VM2的GDB調(diào)試工具對可執(zhí)行文件vuln進(jìn)行逆向分析調(diào)試。

        #gdbvlun

        (gdb) run 666

        此時(shí)系統(tǒng)的666端口已經(jīng)自動開啟監(jiān)聽模式,嘗試使用netcat工具進(jìn)行連接。

        nc 127.0.0.1 666

        這個(gè)探測過程可能會出現(xiàn)中斷信息,可以重新運(yùn)行GDB,開啟指定端口。為 "My name is:.." 命令行提供超過1000個(gè)字節(jié)長的輸入,發(fā)現(xiàn)已經(jīng)溢出。這個(gè)探測過程相對簡單,真實(shí)情況下探測溢出長度也不需要很多時(shí)間。

        根據(jù)GDB調(diào)試得到的緩沖區(qū)長度信息,構(gòu)造拒絕服務(wù)攻擊代碼dos.c。

        執(zhí)行dos腳本,使用GDB工具運(yùn)行666端口,發(fā)現(xiàn)已經(jīng)溢出,找到返回地址。

        #./dos 127.0.0.1 666

        #gdb vuln

        (gdb) run 666

        找到返回地址,在本步驟中,盡量選擇中間靠上的位置,使跳轉(zhuǎn)到該地址后,會順延到shellcode位置。緩沖區(qū)的構(gòu)造如圖所示:

        |NOPS|NOPS|NOPS|……|shellcode|RET|RET|……|RET|

        構(gòu)造攻擊代碼exploit.c,步驟如下:

        (1)使用匯編編寫提取或者使用kalilinux生成一個(gè)shellcode代碼;

        (2)定義一個(gè)大于1000字節(jié)的緩沖區(qū),比如1088字節(jié),要保證能夠覆蓋EIP;

        (3)因?yàn)镹OP填充不影響程序整體執(zhí)行,所以采取NOP填充,執(zhí)行代碼memset(buffer, 0x90, 1088);

        (4)將構(gòu)造的shellcode復(fù)制到緩沖區(qū)中,執(zhí)行代碼memcpy(buffer+1001-sizeof(shellcode), shellcode, sizeof(shellcode));

        (5)構(gòu)造一個(gè)buffer[1000] = 0x90,因?yàn)镹OP的十六進(jìn)制值為0x90;

        (6)將返回地址復(fù)制到到緩沖區(qū)的結(jié)尾,其中RET就是返回地址,前面的代碼中用#define定義過的。

        for(i = 1022; i< 1083; i+=4)

        {((int *)&buffer) = RET;}

        由于漏洞程序vuln的緩沖區(qū)是1000字節(jié),程序從998開始復(fù)制RET,直到1083個(gè)字節(jié)的位置為止。

        (7)在緩沖區(qū)的最后以'\0'結(jié)束:buffer[1087] = 0x0;

        至此,構(gòu)造的緩沖區(qū)代碼完成。最后使用exploit攻擊服務(wù)器VM1。由于本次生成的shellcode是執(zhí)行cat /etc/passwd ,所以在VM1上顯示結(jié)果如圖2.可以更換shellcode,采用正向獲取或者反向彈射的方式,達(dá)到獲取ROOT權(quán)限的目的。

        3緩沖區(qū)檢測與防御

        面對緩沖區(qū)溢出漏洞的頻發(fā),檢測和防御成為研究熱點(diǎn),很多世界知名廠商也推出了諸多措施來預(yù)防該類漏洞。軟件層面,例如Microsoft公司在軟件開發(fā)工具中增加了用于檢測緩沖區(qū)溢出的編譯選項(xiàng),用于開發(fā)階段測試是否存在緩沖區(qū)溢出漏洞;在Windows操作系統(tǒng)中使用了結(jié)構(gòu)化異常處理覆蓋的保護(hù)機(jī)制,通過監(jiān)測判斷是否惡意修改數(shù)據(jù)結(jié)構(gòu),進(jìn)而進(jìn)行異常處理,從而阻止惡意修改,增強(qiáng)系統(tǒng)安全性。硬件層面以AMD公司的64位CPU為例,引入了NX機(jī)制,在內(nèi)存空間中將數(shù)據(jù)區(qū)和代碼區(qū)加以區(qū)分,當(dāng)攻擊者利用溢出漏洞執(zhí)行時(shí),會進(jìn)入數(shù)據(jù)區(qū),進(jìn)行異常處理并終止程序運(yùn)行。

        產(chǎn)生緩沖區(qū)溢出漏洞的人為因素,是由軟件開發(fā)項(xiàng)目管理不規(guī)范和開發(fā)人員安全意識薄弱引起的。所以想要從根本上防御緩沖區(qū)溢出漏洞,就是需要采用工程的概念,將開發(fā)安全的需求加入項(xiàng)目規(guī)劃中,和軟件業(yè)務(wù)功能同步進(jìn)行,并且在信息化建設(shè)活動中有關(guān)加強(qiáng)系統(tǒng)安全性活動的集合?!吨腥A人民共和國網(wǎng)絡(luò)安全法》明確指出“建設(shè)關(guān)鍵信息基礎(chǔ)設(shè)施應(yīng)當(dāng)確保其具有支持業(yè)務(wù)穩(wěn)定、持續(xù)運(yùn)行的性能,并保證安全技術(shù)措施同步規(guī)劃、同步建設(shè)、同步使用?!碑?dāng)管理層面的防御問題解決后,需要解決技術(shù)層面的防御,因?yàn)榘踩且粋€(gè)相對概念,所以使用一種技術(shù)防御或者多種技術(shù)防御,都能在一定程度上降低緩沖區(qū)溢出漏洞出現(xiàn)的概率,從而達(dá)到更安全的目的。目前主要的緩沖區(qū)溢出防御措施如下。

        3.1 StackGuard 保護(hù)技術(shù)

        最早提出StackGuard 防護(hù)理論的是《StackGuard: Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks》,發(fā)表在1998年的7th USENIX Security Conference上,作者由 Crispan Cowan[4]等 10 人聯(lián)合署名。該文介紹了GCC編譯器上檢測棧溢出的研究成果,并且首次提出在棧返回地址前加入canary技術(shù),用于防護(hù)檢測,這就是StackGuard技術(shù)的前身。StackGuard技術(shù)檢測原理是當(dāng)攻擊者使用溢出漏洞去覆蓋函數(shù)返回地址時(shí),必然會覆蓋其上方地址的空間,這時(shí)canary必然發(fā)生改變,若檢測到canary發(fā)生改變,則說明已經(jīng)發(fā)生了緩沖區(qū)溢出攻擊。

        3.2 DEP 保護(hù)技術(shù)

        由于產(chǎn)生緩沖區(qū)溢出的根本原因是由于馮·諾依曼結(jié)構(gòu)的計(jì)算機(jī)內(nèi)存中并未對存儲的數(shù)據(jù)進(jìn)行校驗(yàn),無法區(qū)分內(nèi)存中的數(shù)據(jù)和代碼,而DEP(數(shù)據(jù)執(zhí)行保護(hù))就能從區(qū)分?jǐn)?shù)據(jù)和代碼這一功能上進(jìn)行防御。DEP從攻擊者的角度出發(fā),研究攻擊中的共同特征。通過研究發(fā)現(xiàn),當(dāng)發(fā)動緩沖區(qū)溢出時(shí),系統(tǒng)的指令會跳轉(zhuǎn)到攻擊者構(gòu)造的shellcode的地址開始執(zhí)行,若能夠中斷執(zhí)行,就可以保護(hù)程序不受攻擊。所以,DEP標(biāo)記數(shù)據(jù)所在的內(nèi)存頁為不可執(zhí)行狀態(tài),這樣就有效區(qū)分了數(shù)據(jù)和代碼混淆的問題。當(dāng)程序被攻擊者引導(dǎo)進(jìn)入shellcode的時(shí)候,由于數(shù)據(jù)區(qū)域被標(biāo)記為不可執(zhí)行代碼,CPU執(zhí)行到這一段指令時(shí),就會出現(xiàn)異常錯(cuò)誤,從而中斷執(zhí)行。

        DEP主要解決的問題是在數(shù)據(jù)區(qū)去執(zhí)行代碼。目前分為硬件DEP和軟件DEP。硬件DEP是目前DEP技術(shù)的核心,由CPU提供硬件支持,操作系統(tǒng)可以通過對內(nèi)存頁的NX/XD屬性標(biāo)記進(jìn)行設(shè)置,將內(nèi)存頁標(biāo)識為不可執(zhí)行。而軟件DEP,就是微軟引入了S.E.H 的校驗(yàn)機(jī)制 SafeSEH,主要針對SHE攻擊,沒有CPU硬件支持。DEP是一種針對馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)核心問題的解決方法,通過嚴(yán)格區(qū)分?jǐn)?shù)據(jù)和代碼區(qū)域,限制惡意代碼在函數(shù)堆棧上運(yùn)行,能夠保障緩沖區(qū)的安全。但是由于硬件和操作系統(tǒng)的多樣性,為了更好的兼容,所以DEP保護(hù)是可以設(shè)置的,一旦關(guān)閉了DEP,計(jì)算機(jī)就處在了危險(xiǎn)之中。

        3.3 ASLR 保護(hù)技術(shù)

        由于所有的緩沖區(qū)溢出漏洞的利用都離不開返回地址,因?yàn)橹挥姓业綔?zhǔn)確的地址,才能引導(dǎo)至shellcaode的開始地址執(zhí)行,所以為了解決其他緩沖區(qū)溢出保護(hù)措施的問題,Microsoft公司提出了ASLR(地址空間配置隨機(jī)化)技術(shù)。ASLR使用隨機(jī)的方式將傳統(tǒng)不變的基址地址打亂,使得跳轉(zhuǎn)地址不再是固定位置,從而干擾攻擊者定位Shellcode。地址隨機(jī)化是ASLR的核心,當(dāng)ASLR硬件支持開啟后,攻擊者所需要的返回地址就會隨時(shí)發(fā)生變換,增大了探測的困難,也就很難被利用。早在VisualStudio2005 中,Microsoft公司已經(jīng)在編譯程序時(shí)加入了/dynamicbase 鏈接屬性的設(shè)置。若開發(fā)者在編譯程序時(shí)添加了此選項(xiàng),編譯后的程序就支持ASLR技術(shù)。目前ASLR技術(shù)主要分為映像隨機(jī)化、堆棧隨機(jī)化、PEB與TEB隨機(jī)化,較為常見的是映像隨機(jī)化和堆棧隨機(jī)化。映像隨機(jī)化是在PE文件映射到內(nèi)存時(shí),對其加載的虛擬地址進(jìn)行隨機(jī)化分配處理,在系統(tǒng)啟動時(shí)才能確定該地址,當(dāng)系統(tǒng)重啟后,該地址會發(fā)生變化。堆棧隨機(jī)化是將原來固定的棧堆指針基址進(jìn)行隨機(jī)化處理,當(dāng)程序執(zhí)行時(shí)才能確定該地址,所以一個(gè)程序每次運(yùn)行的時(shí)候,棧堆指針基址都是不相同的。ASRL技術(shù)的出現(xiàn),由于程序每次運(yùn)行的地址是隨機(jī)的,只有在程序運(yùn)行的一次操作中探測到所有的信息才能攻擊成功,大大增加了攻擊者的難度。有研究數(shù)據(jù)表明,ASLR技術(shù)已經(jīng)成功減少了緩沖區(qū)溢出的攻擊次數(shù)。

        4結(jié)語

        本實(shí)驗(yàn)?zāi)M了無任何攻擊工具的情況下,使用GDB的反編譯來探測緩沖區(qū)溢出的長度及返回地址,通過構(gòu)造Shellcode及攻擊代碼,最終實(shí)現(xiàn)攻擊成功。在現(xiàn)實(shí)中,緩沖區(qū)溢出一直是信息安全領(lǐng)域的熱點(diǎn)。由于其伴隨C語言而來的屬性,成為不可避免的問題,因?yàn)镃語言天生缺少自動控制邊界的機(jī)制,并且不能通過指針控制數(shù)據(jù)元素的個(gè)數(shù)。

        當(dāng)《中華人民共和國網(wǎng)絡(luò)安全法》發(fā)布時(shí),網(wǎng)絡(luò)安全就已經(jīng)上升到國家戰(zhàn)略的高度。等級保護(hù)制度、護(hù)網(wǎng)行動等,均是管理層面對網(wǎng)絡(luò)安全的重視。對于技術(shù)層面,我們需要進(jìn)一步規(guī)范軟件系統(tǒng)的開發(fā)規(guī)范,將安全工程和系統(tǒng)工程同步開展,針對有可能出現(xiàn)的漏洞,加強(qiáng)軟件投產(chǎn)前的測試工作,進(jìn)一步提高安全性。

        參考文獻(xiàn):

        [1] 唐成華,彭燦,劉猛,等.一種抗地址淹沒的緩沖區(qū)棧溢出算法[J].計(jì)算機(jī)應(yīng)用研究,2017,34(12):3758-3761.

        [2] 邵必林,燕佳芬,邊根慶.緩沖區(qū)溢出漏洞綜合檢測方法研究[J].微電子學(xué)與計(jì)算機(jī),2015,32(7):99-102.

        [3] 李安安,楊德芹,王學(xué)健.軟件系統(tǒng)緩沖區(qū)溢出漏洞防范研究[J].高技術(shù)通訊,2017,27(8):718-726.

        [4]Cowan C,Pu C,Maier D,et al.StackGuard:Automatic Adaptive Detection and Prevention ofBuffer-Overflow Attacks[C].Usenix Security,1998,98:63-78.

        [5] 邵思豪,高慶,馬森,等.緩沖區(qū)溢出漏洞分析技術(shù)研究進(jìn)展[J].軟件學(xué)報(bào),2018,29(5):1179-1198.

        [6]傅建明.計(jì)算機(jī)病毒分析與對抗(第二版)[M].武漢:武漢大學(xué)出版社2009.

        [7] 樂德廣,章亮,鄭力新,等.面向 RTF 文件的 Word 漏洞分析[J].華僑大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,36(1):17-22.

        【通聯(lián)編輯:代影】

        猜你喜歡
        緩沖區(qū)漏洞安全
        嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設(shè)計(jì)與實(shí)現(xiàn)
        漏洞
        三明:“兩票制”堵住加價(jià)漏洞
        漏洞在哪兒
        高鐵急救應(yīng)補(bǔ)齊三漏洞
        關(guān)鍵鏈技術(shù)緩沖區(qū)的確定方法研究
        地理信息系統(tǒng)繪圖緩沖區(qū)技術(shù)設(shè)計(jì)與實(shí)現(xiàn)
        電視技術(shù)(2012年1期)2012-06-06 08:13:58
        国产成人免费一区二区三区 | 少妇被爽到高潮动态图| 午夜成人理论无码电影在线播放| 日本一区午夜艳熟免费| 久久久久亚洲AV无码专| 国产精品无套内射迪丽热巴| 亚洲日产无码中文字幕| 日本一区二区三区资源视频| 蜜桃av在线播放视频| 丰满少妇被猛进去高潮| 亚洲日韩精品一区二区三区无码| 午夜无码伦费影视在线观看| 久久精品亚洲乱码伦伦中文| 91日本在线精品高清观看| 国内偷拍第一视频第一视频区| 国产综合开心激情五月| 欧美男生射精高潮视频网站| 极品少妇一区二区三区四区| 日日干夜夜操高清视频| 深夜福利国产| 亚洲精品av一区二区日韩| 一区二区三区激情免费视频| 亚洲欧美日韩另类精品一区| 男人扒开女人下面狂躁小视频 | 国产男女做爰猛烈视频网站| 国产优质av一区二区三区| а天堂中文在线官网在线| 日日碰狠狠躁久久躁9| 精品少妇大屁股白浆无码| 日韩精品资源在线观看免费| 久久精品国产av麻豆五月丁| 国产真实强被迫伦姧女在线观看 | 一区二区三区婷婷中文字幕| 亚洲精品久久视频网站| 99视频30精品视频在线观看| av大片在线无码免费| 婷婷激情六月| 人妖系列在线免费观看| 精品亚洲麻豆1区2区3区| 成人三级a视频在线观看| 日本一本久道|