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

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

    瀏覽量

    9174
  • 堆棧
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19833
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063
收藏 人收藏

    評論

    相關推薦

    溢出隊列緩沖區

    我用和諧建立了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 ?966次閱讀
    消除IoT上的<b class='flag-5'>緩沖區</b><b class='flag-5'>溢出</b>漏洞

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

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

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

    WebP圖像編解碼庫libwebp存在堆緩沖區溢出漏洞(CVE-2023-4863),攻擊者可以通過發送植入惡意代碼的WebP圖像獲得設備的部分權限。
    的頭像 發表于 09-25 09:48 ?5019次閱讀
    WebP圖像編解碼庫libwebp存在堆<b class='flag-5'>緩沖區</b><b class='flag-5'>溢出</b>漏洞
    主站蜘蛛池模板: 视频一区 中文字幕 | 夜间视频在线观看 | 色综合久久丁香婷婷 | 国产午夜精品一区二区理论影院 | 亚洲综合色一区二区三区小说 | 伊人网站在线观看 | 日本人69xxⅹ69| 三级网站视频 | 38pao强力打造永久免费高清视频 | sihu免费观看在线高清 | 亚色在线 | 久久久久久免费播放一级毛片 | 中文字幕一区二区三区精彩视频 | 亚洲射图 | 久热中文字幕在线精品免费 | 97精品伊人久久久大香线焦 | 四虎国产一区二区三区 | 理论片一区 | 色婷婷久久免费网站 | 免费人成黄页在线观看日本 | 哪里可以看免费毛片 | 加勒比啪啪 | 午夜影音 | 加勒比色综合 | 夜夜爱夜夜做 | 五月婷婷丁香久久 | 九九美剧 | 亚洲图片 欧美色图 | 天天干天天干天天干天天 | sis色中色 | 亚洲精品91香蕉综合区 | 国产清纯白嫩大学生正在播放 | 天天玩夜夜操 | 国产精品露脸脏话对白 | 国产一级特黄特色aa毛片 | 美日韩中文字幕 | 求av网站 | 欧美色图一区二区 | 欧美亚洲专区 | 性夜影院爽黄e爽在线观看 羞羞色院91精品网站 | 天天操网 |