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

Linux提权-04 capabilities

文章目录

  • 前言
  • 1. 为什么需要 Capabilities?
  • 2. Capabilities 的常见类型
  • 3. 配置
  • 4. Capabilities 如何导致提权?
    • 4.1 错误配置 Capabilities
    • 4.2 滥用 CAP_SYS_PTRACE
    • 4.3 滥用 CAP_SETUID
    • 4.4 容器环境中的 Capabilities
  • 5. 利用CAP_SETUID提权
  • 6. 防御 Capabilities 滥用
  • 7. 参考


前言

这年头,估计ai比博客有用多了,不会的东西追着deepseek问就行了,实在不行再来找文章看吧。

在 Linux 中,Capabilities(能力) 是一种细粒度的权限控制机制,用于将传统 root 用户的超级权限拆分为多个独立的权限单元。它的核心目标是减少程序对 root 权限的依赖,遵循最小权限原则,从而降低系统安全风险。


1. 为什么需要 Capabilities?

传统的 Linux 权限模型中,一个进程要么以普通用户权限运行,要么以 root 权限运行(通过 SUIDsudo)。这种“全有或全无”的权限模型存在安全风险:

  • 过度授权:即使程序只需要一个特权操作(如绑定低端口),也必须以 root 身份运行。
  • 提权漏洞:一旦程序存在漏洞,攻击者可能通过它获得完整的 root 权限。

Capabilities 允许将 root 的特权拆分为多个独立的能力,仅赋予程序完成特定任务所需的最小权限。


2. Capabilities 的常见类型

Linux 定义了约 40 种能力,以下是部分关键能力:

能力名称描述
CAP_DAC_OVERRIDE绕过文件/目录的读、写、执行权限检查。
CAP_DAC_READ_SEARCH绕过文件的读权限检查和目录的搜索权限检查。
CAP_SYS_ADMIN执行系统管理操作(如挂载文件系统、修改网络配置等)。
CAP_SYS_PTRACE允许 ptrace 调试其他进程(可能用于注入代码)。
CAP_NET_BIND_SERVICE绑定到低于 1024 的端口(如 HTTP 的 80 端口)。
CAP_SETUID允许修改进程的 UID(用户身份切换)。

3. 配置

配置 Capabilities(能力) 主要通过 setcap 和 getcap 命令实现,允许为特定程序分配或移除细粒度的特权。以下是详细的配置方法和示例:

  • setcap:为文件(可执行程序)设置 Capabilities。

  • getcap:查看文件已配置的 Capabilities。

  • capsh:查看当前进程的 Capabilities(调试用)

1. 检查现有 Capabilities
查看系统中所有被赋予 Capabilities 的文件:
# 递归搜索所有文件的能力(忽略错误提示)
getcap -r / 2>/dev/null

# 查看指定文件的能力
getcap /path/to/program

2. 分配 Capabilities
语法:
sudo setcap <capability>+<flags> /path/to/program
<flags> 的取值:
	e:Effective(能力是否生效)。
	i:Inheritable(能力可被子进程继承)。
	p:Permitted(允许进程使用该能力)。

示例 1:允许普通用户绑定低端口(如 80)
# 赋予程序 CAP_NET_BIND_SERVICE 能力
sudo setcap cap_net_bind_service+ep /path/to/webserver
程序无需以 root 身份运行即可绑定 80 端口。

示例 2:允许 ping 命令使用原始套接字
# 赋予 ping 命令 CAP_NET_RAW 能力(通常已默认配置)
sudo setcap cap_net_raw+ep /bin/ping

3. 移除 Capabilities
移除所有能力:
sudo setcap -r /path/to/program

4. Capabilities 如何导致提权?

如果程序被错误地赋予不必要的 Capabilities,攻击者可能利用这些能力进行提权。以下是常见场景:

4.1 错误配置 Capabilities

  • 案例:普通用户拥有的程序被赋予 CAP_DAC_OVERRIDE 能力。
    # 错误地为程序赋予能力
    sudo setcap cap_dac_override+ep /path/to/program
    
    • 攻击:攻击者可以绕过文件权限限制,读取或修改 /etc/shadow 等敏感文件。

4.2 滥用 CAP_SYS_PTRACE

  • 若程序拥有 CAP_SYS_PTRACE,攻击者可通过调试高权限进程(如 root 进程)注入恶意代码,获取完整 root 权限。

4.3 滥用 CAP_SETUID

  • 若程序拥有 CAP_SETUID,攻击者可利用它修改进程的 UID 为 0(即 root):
    // 伪代码示例:将进程 UID 设置为 root
    setuid(0);
    

4.4 容器环境中的 Capabilities

  • 在 Docker/Kubernetes 中,容器默认被赋予部分能力(如 CAP_SYS_ADMIN)。若过度授权,攻击者可能利用这些能力逃逸到宿主机。

5. 利用CAP_SETUID提权

在这里插入图片描述

其他可以利用CAP_SETUID来提权的文件:
在这里插入图片描述

6. 防御 Capabilities 滥用

  1. 最小化授权:仅赋予程序必需的能力。

    # 正确示例:仅允许程序绑定低端口
    sudo setcap cap_net_bind_service+ep /path/to/program
    
  2. 定期审计:使用 getcap 检查系统中可疑的能力配置。

  3. 容器安全:在 Docker 中通过 --cap-drop=ALL 移除所有能力,再按需添加:

    docker run --cap-drop=ALL --cap-add=CAP_NET_BIND_SERVICE ...
    
  4. 避免 SUID 滥用:优先使用 Capabilities 替代 SUID 提权。


7. 参考

[1] deepseek
[2] 《权限提升技术-攻防实战与技巧-》
[3] tryhackme-jr peneration tester-privilege escalation-linuxprivesc


http://www.kler.cn/a/580054.html

相关文章:

  • 《 C++ 点滴漫谈: 三十 》高手写 C++,参数这样传才高效!你真的用对了吗?
  • UI自动化:Selenium常规的页面元素定位方法
  • 【漫话机器学习系列】123.感知机学习(Perceptron Learning)
  • 执行npm install 时,是如何将依赖包下载下来的。
  • 服务器磁盘占用率过高解决方案
  • 修复ubuntu下找不到音频设备的问题
  • docker修改daemon.json文件后无法启动
  • Zemax 中的 CAD 文件性能比较
  • 隧道定向号角喇叭为隧道安全保驾护航
  • 腾讯元宝:AI 时代的快速论文阅读助手
  • Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(五)
  • 深度学习与大模型基础-向量
  • LeetCode 解题思路 14(Hot 100)
  • 探讨消息队列系统:AWS SQS vs. Apache Kafka
  • 华为hcia——Datacom实验指南——三层交换和ARP的工作原理
  • 【Academy】Web 缓存中毒 ------ Web cache poisoning
  • 关于ModbusTCP/RTU协议转Ethernet/IP(CIP)协议的方案
  • 解锁 AI 量化新境界:Qbot 携手 iTick
  • 探索Java中的多态
  • HCIP第二讲作业