Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dockerコンテナからホストのrootを取る話
Search
narupi
September 29, 2019
Technology
9
2.3k
Dockerコンテナからホストのrootを取る話
Vulnerable Docker VMを利用してDooD環境のコンテナからホストのrootを取る話。
モブセキュリティLT第一回(2019/09/29)で利用。
narupi
September 29, 2019
Tweet
Share
More Decks by narupi
See All by narupi
VulnerableDockerVM Writeup
narupi
0
160
Other Decks in Technology
See All in Technology
MapLibreとAmazon Location Service
dayjournal
1
160
家族アルバム みてねにおけるGrafana活用術 / Grafana Meetup Japan Vol.1 LT
isaoshimizu
1
750
JSON攻略法.pdf
miyakemito
8
5.1k
Building Dashboards as a Hobby
egmc
0
220
Cloud Native Java with Spring Boot (CNCF Aarhus, April 2024)
thomasvitale
1
170
Terraformあれやこれ/terraform-this-and-that
emiki
8
1.4k
ChatGPT for IT Service Management (IT Pro)
dahatake
7
1.6k
本当のAWS基礎
toru_kubota
0
520
アクセス制御にまつわる改善 / Improving access control
itkq
0
540
レガシーをぶっ壊せ。AEONで始めるDevRelの話 / Qiita Night 2024-2-22
aeonpeople
3
1.3k
DevOpsメトリクスとアウトカムの接続にトライ!開発プロセスを通して計測できるメトリクスの活用方法
ham0215
2
240
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
230
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
20
1.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
25
2.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
14
1.6k
In The Pink: A Labor of Love
frogandcode
138
21k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
Making the Leap to Tech Lead
cromwellryan
124
8.5k
The Art of Programming - Codeland 2020
erikaheidi
42
12k
We Have a Design System, Now What?
morganepeng
43
6.8k
What's in a price? How to price your products and services
michaelherold
237
11k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
Transcript
Dockerコンテナからホストの rootを取る話 2019/09/29 narupi(@ei1528)
自己紹介 narupi Twitter : @ei1528 CTFをしている(Forensicが好き)
動機 最近Dockerにムカついたので破壊したくなった
注意事項 ここで得た技術得た知識/技術の悪用厳禁 検証は自己責任 管理下以外のサーバ/アプリケーションに対して攻撃を行わない 初心者なので内容に間違いがある場合がある
検証環境 NotSoSecureが提供しているVulnerable Docker VM を利用 (https://www.notsosecure.com/vulnerable-docker-vm/ ) CTF形式
コンテナに侵入する 入り口はWordPress WordPressが動いているコンテナには簡単に侵入できる
コンテナ間を移動する nmapを利用してコンテナが利用しているIP帯に対してスキャンを行う 他のコンテナに侵入するとdocker.sockが見える (コンテナで実行しているサービスについて調べると、起動時にマウントする必要があるらしい)
docker.sockについて UNIXドメインソケット(プロセス間でデータを通信するためのもの) マウントしたdocker.sockに書き込み権限が与えられているとまずい dockerのvolumeマウントはデフォルトでread write権限となる(オプションで:roをつけることで read onlyになる)
DockerCLI DockerEngine API Docker Daemon Unixソケット
docker.sockがマウントされていると コンテナ内からホストのDockerDaemonにアクセスできる つまりコンテナ内で実行したDockerコマンドはホスト側で実行される DockerCLI DockerEngine API Docker Daemon
Unixソケット ホスト コンテナ DockerCLI Unixソケット
コンテナからホストのrootを取る dockerコマンドがホストで実行できる状況の場合、以下の手順でホストのrootを取ることができ る 1. コンテナ内にdockerをインストールする(意図的にdocker daemonを共有している場合はインス トールされているはず) 2. ホストのルートディレクトリをマウントしたコンテナを起動する(例:docker
run –it –v /:/HOGE ubuntu:latest bash) 3. マウントしたディレクトリHOGEをルートディレクトリに変更する(chroot /HOGE)
Dockerは安全? 基本的にはDockerを利用することでアプリケーションに脆弱性があった場合でも、影響範囲をコ ンテナ内に留める事ができる マウントには気をつける必要がある(ホストへのアクセスを許容してしまうリスク) 不明なdocker imageは利用しない(悪意のあるスクリプトが埋め込まれているリスク)
Docker19.03から非rootユーザでもdockerd(デーモン)を実行できるようになった (Rootlessモード)
余談(DinDとDooD) コンテナ内からコンテナを操作する方法として、Docker in Docker(DinD)とDocker outside of Docker(DooD)がある DinDはDocker本体の開発を効率化されるために生み出された手法らしい
(http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/) DooDはDockerの管理をコンテナから行えるようにする手法らしい (CI用途などで利用されるらしい)
DinD DinD対応イメージを利用してコンテナを作る デフォルトの権限ではDockerデーモンを起動できないのでprivilegedオプションを利用する必要が ある(すべてのデバイスへのアクセスが可能になる) 暗黙的にData Volumeが利用されコンテナとホストのリソースを共有する
ホストとコンテナが階層化されるのでお互いに見えない
DooD ホストのDocker.sockをマウントすることでDockerデーモンを共有する ホスト側のDockerをコンテナ側から実行する コンテナからホスト側が見える DinDのようにゴミが溜まることはない
まとめ そもそもコンテナに侵入されないようにしよう ボリュームのマウントには気をつけよう
参考 https://oioki.me/2017/09/vulnerable-docker-vm/ https://darksh3ll.info/index.php/18-write-up-vulnerable-docker-vm-by-notsosecure-com https://rimuru.lunanet.gr.jp/notes/post/how-to-root-from-inside-container/ https://www.lvh.io/posts/dont-expose-the-docker-socket-not-even-to-a-container.html
https://qiita.com/sugiyasu-qr/items/85a1bedb6458d4573407 https://blog.nijohando.jp/post/docker-in-docker-docker-outside-of-docker/ https://qiita.com/toto1310/items/64d7db407d31fd802f9c