【学习园地】Capability与Docker

admin 2023年3月4日02:14:24评论78 views字数 2715阅读9分3秒阅读模式

【学习园地】Capability与Docker
【学习园地】Capability与Docker

【学习园地】Capability与Docker

1

Linux capabilities



Linux 内核 2.2 之后引入的,将root关联的特权细分为不同的功能组,Capabilites 作为一个线程可以对每个功能组启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。

工作流程

在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。


2

测试常见的Capabilities调用



CAP_AUDIT_CONTROL 启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则
CAP_AUDIT_READ 允许通过 multicast netlink 套接字读取审计日志
CAP_AUDIT_WRITE 将记录写入内核审计日志
CAP_BLOCK_SUSPEND
使用可以阻止系统挂起的特性
CAP_CHOWN 修改文件所有者的权限
CAP_DAC_OVERRIDE 忽略文件的 DAC 访问限制
CAP_DAC_READ_SEARCH 忽略文件读及目录搜索的 DAC 访问限制
CAP_FOWNER 忽略文件属主 ID 必须和进程用户 ID 相匹配的限制
CAP_FSETID 允许设置文件的 setuid 位
CAP_IPC_LOCK 允许锁定共享内存片段
CAP_IPC_OWNER 忽略 IPC 所有权检查
CAP_KILL 允许对不属于自己的进程发送信号
CAP_LEASE 允许修改文件锁的 FL_LEASE 标志
CAP_LINUX_IMMUTABLE 允许修改文件的 IMMUTABLE 和 APPEND 属性标志
CAP_MAC_ADMIN 允许 MAC 配置或状态更改
CAP_MAC_OVERRIDE 忽略文件的 DAC 访问限制
CAP_MKNOD 允许使用 mknod() 系统调用
CAP_NET_ADMIN 允许执行网络管理任务
CAP_NET_BIND_SERVICE 允许绑定到小于 1024 的端口
CAP_NET_BROADCAST 允许网络广播和多播访问
CAP_NET_RAW 允许使用原始套接字
CAP_SETGID 允许改变进程的 GID
CAP_SETFCAP 允许为文件设置任意的 capabilities
CAP_SETPCAP 参考 capabilities man page
CAP_SETUID 允许改变进程的 UID
CAP_SYS_ADMIN 允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAP_SYS_BOOT 允许重新启动系统
CAP_SYS_CHROOT 允许使用 chroot() 系统调用
CAP_SYS_MODULE 允许插入和删除内核模块
CAP_SYS_NICE 允许提升优先级及设置其他进程的优先级
CAP_SYS_PACCT 允许执行进程的 BSD 式审计
CAP_SYS_PTRACE 允许跟踪任何进程
CAP_SYS_RAWIO 允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备
CAP_SYS_RESOURCE 忽略资源限制
CAP_SYS_TIME 允许改变系统时钟
CAP_SYS_TTY_CONFIG 允许配置 TTY 设备
CAP_SYSLOG 允许使用 syslog() 系统调用
CAP_WAKE_ALARM 允许触发一些能唤醒系统的东西(比如 CLOCK_BOOTTIME_ALARM 计时器)
CAP_BPF 控制着许多可以用bpf()系统调用进行的操作
CAP_CHECKPOINT_RESTORE 允许没有系统管理员权限的进程来进行checkpoint和恢复
CAP_PERFMON 可以执行性能监控、把BPF程序attach到tracecepoints上、以及其他类似的操作。


3
查询capabilities权限查询


capsh --print

利用命令capsh --print可以查看目前bash进程所有的权限

【学习园地】Capability与Docker


其中

Current :表示当前 shell 进程的 Effective capabilities 和 Permitted capabilities

Bounding set : 表示 Bounding 集合中的 capabilities


grep Cap


通过命令

grep Cap /proc/$$/status


可以直接访问文件来获取我们目前的权限


【学习园地】Capability与Docker


之后通过

capsh --decode=0000001fffffffff

【学习园地】Capability与Docker


便可以查到对应的信息


libcap-ng


使用 filecap命令来管理文件的 capabilities。

利用filecap -a遍历整个系统的capabilities,可以再配合grep -v Unable过滤下结果


【学习园地】Capability与Docker




5
capabilities对docker的操作


下载一个新的镜像,并运行
docker pull amouat/caps
docker run -it amouat/caps



可以使用这个镜像对Capability进行查询


【学习园地】Capability与Docker

利用命令

docker run -it --cap-drop ALL --user=nobody amouat/caps


可以对docker进行一些限制,docker运行后可以发现我们的Capability已经被清空了

【学习园地】Capability与Docker

当然我们也可以指定一些权限进行关闭


docker run -it --cap-drop CHOWN --user=nobody amouat/caps


这时可以发现 capsh --print后并没有cap_CHOWN的身影


【学习园地】Capability与Docker


我们还可以使用--cap-add这个参数来添加指定的Capability


docker run -it --cap-drop ALL --cap-add CHOWN --user=nobody amouat/caps


【学习园地】Capability与Docker


我们正常部署的时候可以使用--cap-drop ALL配合--cap-add加载一些需要的capabilities达到白名单效果。


6
参考文章


【Linux Capabilities 入门教程:基础实战篇】https://icloudnative.io/posts/linux-capabilities-in-practice-1/


【Linux Capabilities 入门教程:概念篇】https://icloudnative.io/posts/linux-capabilities-why-they-exist-and-how-they-work/


【Linux Capabilities 入门教程:进阶实战篇】https://icloudnative.io/posts/linux-capabilities-in-practice-2/




大学生网络安全尖锋训练营

邮箱|[email protected] 
地址|北京市海淀区奥北科技园20号楼5层

【学习园地】Capability与Docker



原文始发于微信公众号(大学生网络安全尖锋训练营):【学习园地】Capability与Docker

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月4日02:14:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【学习园地】Capability与Dockerhttps://cn-sec.com/archives/1263097.html

发表评论

匿名网友 填写信息