Windows与Linux环境下的路径劫持与安全防御
字数 1506 2025-08-29 08:30:31

Windows与Linux环境下的路径劫持与安全防御

1. 路径与环境变量基础概念

1.1 绝对路径与相对路径

  • 绝对路径:从根目录开始的完整路径,如:

    • Windows: C:\Windows\System32\tpmtool.exe
    • Linux: /usr/bin/whoami
  • 相对路径:相对于当前工作目录的路径,如:

    • ./tpmtool.exe (当前目录)
    • ../bin/script.sh (上级目录的bin文件夹)

1.2 环境变量

环境变量是操作系统和程序使用的动态值,常见环境变量包括:

  • Windows:

    • PATH - 可执行程序搜索路径
    • TEMP - 临时文件目录
    • USERPROFILE - 用户主目录
  • Linux:

    • PATH - 可执行程序搜索路径
    • HOME - 用户主目录
    • PWD - 当前工作目录

2. 路径劫持攻击原理

2.1 Windows路径劫持示例

tpmtool.exe为例:

  1. tpmtool.exe执行时会调用logman.exe停止TPM日志收集
  2. 问题在于它使用相对路径调用logman.exe
  3. 攻击者可以在当前目录放置恶意logman.exe
  4. 当管理员运行tpmtool.exe时,实际执行的是恶意程序

攻击复现步骤

  1. 将计算器程序(calc.exe)重命名为logman.exe放入当前目录
  2. 运行tpmtool stop TPMTRACE -ets
  3. 系统会执行当前目录的恶意logman.exe而非系统目录的正版程序

2.2 Linux路径劫持示例

以调用curl的C程序为例:

system("curl http://example.com");

攻击复现步骤

  1. 在当前目录创建名为curl的恶意脚本
  2. 修改PATH环境变量,使当前目录优先于系统目录
    export PATH=.:$PATH
    
  3. 运行程序时,会执行当前目录的恶意curl而非系统curl

3. 防御措施

3.1 开发安全实践

  1. 始终使用绝对路径调用外部程序

    • Windows: C:\Windows\System32\logman.exe
    • Linux: /usr/bin/curl
  2. 验证程序完整性

    • 检查调用的程序哈希值或数字签名
  3. 最小权限原则

    • 程序应以最小必要权限运行
  4. 安全调用API

    • 避免直接使用system()等危险函数
    • 使用指定完整路径的API,如CreateProcess

3.2 系统配置防御

  1. PATH环境变量安全

    • 不要将当前目录(.)加入PATH
    • 在Windows中,PATH不应包含可写目录
  2. 文件系统权限

    • 系统目录应限制写入权限
    • 用户目录不应位于系统PATH中
  3. 审计与监控

    • 使用工具如Procmon监控程序行为
    • 记录可疑的子进程创建行为

3.3 管理员最佳实践

  1. 谨慎运行未知程序

    • 注意当前工作目录
    • 使用完整路径运行管理命令
  2. 定期审计

    • 检查系统PATH设置
    • 监控系统目录的文件变化
  3. 使用安全工具

    • 部署应用程序白名单
    • 启用UAC/权限提升提示

4. 检测与排查方法

4.1 Windows检测

  1. 使用Process Monitor监控:

    • 过滤目标进程
    • 观察Process Create操作
    • 检查子进程的完整路径
  2. 使用PowerShell检查PATH:

    $env:Path -split ';'
    

4.2 Linux检测

  1. 使用strace跟踪系统调用:

    strace -f -e execve ./vulnerable_program
    
  2. 检查PATH设置:

    echo $PATH
    
  3. 查找可写的PATH目录:

    echo $PATH | tr ':' '\n' | while read dir; do find "$dir" -type d -writable; done
    

5. 总结

路径劫持是一种常见但危险的攻击技术,利用程序不安全的路径调用方式实现权限提升或恶意代码执行。开发人员应始终使用绝对路径调用外部程序,系统管理员应合理配置PATH环境变量和文件系统权限。通过防御性编程和系统加固,可以有效防范此类攻击。

Windows与Linux环境下的路径劫持与安全防御 1. 路径与环境变量基础概念 1.1 绝对路径与相对路径 绝对路径 :从根目录开始的完整路径,如: Windows: C:\Windows\System32\tpmtool.exe Linux: /usr/bin/whoami 相对路径 :相对于当前工作目录的路径,如: ./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程序为例: 攻击复现步骤 : 在当前目录创建名为 curl 的恶意脚本 修改 PATH 环境变量,使当前目录优先于系统目录 运行程序时,会执行当前目录的恶意 curl 而非系统 curl 3. 防御措施 3.1 开发安全实践 始终使用绝对路径调用外部程序 Windows: C:\Windows\System32\logman.exe Linux: /usr/bin/curl 验证程序完整性 检查调用的程序哈希值或数字签名 最小权限原则 程序应以最小必要权限运行 安全调用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: 4.2 Linux检测 使用 strace 跟踪系统调用: 检查PATH设置: 查找可写的PATH目录: 5. 总结 路径劫持是一种常见但危险的攻击技术,利用程序不安全的路径调用方式实现权限提升或恶意代码执行。开发人员应始终使用绝对路径调用外部程序,系统管理员应合理配置PATH环境变量和文件系统权限。通过防御性编程和系统加固,可以有效防范此类攻击。