Help us understand the problem. What is going on with this article?

本当は怖いDocker for Windows のExpose daemon on tcp://localhost:2375 without TLS

More than 1 year has passed since last update.

これは何?

  • Docker for Windows + WSLでWindowsのDocker環境を構築している人が増えていそう
  • 軒並みみなさん、Expose daemon on tcp://localhost:2375 without TLSにチェックを入れるとか言っている
    • It also makes yourself vulnerable to remote code execution attacks. って書いてるのに!!そのケアもなしに。
    • 遠隔コード実行が可能な攻撃を可能にすることにもなるって書いてるのに
  • あんまりどんなリスクがあるか、すぐに出てこなかったので記事にします

本当は怖い?UIに書いてるままのリスクじゃん

まったくもっておっしゃる通りです。
が、localにしかport公開しないのにどんなリスクがあるかすぐわからなくないですか?私はわかりませんでした。
同じLANにさらしてしまうならまだしも、なぜローカルにポートを開放するのがそんなに危険なのか、想定脅威をすぐ想像できませんでした。

一番具体的な想定脅威はなんだったの?

悪意あるWebページからのdockerデーモンのAPI利用でした。
REST APIに悪意あるWebページから到達可能になってしまいます。
SOPとかあるので一定は守られるのですが、「任意のコンテナイメージをビルドする」といった行為が、
遠隔の攻撃者がWebページを踏ませるだけでできてしまいます。
結果として(コンテナ内ですが)任意コード実行のような状態になります。

詳細は下記で解説されています:
https://www.blackhat.com/docs/us-17/thursday/us-17-Cherny-Well-That-Escalated-Quickly-How-Abusing-The-Docker-API-Led-To-Remote-Code-Execution-Same-Origin-Bypass-And-Persistence_wp.pdf

悪用されそう?

上記のシナリオではないですが、dockerdのAPIが利用できることによる攻撃は、過去観測されています。
https://blog.trendmicro.co.jp/archives/19773

こんなリスクDocker以外にもあるんじゃない?

たしかに。
Chromeでは一部dstポートは下記のように塞がれてます。
https://superuser.com/questions/188058/which-ports-are-considered-unsafe-by-chrome

結局どう解決したの?

docker for windowsでLinuxコンテナを運用する際、認証(本来dockerdのAPIはクライアント証明書で認証できます)を付ける方法は私にはわかりませんでした。
tcpソケットを使わない方法は、名前付きパイプですが、WSLと名前付きパイプでやり取りするのは結構大変そうです。
参考: https://qiita.com/gentaro/items/22b0757d5be0c36ecd17

私はもうHyper−Vの活用を諦めて、無難にdocker-machine(with Virtualbox)にしました。。。

shioshiota
セキュリティ/ インフラ系のエンジニア/ ICPC: .shiomori(2011), ~shiokawa(2012,2013) /競技プログラミング: shioshiota / ICFPC(2017, 2018, 2019): DiamondPrincess
pfn
Make the real world computable / 現実世界を計算可能にする
https://preferred.jp/ja/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away