Quét secret Git: Cách dùng Trufflehog tìm rò rỉ API Key trong lịch sử commit

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Khi API Key “đi lạc” lên GitHub: Câu chuyện không của riêng ai

Tôi từng chứng kiến một đồng nghiệp vã mồ hôi hột khi nhận email từ AWS báo hóa đơn vọt lên 5.000 USD chỉ sau một đêm. Thủ phạm? Một file config.json chứa Access Key bị push nhầm lên repo public lúc 2 giờ sáng. Dù anh ấy đã nhanh tay xóa key và push commit mới ngay sau đó, nhưng mọi chuyện đã quá muộn.

Sai lầm phổ biến nhất là tin rằng chỉ cần xóa dòng code chứa mật khẩu rồi commit mới là an toàn. Thực tế, Git lưu trữ toàn bộ lịch sử thay đổi dưới dạng các snapshot. Chỉ cần một lệnh git checkout về commit cũ, bất kỳ ai cũng có thể lấy lại thông tin nhạy cảm đó. Với các bot quét tự động của hacker, việc tìm ra secret trong lịch sử commit thường chỉ mất chưa đầy 60 giây kể từ khi bạn nhấn push.

Tại sao các phương pháp thủ công thường thất bại?

Nhiều team vẫn duy trì thói quen kiểm tra bảo mật khá sơ sài. Dưới đây là những hạn chế mà bạn sẽ gặp phải:

  • Dùng lệnh grep: Cách này chỉ tìm được ở commit hiện tại (HEAD). Nó hoàn toàn bỏ sót dữ liệu trong hàng trăm commit cũ hoặc các branch đã bị xóa.
  • Code Review bằng mắt: Con người rất dễ mỏi mắt trước những file config dài hàng nghìn dòng. Chỉ cần lọt một chuỗi Base64 trông có vẻ vô hại, hệ thống của bạn đã nằm trong tầm ngắm.
  • Script tự chế: Đa số script đơn giản chỉ tìm theo pattern (Regex). Chúng thường trả về hàng tá kết quả giả (false positive), khiến bạn mất thời gian lọc rác.

Trufflehog: “Thợ săn” secret chuyên nghiệp

Trufflehog không chỉ đơn thuần là một công cụ tìm kiếm chuỗi. Nó được thiết kế để lùng sục mọi ngóc ngách: từ các nhánh (branches), tag cho đến toàn bộ lịch sử commit. Điểm ăn tiền nhất của Trufflehog là khả năng nhận diện hơn 700 loại detector khác nhau (AWS, Slack, Stripe, Google Cloud…) và kiểm tra xem các key đó còn hoạt động hay không.

1. Cài đặt Trufflehog trên Linux nhanh gọn

Thay vì cấu hình phức tạp, bạn có thể cài đặt bản binary trực tiếp vào hệ thống bằng lệnh sau:

curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin

Kiểm tra lại để đảm bảo mọi thứ đã sẵn sàng:

trufflehog --version

2. Quét Repository cục bộ và xác thực Secret

Để quét dự án bạn đang phát triển, hãy di chuyển vào thư mục repo và chạy:

trufflehog git file://. --only-verified

Lưu ý quan trọng: Flag --only-verified là tính năng cực kỳ đắt giá. Trufflehog sẽ thử gửi một request ẩn danh đến API của nhà cung cấp để xác nhận key đó còn hiệu lực hay không. Nếu nó báo “Verified”, nghĩa là bạn đang cầm một quả bom nổ chậm thực sự trên tay.

3. Quét trực tiếp từ GitHub/GitLab

Bạn không cần tốn thời gian clone code về máy. Trufflehog hỗ trợ quét từ xa qua URL:

trufflehog git https://github.com/user/project.git

Với repo private, bạn chỉ cần thiết lập SSH key hoặc truyền Token vào URL để công cụ có quyền truy cập.

4. Quy trình xử lý khi phát hiện rò rỉ

Nếu chẳng may tìm thấy một secret còn sống, đừng hoảng loạn. Hãy thực hiện đúng 3 bước “sơ cứu” sau:

  1. Vô hiệu hóa (Revoke) ngay lập tức: Truy cập dashboard của dịch vụ (như AWS Console) và xóa key bị lộ. Đây là ưu tiên số một.
  2. Xóa lịch sử Git: Sử dụng công cụ git-filter-repo để xóa vĩnh viễn file hoặc chuỗi ký tự đó khỏi mọi commit. Lệnh git rm đơn thuần là không đủ.
  3. Cấp key mới: Tạo một bộ Credential mới và cập nhật vào biến môi trường (Environment Variables), tuyệt đối không hardcode vào file config nữa.

Phòng bệnh hơn chữa bệnh với Git Hooks

Cách tốt nhất để không bao giờ phải đi dọn rác là chặn đứng nó ngay từ cửa ngõ. Bạn nên tích hợp Trufflehog vào pre-commit hook của dự án.

Thiết lập file .pre-commit-config.yaml đơn giản như sau:

repos:
-   repo: https://github.com/trufflesecurity/trufflehog
    rev: main
    hooks:
    -   id: trufflehog
        name: TruffleHog
        entry: trufflehog git file://. --only-verified --fail
        language: system
        stages: [commit]

Từ giờ, mỗi khi bạn gõ git commit, hệ thống sẽ tự động kiểm tra. Nếu phát hiện thấy key nhạy cảm, lệnh commit sẽ bị từ chối ngay lập tức.

Lời kết

Bảo mật không phải là đích đến mà là một quá trình liên tục. Một công cụ miễn phí như Trufflehog có thể cứu team bạn khỏi những rủi ro tài chính và uy tín khổng lồ. Hãy dành ra 5 phút để quét lại các repo quan trọng của mình ngay hôm nay. Biết đâu, bạn sẽ phát hiện ra những “di sản” nguy hiểm mà những người tiền nhiệm để lại.

Share: