Skip to main content

GitLeaks

Giới thiệu

Gitleaks source là một công cụ mã nguồn mở được sử dụng để tìm kiếm thông tin n hạy cảm trong các kho lưu trữ Git. Nó được phát triển để giúp các nhà phát triển và quản lý dự án xác định và loại bỏ những thông tin nhạy cảm không đáng có trong mã nguồn của họ.

Khi phát triển phần mềm, các nhà phát triển thường phải làm việc với các kho lưu trữ Git để theo dõi và quản lý mã nguồn. Trong quá trình này, thông tin nhạy cảm như các khóa bí mật, mật khẩu, thông tin xác thực, mã thông báo truy cập và các thông tin quan trọng khác có thể được đưa vào mã nguồn và lưu trữ trong kho lưu trữ Git. Điều này có thể tiềm ẩn rủi ro bảo mật lớn.

Gitleaks sử dụng các quy tắc phân tích cú pháp để quét toàn bộ lịch sử lưu trữ Git và tìm kiếm các chuỗi ký tự phù hợp với các mẫu thông tin nhạy cảm được định nghĩa trước. Các quy tắc này bao gồm các mẫu như định dạng số thẻ tín dụng, mã thông báo truy cập API, mật khẩu, khóa SSH và nhiều loại thông tin nhạy cảm khác. Khi Gitleaks tìm thấy các chuỗi phù hợp, nó sẽ cung cấp cho người dùng cảnh báo và chỉ ra vị trí của thông tin nhạy cảm trong lịch sử lưu trữ.

Gitleaks được viết bằng Go và có thể chạy trên nhiều nền tảng khác nhau. Nó cung cấp các tùy chọn cấu hình linh hoạt, cho phép người dùng chỉ định các quy tắc tùy chỉnh, loại trừ các tệp tin cụ thể, hoặc thực hiện các tác vụ quét phức tạp hơn như quét toàn bộ tổ chức lưu trữ trên GitHub hoặc GitLab.

Sử dụng Gitleaks, các nhà phát triển và quản lý dự án có thể phát hiện sớm và loại bỏ các thông tin nhạy cảm không đáng có trong kho lưu trữ Git của họ, giúp nâng cao bảo mật và tránh rủi ro liên quan đến việc tiết lộ thông tin nhạy cảm.

Tích hợp gitleaks với dự án trên gitlab

Để có thể sử dụng CI&CD project phải được kích hoạt để chạy một gitlab-runner, trong trường hợp này bạn có thể cài một server gitlab-runner riêng hoặc đơn giản hơn request tài nguyên dự án thông qua G-Help Link request hoặc liên hệ ChatOps thienlv2@runsystem.net.

Cấu hình file CI&CD

Sử dụng file .gitlab-ci.yml dưới đây để thực hiện chạy quét gitleaks tự động mỗi khi có merger request mới.

gitleaks:
stage: gitleaks
image:
name: zricethezav/gitleaks:latest
entrypoint: [""]
script:
- git config --global --add safe.directory $CI_PROJECT_DIR
- gitleaks detect -v ./ | tee gitleaks-result.log
allow_failure: true
artifacts:
when: always # or 'on_failure'
paths:
- ./gitleaks-result.log
expire_in: 1 week

Kiểm tra kết quả chạy gitleaks

Để kiểm tra kết quả chạy gitleaks bạn hãy vào gitlab của dự án, lựa chọn phần menu CICD và kiểm tra các trong trong Pipeline. Dưới đây là ví dụ:

Trong đó:

  • Chấm than: biểu thị failed nhưng vẫn chạy job khác tiếp do ta đã setup allow_failure: true ở file .gitlab-ci.yml
  • Dấu tích xanh: biểu thị cho việc không có vấn đề gì liên quan đến leak
  • Dấu đỏ: phát hiện ra vấn đề về leak data và đã setup không chạy job khác nếu job gitleak failed

Chúng ta có thể xem chi tiết gitleaks hơn bằng cách click vào job trên màn hình CI/CD. Nội dung của gitleaks sẽ chứa thôgn tin như: file nào chứa data leaks, ai là người commit, tổng số leaks tìm thấy...

Xóa thông tin nhạy cảm trong code sử dụng BFG Repo-Cleaner

Source code chứa những thông tin nhạy cảm như key của các dịch vụ cloud aws, gcp.. ẩn chứa nhiều nguy hiểm tiềm tàng.

Chúng ta cần loại bỏ hoàn toàn những thông tin nhạy cảm này ra khỏi source code trên toàn bộ commit cũng như trên toàn bộ branch. Để làm được điều đó chúng ta sử dụng bộ công cụ BFG Repo-Cleaner Github code.

Bộ công cụ này cho phép:

  • Removing Crazy Big Files
  • Removing Passwords, Credentials & other Private data

Cài đặt

Với Macos sử dụng brew để cài đặt:

brew install bfg

Với linux/windows sử dụng môi trường Java và tải file .jar để chạy:

Yêu cầu: The Java Runtime Environment (Java 8 or above - BFG v1.12.16 was the last version to support Java 7, v1.12.3 was the last version to support Java 6) Link tải JAR: https://rtyley.github.io/bfg-repo-cleaner/

Sử dụng

Thực hiện việc xóa data nhạy cảm hoàn toàn thực hiện trên local repository, sau khi thực hiện xóa xong ta phải force push lên remote repository

java -jar bfg.jar --replace-text passwords.txt  /path/to/local_repo

Trong đó file passwords.txt chứa những cụm leaks data tìm được thông qua gitleaks. Sau khi remove xong những cụm data đó sẽ được thay thế bằng ***REMOVED***.

Sử dụng command sau để cập nhật lại lịch sử commit tại git local:

git reflog expire --expire=now --all && git gc --prune=now --aggressive

Chi tiết sử dụng và cài đặt tham khảo thêm tại: https://rtyley.github.io/bfg-repo-cleaner/

Cập nhật lại lịch sử commit trên remote repository

Sau khi tiến hành xóa dữ liệu nhạy cảm thì việc cần làm tiếp theo là update những thay đổi này lên remote repository, cụ thể ở đây là trên hệ thống gitlab công ty. Dưới đây là các bước sẽ thực hiện:

  1. Loại bỏ branch ra khỏi protected branches

    Vào setting của project và chọn phần setting Repository. Ví dụ main là branch cần được cập nhật việc xóa dữ liệu nhạy cảm và Click vào nút unprotect. ./img/unprotect.png

  2. Tiến hành xóa branch cũ.

    Sau khi unprotect branch, chúng ta có thể xóa branch đó trên gitlab. Chú ý có thể đổi default branch để branch này không còn là default, khi đó việc xóa sẽ không gặp những lỗi khác. Như hình ảnh dưới đây chúng ta có thể xóa branch main ./img/delete.png

  3. Từ local force push branch mới lên

    git push origin main
  4. Thiết lập lại protect branch

    Chúng ta lại tiến hành setting default branchprotected branches lại cho branch mới này.

Sau khi thực hiện các bước trên lịch sử commit sẽ được cập nhật, dữ liệu nhạy cảm sẽ hoàn toàn bị xóa.