在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡述緩沖區(qū)溢出攻擊與堆棧保護

jf_78858299 ? 來源:碼農(nóng)的荒島求生 ? 作者:陸小風(fēng) ? 2023-02-15 14:40 ? 次閱讀

在上一篇文章《進程切換的本質(zhì)是什么?》中舉了一個示例,也就是這段代碼:

#include #include 
void funcC() { printf("jump to funcC !!!\\n") ; exit(-1) ;}
void funcB() { long *p = NULL ; p = (long*)&p ; *(p+2) = (long)funcC ;}
void funcA() { funcB();}
int main() { funcA() ; return 0 ;}

有同學(xué)問不能在自己的機器上復(fù)現(xiàn),并給出了編譯后的機器指令:

00000000004005ee :  4005ee:       55                      push   %rbp  4005ef:       48 89 e5                mov    %rsp,%rbp  4005f2:       48 83 ec 10             sub    $0x10,%rsp  4005f6:       64 48 8b 04 25 28 00    mov    %fs:0x28,%rax  4005fd:       00 00  4005ff:       48 89 45 f8             mov    %rax,-0x8(%rbp)  400603:       31 c0                   xor    %eax,%eax  400605:       48 c7 45 f0 00 00 00    movq   $0x0,-0x10(%rbp)  40060c:       00  40060d:       48 8d 45 f0             lea    -0x10(%rbp),%rax  400611:       48 89 45 f0             mov    %rax,-0x10(%rbp)  400615:       48 8b 45 f0             mov    -0x10(%rbp),%rax  400619:       48 83 c0 10             add    $0x10,%rax  40061d:       ba d6 05 40 00          mov    $0x4005d6,%edx  400622:       48 89 10                mov    %rdx,(%rax)  400625:       90                      nop  400626:       48 8b 45 f8             mov    -0x8(%rbp),%rax  40062a:       64 48 33 04 25 28 00    xor    %fs:0x28,%rax  400631:       00 00  400633:       74 05                   je     40063a   400635:       e8 66 fe ff ff          callq  4004a0 <__stack_chk_fail@plt>  40063a:       c9                      leaveq  40063b:       c3                      retq

仔細看這段代碼,有這樣一段可疑的指令:

mov    %fs:0x28,%raxmov    %rax,-0x8(%rbp)

這兩行指令將fs:[0x28] (段尋址的方式)處的值push到了調(diào)用棧上(%rbp偏移8字節(jié)),并在函數(shù)即將返回的時候又檢查了一遍該值有沒有被修改:

mov    -0x8(%rbp),%raxxor    %fs:0x28,%rax

接下來如果保存到棧上的值不等于fs:[0x28]處的值(xor指令進行比較)那么跳轉(zhuǎn)到__stack_chk_fail函數(shù),我們的疑問是為什么要有這么一遍檢查呢?

本質(zhì)上我們在開頭給出的代碼相對于緩沖區(qū)溢出攻擊,做法是修改上一個棧幀的返回地址,將其修改為某個特定地址(黑客希望跳轉(zhuǎn)到的地方);

圖片

在開頭的這段代碼中本來funcA函數(shù)調(diào)用完funcB后需要返回funcA,但在我們的“精心”設(shè)計下調(diào)用完funcB后卻跳轉(zhuǎn)到了funcC ,那么我們有沒有辦法防范這種攻擊呢?

答案是肯定的,這種方法要追溯到很久很久以前。

在上世紀初,煤礦開采是一項很危險的工作,因為煤礦中的有毒氣體通常極難被人類察覺,這給礦工的生命帶來很大的威脅,而金絲雀對毒氣非常敏感,這樣礦工可以利用金絲雀來監(jiān)控礦區(qū),從而提早發(fā)現(xiàn)險情。

這里也是一樣的道理,我們可以在棧區(qū)中放置一個“金絲雀”(fs:[0x28]處的值):

圖片

當函數(shù)返回時我們會再次拿fs:[0x28]處的值與棧上的“金絲雀”進行對比, 一旦發(fā)現(xiàn)這兩個值不同我們就可以認為當前的棧已經(jīng)被破壞了,由于棧上的數(shù)據(jù)已然不可信,因此我們必須及早撤離礦區(qū) ,也就是調(diào)用__stack_chk_fail函數(shù)提前終止進程。

而金絲雀也就是fs:[0x28]是隨機產(chǎn)生的(每次程序運行時都不一樣),因此攻擊者很難提前知道該值是多少。

當然我們也可以看到,添加堆棧保護功能需要增加額外的機器指令,這些也會稍稍對性能產(chǎn)生影響,代價就是需要額外多執(zhí)行一部分機器指令。

這就是編譯器的堆棧保護功能,當然這個功能也是可以去掉的,編譯時添加-fno-stack-protector編譯選項(在這里感謝小風(fēng)哥微信技術(shù)群里同學(xué)的提示),這樣即可關(guān)閉堆棧保護功能,生成的代碼就可以復(fù)現(xiàn)上一篇文章《進程切換的本質(zhì)是什么》中提到的效果了。

怎么樣,想成為黑客還是沒那么容易吧,就好比只有真正理解法律才能鉆空子一樣,只有真正理解計算機的工作原理才能hack它,當然,想成為頂尖黑客只有對計算機的理解還不夠,你還需要有想象力。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 緩沖區(qū)
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    9325
  • 堆棧
    +關(guān)注

    關(guān)注

    0

    文章

    183

    瀏覽量

    20052
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70299
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    溢出隊列緩沖區(qū)

    我用和諧建立了CDC的USB堆棧。如果我慢慢地發(fā)送數(shù)據(jù),效果會很好。我想盡可能快地發(fā)送數(shù)據(jù)。當這樣做時,我溢出隊列緩沖區(qū)。USB_DEVICE_CDC_Write函數(shù)返回以下錯誤,USB_DEVICE_CDC_RESULT_ER
    發(fā)表于 03-24 09:51

    緩沖區(qū)溢出的危害及避免緩沖區(qū)溢出的三種方法

    1. 蠕蟲病毒簡介2. 緩沖區(qū)溢出3. 緩沖區(qū)溢出舉例4. 緩沖區(qū)溢出的危害5. 內(nèi)存在計算機中
    發(fā)表于 03-02 07:55

    緩沖區(qū)溢出的危害及避免緩沖區(qū)溢出的三種方法

    1. 蠕蟲病毒簡介2. 緩沖區(qū)溢出3. 緩沖區(qū)溢出舉例4. 緩沖區(qū)溢出的危害5. 內(nèi)存在計算機中
    發(fā)表于 03-30 14:01

    緩沖區(qū)溢出攻擊模式及其防御的研究

    借助統(tǒng)一建模語言,概括近十年來利用緩沖區(qū)溢出進行攻擊攻擊模式,從預(yù)防、發(fā)現(xiàn)、抵御緩沖區(qū)溢出
    發(fā)表于 12-18 16:42 ?7次下載

    基于中間匯編的緩沖區(qū)溢出檢測模型

    提出一種基于中間匯編的緩沖區(qū)溢出檢測模型,用于對可執(zhí)行代碼進行靜態(tài)分析和檢測。采用中間匯編形式可以使算法對硬件平臺透明,增強代碼可閱讀性,有利于對緩沖區(qū)溢出
    發(fā)表于 03-29 11:10 ?20次下載

    基于狀態(tài)圖的緩沖區(qū)溢出攻擊分析

    結(jié)合緩沖區(qū)溢出攻擊產(chǎn)生的原理,分析緩沖區(qū)溢出攻擊代碼的結(jié)構(gòu),論述Snort規(guī)則對
    發(fā)表于 04-10 08:46 ?32次下載

    基于可執(zhí)行代碼的緩沖區(qū)溢出檢測模型

    根據(jù)緩沖區(qū)溢出原理,提出一種基于可執(zhí)行代碼的緩沖區(qū)溢出檢測模型,給出該模型的理論基礎(chǔ),描述模型構(gòu)建的過程,提出新的緩沖區(qū)引用實例的識別方法。
    發(fā)表于 04-20 09:26 ?31次下載

    二進制掃描的緩沖區(qū)溢出漏洞探測技術(shù)

    緩沖區(qū)溢出漏洞自從出現(xiàn)以來,一直引起許多嚴重的安全性問題,而且隨著軟件系統(tǒng)越做越大,越來越復(fù)雜,緩沖區(qū)溢出漏洞的出現(xiàn)越來越普遍。本文從檢測程序的漏洞方面著
    發(fā)表于 08-10 10:19 ?17次下載

    Windows緩沖區(qū)溢出攻擊的實例研究

    本文首先詳細分析了Windows 緩沖區(qū)溢出的基本原理和具體流程。在此基礎(chǔ)上,通過對一個Windows 網(wǎng)絡(luò)緩沖區(qū)溢出攻擊實例的詳細調(diào)試分析
    發(fā)表于 08-28 09:44 ?17次下載

    緩沖區(qū)溢出攻擊的防護技術(shù)分析

    緩沖區(qū)溢出攻擊已經(jīng)成為網(wǎng)絡(luò)攻擊的主要方式。本文首先分析了緩沖區(qū)溢出
    發(fā)表于 09-02 10:50 ?9次下載

    緩沖區(qū)溢出攻擊的原理和防范技術(shù)分析

    基于解決緩沖區(qū)溢出這一普遍發(fā)生的網(wǎng)絡(luò)安全漏洞的目的,通過軟件、硬件技術(shù)層面的驗證方法,結(jié)合人工檢查、靜態(tài)發(fā)現(xiàn)技術(shù)、動態(tài)防御技術(shù)等實驗手段,得出了在向緩沖區(qū)中傳輸數(shù)
    發(fā)表于 05-27 16:20 ?17次下載

    為什么緩沖區(qū)溢出會帶來危害?會帶來哪些危害?

    在當前網(wǎng)絡(luò)與分布式系統(tǒng)安全中,被廣泛利用的50%以上都是緩沖區(qū)溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩沖區(qū)溢出中,最為危險的是
    發(fā)表于 11-28 14:46 ?1.2w次閱讀
    為什么<b class='flag-5'>緩沖區(qū)</b><b class='flag-5'>溢出</b>會帶來危害?會帶來哪些危害?

    消除IoT上的緩沖區(qū)溢出漏洞

    黑客可以使用堆棧緩沖區(qū)溢出將可執(zhí)行文件替換為惡意代碼,從而允許他們利用堆內(nèi)存或調(diào)用堆棧本身等系統(tǒng)資源。例如,控制流劫持利用堆棧
    的頭像 發(fā)表于 10-12 15:25 ?1127次閱讀
    消除IoT上的<b class='flag-5'>緩沖區(qū)</b><b class='flag-5'>溢出</b>漏洞

    消除物聯(lián)網(wǎng)上的緩沖區(qū)溢出漏洞

      黑客可以使用堆棧緩沖區(qū)溢出將可執(zhí)行文件替換為惡意代碼,從而使他們能夠利用堆內(nèi)存或調(diào)用堆棧本身等系統(tǒng)資源。例如,控制流劫持利用堆棧
    的頭像 發(fā)表于 12-02 11:57 ?1223次閱讀

    WebP圖像編解碼庫libwebp存在堆緩沖區(qū)溢出漏洞

    WebP圖像編解碼庫libwebp存在堆緩沖區(qū)溢出漏洞(CVE-2023-4863),攻擊者可以通過發(fā)送植入惡意代碼的WebP圖像獲得設(shè)備的部分權(quán)限。
    的頭像 發(fā)表于 09-25 09:48 ?5242次閱讀
    WebP圖像編解碼庫libwebp存在堆<b class='flag-5'>緩沖區(qū)</b><b class='flag-5'>溢出</b>漏洞
    主站蜘蛛池模板: 欧美αv| 四虎在线播放免费永久视频 | 黄黄网站| 五月亭亭六月丁香 | 恐怖片大全恐怖片免费观看好看的恐怖片 | 5060精品国产福利午夜 | 在线电影天堂 | tube亚洲高清老少配 | 午夜性福利 | 亚洲天堂第一页 | 男人j桶进女人免费视频 | 日韩精品无码一区二区三区 | 久久久久久久久久久9精品视频 | 亚洲福利一区 | 久久免费观看国产精品 | 五月天婷婷网址 | 色视频免费版高清在线观看 | 在线色片 | 中文字幕一区二区三区四区五区人 | 日本一区二区三区欧美在线观看 | 久久狠狠色噜噜狠狠狠狠97 | 黄色18网站| 国产成人亚洲影视在线 | 多男一女一级淫片免费播放口 | 日本成人免费观看 | 欧美一区二区影院 | 亚洲成在人线中文字幕 | 三级网站在线播放 | 亚洲午夜精品久久久久久抢 | 亚洲国产欧美日韩一区二区三区 | 久综合色| 天堂网2018| 亚洲午夜精品久久久久久成年 | 午夜快播| 中国女人a毛片免费全部播放 | 色牛网| 天天干天天添 | 天天操天天摸天天爽 | 国产精品偷伦费观看 | 国产小视频免费 | www.87福利|