こんにちは!オルターブースしんばです。
本日はGitHubにあるセキュリティ機能「GitHub Advanced Security」の全容をご紹介したいと思います!
GitHub Advanced Securityとは?
GitHub Advanced Security (GHAS: ギャス) とは、GitHubが提供するセキュリティ機能群の総称です。
GHASには大きく3つのカテゴリーに分けられるセキュリティ機能があります。
GHASはすべてのパブリックリポジトリ、GitHub Enterpriseで管理されているプライベートリポジトリで有効化できます。
GHASの機能
大きく分けて、下記の3つの機能があります。
- Code Scanning
- Secret Scanning
- Dependency Management
1. Code Scanning
Code Scanningはコードをスキャンし、アプリケーション/コードに隠された潜在的な脆弱性またはエラーを発見します。例えばSQLインジェクションされる可能性のあるコードを検知できます。
yamlファイルを定義することにより、スキャンをするタイミングを指定できます。
例えば、下記のようなタイミングを指定できます。
- 特定の曜日、時間
- リポジトリにコードがPushされたとき
- プルリクエストが作成されたとき
プルリクエストチェックとして設定をすると、プルリクエストの度にスキャンされ、Pull Request
タブ内のCheck
タブにスキャン結果が表示されるようになります。Code Scanningでスキャンする際のルールDBとして、GitHubはCodeQL
というものを用意しています。
CodeQL
はクリティカルな脆弱性やエラーを収集したDBです。このDBとリポジトリにPushされたコードを比較することで潜在的な脆弱性・エラーを照合します。CodeQL
の特徴は、「クリティカルな脆弱性・エラーを検知・通知することが開発者の豊かな開発サイクルサポートできる」という理念のもと作られている点です。「すべてのエラーを網羅的に検知する」ことを目的としたパッケージではない、ということです。
Code ScanningではCodeQL
以外にもサードパーティ製のパッケージがあり、例えばLintツールなども用意されています。
Code ScanningはGitHub Actionsを使って実行されます。
2. Secret Scanning
Secret Scanningはコードをスキャンし、コードに他社サービスのシークレット情報が記載されていないかチェックします。
Secret Scanningには大きく3つの機能があります。
- Secret Scanning for Partner
- Secret Scanning for User
- Push Protection
Secret Scanning for Partner
パブリック、プライベートすべてのリポジトリに強制的に有効化されている機能です。機能をOFFにすることはできず、通常のユーザーは意識しないかもしれません。
この機能は、コードにシークレット情報が記載されていることをGitHubが検知した際に、GitHubから該当サービスに対し情報の漏洩を通知するシステムとなっています。これにより、該当サービスベンダーは漏洩したシークレットを保護するためのアクションを起こすことができます。Secret Scanning for PartnerにおいてGitHubからはあくまで通知がされるのみで、どのように対処するかは該当サービスベンダーに委ねられています。
Secret Scanning for User
こちらは、上記のfor Partnerがシークレット漏洩を該当サービスベンダーに強制通知するのに対し、リポジトリで設定されたユーザーにも通知する任意の機能となっています。デフォルトでadministratorとownerに通知されます。プライベートリポジトリで利用するためにはGitHub Enterpriseで管理されているリポジトリである必要があります。
Push Protection
こちらは、シークレットがリポジトリにPushされるのを未然に防ぐ機能です。この機能がONの状態ではPushを試みる度にSecret Scanningされます。もしもコード内にシークレット情報の記載が確認された場合はPushが失敗します。こちらのPush Protectionは、GitHub Enterpriseで管理されているリポジトリで有効化できます。
3. Dependency Management
依存関係をチェックする機能です。
リポジトリにPushされているアプリケーションで使用されているライブラリ(依存関係)をチェックし、脆弱性やエラーを通知することができます。更新推奨の依存関係も通知できます。
依存関係についてはThe GitHub Advisory DatabaseというGitHubが有するフォーラムのような場所でディスカッションされています。(The National Vulnerability Databaseに基づいています)
まとめ
以上、GitHubがDeveloper Experience
を向上させることを強く意識したプラットフォームとなっているのがよく分かるセキュリティサポート群のご紹介でした!
特に、アプリケーションにクリティカルなエラーだけを検知することで開発に専念できるようなCodeQLの設計などにはその理念に感心しました。エラー検知数が多ければ多いほど、「どのエラーから修正するのか?」「そのエラーはいま解決すべきなのか?」など、開発以外の業務が増えてしまい、開発時間が減ってしまうことが懸念されます。
今後はCopilotなどを使って開発をしていれば、コーディング中にもセキュリティに関する事項をアドバイスもらえたりするようになるのかもしれませんね。
オルターブースが提供するGitHub Enterpriseソリューション
GitHub Enterprise Cloud | 株式会社オルターブース(Alterbooth)