Windows与Linux环境下的路径劫持与安全防御
字数 1506 2025-08-29 08:30:31
Windows与Linux环境下的路径劫持与安全防御
1. 路径与环境变量基础概念
1.1 绝对路径与相对路径
-
绝对路径:从根目录开始的完整路径,如:
- Windows:
C:\Windows\System32\tpmtool.exe - Linux:
/usr/bin/whoami
- Windows:
-
相对路径:相对于当前工作目录的路径,如:
./tpmtool.exe(当前目录)../bin/script.sh(上级目录的bin文件夹)
1.2 环境变量
环境变量是操作系统和程序使用的动态值,常见环境变量包括:
-
Windows:
PATH- 可执行程序搜索路径TEMP- 临时文件目录USERPROFILE- 用户主目录
-
Linux:
PATH- 可执行程序搜索路径HOME- 用户主目录PWD- 当前工作目录
2. 路径劫持攻击原理
2.1 Windows路径劫持示例
以tpmtool.exe为例:
tpmtool.exe执行时会调用logman.exe停止TPM日志收集- 问题在于它使用相对路径调用
logman.exe - 攻击者可以在当前目录放置恶意
logman.exe - 当管理员运行
tpmtool.exe时,实际执行的是恶意程序
攻击复现步骤:
- 将计算器程序(
calc.exe)重命名为logman.exe放入当前目录 - 运行
tpmtool stop TPMTRACE -ets - 系统会执行当前目录的恶意
logman.exe而非系统目录的正版程序
2.2 Linux路径劫持示例
以调用curl的C程序为例:
system("curl http://example.com");
攻击复现步骤:
- 在当前目录创建名为
curl的恶意脚本 - 修改
PATH环境变量,使当前目录优先于系统目录export PATH=.:$PATH - 运行程序时,会执行当前目录的恶意
curl而非系统curl
3. 防御措施
3.1 开发安全实践
-
始终使用绝对路径调用外部程序
- Windows:
C:\Windows\System32\logman.exe - Linux:
/usr/bin/curl
- Windows:
-
验证程序完整性
- 检查调用的程序哈希值或数字签名
-
最小权限原则
- 程序应以最小必要权限运行
-
安全调用API
- 避免直接使用
system()等危险函数 - 使用指定完整路径的API,如
CreateProcess
- 避免直接使用
3.2 系统配置防御
-
PATH环境变量安全
- 不要将当前目录(.)加入PATH
- 在Windows中,PATH不应包含可写目录
-
文件系统权限
- 系统目录应限制写入权限
- 用户目录不应位于系统PATH中
-
审计与监控
- 使用工具如
Procmon监控程序行为 - 记录可疑的子进程创建行为
- 使用工具如
3.3 管理员最佳实践
-
谨慎运行未知程序
- 注意当前工作目录
- 使用完整路径运行管理命令
-
定期审计
- 检查系统PATH设置
- 监控系统目录的文件变化
-
使用安全工具
- 部署应用程序白名单
- 启用UAC/权限提升提示
4. 检测与排查方法
4.1 Windows检测
-
使用Process Monitor监控:
- 过滤目标进程
- 观察
Process Create操作 - 检查子进程的完整路径
-
使用PowerShell检查PATH:
$env:Path -split ';'
4.2 Linux检测
-
使用strace跟踪系统调用:
strace -f -e execve ./vulnerable_program -
检查PATH设置:
echo $PATH -
查找可写的PATH目录:
echo $PATH | tr ':' '\n' | while read dir; do find "$dir" -type d -writable; done
5. 总结
路径劫持是一种常见但危险的攻击技术,利用程序不安全的路径调用方式实现权限提升或恶意代码执行。开发人员应始终使用绝对路径调用外部程序,系统管理员应合理配置PATH环境变量和文件系统权限。通过防御性编程和系统加固,可以有效防范此类攻击。