Docker Forensics
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Container modification
์ผ๋ถ ๋์ปค ์ปจํ ์ด๋๊ฐ ์์๋์๋ค๋ ์ํน์ด ์์ต๋๋ค:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc03e43a052a lamp-wordpress "./run.sh" 2 minutes ago Up 2 minutes 80/tcp wordpress
์ด ์ปจํ ์ด๋์ ๋ํด ์ด๋ฏธ์ง์ ๊ด๋ จ๋ ์์ ์ฌํญ์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค:
docker diff wordpress
C /var
C /var/lib
C /var/lib/mysql
A /var/lib/mysql/ib_logfile0
A /var/lib/mysql/ib_logfile1
A /var/lib/mysql/ibdata1
A /var/lib/mysql/mysql
A /var/lib/mysql/mysql/time_zone_leap_second.MYI
A /var/lib/mysql/mysql/general_log.CSV
...
์ด์ ๋ช
๋ น์์ C๋ Changed๋ฅผ ์๋ฏธํ๊ณ A๋ Added๋ฅผ ์๋ฏธํฉ๋๋ค./etc/shadow์ ๊ฐ์ ํฅ๋ฏธ๋ก์ด ํ์ผ์ด ์์ ๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ฉด, ์
์์ ์ธ ํ๋์ ํ์ธํ๊ธฐ ์ํด ์ปจํ
์ด๋์์ ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค:
docker cp wordpress:/etc/shadow.
์๋ณธ๊ณผ ๋น๊ตํ ์ ์์ต๋๋ค ์ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๊ทธ ์์์ ํ์ผ์ ์ถ์ถํ์ฌ:
docker run -d lamp-wordpress
docker cp b5d53e8b468e:/etc/shadow original_shadow #Get the file from the newly created container
diff original_shadow shadow
์์ฌ์ค๋ฌ์ด ํ์ผ์ด ์ถ๊ฐ๋ ๊ฒ์ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ ์ปจํ ์ด๋์ ์ ๊ทผํ์ฌ ํ์ธํ ์ ์์ต๋๋ค:
docker exec -it wordpress bash
์ด๋ฏธ์ง ์์
๋ด๋ณด๋ธ ๋์ปค ์ด๋ฏธ์ง(์๋ง๋ .tar ํ์)๋ฅผ ๋ฐ์ผ๋ฉด container-diff๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ฌํญ์ ์์ฝ์ ์ถ์ถํ ์ ์์ต๋๋ค:
docker save <image> > image.tar #Export the image to a .tar file
container-diff analyze -t sizelayer image.tar
container-diff analyze -t history image.tar
container-diff analyze -t metadata image.tar
๊ทธ๋ฐ ๋ค์ ์ด๋ฏธ์ง๋ฅผ ์์ถ ํด์ ํ๊ณ ๋ธ๋กญ์ ์ ๊ทผํ์ฌ ๋ณ๊ฒฝ ์ด๋ ฅ์์ ๋ฐ๊ฒฌํ ์์ฌ์ค๋ฌ์ด ํ์ผ์ ๊ฒ์ํ ์ ์์ต๋๋ค:
tar -xf image.tar
๊ธฐ๋ณธ ๋ถ์
์ด๋ฏธ์ง์์ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ค์์ ์คํํ์ธ์:
docker inspect <image>
๋ณ๊ฒฝ ์ฌํญ ์ด๋ ฅ ์์ฝ์ ๋ค์๊ณผ ๊ฐ์ด ์ป์ ์ ์์ต๋๋ค:
docker history --no-trunc <image>
์ด๋ฏธ์ง์์ dockerfile์ ์์ฑํ ์ ์์ต๋๋ค:
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 madhuakula/k8s-goat-hidden-in-layers>
Dive
docker ์ด๋ฏธ์ง์์ ์ถ๊ฐ๋๊ฑฐ๋ ์์ ๋ ํ์ผ์ ์ฐพ๊ธฐ ์ํด dive (๋ค์ด๋ก๋๋ releases์์) ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
#First you need to load the image in your docker repo
sudo docker load < image.tar 1 โจฏ
Loaded image: flask:latest
#And then open it with dive:
sudo dive flask:latest
์ด๊ฒ์ docker ์ด๋ฏธ์ง์ ๋ค์ํ ๋ธ๋กญ์ ํ์ํ๊ณ ์ด๋ค ํ์ผ์ด ์์ ๋์๊ฑฐ๋ ์ถ๊ฐ๋์๋์ง ํ์ธํ ์ ์๊ฒ ํด์ค๋๋ค. ๋นจ๊ฐ์์ ์ถ๊ฐ๋ ๊ฒ์ ์๋ฏธํ๊ณ ๋ ธ๋์์ ์์ ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํญ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ณด๊ธฐ๋ก ์ด๋ํ๊ณ ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋๋ฅผ ์ถ์/์ด ์ ์์ต๋๋ค.
die๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์ ๋ค์ํ ๋จ๊ณ์ ์ฝํ
์ธ ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด ๊ฐ ๋ ์ด์ด๋ฅผ ์์ถ ํด์ ํ๊ณ ์ ๊ทผํด์ผ ํฉ๋๋ค.
์ด๋ฏธ์ง๊ฐ ์์ถ ํด์ ๋ ๋๋ ํ ๋ฆฌ์์ ๋ค์์ ์คํํ์ฌ ์ด๋ฏธ์ง์ ๋ชจ๋ ๋ ์ด์ด๋ฅผ ์์ถ ํด์ ํ ์ ์์ต๋๋ค:
tar -xf image.tar
for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; done
๋ฉ๋ชจ๋ฆฌ์์์ ์๊ฒฉ ์ฆ๋ช
ํธ์คํธ ๋ด์์ ๋์ปค ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ ํธ์คํธ์์ ์ปจํ
์ด๋์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณผ ์ ์์ต๋๋ค ps -ef๋ฅผ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ (๋ฃจํธ๋ก) ํธ์คํธ์์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋คํํ๊ณ ์๊ฒฉ ์ฆ๋ช ์ ๊ฒ์ํ ์ ์์ต๋๋ค ๋ค์ ์์ ์ ๊ฐ์ด.
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


