検索
ニュース

「検証はあなたの仕事」 GitHub CopilotにおけるセキュリティのベストプラクティスをGitHubが初学者向けに解説コードの安全性向上に役立つプロンプトとは

GitHubは、AIコーディングアシスタントのGitHub Copilotや他のツールを使って、コードの安全性を向上させるためのベストプラクティスを解説する記事を公式ブログで公開した。

Share
Tweet
LINE
Hatena

 GitHubは2025年4月11日(米国時間)、AI(人工知能)コーディングアシスタント「GitHub Copilot」を使い始めた開発者に向けて、セキュリティのベストプラクティスを解説する記事を公式ブログで公開した。

 GitHubは「多くのセキュリティチームは、リソースや時間の不足により(これはセキュリティチームの責任ではないが)、自社のコードを適切に保護するのに課題を抱えている」とした上で、「開発者はセキュリティにおいて最初の防衛線となるが、多くの開発者は十分なトレーニングを受けていないため、この役割を適切に果たすのは困難だ。適切なトレーニングを受けていない開発者は、実務を通じてセキュリティスキルを学ぶこことを余儀なくされる場合が多い。GitHubは、GitHub Copilotとセキュリティツールで開発者を支援する」と述べている。

 GitHubは、一般的な脆弱(ぜいじゃく)性であるSQLインジェクションを例に挙げ、GitHub Copilotがどのようにコードの安全性向上に役立つかを次のように解説している。

SQLインジェクションを例に解説

 SQLインジェクションとは、ユーザーが入力するテキストフィールド(コメント欄や名前入力欄など)を利用して、攻撃者がデータベースに対する悪意のあるSQLコマンド(テーブル全体を削除するDROP TABLEなど)を不正に実行させる攻撃手法のことだ。

 このような脆弱性を含む可能性があるコードの代表的な例として、ユーザーの入力を利用した単純なINSERTコマンドをソースコード内で記述してしまうケースがある。

 GitHub Copilotを活用する場合、コードをセキュアに保つ方法の一つは、GitHub Copilotにコードを再生成させることだ。INSERTコマンドを使用しているコードがあれば削除し、何を実行したいかを明確に説明するコメントを記述する。

/*
insert from cart using a parameterized query:
mail, product_name, user_name, product_id, address, phone, ship_date, price" and get a Copilot suggestion
*/

 このようなコメントを追加すると、IDE(統合開発環境)でGitHub Copilotが有効になっていれば、「パラメーター化されたクエリ」の提案が表示される。ただし、コードを受け入れる前に、Copilotが書いた内容を必ず確認すべきだ。Copilotは役立つアシスタントだが、生成された内容を検証し、コードの安全性を確認するのはあなたの仕事だからだ。

 GitHub Copilotによる出力結果を確認したら、[Tab]キーを押して提案を受け入れる。

 既存のコードを削除したくない場合は、コードブロックを対象に、Copilotにコードを調査して修正するように依頼できる。レビューしたいコードを選択し、Copilot Chatを開いて「この関数に脆弱性はありますか?(are there any vulnerabilities in this function?)」と尋ねるといい。

 範囲を広げたい場合は、ファイル全体を選択するか、Copilot Chatウィンドウで@workspaceを使用できる。@workspaceコマンドを使用すると、Copilotは現在開いているファイルだけでなく、ワークスペース内の全てのファイルを調査する。

 ここで試してみるべき便利なプロンプトの一つに、「@workspace アタックサーフェスは何ですか?(@workspace what’s the attack surface?)」がある。これは、対象のプロジェクトがどのように攻撃される可能性があるかを尋ねるための表現だ。

 Copilotはコードをスキャンし、対策を提案する。これらには、コードへの個別の変更や、プロジェクトをより安全にするために追加を検討すべき特定のパッケージが含まれることもある。また/fixコマンドを使用することで、これを一歩進め、全体的なコード品質と効率性を改善するための提案を得ることもできる。

 Copilotが応答したり提案したりした後で、さらに以下のような詳細な質問をすることで、学習することもできる。

  • 「この脆弱性はどういう意味ですか?」
  • 「これをするためのより安全な方法を提案してもらえますか?」

 その他のプロンプトのサンプルは、Copilot Chat Cookbookの「コード内の既存の脆弱性を見つける」で確認することもできる。

最低限押さえておきたい3つのポイント

 GitHubは、Copilotを活用する際、セキュリティについて押さえておきたい3つのポイントを次のようにまとめている。

Copilotに脆弱性の発見と修正を依頼する

 Copilot Chatで/fixコマンドを実行する簡単な方法もあれば、コード範囲を選択して脆弱性チェックを依頼する、より具体的な方法もある。

問題が見つかった場合、Copilotに詳細を尋ねる

 解決策を理解すれば、その作業を検証できるようになる。また学習の機会としても重要だ。

Dependabot、コードスキャン、シークレットスキャンを有効にする

 GitHubリポジトリのCode securityの設定画面にある下記の機能は、注意すべき潜在的な問題がある場合、アラートを送信するのに役立つものだ。Copilotは問題の修正を支援する。

  • Dependabot:依存関係(dependencies)に脆弱性がなく、最新の状態であることを確認する
  • コードスキャン(CodeQL):SQLインジェクションの脆弱性など、一般的な脆弱性やコーディングエラーを自動的に検出する
  • シークレットスキャン:コードをスキャンして、パスワードやセキュリティトークンなど、漏えいした可能性のあるシークレット(secrets)を探索する。プッシュ保護(Push protection)を有効にすると、GitHubは新しいシークレットがリポジトリにコミットされるのをブロックする

 「GitHub Copilotは強力だが、全てのセキュリティツールを置き換えることを意図したものではない。本番環境の完全なコンテキストを常に把握できるわけでもない。Copilotはスペシャリストではなくジェネラリストであると認識すべきであり、専用のセキュリティツールや機能を導入することで、コンパイラ、環境変数、デプロイ方法など、他の要素を考慮に入れることができる」と、GitHubは述べている。

Copyright © ITmedia, Inc. All Rights Reserved.