LoginSignup
23
11

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-18

これは何?

  • 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)にしました。。。

23
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
11