概要説明
Composer2.4リリースにより、新しいauditコマンドが追加され、Composerパッケージの脆弱性チェックがいままでより便利になりました。
そして脆弱性チェックを毎日自動実行し、結果を通知することで脆弱性の対応が素早くできます。
今回はPHPのライブラリ管理ツール「Composer」について、既知のセキュリティ脆弱性をチェックするauditコマンドを紹介し、CodeBuildを利用し毎日チェック結果をslackに通知する方法を共有したいと思います。
auditコマンド
Packagist.orgのapiに従って、脆弱性をチェックし、リストアップします。
成功した場合は0、そうでない場合は最大255件まで結果として返します。
auditコマンドは3つのオプションがあります。
- --no-dev:require-devパッケージはチェックしない
- --format (-f):出力の形式を指定できます。デフォルトはtable、「plain」、「json」、「summary」も指定できます。
- --locked: vendorフォルダの内容に関係なく、ロックファイルからパッケージをチェックします。
コード参考情報
Composerドキュメント
auditコマンドを実行してみる
環境は以下になります
PHP 8.0.8
Composer 2.5.2
laravel-admin 1.8
実行結果は以下になります。laravel-adminの脆弱性が1件リストされてます。
composer audit
Found 1 security vulnerability advisory affecting 1 package:
+-------------------+----------------------------------------------------------------------------------+
| Package | encore/laravel-admin |
| CVE | CVE-2023-24249 |
| Title | laravel-admin has Arbitrary File Upload vulnerability |
| URL | https://github.com/advisories/GHSA-g857-47pm-3r32 |
| Affected versions | <=1.8.19 |
| Reported at | 2023-02-27T21:30:30+00:00 |
+-------------------+----------------------------------------------------------------------------------+
脆弱性がない場合の実行結果はこのように
No security vulnerability advisories found
CodeBuild
CodeBuildの全体的な設定は省きます。buildspecファイル、通知設定を紹介いきたいと思います。
buildspecファイル
buildspec.ymlファイルを作成し、ルートディレクトリ直下におきます。
これでbuildフェーズ中にcomposer auditコマンドが実行されます。
version: 0.2
phases:
install:
runtime-versions:
php: 8.0
build:
commands:
- composer audit
コード参考情報
CodeBuildドキュメント
毎日ビルドの自動実行
ビルドプロジェクトの画面にて、トリガー作成を進みます。
トリガー作成画面では、トリガーの名称や頻度などを選べます。
頻度は毎時、毎日、毎週、カスタムを設定できます。こちらはカスタムのcron式にしました。毎日14時の実行になります。
slackへの通知設定
ビルドプロジェクトの設定画面から通知ルールの作成ができます。
通知をトリガーするイベントはビルド成功と失敗時にします。
composer auditコマンドがCodebuildでの実行結果について
- 脆弱性が検知された時はCodeBuildのbuild stateがFAILEDになります。
- 脆弱性がない時はCodeBuildのbuild stateがSUCCEEDEDになります。
最後通知するターゲットについて、AWS Chatbot(Slack)にします。
Chatbotの設定について省きますが、設定が済んでいれば、ChatbotがサポートしているAWSサービスから簡単にslackへの通知ができます。
結果確認
最後にSlackへの通知結果を確認しましょう。
- Codebuild失敗の通知がくる時(脆弱性が検知された時)
通知のリンクからビルドログを確認することで、検知された脆弱性の詳細を把握できます。
- Codebuild成功の通知がくる時(脆弱性がない時)
まとめ
composer auditコマンドの登場により、Composerパッケージの脆弱性チェックが簡単になりました。
Codebuildなど自動ビルドを工夫することで、脆弱性チェックと結果通知を自動化することができます。