偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

解析Unix下的緩沖區(qū)溢出防御體系

安全 網(wǎng)站安全
未檢查輸入緩沖區(qū)長(zhǎng)度,導(dǎo)致數(shù)組越界,覆蓋棧中局部變量空間之上的棧楨指針%ebp以及函數(shù)返回地址retaddr,當(dāng)函數(shù)返回執(zhí)行ret指令時(shí),retaddr從棧中彈出,作為下一條指令的地址賦給%eip寄存器,繼而改變?cè)绦虻膱?zhí)行流程指向我們的shellcode.

棧溢出(stack smashing)

未檢查輸入緩沖區(qū)長(zhǎng)度,導(dǎo)致數(shù)組越界,覆蓋棧中局部變量空間之上的棧楨指針%ebp以及函數(shù)返回地址retaddr,當(dāng)函數(shù)返回執(zhí)行ret指令時(shí),retaddr從棧中彈出,作為下一條指令的地址賦給%eip寄存器,繼而改變?cè)绦虻膱?zhí)行流程指向我們的shellcode.

堆溢出(malloc/free heap corruption)

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

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

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

整形變量溢出(integer variable overflow)

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

其他的攻擊手法(others)

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

一、編譯保護(hù)技術(shù)

Stackguard

因?yàn)榫彌_區(qū)溢出的通常都會(huì)改寫函數(shù)返回地址,stackguard是個(gè)編譯器補(bǔ)丁,它產(chǎn)生一個(gè)"canary"值(一個(gè)單字)放到返回地址的前面,如果當(dāng)函數(shù)返回時(shí),發(fā)現(xiàn)這個(gè)canary的值被改變了,就證明可能有人正在試圖進(jìn)行緩沖區(qū)溢出攻擊,程序會(huì)立刻響應(yīng),發(fā)送一條入侵警告消息給syslogd,然后終止進(jìn)程。

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

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

Stackshield

StackShield使用了另外一種不同的技術(shù)。它的做法是創(chuàng)建一個(gè)特別的堆棧用來(lái)儲(chǔ)存函數(shù)返回地址的一份拷貝。它在受保護(hù)的函數(shù)的開頭和結(jié)尾分別增加一段代碼,開頭處的代碼用來(lái)將函數(shù)返回地址拷貝到一個(gè)特殊的表中,而結(jié)尾處的代碼用來(lái)將返回地址從表中拷貝回堆棧。

因此函數(shù)執(zhí)行流程不會(huì)改變,將總是正確返回到主調(diào)函數(shù)中。在新的版本中已經(jīng)增加了一些新的保護(hù)措施,當(dāng)調(diào)用一個(gè)地址在非文本段內(nèi)的函數(shù)指針時(shí),將終止函數(shù)的執(zhí)行。Stackshield無(wú)法防御只覆蓋%ebp的單字節(jié)溢出,同樣,我們也可以通過(guò)覆蓋其他的ELF結(jié)構(gòu)來(lái)繞過(guò)限制。

二、庫(kù)函數(shù)鏈接保護(hù)

Formatguard

Formatguard是個(gè)Glibc的補(bǔ)丁,遵循GPL,它使用特殊的CPP(gcc預(yù)編譯程序)宏取代原有的*printf()的參數(shù)統(tǒng)計(jì)方式,它會(huì)比較傳遞給*printf的參數(shù)的個(gè)數(shù)和格式竄的個(gè)數(shù),如果格式竄的個(gè)數(shù)大于實(shí)際參數(shù)的個(gè)數(shù),就判定為攻擊行為,向syslogd發(fā)送消息并終止進(jìn)程。如果弱點(diǎn)程序調(diào)用Glibc以外的庫(kù),formatguard就無(wú)法保護(hù)。

Libsafe

Libsafe是一個(gè)動(dòng)態(tài)鏈接庫(kù),在標(biāo)準(zhǔn)的C庫(kù)之前被加載,主要加固了gets(),strcpy(),strcat(),sprintf()……等容易發(fā)生安全問題的C函數(shù),它設(shè)計(jì)為只針對(duì)stack smashing && format string類型的攻擊。

三、棧不可執(zhí)行

Solar designer’s nonexec kernel patch

從名字可以看出這是一個(gè)Linux上的內(nèi)核補(bǔ)丁,該補(bǔ)丁最主要的特性是:用戶區(qū)堆棧不可執(zhí)行[Non-executable User Stack]由于x86 CPU上并沒有提供頁(yè)(page)執(zhí)行的bit位,所以該補(bǔ)丁通過(guò)減小代碼段的虛擬地址來(lái)區(qū)分?jǐn)?shù)據(jù)段和代碼段,程序執(zhí)行流返回 0xC0000000以下一段用戶堆??臻g的操作都被認(rèn)為是緩沖區(qū)溢出攻擊行為,隨即產(chǎn)生一個(gè)通用保護(hù)異常而終止進(jìn)程。

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

Solaris/SPARC nonexec-stack protection

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

Unix下的緩沖區(qū)溢出的防御還有很多內(nèi)容,希望大家多多掌握,我們還會(huì)在以后的文章中繼續(xù)向大家介紹。

【編輯推薦】

  1. Unix系統(tǒng)的安全策略
  2. UNIX系統(tǒng)安全危機(jī)評(píng)估
  3. Unix系統(tǒng)的安全策略之常用命令解析
責(zé)任編輯:佚名 來(lái)源: 中國(guó)教育網(wǎng)
相關(guān)推薦

2011-03-23 11:35:00

2017-01-09 17:03:34

2019-02-27 13:58:29

漏洞緩沖區(qū)溢出系統(tǒng)安全

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

2017-07-04 17:09:10

Map環(huán)形緩沖區(qū)數(shù)據(jù)

2010-09-08 15:43:18

2010-09-29 15:10:58

2015-09-02 09:01:03

2022-05-07 08:27:42

緩沖區(qū)溢出堆棧

2020-08-10 08:37:32

漏洞安全數(shù)據(jù)

2022-08-09 08:31:40

C -gets函數(shù)漏洞

2011-11-15 16:00:42

2023-10-09 23:01:09

MySQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)