Hiểu Đúng Về “Key Bị Lộ” Là Gì?
"Lộ key" tức là thông tin nhạy cảm như API key, access token, SSH private key, mật khẩu DB,... vô tình xuất hiện trong mã nguồn và bị commit lên Git – đặc biệt nghiêm trọng nếu repo đó công khai (public).
Key thường bị lộ qua:
- File .env hoặc .config bị commit
- Hardcoded key trong source code (JS, Python, PHP,...)
- Sử dụng git add . không kiểm tra kỹ
- Push nhầm branch đang test lên GitHub
- Clone lại repo cũ mà không quét lại lịch sử Git
Vì Sao Việc Lộ Key Là Cực Kỳ Nguy Hiểm?
Trong môi trường DevOps hiện đại, chúng ta thường phải làm việc với các key bảo mật: API keys, access tokens, SSH private keys, database credentials,… Những thông tin này tuyệt đối không nên xuất hiện trong mã nguồn, đặc biệt là trong các repo công khai. Một số hậu quả thực tế từng ghi nhận:
Trường hợp | Hậu quả |
---|---|
AWS key bị lộ | Hacker chạy mining tốn hàng ngàn USD |
Firebase key public | Spam database, phá dữ liệu |
SMTP key rò rỉ | Bị dùng để gửi spam, bị block domain |
Stripe key bị lộ | Gây mất tiền nếu không kiểm soát đúng quyền |
SSH private key | Hacker truy cập được server prod |
💡 Ghi nhớ: Một khi bạn đã push lên GitHub, ngay cả khi xoá commit đó, hacker vẫn có thể xem được qua cache hoặc lịch sử Git.
Làm Sao Biết Key Đã Bị Lộ?
a. Dấu hiệu rõ ràng:
- Bạn nhìn thấy file .env, config.js, firebaseConfig.js, settings.py,... có chứa chuỗi như API_KEY= hoặc PRIVATE_KEY=...
- Có key trong git log dù bạn đã xoá file
b. Dùng công cụ phát hiện key lộ:
Công cụ | Mô tả |
---|---|
GitHub Secret Scanning | Tự động quét repo công khai và gửi alert nếu phát hiện key |
Gitleaks | Quét key theo regex trong toàn bộ repo và cả lịch sử |
TruffleHog | Dò các chuỗi có entropy cao – có khả năng là secrets |
Detect-Secrets (Yelp) | Tích hợp pre-commit hook để chặn từ đầu |
Ví dụ với Gitleaks:
brew install gitleaks
gitleaks detect --source . --report gitleaks-report.json
Cách Phòng Ngừa Key Bị Lộ
1. Sử dụng .env và .gitignore chuẩn
Ví dụ .env:
API_KEY=your-secret-api-key
DB_PASSWORD=secret
Ví dụ .gitignore:
.env
*.env
*.pem
secrets/*
config/*.json
2. Dùng pre-commit hook để quét trước khi commit
Cài đặt detect-secrets
:
pip install detect-secrets
detect-secrets scan > .secrets.baseline
pre-commit install
Cấu hình .pre-commit-config.yaml
:
repos: - repo: https://github.com/Yelp/detect-secrets rev: v1.4.0 hooks: - id: detect-secrets
3. Dùng Secret Manager để lưu trữ key
- AWS Secrets Manager
- Google Secret Manager
- Hashicorp Vault
- 1Password CLI + GitHub Actions
4. Nguyên tắc “Least Privilege”
- Chia quyền rõ ràng (dev, staging, prod)
- Key nào dùng cho môi trường nào, chỉ cấp quyền tối thiểu cần thiết
- Hạn chế hardcoded key – ưu tiên cấu hình từ môi trường
Cách Khắc Phục Khi Đã Lỡ Lộ Key
1. Thu hồi key ngay lập tức
- Vào dịch vụ quản lý key và revoke key cũ. Mỗi nền tảng đều có chỗ để revoke key, ví dụ:
- AWS → IAM → Access Keys
- Firebase → Realtime DB Rules
- GitHub → Developer Settings → Personal Access Tokens
- Tạo key mới và cập nhật hệ thống
2. Xóa key khỏi Git history
Dùng các công cụ như:
- git filter-repo (mới, hiệu quả hơn filter-branch)
git filter-repo --path .env --invert-paths
- BFG Repo-Cleaner
bfg --delete-files .env
bfg --delete-text 'API_KEY'
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --force
Lưu ý: Sau khi rewrite history, bạn phải force push (git push --force), và thông báo cho tất cả người dùng repo.
3. Kiểm tra xem key đã bị sử dụng chưa và khoanh vùng thiệt hại
- Kiểm tra log truy cập của dịch vụ liên quan (CloudTrail, audit log,…)
- Kiểm tra billing: Có chi phí bất thường?
- Xác nhận với team nếu có production incident
- Thông báo người dùng nếu có rủi ro ảnh hưởng đến dữ liệu
Checklist Bảo Mật
- ✅️ .env và secrets đã nằm trong .gitignore
- ✅️ Đã cài pre-commit hook để chặn key
- ✅️ Key được lưu trong secret manager hoặc biến môi trường
- ✅️ Repo đã được quét bằng Gitleaks / TruffleHog
- ✅️ Sử dụng key theo nguyên tắc Least Privilege
- ✅️ Có quy trình xử lý khẩn cấp nếu lộ key
Tổng Kết
Lộ key là lỗi phổ biến, nhưng hoàn toàn có thể phòng tránh nếu bạn có quy trình tốt. Đừng để một lần sơ suất khiến hệ thống của bạn gặp rắc rối lớn. Hãy kiểm tra repo của bạn ngay hôm nay và áp dụng các biện pháp đã nêu.