BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GitHubによるCodeQLのセキュリティ活用方法

GitHubによるCodeQLのセキュリティ活用方法

原文リンク(2025-03-22)

GitHubのProduct Security Engineeringチームでは、GitHubの裏側を支えるコードのセキュリティ確保に向けて、CodeQLといったツール開発を通した大規模な脆弱性の検出・修正を行っている。 同チームからアプローチに関する洞察が共有されており、他の組織でもコードベース保護に向けたCodeQLの活用方法を知ることができる。

CodeQLで、セキュリティ分析の自動化が可能になっており、データベースクエリと似た方法でコードクエリができるようになっている。これは単純なテキスト検索よりも効果的な方法で、コード指示によるデータ移動の追跡、安全でないパターンの特定、テキストでは特定できない脆弱性の検出が可能だ。これにより、コードのパターンのより深い理解と潜在的なセキュリティ問題の発見が実現している。

GitHubのProduct Security Engineeringチームでは、CodeQLを多様な場面で採用しており、GitHubリポジトリのセキュリティ確保に役立てている。 既定の設定では、defaultクエリスイートとsecurity-extendedクエリスイートが使用可能で、同社のリポジトリの大半に対応している。この設定により、CodeQLでpull requestのセキュリティチェックが自動化されている。

GitHubのRubyモノリスなどの大規模なリポジトリの場合は、さらなる対策が必要だ。各セキュリティニーズに合わせたカスタムクエリパックを使用することになる。加えて、セキュリティ監査の実施やさらに調査が必要なコードパターンの特定には、マルチリポジトリ バリアント分析(MRVA)が用いられている。また、GitHubのコードベースに特有な潜在的な脆弱性の検出を目的として、カスタムクエリが記述されている。

当初、CodeQLのカスタムクエリはリポジトリで公開されていたが、このアプローチでは、いくつかの課題が生じていた。更新ごとに本番環境へのデプロイプロセスの実行が必要であることに加え、CIワークフローでの分析時間の増大、CodeQL CLIの更新に起因した問題などがあった。こうした課題の対処として、クエリパックの公開がGitHub Container Registry(GCR)に移行された。この変更により、プロセスの合理化や保守性が向上したほか、クエリ更新時のフリクションが減少している。

カスタムクエリパック開発時には、ruby-allパッケージなどの依存関係が考慮される。defaultクエリスイートからクラスを拡張することで、不要な複製の回避とクエリの簡潔性・有効性が両立できている。だが、CodeQLライブラリAPIの更新が決定的な変化をもたらす可能性があり、クエリのパフォーマンスへの影響が懸念されている。 こうしたリスクの軽減に向けて、最新バージョンのruby-allに対したクエリが開発されているが、リリース前から特定のバージョンにバージョンロックがかかっている。これにより、意図しないアップデートによる想定外の問題を防止でき、クエリのデプロイ処理実行が確実なものになっている。

クエリの安定性を維持するために、クエリごとに新しいユニットテストが書かれている。これらのテストはクエリパックリポジトリ向けのCIパイプラインに統合されており、デプロイ前の潜在的な問題の早期検出を可能にしている。リリースプロセスにはいくつかのステップがあり、pull requestの展開、ユニットテストの記述、変更のマージ、パックバージョンのインクリメント、依存関係の解決、更新されたクエリパックのGCRへの公開などが含まれる。この構造的アプローチで、開発の柔軟性と求められる安定性のバランスを図っている。

クエリパックをリポジトリに統合する方法は、組織全体のデプロイ戦略に依存している。GitHubのセキュリティチームではCodeQLの設定ファイルを使用した特定のクエリパックのバージョンロックは行わず、GCRを利用したバージョン管理を採用することにした。このアプローチでリポジトリが公開済みの最新バージョンを自動的に使用できるようになるほか、必要に応じて変更の迅速なロールバックも可能だ。

GCRでのクエリパック公開にまつわる課題の1つは、組織内で複数リポジトリにまたがるアクセシビリティをいかに確保するかであった。改善に向けてアクセス権限の手動付与、個人用アクセストークン、アクセス権限継承用のリポジトリとパッケージのリンク接続など、複数の解決策が検討された。 最終的にリポジトリをリンク接続するアプローチが導入され、手動による介入を必要としない複数リポジトリの権限管理の効率化が実現した。

GitHub のセキュリティチームでは、セキュリティ分析の強化に向けた様々なカスタムクエリを作成している。これらのクエリは、リスクの高いAPIの特定、セキュアコーディングプラクティスの実行、APIエンドポイントの認可制御の不備検出に特化している。一部のクエリは、厳格な実行を行うメカニズムとしてではなく、教育ツールとして機能しており、こうした教育的クエリではアラート報告時の重大度レベルが低く設定されて、デプロイを中断しないようになっている。 こうしたアプローチにより、開発者によるセキュリティリスク評価と最も重大な脆弱性への迅速な対応の両立が実現している。

作者について

特集コンテンツ一覧

BT