GitHub Copilotは機密情報を漏洩するのか?
-
GitGuardianの調査によると、Copilotは8,127件の提案のうち2,702件の「機密情報らしき記述」 を生成し、提案1回あたり平均0.33件の「本物の機密情報」 を出力した可能性があるという衝撃的な結果を報告しました。
-
またGitHub Copilotの提案コードのうち、35%にセキュリティ上の脆弱性が見つかり、CWE‑798(ハードコードされた認証情報) の例も確認されています。
これはGitHub上の公開コードを学習したモデルが、トレーニング済みの “記憶” を利用して、意図せず機密情報を提案してしまうためです。
「ハードコードされた認証情報」とは、ソースコードの中に直接書かれたパスワード・APIキー・トークンなどの機密情報のことです。
プラン別GitHub Copilotのデータ取り扱い状況
-
企業向けのCopilot Business / Enterprise プランでは、作業中のコード(プライベートリポジトリ)をモデルの再学習に使用しません。データは保持されず、改善にも使われません。
- 個人向けのCopilot Free / Pro / Pro+プランでは、カーソル前後のコードスニペットがGitHubに一時収集され、モデル改善に使われる可能性があります。設定で変更可能です。
VSCode × GitHub Copilotで機密情報を漏洩させないための設定手順
1. 学習への協力を無効にする(オプトアウト)
-
GitHubホーム画面 → アイコン → Settings → Copilot → Features
「Allow GitHub to use my data for product improvements」のチェックを外す
これにより、個人向けプランでもコードスニペットがGitHubに保存されなくなります。
2. 特定ファイルやパターンを Copilot の提案対象から除外する
.env
や config.json
、データベースの設定ファイルなど、機密が含まれるファイルを Copilot に見せたくない場合の設定手順
1. VSCodeの設定を開く (VSCode上で Ctrl + ,
、MacならCmd + ,
)
2. 設定画面右上の 設定 (JSON) を開く
をクリックし、settings.json
を開く
3. 下記除外設定用コードを最下部に追記
このとき、settings.json
最下部の「}
」の上に一行追加し、下記コードをコピペしてください。
,
"github.copilot.advanced": {
"excludeFiles": [
"**/*.env", // 環境変数ファイル
"**/config.json", // 設定ファイル
"**/example/**", // サンプルディレクトリ
"**/example2/**", // サンプルディレクトリ2
"**/database.yml" // DB設定
]
}
**/example/**
のような記述では、そのディレクトリ内のすべてのファイルへのアクセスをブロックできます。
一方、**/*.env
や**/*.json
のような記述では、任意の階層にある.env / .jsonファイルへのアクセスをブロックできます。
3. GitHub Copilot提案コードのフィルタ設定 (他人のコードを丸ごと持ってこさせない設定)
-
GitHub Copilot は大量のパブリックコードを学習しているため、既存のオープンソースコードと「完全に一致するコード」を提案してくる場合があります。
たとえば Copilot が「Apache 2.0 ライセンスのコード」をそのまま提案してきた場合、ライセンス違反のリスクや、意図せぬ著作権侵害が発生する可能性があります。 -
これを防ぐために、GitHub CopilotのWeb上設定画面とVSCode側で、パブリックリポジトリと一致するコードの提案を抑制しておくと安心です。
1. 先ほどと同様、GitHub Copilotの設定画面に入る
(GitHubホーム画面 → アイコン → Settings → Copilot → Features)
「Suggestions matching public code (duplication detection filter)」を「Blocked
」に変更する
2. 先ほど記述したVSCodeの settings.json
に、filterSuggestions
を追記
,
"github.copilot.advanced": {
"excludeFiles": [
"**/*.env", // 環境変数ファイル
"**/config.json", // 設定ファイル
"**/example/**", // サンプルディレクトリ
"**/example2/**", // サンプルディレクトリ2
"**/database.yml" // DB設定
],
"filterSuggestions": true // この記述を追加
}
生成されたコードを自動スキャン
下記のような静的解析ツール/拡張機能を導入して、生成されたコードに潜む脆弱性やハードコードされた認証情報を検出することができます。
1. ESLint:JavaScript/TypeScript向けの静的解析ツール。オープンソースで無料。
2. Bandit:Pythonコード向けのセキュリティ静的解析ツール。オープンソース、無料。
3. Brakeman:Ruby on Railsアプリケーション向けのセキュリティ静的解析ツール。オープンソース、無料。
各ツールの使い方や設定手順をここで紹介すると非常に長くなってしまうため、おすすめのQiita記事をいくつかピックアップして載せておきます。
-
ESLint : 【初心者向け】Visual Studio Code へ ESLint と Prettier を導入する
-
Brakeman : 【Rails】Brakemanでセキュリティチェックをする
GitHub 側のセキュリティ機能を活用する
-
GitHub Secret Scanning:API キーやパスワードを含んだファイルを自動検知し、アラートで通知します。
-
設定方法
(GitHubホーム画面 → アイコン → Settings → Code security)
Push protection for yourself
を有効にする。
見た目的に勘違いしやすいですが、有効化されている場合には赤文字で 「Disable」
と表示されます。(下記画像のように)
この場合は既に有効化されているため、設定を変える必要はありません。
もし 「Enable」
と表示されていたら、それは無効化されているため、表示が 「Disable」
になるように設定を変更してください。
より安全にGitHub Copilot利用を実現するには?
- Copilot Business / Enterprise プランに移行すれば、プライベートコードの収集やモデル改善への利用が無効化され、安全性は高まります。
- 組織レベルでの GitHub Secret Protection の導入、Copilot管理設定の周知、定期監査 を実施しましょう。
まとめ
GitHub Copilotは生産性の高いツールですが、誤った設定や無意識の使用によって、機密情報の漏洩リスクがあります。VS Code環境では以下を徹底することで、リスクを最小化可能です:
- 設定による特定ファイル・フォルダへのアクセス除外
- 静的解析ツールとコードレビューの継続
- GitHub側のSecret Scanningの活用
- プランと利用ポリシーの適切な選択と運用
Copilot を安心・安全に活用するために、ぜひこれらの手順をチームと共有し、運用に組み込んでください。