Gitleaks jest niesamowitym, a zarazem zgrabnym narzędziem, który pozwoli nam znaleźć poufne dane jak hasła czy klucze w repozytoriach git. Jak możemy go użyć ?
Utwórzmy lokalnie katalog z zainicjalizowanym repozytorium git:
mkdir demo cd demo git init
a następnie utwórzmy prosty skrypt i zapiszmy zmiany w git:
echo hostname > script.sh chmod +x script.sh git add script.sh git commit -am "Simple script"
W kolejnym kroku zainstalujmy gitleaks i urzyjmy go za pomocą komendy:
brew install gitleaks gitleaks detect --source . -v
Narzędzie nie powinno znaleźć żadnych danych, dlatego utwórzym plik provider.tf
z zawartością:
provider "aws" { region = "us-west-2" access_key = "lkKJkJsi819jc8s9jd8ciejr5.34.22kdksfASASS" secret_key = "alkskadsKKj81jsodio1j98Aasd1.asio32JJJ8ss" }
Po utworzeniu pliku, zapiszmy zmiany w git:
git add provider.tf git commit -am "Add TF provider with AWS API key"
I sprawdźmy wyniki z uruchomienia gitleaks
:
gitleaks detect --source . -v ○ │╲ │ ○ ○ ░ ░ gitleaks Finding: access_key = "lkKJkJsi819jc8s9jd8ciejr5.34.22kdksfASASS"" Secret: lkKJkJsi819jc8s9jd8ciejr5.34.22kdksfASASS RuleID: generic-api-key Entropy: 4.308295 File: provider.tf Line: 3 Commit: d496e23a1872af79917e78f80a6fac9da1fd7063 Author: Sebastian Czech Email: sebaczech@gmail.com Date: 2023-08-02T20:43:09Z Fingerprint: d496e23a1872af79917e78f80a6fac9da1fd7063:provider.tf:generic-api-key:3 Finding: secret_key = "alkskadsKKj81jsodio1j98Aasd1.asio32JJJ8ss"" Secret: alkskadsKKj81jsodio1j98Aasd1.asio32JJJ8ss RuleID: generic-api-key Entropy: 3.840947 File: provider.tf Line: 4 Commit: d496e23a1872af79917e78f80a6fac9da1fd7063 Author: Sebastian Czech Email: sebaczech@gmail.com Date: 2023-08-02T20:43:09Z Fingerprint: d496e23a1872af79917e78f80a6fac9da1fd7063:provider.tf:generic-api-key:4 10:43PM INF 5 commits scanned. 10:43PM INF scan completed in 65.1ms 10:43PM WRN leaks found: 2
Narzędzie wykryło generic-api-key
. Usuńmy zatem plik z danymi poufnymi:
rm provider.tf git commit -am "Remove AWS API key"
Po ponownym uruchomieniu gitleaks
problem wciąż występuje. Dlaczego ? Z powodu historii w git. Rozwiązanie problemu znajdziemy w dokumentacji removing sensitive data from a repository.
Zainstalujmy najpierw narzędzie git-filter-repo
:
brew install git-filter-repo
które może być użyte za pomocą komend:
git filter-repo --invert-paths --path provider.tf git filter-repo --invert-paths --path provider.tf --force
W efekcie gitleaks
nie znajduje żadnych nieprawidłowości:
gitleaks detect --source . -v ○ │╲ │ ○ ○ ░ ░ gitleaks 10:54PM INF 3 commits scanned. 10:54PM INF scan completed in 62.4ms 10:54PM INF no leaks found