COMPANY SERVICE STAFF BLOG NEWS CONTACT

STAFF BLOG

スタッフブログ

TECHNICAL

テクログ

2024.09.18

GitHub Copilot のセキュリティリスクの調査

テクログdevelopment

GitHub Copilotを導入するためにシークレットはどのように扱われるか気になりましたので、GitHub Copilotを使っている友人とやり取りしたときに調べた情報をまとめました。今回の調査対象はソースコードのデータで個人データについては除外します。

dotenvのシークレットをGitHub Copilotに読み込ませないにはどんな設定が必要か

これは僕が一番最初に思った疑問で、 GitHub Copilot もしくは GitHub Copilot Chat が自分の現在扱っているソースコードと親和性の高い提案をしてくるのは、何らかの形で既存のソースコードを入力データとしてgithubに保持されると思った次第です。

まず GitHub Copilot のホームページを確認すると以下のような記述(日本語に要約)がされています。

 

・GitHubの公開(public)リポジトリにあるコードを含む、公開されているソースからの自然言語テキストとソースコードでトレーニングされている。

・エディタ内カーソルの直前と直後の行、他のファイルやリポジトリのURL、ファイルパスなどの情報は送信され、提案を生成する。

・Chatはアクティブなドキュメント内のコード、選択されたコード、フレームワーク、言語、依存関係などの情報は送信され、提案を生成する。

・GitHubは、Copilot BusinessまたはEnterpriseのデータをモデルのトレーニングに使用しません。

・Copilot BusinessまたはEnterpriseのプロンプトと提案は保持されない。

GitHub Copilot · Your AI pair programmer

つまり収集(collect)されるデータの対象は大きく分け2つありまして、

  • 1.公開されているリポジトリ
  • 2.現在作業中のソースコード

一番目についてはGithubであれば訓練データに使われたくないソースコードはプライベートにすればいいですし、他のリポジトリサービスでもインターネットに公開されていなければGithubに収集されることはないので問題ないとして、

二番目について、ソースコードがどのように収集されるかはおおよそわかりましたが、新たにいくつか質問が浮かびます。

どの場合にソースコードが保持され、トレーニングに使われるのか

Github Copilotは三つのプランがあります。

https://github.com/features/copilot/plans より

Github Copilotがエディター上で現在作業を進めている場所に正確な提案をするには、もちらんリポジトリがパブリックなのかプライベートなのか、プランが何かに関係なく、作業最中のコードの周りを読み取る必要があります。それはいいとして重要なのはそこで収集されたデータが保持されるかどうか、Github Copilotモデルの訓練に使われるかどうかであること。

まず訓練に使われるかどうかについて上に書いていた通り、BusinessとEnterpriseのデータは保持せず、モデルのトレーニングに使用しませんと公式が明言しています。

ではIndividualプランはどうでしょう。

Copilotのソースコードを調査した方(copilot-explorer | Hacky repo to see what the Copilot extension sends to the server (thakkarparth007.github.io))からはっきりと説明されているのは、カーソルの位置に提案がされると、それが承認もしくは却下にかかわらず、30秒後にその周りに対して「コードの断片」といわれているものを作成して保持される。これはどう使われるか定かではないが、おそらくトレーニングに使われるだろう。

ただこれも現在では救済があって、GithubからCopilotの設定で、Allow…improvementsのチェックを外せば収集されなくなるはずです。

ちなみに画像のSuggestions…filter)は提案のときにパブリックコードと一致するものを含めるかどうかの設定ですが、パブリックコードをそのまま使用するのは知的財産権を侵害するリスクがあるため、Blockedにしておくと無難であります。

Github Copilotのライフサイクル

Diagram showing how the code editor connects to a proxy which connects to GitHub Copilot
https://resources.github.com/learn/pathways/copilot/essentials/how-github-copilot-handles-data/ より

こちらサイトで詳しく説明されていますが、要点だけピックアップしますと、

  • 1.カーソル前後、ファイル名とファイル形式、他の開いているタブからプロンプトを作成する
  • 2.プロンプトがLLMに送信され答えの提案が返済される
  • 3.エディターに表示される
  • 4.プロンプトはメモリに一時的に保持していただけで一連のプロセスが終わると削除される

なので、上の正しい設定をされていれば、コードデータは一時的に収集されるだけでGithubによって保持されることはないといえる。

それでも特定のファイルに対して収集すらしてほしくないとき

一番最初の質問に戻りますが、結局のところやはりGithubがdotenvに対するアクセスをしてほしくないので、特定のファイル形式へのアクセスを禁止することができます。

これについては説明を省きますので以下を参考にしてください。

GitHub Copilot からのコンテンツの除外 – GitHub Docs

security – How to Exclude Specific Files (like .env) from GitHub Copilot in VS Code? – Stack Overflow

最後に

Github Copilotのデータの扱いについて調べましたが、公表していることが必ず事実とは限らない、例えばバグで実はある条件でデータが保存されちゃったりするので、ポリシーを知るのと同じくらい大事なことは、シークレットをハードコーディングしないことです。

この記事を書いた人

CHO

入社年2020年

出身地北京

業務内容開発

特技・趣味ギター、旅

テクログに関する記事一覧

TOP