Docker Security
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ Docker ์์ง ๋ณด์
Docker ์์ง์ Linux ์ปค๋์ ๋ค์์คํ์ด์ค์ Cgroups๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค. ์ถ๊ฐ์ ์ธ ๋ณดํธ๋ Capabilities dropping, Seccomp, ๋ฐ SELinux/AppArmor๋ฅผ ํตํด ์ ๊ณต๋์ด ์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ๋ฅผ ๊ฐํํฉ๋๋ค. auth plugin์ ์ฌ์ฉ์ ํ๋์ ์ถ๊ฐ๋ก ์ ํํ ์ ์์ต๋๋ค.

Docker ์์ง์ ๋ํ ์์ ํ ์ ๊ทผ
Docker ์์ง์ Unix ์์ผ์ ํตํด ๋ก์ปฌ์์ ๋๋ HTTP๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ์๊ฒฉ ์ ๊ทผ์ ์ํด์๋ HTTPS์ TLS๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฐ์ฑ, ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ธ์ฆ์ ๋ณด์ฅํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
Docker ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก unix:///var/run/docker.sock์์ Unix ์์ผ์ ํตํด ์์ ๋๊ธฐํฉ๋๋ค. Ubuntu ์์คํ
์์ Docker์ ์์ ์ต์
์ /etc/default/docker์ ์ ์๋์ด ์์ต๋๋ค. Docker API ๋ฐ ํด๋ผ์ด์ธํธ์ ๋ํ ์๊ฒฉ ์ ๊ทผ์ ํ์ฑํํ๋ ค๋ฉด ๋ค์ ์ค์ ์ ์ถ๊ฐํ์ฌ Docker ๋ฐ๋ชฌ์ HTTP ์์ผ์ ํตํด ๋
ธ์ถํ์ญ์์ค:
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart
๊ทธ๋ฌ๋ Docker ๋ฐ๋ชฌ์ HTTP๋ก ๋ ธ์ถํ๋ ๊ฒ์ ๋ณด์ ๋ฌธ์ ๋ก ์ธํด ๊ถ์ฅ๋์ง ์์ต๋๋ค. HTTPS๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ์ ๋ณดํธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐ๊ฒฐ์ ๋ณดํธํ๋ ๋ ๊ฐ์ง ์ฃผ์ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค:
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์์ ํ์ธํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก์ ์ ์์ ์ํธ ์ธ์ฆํฉ๋๋ค.
์๋ฒ์ ์ ์์ ํ์ธํ๊ธฐ ์ํด ์ธ์ฆ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ์๋ ์ด ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ณด์
์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ ๊ฐ์ธ ๋๋ ๊ณต์ฉ ์ ์ฅ์์ ์ ์ฅ๋ ์ ์์ต๋๋ค. Docker๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ํ ์ฌ๋ฌ ์ ์ฅ ์ต์ ์ ์ ๊ณตํฉ๋๋ค:
- Docker Hub: Docker์ ๊ณต์ฉ ๋ ์ง์คํธ๋ฆฌ ์๋น์ค.
- Docker Registry: ์ฌ์ฉ์๊ฐ ์์ ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํธ์คํ ํ ์ ์๋๋ก ํ๋ ์คํ ์์ค ํ๋ก์ ํธ.
- Docker Trusted Registry: ์ญํ ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ LDAP ๋๋ ํ ๋ฆฌ ์๋น์ค์์ ํตํฉ ๊ธฐ๋ฅ์ ๊ฐ์ถ Docker์ ์์ ์ ๋ ์ง์คํธ๋ฆฌ ์ ๊ณต.
์ด๋ฏธ์ง ์ค์บ
์ปจํ ์ด๋๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ๋๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ์์ ์ค์น๋ ์ํํธ์จ์ด๋ก ์ธํด ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์ง ์ ์์ต๋๋ค. Docker๋ ์ปจํ ์ด๋์ ๋ณด์ ์ค์บ์ ์ํํ๊ณ ์ทจ์ฝ์ ์ ๋์ดํ๋ Nautilus๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ ๋๋ค. Nautilus๋ ๊ฐ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ์ทจ์ฝ์ ์ ์ฅ์์ ๋น๊ตํ์ฌ ๋ณด์ ๊ตฌ๋ฉ์ ์๋ณํฉ๋๋ค.
์์ธํ ์ ๋ณด๋ ์ฌ๊ธฐ์์ ์ฝ์ด๋ณด์ธ์ .
docker scan
docker scan ๋ช
๋ น์ ์ด๋ฏธ์ง ์ด๋ฆ ๋๋ ID๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด Docker ์ด๋ฏธ์ง๋ฅผ ์ค์บํ ์ ์๊ฒ ํด์ค๋๋ค. ์๋ฅผ ๋ค์ด, hello-world ์ด๋ฏธ์ง๋ฅผ ์ค์บํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ ์คํํ์ญ์์ค:
docker scan hello-world
Testing hello-world...
Organization: docker-desktop-test
Package manager: linux
Project name: docker-image|hello-world
Docker image: hello-world
Licenses: enabled
โ Tested 0 dependencies for known issues, no vulnerable paths found.
Note that we do not currently have vulnerability data for your image.
trivy -q -f json <container_name>:<tag>
snyk container test <image> --json-file-output=<output file> --severity-threshold=high
clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
Docker ์ด๋ฏธ์ง ์๋ช
Docker ์ด๋ฏธ์ง ์๋ช ์ ์ปจํ ์ด๋์์ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง์ ๋ณด์์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๊ฐ๋ตํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Docker Content Trust๋ ์ด๋ฏธ์ง ์๋ช ์ ๊ด๋ฆฌํ๊ธฐ ์ํด The Update Framework (TUF)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Notary ํ๋ก์ ํธ๋ฅผ ํ์ฉํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ Notary ๋ฐ TUF๋ฅผ ์ฐธ์กฐํ์ธ์.
- Docker ์ฝํ
์ธ ์ ๋ขฐ๋ฅผ ํ์ฑํํ๋ ค๋ฉด
export DOCKER_CONTENT_TRUST=1์ ์ค์ ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ Docker ๋ฒ์ 1.10 ์ด์์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊บผ์ ธ ์์ต๋๋ค. - ์ด ๊ธฐ๋ฅ์ด ํ์ฑํ๋๋ฉด ์๋ช ๋ ์ด๋ฏธ์ง๋ง ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์ด๊ธฐ ์ด๋ฏธ์ง ํธ์์๋ ๋ฃจํธ ๋ฐ ํ๊น ํค์ ๋ํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํด์ผ ํ๋ฉฐ, Docker๋ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด Yubikey๋ ์ง์ํฉ๋๋ค. ๋ ๋ง์ ์ธ๋ถ์ ๋ณด๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ฝํ ์ธ ์ ๋ขฐ๊ฐ ํ์ฑํ๋ ์ํ์์ ์๋ช ๋์ง ์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ๋ฉด โNo trust data for latestโ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ ์ดํ์ ์ด๋ฏธ์ง ํธ์๋ฅผ ์ํด Docker๋ ์ด๋ฏธ์ง๋ฅผ ์๋ช ํ๊ธฐ ์ํด ๋ฆฌํฌ์งํ ๋ฆฌ ํค์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฒญํฉ๋๋ค.
๊ฐ์ธ ํค๋ฅผ ๋ฐฑ์ ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ธ์:
tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
Docker ํธ์คํธ๋ฅผ ์ ํํ ๋, ์ด์์ ์ ์งํ๊ธฐ ์ํด ๋ฃจํธ ๋ฐ ๋ฆฌํฌ์งํ ๋ฆฌ ํค๋ฅผ ์ด๋ํ๋ ๊ฒ์ด ํ์ํฉ๋๋ค.
์ปจํ ์ด๋ ๋ณด์ ๊ธฐ๋ฅ
์ปจํ ์ด๋ ๋ณด์ ๊ธฐ๋ฅ ์์ฝ
์ฃผ์ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ
์ปจํ ์ด๋ํ๋ ํ๊ฒฝ์์ ํ๋ก์ ํธ์ ๊ทธ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ ๋ณด์ ๋ฐ ์์ ๊ด๋ฆฌ์ ์์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์์ ์ฃผ์ ๊ฐ๋ ์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ ๋๋ค:
๋ค์์คํ์ด์ค
- ๋ชฉ์ : ํ๋ก์ธ์ค, ๋คํธ์ํฌ ๋ฐ ํ์ผ ์์คํ ๊ณผ ๊ฐ์ ์์์ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํฉ๋๋ค. ํนํ Docker์์๋ ๋ค์์คํ์ด์ค๊ฐ ์ปจํ ์ด๋์ ํ๋ก์ธ์ค๋ฅผ ํธ์คํธ ๋ฐ ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋ถ๋ฆฌํฉ๋๋ค.
unshare์ ์ฌ์ฉ:unshare๋ช ๋ น(๋๋ ๊ธฐ๋ณธ syscall)์ ์๋ก์ด ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋์ด ์ถ๊ฐ์ ์ธ ๊ฒฉ๋ฆฌ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ Kubernetes๋ ๋ณธ์ง์ ์ผ๋ก ์ด๋ฅผ ์ฐจ๋จํ์ง ์์ง๋ง, Docker๋ ์ฐจ๋จํฉ๋๋ค.- ์ ํ ์ฌํญ: ์๋ก์ด ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ํ๋ก์ธ์ค๊ฐ ํธ์คํธ์ ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค๋ก ๋๋์๊ฐ๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค. ํธ์คํธ ๋ค์์คํ์ด์ค์ ์นจํฌํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ํธ์คํธ์
/proc๋๋ ํ ๋ฆฌ์ ์ ๊ทผํด์ผ ํ๋ฉฐ,nsenter๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ํฉ๋๋ค.
์ ์ด ๊ทธ๋ฃน (CGroups)
- ๊ธฐ๋ฅ: ์ฃผ๋ก ํ๋ก์ธ์ค ๊ฐ ์์์ ํ ๋นํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ณด์ ์ธก๋ฉด: CGroups ์์ฒด๋ ๊ฒฉ๋ฆฌ ๋ณด์์ ์ ๊ณตํ์ง ์์ง๋ง, ์๋ชป ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ
release_agent๊ธฐ๋ฅ์ด ๋ฌด๋จ ์ ๊ทผ์ ์ ์ฉ๋ ์ ์์ต๋๋ค.
๋ฅ๋ ฅ ๋๋กญ
- ์ค์์ฑ: ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ๋ฅผ ์ํ ์ค์ํ ๋ณด์ ๊ธฐ๋ฅ์ ๋๋ค.
- ๊ธฐ๋ฅ: ํน์ ๋ฅ๋ ฅ์ ๋๋กญํ์ฌ ๋ฃจํธ ํ๋ก์ธ์ค๊ฐ ์ํํ ์ ์๋ ์์ ์ ์ ํํฉ๋๋ค. ํ๋ก์ธ์ค๊ฐ ๋ฃจํธ ๊ถํ์ผ๋ก ์คํ๋๋๋ผ๋ ํ์ํ ๋ฅ๋ ฅ์ด ๋ถ์กฑํ๋ฉด ํน๊ถ ์์ ์ ์คํํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ถํ ๋ถ์กฑ์ผ๋ก ์ธํด syscall์ด ์คํจํฉ๋๋ค.
์ด๊ฒ์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ๋ฅ๋ ฅ์ ๋๋กญํ ํ์ ๋จ์ ๋ฅ๋ ฅ์ ๋๋ค:
Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep
Seccomp
Docker์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค. ์ด๋ ํ๋ก์ธ์ค๊ฐ ํธ์ถํ ์ ์๋ syscalls๋ฅผ ๋์ฑ ์ ํํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
๊ธฐ๋ณธ Docker Seccomp ํ๋กํ์ผ์ https://github.com/moby/moby/blob/master/profiles/seccomp/default.json์์ ์ฐพ์ ์ ์์ต๋๋ค.
AppArmor
Docker์๋ ํ์ฑํํ ์ ์๋ ํ ํ๋ฆฟ์ด ์์ต๋๋ค: https://github.com/moby/moby/tree/master/profiles/apparmor
์ด๊ฒ์ ๊ธฐ๋ฅ, syscalls, ํ์ผ ๋ฐ ํด๋์ ๋ํ ์ ๊ทผ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋คโฆ
Namespaces
Namespaces๋ ์ปค๋ ๋ฆฌ์์ค๋ฅผ ๋ถํ ํ์ฌ ํ ์งํฉ์ ํ๋ก์ธ์ค๊ฐ ํ ์งํฉ์ ๋ฆฌ์์ค๋ฅผ ๋ณด๊ณ , ๋ค๋ฅธ ์งํฉ์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์งํฉ์ ๋ฆฌ์์ค๋ฅผ ๋ณด๋๋ก ํ๋ Linux ์ปค๋์ ๊ธฐ๋ฅ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ฆฌ์์ค์ ํ๋ก์ธ์ค์ ์งํฉ์ ๋ํด ๋์ผํ ๋ค์์คํ์ด์ค๋ฅผ ๊ฐ์ง๋ง, ํด๋น ๋ค์์คํ์ด์ค๋ ์๋ก ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ๋ฆฌ์์ค๋ ์ฌ๋ฌ ๊ณต๊ฐ์ ์กด์ฌํ ์ ์์ต๋๋ค.
Docker๋ ์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ค์ Linux ์ปค๋ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค:
- pid namespace
- mount namespace
- network namespace
- ipc namespace
- UTS namespace
๋ค์์คํ์ด์ค์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ ๋ค์ ํ์ด์ง๋ฅผ ํ์ธํ์ธ์:
cgroups
Linux ์ปค๋ ๊ธฐ๋ฅ cgroups๋ cpu, memory, io, network bandwidth์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ํ๋ก์ธ์ค ์งํฉ์ ๋ํด ์ ํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Docker๋ ํน์ ์ปจํ
์ด๋์ ๋ํ ๋ฆฌ์์ค ์ ์ด๋ฅผ ํ์ฉํ๋ cgroup ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ค์์ ์ฌ์ฉ์ ๊ณต๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ 500m๋ก ์ ํ๋๊ณ , ์ปค๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ 50m๋ก ์ ํ๋๋ฉฐ, cpu share๊ฐ 512, blkioweight๊ฐ 400์ธ ์ปจํ
์ด๋์
๋๋ค. CPU share๋ ์ปจํ
์ด๋์ CPU ์ฌ์ฉ๋์ ์ ์ดํ๋ ๋น์จ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 1024์ด๋ฉฐ 0์์ 1024 ์ฌ์ด์ ๋ฒ์๋ฅผ ๊ฐ์ง๋๋ค. ์ธ ๊ฐ์ ์ปจํ
์ด๋๊ฐ ๋์ผํ CPU share 1024๋ฅผ ๊ฐ์ง๋ฉด, ๊ฐ ์ปจํ
์ด๋๋ CPU ๋ฆฌ์์ค ๊ฒฝํฉ ์ ์ต๋ 33%์ CPU๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. blkio-weight๋ ์ปจํ
์ด๋์ IO๋ฅผ ์ ์ดํ๋ ๋น์จ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 500์ด๋ฉฐ 10์์ 1000 ์ฌ์ด์ ๋ฒ์๋ฅผ ๊ฐ์ง๋๋ค.
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
์ปจํ ์ด๋์ cgroup์ ์ป์ผ๋ ค๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian container
ps -ef | grep 1234 #Get info about the sleep process
ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it)
๋ ๋ง์ ์ ๋ณด๋ ๋ค์์ ํ์ธํ์ธ์:
๊ถํ
๊ถํ์ ๋ฃจํธ ์ฌ์ฉ์์๊ฒ ํ์ฉ๋ ์ ์๋ ๊ถํ์ ๋ํ ๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ํ์ฉํฉ๋๋ค. Docker๋ Linux ์ปค๋ ๊ถํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ํ์ ๊ด๊ณ์์ด ์ปจํ ์ด๋ ๋ด์์ ์ํํ ์ ์๋ ์์ ์ ์ ํํฉ๋๋ค.
Docker ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋, ํ๋ก์ธ์ค๋ ๊ฒฉ๋ฆฌ์์ ํ์ถํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ฏผ๊ฐํ ๊ถํ์ ํฌ๊ธฐํฉ๋๋ค. ์ด๋ ํ๋ก์ธ์ค๊ฐ ๋ฏผ๊ฐํ ์์ ์ ์ํํ๊ณ ํ์ถํ ์ ์๋๋ก ๋ณด์ฅํ๋ ค๋ ์๋์ ๋๋ค:
Docker์ Seccomp
์ด๊ฒ์ Docker๊ฐ ์ปจํ ์ด๋ ๋ด์์ ์ฌ์ฉํ ์ ์๋ ์์คํ ํธ์ถ์ ์ ํํ ์ ์๋๋ก ํ๋ ๋ณด์ ๊ธฐ๋ฅ์ ๋๋ค:
Docker์ AppArmor
AppArmor๋ ์ปจํ ์ด๋๋ฅผ ์ ํ๋ ์์ ์งํฉ์ผ๋ก ์ ํํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ๋ณ ํ๋กํ์ ์ ๊ณตํ๋ ์ปค๋ ํฅ์ ๊ธฐ๋ฅ์ ๋๋ค.:
Docker์ SELinux
- ๋ ์ด๋ธ๋ง ์์คํ : SELinux๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ํ์ผ ์์คํ ๊ฐ์ฒด์ ๊ณ ์ ํ ๋ ์ด๋ธ์ ํ ๋นํฉ๋๋ค.
- ์ ์ฑ ์งํ: ํ๋ก์ธ์ค ๋ ์ด๋ธ์ด ์์คํ ๋ด ๋ค๋ฅธ ๋ ์ด๋ธ์์ ์ํํ ์ ์๋ ์์ ์ ์ ์ํ๋ ๋ณด์ ์ ์ฑ ์ ์งํํฉ๋๋ค.
- ์ปจํ
์ด๋ ํ๋ก์ธ์ค ๋ ์ด๋ธ: ์ปจํ
์ด๋ ์์ง์ด ์ปจํ
์ด๋ ํ๋ก์ธ์ค๋ฅผ ์์ํ ๋, ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ SELinux ๋ ์ด๋ธ์ธ
container_t๊ฐ ํ ๋น๋ฉ๋๋ค. - ์ปจํ
์ด๋ ๋ด ํ์ผ ๋ ์ด๋ธ๋ง: ์ปจํ
์ด๋ ๋ด์ ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก
container_file_t๋ก ๋ ์ด๋ธ์ด ์ง์ ๋ฉ๋๋ค. - ์ ์ฑ
๊ท์น: SELinux ์ ์ฑ
์ ์ฃผ๋ก
container_t๋ ์ด๋ธ์ด ์๋ ํ๋ก์ธ์ค๊ฐcontainer_file_t๋ก ๋ ์ด๋ธ์ด ์ง์ ๋ ํ์ผ๊ณผ๋ง ์ํธ์์ฉ(์ฝ๊ธฐ, ์ฐ๊ธฐ, ์คํ)ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ด ๋ฉ์ปค๋์ฆ์ ์ปจํ ์ด๋ ๋ด์ ํ๋ก์ธ์ค๊ฐ ์์๋๋๋ผ๋ ํด๋น ํ๋ก์ธ์ค๊ฐ ํด๋น ๋ ์ด๋ธ์ด ์๋ ๊ฐ์ฒด์๋ง ์ํธ์์ฉํ๋๋ก ์ ํํ์ฌ ๊ทธ๋ฌํ ์์์ผ๋ก ์ธํ ์ ์ฌ์ ํผํด๋ฅผ ํฌ๊ฒ ์ ํํฉ๋๋ค.
AuthZ ๋ฐ AuthN
Docker์์ ๊ถํ ๋ถ์ฌ ํ๋ฌ๊ทธ์ธ์ Docker ๋ฐ๋ชฌ์ ๋ํ ์์ฒญ์ ํ์ฉํ๊ฑฐ๋ ์ฐจ๋จํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ฒฐ์ ์ ๋ ๊ฐ์ง ์ฃผ์ ์ปจํ ์คํธ๋ฅผ ๊ฒํ ํ์ฌ ์ด๋ฃจ์ด์ง๋๋ค:
- ์ธ์ฆ ์ปจํ ์คํธ: ์ฌ๊ธฐ์๋ ์ฌ์ฉ์์ ๋ํ ํฌ๊ด์ ์ธ ์ ๋ณด๊ฐ ํฌํจ๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง์ ์ด๋ป๊ฒ ์ธ์ฆํ๋์ง๊ฐ ํฌํจ๋ฉ๋๋ค.
- ๋ช ๋ น ์ปจํ ์คํธ: ์ด๋ ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค.
์ด๋ฌํ ์ปจํ ์คํธ๋ ์ธ์ฆ๋ ์ฌ์ฉ์๋ก๋ถํฐ์ ํฉ๋ฒ์ ์ธ ์์ฒญ๋ง ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํ์ฌ Docker ์์ ์ ๋ณด์์ ๊ฐํํฉ๋๋ค.
AuthZ& AuthN - Docker Access Authorization Plugin
์ปจํ ์ด๋์์์ DoS
์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ ์ ์๋ ์์์ ์ ์ ํ ์ ํํ์ง ์์ผ๋ฉด, ์์๋ ์ปจํ ์ด๋๊ฐ ์คํ ์ค์ธ ํธ์คํธ์ DoS๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
- CPU DoS
# stress-ng
sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t 5m
# While loop
docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done'
- ๋์ญํญ DoS
nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done
ํฅ๋ฏธ๋ก์ด Docker ํ๋๊ทธ
โprivileged ํ๋๊ทธ
๋ค์ ํ์ด์ง์์ --privileged ํ๋๊ทธ๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ๋ฐฐ์ธ ์ ์์ต๋๋ค:
โsecurity-opt
no-new-privileges
๊ณต๊ฒฉ์๊ฐ ๋ฎ์ ๊ถํ ์ฌ์ฉ์๋ก ์ ๊ทผํ ์ ์๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ, ์๋ชป ๊ตฌ์ฑ๋ suid ๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ค๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ด๋ฅผ ์ ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ด์์ ๊ถํ์ ์์น์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๊ทธ๊ฐ ์ปจํ ์ด๋์์ ํ์ถํ ์ ์๊ฒ ํ ์ ์์ต๋๋ค.
no-new-privileges ์ต์
์ ํ์ฑํํ์ฌ ์ปจํ
์ด๋๋ฅผ ์คํํ๋ฉด ์ด๋ฌํ ์ข
๋ฅ์ ๊ถํ ์์น์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
docker run -it --security-opt=no-new-privileges:true nonewpriv
๊ธฐํ
#You can manually add/drop capabilities with
--cap-add
--cap-drop
# You can manually disable seccomp in docker with
--security-opt seccomp=unconfined
# You can manually disable seccomp in docker with
--security-opt apparmor=unconfined
# You can manually disable selinux in docker with
--security-opt label:disable
๋ ๋ง์ --security-opt ์ต์
์ ๋ค์์ ํ์ธํ์ธ์: https://docs.docker.com/engine/reference/run/#security-configuration
๊ธฐํ ๋ณด์ ๊ณ ๋ ค์ฌํญ
๋น๋ฐ ๊ด๋ฆฌ: ๋ชจ๋ฒ ์ฌ๋ก
๋น๋ฐ์ Docker ์ด๋ฏธ์ง์ ์ง์ ํฌํจ์ํค๊ฑฐ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํผํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ docker inspect ๋๋ exec์ ๊ฐ์ ๋ช
๋ น์ ํตํด ์ปจํ
์ด๋์ ์ ๊ทผํ ์ ์๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋
ธ์ถํฉ๋๋ค.
Docker ๋ณผ๋ฅจ์ ๋ฏผ๊ฐํ ์ ๋ณด์ ์ ๊ทผํ๊ธฐ ์ํ ๋ ์์ ํ ๋์์ผ๋ก ๊ถ์ฅ๋ฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ์์ ํ์ผ ์์คํ
์ผ๋ก ํ์ฉ๋ ์ ์์ด docker inspect ๋ฐ ๋ก๊น
๊ณผ ๊ด๋ จ๋ ์ํ์ ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฃจํธ ์ฌ์ฉ์์ ์ปจํ
์ด๋์ ๋ํ exec ์ ๊ทผ ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ ์ฌ์ ํ ๋น๋ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
Docker ๋น๋ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋์ฑ ์์ ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฏธ์ง ๋น๋ ๋จ๊ณ์์ ๋น๋ฐ์ด ํ์ํ ์ธ์คํด์ค์ ๊ฒฝ์ฐ, BuildKit์ ๋น๋ ์๊ฐ ๋น๋ฐ์ ์ง์ํ์ฌ ๋น๋ ์๋๋ฅผ ํฅ์์ํค๊ณ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
BuildKit์ ํ์ฉํ๋ ค๋ฉด ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์ฑํํ ์ ์์ต๋๋ค:
- ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด:
export DOCKER_BUILDKIT=1 - ๋ช
๋ น์ด์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ์:
DOCKER_BUILDKIT=1 docker build . - Docker ๊ตฌ์ฑ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํํ์ฌ:
{ "features": { "buildkit": true } }, ์ดํ Docker๋ฅผ ์ฌ์์ํฉ๋๋ค.
BuildKit์ --secret ์ต์
์ ์ฌ์ฉํ์ฌ ๋น๋ ์๊ฐ ๋น๋ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ํ์ฌ, ์ด๋ฌํ ๋น๋ฐ์ด ์ด๋ฏธ์ง ๋น๋ ์บ์๋ ์ต์ข
์ด๋ฏธ์ง์ ํฌํจ๋์ง ์๋๋ก ํฉ๋๋ค.
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
์คํ ์ค์ธ ์ปจํ
์ด๋์์ ํ์ํ ๋น๋ฐ์ ๋ํด, Docker Compose์ Kubernetes๋ ๊ฐ๋ ฅํ ์๋ฃจ์
์ ์ ๊ณตํฉ๋๋ค. Docker Compose๋ ๋น๋ฐ ํ์ผ์ ์ง์ ํ๊ธฐ ์ํด ์๋น์ค ์ ์์์ secrets ํค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค์์ docker-compose.yml ์์ ์
๋๋ค:
version: "3.7"
services:
my_service:
image: centos:7
entrypoint: "cat /run/secrets/my_secret"
secrets:
- my_secret
secrets:
my_secret:
file: ./my_secret_file.txt
์ด ๊ตฌ์ฑ์ Docker Compose๋ก ์๋น์ค๋ฅผ ์์ํ ๋ ๋น๋ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค.
Kubernetes ํ๊ฒฝ์์๋ ๋น๋ฐ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋ฉฐ Helm-Secrets์ ๊ฐ์ ๋๊ตฌ๋ก ์ถ๊ฐ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. Kubernetes์ ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(RBAC)๋ Docker Enterprise์ ์ ์ฌํ๊ฒ ๋น๋ฐ ๊ด๋ฆฌ ๋ณด์์ ๊ฐํํฉ๋๋ค.
gVisor
gVisor๋ Go๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์
์ปค๋๋ก, Linux ์์คํ
ํ๋ฉด์ ์๋น ๋ถ๋ถ์ ๊ตฌํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํธ์คํธ ์ปค๋ ๊ฐ์ ๊ฒฉ๋ฆฌ ๊ฒฝ๊ณ๋ฅผ ์ ๊ณตํ๋ runsc๋ผ๋ Open Container Initiative (OCI) ๋ฐํ์์ด ํฌํจ๋์ด ์์ต๋๋ค. runsc ๋ฐํ์์ Docker ๋ฐ Kubernetes์ ํตํฉ๋์ด ์๋๋ฐ์คํ๋ ์ปจํ
์ด๋๋ฅผ ์ฝ๊ฒ ์คํํ ์ ์๊ฒ ํฉ๋๋ค.
GitHub - google/gvisor: Application Kernel for Containers
Kata Containers
Kata Containers๋ ๊ฒฝ๋ ๊ฐ์ ๋จธ์ ์ ์ฌ์ฉํ์ฌ ์์ ํ ์ปจํ ์ด๋ ๋ฐํ์์ ๊ตฌ์ถํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์ ๋๋ค. ์ด๋ค์ ์ปจํ ์ด๋์ฒ๋ผ ๋๊ปด์ง๊ณ ์๋ํ์ง๋ง ํ๋์จ์ด ๊ฐ์ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ๋ ฅํ ์์ ๋ถํ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Kata Containers - Open Source Container Runtime Software | Kata Containers
์์ฝ ํ
--privilegedํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ์ปจํ ์ด๋ ๋ด๋ถ์ Docker ์์ผ์ ๋ง์ดํธํ์ง ๋ง์ญ์์ค. Docker ์์ผ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํ๋ฏ๋ก, ์๋ฅผ ๋ค์ด--privilegedํ๋๊ทธ๋ก ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ์คํํ์ฌ ํธ์คํธ๋ฅผ ์์ ํ ์ ์ดํ ์ ์๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋๋ค.- ์ปจํ ์ด๋ ๋ด๋ถ์์ root๋ก ์คํํ์ง ๋ง์ญ์์ค. ๋ค๋ฅธ ์ฌ์ฉ์ ๋ฅผ ์ฌ์ฉํ๊ณ ์ฌ์ฉ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ปจํ ์ด๋์ root๋ ์ฌ์ฉ์ ๋ค์์คํ์ด์ค๋ก ์ฌ๋งคํ๋์ง ์๋ ํ ํธ์คํธ์ root์ ๋์ผํฉ๋๋ค. ์ด๋ ์ฃผ๋ก Linux ๋ค์์คํ์ด์ค, ๊ธฐ๋ฅ ๋ฐ cgroups์ ์ํด ์ฝ๊ฐ ์ ํ๋ฉ๋๋ค.
- ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ์ญ์์ค (
--cap-drop=all) ๋ฐ ํ์ํ ๊ธฐ๋ฅ๋ง ํ์ฑํํ์ญ์์ค (--cap-add=...). ๋ง์ ์์ ๋ถํ์๋ ๊ธฐ๋ฅ์ด ํ์ํ์ง ์์ผ๋ฉฐ, ์ด๋ฅผ ์ถ๊ฐํ๋ฉด ์ ์ฌ์ ์ธ ๊ณต๊ฒฉ ๋ฒ์๊ฐ ์ฆ๊ฐํฉ๋๋ค. - โno-new-privilegesโ ๋ณด์ ์ต์ ์ ์ฌ์ฉํ์ญ์์ค ํ๋ก์ธ์ค๊ฐ ๋ ๋ง์ ๊ถํ์ ์ป์ง ๋ชปํ๋๋ก ๋ฐฉ์งํ์ญ์์ค. ์๋ฅผ ๋ค์ด suid ๋ฐ์ด๋๋ฆฌ๋ฅผ ํตํด์์ ๋๋ค.
- ์ปจํ ์ด๋์ ์ฌ์ฉํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ์ญ์์ค. ๋ฆฌ์์ค ์ ํ์ ์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋จธ์ ์ ๋ณดํธํ ์ ์์ต๋๋ค.
- seccomp ์กฐ์ ํ์ญ์์ค, AppArmor (๋๋ SELinux) ํ๋กํ์ ์กฐ์ ํ์ฌ ์ปจํ ์ด๋์ ํ์ํ ์ต์ํ์ ์์ ๋ฐ ์์คํ ํธ์ถ๋ง ํ์ฉํ์ญ์์ค.
- ๊ณต์ Docker ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ณ ์๋ช ์ ์๊ตฌํ์ญ์์ค ๋๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง์ ๋น๋ํ์ญ์์ค. ๋ฐฑ๋์ด๊ฐ ์๋ ์ด๋ฏธ์ง๋ฅผ ์์ํ๊ฑฐ๋ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ๋ํ ๋ฃจํธ ํค์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ ์ฅ์์ ๋ณด๊ดํ์ญ์์ค. Docker๋ UCP๋ก ํค๋ฅผ ๊ด๋ฆฌํ ๊ณํ์ด ์์ต๋๋ค.
- ์ ๊ธฐ์ ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ฌ๋น๋ํ์ฌ ํธ์คํธ์ ์ด๋ฏธ์ง์ ๋ณด์ ํจ์น๋ฅผ ์ ์ฉํ์ญ์์ค.
- ๋น๋ฐ์ ํ๋ช ํ๊ฒ ๊ด๋ฆฌํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์ ๊ทผํ๊ธฐ ์ด๋ ต๊ฒ ํ์ญ์์ค.
- Docker ๋ฐ๋ชฌ์ ๋ ธ์ถํ๋ ๊ฒฝ์ฐ HTTPS๋ฅผ ์ฌ์ฉํ์ญ์์ค ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ์ธ์ฆ๊ณผ ํจ๊ป.
- Dockerfile์์ ADD ๋์ COPY๋ฅผ ์ ํธํ์ญ์์ค. ADD๋ ์๋์ผ๋ก ์์ถ๋ ํ์ผ์ ์ถ์ถํ๊ณ URL์์ ํ์ผ์ ๋ณต์ฌํ ์ ์์ต๋๋ค. COPY๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ฐ๋ฅํ ํ ADD ์ฌ์ฉ์ ํผํ์ฌ ์๊ฒฉ URL ๋ฐ Zip ํ์ผ์ ํตํ ๊ณต๊ฒฉ์ ์ทจ์ฝํ์ง ์๋๋ก ํ์ญ์์ค.
- ๊ฐ ๋ง์ดํฌ๋ก ์๋น์ค์ ๋ํด ๋ณ๋์ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง์ญ์์ค.
- ์ปจํ ์ด๋ ๋ด๋ถ์ ssh๋ฅผ ๋์ง ๋ง์ญ์์ค. โdocker execโ๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์ sshํ ์ ์์ต๋๋ค.
- ๋ ์์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง์ญ์์ค.
Docker ํ์ถ / ๊ถํ ์์น
Docker ์ปจํ ์ด๋ ๋ด๋ถ์ ์๊ฑฐ๋ docker ๊ทธ๋ฃน์ ์ฌ์ฉ์์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ, ํ์ถํ๊ณ ๊ถํ์ ์์น์ํค๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค:
Docker Breakout / Privilege Escalation
Docker ์ธ์ฆ ํ๋ฌ๊ทธ์ธ ์ฐํ
Docker ์์ผ์ ์ ๊ทผํ ์ ์๊ฑฐ๋ docker ๊ทธ๋ฃน์ ์ฌ์ฉ์์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์์ง๋ง Docker ์ธ์ฆ ํ๋ฌ๊ทธ์ธ์ ์ํด ํ๋์ด ์ ํ๋๋ ๊ฒฝ์ฐ, ์ฐํํ ์ ์๋์ง ํ์ธํ์ญ์์ค:
AuthZ& AuthN - Docker Access Authorization Plugin
Docker ๊ฐํ
- ๋๊ตฌ docker-bench-security๋ ํ๋ก๋์
์์ Docker ์ปจํ
์ด๋๋ฅผ ๋ฐฐํฌํ ๋์ ์ผ๋ฐ์ ์ธ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ์ธํ๋ ์คํฌ๋ฆฝํธ์
๋๋ค. ํ
์คํธ๋ ๋ชจ๋ ์๋ํ๋์ด ์์ผ๋ฉฐ, CIS Docker Benchmark v1.3.1์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
Docker๋ฅผ ์คํํ๋ ํธ์คํธ ๋๋ ์ถฉ๋ถํ ๊ถํ์ด ์๋ ์ปจํ ์ด๋์์ ๋๊ตฌ๋ฅผ ์คํํด์ผ ํฉ๋๋ค. README์์ ์คํ ๋ฐฉ๋ฒ์ ํ์ธํ์ญ์์ค: https://github.com/docker/docker-bench-security.
์ฐธ๊ณ ๋ฌธํ
- https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/
- https://twitter.com/_fel1x/status/1151487051986087936
- https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html
- https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/
- https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/
- https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/
- https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/
- https://en.wikipedia.org/wiki/Linux_namespaces
- https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57
- https://www.redhat.com/sysadmin/privileged-flag-container-engines
- https://docs.docker.com/engine/extend/plugins_authorization
- https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57
- https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


