女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

簡(jiǎn)述緩沖區(qū)溢出攻擊與堆棧保護(hù)

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

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

#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é)問不能在自己的機(jī)器上復(fù)現(xiàn),并給出了編譯后的機(jī)器指令:

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

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

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

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

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

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

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

圖片

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

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

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

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

圖片

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

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

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

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

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

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

    關(guān)注

    0

    文章

    36

    瀏覽量

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

    關(guān)注

    0

    文章

    183

    瀏覽量

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

    關(guān)注

    30

    文章

    4886

    瀏覽量

    70203
收藏 人收藏

    評(píng)論

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

    溢出隊(duì)列緩沖區(qū)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    WebP圖像編解碼庫(kù)libwebp存在堆緩沖區(qū)溢出漏洞(CVE-2023-4863),攻擊者可以通過發(fā)送植入惡意代碼的WebP圖像獲得設(shè)備的部分權(quán)限。
    的頭像 發(fā)表于 09-25 09:48 ?5202次閱讀
    WebP圖像編解碼庫(kù)libwebp存在堆<b class='flag-5'>緩沖區(qū)</b><b class='flag-5'>溢出</b>漏洞