release_agent exploit - Relative Paths to PIDs
자세한 내용은 https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html의 블로그 포스트를 확인하세요. 이것은 요약입니다:
이 기술은 Kata Containers 또는 특정 devicemapper
설정과 같이 컨테이너의 파일 시스템 경로를 가리키는 저장소 드라이버 구성으로 인해 호스트에서 컨테이너 내에서 호스트 코드를 실행하는 방법을 설명합니다.
주요 단계:
프로세스 ID (PID) 찾기: Linux 의사 파일 시스템의
/proc/<pid>/root
심볼릭 링크를 사용하여 호스트의 파일 시스템에 상대적인 컨테이너 내의 모든 파일에 액세스할 수 있습니다. 이를 통해 호스트에서 컨테이너의 파일 시스템 경로를 알 필요가 없어집니다.PID Bashing: 호스트에서 PID를 순차적으로 확인하여 특정 파일이
/proc/<pid>/root/<file>
에 존재하는지 확인하는 브루트 포스 방식을 사용합니다. 파일이 발견되면 해당 PID가 대상 컨테이너 내에서 실행 중인 프로세스에 속한다는 것을 나타냅니다.실행 트리거: 추측한 PID 경로를
cgroups release_agent
파일에 작성합니다. 이 작업은release_agent
의 실행을 트리거합니다. 이 단계의 성공은 출력 파일의 생성 여부로 확인됩니다.
Exploitation Process
Exploitation 프로세스는 컨테이너 내에서 실행 중인 프로세스의 올바른 PID를 추측하여 호스트에서 페이로드를 실행하는 더 자세한 작업 집합을 포함합니다. 다음은 그 과정입니다:
환경 초기화: 호스트에서 페이로드 스크립트 (
payload.sh
)를 준비하고 cgroup 조작을 위한 고유한 디렉토리를 생성합니다.페이로드 준비: 호스트에서 실행할 명령을 포함하는 페이로드 스크립트를 작성하고 실행 가능하게 만듭니다.
Cgroup 설정: cgroup을 마운트하고 구성합니다.
notify_on_release
플래그를 설정하여 cgroup이 해제될 때 페이로드가 실행되도록 합니다.PID 브루트 포스: 루프를 통해 잠재적인 PID를 반복적으로 확인하고 추측한 각 PID를
release_agent
파일에 작성합니다. 이렇게 하면 페이로드 스크립트가release_agent
로 설정됩니다.트리거 및 실행 확인: 각 PID에 대해 cgroup의
cgroup.procs
에 작성하여 PID가 올바른 경우release_agent
가 실행됩니다. 페이로드 스크립트의 출력이 발견될 때까지 루프가 계속됩니다. 이는 성공적인 실행을 나타냅니다.
블로그 포스트의 PoC:
Last updated