Save 37% off PRO during our Black Friday Sale! »

コンテナのセキュリティについて考えよう

 コンテナのセキュリティについて考えよう

コンテナ実用化が進む中、セキュアに運用することは忘れ去られがちです。
この資料は、コンテナをセキュアに運用するときに考慮する事項を説明しています。コンテナセキュリティのキッカケとなれば幸いです。

2ec42cd8400b1e8e5ba125936c1d27e9?s=128

Satoru MIYAZAKI

October 10, 2019
Tweet

Transcript

  1. myzkstr.com みやざきさとる コンテナのセキュリティ について考えよう

  2. myzkstr.com みやざきさとる 宮﨑悟 s-miyaza@myzkstr.com @s_miyaza satoru.miyazaki.31  好きなOS:Solaris  好きなファイルシステム:ZFS

     好きな仮想化:Solaris Zone  フリーランスのエンジニア  北海道函館市からリモートワーク  主な仕事  某WordPress仮想マシン  コンテナセキュリティ製品評価  技術コラム掲載
  3. アジェンダ 今日話すこと:  コンテナの現状  コンテナセキュリティとは  コンテナをセキュアに運用するためには 今日話さないこと: 

    コンテナセキュリティ製品の詳細 2019-10-10 OSC 0219 Enterprise #osc19ep 3
  4. 本資料でのコンテナの定義  本資料では、コンテナ=アプリケーションコンテナと する  アプリケーションコンテナ=Docker(もしくはDocker 互換のアプリケーションコンテナ)を想定  コンテナのオーケストレーションサービスとして kubernetes(以下k8s)とDocker

    Swarmを想定 2019-10-10 OSC 0219 Enterprise #osc19ep 4
  5. コンテナの現状

  6. コンテナとは  Dockerは、cgroupとLinux User Namespaceでリソース (プロセス、ネットワーク、ボリューム)を分離  恒久的なディスク領域、仮想ネットワーク、 仮想ブリッジなどはコンテナデーモンが作成 

    コンテナはカーネルを持たない  コンテナ内の処理はsystem callを使用し、 コンテナホスト上のカーネルで処理 コンテナホスト OS/カーネル コンテナ プロセス コンテナ プロセス system call system call vol1 veth1 veth2 vol2 コンテナデーモン ブリッジ 2019-10-10 OSC 0219 Enterprise #osc19ep 6
  7. コンテナ上のアプリケーション コンテナホスト OS/カーネル コンテナデーモン 特権ユーザ アプリケーション 非特権ユーザ アプリケーション 非特権ユーザ コンテナ1

    コンテナ2  1コンテナで1サービスのみ動作することを推奨  コンテナには、アプリケーション、ライブラリ、 アプリケーションに必要なファイルのみを配置する ことを推奨  コンテナ内のプロセスは、非特権ユーザ (rootユーザ以外)で動作することを推奨  ホストからはコンテナのプロセスを見ることが可能  コンテナから、コンテナホストや他コンテナの プロセスを見ることは不可 2019-10-10 OSC 0219 Enterprise #osc19ep 7
  8. コンテナ上のネットワーク  コンテナとコンテナホストのネットワークは、仮想ブリッジ通信  Docker Swarmでは、ノード間通信をTLSで暗号化  k8sでは、幾つかのCNI Networkプロバイダを 使用可能

     k8sでは、VxLANやTLSによって ホスト間の通信を暗号化可能  外部からは必要なポートのみを ポートフォワードによって接続 ホスト1 node間 接続 TLS VxLAN ホスト2 LBサービス サービス サービス サービス サービス サービス サービス 2019-10-10 OSC 0219 Enterprise #osc19ep 8
  9. コンテナイメージ  コンテナはイメージという形で配布される  イメージはレイヤ構造で構成される  Docker Official Imageなどの安全なベースイメージを 元に構成可能

     必要なミドルウェア、アプリケーションを 積み重ねてイメージを作成 Container Application Layer Middleware Layer Base OS Layer 2019-10-10 OSC 0219 Enterprise #osc19ep 9
  10. コンテナセキュリティとは

  11. コンテナはセキュア?  コンテナを非特権ユーザで動作させる =コンテナホスト上で非特権ユーザでプロセスが動作する  コンテナ内で1アプリケーションのみ動作させ、 アプリケーションに必要なファイルのみ配置する =コンテナ内で余計なプロセスを動作させない  複数のコンテナやコンテナホスト間をつなぐ

    ネットワークは、分離もしくは暗号化されている  外部からの通信は必要なポートのみ接続される 2019-10-10 OSC 0219 Enterprise #osc19ep 11
  12. コンテナのセキュリティ問題(1)  ホスト側のカーネルを使用しても、 アプリケーション側でカーネルバグを踏むと ホスト上のすべてのコンテナが停止 2019-10-10 OSC 0219 Enterprise #osc19ep

    12
  13. コンテナのセキュリティ問題(1) →解決策  ホスト側のカーネルを使用しても、 アプリケーション側でカーネルバグを踏むと ホスト上のすべてのコンテナが停止  軽量VM上でコンテナを動作させる kata containerなどの実装がある

     カーネルやコンテナサービスの脆弱性を スキャンする 2019-10-10 OSC 0219 Enterprise #osc19ep 13
  14. コンテナのセキュリティ問題(2)  コンテナに含まれる、ミドルウェア、ライブラリなどに 脆弱性が見つかる  カーネル、コンテナサービス自体の脆弱性が見つかる  ゼロデイ攻撃 2019-10-10 OSC

    0219 Enterprise #osc19ep 14
  15. コンテナのセキュリティ問題(2) →解決策  コンテナに含まれる、ミドルウェア、ライブラリなどに 脆弱性が見つかる  カーネル、コンテナサービス自体の脆弱性が見つかる  ゼロデイ攻撃 

    コンテナイメージの脆弱性スキャン、修正  実行中のコンテナのアップデート  コンテナホストの脆弱性スキャン 2019-10-10 OSC 0219 Enterprise #osc19ep 15
  16. コンテナのセキュリティ問題(3)  マルウェアの被害  長期稼働時の意図しない動作 2019-10-10 OSC 0219 Enterprise #osc19ep

    16
  17. コンテナのセキュリティ問題(3) →解決策  マルウェアの被害  長期稼働時の意図しない動作  動作中のコンテナのランタイム制御 不要なプロセス実行の禁止 動作中にコピーされた実行形式の実行停止

     コンテナ動作時間の制限  定期的なローリングアップデート  定期的なコンテナホストのアップデート 2019-10-10 OSC 0219 Enterprise #osc19ep 17
  18. コンテナのセキュリティ問題(4)  1つのk8sコントローラで、関連しないサービスを 複数動作 2019-10-10 OSC 0219 Enterprise #osc19ep 18

  19. コンテナのセキュリティ問題(4) →解決策  1つのk8sコントローラで、関連しないサービスを 複数動作  ノード間ネットワークは暗号化されていても、 個々のネットワークブリッジ通信は暗号化されていない  サービス間でネットワークを分離するには

    k8sコントローラを分離する 2019-10-10 OSC 0219 Enterprise #osc19ep 19
  20. コンテナの脆弱性スキャン  コンテナホストに対する脆弱性スキャン  コンテナイメージに対する脆弱性スキャン  コンテナのレイヤ単位でスキャンが可能  実行中にコンテナに対する脆弱性スキャン 

    パッケージベースでCVN/JVN情報を元にスキャンを実施  対応OSが限られる(Debian, alpine, RHEL系など)  言語の使用パッケージまで確認するツールもある 2019-10-10 OSC 0219 Enterprise #osc19ep 20
  21. 脆弱性スキャンツール(OSS) その1  Anchore Engine(https://anchore.com/engine/)  コンテナイメージの静的スキャン  Docker Hub(https://hub.docker.com/)

     コンテナイメージの静的スキャン  Clair(https://github.com/coreos/clair)  コンテナイメージの静的スキャン  falco(https://sysdig.com/opensource/falco/)  sysdig社開発のOSSランタイムスキャンツール  実行中のコンテナアプリケーション、ホスト、ネットワークの異常検知  CNCFのsandboxプロジェクトにジョイン 2019-10-10 OSC 0219 Enterprise #osc19ep 21
  22. 脆弱性スキャンツール(OSS) その2  trivy(https://github.com/aquasecurity/trivy)  イメージの静的スキャン  Aqua Securityに買収されたが、OSSで公開 

    Vuls(https://github.com/future-architect/vuls)  複数ホスト(コンテナホスト、コンテナ)の脆弱性スキャン可能  稼働中のコンテナの脆弱性チェック可能  Wazuh(https://wazuh.com)  脆弱性検知、侵入検知、ファイル変更・インジェクション検知  統合的にコンテナのセキュリティを確保 2019-10-10 OSC 0219 Enterprise #osc19ep 22
  23. コンテナイメージの脆弱性スキャン  スキャンにより脆弱性が見つかった場合  ベースイメージ、パッケージ、使用ライブラリの更新  イメージの再作成→脆弱性検査  新コンテナイメージのデプロイ 

    ローリングアップデート  カナリアデプロイ  ブルー/グリーンデプロイ  脆弱性は日々発見される 定期的に脆弱性スキャン実施する必要がある 2019-10-10 OSC 0219 Enterprise #osc19ep 23
  24. ランタイム監視  静的スキャンだけでは、日々更新される脆弱性による ゼロデイ攻撃に対応できない  ランタイム監視=実行中のコンテナの監視  ランタイム監視に求められること  実行中コンテナの脆弱性検知

     実行中コンテナのファイルインジェクションの検知  コンテナ内の実行可能・不可能なファイルの設定  コンテナ間・コンテナ外への不正な通信の禁止 2019-10-10 OSC 0219 Enterprise #osc19ep 24
  25. アプリケーションの脆弱性  アプリケーションの脆弱性  SQLインジェクション  CSR/CSRF  ファイルのインジェクション 

    コマンド実行  アプリケーション脆弱性の対応  アプリケーションで使用するライブラリは、最新のものを選択  脆弱性を意識したアプリケーション開発  ペネトレーションテストの実施 2019-10-10 OSC 0219 Enterprise #osc19ep 25
  26. コンテナをセキュアに 運用するためには

  27. セキュリティはプロセス  コンテナホスト自体の脆弱性チェック  定期的なイメージ再作成  イメージ検査  テスト(アプリケーション、ペネトレーション、負荷など) 

    デプロイ  未知のマルウェア、インジェクションなどへの対応  コンテナの寿命を短くする  ランタイム監視の実施  障害発生時のエスカレーション 2019-10-10 OSC 0219 Enterprise #osc19ep 27
  28. DevSecOpsの実践  一貫した開発・セキュリティ・運用が必要  シフトレフト  バグを運用でカバーすると高コスト  バグを開発で出し切る 

    運用、セキュリティコストの削減  DevSecOpsの自動化  CI/CDの考え方の導入+セキュアな考え方 2019-10-10 OSC 0219 Enterprise #osc19ep 28
  29. Development  ベースOSの選定  言語、ライブラリ、パッケージの選定  セキュリティ基準に則った開発  アプリケーションの静的解析 

    ペネトレーションテスト 2019-10-10 OSC 0219 Enterprise #osc19ep 29
  30. Security  セキュリティ基準の策定  CIS  HIPS  NIST 

    PCI DSS  DevとOpsに対するセキュリティ対策支援  開発のセキュリティ基準  コンテナセキュリティの方針決定 2019-10-10 OSC 0219 Enterprise #osc19ep 30
  31. Operations  イメージアップデート  定期的なデプロイ  定期的な脆弱性スキャン  障害監視 

    障害検知時のエスカレーション 2019-10-10 OSC 0219 Enterprise #osc19ep 31
  32. CI/CDツールと 脆弱性スキャンの組み合わせ  CI/CDツール  Gitlab  Jenkins  Circle

    CI  Travis CI  コンテナイメージ作成時後に静的脆弱性スキャン 2019-10-10 OSC 0219 Enterprise #osc19ep 32
  33. ルーチンワークは自動化する  CI/CDツールで出来ることは自動化する  アプリケーション静的解析  コンテナイメージの静的脆弱性スキャン  コンテナ群へのペネトレーションテスト 

    デプロイ  リリース中のコンテナイメージに対する脆弱性スキャン  Wazuhなど、脆弱性検査及び監視を行うツールもある 2019-10-10 OSC 0219 Enterprise #osc19ep 33
  34. 人間は、人間に出来ることだけ行う  コード、テストの作成  レヴュー  セキュリティ設計  リリースのOK/NG 

    インシデント発生時の対応 2019-10-10 OSC 0219 Enterprise #osc19ep 34
  35. セキュリティよく分からない! という人向けのおまけ

  36. セキュリティよくわからない  自分で学ぶ  時間的コストが高い  金で解決する  セキュリティに強い人材を確保・育成する 

    セキュリティコンサルタントを雇う  商用のコンテナセキュリティツールを使う 2019-10-10 OSC 0219 Enterprise #osc19ep 36
  37. 商用コンテナセキュリティ製品(1)  Aqua Cloudnaitive Security Platform (https://www.aquasec.com)  イメージスキャン、ランタイムスキャン、監視、L3FW 

    日本販社あり  NeuVector(https://neuvector.com/)  イメージスキャン、ランタイムスキャン、監視、L7FW  日本販社あり 2019-10-10 OSC 0219 Enterprise #osc19ep 37
  38. 商用コンテナセキュリティ製品(2)  sysdig (https://sysdig.com)  イメージスキャン、ランタイムスキャン、監視  日本販社あり  Tufin

    Iris/Orca(https://www.tufin.com/ja)  イメージスキャン、ランタイムスキャン、監視、FW  日本販社あり  twistlock(https://www.twistlock.com)  イメージスキャン、ランタイムスキャン、監視、FW  日本販社あり  最近パロアルトに買収され、Prismaに統合される模様 2019-10-10 OSC 0219 Enterprise #osc19ep 38
  39. 最後に  この資料は、コンテナのセキュリティを考える為のきっかけ  オンプレミス・IaaSとコンテナのセキュリティには、 違う部分があります  自分で答えを見つけよう 2019-10-10 OSC

    0219 Enterprise #osc19ep 39