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.4k
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
190
Other Decks in Technology
See All in Technology
VPC間の接続方法を整理してみた #自治体クラウド勉強会
non97
1
900
チームを主語にしてみる / Making "Team" the Subject
ar_tama
4
310
CAMERA-Suite: 広告文生成のための評価スイート / ai-camera-suite
cyberagentdevelopers
PRO
3
270
現地でMeet Upをやる場合の注意点〜反省点を添えて〜
shotashiratori
0
540
顧客が本当に必要だったもの - パフォーマンス改善編 / Make what is needed
soudai
24
6.8k
分布で見る効果検証入門 / ai-distributional-effect
cyberagentdevelopers
PRO
4
700
10分でわかるfreee エンジニア向け会社説明資料
freee
18
520k
GitHub Universe: Evaluating RAG apps in GitHub Actions
pamelafox
0
180
Product Engineer Night #6プロダクトエンジニアを育む仕組み・施策
hacomono
PRO
1
480
カメラを用いた店内計測におけるオプトインの仕組みの実現 / ai-optin-camera
cyberagentdevelopers
PRO
1
130
LeSSに潜む「隠れWF病」とその処方箋
lycorptech_jp
PRO
2
120
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
49k
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
65
11k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Learning to Love Humans: Emotional Interface Design
aarron
272
40k
Into the Great Unknown - MozCon
thekraken
31
1.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
370
Making the Leap to Tech Lead
cromwellryan
132
8.9k
Testing 201, or: Great Expectations
jmmastey
38
7k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Statistics for Hackers
jakevdp
796
220k
Typedesign – Prime Four
hannesfritz
39
2.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
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