Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

myzkstr.com みやざきさとる 宮﨑悟 [email protected] @s_miyaza satoru.miyazaki.31  好きなOS:Solaris  好きなファイルシステム:ZFS  好きな仮想化:Solaris Zone  フリーランスのエンジニア  北海道函館市からリモートワーク  主な仕事  某WordPress仮想マシン  コンテナセキュリティ製品評価  技術コラム掲載

Slide 3

Slide 3 text

アジェンダ 今日話すこと:  コンテナの現状  コンテナセキュリティとは  コンテナをセキュアに運用するためには 今日話さないこと:  コンテナセキュリティ製品の詳細 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 3

Slide 4

Slide 4 text

本資料でのコンテナの定義  本資料では、コンテナ=アプリケーションコンテナと する  アプリケーションコンテナ=Docker(もしくはDocker 互換のアプリケーションコンテナ)を想定  コンテナのオーケストレーションサービスとして kubernetes(以下k8s)とDocker Swarmを想定 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 4

Slide 5

Slide 5 text

コンテナの現状

Slide 6

Slide 6 text

コンテナとは  Dockerは、cgroupとLinux User Namespaceでリソース (プロセス、ネットワーク、ボリューム)を分離  恒久的なディスク領域、仮想ネットワーク、 仮想ブリッジなどはコンテナデーモンが作成  コンテナはカーネルを持たない  コンテナ内の処理はsystem callを使用し、 コンテナホスト上のカーネルで処理 コンテナホスト OS/カーネル コンテナ プロセス コンテナ プロセス system call system call vol1 veth1 veth2 vol2 コンテナデーモン ブリッジ 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 6

Slide 7

Slide 7 text

コンテナ上のアプリケーション コンテナホスト OS/カーネル コンテナデーモン 特権ユーザ アプリケーション 非特権ユーザ アプリケーション 非特権ユーザ コンテナ1 コンテナ2  1コンテナで1サービスのみ動作することを推奨  コンテナには、アプリケーション、ライブラリ、 アプリケーションに必要なファイルのみを配置する ことを推奨  コンテナ内のプロセスは、非特権ユーザ (rootユーザ以外)で動作することを推奨  ホストからはコンテナのプロセスを見ることが可能  コンテナから、コンテナホストや他コンテナの プロセスを見ることは不可 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 7

Slide 8

Slide 8 text

コンテナ上のネットワーク  コンテナとコンテナホストのネットワークは、仮想ブリッジ通信  Docker Swarmでは、ノード間通信をTLSで暗号化  k8sでは、幾つかのCNI Networkプロバイダを 使用可能  k8sでは、VxLANやTLSによって ホスト間の通信を暗号化可能  外部からは必要なポートのみを ポートフォワードによって接続 ホスト1 node間 接続 TLS VxLAN ホスト2 LBサービス サービス サービス サービス サービス サービス サービス 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 8

Slide 9

Slide 9 text

コンテナイメージ  コンテナはイメージという形で配布される  イメージはレイヤ構造で構成される  Docker Official Imageなどの安全なベースイメージを 元に構成可能  必要なミドルウェア、アプリケーションを 積み重ねてイメージを作成 Container Application Layer Middleware Layer Base OS Layer 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 9

Slide 10

Slide 10 text

コンテナセキュリティとは

Slide 11

Slide 11 text

コンテナはセキュア?  コンテナを非特権ユーザで動作させる =コンテナホスト上で非特権ユーザでプロセスが動作する  コンテナ内で1アプリケーションのみ動作させ、 アプリケーションに必要なファイルのみ配置する =コンテナ内で余計なプロセスを動作させない  複数のコンテナやコンテナホスト間をつなぐ ネットワークは、分離もしくは暗号化されている  外部からの通信は必要なポートのみ接続される 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 11

Slide 12

Slide 12 text

コンテナのセキュリティ問題(1)  ホスト側のカーネルを使用しても、 アプリケーション側でカーネルバグを踏むと ホスト上のすべてのコンテナが停止 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 12

Slide 13

Slide 13 text

コンテナのセキュリティ問題(1) →解決策  ホスト側のカーネルを使用しても、 アプリケーション側でカーネルバグを踏むと ホスト上のすべてのコンテナが停止  軽量VM上でコンテナを動作させる kata containerなどの実装がある  カーネルやコンテナサービスの脆弱性を スキャンする 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 13

Slide 14

Slide 14 text

コンテナのセキュリティ問題(2)  コンテナに含まれる、ミドルウェア、ライブラリなどに 脆弱性が見つかる  カーネル、コンテナサービス自体の脆弱性が見つかる  ゼロデイ攻撃 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 14

Slide 15

Slide 15 text

コンテナのセキュリティ問題(2) →解決策  コンテナに含まれる、ミドルウェア、ライブラリなどに 脆弱性が見つかる  カーネル、コンテナサービス自体の脆弱性が見つかる  ゼロデイ攻撃  コンテナイメージの脆弱性スキャン、修正  実行中のコンテナのアップデート  コンテナホストの脆弱性スキャン 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 15

Slide 16

Slide 16 text

コンテナのセキュリティ問題(3)  マルウェアの被害  長期稼働時の意図しない動作 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 16

Slide 17

Slide 17 text

コンテナのセキュリティ問題(3) →解決策  マルウェアの被害  長期稼働時の意図しない動作  動作中のコンテナのランタイム制御 不要なプロセス実行の禁止 動作中にコピーされた実行形式の実行停止  コンテナ動作時間の制限  定期的なローリングアップデート  定期的なコンテナホストのアップデート 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 17

Slide 18

Slide 18 text

コンテナのセキュリティ問題(4)  1つのk8sコントローラで、関連しないサービスを 複数動作 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 18

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

コンテナの脆弱性スキャン  コンテナホストに対する脆弱性スキャン  コンテナイメージに対する脆弱性スキャン  コンテナのレイヤ単位でスキャンが可能  実行中にコンテナに対する脆弱性スキャン  パッケージベースでCVN/JVN情報を元にスキャンを実施  対応OSが限られる(Debian, alpine, RHEL系など)  言語の使用パッケージまで確認するツールもある 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 20

Slide 21

Slide 21 text

脆弱性スキャンツール(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プロジェクトにジョイン 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 21

Slide 22

Slide 22 text

脆弱性スキャンツール(OSS) その2  trivy(https://github.com/aquasecurity/trivy)  イメージの静的スキャン  Aqua Securityに買収されたが、OSSで公開  Vuls(https://github.com/future-architect/vuls)  複数ホスト(コンテナホスト、コンテナ)の静的・動的 脆弱性スキャン可能  稼働中のコンテナの脆弱性チェック可能  Wazuh(https://wazuh.com)  脆弱性検知、侵入検知、ファイル変更・インジェクション検知  統合的にコンテナのセキュリティを確保 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 22

Slide 23

Slide 23 text

コンテナイメージの脆弱性スキャン  スキャンにより脆弱性が見つかった場合  ベースイメージ、パッケージ、使用ライブラリの更新  イメージの再作成→脆弱性検査  新コンテナイメージのデプロイ  ローリングアップデート  カナリアデプロイ  ブルー/グリーンデプロイ  脆弱性は日々発見される 定期的に脆弱性スキャン実施する必要がある 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 23

Slide 24

Slide 24 text

ランタイム監視  静的スキャンだけでは、日々更新される脆弱性による ゼロデイ攻撃に対応できない  ランタイム監視=実行中のコンテナの監視  ランタイム監視に求められること  実行中コンテナの脆弱性検知  実行中コンテナのファイルインジェクションの検知  コンテナ内の実行可能・不可能なファイルの設定  コンテナ間・コンテナ外への不正な通信の禁止 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 24

Slide 25

Slide 25 text

アプリケーションの脆弱性  アプリケーションの脆弱性  SQLインジェクション  CSR/CSRF  ファイルのインジェクション  コマンド実行  アプリケーション脆弱性の対応  アプリケーションで使用するライブラリは、最新のものを選択  脆弱性を意識したアプリケーション開発  ペネトレーションテストの実施 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 25

Slide 26

Slide 26 text

コンテナをセキュアに 運用するためには

Slide 27

Slide 27 text

セキュリティはプロセス  コンテナホスト自体の脆弱性チェック  定期的なイメージ再作成  イメージ検査  テスト(アプリケーション、ペネトレーション、負荷など)  デプロイ  未知のマルウェア、インジェクションなどへの対応  コンテナの寿命を短くする  ランタイム監視の実施  障害発生時のエスカレーション 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 27

Slide 28

Slide 28 text

DevSecOpsの実践  一貫した開発・セキュリティ・運用が必要  シフトレフト  バグを運用でカバーすると高コスト  バグを開発で出し切る  運用、セキュリティコストの削減  DevSecOpsの自動化  CI/CDの考え方の導入+セキュアな考え方 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 28

Slide 29

Slide 29 text

Development  ベースOSの選定  言語、ライブラリ、パッケージの選定  セキュリティ基準に則った開発  アプリケーションの静的解析  ペネトレーションテスト 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 29

Slide 30

Slide 30 text

Security  セキュリティ基準の策定  CIS  HIPS  NIST  PCI DSS  DevとOpsに対するセキュリティ対策支援  開発のセキュリティ基準  コンテナセキュリティの方針決定 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 30

Slide 31

Slide 31 text

Operations  イメージアップデート  定期的なデプロイ  定期的な脆弱性スキャン  障害監視  障害検知時のエスカレーション 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 31

Slide 32

Slide 32 text

CI/CDツールと 脆弱性スキャンの組み合わせ  CI/CDツール  Gitlab  Jenkins  Circle CI  Travis CI  コンテナイメージ作成時後に静的脆弱性スキャン 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 32

Slide 33

Slide 33 text

ルーチンワークは自動化する  CI/CDツールで出来ることは自動化する  アプリケーション静的解析  コンテナイメージの静的脆弱性スキャン  コンテナ群へのペネトレーションテスト  デプロイ  リリース中のコンテナイメージに対する脆弱性スキャン  Wazuhなど、脆弱性検査及び監視を行うツールもある 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 33

Slide 34

Slide 34 text

人間は、人間に出来ることだけ行う  コード、テストの作成  レヴュー  セキュリティ設計  リリースのOK/NG  インシデント発生時の対応 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 34

Slide 35

Slide 35 text

セキュリティよく分からない! という人向けのおまけ

Slide 36

Slide 36 text

セキュリティよくわからない  自分で学ぶ  時間的コストが高い  金で解決する  セキュリティに強い人材を確保・育成する  セキュリティコンサルタントを雇う  商用のコンテナセキュリティツールを使う 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 36

Slide 37

Slide 37 text

商用コンテナセキュリティ製品(1)  Aqua Cloudnaitive Security Platform (https://www.aquasec.com)  イメージスキャン、ランタイムスキャン、監視、L3FW  日本販社あり  NeuVector(https://neuvector.com/)  イメージスキャン、ランタイムスキャン、監視、L7FW  日本販社あり 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 37

Slide 38

Slide 38 text

商用コンテナセキュリティ製品(2)  sysdig (https://sysdig.com)  イメージスキャン、ランタイムスキャン、監視  日本販社あり  Tufin Iris/Orca(https://www.tufin.com/ja)  イメージスキャン、ランタイムスキャン、監視、FW  日本販社あり  twistlock(https://www.twistlock.com)  イメージスキャン、ランタイムスキャン、監視、FW  日本販社あり  最近パロアルトに買収され、Prismaに統合される模様 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 38

Slide 39

Slide 39 text

最後に  この資料は、コンテナのセキュリティを考える為のきっかけ  オンプレミス・IaaSとコンテナのセキュリティには、 違う部分があります  自分で答えを見つけよう 2020-02-22 OSC 2020 Tokyo/Spring #osc20tk 39