日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

操作系统——缓冲区溢出

發(fā)布時(shí)間:2023/12/4 windows 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统——缓冲区溢出 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、緩沖區(qū)溢出介紹

1988年,世界上第一個(gè)緩沖區(qū)溢出攻擊–Morris蠕蟲在互聯(lián)網(wǎng)上泛濫,短短一夜的時(shí)間全世界6000多臺(tái)網(wǎng)絡(luò)服務(wù)器癱瘓或半癱瘓,不計(jì)其數(shù)的數(shù)據(jù)和資料被毀。造成一場(chǎng)損失近億美元的空前大劫難!

那么,緩沖區(qū)溢出到底是怎么一回事呢?

緩沖區(qū)溢出就好比一個(gè)杯子倒太多的水,灑出來(lái),這叫溢出。它是一種非常普遍、非常危險(xiǎn)的漏洞,最常出現(xiàn)在C/C++編寫的程序中。

早期,人們還不那么重視安全的時(shí)候,往往會(huì)使用像strcpy這類不安全函數(shù),這種函數(shù)對(duì)用戶的輸入不作任何檢查,總之,來(lái)自不拒,那么,分配的內(nèi)存空間是有限的,如果輸入超長(zhǎng)的字符串,必然會(huì)導(dǎo)致溢出。

講了這么多,小伙伴會(huì)不會(huì)有點(diǎn)暈嗎?其實(shí),緩沖區(qū)溢出很容易理解的。下面我們看一個(gè)具體的例子:

#include<stdio.h>#include<string.h>int main(){char str[8];char input[256];gets(input);strcpy(str,input);return 0;}

這段代碼存在一個(gè)經(jīng)典的緩沖區(qū)溢出漏洞strcpy,為str變量分配了8個(gè)字節(jié)的空間,輸入小于等于8個(gè)字符,那沒問題:

但是當(dāng)我們輸入超長(zhǎng)的數(shù)據(jù)時(shí),問題出現(xiàn)了

2、緩沖區(qū)溢出帶來(lái)的危害

上面是我們自己寫的程序,存在漏洞這沒什么大驚小怪并不會(huì)造成什么惡劣的影響。但是,如果問題出現(xiàn)在我們常用的一些軟件,比如操作系統(tǒng),瀏覽器,QQ,那后果不堪想象。

緩沖區(qū)溢出中,最為危險(xiǎn)的是堆棧溢出,因?yàn)槿肭终呖梢岳枚褩R绯?#xff0c;在函數(shù)返回時(shí)改變返回程序的地址,讓其跳轉(zhuǎn)到任意地址,帶來(lái)的危害一種是程序崩潰導(dǎo)致拒絕服務(wù),另外一種就是跳轉(zhuǎn)并且執(zhí)行一段惡意代碼,比如得到系統(tǒng)權(quán)限,然后為所欲為。

利用緩沖區(qū)溢出攻擊,可以導(dǎo)致程序運(yùn)行失敗、系統(tǒng)宕機(jī)、重新啟動(dòng)等后果。更為嚴(yán)重的是,它可被利用來(lái)執(zhí)行非授權(quán)指令,甚至可以取得系統(tǒng)特權(quán),進(jìn)而進(jìn)行各種非法操作。

有可能小伙伴你會(huì)對(duì)病毒/蠕蟲沒有概念,那我們來(lái)舉一個(gè)簡(jiǎn)單的例子吧。平時(shí)玩電腦的時(shí)候,你正在聽歌,突然間收到未知的“朋友”發(fā)給你的一個(gè)m3u音頻文件,并引導(dǎo)你進(jìn)行電擊——“這首歌很好聽呢,你也聽聽”。

湊巧的是,你電腦剛好了就裝了VUPlayer.exe 這個(gè)播放器,不多想,就打開這個(gè)音樂想聽聽看,奇怪的是,軟件閃了一下就退出了,你以為是文件損壞了了吧。其實(shí),這個(gè)時(shí)候,你已經(jīng)被黑了,沒錯(cuò)!這就是那個(gè)播放器。

很普通的播放器,但是它存在致命緩沖區(qū)溢出漏洞。我們構(gòu)造10000個(gè)A的m3u文件,然后用調(diào)試器附加VUPlayer.exe,打開文件:

我們看到下面的內(nèi)存全部被字符A覆蓋了,其實(shí)就是使用了不安全的lstrcpyA函數(shù)導(dǎo)致溢出,這個(gè)是棧溢出,還有一種是堆溢出,但本質(zhì)是一樣的。

證明有溢出漏洞之后,往往需要進(jìn)一步分析寫利用代碼,不同的人目的不竟相同,類似我的很多安全愛好者之時(shí)彈彈計(jì)算器(在桌面上不停地彈出計(jì)算器工具),可是黑市上的人就會(huì)攻擊你的系統(tǒng),盜取機(jī)密文件等等。當(dāng)然,這只是一個(gè)簡(jiǎn)單的實(shí)驗(yàn)。

3、目前常見的保護(hù)措施

緩沖區(qū)攻擊的日漸泛濫,微軟并未任其張揚(yáng),陸陸續(xù)續(xù)推出了各種保存措施。其中重要的有GS,SafeSeh,ASLR,DEP等,接下來(lái)我們針對(duì)這些措施進(jìn)行原理分析:

①.GS保護(hù)原理:

通過(guò)VC++編譯器在函數(shù)前后添加額外的處理代碼,前部分用于由偽隨機(jī)數(shù)生成的cookie并放入.data節(jié)段,當(dāng)本地變量初始化,就會(huì)向棧中插入cookie,它位于局部變量和返回地址之間在緩沖區(qū)溢出利用時(shí),如果將惡意代碼從局部變量覆蓋到返回地址,那么自然就會(huì)覆寫cookie,當(dāng)檢測(cè)到與原始cookie不同時(shí),就會(huì)觸發(fā)異常,最后終止進(jìn)程。

②.SafeSeh保護(hù)

為了防止SEH節(jié)點(diǎn)被攻擊者惡意利用,微軟在.net編譯器中加入/sdeseh編譯選項(xiàng)引入SafeSEH技術(shù)。編譯器在編譯時(shí)將PE文件所有合法的異常處理例程的地址解析出來(lái)制成一張表,放在PE文件的數(shù)據(jù)塊(LQAJ)一C0N—FIG)中,并使用shareuser內(nèi)存中的一個(gè)隨機(jī)數(shù)加密,用于匹配檢查。

如果該P(yáng)E文件不支持safesEH,則表的地址為0。當(dāng)PE文件被系統(tǒng)加載后,表中的內(nèi)容被加密保存到ntdl1.dll模塊的某個(gè)數(shù)據(jù)區(qū)。在PE文件運(yùn)行期間,如果發(fā)生異常需要調(diào)用異常處理例程,系統(tǒng)會(huì)逐個(gè)檢查該例程在表中是否有記錄:如果沒有則說(shuō)明該例程非法,進(jìn)而不執(zhí)行該異常例程。

③.ASLR保護(hù)

ASLR(地址空間布局隨機(jī)化)技術(shù)的主要功能是通過(guò)對(duì)系統(tǒng)關(guān)鍵地址的隨機(jī)化,防止攻擊者在堆棧溢出后利用固定的地址定位到惡意代碼并加以運(yùn)行。

④.DEP保護(hù)

數(shù)據(jù)執(zhí)行保護(hù) (DEP) 是一套軟硬件技術(shù),能夠在內(nèi)存上執(zhí)行額外檢查以防止在不可運(yùn)行的內(nèi)存區(qū)域上執(zhí)行代碼

這些保護(hù)機(jī)制的出現(xiàn),一度使得攻擊難度大大增加,但攻擊者們也不是吃素的,他們也在研究繞過(guò)這些保護(hù)的辦法。所謂千里之堤潰于蟻穴,對(duì)于上面的保護(hù),攻擊者只要找到了它們的一個(gè)弱點(diǎn),便可以突破所有防線,實(shí)現(xiàn)攻擊。攻擊與防護(hù),不斷在對(duì)抗,可以預(yù)見,在未來(lái)一段時(shí)間,這種游戲還將持續(xù)上演。

但是,現(xiàn)在的漏洞門檻比十年前高了N倍,筆者在實(shí)際中也常常遇到有漏洞卻不能利用的情況。但是也不要灰心,老的技術(shù)被淘汰,新的技術(shù)又會(huì)出來(lái),本屬正常,但像緩沖區(qū)溢出這種經(jīng)典的東西,無(wú)論什么時(shí)候,都值得我們學(xué)習(xí)。

注:

本文來(lái)自:https://zhuanlan.zhihu.com/p/21924662

溢出實(shí)例見:
https://www.cnblogs.com/clover-toeic/p/3737011.html

總結(jié)

以上是生活随笔為你收集整理的操作系统——缓冲区溢出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。