ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux权限提升与Sudo安全配置详解

Linux权限提升与Sudo安全配置详解

1. Linux权限提升基础概念

权限提升(Privilege Escalation)是渗透测试和系统安全评估中的关键环节,特别是在Linux环境中。当攻击者或安全研究人员获得系统初始访问权限后,往往会尝试从普通用户权限提升到root权限,以获取对系统的完全控制。

Linux系统采用基于用户的权限模型,每个文件和进程都有明确的属主和权限设置。权限提升的本质就是找到系统配置或应用程序中的漏洞,突破这些权限限制。

2. Sudo机制深度解析

2.1 Sudo工作原理

Sudo(Superuser Do)是Linux系统中最重要的权限管理工具之一。它允许经过授权的用户以其他用户身份(通常是root)执行命令,而不需要知道目标用户的密码。

Sudo的核心配置文件是/etc/sudoers,这个文件定义了哪些用户或用户组可以执行哪些命令。当用户执行sudo命令时,系统会:

  1. 检查/etc/sudoers文件中是否存在该用户的权限记录
  2. 验证用户密码(如果配置需要)
  3. 检查命令是否在允许列表中
  4. 如果所有条件满足,则以目标用户身份执行命令

2.2 Sudoers文件语法

/etc/sudoers文件使用特定语法定义权限规则。一个典型的规则格式如下:

username host=(runas) command

例如:

alice ALL=(ALL) /usr/bin/apt-get update

这条规则表示用户alice可以在任何主机上以任何用户身份执行/usr/bin/apt-get update命令。

3. 常见的Sudo权限提升技术

3.1 滥用配置不当的Sudo权限

当管理员配置不当,给普通用户分配了过多sudo权限时,就可能存在提权风险。以下是几种常见情况:

  1. 允许以root身份执行任意命令:

    user ALL=(ALL) ALL

    这种配置下,用户可以直接通过sudo su或sudo bash获取root shell。

  2. 允许执行特定危险命令:

    user ALL=(ALL) /usr/bin/find

    这种情况下,可以利用find命令的-exec参数执行任意命令:

    sudo find / -exec /bin/bash \;

3.2 环境变量利用

Sudo在执行命令时会保留部分环境变量,这可能导致安全问题:

  1. LD_PRELOAD滥用: 如果允许执行某些程序且env_reset选项未启用,可以通过LD_PRELOAD加载恶意库:

    sudo LD_PRELOAD=/tmp/evil.so /usr/bin/program
  2. PATH变量劫持: 如果允许执行不带完整路径的命令,可以创建同名恶意程序并修改PATH:

    export PATH=/tmp:$PATH sudo program

3.3 Sudo版本漏洞利用

某些Sudo版本存在已知漏洞,可以直接用于提权:

  1. CVE-2019-14287: 在特定配置下,可以通过指定用户ID -1或4294967295绕过限制:

    sudo -u#-1 /bin/bash
  2. CVE-2021-3156: Sudo堆溢出漏洞,影响多个版本,可以通过特殊参数触发:

    sudoedit -s '\' `perl -e 'print "A" x 65536'`

4. 实战演练:THM Linux Privilege Escalation题目解析

4.1 信息收集阶段

在TryHackMe的Linux Privilege Escalation题目中,首先需要进行全面的信息收集:

  1. 检查当前用户的sudo权限:

    sudo -l
  2. 查看/etc/sudoers文件内容(如果有读取权限):

    cat /etc/sudoers
  3. 检查系统安装的sudo版本:

    sudo --version

4.2 利用发现的可疑Sudo权限

假设通过sudo -l发现如下配置:

user ALL=(root) NOPASSWD: /usr/bin/python3 /home/user/script.py

这种情况下,可以分析script.py是否有写入权限。如果有,可以直接修改脚本内容插入恶意代码。如果没有写入权限,可以检查脚本是否调用了其他可控制的资源。

4.3 实际提权操作

如果发现可以无密码以root身份执行vim:

user ALL=(root) NOPASSWD: /usr/bin/vim

可以通过以下步骤提权:

  1. 执行sudo vim /tmp/exploit
  2. 在vim中输入:!/bin/bash获取root shell
  3. 或者写入setuid shell:
    :!chmod +s /bin/bash

5. 防御措施与最佳实践

5.1 安全的Sudoers配置

  1. 遵循最小权限原则,只授予必要的权限
  2. 尽可能使用完整路径指定可执行文件
  3. 避免使用NOPASSWD选项,除非绝对必要
  4. 使用命令别名组织相关命令

5.2 系统加固建议

  1. 保持sudo软件包最新,及时修补已知漏洞
  2. 启用sudo的日志功能,记录所有sudo操作
  3. 定期审计/etc/sudoers文件和/etc/sudoers.d/目录
  4. 考虑使用sudo的"Defaults env_reset"选项清除危险环境变量

5.3 监控与检测

  1. 监控/etc/sudoers文件的变更
  2. 设置入侵检测规则,识别异常的sudo使用模式
  3. 定期检查系统上的setuid/setgid文件

6. 高级技巧与深入研究

6.1 Sudo插件开发

Sudo支持通过插件扩展功能。了解插件开发可以帮助深入理解sudo工作机制,并实现自定义的安全检查。

6.2 SELinux与Sudo集成

在启用SELinux的系统上,可以配置SELinux策略进一步限制sudo的使用,提供额外的安全层。

6.3 审计与合规

对于需要符合PCI DSS、HIPAA等标准的系统,需要特别关注sudo的配置和日志,确保满足合规要求。

提示:在实际渗透测试中,发现sudo提权路径后,应该先评估影响范围,并与系统管理员协调修复方案,避免直接利用导致系统不稳定。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进