Git Secret Scanner: ตรวจจับรหัสลับที่หลุดเข้า Repository อัตโนมัติ

เหตุใดจำเป็นต้องสแกนความลับใน 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 หรือเซิร์ฟเวอร์อื่นๆ