認証情報の漏洩をシステム的に検知する gitleaks を試してみる。
こんにちは k-jun です。今回は git 管理下にある現在のコード、過去のコミット履歴などから包括的に認証情報が漏洩していないかを確認できるツール gitleaks を試してみようと思います。
https://github.com/zricethezav/gitleaks
基本的には gitactions で CI/CD としてセットすることが想定されているみたいですね。 一度 github にあげてしまうと手遅れ感はあるので、それよりは未然に防ぐために手元で git push のエイリアスに設定されていると良いかもしれませんね。
Install
$ brew install gitleak
brew で簡単にインストールできます。
Run
$ gitleaks INFO[0000] opening . INFO[0000] scan time: 35 milliseconds 632 microseconds INFO[0000] No leaks found
適当に実行してみると何やらチェックらしきものが走っています。ではでは検証として適当にパスワードっぽいものを生成して .env
なんかに貼り付けてみます。
$ echo "kJutbFnW52aB8C4Al1ph0LuMOvYIYzSP4GZfXXXXX" > .env ~/ghq/github.com/k-jun/playground-pulumi master* $ gitleaks INFO[0000] opening . INFO[0000] scan time: 14 milliseconds 168 microseconds INFO[0000] No leaks found
あれ...? なにも反応しない...??
$ echo AWS_ACCESS_KEY='XXXXXXbFnW52aB8C4Al1ph0LuMOvYIYzSP4GZfvksdnv/dsa' > .env ~/ghq/github.com/k-jun/playground-pulumi master* $ gitleaks INFO[0000] opening . INFO[0000] scan time: 13 milliseconds 264 microseconds INFO[0000] No leaks found
うーんこれでも反応しない...。リポジトリの url を直接指定できるようなのでそれで試してみる。
$ gitleaks --repo-url https://github.com/zricethezav/gronit -v INFO[0000] cloning... https://github.com/zricethezav/gronit Enumerating objects: 228, done. Counting objects: 100% (78/78), done. Compressing objects: 100% (51/51), done. Total 228 (delta 34), reused 17 (delta 9), pack-reused 150 { "line": "const AWSKEY string = \"AKIAIO5FODNN7EXAMPLE\"", "lineNumber": 12, "offender": "AKIAIO5FODNN7EXAMPLE", "offenderEntropy": -1, "commit": "034344be2227771ae9f020358ad68230debfbb9d", "repo": "gronit", "repoURL": "https://github.com/zricethezav/gronit", "leakURL": "https://github.com/zricethezav/gronit/blob/034344be2227771ae9f020358ad68230debfbb9d/main.go#L12", "rule": "AWS Access Key", "commitMessage": "secret\n", "author": "Zach Rice", "email": "zricer@protonmail.com", "file": "main.go", "date": "2021-04-20T09:04:44-04:00", "tags": "key, AWS" }
おおお!!! こんな感じに出るのね。リポジトリレベルで指定できるのはかなり有り難いですね。CI がどこで動くかを考えるまもなく、同じコマンドを実行しておけば良いので。
.git/hooks/pre-commit
に書き込むとこのように、commit 前にチェックしてくれます。認証情報を万が一 commit した際に備えて設定しておくと良いかもしれませんね。
$ git commit -m 'feat(docs): update readme' INFO[0000] opening ./ INFO[0000] scan time: 69 milliseconds 727 microseconds INFO[0000] commits scanned: 62 WARN[0000] leaks found: 7
これでローカルの環境が少しだけ安全になりました。それでは今日はこのへんで...!