เหตุใดจำเป็นต้องสแกนความลับใน Git?
การหลุดของรหัสลับเช่น API keys database passwords access tokens เป็นปัญหาความปลอดภัยที่ร้ายแรง หลายครั้งนักพัฒนาอาจไม่ตั้งใจ commit ไฟล์ที่มีข้อมูลที่ละเอียดอ่อน แม้ว่าจะลบออกจาก commit ในภายหลัง แต่ history ของ Git ยังคงเก็บข้อมูลนั้นไว้ได้ ด้วยเหตุนี้ การใช้ Git Secret Scanner จึงเป็นวิธีหนึ่งในการป้องกันปัญหาดังกล่าว โดยจะตรวจจับรหัสลับโดยอัตโนมัติก่อนที่จะ commit เข้า repository
เครื่องมือยอดนิยม
มีเครื่องมือหลายตัวสำหรับการสแกนความลับใน Git เครื่องมือที่ได้รับความนิยมมากที่สุด ได้แก่
- git-secrets – เครื่องมือที่พัฒนาโดย AWS ใช้ regex patterns เพื่อตรวจจับข้อมูลที่ละเอียดอ่อน
- truffleHog – เครื่องมือที่ค้นหาความลับในรูปแบบต่างๆ รวมถึง entropy-based detection
- gitleaks – เครื่องมือที่เน้นการตรวจจับความลับจากประวัติของ Git โดยใช้ regex patterns
ติดตั้งและตั้งค่า git-secrets
git-secrets เป็นเครื่องมือที่เรียบง่ายและมีประสิทธิภาพ ติดตั้งได้ง่ายบน VPS
git clone https://github.com/awslabs/git-secrets.git
cd git-secrets
make install
หลังจากติดตั้งแล้ว คุณสามารถตั้งค่า git-secrets สำหรับ repository ของคุณ
cd your-repo
git secrets --install
git secrets --register-aws
ตั้งค่า Patterns สำหรับตรวจจับความลับ
คุณสามารถเพิ่ม patterns ที่กำหนดเองเพื่อตรวจจับรหัสลับที่เฉพาะเจาะจง
git secrets --add --global 'PRIVATE_KEY'
นอกจากนี้ยังสามารถเพิ่ม patterns ในไฟล์ .gitconfig โดยตรง
git config --global secrets.patterns 'private_key|api_key|password|secret'
ประยุกต์ใช้กับ Pre-commit Hooks
git-secrets สามารถใช้กับ pre-commit hooks ซึ่งจะตรวจจับความลับโดยอัตโนมัติก่อนที่ commit จะถูกสร้าง เมื่อติดตั้ง git-secrets แล้ว ให้สร้าง pre-commit hook
git secrets --install
git secrets --add-provider -- git log -p --all-S '{api_key,password,secret}'
ตั้งแต่นี้เป็นต้นไป เมื่อคุณพยายาม commit ไฟล์ที่มีความลับ git-secrets จะแจ้งเตือนและหยุด commit ไม่ให้ดำเนินการต่อ
GitHub Secret Scanning Feature
GitHub มีฟีเจอร์ Secret Scanning ที่จะตรวจจับความลับโดยอัตโนมัติเมื่อคุณ push code ไปยัง repository บน GitHub ฟีเจอร์นี้จะแจ้งเตือนผู้ดูแล repository และแม้กระทั่งเตือนให้ provider ทราบว่าความลับ (เช่น API key) ได้เสิร้จสูญหาย
ประยุกต์ใช้กับ CI/CD Pipeline
สามารถเพิ่ม gitleaks หรือ git-secrets ในอัตราสการ CI/CD เพื่อตรวจจับความลับในระหว่างขั้นตอนการบิวด์
# สำหรับ GitLab CI
gitleaks --detect-secrets
หรือสำหรับ GitHub Actions
- name: Run gitleaks
run: gitleaks --detect-secrets
ตัวอย่างคำสั่ง gitleaks
หากใช้ gitleaks สำหรับการสแกนความลับ มีคำสั่งต่างๆ ดังนี้
# สแกนความลับในประวัติปัจจุบัน
gitleaks detect --source=local
# สแกนทั้งประวัติ
gitleaks detect --source=local --verbose
# สแกน branch ที่กำหนด
gitleaks detect --source=local --detect-branch=main
การใช้ Git Secret Scanner เป็นหนึ่งในหลักปฏิบัติที่ดีที่สุดสำหรับการรักษาความปลอดภัยของ Git repository บน ผู้ให้บริการโฮสติ้ง Cloud VPS หรือเซิร์ฟเวอร์อื่นๆ
