色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

簡述緩沖區溢出攻擊與堆棧保護

jf_78858299 ? 來源:碼農的荒島求生 ? 作者:陸小風 ? 2023-02-15 14:40 ? 次閱讀

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

#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 ;}

有同學問不能在自己的機器上復現,并給出了編譯后的機器指令:

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到了調用棧上(%rbp偏移8字節),并在函數即將返回的時候又檢查了一遍該值有沒有被修改:

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

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

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

圖片

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

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

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

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

圖片

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

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

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 緩沖區
    +關注

    關注

    0

    文章

    33

    瀏覽量

    9107
  • 堆棧
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19753
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68524
收藏 人收藏

    評論

    相關推薦

    溢出隊列緩沖區

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

    緩沖區溢出的危害及避免緩沖區溢出的三種方法

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

    緩沖區溢出的危害及避免緩沖區溢出的三種方法

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

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

    借助統一建模語言,概括近十年來利用緩沖區溢出進行攻擊攻擊模式,從預防、發現、抵御緩沖區溢出
    發表于 12-18 16:42 ?7次下載

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

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

    基于狀態圖的緩沖區溢出攻擊分析

    結合緩沖區溢出攻擊產生的原理,分析緩沖區溢出攻擊代碼的結構,論述Snort規則對
    發表于 04-10 08:46 ?32次下載

    基于可執行代碼的緩沖區溢出檢測模型

    根據緩沖區溢出原理,提出一種基于可執行代碼的緩沖區溢出檢測模型,給出該模型的理論基礎,描述模型構建的過程,提出新的緩沖區引用實例的識別方法。
    發表于 04-20 09:26 ?31次下載

    二進制掃描的緩沖區溢出漏洞探測技術

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

    Windows緩沖區溢出攻擊的實例研究

    本文首先詳細分析了Windows 緩沖區溢出的基本原理和具體流程。在此基礎上,通過對一個Windows 網絡緩沖區溢出攻擊實例的詳細調試分析
    發表于 08-28 09:44 ?17次下載

    緩沖區溢出攻擊的防護技術分析

    緩沖區溢出攻擊已經成為網絡攻擊的主要方式。本文首先分析了緩沖區溢出
    發表于 09-02 10:50 ?9次下載

    緩沖區溢出攻擊的原理和防范技術分析

    基于解決緩沖區溢出這一普遍發生的網絡安全漏洞的目的,通過軟件、硬件技術層面的驗證方法,結合人工檢查、靜態發現技術、動態防御技術等實驗手段,得出了在向緩沖區中傳輸數
    發表于 05-27 16:20 ?17次下載

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

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

    消除IoT上的緩沖區溢出漏洞

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

    消除物聯網上的緩沖區溢出漏洞

      黑客可以使用堆棧緩沖區溢出將可執行文件替換為惡意代碼,從而使他們能夠利用堆內存或調用堆棧本身等系統資源。例如,控制流劫持利用堆棧
    的頭像 發表于 12-02 11:57 ?1013次閱讀

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

    WebP圖像編解碼庫libwebp存在堆緩沖區溢出漏洞(CVE-2023-4863),攻擊者可以通過發送植入惡意代碼的WebP圖像獲得設備的部分權限。
    的頭像 發表于 09-25 09:48 ?4939次閱讀
    WebP圖像編解碼庫libwebp存在堆<b class='flag-5'>緩沖區</b><b class='flag-5'>溢出</b>漏洞
    主站蜘蛛池模板: 久久sese| xxxxx中国明星18| 亚洲国产精品一区二区久久第| 女女破视频在线观看| 久久99亚洲AV无码四区碰碰| 国产性色AV内射白浆肛交后入| 国产AV精品无码免费看| 大陆老太交xxxxxhd在线| YY6080A旧里番在线观看| a一级毛片视频免费看| adc免费观看| aaa级黄影片| 爆乳啪啪无码成人二区亚洲欧美| 99精品视频在线观看免费| 131美女爱做视频午夜剧场| 1313久久国产午夜精品理论片| 91次元黄色观看| 68日本xxxxxxxx79| blacked黑人战小美女| A级韩国乱理伦片在线观看| www.青青草.com| 动漫H片在线播放免费高清| 风车动漫(p)_在线观看官网| 国产成人综合视频| 国产偷啪自怕网| 久久精品免费电影| 免费观看激烈日板子| 欧美色偷偷亚洲天堂bt| 骚妇BB双飞插| 亚洲AV精品无码国产一区| 一点色成人| 91av影院| 国产产一区二区三区久久毛片国语 | 久久99热在线观看7| 久久AV无码AV高潮AV不卡| 久久中文字幕人妻熟AV女蜜柚M| 美女脱得只剩皮肤| 人妻熟女斩五十路0930 | 久久re这里视频精品8| 美女张开让男生桶| 日韩欧无码一区二区三区免费不卡 |