その他の Docker セキュリティ

このページは Docker に影響を与えるセキュリティ脆弱性の一覧です。この中には、 Docker コンテナとして実行するプロセスがバグによる影響を受けていなくても、また、たとえそれが修正されたものも含みます。前提として、コンテナの実行にあたっては、外部のケーパビリティ(capability)を追加しておらず、また、 --privileged としても実行してないものとします。

以下のリストは完全なものには至っていません。むしろ、いくつかのバグはサンプルであり、私たちが実際にセキュリティ・レビューに対応し、公開された脆弱性に対し、警告を発したものです。すべての可能性やバグは、この一覧にあるよりも遙かに多くの報告があります。幸いにも、Docker のアプローチはデフォルトでセキュア(安全)であるべきというもので、apparmor、seccomp を通したり、ケーパビリティを落とすのもあります。これにより、既に知られているバグだけでなく、未知のバグに対する問題も緩和するでしょう。

バグへの対処済み(Bugs mitigated):

  • CVE-2013-19561957195819591979CVE-2014-40145206520779707975CVE-2015-29258543CVE-2016-31343135 、 等 : 特権のないユーザ名前区間(unprivileged user namespaces)の導入は、特権のないユーザからの攻撃機会を大いに増加させました。たとえば、 mount() のように、以前は root のみのシステムコールに対し、権限のないユーザの利用を正当化するものです。これら全てのセキュリティ脆弱性例は、ユーザ名前空間(user namespaces)の導入に起因しています。Docker はユーザ名前空間を使ってコンテナをセットアップしますが、デフォルトの seccomp プロファイルでは、コンテナ内のプロセスに対しては、自身からネストする名前空間の作成を許可しませんので、これら脆弱性は利用されていないと解釈しています。
  • CVE-2014-0181CVE-2015-3339 :これらのバグには、 setuid バイナリの存在が必要です。Docker は NO_NEW_PRIVS プロセス・フラグと他の仕組みにより、 コンテナ内での setuid バイナリを無効化します。
  • CVE-2014-4699ptrace() によるバグにより、権限のエスカレーションを引き起こす可能性があります。Docker は apparmor、seccomp を使い、 CAP_PTRACE で権限を落とすので、コンテナ内での ptrace() を無効化します。
  • CVE-2014-9529 : 連続する keyctl() コールの作成により、カーネルの DoS やメモリ不正を引き起こす可能性があります。Docker は seccomp を使い、コンテナ内での keyctl() を無効化します。
  • CVE-2015-32144036 : これらのバグは共通の仮想化ドライバによるもので、ゲスト OS のユーザがホスト上のコードを実行できる可能性があります。これら不正な攻撃のためには、ゲスト内の仮想化デバイスにアクセスできる必要があります。Docker は、 --privileged を使って実行しなければ 、これらデバイスへの直接アクセスを隠すようにします。興味深いことに、場合によってはコンテナが仮想マシンよりも「より安全」になるのですが、これは、共通の優れた認識とは相反します。仮想マシンがコンテナよりも「より安全」です。
  • CVE-2016-0728keyctl() コールによって作成される use-after-free(使ったあとに解放)により、権限の昇格を引き起こす可能性があります。Docker はデフォルトの seccomp プロファイルを使い、コンテナ内での keyctl() を無効化します。
  • CVE-2016-2383 : eBPF のバグです。特別なカーネル内の DSL が、seccomp ファイルかのように装うことで、カーネルメモリを任意に読み込み可能にします。コンテナ内で(皮肉にも) seccomp を使ってブロックされます。
  • CVE-2016-313449974998 : setsockopt の IPT_SO_SET_REPLACEARPT_SO_SET_REPLACEARPT_SO_SET_REPLACE にあるバグで、メモリ不正やローカル権限の昇格を引き起こす可能性があります。デフォルトの Docker は、これらの引数を CAP_NET_ADMIN によってブロックします。

バグがあるものの、未対処(bugs not mitigated):

  • CVE-2015-32905157 :カーネルの non-masking interrupt handling のバグによるもので、権限の昇格を引き起こします。Docker コンテナでは、現在、 seccomp を使って modify_ldt() システムコールはブロックしますが、不正な攻撃を受ける可能性があります。
  • CVE-2016-5195 : 非常に稀なケースが発見されました。Linux カーネルのメモリ・サブシステムが扱うコピーオンライト(COW)が、プライベートな読み込み専用のメモリ・マッピングを破損します。これにより、権限のないローカルユーザが、読み込み専用のメモリに対する書き込みの権限を得られるというものです。これはまた「dirty COW」とも知られています。部分的な対処:いくつかのオペレーティングシステムでは、この脆弱性を ptrace の seccomp フィルタリングと、実際には /proc/self/mem を読み込み専用にすることを組み合わせ対処しています。

参考

Docker security non-events
https://docs.docker.com/engine/security/non-events/