コンテナセキュリティでまず気を付けたい４箇所

# コンテナセキュリティで気をつける4箇所
コンテナ環境へのセキュリティ対策は何処に対して気を付ければいいのか
コンテナ環境への攻撃例や対策について知ってみたい
といった疑問や興味をお持ちの方へ
今回は、コンテナセキュリティでまず気を付けたい4箇所についてまとめたので紹介します。

## 目次
- ### コンテナについて軽く説明
- ### コンテナセキュリティで気をつけたいこと
- ### まとめ
- #### 参考にした情報  

### コンテナについて軽く説明
最初にコンテナ技術について知らない方に向けてコンテナとは何かについて説明します。



#### 1．語源のコンテナについて
　以下の写真の船に積まれている四角い箱がコンテナです。
 　写真では船ですが、鉄道・自動車の様に異なる輸送手段間で積み替えが簡単に行えます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931022/a69934e8-c673-9481-8019-76435d8a3199.png">


#### 2．ITで言うコンテナの構成例について紹介
　物理マシンの構成はイメージの補助（ノートPC等身近な例）として記載してます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931022/5a263f3f-a7a9-b33a-770d-7f7ce7410aab.png)

コンテナ型仮想化とは、ホストOS上で「コンテナ」といわれるアプリケーションの実行環境を構築できる仮想化技術の１つの事です。
コンテナ（図のミドルウェアとアプリ）はアプリを実行する環境をパッケージ化したものです。
コンテナ部分を実行するのにコンテナエンジン（Docker等）が必要となります。


#### 3．コンテナを使うメリット
以下の様なメリットがあります
・コンテナの実行環境があればアプリが起動出来る為 異なる環境への移動がスムーズ
・コンテナ部分にOSが無い為 アプリの起動時間や処理が短縮できる
・コンテナ部分を複数起動できる為 バックアップが容易

<!-- 　Doccer のアイコンと船の写真
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931022/0ca334da-4750-356f-9ef5-1e11d6d0b200.png">|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931022/a69934e8-c673-9481-8019-76435d8a3199.png">|
|---|---|
|Dockerアイコン|コンテナ船の写真|
　　　　　　　　　　　
１．アプリを動かす為に必要なものをひとまとめにできる仕組み
２．コンテナ管理ソフト上でどこでも起動できる
３．【絵を自作予定】コンテナの攻撃ベクトルが分かる図（コンテナがどの様に配置されるか）
絵にある個所の4箇所について下記で説明をする
:::
-->


### コンテナセキュリティで気をつける4箇所
それでは、コンテナセキュリティでまず気を付けたい４箇所を紹介します

:::note warn
コンテナ特有の内容を対象としてます
:::
* ### ①イメージをビルドする為のマシン
* ### ②コンテナイメージ
* ### ③コンテナ内のアプリケーション
* ### ④コンテナネットワーク

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931022/c269353d-4684-d0bf-79dc-5126daf3f9ab.png)

順に確認していきます。
各内容にはイメージとして影響と対策を書いてます。

#### ①イメージをビルドする為のマシン
イメージをビルドするためのマシンに攻撃者が侵入した場合、
Docker Desktopの様なDocker環境を構築できるツールやコンテナ化したワークロードのデプロイやスケーリング管理ができるコンテナオーケストレーションプラットフォーム（Kubernetesなど）を操作する事でコンテナの構築方法を変更したり、悪意のあるコードを挿入する事で本番環境上のコンテナにバックドアを仕込むことも可能です。
上記に加え、監査ログにユーザのIDでなくデーモンプロセスのIDが記録される事から、コード挿入した者の特定が困難になるという情報もあります。
参考記事：[Podman: A more secure way to run containers](https://opensource.com/article/18/10/podman-more-secure-way-run-containers)

対策としては、ビルドする為の環境へのアクセス制御、脆弱性管理、非特権ビルドを行えるツール（BuildKit,podman）を利用する等があります。

:::note info
アクセス制御は、認証・認可・監査だけでなく、最小特権の原則等のセキュリティ対策を含んだ表現として書いてます
:::


#### ②コンテナイメージ
環境構築の手間を省くため、身元不明のコンテナイメージをダウンロードし使用した場合、
マルウェアが混入していたり、コンテナイメージに必要以上の権限の設定やネットワーク設定の不備により環境内の他のコンテナまたはホストを攻撃されたり、ネットワークリスクが発生したりします。
含まれている全てのコンポーネントが最新の状態であってもリスクのある状態となる危険性があります。

対策としては、発行元が検証されたイメージのみ使用や不審な動作を検知する為のツールを導入する等があります。
筆者の選ぶおすすめのツール：[MetricFire](https://www.metricfire.com/japan/)


#### ③コンテナ内のアプリケーション
作成時から日が経った状態のコンテナイメージを使用した場合、コンテナイメージが作成時の内容から変わらない為イメージに含まれるアプリケーションはバージョンが古い（脆弱性のある）状態でデプロイされます。

対策としては、コンテナイメージスキャンツールを使用し、例えば以下のタイミングで定期スキャンをする等があります。
　・CI/CDパイプラインに合わせてソースコードリポジトリにpushする前
　・コンテナイメージビルド直後にスキャン
　・イメージがビルドされた後

筆者の選ぶおすすめのツール1：[Jfrog xray](https://jfrog.com/ja/xray/)
筆者の選ぶおすすめのツール2(オープンソース)：[Trivy](https://aquasecurity.github.io/trivy/v0.48/)


#### ④コンテナネットワーク
コンテナでは、他のコンテナや別のホスト、システムとの通信等があります。
コンテナへのインバウンド/アウトバンド通信を整理し、アクセス制御を正しく行う事で外部からの不正アクセス、内部に侵入された際の被害の最小化、内部からの情報漏洩について対策が必要です。


### まとめ
今回は、コンテナセキュリティでまず気を付けたい部分を4箇所お伝えしました。
筆者はコンテナセキュリティは通常よりも堅牢なイメージを持っていましたが調査してみると
意外と注意するポイントが多いなと感じました。
更に詳しく確認したい方は、以下のコンテナセキュリティガイドを確認してください。

***
参考にした情報
参考1：[NIST Special Publication 800-190 アプリケーションコンテナセキュリティガイド](https://www.ipa.go.jp/security/reports/oversea/nist/ug65p90000019cp4-att/000085279.pdf)
参考2：[コンテナセキュリティ Liz Rice著](https://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BF%9D%E8%AD%B7%E3%81%99%E3%82%8B%E8%A6%81%E7%B4%A0%E6%8A%80%E8%A1%93-Liz-Rice-ebook/dp/B0C337PM5C/ref=sr_1_1?adgrpid=147094054246&hvadid=656325630237&hvdev=c&hvlocphy=1009311&hvnetw=g&hvqmt=e&hvrand=9325562948184203874&hvtargid=kwd-2021586889885&hydadcr=14089_13515349&jp-ad-ap=0&keywords=%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3+%E6%9C%AC&qid=1702230900&sr=8-1)
参考3：[コンテナ型仮想化とは、クラウド展開に便利な進化中の仮想化技術](https://insights-jp.arcserve.com/container-virtualization)