プロダクトセキュリティのお手伝いをしている wonda-tea-coffee です。
このたびROUTE06ではGitHub Advanced Security(以下GHAS)を導入することになりました。
👉 あわせて読みたい: 全社プロダクトのセキュリティ向上: SASTツールを選定した話
それに際してGHASとは何か、またどんな運用を予定しているのかについて社内向けに資料を作成しました。今回はその資料を社外向けに一部修正して紹介します。
GHASとは
GHASはGitHubのEnterpriseプランに追加することができるセキュリティ機能に特化したアドオンです。
以下ではGHASが備える機能について紹介します。
Code Security
GitHub上のコードの脆弱性をスキャンする機能です。
GUI操作のみで手軽に有効化できます。自前でActionsを書いてカスタムルールを作成することも可能ですが、コミュニティから提供されているデフォルトのルールで解析する分にはほとんど準備の必要はありません。
デモ
コードスキャンの結果はSARIF(Static Analysis Results Interchange Format)というオープンな仕様で定められたフォーマットでGitHub上にアップロードされます。そしてその結果はこのように確認することができます。
こちらはアラートの詳細です。
ここから直接Issue化したり、誤検知などの際にはクローズすることもできます。また、GUIからクローズしたアラートは再度スキャンしても出てきませんでした。
Secret Scanning
リポジトリにコミットされた機密情報を検知、必要に応じてプッシュを防ぐことができる仕組みです。
デモ
Secret Scanningが有効な状態でシークレットをプッシュすると以下のようなアラートが出ます。
※このデモ使用したシークレットは何の権限も付与していないGitHub Fine-grained Tokenで、かつ既に削除済みです。
このとき同時にメール通知もされます。
更にPush Protectionという機能を使うとプッシュ自体を防ぐことができます。 Push Protectionを有効化した状態でプッシュをすると下記のようになります。
ここで開発者は、rebaseするなどしてコミットからシークレットを削除するか、プッシュを敢行することができます。以下では偽陽性だったと仮定してプッシュを敢行してみます。上記スクリーンショットの下部の https://github.com/[org]/[repo]/security/secret-scanning/unblock-seceret/xxx
というURLに飛ぶと、プッシュする理由を選択する画面に移動します。
理由を選択すると無事プッシュができました。
Dependency Review
Pull Request作成時に依存関係(ex. npm, rubygemsのライブラリ)に脆弱性が含まれていないかチェックしてくれます。
デモ
公式のREADMEを参考にしてGitHub Actionsを書きます。
name: 'Dependency Review' on: [pull_request] permissions: contents: read jobs: dependency-review: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' uses: actions/checkout@v3 - name: 'Dependency Review' uses: actions/dependency-review-action@v3
試しに脆弱性が見つかっている依存関係を追加するとCIが落ちました。
Actionsの実行結果を見ると、どのパッケージにどんな脆弱性があったかが表示されています。
このように、脆弱な依存関係を本番環境に持ち込ませない作りになっていることが分かります。
今後の運用計画
今月から契約開始しており、段階的に機能を有効化していく予定です。最初はいずれの機能も開発に特に影響しない形で導入しますが、今後施策として特定の場合はマージをブロックすることもあるかもしれません。特にSecret Scanningについては、試験運用したのちPush Protectionを有効化する予定です。
最後に
GHASはROUTE06のプロダクト、お客様、また社員を守るために導入されました。今後はGHASをガンガン使い倒して運用に関する知見をシェアできればと思っています。
また、ROUTE06ではプロダクトセキュリティレベルの向上に取り組んでいただけるメンバーを募集しています!興味のある方はこちらからぜひご連絡ください。