Lộ Key Trong Repo GitHub: Nhận Biết, Phòng Ngừa Và Khắc Phục

0 0 0

Người đăng: Hữu Ngọc Tiên Sinh

Theo Viblo Asia

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

image.png

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Github CLI - Đơn giản hóa cuộc sống cho developer

1. Giới thiệu.

0 0 46

- vừa được xem lúc

Tự build cho mình một hệ thống BADGE MARKDOWN siêu xịn xò - #1

Chào mọi người, lại là mình và cái serie "Something thú vị" của mình đây, serie tổng hợp những kiến thức mình cảm thấy thú vị ở trên google, github, bla bla... Qua đó chia sẻ những project nho nhỏ, thích hợp để mọi người làm cho vui hoặc relax hoặc giải trí. https://github.com/weebNeedWeed/custom-ba

0 0 39

- vừa được xem lúc

Profile README - Portfolio cá nhân nhanh, bổ, rẻ ngay trên Github

. Khi đã chọn nghề IT, dấn thân vào con đường dev khó có ngày yên nghỉ (ngơi), chắc các bạn đã không còn xa lạ với Github, nếu không muốn nói là quá quen (nếu chưa biết Github là cái gì thì bạn cần lăn lộn giang hồ nhiều nữa ). Với một hệ thống siêu khủng, nhiều tính năng siêu tiện ích, một đội ngũ

0 0 96

- vừa được xem lúc

Git objects

. Giới thiệu. Hầu hết các developer đều ít nhiều sử dụng git trong công việc hàng ngày. Khi bắt đầu với git, chúng ta đều được học các câu lệnh quên thuộc như git add ., git commit -m '[Feat] Hello world'.

0 0 37

- vừa được xem lúc

Phân biệt GitHub và GitLab. Nên chọn dịch vụ nào?

Làm thế nào để phân biệt GitHub và GitLab? Ngày nay, quản lý kho là một trong những yếu tố quan trọng của phát triển phần mềm hợp tác. Các tính năng phân phối thành công yêu cầu cần sự kết hợp của các

0 0 52

- vừa được xem lúc

Điểm mặt 10 project đang làm mưa làm gió trên Github trong lĩnh vực phát triển web

Nguồn: https://iainfreestone.hashnode.dev/10-trending-projects-on-github-for-web-developers-12th-march-2021. .

0 0 91