Linux下關閉ALSR 位址空間隨機化 的方法

2021-08-22 13:39:49 字數 2264 閱讀 8001

##0x00 背景知識

aslr(address space layout randomization)在2023年被引入到linux的核心 kernel 2.6.12 中,當然早在2023年就以patch的形式被引入。隨著記憶體位址的隨機化,使得響應的應用變得隨機。這意味著同一應用多次執行所使用記憶體空間完全不同,也意味著簡單的緩衝區溢位攻擊無法達到目的。

gdb從版本7開始,第一次在ubuntu 9.10(karmic)上,被除錯的程式可以被關閉aslr(通過標記位addr_no_randomize )。

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

檢視當前作業系統的aslr配置情況,兩種命令任你選擇

$ cat /proc/sys/kernel/randomize_va_space

2$ sysctl -a --pattern randomize

kernel.randomize_va_space = 2

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

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

aslr開啟時,動態庫的載入位址不同

誠如上面介紹的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 -w kernel.randomize_va_space=0
這是一種臨時改變隨機策略的方法,重啟之後將恢復預設。如果需要永久儲存配置,需要在配置檔案/etc/sysctl.conf中增加這個選項。

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

setarch `

uname -m`

-r ./your_program

-r引數代表關閉位址空間隨機化(開啟addr_no_randomize)

在除錯特定程式時,可以通過set disable-randomization命令開啟或者關閉位址空間隨機化。預設是關閉隨機化的,也就是on狀態。

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

關閉aslr:

set disable-randomization on

開啟aslr:

set disable-randomization off

檢視aslr狀態:

show disable-randomization

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

aslr 不負責**段以及資料段的隨機化工作,這項工作由 pie 負責。但是只有在開啟 aslr 之後,pie 才會生效。

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

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

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

linux 下關閉啟動sendmail 服務

在啟動時關閉sendmail 服務 其它服務也一樣 在啟動時關閉sendmail 對其他的服務可以採取同樣的措施。而對於那些不是從inetd啟動的服務,則通過命令來關閉,例如需要關閉sendmail服務,則 etc rc.d init.d sendmail stop 然後再設定其不在系統啟動時啟動 ...

Linux下關閉開啟防火牆

1 重啟後生效 開啟 chkconfig iptables on 關閉 chkconfig iptables off 2 即時生效,重啟後失效 開啟 service iptables start 關閉 service iptables stop 需要說明的是對於linux下的其它服務都可以用以上命令...

LINUX系統下關閉防火牆

所謂防火牆指的是乙個由軟體和硬體裝置組合而成 在內部網和外部網之間 專用網與公共網之間的介面上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬體和軟體的結合,使internet與intranet之間建立起乙個安全閘道器。一 重啟後永久性生效 開啟 chkconfig iptables...