이도 마찬가지로 비기너즈 코스에 담겨있는 도커 파일 분석 관련 워게임이어서 풀어보았다.
문제 파일 다운로드 받으면 아래 도커 파일 코드를 확인할 수 있음!
FROM ubuntu:22.04@sha256:27cb6e6ccef575a4698b66f5de06c7ecd61589132d5a91d098f7f3f9285415a9
ENV user chall
ENV chall_port 31337
RUN apt-get update
RUN apt-get install -y python3
RUN adduser $user
COPY ./deploy/flag /home/$user/flag
RUN chown -R root:$user /home/$user
WORKDIR /home/chall
RUN touch `python3 -c "print(open('./flag', 'r').read())"`
RUN rm *
WORKDIR /home
USER $user
EXPOSE $chall_port
도커 파일을 살펴보면 특히 아래 flag 관련 부분을 눈여겨볼 수 있다.
WORKDIR /home/chall
RUN touch `python3 -c "print(open('./flag', 'r').read())"`
RUN rm *
작업 디렉터리를 /home/chall 로 변경한 후, flag 파일의 내용을 출력한 뒤, 같은 이름으로 빈 파일을 생성한다.
그 후 rm * 명령어로 flag 파일을 포함한 해당 디렉터리 내의 모든 파일을 삭제하게 되는 것을 볼 수 있다.
그러나 이러면 flag의 내용을 파일 시스템에 흔적으로 남길 가능성이 있으며, 컨테이너 내부 파일을 복구하면 이를 노출할 수 있다는 취약점이 존재한다.
따라서 이 도커 파일을 실행하는 과정을 살펴볼 수 있는 디버거가 있어야 하는데, 문제에서 현재 힌트로 'dive'라는 도커 분석 도구를 다운로드 받으라고 제시해주고 있으니 설치해보자~
https://github.com/wagoodman/dive
# 다운로드 URL
wget https://github.com/wagoodman/dive/releases/download/v0.12.0/dive_0.12.0_linux_amd64.deb
# .deb 패키지 설치
sudo apt install ./dive_0.12.0_linux_amd64.deb
dive를 다운로드 받았으니 이제 docker hub에서 제공하고 있는 문제 속 blue whale 이미지는 다운로드 (pull) 할 수 있다.
이미지를 확인해보면 ID를 획득할 수 있고, 다음과 같이 dive 도구를 사용해서 분석할 수 있다.
(사용법: dive {docker image ID})
Layers 탭 : 분석 대상인 도커 파일에서 작성되어 있는 명령어를 한 줄씩 순차적으로 내려가면서 분석한다.
Current Layer Contents 탭 : 모든 Layer 및 해당하는 Layer에서 사용된 모든 Contents가 출력된다.
=> 이를 통해 삭제되기 전의 flag 파일을 찾아서 분석할 수 있음!
Tab 키 : view를 스위치, 즉 각각 Layers 또는 Current Layer Contents 페이지로 이동할 수 있다.
=> 이를 통해 blue-whale 이미지가 실행될 때 바로 앞서 우리가 주목했던 코드인 /home/chall 디렉터리로 이동 후 python으로 flag 파일을 open 하는 그 부분을 찾으면 된다.
'Linux' 카테고리의 다른 글
[Linux] 드림핵 Baby-linux 문제 풀이 (0) | 2024.12.15 |
---|---|
[Linux] crontab 만드는 방법 및 옵션 정리 (0) | 2024.12.03 |
[Linux] 서버 운영 보안 요소 - forkbomb, 레인보우 테이블과 Salt, 패스워드 크래킹, File system destruction (0) | 2024.11.21 |
[Rocky Linux] error: too early for operation, device not yet seeded or device model not acknowledged 해결 방법 (0) | 2024.11.21 |
[Rocky Linux] 시스템 로그 확인 방법 및 로그별 저장 위치 - /var/log, journalctl (0) | 2024.11.14 |