溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASLR是怎么保護Linux系統(tǒng)免受緩沖區(qū)溢出攻擊的

發(fā)布時間:2021-10-23 09:54:00 來源:億速云 閱讀:138 作者:小新 欄目:系統(tǒng)運維

這篇文章將為大家詳細講解有關ASLR是怎么保護Linux系統(tǒng)免受緩沖區(qū)溢出攻擊的,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Address Space Layout Randomization(ASLR)是一種操作系統(tǒng)用來抵御緩沖區(qū)溢出攻擊的內存保護機制。這種技術使得系統(tǒng)上運行的進程的內存地址無法被預測,使得與這些進程有關的漏洞變得更加難以利用。

ASLR 目前在 Linux、Windows 以及 MacOS 系統(tǒng)上都有使用。其最早出現(xiàn)在 2005 的 Linux 系統(tǒng)上。2007  年,這項技術被 Windows 和 MacOS 部署使用。盡管 ASLR 在各個系統(tǒng)上都提供相同的功能,卻有著不同的實現(xiàn)。

ASLR 的有效性依賴于整個地址空間布局是否對于威脅者保持未知。此外,只有編譯時作為位置無關可執(zhí)行文件Position Independent Executable(PIE)的可執(zhí)行程序才能得到 ASLR 技術的最大保護,因為只有這樣,可執(zhí)行文件的所有代碼節(jié)區(qū)才會被加載在隨機地址。PIE 機器碼不管絕對地址是多少都可以正確執(zhí)行。

ASLR 的局限性

盡管 ASLR 使得對系統(tǒng)漏洞的利用更加困難了,但其保護系統(tǒng)的能力是有限的。理解關于 ASLR 的以下幾點是很重要的:

  • 它不能解決漏洞,而是增加利用漏洞的難度

  • 并不追蹤或報告漏洞

  • 不能對編譯時沒有開啟 ASLR 支持的二進制文件提供保護

  • 不能避免被繞過

ASLR 是如何工作的

通過對攻擊者在進行緩沖區(qū)溢出攻擊時所要用到的內存布局中的偏移做了隨機化,ASLR 加大了攻擊成功的難度,從而增強了系統(tǒng)的控制流完整性。

通常認為 ASLR 在 64 位系統(tǒng)上效果更好,因為 64 位系統(tǒng)提供了更大的熵(可隨機的地址范圍)。

ASLR 是否正在你的 Linux 系統(tǒng)上運行?

下面展示的兩條命令都可以告訴你的系統(tǒng)是否啟用了 ASLR 功能:

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

上方指令結果中的數值(2)表示 ASLR 工作在全隨機化模式。其可能為下面的幾個數值之一:

0 = Disabled1 = Conservative Randomization2 = Full Randomization

如果你關閉了 ASLR 并且執(zhí)行下面的指令,你將會注意到前后兩條 ldd 的輸出是完全一樣的。ldd 命令會加載共享對象并顯示它們在內存中的地址。

$ sudo sysctl -w kernel.randomize_va_space=0    <== disable[sudo] password for shs:kernel.randomize_va_space = 0$ ldd /bin/bash        linux-vdso.so.1 (0x00007ffff7fd1000) <== same addresses        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007ffff7c69000)        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffff7c63000)        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff7a79000)        /lib64/ld-linux-x86-64.so.2 (0x00007ffff7fd3000)$ ldd /bin/bash        linux-vdso.so.1 (0x00007ffff7fd1000) <== same addresses        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007ffff7c69000)        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffff7c63000)        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff7a79000)        /lib64/ld-linux-x86-64.so.2 (0x00007ffff7fd3000)

如果將其重新設置為 2 來啟用 ASLR,你將會看到每次運行 ldd,得到的內存地址都不相同。

$ sudo sysctl -w kernel.randomize_va_space=2    <== enable[sudo] password for shs:kernel.randomize_va_space = 2$ ldd /bin/bash        linux-vdso.so.1 (0x00007fff47d0e000) <== first set of addresses        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f1cb7ce0000)        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1cb7cda000)        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1cb7af0000)        /lib64/ld-linux-x86-64.so.2 (0x00007f1cb8045000)$ ldd /bin/bash        linux-vdso.so.1 (0x00007ffe1cbd7000) <== second set of addresses        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007fed59742000)        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fed5973c000)        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fed59552000)        /lib64/ld-linux-x86-64.so.2 (0x00007fed59aa7000)

嘗試繞過 ASLR

盡管這項技術有很多優(yōu)點,但繞過 ASLR 的攻擊并不罕見,主要有以下幾類:

  • 利用地址泄露

  • 訪問與特定地址關聯(lián)的數據

  • 針對 ASLR 實現(xiàn)的缺陷來猜測地址,常見于系統(tǒng)熵過低或 ASLR 實現(xiàn)不完善。

  • 利用側信道攻擊

關于“ASLR是怎么保護Linux系統(tǒng)免受緩沖區(qū)溢出攻擊的”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI