Tự động hóa bảo mật hạ tầng: Hướng dẫn thực hành Nuclei

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

Tại sao kiểm tra thủ công không còn hiệu quả

Việc triển khai một máy chủ Linux mới mang lại cảm giác rất tuyệt, nhưng “tuần trăng mật” đó sẽ kết thúc ngay khi bạn đối mặt với đợt kiểm tra bảo mật đầu tiên. Sau khi chứng kiến log hệ thống tràn ngập hơn 5.000 lần thử đăng nhập SSH thất bại chỉ trong một đêm, tôi đã ngừng dựa dẫm vào may mắn. Kiểm tra thủ công cực kỳ mệt mỏi. Nếu bạn quản lý nhiều hơn hai hoặc ba máy, sai sót do con người không chỉ là khả năng — đó là một điều chắc chắn về mặt toán học. Đó là lý do tại sao tôi tích hợp Nuclei vào bộ công cụ hàng ngày của mình.

Nuclei là một công cụ quét lỗ hổng dựa trên template (mẫu) cực nhanh, hỗ trợ gửi yêu cầu qua các giao thức như HTTP, DNS và TCP. Không giống như các công cụ doanh nghiệp nặng nề khiến bạn choáng ngợp với giao diện phức tạp, Nuclei coi bảo mật như mã nguồn (security as code). Nó được hỗ trợ bởi một cộng đồng thường xuyên phát hành các template lỗ hổng chỉ vài giờ sau khi một CVE mới được công bố. Hiện tại, dự án này sở hữu hơn 7.000 template đã được xác minh, từ các kiểm tra phiên bản đơn giản đến các chuỗi khai thác đa bước phức tạp.

Bắt đầu nhanh: Lần quét đầu tiên trong chưa đầy 5 phút

Triển khai Nuclei trên một máy Linux rất đơn giản. Vì được viết bằng Go, nó chạy dưới dạng một tệp thực thi (binary) di động duy nhất.

Bước 1: Cài đặt

Đối với các hệ thống đã cấu hình sẵn Go toolchain, hãy sử dụng:

go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei @latest

Nếu bạn muốn cài đặt trực tiếp, script chính thức sẽ xử lý các công việc nặng nhọc:

curl -sL https://raw.githubusercontent.com/projectdiscovery/nuclei/master/install.sh | bash

Bước 2: Đồng bộ thư viện Template

Nuclei chỉ thông minh khi có các template đi kèm. Tải xuống các bản kiểm tra mới nhất đã được cộng đồng xác minh bằng cách chạy:

nuclei -update-templates

Bước 3: Bắt đầu quét

Trỏ công cụ vào tên miền hoặc IP của bạn để săn tìm các lỗ hổng rõ ràng:

nuclei -u http://your-server-ip.com

Kết quả đầu ra được phân loại màu theo mức độ nghiêm trọng. Bạn sẽ thấy ngay lập tức nếu máy chủ của mình đang rò rỉ thông tin nhạy cảm hoặc chạy phần mềm lỗi thời được đánh dấu là Medium (Trung bình), High (Cao), hoặc Critical (Nghiêm trọng).

Bên dưới hệ thống: Template và Logic

Sức mạnh thực sự của Nuclei nằm ở tính minh bạch. Các công cụ quét truyền thống thường là “hộp đen”, nhưng bạn có thể mở bất kỳ tệp YAML nào của Nuclei để xem chính xác cách một bài kiểm tra hoạt động. Mỗi template xác định một yêu cầu cụ thể và một bộ so khớp (matcher) để xác định lỗ hổng trong phản hồi trả về.

Phân tích một quy trình kiểm tra

Truy cập vào ~/nuclei-templates/ để khám phá các danh mục như cvesexposed-panels. Một bài kiểm tra điển hình trông như thế này:

id: exposed-git-directory
info:
  name: Thư mục Git bị lộ
  severity: medium
requests:
  - method: GET
    path:
      - "{{BaseURL}}/.git/config"
    matchers:
      - type: word
        words:
          - "[core]"

Logic đơn giản này cho phép bạn viết các quy tắc tùy chỉnh cho các chính sách cụ thể của công ty chỉ trong vài phút. Bạn không chỉ quét các lỗi công khai; bạn đang thực thi các tiêu chuẩn kiến trúc của riêng mình.

Bộ lọc thông minh

Chạy hơn 7.000 bài kiểm tra mỗi lần là quá mức cần thiết. Nếu bạn chỉ quan tâm đến các lỗi thực thi mã từ xa (RCE) nghiêm trọng, hãy sử dụng thẻ mức độ nghiêm trọng (severity tags):

nuclei -u https://example.com -severity critical,high

Để kiểm tra riêng việc thắt chặt bảo mật máy chủ (hardening), hãy nhắm mục tiêu vào danh mục lỗi cấu hình:

nuclei -u https://example.com -t misconfiguration/

Quy trình nâng cao: Tự động hóa như một chuyên gia

Các lệnh thủ công chỉ dành cho việc thử nghiệm. Môi trường chuyên nghiệp đòi hỏi sự tự động hóa. Tôi sử dụng một cron job đơn giản để chạy quét hàng tuần và gửi kết quả cho nhóm của mình.

Xử lý nhiều mục tiêu

Nếu bạn quản lý một loạt các IP nội bộ hoặc các subdomain thử nghiệm, hãy liệt kê chúng trong targets.txt:

nuclei -l targets.txt -o results.txt

JSON Output cho Data Pipelines

Để phục vụ báo cáo chuyên sâu, hãy xuất kết quả sang định dạng JSON. Điều này cho phép bạn sử dụng jq để lọc kết quả hoặc đưa chúng vào một bảng điều khiển (dashboard) tập trung.

nuclei -u https://example.com -json -o results.json

Tích hợp CI/CD

Tích hợp Nuclei vào GitHub Actions đảm bảo rằng mọi bản triển khai đều được quét trước khi chính thức hoạt động. Điều này giúp phát hiện lỗ hổng trong môi trường staging trước khi chúng tiếp cận môi trường production. Một bước cơ bản trông như sau:

- name: Chạy quét Nuclei
  uses: projectdiscovery/nuclei-action @main.py
  with:
    target: https://example.com

Mẹo thực tế khi sử dụng trong môi trường thật

Dữ liệu rất quan trọng, nhưng nhiễu thông tin là kẻ thù. Sau khi chạy Nuclei trên hàng chục môi trường production, tôi khuyên bạn nên điều chỉnh những điểm sau để tránh “mệt mỏi vì bảo mật”:

  • Tôn trọng phần cứng: Nuclei cực kỳ nhanh. Các thiết lập mặc định có thể dễ dàng làm quá tải một VPS nhỏ chỉ có 1vCPU. Hãy sử dụng tham số -rate-limit 10 để kiểm soát mức độ sử dụng CPU.
  • Loại bỏ cảnh báo giả: Nếu một template cụ thể kích hoạt cảnh báo nhầm trên hệ thống của bạn, hãy thêm nó vào tệp .nuclei-ignore để giữ cho báo cáo luôn sạch sẽ.
  • Phát hiện Out-of-Band: Một số lỗ hổng, như Log4j, không xuất hiện trong phản hồi tiêu chuẩn. Nuclei sử dụng interactsh để tự động bắt các lỗ hổng “mù” (blind vulnerabilities) này.
  • Cập nhật hàng ngày: Thiết lập một cron job để chạy nuclei -update-templates mỗi sáng. Điều này đảm bảo bạn được bảo vệ trước các mã khai thác vừa được phát hiện chỉ vài giờ trước.

Bảo mật hạ tầng là một mục tiêu luôn thay đổi. Bằng cách tự động hóa việc quét, bạn sẽ ngừng việc phải chạy đuổi theo các vấn đề và bắt đầu xây dựng hệ thống với sự tự tin. Thà có một robot kiểm tra cửa sau cho bạn còn hơn là đợi đến một thông báo lúc 3 giờ sáng rằng dữ liệu của bạn đã biến mất.

Share: