當前位置:首頁 > IT技術

Linux下關閉ALSR(地址空間隨機化)的方法

時間:2019-11-07 21:12:19來源:IT技術作者:seo實驗室小編閱讀:59次「手機版」
 

關閉空間

##0x00 背景知識

ASLR(Address Space layout Randomization)在2005年被引入到linux的內核 kernel 2.6.12 中,當然早在2004年就以patch的形式被引入。隨著內存地址的隨機化,使得響應的應用變得隨機。這意味著同一應用多次執行所使用內存空間完全不同,也意味著簡單的緩沖區溢出攻擊無法達到目的。

GDB從版本7開始,第一次在ubuntu 9.10(Karmic)上,被調試的程序可以被關閉ASLR(通過標記位ADDR_NO_RANDOMIZE )。

此處有坑,筆者有一個Ubuntu 9.10的虛擬機,用了下面將要介紹的全部姿勢,死活關閉不了ASLR,后來換成Ubuntu 10.04就沒問題了,說明Ubuntu 9.10的版本控制ASLR的方法還不成熟,需要重源碼層面確認是否可以關閉開啟,真是坑到家了。

0x01 查看ASLR設置

查看當前操作系統的ASLR配置情況,兩種命令任你選擇

$ cat /proc/sys/kernel/randomize_va_space
2
$ sysctl -a --pattern randomize
kernel.randomize_va_space = 2

0x02 配置選項

  • 0 = 關閉
  • 1 = 半隨機。共享庫、棧、mmap() 以及 VDSO 將被隨機化。(留坑,PIE會影響heap的隨機化。。)
  • 2 = 全隨機。除了1中所述,還有heap。

后面會詳細介紹ASLR的組成,不關心的同學可以簡單理解為ASLR不是一個籠統的概念,而是要按模塊單獨實現的。當然,在攻防對抗的角度上,應為不是所有組件都會隨機,所以我們就可以按圖索驥,寫出通用的shellcode調用系統庫。

0x03 查看地址空間隨機效果

使用ldd命令就可以觀察到程序所依賴動態加載模塊的地址空間,如下下圖所示,被括號包裹。在shell中,運行兩次相同的ldd命令,即可對比出前后地址的不同之處,當然,ASLR開啟時才會變化:

ASLR開啟時,動態庫的加載地址不同

這里寫圖片描述

ASLR關閉時,動態庫的加載地址相同

這里寫圖片描述

0x04 關閉ASLR

方法一: 手動修改randomize_va_space文件

誠如上面介紹的randomize_va_space文件的枚舉值含義,設置的值不同,linux內核加載程序的地址空間的策略就會不同。比較簡單明了。這里0代表關閉ASLR。

# echo 0 > /proc/sys/kernel/randomize_va_space

注意,這里是先進root權限,后執行。不要問為什么sudo echo 0 > /proc/sys/kernel/randomize_va_space為什么會報錯

方法二: 使用sysctl控制ASLR

$ sysctl -w kernel.randomize_va_space=0

這是一種臨時改變隨機策略的方法,重啟之后將恢復默認。如果需要永久保存配置,需要在配置文件 /etc/sysctl.conf 中增加這個選項。

方法三: 使用setarch控制單個程序的隨機化

如果你想歷史關閉單個程序的ASLR,使用setarch是很好的選擇。setarch命令如其名,改變程序的運行架構環境,并可以自定義環境flag。

setarch `uname -m` -R ./your_program

-R參數代表關閉地址空間隨機化(開啟ADDR_NO_RANDOMIZE)

方法四: 在GDB場景下,使用set disable-randomization off

在調試特定程序時,可以通過set disable-randomization命令開啟或者關閉地址空間隨機化。默認是關閉隨機化的,也就是on狀態。

當然,這里開啟,關閉和查看的方法看起來就比較正規了。

關閉ASLR:

set disable-randomization on

開啟ASLR:

set disable-randomization off

查看ASLR狀態:

show disable-randomization

0x05 ASLR與PIE的區別

ASLR有一個模糊的值(1),既不是全開啟也不是全關閉,而是部分關閉,那這部分到底是什么,很容易產生歧義。

ASLR 不負責代碼段以及數據段的隨機化工作,這項工作由 PIE 負責。但是只有在開啟 ASLR 之后,PIE 才會生效。

0x06 一些沒有用的感想

寫這篇文章的原點是在調試一個簡單的ROP利用沒有成功彈shell,但是出了一些莫名其妙的sh報錯。冥冥中感覺里成功不遠了。隨著翻閱資料的積累,和相關writeup的release date接近2018年,越來越堅定了這份信心。終于找到了ASLR的影響導致ROP不成功的原因。

最近工作也很累,不是量大,而是心累。希望LP越來越漂亮,越來越美麗~

這里寫圖片描述

0x07 參考文獻

這個不能忘,都是寶貴的經驗。

https://linux-audit.com/linux-aslr-and-kernelrandomize_va_space-setting/

https://www.theurbanpenguin.com/aslr-address-space-layout-randomization/

https://stackoverflow.com/questions/5194666/disable-randomization-of-memory-addresses

http://visualgdb.com/gdbreference/commands/set_disable-randomization

https://wiki.ubuntu.com/Security/Features

https://outflux.net/blog/archives/2010/07/03/gdb-turns-off-aslr/comment-page-1/

文章最后發布于: 2018-08-14 15:12:29

相關閱讀

雅虎宣布將關閉雅虎群組網站刪除所有內容

最近,雅虎對外發布公告宣布,將在近期關閉旗下的"雅虎群組網站"。從10月21日起,用戶將不能再向雅虎群組網站發布新內容;到12月14日,以

【轉載】網站關閉了域名備案信息是否需要注銷,答案是一

網站關閉后,我們的域名備案信息是否有必要進行注銷操作。如果后面不考慮繼續續費域名以及重啟網站運行,建議關站后申請注銷網站域名

問下大家 客人申請 7天無理由退貨,交易關閉,還能再申請

尊爾西典:客人收貨后 申請 售后的 7天無理由退貨,期間多次聯系后隔了很久才發貨,也沒有填寫單號等貨收到了, 時間過了退款關閉,客人還

天貓投訴維權入口已關閉怎么辦?如何投訴?

很多消費者,網購的時候可能遇到這樣的情況,買到的產品與描述不相符,找賣家協商,賣家不予處理的情況。這個時候可以申請客服介入,可是如

可惡的RunDll廣告怎么關閉

任務欄廣告圖標->聚劃算圖標/淘寶網圖標/天貓圖標......如何關掉但是這個RunDll,遠沒有我想的那么簡單不經意間的偶遇首先說明一下

分享到:

欄目導航

推薦閱讀

熱門閱讀

美国扑克50手登陆 麻将机什么品牌质量 … 福彩黑龙江36选7 杠杆炒股家破人亡 北京pk赛车精准计划 捕鱼来了红包版 玖玖棋牌棋牌每天送 …? 麻将棋牌神助手是真的吗 1分赛车走势图 山东十一选五遗漏走势 什么是短线股票 22选5大星彩票走势图百度 安卓手机如何下载哈灵麻将 大发快3开奖走势图 陕西快乐10分选号交流 江西时时彩 福州小姐招聘