Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

コンテナセキュリティを如何に実現するか、今なにができるかについて考えましょう。

Satoru MIYAZAKI

April 25, 2020
Tweet

More Decks by Satoru MIYAZAKI

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. コンテナの現状

    View Slide

  6. コンテナとは
     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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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プロジェクトにジョイン
    2020-02-22
    OSC 2020 Tokyo/Spring #osc20tk 21

    View Slide

  22. 脆弱性スキャンツール(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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. 商用コンテナセキュリティ製品(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

    View Slide

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

    View Slide