技術情報

trufflehogでGitリポジトリにクレデンシャルが混入していないか検査する

trufflehogとは

Gitリポジトリからクレデンシャル(APIキーやサービスアカウントの鍵ファイルなど)がコミットされていないかを自動的に検査できるツールです。

GitHubで試してみる

GitLabなどにも対応していますが、今回はGitHubで試してみます。

リポジトリの用意

空のリポジトリを作成し、2つのファイルをcommitします。

1つ目はcredential.jsonです。
GCPサービスアカウントと同じ構造です。(もちろん、本物ではありません。)

// credential.json
{
  "type": "service_account",
  "project_id": "project_id",
  "private_key_id": "abc123",
  "private_key": "-----BEGIN PRIVATE KEY-----\nabc123\n-----END PRIVATE KEY-----\n",
  "client_email": "name@project.iam.gserviceaccount.com",
  "client_id": "1234567890",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/name%40project.iam.gserviceaccount.com"
}

 

2つ目は比較対象となるPythonスクリプトです。
クレデンシャルは含まれません。

# main.py
print('hello world!')

 

これらをcommitしたらGitHub上のリポジトリにpushします。

trufflehogをインストール

今回、簡単なインストール方法としてDockerの利用を選択しました。

自分はzshを利用しているので下記のようなエイリアスを.zshrcに追記しました。

alias trufflehog='docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest'

M1(Appleシリコン)ユーザは下記のようにプラットフォーム指定する方が良いそうです。

alias trufflehog='docker run --platform linux/arm64 --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest'

.zshrcを再度読み込むとtrufflehogがコマンドとして利用できるようになっています

GitHubのアクセストークンを用意する

プライベートリポジトリを対象とする場合はアクセストークンが必要です。
下記URLを参考にしてアクセストークンを作成します。
組織内リポジトリを対象とする場合は、組織用のアクセストークンを作成します。

trufflehogを動かす

下記のようなコマンドを実行して、リポジトリを検査します

trufflehog github --token=github_pat_token123 --repo=https://github.com/hoge/repo-name

--tokenにはトークンを指定します。トークンを使用しない場合は省略します。

--repoにはリポジトリのURLを指定します。

結果として、以下のような出力が得られました。
credential.jsonが検出されていることがわかります。
一方で、クレデンシャルを含まないPythonスクリプトは検出されていません。

Found unverified result 🐷🔑❓
Detector Type: GCP
Decoder Type: PLAIN
Raw result: name@project.iam.gserviceaccount.com
Email: Y N <yn@hoge.hoge>
File: credential.json
Timestamp: 2022-12-27 14:40:35 +0900 +0900
Line: 6
Visibility: 1
Link: https://github.com/hoge/repo-name/blob/72526b69c96b60edb0dcc8c0cb0261c10a81c650/credential.json
Repository: https://github.com/hoge/repo-name.git
Commit: 72526b69c96b60edb0dcc8c0cb0261c10a81c650

まとめ

今回はtrufflehogを試しました。
他にも、組織内のリポジトリを一括で検査したりすることも可能です。
リポジトリを定期的に検査してみてはいかがでしょうか。
また、pre-commitフックやGitHub Actionsに組み込んだりすることで自動で実施することも可能です。
上手に使ってクレデンシャル流出を防ぎたいですね。

Y.N
GRIでデータ分析やアルゴリズム開発、ForecastFlowの開発に携わっています。