こんにちは、島村です。
夏ですね。
季節問わず、月1くらいのページでテントサウナを川でやっているのですが、真冬シーズン以外は
ほとんどと言っていいくらいにブヨに確実に刺されています。
ブヨに刺されると蚊とは次元の違う痒みが伴うので、夏に綺麗な水辺に行かれる方は気をつけてください。
さて今回は、コンテナを利用したアプリケーションを開発/運用しているケースでセキュリティの脆弱性の特定するプロセスである、ソースコードスキャンとイメージスキャンをAWSで実現するにはどうしたらいいのかというテーマでブログを書いてみたいと思います。
ソースコードスキャンとは
ソースコードスキャンとは、ソースコードをツールを利用して脆弱性やコード規約に沿って記述されているかチェックするプロセスを指します。
アプリケーションで使用しているプログラミング言語によって対応している静的解析ツールは異なってくるので開発チームごとに利用ツールが異なりそうですね。
ソースコードスキャンの代表的な機能は次の通りになります。
機能 | 内容 |
---|---|
コード品質チェック | コーディング規約に沿ってチェック |
バグ検出 | 構文エラーのチェック |
セキュリティ脆弱性の検出 | アプリケーション層の脆弱性チェック |
パフォーマンス改善 | 非効率なコードや冗長な処理の検出 |
依存関係の管理 | 未使用の依存関係の検出 |
オープンソースでは、SonarQubeが有名ですね。
イメージスキャンとは
今回取り扱うイメージスキャンはコンテナのイメージスキャンを指します。
イメージスキャンは主に、コンテナのOS が利用するシステムパッケージやシステムパッケージ、アプリケーションコードで利用するライブラリを対象にセキュリティスキャンを行い、脆弱性をチェックします。
コンテナ内で起動しているアプリケーションコードの記述などはチェックせず、あくまでアプリケーションコードが利用しているライブラリが対象ということですね。
AWS で実現するには
ざっくり、ソースコードスキャンと、イメージスキャンの違いについて記載しました。
次にソースコードスキャンとイメージスキャンをそれぞれ AWS で実現することは可能か確認したいと思います。
ソースコードスキャン
ソースコードスキャンを実現するには AWS ではCode Guru Security(プレビュー) , Code Guru Profiler,Code Guru Reviewer が該当します。
各サービスと提供する機能範囲を簡単にまとめてみます。
今回は実際にやってみませんが、今後各サービスは触ってみたいと思います。
サービス名 | コード品質チェック | バグ検出 | セキュリティ脆弱性の検出 | パフォーマンス改善 | 依存関係の管理 | 対応言語 |
---|---|---|---|---|---|---|
Code Guru Security(プレビュー) | △ | × | ◯ | × | × | Java、Python、JavaScript、TypeScript、C#、CloudFormation、Terraform、Go、Ruby |
Code Guru Profiler | × | × | × | ◯ | × | Java,Python(プレビュー) |
Code Guru Reviewer | × | ◯ | ◯ | × | × | Java,Python |
CodeGuru Detector Library で検知できる内容が公開されていますが、 Code Guru Security はプログラミング言語で定められている公式のコード規約も言語によってはチェックしてくれそうです。
ただし、自分たちの開発ルールとして定めたコード規約を定義してチェックする機能はなさそうです。
イメージスキャン
イメージスキャンは Amazon Inspector が該当します。
ECR のイメージスキャン機能がありますが、拡張スキャン機能では Amazon Inspector を利用しています。
拡張スキャンと基本スキャンの違いについて記載した弊社ブログがあるのでこちらを確認してください。
まとめ
ソースコードスキャンとイメージスキャンではチェックするコンポーネントが異なることがご理解いただけたかと思います。
コンテナを利用したアプリケーションは、コンテナという特性上様々なレイヤーが重なっているので各レイヤーの脆弱性に対して網羅的にチェックすることがセキュリティ対策となりそうです。
次回以降は今回紹介したAWSサービスを利用してみたいと思います。
いずれのサービスもCI/CDパイプラインに組み込むことができるので最終的にそこまでハンズオンを目指したいと思います。
今回は基本的な内容で締めます。
参考
https://nvlpubs.nist.gov/nistpubs/ir/2021/NIST.IR.8397.pdf snyk.io
余談
完全に余談ですが、ソースコードスキャンの中でもセキュリティの特化したプロセスをSAST(Static Application Security Testing)と呼びます。
その他にもDevSecOpsというDevOpsのプロセス内にセキュリティ要素を考慮し、各プロセスで実施するセキュリティ手法について簡単にまとめたものを記載します。
DAST(Dynamic Application Security Testing)
アプリケーション実行時にアプリケーションをスキャンするブラックボックステストを指します。
ブラックボックステストとは内部の仕様を把握しないように見立て、一般的な脆弱性を突くような振る舞いベースのテストを行います。
SAST と異なり、アプリケーションが実行されている時にテストが実行されるところが特徴的ですね。
IAST(Interactive Application Security Testing)
IAST は SAST と DAST の特徴を組み合わせたテスト方法です。
IDE プラグインを利用して、脆弱性に関する検知を受け取り特定のコードを把握/修正することが可能です。
SCA(Software Composition Analysis)
SCA はソースコードというよりも、ソースコードが利用しているオープンソースのライブラリなどコンポーネントを特定し
コンポーネントの脆弱性を特定することができます。
島村 輝 (Shimamura Hikaru) 記事一覧はコチラ
最近ECS周りをキャッチアップ中。趣味は車・バイク全般。
一応、AWS12冠です。