コンテナ実用化が進む中、セキュアに運用することは忘れ去られがちです。 この資料は、コンテナをセキュアに運用するときに考慮する事項を説明しています。コンテナセキュリティのキッカケとなれば幸いです。
myzkstr.comみやざきさとるコンテナのセキュリティについて考えよう
View Slide
myzkstr.comみやざきさとる宮﨑悟[email protected]@s_miyazasatoru.miyazaki.31 好きなOS:Solaris 好きなファイルシステム:ZFS 好きな仮想化:Solaris Zone フリーランスのエンジニア 北海道函館市からリモートワーク 主な仕事 某WordPress仮想マシン コンテナセキュリティ製品評価 技術コラム掲載
アジェンダ今日話すこと: コンテナの現状 コンテナセキュリティとは コンテナをセキュアに運用するためには今日話さないこと: コンテナセキュリティ製品の詳細2019-10-10OSC 0219 Enterprise #osc19ep 3
本資料でのコンテナの定義 本資料では、コンテナ=アプリケーションコンテナとする アプリケーションコンテナ=Docker(もしくはDocker互換のアプリケーションコンテナ)を想定 コンテナのオーケストレーションサービスとしてkubernetes(以下k8s)とDocker Swarmを想定2019-10-10OSC 0219 Enterprise #osc19ep 4
コンテナの現状
コンテナとは Dockerは、cgroupとLinux User Namespaceでリソース(プロセス、ネットワーク、ボリューム)を分離 恒久的なディスク領域、仮想ネットワーク、仮想ブリッジなどはコンテナデーモンが作成 コンテナはカーネルを持たない コンテナ内の処理はsystem callを使用し、コンテナホスト上のカーネルで処理コンテナホストOS/カーネルコンテナプロセスコンテナプロセスsystemcallsystemcallvol1 veth1 veth2 vol2コンテナデーモンブリッジ2019-10-10OSC 0219 Enterprise #osc19ep 6
コンテナ上のアプリケーションコンテナホストOS/カーネルコンテナデーモン特権ユーザアプリケーション非特権ユーザアプリケーション非特権ユーザコンテナ1コンテナ2 1コンテナで1サービスのみ動作することを推奨 コンテナには、アプリケーション、ライブラリ、アプリケーションに必要なファイルのみを配置することを推奨 コンテナ内のプロセスは、非特権ユーザ(rootユーザ以外)で動作することを推奨 ホストからはコンテナのプロセスを見ることが可能 コンテナから、コンテナホストや他コンテナのプロセスを見ることは不可2019-10-10OSC 0219 Enterprise #osc19ep 7
コンテナ上のネットワーク コンテナとコンテナホストのネットワークは、仮想ブリッジ通信 Docker Swarmでは、ノード間通信をTLSで暗号化 k8sでは、幾つかのCNI Networkプロバイダを使用可能 k8sでは、VxLANやTLSによってホスト間の通信を暗号化可能 外部からは必要なポートのみをポートフォワードによって接続ホスト1node間接続TLSVxLANホスト2LBサービスサービスサービスサービスサービスサービスサービス2019-10-10OSC 0219 Enterprise #osc19ep 8
コンテナイメージ コンテナはイメージという形で配布される イメージはレイヤ構造で構成される Docker Official Imageなどの安全なベースイメージを元に構成可能 必要なミドルウェア、アプリケーションを積み重ねてイメージを作成ContainerApplication LayerMiddleware LayerBase OS Layer2019-10-10OSC 0219 Enterprise #osc19ep 9
コンテナセキュリティとは
コンテナはセキュア? コンテナを非特権ユーザで動作させる=コンテナホスト上で非特権ユーザでプロセスが動作する コンテナ内で1アプリケーションのみ動作させ、アプリケーションに必要なファイルのみ配置する=コンテナ内で余計なプロセスを動作させない 複数のコンテナやコンテナホスト間をつなぐネットワークは、分離もしくは暗号化されている 外部からの通信は必要なポートのみ接続される2019-10-10OSC 0219 Enterprise #osc19ep 11
コンテナのセキュリティ問題(1) ホスト側のカーネルを使用しても、アプリケーション側でカーネルバグを踏むとホスト上のすべてのコンテナが停止2019-10-10OSC 0219 Enterprise #osc19ep 12
コンテナのセキュリティ問題(1)→解決策 ホスト側のカーネルを使用しても、アプリケーション側でカーネルバグを踏むとホスト上のすべてのコンテナが停止 軽量VM上でコンテナを動作させるkata containerなどの実装がある カーネルやコンテナサービスの脆弱性をスキャンする2019-10-10OSC 0219 Enterprise #osc19ep 13
コンテナのセキュリティ問題(2) コンテナに含まれる、ミドルウェア、ライブラリなどに脆弱性が見つかる カーネル、コンテナサービス自体の脆弱性が見つかる ゼロデイ攻撃2019-10-10OSC 0219 Enterprise #osc19ep 14
コンテナのセキュリティ問題(2)→解決策 コンテナに含まれる、ミドルウェア、ライブラリなどに脆弱性が見つかる カーネル、コンテナサービス自体の脆弱性が見つかる ゼロデイ攻撃 コンテナイメージの脆弱性スキャン、修正 実行中のコンテナのアップデート コンテナホストの脆弱性スキャン2019-10-10OSC 0219 Enterprise #osc19ep 15
コンテナのセキュリティ問題(3) マルウェアの被害 長期稼働時の意図しない動作2019-10-10OSC 0219 Enterprise #osc19ep 16
コンテナのセキュリティ問題(3)→解決策 マルウェアの被害 長期稼働時の意図しない動作 動作中のコンテナのランタイム制御不要なプロセス実行の禁止動作中にコピーされた実行形式の実行停止 コンテナ動作時間の制限 定期的なローリングアップデート 定期的なコンテナホストのアップデート2019-10-10OSC 0219 Enterprise #osc19ep 17
コンテナのセキュリティ問題(4) 1つのk8sコントローラで、関連しないサービスを複数動作2019-10-10OSC 0219 Enterprise #osc19ep 18
コンテナのセキュリティ問題(4)→解決策 1つのk8sコントローラで、関連しないサービスを複数動作 ノード間ネットワークは暗号化されていても、個々のネットワークブリッジ通信は暗号化されていない サービス間でネットワークを分離するにはk8sコントローラを分離する2019-10-10OSC 0219 Enterprise #osc19ep 19
コンテナの脆弱性スキャン コンテナホストに対する脆弱性スキャン コンテナイメージに対する脆弱性スキャン コンテナのレイヤ単位でスキャンが可能 実行中にコンテナに対する脆弱性スキャン パッケージベースでCVN/JVN情報を元にスキャンを実施 対応OSが限られる(Debian, alpine, RHEL系など) 言語の使用パッケージまで確認するツールもある2019-10-10OSC 0219 Enterprise #osc19ep 20
脆弱性スキャンツール(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-10OSC 0219 Enterprise #osc19ep 21
脆弱性スキャンツール(OSS) その2 trivy(https://github.com/aquasecurity/trivy) イメージの静的スキャン Aqua Securityに買収されたが、OSSで公開 Vuls(https://github.com/future-architect/vuls) 複数ホスト(コンテナホスト、コンテナ)の脆弱性スキャン可能 稼働中のコンテナの脆弱性チェック可能 Wazuh(https://wazuh.com) 脆弱性検知、侵入検知、ファイル変更・インジェクション検知 統合的にコンテナのセキュリティを確保2019-10-10OSC 0219 Enterprise #osc19ep 22
コンテナイメージの脆弱性スキャン スキャンにより脆弱性が見つかった場合 ベースイメージ、パッケージ、使用ライブラリの更新 イメージの再作成→脆弱性検査 新コンテナイメージのデプロイ ローリングアップデート カナリアデプロイ ブルー/グリーンデプロイ 脆弱性は日々発見される定期的に脆弱性スキャン実施する必要がある2019-10-10OSC 0219 Enterprise #osc19ep 23
ランタイム監視 静的スキャンだけでは、日々更新される脆弱性によるゼロデイ攻撃に対応できない ランタイム監視=実行中のコンテナの監視 ランタイム監視に求められること 実行中コンテナの脆弱性検知 実行中コンテナのファイルインジェクションの検知 コンテナ内の実行可能・不可能なファイルの設定 コンテナ間・コンテナ外への不正な通信の禁止2019-10-10OSC 0219 Enterprise #osc19ep 24
アプリケーションの脆弱性 アプリケーションの脆弱性 SQLインジェクション CSR/CSRF ファイルのインジェクション コマンド実行 アプリケーション脆弱性の対応 アプリケーションで使用するライブラリは、最新のものを選択 脆弱性を意識したアプリケーション開発 ペネトレーションテストの実施2019-10-10OSC 0219 Enterprise #osc19ep 25
コンテナをセキュアに運用するためには
セキュリティはプロセス コンテナホスト自体の脆弱性チェック 定期的なイメージ再作成 イメージ検査 テスト(アプリケーション、ペネトレーション、負荷など) デプロイ 未知のマルウェア、インジェクションなどへの対応 コンテナの寿命を短くする ランタイム監視の実施 障害発生時のエスカレーション2019-10-10OSC 0219 Enterprise #osc19ep 27
DevSecOpsの実践 一貫した開発・セキュリティ・運用が必要 シフトレフト バグを運用でカバーすると高コスト バグを開発で出し切る 運用、セキュリティコストの削減 DevSecOpsの自動化 CI/CDの考え方の導入+セキュアな考え方2019-10-10OSC 0219 Enterprise #osc19ep 28
Development ベースOSの選定 言語、ライブラリ、パッケージの選定 セキュリティ基準に則った開発 アプリケーションの静的解析 ペネトレーションテスト2019-10-10OSC 0219 Enterprise #osc19ep 29
Security セキュリティ基準の策定 CIS HIPS NIST PCI DSS DevとOpsに対するセキュリティ対策支援 開発のセキュリティ基準 コンテナセキュリティの方針決定2019-10-10OSC 0219 Enterprise #osc19ep 30
Operations イメージアップデート 定期的なデプロイ 定期的な脆弱性スキャン 障害監視 障害検知時のエスカレーション2019-10-10OSC 0219 Enterprise #osc19ep 31
CI/CDツールと脆弱性スキャンの組み合わせ CI/CDツール Gitlab Jenkins Circle CI Travis CI コンテナイメージ作成時後に静的脆弱性スキャン2019-10-10OSC 0219 Enterprise #osc19ep 32
ルーチンワークは自動化する CI/CDツールで出来ることは自動化する アプリケーション静的解析 コンテナイメージの静的脆弱性スキャン コンテナ群へのペネトレーションテスト デプロイ リリース中のコンテナイメージに対する脆弱性スキャン Wazuhなど、脆弱性検査及び監視を行うツールもある2019-10-10OSC 0219 Enterprise #osc19ep 33
人間は、人間に出来ることだけ行う コード、テストの作成 レヴュー セキュリティ設計 リリースのOK/NG インシデント発生時の対応2019-10-10OSC 0219 Enterprise #osc19ep 34
セキュリティよく分からない!という人向けのおまけ
セキュリティよくわからない 自分で学ぶ 時間的コストが高い 金で解決する セキュリティに強い人材を確保・育成する セキュリティコンサルタントを雇う 商用のコンテナセキュリティツールを使う2019-10-10OSC 0219 Enterprise #osc19ep 36
商用コンテナセキュリティ製品(1) Aqua Cloudnaitive Security Platform(https://www.aquasec.com) イメージスキャン、ランタイムスキャン、監視、L3FW 日本販社あり NeuVector(https://neuvector.com/) イメージスキャン、ランタイムスキャン、監視、L7FW 日本販社あり2019-10-10OSC 0219 Enterprise #osc19ep 37
商用コンテナセキュリティ製品(2) sysdig (https://sysdig.com) イメージスキャン、ランタイムスキャン、監視 日本販社あり Tufin Iris/Orca(https://www.tufin.com/ja) イメージスキャン、ランタイムスキャン、監視、FW 日本販社あり twistlock(https://www.twistlock.com) イメージスキャン、ランタイムスキャン、監視、FW 日本販社あり 最近パロアルトに買収され、Prismaに統合される模様2019-10-10OSC 0219 Enterprise #osc19ep 38
最後に この資料は、コンテナのセキュリティを考える為のきっかけ オンプレミス・IaaSとコンテナのセキュリティには、違う部分があります 自分で答えを見つけよう2019-10-10OSC 0219 Enterprise #osc19ep 39