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に組み込んだりすることで自動で実施することも可能です。
上手に使ってクレデンシャル流出を防ぎたいですね。