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: [email protected]
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: [email protected]
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