精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解讀Linux安全機制之棧溢出保護

開發 開發工具
今天我們講一講有關Linux安全機制之棧溢出保護的內容。

[[181356]]

一、概述

棧溢出保護是一種緩沖區溢出攻擊緩解手段,當函數存在緩沖區溢出攻擊漏洞時,攻擊者可以覆蓋棧上的返回地址來讓shellcode能夠得到執行。當啟用棧保護后,函數開始執行的時候會先往棧里插入cookie信息,當函數真正返回的時候會驗證cookie信息是否合法,如果不合法就停止程序運行。攻擊者在覆蓋返回地址的時候往往也會將cookie信息給覆蓋掉,導致棧保護檢查失敗而阻止shellcode的執行。在Linux中我們將cookie信息稱為canary(以下統一使用canary)。

gcc在4.2版本中添加了-fstack-protector和-fstack-protector-all編譯參數以支持棧保護功能,4.9新增了-fstack-protector-strong編譯參數讓保護的范圍更廣。以下是-fstack-protector和-fstack-protector-strong的區別:

-fstack-protector和-fstack-protector-strong的區別

Linux系統中存在著三種類型的棧:

  • 應用程序棧:工作在Ring3,由應用程序來維護;
  • 內核進程上下文棧:工作在Ring0,由內核在創建線程的時候創建;
  • 內核中斷上下文棧:工作在Ring0,在內核初始化的時候給每個CPU核心創建一個。

二、 應用程序棧保護

1. 棧保護工作原理

下面是一個包含棧溢出的例子:

  1. /* test.c */ 
  2.  
  3. #include <stdio.h> 
  4.  
  5. #include <string.h> 
  6.  
  7. int main(int argc, char **argv) 
  8.  
  9.  
  10.     char buf[16]; 
  11.  
  12.     scanf("%s", buf); 
  13.  
  14.     printf("%s\n", buf); 
  15.  
  16.     return 0; 
  17.  

我們先禁用棧保護功能看看執行的結果

  1. [root@localhost stackp]# gcc -o test test.c -fno-stack-protector 
  2.  
  3. [root@localhost stackp]# python -c "print 'A'*24" | ./test 
  4.  
  5. AAAAAAAAAAAAAAAAAAAAAAAA 
  6.  
  7. Segmentation fault   <- RIP腐敗,導致異常 

當返回地址被覆蓋后產生了一個段錯誤,因為現在的返回地址已經無效了,所以現在執行的是CPU的異常處理流程。我們打開棧保護后再看看結果:

  1. [root@localhost stackp]# gcc -o test test.c -fstack-protector 
  2.  
  3. [root@localhost stackp]# python -c "print 'A'*25" | ./test 
  4.  
  5. AAAAAAAAAAAAAAAAAAAAAAAAA 
  6.  
  7. *** stack smashing detected ***: ./test terminated  

這時觸發的就不是段錯誤了,而是棧保護的處理流程,我們反匯編看看做了哪些事情:

  1. 0000000000400610 <main>
  2.  
  3.   400610:       55                      push   %rbp 
  4.  
  5.   400611:       48 89 e5                mov    %rsp,%rbp 
  6.  
  7.   400614:       48 83 ec 30             sub    $0x30,%rsp 
  8.  
  9.   400618:       89 7d dc                mov    %edi,-0x24(%rbp) 
  10.  
  11.   40061b:       48 89 75 d0             mov    %rsi,-0x30(%rbp) 
  12.  
  13.   40061f:       64 48 8b 04 25 28 00    mov    %fs:0x28,%rax  <- 插入canary值 
  14.  
  15.   400626:       00 00 
  16.  
  17.   400628:       48 89 45 f8             mov    %rax,-0x8(%rbp) 
  18.  
  19.   40062c:       31 c0                   xor    %eax,%eax 
  20.  
  21.   40062e:       48 8d 45 e0             lea    -0x20(%rbp),%rax 
  22.  
  23.   400632:       48 89 c6                mov    %rax,%rsi 
  24.  
  25.   400635:       bf 00 07 40 00          mov    $0x400700,%edi 
  26.  
  27.   40063a:       b8 00 00 00 00          mov    $0x0,%eax 
  28.  
  29.   40063f:       e8 cc fe ff ff          callq  400510 <__isoc99_scanf@plt> 
  30.  
  31.   400644:       48 8d 45 e0             lea    -0x20(%rbp),%rax 
  32.  
  33.   400648:       48 89 c7                mov    %rax,%rdi 
  34.  
  35.   40064b:       e8 80 fe ff ff          callq  4004d0 <puts@plt> 
  36.  
  37.   400650:       b8 00 00 00 00          mov    $0x0,%eax 
  38.  
  39.   400655:       48 8b 55 f8             mov    -0x8(%rbp),%rdx  <- 檢查canary值 
  40.  
  41.   400659:       64 48 33 14 25 28 00    xor    %fs:0x28,%rdx 
  42.  
  43.   400660:       00 00 
  44.  
  45.   400662:       74 05                   je     400669 <main+0x59> # 0x400669 
  46.  
  47.   400664:       e8 77 fe ff ff          callq  4004e0 <__stack_chk_fail@plt> 
  48.  
  49.   400669:       c9                      leaveq 
  50.  
  51.   40066a:       c3                      retq 

 

我們看到函數開頭(地址:0x40061f)處gcc編譯時在棧幀的返回地址和臨時變量之間插入了一個canary值,該值是從%fs:0x28里取的,棧幀的布局如下:

  1. stack: 
  2.  
  3. | ......          | 
  4.  
  5. | orig_return     | 
  6.  
  7. | orig_rbp        |  <- %rbp 
  8.  
  9. | canary          |  <- -0x8(%rpb), 既 %fs:0x28 
  10.  
  11. | local variables | 
  12.  
  13. |                 |  <- %rsp 

在函數即將返回時(地址:0x400655)檢查棧中的值是否和原來的相等,如果不相等就調用glibc的_stackchk_fail函數,并終止進程。

2. canary值的產生

這里以x64平臺為例,canary是從%fs:0x28偏移位置獲取的,%fs寄存器被glibc定義為存放tls信息的,我們需要查看glibc的源代碼:

  1. typedef struct 
  2.  
  3.  
  4.   void *tcb;        /* Pointer to the TCB.  Not necessarily the 
  5.  
  6.                thread descriptor used by libpthread.  */ 
  7.  
  8.   dtv_t *dtv; 
  9.  
  10.   void *self;       /* Pointer to the thread descriptor.  */ 
  11.  
  12.   int multiple_threads; 
  13.  
  14.   int gscope_flag; 
  15.  
  16.   uintptr_t sysinfo; 
  17.  
  18.   uintptr_t stack_guard;   <- canary值,偏移位置0x28處 
  19.  
  20.   uintptr_t pointer_guard; 
  21.  
  22.   ...... 
  23.  
  24. } tcbhead_t; 

結構體tcbheadt就是用來描述tls的也就是%fs寄存器指向的位置,其中+0x28偏移位置的成員變量stackguard就是canary值。另外通過strace ./test看到在進程加載的過程中會調用arch_prctl系統調用來設置%fs的值,

  1. root@localhost stackp]# strace ./test 
  2.  
  3. execve("./test", ["./test"], [/* 24 vars */]) = 0 
  4.  
  5. ...... 
  6.  
  7. arch_prctl(ARCH_SET_FS, 0x7f985a041740) = 0 
  8.  
  9. ...... 

產生canary值的代碼在glibc的dlmain和_libcstart_main函數中:

  1.   /* Set up the stack checker's canary.  */ 
  2.  
  3.   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random); 
  4.  
  5. # ifdef THREAD_SET_STACK_GUARD 
  6.  
  7.   THREAD_SET_STACK_GUARD (stack_chk_guard); 
  8.  
  9. # else 
  10.  
  11.   __stack_chk_guard = stack_chk_guard; 
  12.  
  13. # endif 

dlrandom是一個隨機數,它由dlsysdepstart函數從內核獲取的。dlsetupstackchkguard函數負責生成canary值,THREADSETSTACK_GUARD宏將canary設置到%fs:0x28位置。

在應用程序棧保護中,進程的%fs寄存器是由glibc來管理的,并不涉及到內核提供的功能。

3. x32應用程序棧保護

解讀完了x64的實現,我們來看看x32下面的情況,我們還是使用上面例子的代碼在x32的機器上編譯,得到下面的代碼:

  1. 08048464 <main>
  2.  
  3.  ...... 
  4.  
  5.  8048474:    65 a1 14 00 00 00      mov   %gs:0x14,%eax  # 插入canary值 
  6.  
  7.  804847a:    89 44 24 3c            mov   %eax,0x3c(%esp) 
  8.  
  9.  ...... 
  10.  
  11.  80484aa:    65 33 15 14 00 00 00   xor   %gs:0x14,%edx  # 檢查canary值 
  12.  
  13.  80484b1:    74 05                  je    80484b8 <main+0x54> # 0x80484b8 
  14.  
  15.  80484b3:    e8 c0 fe ff ff         call  8048378 <__stack_chk_fail@plt> 
  16.  
  17.  80484b8:    c9                     leave 
  18.  
  19.  80484b9:    c3                     ret 

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2009-07-24 17:35:24

2017-06-11 14:37:00

2013-07-15 10:15:28

2011-04-06 16:51:59

Windows Ser數據安全

2010-04-17 19:20:26

2009-07-03 18:59:02

2024-02-27 17:30:11

2021-09-01 13:51:06

網絡安全法基礎設施安全網絡安全

2020-05-26 18:50:46

JVMAttachJava

2019-01-11 09:00:00

2012-11-30 11:08:57

2022-01-03 00:15:06

安全網絡物聯網

2009-10-21 14:36:53

漏洞補丁

2019-01-28 18:05:04

2019-02-13 13:31:42

2017-03-10 09:28:58

2021-12-21 06:07:10

網絡安全網絡攻擊網絡威脅

2022-05-19 07:09:29

機制沙箱安全JVM

2023-03-20 10:09:13

點贊
收藏

51CTO技術棧公眾號

日韩精品 欧美| 亚洲va久久久噜噜噜| 国产制服丝袜在线| 日韩精品一区二区三区av| 国产精品第一页第二页第三页| 成人美女av在线直播| 久草网在线观看| 台湾色综合娱乐中文网| 欧美日韩在线观看一区二区 | 欧美熟妇另类久久久久久不卡| 欧美三级视频| 亚洲午夜av久久乱码| 182午夜视频| 黑森林国产精品av| 欧美国产日本视频| 国产美女精品久久久| 中文字幕 日韩有码| 韩日欧美一区| www日韩中文字幕在线看| 制服丝袜第一页在线观看| 欧美特黄色片| 色综合久久久网| 美女av免费观看| 337p日本欧洲亚洲大胆鲁鲁| 成人黄色av电影| 亚洲va国产va天堂va久久| 无码免费一区二区三区| 在线欧美视频| 不卡伊人av在线播放| 亚洲av无码一区二区三区人| 午夜视频一区二区在线观看| 欧美日韩中文另类| 成人久久久久久久久| 日本电影在线观看| 中文字幕一区视频| 欧美一区二区三区在线免费观看| 亚洲av无码片一区二区三区| 久久精品理论片| 国产精品扒开腿做爽爽爽的视频| 日韩aaaaaa| 黄色av成人| 久久国产精品亚洲| 91香蕉一区二区三区在线观看 | 日韩一区不卡| 天天爽夜夜爽夜夜爽| 国产精品羞羞答答xxdd| 成人免费视频97| 中文精品久久久久人妻不卡| 天堂午夜影视日韩欧美一区二区| 17婷婷久久www| 国产第100页| 亚洲高清久久| 久久久欧美一区二区| 免费在线观看国产精品| 亚洲一区二区三区无吗| 久久影院模特热| 欧美风情第一页| 婷婷综合网站| 久久亚洲国产精品| caoporn91| 欧美激情五月| 欧美黑人性视频| 精品少妇theporn| 亚洲高清二区| 51午夜精品视频| 依依成人综合网| 久久精品日产第一区二区| 欧洲一区二区视频| 免费无码国产精品| 蜜桃视频免费观看一区| 91精品久久久久久久久久久久久久 | 国产精品欧美大片| 亚洲国产精品电影在线观看| 成人在线电影网站| 亚洲国产国产| 色噜噜狠狠狠综合曰曰曰| 国产色无码精品视频国产| 亚洲一级淫片| 26uuu亚洲国产精品| jizz国产在线观看| 久久成人精品无人区| 91免费观看网站| 蜜桃av中文字幕| 久久蜜桃一区二区| 伊人久久大香线蕉成人综合网| 国产区在线观看| 午夜精品一区二区三区免费视频 | 欧美日韩国产另类一区| 性鲍视频在线观看| 老司机凹凸av亚洲导航| 亚洲女人被黑人巨大进入| www.com.av| 亚洲国产网站| 国产精品一区电影| 亚洲精品一区二区三区新线路| 97se亚洲国产综合自在线 | 久久久久国产精品| 国内自拍欧美激情| 在线观看视频二区| 成人精品在线视频观看| 色播五月综合| a级片在线免费观看| 在线视频欧美区| 国产精品99精品无码视亚| 伊人久久大香线蕉综合网蜜芽| 久久精品青青大伊人av| av中文在线播放| 极品少妇xxxx精品少妇偷拍| 国产一区二区高清视频| 欧美日本一道| 色综合久久久久久久| 91大神免费观看| 成人一级毛片| 97视频免费观看| 国产喷水吹潮视频www| 99精品热视频| 4444亚洲人成无码网在线观看| 成人免费福利| 亚洲国产成人精品久久| 91麻豆精品久久毛片一级| 99视频一区| 亚洲一区制服诱惑| h网站视频在线观看| 亚洲国产视频直播| 青娱乐精品在线| 成人情趣视频网站| 欧美在线性爱视频| 色欲av永久无码精品无码蜜桃| 亚洲欧美影音先锋| 香蕉视频网站入口| 日韩美女毛片| 国外成人在线直播| 亚洲第一视频在线| 亚洲免费av在线| 亚洲欧美日韩三级| 欧美天天综合| 国产精品jizz在线观看麻豆| 天堂91在线| 欧美视频在线视频| 91传媒理伦片在线观看| 欧美日韩免费| 99精品国产一区二区| a黄色片在线观看| 欧美一区二区在线看| 小嫩苞一区二区三区| 蜜臀久久99精品久久久画质超高清| 久久99欧美| 狼人综合视频| 日韩精品欧美激情| √资源天堂中文在线| 成人在线视频首页| 日韩精品视频在线观看视频| av成人综合| 国内成人精品一区| 性xxxx视频| 色视频一区二区| 亚洲精品国产91| 日韩高清不卡一区二区| 日韩精品欧美在线| 欧美videos粗暴| 最近日韩中文字幕中文| 97精品人妻一区二区三区香蕉| 国产精品毛片a∨一区二区三区| 69久久久久久| 久久久国产精品| av日韩免费电影| 鲁鲁在线中文| 亚洲欧美日韩爽爽影院| 最近中文字幕在线观看| 亚洲欧洲日韩一区二区三区| 中文字幕无码毛片免费看| 欧美日韩岛国| 精品在线视频一区二区三区| xxx欧美xxx| 最近免费中文字幕视频2019| 99久久久久成人国产免费| 亚洲永久精品大片| 亚洲精品成人无码熟妇在线| 日韩在线一区二区三区| 中文字幕在线中文字幕日亚韩一区| 99久久这里有精品| 久久久久久网址| 国产h在线观看| 91精品国产91久久综合桃花| 日韩欧美a级片| 国产欧美一区二区三区在线老狼| 色91精品久久久久久久久| 欧美特黄视频| 欧美日韩精品免费观看| 欧美日韩伦理一区二区| 国模精品系列视频| av在线播放网站| 精品久久一区二区| 波多野结衣二区三区| 亚洲免费三区一区二区| 大黑人交xxx极品hd| 美女免费视频一区二区| 黄色大片中文字幕| 日韩av久操| 国内精品一区二区| 日韩一级特黄| 97免费在线视频| 1pondo在线播放免费| 亚洲第一视频网| 一区二区三区亚洲视频| 欧美日韩免费在线观看| 国产一二三区精品| 国产农村妇女毛片精品久久麻豆| 无码人妻丰满熟妇区毛片蜜桃精品| 日韩电影免费一区| 波多野结衣av一区二区全免费观看| 国产一区二区观看| 国产高清精品一区| 日韩成人综合网| 欧美在线观看网站| 97caopor国产在线视频| 亚洲视频第一页| 天堂成人在线视频| 日韩一区二区在线播放| 免费精品一区二区| 欧美日韩免费看| xxxx 国产| 亚洲欧美偷拍三级| 麻豆一区在线观看| 久久久国产精品不卡| 成熟妇人a片免费看网站| 国产伦精品一区二区三区在线观看| 无码内射中文字幕岛国片| 亚洲高清激情| 久久99久久久久久| 欧美va天堂| 黄频视频在线观看| 久久电影院7| 午夜精品一区二区三区在线观看| 欧美调教在线| 国产精品一区二| 成人h动漫免费观看网站| 91久久精品国产91性色| 美女视频一区| 国产欧美精品va在线观看| 欧美xxxx做受欧美护士| 国产99视频精品免视看7| av日韩电影| 日本一区二区三区在线播放 | 日本最新高清不卡中文字幕| 国产精品电影| 91av在线播放| 竹内纱里奈兽皇系列在线观看| 性色av香蕉一区二区| 91视频欧美| 68精品国产免费久久久久久婷婷| 国内高清免费在线视频| 久久久在线观看| 91禁在线看| 51ⅴ精品国产91久久久久久| 在线天堂资源| 国产成人精品av在线| 成人亚洲视频| 91九色国产视频| 免费看日产一区二区三区| 97欧洲一区二区精品免费| 亚洲专区**| 好吊色欧美一区二区三区视频 | 一区二区免费在线观看| 91久久久精品国产| av 日韩 人妻 黑人 综合 无码| 国产精品videosex极品| 日本韩国欧美在线观看| 日韩精品一级二级| 国产美女18xxxx免费视频| 国产精品18久久久久久久网站| 日本在线不卡一区二区| wwwwww.欧美系列| 欧美黑人欧美精品刺激| 国产欧美一区二区在线观看| 色欲人妻综合网| 亚洲高清在线精品| 日本黄色中文字幕| 欧美一级国产精品| 亚洲欧美色视频| 色爱精品视频一区| 黄页网站在线观看免费| 欧洲亚洲妇女av| 精品一区二区三区免费看| 国产精品裸体一区二区三区| 欧美禁忌电影网| 青青草原网站在线观看| 亚洲精品激情| 亚洲欧美自偷自拍另类| 国产成人在线视频免费播放| 在线免费观看成年人视频| 自拍偷拍国产精品| 日本一区二区三区免费视频| 欧美主播一区二区三区| 亚洲AV无码乱码国产精品牛牛| 亚洲深夜福利在线| 色呦呦网站在线观看| 国产精品99久久久久久久久| 另类视频一区二区三区| 秋霞毛片久久久久久久久| 在线精品国产| 茄子视频成人免费观看| 国产麻豆日韩欧美久久| 无码一区二区三区在线| 一区二区三区在线视频播放| 欧美特级黄色片| 欧美电视剧在线看免费| 北岛玲一区二区三区| 97在线视频免费播放| 成人在线视频免费| 99九九视频| 青青草原综合久久大伊人精品| 国产黄视频在线| 国产91精品久久久久久久网曝门| 美国美女黄色片| 好吊成人免视频| 午夜精品久久久久久久99 | 91资源在线播放| 精品久久久中文| 亚洲奶汁xxxx哺乳期| 深夜福利91大全| 香蕉成人av| 精品国产区在线| 欧美三区视频| 国产精品igao网网址不卡| 国产精品剧情在线亚洲| 精品成人无码久久久久久| 日韩av在线网址| 丁香花在线观看完整版电影| 亚洲tv在线观看| 久久久五月天| 日日干日日操日日射| 国产精品色在线| 最新黄色网址在线观看| 亚洲片av在线| 亚洲天堂av影院| 精品国产乱码久久久久久88av| 欧美午夜在线| 日本xxxx免费| 亚洲综合激情网| www.天堂av.com| 欧美大片欧美激情性色a∨久久| 91精品国产色综合久久不卡粉嫩| 亚洲日本无吗高清不卡| 日本成人在线视频网站| 性猛交ⅹxxx富婆video | 欧美在线一区视频| 成人国产精品视频| 精品91久久久| 日韩激情av在线免费观看| sm久久捆绑调教精品一区| 国产欧美丝袜| 久久www成人_看片免费不卡| 艳妇乳肉亭妇荡乳av| 狠狠色狠色综合曰曰| 三级理论午夜在线观看| 日韩av电影在线网| 精品免费av| 亚洲a级黄色片| 亚洲综合一区在线| 欧美熟妇乱码在线一区| 欧美亚洲国产视频| 狠狠色丁香婷婷综合影院| 四季av一区二区| 日韩一区在线免费观看| 国产偷拍一区二区| 欧美激情影音先锋| 综合色就爱涩涩涩综合婷婷| 精品久久久噜噜噜噜久久图片| 中文字幕第一区| 亚洲成人黄色片| 热99精品只有里视频精品| 成人在线电影在线观看视频| 欧美一级特黄aaa| 亚洲国产精品久久一线不卡| 视频在线观看你懂的| 国产精品综合网站| 一区二区三区在线观看免费| 91精品啪在线观看国产| 日本久久电影网| 久操视频在线播放| 国产一区二区三区av在线| 日韩成人精品在线| 538任你躁在线精品视频网站| 亚洲福利在线播放| 国产欧美自拍| 毛片av在线播放| 国产亚洲精品资源在线26u| 国产精品嫩草影院桃色| 久久久久在线观看| 精品国产一区二区三区久久久樱花 | 波多野结衣一区二区三区在线观看| 国产美女一区| 天天鲁一鲁摸一摸爽一爽| 亚洲国产日韩欧美在线动漫| 国产成人精品一区二区三区视频| 青草视频在线观看视频| 国产精品蜜臀在线观看| 日韩专区第一页| 成人午夜在线影院|