はじめに
コンテナのセキュリティの勉強のために読みました。読んだ本の要約を行うことで内容の理解を深めることを目的としています。
今回読んだ本
基礎から学ぶコンテナセキュリティ――Dockerを通して理解するコンテナの攻撃例と対策
著者:森田 浩平
発売日:2023/7/27
出版社:技術評論社
要約
1章「コンテナ型仮想化とは」
- サーバー仮想化(VM)はOSを仮想化して実行する。起動が遅いが,分離レベルが強い。
- コンテナ型仮想化はホストOSの上で,コンテナ単位で独立したアプリケーションを実行する。起動が早いが,分離レベルが弱い。
- Dockerはクライアント/サーバーモデルを採用しており,次のような流れで処理を行う。dockerクライアント -> UNIXドメインソケットorTCP通信 -> Dockerデーモン(dockerd -> containerd -> runc)
- 高レイヤランタイムはイメージの取得やネットワークの管理,低レイヤランタイムへの通信などを行う
- 低レイヤランタイムはコンテナの作成を行う。
2章「コンテナの仕組みと要素技術」
- コンテナイメージは,ファイルシステムに対する変更の差分をレイヤとしてまとめたもの
- コンテナはLinuxカーネルが持つ複数の隔離技術で作られる。
- ケーパビリティは
3章「コンテナへの主要な攻撃ルート」
- アプリケーションへの攻撃,コンテナランタイムへの攻撃,レジストリへの攻撃など様々なアタックサーフェスがある。
- 外部からTCPで操作できるDocker APIに適切な認証が設定されていない場合,そこを起点にされる。
- runcなどのコンテナランタイム自体の脆弱性を悪用して,コンテナエスケープを起こす攻撃。
- ケーパビリティの設定不備による攻撃。
- cgroupなどでのリソースコントロールが十分ではないときの,コンテナ側からホストを巻き込んだ攻撃。
- コンテナに含まれるソフトウェアが古いとき,その脆弱性をついた攻撃。
4章「堅牢なコンテナイメージを作る」
- コンテナイメージのための脆弱性スキャンツールとして,Trivy, Clair, Grypeなどがある。
- Trivyはアプリケーションの依存ライブラリの脆弱性も検出できる。多機能で誤検知も少ない。
- ClairはREST APIを通してスキャンを実行,結果を取得する。
- docker build --secretを使って,レイヤに残さず安全にビルドすることができる。
- Docker Content Trustによって,イメージのデジタル著名をし,利用者が検証できる。
- Dockerfileでrootユーザーを使用しない
- コンテナレジストリでは,オフィシャルイメージなどの信頼できるイメージを利用する。
5章「コンテナランタイムをセキュアに運用する」
- 余分なケーパビリティの削除。
- docker-slimでSeccompプロファイルの自動生成ができる。
- cpu,メモリ,ストレージの制限。
- User Namespaceを利用することで,ホストとは別で独立したUID/GIDをNamespace内で持てるようになる。
- ランタイムを非rootで動かせるRootlessモードを使う。
- gVisor,Sysbox,Kata Containers等の分離レベルが強力なコンテナランタイムを利用する。
- CIS Benchmark,OWASP Docker Security Cheatsheet等でまとめられているコンテナのセキュリティベストプラクティスを確認する。
6章「セキュアなコンテナ環境の構築」
- 攻撃検知や被害範囲特定のために,ログやモニター監視が必要。
- Dockerでは,/var/lib/docker/contaiiners配下に標準出力,標準エラー出力を出力する。
- ホスト側でデーモンとしてログ収集ソフトを動作させることでコンテナのログを収集する。
- docker events,Dockerプラグイン,Sysdig/Falcoによるコンテナの実行ログの取得。
- Sysdig/Falcoでは,プロセス起動の検知やシステムコールの監視,ファイルへの書き込み検知,外部ネットワーク接続の検知等もできる。
- コンテナエスケープに備えて,ホスト側の監視も大切。
おわりに
この記事はあくまで,本書に書かれている内容を私なりにかみ砕いて要約したものになります。実際の書籍には,もっとたくさんのことが書かれていますし,ソースコードによる詳しい説明や,Columnでの豆知識など非常に読み応えのあるものとなっています