Dockerの設定項目「Expose daemon on tcp://localhost:2375 without TLS」についてまとめてみた

Dockerを使った開発で、以下の設定をオンにする作業があった。

Expose daemon on tcp://localhost:2375 without TLS

Expose daemon on tcp://localhost:2375 without TLS
Exposing daemon on TCP without TLS helps legacy clients connect to the daemon. It also makes yourself vulnerable to remote code execution attacks. Use with caution.

作業中は意味をちゃんと理解せずにオンにしていたが、改めてしっかりと意味を理解したくなったので、まとめてみる。
※執筆時点で理解できていない部分は多く、記事後半にかけて推測が多くなってくることを断っておく

設定の意味

設定の英文を訳すると、以下の通りになる。

TLSを使わず、デーモンがtcp://localhost:2375で公開する
TLSを使わずTCPでデーモンが公開することで、レガシーなクライアント(TLSが使えないクライアントと解釈)がデーモンに接続できるようになる。一方、リモートコード実行攻撃について脆弱になる。注意して使うこと。

デフォルトでは、TLSを通してDockerに接続できる設定となっているが、この設定を切り替えると、TLSを通さずTCPでDockerに接続できるようになる。

TLSは、通信の暗号化などが可能なプロトコルである。TLSの定義は以下の通り。

Transport Layer Security(トランスポート・レイヤー・セキュリティ、TLS)は、インターネットなどのコンピュータネットワークにおいてセキュリティを要求される通信を行うためのプロトコルである。主な機能として、通信相手の認証、通信内容の暗号化、改竄の検出を提供する。

https://ja.wikipedia.org/wiki/Transport_Layer_Security

TLSというセキュアな通信ができなくなるから、リモートコード実行攻撃について脆弱になると解釈している。

リモートコード実行の定義は以下の通り。

RCEとは、ソフトウェアの保安上の欠陥(セキュリティ脆弱性)の種類の一つで、遠隔から送り込まれた任意のプログラムコードを実行できてしまうこと。また、攻撃者がこれを悪用してコードを送り込み実行すること。

https://e-words.jp/w/RCE.html

TLSが使われなくなると、認証処理などができない関係でプログラムコードが遠隔から送り込みやすくなるのであろう。

以上より、Expose daemon on tcp://localhost:2375 without TLSは基本的にオフにしておき、必要と状況に応じてオンにするというのが良いと考える。

例えば、Dockerを完全にローカルに閉じて使う場合、すなわち外部からアクセスできない環境で使う場合は、この設定はオンにしても問題ないと考える。言い換えると、公開サーバにDockerを載せる場合はオンにすべきではない?(公開サーバにDockerを乗せたことがない、そもそも乗せるケースがどれくらいあるかが分かっておらず、勉強不足…)

また、この設定は、以下説明を読むと、TLSが使えないシステムがDockerを使いたい場合に有効と読み取れる。

TLSを使わずTCPでデーモンが公開することで、レガシーなクライアント(TLSが使えないクライアントと解釈)がデーモンに接続できるようになる。一方、リモートコード実行攻撃について脆弱になる。注意して使うこと。

しかし、この設定を変更する前に、システム側でTLSを使えるようにすることを考えるのが先なのではと考えてしまう…(「TLSが使えないシステムがDockerを使いたい場合に有効」という解釈が正しければ)

他にどのような場面で有効かということについては理解できておらず、奥深さを感じる。もっと勉強しようと思った。


この記事が気に入ったらサポートをしてみませんか?