Hướng dẫn cài đặt Gitleaks: “Tấm khiên” chặn đứng rò rỉ Secret và API Key vào Git

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Nỗi ám ảnh khi lỡ tay “cúng” Secret cho GitHub

Nhiều anh em chắc từng trải qua cảm giác vã mồ hôi hột khi nhận email cảnh báo từ AWS hay Google Cloud lúc nửa đêm. Chỉ cần một phút lơ là commit nhầm file .env chứa Access Key lên repo public, bạn đã vô tình giao chìa khóa nhà cho kẻ trộm. Thực tế đáng sợ là các bot chuyên quét mã nguồn chỉ mất chưa đầy 60 giây để phát hiện và lợi dụng những thông tin này.

Hậu quả thường đến rất nhanh. Hóa đơn cloud có thể nhảy lên hàng nghìn đô chỉ sau một đêm vì bị hacker chiếm quyền đào coin. Tệ hơn, dữ liệu khách hàng bị rao bán trên các diễn đàn underground. Để xử lý dứt điểm rủi ro này một cách tự động, Gitleaks chính là công cụ “ngon” nhất mà mình từng trải nghiệm.

Gitleaks là gì và tại sao nó lại hiệu quả?

Về cơ bản, Gitleaks là công cụ mã nguồn mở viết bằng Go, cực kỳ nhẹ và tốc độ thực thi rất nhanh. Nó được thiết kế để lùng sục các secret như API keys, passwords, hay tokens ẩn nấp trong code. Điểm ăn tiền nhất của Gitleaks là khả năng soi cả lịch sử commit (git history). Đây là nơi anh em thường bỏ quên sau khi đã xóa secret ở commit mới nhất.

Cơ chế hoạt động của nó dựa trên hơn 100 bộ quy tắc (rules) mặc định. Nó kết hợp Regex với kiểm tra Entropy (độ hỗn loạn của chuỗi) để nhận diện chính xác các loại mã đặc thù như Stripe, Twilio hay GitHub Token. Bạn có thể dùng nó để dọn dẹp repo cũ hoặc chặn đứng nguy cơ ngay từ cửa ngõ local.

Hướng dẫn cài đặt Gitleaks nhanh gọn

Tùy vào hệ điều hành đang sử dụng, bạn có thể chọn cách cài đặt phù hợp nhất. Mình khuyến khích dùng Homebrew hoặc Docker để giữ máy sạch sẽ.

1. Cài đặt trên macOS

brew install gitleaks

2. Cài đặt trên Linux (Ubuntu/Debian)

Nếu dùng Linux, bạn có thể tải trực tiếp file binary để sử dụng ngay:

VERSION=$(curl -s https://api.github.com/repos/gitleaks/gitleaks/releases/latest | grep tag_name | cut -d '"' -f 4)
wget https://github.com/gitleaks/gitleaks/releases/download/${VERSION}/gitleaks_${VERSION:1}_linux_x64.tar.gz
tar -xvzf gitleaks_${VERSION:1}_linux_x64.tar.gz
sudo mv gitleaks /usr/local/bin/

3. Sử dụng qua Docker

Với những ai ngại cài đặt rườm rà, Docker là giải pháp tối ưu:

docker pull zricethezav/gitleaks:latest

Thực hành quét Secret chuyên nghiệp

Sau khi cài xong, hãy thử kiểm tra ngay dự án bạn đang làm việc. Kết quả có thể sẽ khiến bạn bất ngờ đấy.

Quét toàn bộ lịch sử Repository

Mở terminal tại thư mục dự án và chạy lệnh sau:

gitleaks detect --source . --report-path leaks-report.json -v

Giải thích nhanh các tham số:

  • --source .: Quét toàn bộ mã nguồn tại thư mục hiện tại.
  • --report-path: Xuất báo cáo chi tiết ra file JSON để dễ theo dõi.
  • -v: Hiển thị chi tiết đoạn code và commit hash bị nghi ngờ rò rỉ.

Nếu Gitleaks báo đỏ, bạn sẽ thấy chính xác file nào, dòng bao nhiêu đang chứa secret. Cảm giác lúc đó khá là “thốn” nếu repo này đã được đẩy lên GitHub từ lâu.

Chặn đứng rò rỉ trước khi Commit

Để ngăn sai lầm ngay từ đầu, hãy kiểm tra các thay đổi đang nằm trong vùng staged:

gitleaks protect --staged -v

Thói quen này giúp bạn tự tin hơn trước khi nhấn Enter thực hiện lệnh commit.

Tích hợp Gitleaks vào quy trình làm việc

Chạy lệnh thủ công rất dễ quên. Cách bền vững nhất là ép quy trình phải quét code tự động cho cả team.

Sử dụng Pre-commit Hook

Gitleaks sẽ tự động kích hoạt mỗi khi bạn gõ git commit. Nếu phát hiện secret, nó sẽ chặn lệnh commit ngay lập tức. Trước hết, hãy cài đặt framework pre-commit bằng pip:

pip install pre-commit

Sau đó, tạo file .pre-commit-config.yaml tại thư mục gốc với nội dung:

repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.18.2
    hooks:
      - id: gitleaks

Cuối cùng, chạy pre-commit install để kích hoạt. Từ giờ, Gitleaks sẽ là vệ sĩ âm thầm của bạn.

Triển khai GitHub Action

Để đảm bảo an toàn tuyệt đối, hãy thêm bước kiểm tra cuối cùng ở phía server. Tạo file .github/workflows/gitleaks.yml để mỗi Pull Request đều được quét tự động:

name: gitleaks
on:
  push:
  pull_request:
jobs:
  gitleaks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: gitleaks/gitleaks-action@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Cần làm gì nếu phát hiện Secret đã bị lộ?

Đừng hoảng loạn xóa dòng code đó rồi commit đè lên. Hành động này không có tác dụng vì secret vẫn nằm trong lịch sử Git. Hãy thực hiện 3 bước sau:

  1. Vô hiệu hóa secret ngay: Thu hồi (revoke) AWS Key hoặc đổi mật khẩu ngay lập tức. Hãy coi như thông tin đó đã thuộc về kẻ xấu.
  2. Dọn dẹp lịch sử: Sử dụng git filter-repo hoặc bfg-repo-cleaner để xóa vĩnh viễn chuỗi nhạy cảm khỏi toàn bộ commit cũ.
  3. Cấu hình ngoại lệ: Nếu Gitleaks báo nhầm một chuỗi test vô hại, hãy thêm nó vào .gitleaksignore để bỏ qua trong các lần quét tới.

Lời kết cho anh em

Bảo mật không phải là việc làm một lần, nó là một thói quen cần duy trì. Việc thiết lập Gitleaks chỉ tốn vài phút nhưng sẽ giúp bạn ngủ ngon hơn mỗi đêm. Đừng để đến lúc “mất bò mới lo làm chuồng”, hãy bảo vệ mã nguồn của mình ngay hôm nay. Bạn đã thử quét lại các dự án cũ của mình chưa? Có khi lại tìm thấy vài cái API Key từ thời còn tập sự đấy!

Share: