Vì sao threat modeling thất bại, và cách làm nó không thất bại
Threat modeling có tiếng là một hoạt động tốn thời gian mà không ra gì, và tiếng đó xứng đáng với cách nó thường được làm. Ba cách nó thất bại:
| Cách thất bại | Biểu hiện |
|---|---|
| Phạm vi quá lớn | "Threat model cho cả hệ thống" — bốn giờ, một tài liệu 30 trang, không ai đọc |
| Ra một tài liệu thay vì ra việc | Danh sách mối đe doạ, không có ticket nào, không có ai chịu trách nhiệm |
| Làm quá muộn | Sau khi code đã viết, nên mọi phát hiện là một lần refactor thay vì một quyết định |
Cách làm nó không thất bại là đảo cả ba: một tính năng, bốn mươi phút, đầu ra là ticket.
STRIDE là một danh sách gợi ý sáu loại mối đe doạ. Giá trị của nó không phải sự đầy đủ mà là nó buộc bạn nghĩ theo sáu hướng thay vì một — và hướng bạn hay bỏ là hướng chưa từng gây sự cố cho bạn.
| Chữ | Mối đe doạ | Câu hỏi cụ thể | Biện pháp |
|---|---|---|---|
| Spoofing | Giả danh | "Ai có thể tự nhận là người khác ở đây?" | Xác thực |
| Tampering | Sửa dữ liệu | "Cái gì có thể bị sửa trên đường?" | Toàn vẹn, ký, tham số hoá |
| Repudiation | Phủ nhận | "Nếu họ nói không làm, tôi chứng minh được không?" | Audit log |
| Information disclosure | Lộ thông tin | "Cái gì lộ ra mà không nên?" | Phân quyền, mã hoá, thông báo lỗi |
| Denial of service | Từ chối dịch vụ | "Một request làm gì tốn nhất?" | Giới hạn, rate limit, timeout |
| Elevation of privilege | Leo thang quyền | "Ai làm được nhiều hơn họ nên làm?" | Phân quyền |
Hai chữ hay bị bỏ nhất là R và D, và mỗi cái bị bỏ vì một lý do khác nhau:
R (Repudiation) bị bỏ vì nó không phải một cuộc tấn công — nó là một tranh chấp. Câu hỏi "nếu khách hàng nói họ không xoá dữ liệu đó, tôi chứng minh được không?" không nghe như một câu hỏi bảo mật, nhưng nó là câu hỏi mà một audit log tồn tại để trả lời. Đây là chữ dẫn tới bảng security_event ở bài detect-and-alert.
D (DoS) bị bỏ vì nó cảm giác là vấn đề của hạ tầng. Nhưng câu hỏi ở tầng ứng dụng rất cụ thể và rất hữu ích: "một request làm gì tốn nhất?" Một endpoint export không phân trang, một truy vấn không có LIMIT, một regex bị catastrophic backtracking — cả ba là DoS ở tầng ứng dụng mà không load balancer nào chặn được.
Bình luận
Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.
Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.
Đang tải bình luận…