
Docker 익스플로잇
이 저장소는 "Dirty Pipe" 권한 상승 취약점을 안전하게 시연하고 분석할 수 있는 자체 포함형 인터랙티브 Docker 환경을 제공합니다. 이 프로젝트는 보안 전문가들이 통제된 환경에서 커널 수준의 치명적인 익스플로잇의 작동 방식을 이해할 수 있도록 설계된 교육용 도구입니다.
Dirty Pipe는 Linux 커널(5.8 이상 버전에 영향)에서 발견된 치명적인 취약점입니다. 이 취약점으로 인해 로컬의 권한이 없는 사용자가 임의의 읽기 전용 파일에 데이터를 덮어쓸 수 있었습니다.
그 영향은 심각합니다. 공격자는 /etc/passwd와 같은 민감한 파일이나 SUID 바이너리를 덮어씀으로써 쉽게 권한을 root로 상승시켜 시스템을 완전히 장악할 수 있었습니다. 이 취약점은 Linux의 기본적인 보안 통제인 표준 파일 권한 검사를 우회했기 때문에 특히 위험했습니다.
이 프로젝트는 Docker를 활용하여 안전하고 격리된, 의도적으로 취약하게 구성된 환경을 만듭니다. 이를 통해 누구나 호스트 머신에 위험을 감수하지 않고 익스플로잇을 연구할 수 있습니다.
주요 구성 요소는 다음과 같습니다:
Dockerfile: 취약한 컨테이너의 설계도를 정의합니다. Dirty Pipe에 취약한 커널이 포함된 것으로 알려진 이전 버전의 기본 이미지(debian:bullseye-20210927-slim)를 사용하며, 설정 과정을 자동화합니다.exploit.c: Max Kellermann의 원본 개념 증명(proof-of-concept)을 기반으로 익스플로잇 로직을 구현한 C 코드입니다.Makefile: 컨테이너 내부에서 C 코드를 실행 가능한 바이너리로 컴파일하는 간단한 makefile입니다.이 가이드는 환경을 구축하고 익스플로잇을 실행하는 과정을 안내합니다.
사전 요구 사항: 시스템에 Docker가 설치되어 실행 중이어야 합니다.
터미널을 열고 이 프로젝트를 클론하세요.
git clone https://github.com/mrchucu1/CVE-2022-0847-Docker.git
cd CVE-2022-0847-Docker
docker build 명령을 사용하여 컨테이너 이미지를 생성합니다. Dockerfile이 모든 의존성을 처리하고 익스플로잇 코드를 컴파일합니다.
docker build -t dirty-pipe-demo .
이제 컨테이너를 인터랙티브 모드로 실행합니다. --rm 플래그는 종료 시 컨테이너가 삭제되도록 하며, -it는 인터랙티브 셸을 제공합니다.
docker run --rm -it dirty-pipe-demo
컨테이너 내부에서 권한이 없는 사용자(hacker@...:/$)로 셸에 진입하게 됩니다.
이제 사전 컴파일된 익스플로잇을 실행합니다:
# You are currently an unprivileged user.
# Your prompt looks like this: hacker@<container_id>:/$
#
# Now run the exploit...
./exploit
성공! 익스플로잇이 SUID 바이너리를 덮어써서 root 셸을 획득합니다. 터미널 프롬프트가 $에서 #으로 변경되며, 이제 root 권한을 보유하게 되었음을 나타냅니다.
# The exploit has succeeded.
# Your prompt is now a root shell: # whoami
root
#
이 프로젝트는 단순히 스크립트를 실행하는 것 이상으로, 클라우드 보안 엔지니어로서의 제 업무와 관련된 핵심 보안 원칙을 실질적으로 보여주는 데모입니다:
이 프로젝트와 해당 코드는 교육 및 연구 목적으로만 제공됩니다. 명시적이고 승인된 권한이 없는 시스템에는 이 익스플로잇을 사용하지 마십시오.