Sử dụng AI để tìm lỗi phân quyền
Các chương trình bug bounty đang thay đổi. Một số chương trình đã ngừng trả thưởng. Những chương trình khác cắt giảm mức chi trả tới 80%. Lý do không phải vì AI tìm thấy quá nhiều lỗi. Lý do là vì AI tìm thấy quá nhiều lỗi sai. Các đội ngũ triage đang ngập trong các báo cáo chất lượng thấp.
Trong môi trường này, kỹ năng quan trọng nhất không phải là tìm lỗi. Mà là chứng minh rằng một lỗi không tồn tại. Bạn phải tìm ra những kết quả âm tính (negatives) chính xác.
Tôi sử dụng một phương pháp hai giai đoạn cho các mục tiêu có sẵn mã nguồn (source-available).
Giai đoạn 1: Fan-out (Phân tán) Sử dụng các mô hình AI giá rẻ để đọc mã nguồn. Chia nhỏ mục tiêu thành các phần nhỏ. Yêu cầu mô hình tìm các bất biến (invariants) bị phá vỡ. Tìm kiếm những nơi mà một đối tượng được tải lên mà không có bước kiểm tra chủ sở hữu (owner check) hoặc nơi một cổng bảo mật bị bỏ qua. Mục tiêu là đạt độ triệu hồi (recall) cao. Hãy chuẩn bị tinh thần cho nhiều sai sót.
Giai đoạn 2: Adversarial Verification (Xác minh đối kháng) Sử dụng một mô hình đắt tiền, có khả năng suy luận cao để loại bỏ các ứng viên. Giả định rằng mọi ứng viên đều bị bác bỏ. Một ứng viên chỉ được giữ lại nếu bạn có thể trích dẫn các dòng mã cụ thể. Bạn phải chứng minh được đường dẫn đó có thể truy cập được và không có bước kiểm tra nào khác ngăn chặn nó.
Kết quả giá trị nhất là một danh sách các lời bác bỏ. Danh sách này giúp xây dựng niềm tin với các đội ngũ triage.
Tôi đã thử nghiệm với Ory Kratos, một máy chủ định danh mã nguồn mở. Tôi đã xem xét luồng cài đặt (settings flow). Khu vực này xử lý việc thay đổi mật khẩu và cập nhật email. Một sai sót duy nhất ở đây có thể dẫn đến việc chiếm đoạt tài khoản (account takeover).
Giai đoạn đầu tiên đã tìm thấy một lỗi đầy hứa hẹn. Trong chiến lược OIDC, một container cụ thể thiếu liên kết danh tính (identity binding). Nếu bạn chỉ tìm kiếm các bước kiểm tra bị thiếu, bạn sẽ báo cáo đây là một lỗi có mức độ nghiêm trọng cao.
Đó sẽ là một sai lầm.
Việc thiếu liên kết này không thể khai thác được. Hệ thống lấy danh tính mục tiêu từ một cookie phiên (session cookie) đang hoạt động hoặc một token đã được ký. Các đặc tính của container không bao giờ áp dụng cho mục tiêu ghi (write target) thực tế. Thiết kế này vẫn đảm bảo an toàn.
Báo cáo lỗi này sẽ gây lãng phí thời gian và làm tổn hại đến uy tín của bạn. Giá trị mà tôi mang lại chính là sự tự tin để không gửi báo cáo đó.
Khi tôi sử dụng cùng một phương pháp này trên một mục tiêu khác, tôi đã tìm thấy một lỗi thực sự. Một điểm truy cập thay thế đã bỏ lỡ một bước kiểm tra phân quyền mà đường dẫn chính có thực hiện. Một người dùng đã bị thu hồi quyền vẫn có thể xâm nhập qua một "cửa sau" (side door). Lỗi này có tác động cao và không thể phát hiện được bởi các trình quét tiêu chuẩn.
Những người gác cổng đang xây dựng các bức tường để chống lại sự bùng nổ về số lượng. Để thành công, công việc AI của bạn phải cực kỳ chặt chẽ. Hãy dùng AI để đọc nhiều mã hơn mức một con người có thể làm. Sau đó, hãy dùng AI để chứng minh rằng chính bạn đã sai trước khi nhấn nút gửi.
Hãy tập trung vào tín hiệu (signal), đừng tập trung vào số lượng (volume).
