成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析Unix下的緩沖區溢出防御體系

安全 網站安全
未檢查輸入緩沖區長度,導致數組越界,覆蓋棧中局部變量空間之上的棧楨指針%ebp以及函數返回地址retaddr,當函數返回執行ret指令時,retaddr從棧中彈出,作為下一條指令的地址賦給%eip寄存器,繼而改變原程序的執行流程指向我們的shellcode.

棧溢出(stack smashing)

未檢查輸入緩沖區長度,導致數組越界,覆蓋棧中局部變量空間之上的棧楨指針%ebp以及函數返回地址retaddr,當函數返回執行ret指令時,retaddr從棧中彈出,作為下一條指令的地址賦給%eip寄存器,繼而改變原程序的執行流程指向我們的shellcode.

堆溢出(malloc/free heap corruption)

一種是和傳統的棧溢出一樣,當輸入超出malloc()預先分配的空間大小,就會覆蓋掉這段空間之后的一段存儲區域,如果該存儲區域有一個重要的變量比如euid,那么我就可以用它來攻擊。另一種是典型的double-free堆腐敗,在內存回收操作中,合并相鄰空閑塊重新插入雙向鏈表時會有一個寫4字節內存的操作,如果弱點程序由于編程錯誤free()一個不存在的塊,我們就可以精心偽造這個塊,從而覆蓋任何我們想要的值:函數的返回地址、庫函數的plt地址等。

格式化字符竄漏洞(format string vulnerability)

如果格式竄由用戶定制,攻擊者就可以任意偽造格式竄,利用*printf()系列函數的特性就可以窺探堆棧空間的內容,超常輸入可以引發傳統的緩沖區溢出,或是用“%n”覆蓋指針、返回地址等。

整形變量溢出(integer variable overflow)

利用整數的范圍、符號等問題觸發安全漏洞,大多數整形溢出不能直接利用,但如果該整形變量決定內存分配等操作,我們就有可能間接利用該漏洞。

其他的攻擊手法(others)

只能算是手法,不能算是一種單獨的類別。利用ELF文件格式的特性如:覆蓋。plt(過程連接表)、。dtor(析構函數指針)、。got(全局偏移表)、return-to-libc(返回庫函數)等的方式進行攻擊。

一、編譯保護技術

Stackguard

因為緩沖區溢出的通常都會改寫函數返回地址,stackguard是個編譯器補丁,它產生一個"canary"值(一個單字)放到返回地址的前面,如果當函數返回時,發現這個canary的值被改變了,就證明可能有人正在試圖進行緩沖區溢出攻擊,程序會立刻響應,發送一條入侵警告消息給syslogd,然后終止進程。

"canary"包含:NULL(0x00), CR(0x0d), LF (0x0a) 和 EOF (0xff)四個字 符,它們應該可以阻止大部分的字符串操作,使溢出攻擊無效。一個隨機數canary在程序執行的時候被產生。所以攻擊者不能通過搜索程序的二進制文件得到"canary"值。如果/dev/urandom存在,隨機數就從那里取得。否則,就從通過對當前時間進行編碼得到。其隨機性足以阻止絕大部分的預測攻擊。

ImmUnix系統為采用stackguard編譯的Red Hat Linux,但stackguard所提供的保護并非絕對安全,滿足一些條件就可以突破限制:如覆蓋一個函數指針、可能存在的exit()或_exit()系統調用地址、GOT等。Stackguard官方鏈接:http://immUnix.org/

Stackshield

StackShield使用了另外一種不同的技術。它的做法是創建一個特別的堆棧用來儲存函數返回地址的一份拷貝。它在受保護的函數的開頭和結尾分別增加一段代碼,開頭處的代碼用來將函數返回地址拷貝到一個特殊的表中,而結尾處的代碼用來將返回地址從表中拷貝回堆棧。

因此函數執行流程不會改變,將總是正確返回到主調函數中。在新的版本中已經增加了一些新的保護措施,當調用一個地址在非文本段內的函數指針時,將終止函數的執行。Stackshield無法防御只覆蓋%ebp的單字節溢出,同樣,我們也可以通過覆蓋其他的ELF結構來繞過限制。

二、庫函數鏈接保護

Formatguard

Formatguard是個Glibc的補丁,遵循GPL,它使用特殊的CPP(gcc預編譯程序)宏取代原有的*printf()的參數統計方式,它會比較傳遞給*printf的參數的個數和格式竄的個數,如果格式竄的個數大于實際參數的個數,就判定為攻擊行為,向syslogd發送消息并終止進程。如果弱點程序調用Glibc以外的庫,formatguard就無法保護。

Libsafe

Libsafe是一個動態鏈接庫,在標準的C庫之前被加載,主要加固了gets(),strcpy(),strcat(),sprintf()……等容易發生安全問題的C函數,它設計為只針對stack smashing && format string類型的攻擊。

三、棧不可執行

Solar designer’s nonexec kernel patch

從名字可以看出這是一個Linux上的內核補丁,該補丁最主要的特性是:用戶區堆棧不可執行[Non-executable User Stack]由于x86 CPU上并沒有提供頁(page)執行的bit位,所以該補丁通過減小代碼段的虛擬地址來區分數據段和代碼段,程序執行流返回 0xC0000000以下一段用戶堆棧空間的操作都被認為是緩沖區溢出攻擊行為,隨即產生一個通用保護異常而終止進程。

這樣把shellcode安置在buffer或環境變量(都位于堆棧段)的exploit都會失效。當然其安全也不是絕對的,利用PLT返回庫函數的文章里詳細描述了突破該補丁的攻擊方法。該補還有一些其他的特性:動態鏈接庫映射到地址低端(0x00開始)、限制符號鏈接攻擊、/tmp目錄限制、/proc目錄限制、execve系統調用加固等。

Solaris/SPARC nonexec-stack protection

在Solaris/SPARC下可以通過去掉堆棧的執行權限來禁止堆棧段執行,方法如下,在/etc/system中加入兩條語句:Set noexec_user_stack = 1Set noexec_user_stack_log = 1第一條禁止堆棧執行,第二條記錄所有嘗試在堆棧段運行代碼的活動。Reboot之后才會生效。所有只讓棧不可執行的保護是有限的。Return-to-libc、fake frame之類的技術都可以突破限制,不過棧不可執行的保護已經極大了提升了攻擊難度。

Unix下的緩沖區溢出的防御還有很多內容,希望大家多多掌握,我們還會在以后的文章中繼續向大家介紹。

【編輯推薦】

  1. Unix系統的安全策略
  2. UNIX系統安全危機評估
  3. Unix系統的安全策略之常用命令解析
責任編輯:佚名 來源: 中國教育網
相關推薦

2011-03-23 11:35:00

2017-01-09 17:03:34

2019-02-27 13:58:29

漏洞緩沖區溢出系統安全

2018-11-01 08:31:05

2014-07-30 11:21:46

2009-09-24 18:16:40

2018-01-26 14:52:43

2010-12-27 10:21:21

2009-05-13 09:21:48

2015-03-06 17:09:10

2010-10-09 14:45:48

2010-09-08 15:43:18

2017-07-04 17:09:10

Map環形緩沖區數據

2010-09-29 15:10:58

2015-09-02 09:01:03

2022-05-07 08:27:42

緩沖區溢出堆棧

2020-08-10 08:37:32

漏洞安全數據

2022-08-09 08:31:40

C -gets函數漏洞

2011-11-15 16:00:42

2023-10-09 23:01:09

MySQL數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 浴室洗澡偷拍一区二区 | 天天操天天插 | 亚洲国产成人av好男人在线观看 | 久久国产精品99久久久久久丝袜 | 午夜在线 | 国产精品久久久久aaaa | 五月天国产 | a在线观看| 亚洲第一在线视频 | 99久久婷婷国产综合精品首页 | 国产999精品久久久久久 | 欧美中文字幕一区二区三区亚洲 | 91综合在线视频 | 国产精品视频久久久 | 欧美在线一区视频 | 黄瓜av| 四虎影院在线观看免费视频 | 亚洲天堂免费 | 精品国产一区久久 | 免费小视频在线观看 | 狠狠草视频 | 久久免费视频在线 | www.jizzjizz | 亚洲一区二区中文字幕 | 欧美一级二级三级视频 | 一级黄色片免费在线观看 | dy天堂 | 国产成人福利在线观看 | 国产精品国产三级国产a | 少妇一级淫片免费放播放 | 欧美三级成人理伦 | 亚洲欧洲一区 | 日本久久精品视频 | 欧美成人二区 | 欧美video| 69热视频在线观看 | 日本黄色大片免费 | av激情在线 | 国产精品亚洲一区 | 欧美白人做受xxxx视频 | 精品av|