Scaling our security detection pipeline with Sigma

Bài tóm tắt Monzo 2022 3. Quy mô lớn Độ khó: Trung bình

Monzo · 2022 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Kiểm soát bảo mật gồm phòng ngừa (mật khẩu, 2FA) và phát hiện (cảnh báo đăng nhập từ thiết bị lạ); phòng ngừa có thể thất bại nên cần detection rule.
  • 2019: đội security chỉ khoảng 12 người, phần lớn là engineer, nên tái dùng đúng mẫu của toàn Monzo: microservice Go nhận audit event (ví dụ từ GitHub), gửi một bản vào kho lâu dài và một bản vào service cảnh báo; mỗi rule là một hàm Go xử lý từng event, nghi ngờ thì mở task cho người xem. Ưu điểm: mẫu đã chứng minh scale được, engineer quen ngôn ngữ, dùng sẵn thư viện metric/log.
  • 2022: đội gần 50 người với nhiều vai trò. Theo Monzo, thiết kế cũ không theo kịp: analyst (người duyệt alert, thường thấy rule cần thêm nhất) không tự viết rule được; rule đọc từ hàng đợi nên không chạy thử trên dữ liệu lịch sử, phải deploy ở "test mode" trước; rule viết bằng Go khó phân tích để trả lời "đã có rule cho hành vi này chưa", "rule nào phụ thuộc nguồn log này".

Thay đổi chính

  • Đổi ngôn ngữ rule sang Sigma: YAML, chuyên cho detection, giàu metadata (tag, logsource) dễ phân tích, không gắn với một SIEM cụ thể (khác Elastalert gắn với Elasticsearch).
  • Không dựng SIEM để thử: viết thư viện sigma-go đánh giá tập con Sigma cần dùng, thay logic Go trong chính các service cảnh báo cũ. Kiến trúc không đổi, nên nếu Sigma không hợp thì chỉ cần xoá code.
  • Bù lại CI đã mất khi rời Go: sigmafmt (lint/format) và sigma-test (unit test rule nhờ sigma-go); quy trình PR → check tự động → một người Security duyệt → merge là tự deploy.
  • Rule mới mặc định viết bằng Sigma, rule cũ đang port dần; phần lớn rule mới do analyst viết.

Vì sao

  • Mục tiêu là rút thời gian từ khi thấy kỹ thuật tấn công mới tới khi có rule chạy, và để người gần vấn đề nhất tự viết.
  • Tách phần bí mật (kỹ thuật và chữ ký mà rule tìm) khỏi phần máy chạy nên công cụ được mở mã nguồn.
  • Việc tiếp theo (2022): đánh giá rule mới trên dữ liệu lịch sử trước khi bật.

Bài học cho SWE

  • Rule dạng dữ liệu (DSL khai báo) thay vì code: phân tích được độ phủ, người không phải engineer viết được, thay engine chạy được. Cùng hướng với policy phân quyền dạng dữ liệu (Figma 2024).
  • Đổi ngôn ngữ trước, giữ nguyên kiến trúc chạy: thử nghiệm rẻ và rút lui được; hạ tầng lớn (SIEM) để sau khi đã chắc.
  • Rời ngôn ngữ lập trình là mất công cụ đi kèm (lint, test, CI); phải tính phần dựng lại vào chi phí.

Liên quan