これは何?
- 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ページを踏ませるだけでできてしまいます。
結果として(コンテナ内ですが)任意コード実行のような状態になります。
悪用されそう?
上記のシナリオではないですが、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)にしました。。。