Nền tảng An toàn Web & Cơ chế Trình duyệt
15/20
Bài 15 / 20~14 phútNhập môn Threat Modeling & OWASP Sơ cấpMiễn phí… lượt xem

Threat Modeling: Mô hình hóa mối đe dọa với STRIDE

Phân tích ranh giới tin cậy (trust boundaries), lập sơ đồ luồng dữ liệu (DFD) và định vị các mối đe dọa bảo mật theo khung STRIDE của Microsoft.

TL;DR: Threat Modeling (mô hình hóa mối đe dọa) là phương pháp luận kỹ thuật giúp đội ngũ phát triển nhận diện có hệ thống các nguy cơ an ninh trước khi hệ thống được triển khai. Bằng việc phác thảo Data Flow Diagram (DFD), kỹ sư xác định các ranh giới tin cậy (trust boundaries) — nơi dữ liệu di chuyển từ môi trường ít tin cậy hơn (như trình duyệt của người dùng) sang môi trường có quyền hạn cao hơn (như microservice nội bộ hoặc cơ sở dữ liệu). Khung phân loại STRIDE chia các rủi ro thành sáu họ: Giả mạo (Spoofing), Can thiệp (Tampering), Chối bỏ (Repudiation), Tiết lộ thông tin (Information Disclosure), Từ chối dịch vụ (Denial of Service), và Leo thang đặc quyền (Elevation of Privilege).

1. Trust Boundary là gì và tại sao nó quyết định sự sống còn của kiến trúc Web?

Ở module trước, khi nghiên cứu về 01-same-origin-policy-sop và 01-giao-thuc-http-duoi-lang-kinh-bao-mat, chúng ta đã thấy rằng môi trường máy khách (trình duyệt, ứng dụng mobile, công cụ curl) là hoàn toàn nằm ngoài tầm kiểm soát của bạn. Bất kỳ ai cũng có thể mở Burp Suite để chỉnh sửa từng byte của gói tin HTTP.

Trong Threat Modeling, khái niệm quan trọng nhất là Ranh giới Tin cậy (Trust Boundary). Đó là đường ranh giới vô hình ngăn cách hai thực thể có mức độ tin cậy hoặc quyền hạn khác nhau:

  • Client (Untrusted): Máy của người dùng, JavaScript chạy trên browser, mạng Internet công cộng.
  • Server (Trusted): Ứng dụng backend chạy trong mạng riêng (VPC), cơ sở dữ liệu, dịch vụ lưu trữ bí mật (Key Vault).

Mô hình STRIDE và ranh giới tin cậy

Hình 3.1: Dữ liệu di chuyển qua ranh giới tin cậy Trust Boundary bắt buộc phải chịu kiểm định an toàn nghiêm ngặt.

[!IMPORTANT] Quy tắc vàng của an toàn thông tin: Tuyệt đối không bao giờ tin tưởng dữ liệu đến từ phía bên kia của Trust Boundary mà không qua xác thực (Authentication), phân quyền (Authorization) và kiểm tra tính hợp lệ (Validation).

2. 6 họ rủi ro theo khung STRIDE bao gồm những gì?

Được phát triển bởi Microsoft từ những năm 2000, khung STRIDE là một tiêu chuẩn vàng giúp các kỹ sư phần mềm dễ dàng ghi nhớ và phân loại mọi hình thức tấn công vào 6 nhóm:

Chữ cáiTên mối đe dọa (Threat)Định nghĩa kỹ thuậtThuộc tính bảo mật bị xâm phạm
SSpoofing (Giả mạo)Mạo danh một người dùng, hệ thống hoặc thành phần khác để giành quyền truy cập trái phép.Authentication (Tính xác thực)
TTampering (Can thiệp/Sửa đổi)Thay đổi dữ liệu trên đường truyền mạng hoặc trong bộ nhớ cơ sở dữ liệu mà không có sự cho phép.Integrity (Tính toàn vẹn)
RRepudiation (Chối bỏ)Thực hiện một hành vi trái phép nhưng hệ thống không có chứng cứ nhật ký (log) để quy kết trách nhiệm.Non-repudiation (Tính không thể chối bỏ)
IInformation Disclosure (Lộ lọt thông tin)Dữ liệu nhạy cảm bị tiết lộ cho những người không có quyền xem (thông qua lỗi API, log, hoặc thông báo lỗi hệ thống).Confidentiality (Tính bí mật)
DDenial of Service (Từ chối dịch vụ)Làm cạn kiệt tài nguyên máy chủ (CPU, RAM, kết nối database), khiến người dùng hợp pháp không thể sử dụng dịch vụ.Availability (Tính sẵn sàng)
EElevation of Privilege (Leo thang đặc quyền)Người dùng bình thường chiếm đoạt được quyền quản trị viên (Admin) hoặc thực thi mã ngoài thẩm quyền.Authorization (Tính phân quyền)

Hãy thử phân tích một tình huống thực tế để nhận diện đúng mối đe dọa:

Dự đoán & Phản xạ (Predict)

Một hacker sử dụng Burp Suite để đổi giá trị trường 'price': 1000000 thành 'price': 1 trong body của gói tin JSON khi gọi API đặt hàng /api/checkout. Mối đe dọa này thuộc nhóm nào trong mô hình STRIDE?

3. Làm thế nào để lập sơ đồ luồng dữ liệu (DFD) nhận diện điểm yếu?

Để áp dụng STRIDE hiệu quả, bạn không cần phải đọc từng dòng mã lệnh phức tạp. Thay vào đó, hãy vẽ một sơ đồ DFD cấp 1 (Level 1 DFD) gồm 4 thành phần cơ bản:

  1. External Entity (Thực thể bên ngoài): Người dùng, trình duyệt web, hệ thống webhook của bên thứ ba (đại diện bằng hình chữ nhật).
  2. Process (Quy trình xử lý mã nguồn): Node.js Express server, Go Chi API handler, worker xử lý thanh toán (đại diện bằng hình tròn hoặc elip).
  3. Data Store (Kho lưu trữ dữ liệu): PostgreSQL, Redis cache, AWS S3 bucket (đại diện bằng hai đường thẳng song song).
  4. Data Flow (Luồng dữ liệu): Các mũi tên biểu thị hướng di chuyển của dữ liệu qua giao thức HTTP, gRPC, hoặc TCP socket.

Mỗi khi một mũi tên Data Flow cắt ngang qua một đường nét đứt đỏ (Trust Boundary), hãy áp dụng bảng câu hỏi STRIDE:

  • Luồng này có thể bị giả mạo nguồn gốc không? (S)
  • Payload có thể bị sửa đổi trên đường truyền không? (T)
  • Server có ghi nhật ký kiểm toán (audit trail) cho thao tác này không? (R)
  • Dữ liệu trả về có làm lộ số căn cước hoặc mật khẩu không? (I)
  • Kích thước payload có thể làm tràn bộ nhớ không? (D)
  • Quyền hạn của người gọi có được kiểm tra chặt chẽ không? (E)

4. Vì sao thói quen tin tưởng dữ liệu Client lại tạo ra lỗ hổng Mass Assignment?

Hãy xem xét một đoạn mã Node.js backend điển hình mắc phải sai lầm nghiêm trọng về ranh giới tin cậy:

JavaScript
// Express route cap nhat thong tin nguoi dung
app.post('/api/users/profile', async (req, res) => {
  const userId = req.session.userId;
  const updateData = req.body; // Client gui payload tuy y

  // Cap nhat truc tiep toan bo thuoc tinh vao co so du lieu
  await db.user.update({
    where: { id: userId },
    data: updateData
  });

  return res.json({ success: true });
});

Đoạn mã trên mắc lỗi thiết kế Mass Assignment dẫn tới mối đe dọa Elevation of Privilege (E). Dù người dùng đã xác thực (AuthN), việc tin tưởng toàn bộ payload updateData từ client cho phép kẻ tấn công tự ý chèn thêm thuộc tính role: 'admin' để nâng quyền tài khoản mà không bị ngăn chặn.

Phương pháp khắc phục chuẩn mực là chỉ chấp nhận các trường an toàn được định nghĩa trước (Field Whitelisting / Data Transfer Object - DTO validation) thay vì gán trực tiếp dữ liệu từ client vào cơ sở dữ liệu.

5. Tổng kết: Từ mô hình lý thuyết đến phòng thủ thực chiến

Threat Modeling với mô hình STRIDE cung cấp cho bạn một "ống nhòm tầm xa" để phát hiện các lỗ hổng ngay từ bản vẽ kiến trúc. Ở các bài học tiếp theo, chúng ta sẽ đi sâu vào cơ chế kỹ thuật chi tiết của ba mối đe dọa kinh điển nhất trên web:

Bài tiếp theo: 02-xss-so-cap-reflected-va-stored

Tự kiểm tra
0/6 câu đã trả lời
  1. Q1
    Khái niệm 'Trust Boundary' (Ranh giới tin cậy) trong Threat Modeling đại diện cho điều gì?
  2. Q2
    Mối đe dọa 'Repudiation' (Chối bỏ trách nhiệm) trong mô hình STRIDE vi phạm nguyên tắc an ninh nào?
  3. Q3
    Kẻ tấn công liên tục gửi các request có kích thước payload cực lớn nhằm làm cạn kiệt dung lượng đĩa và RAM của máy chủ. Đây là ví dụ của mối đe dọa nào trong STRIDE?
  4. Q4
    Tại sao nên thực hiện Threat Modeling ngay từ khâu thiết kế kiến trúc (Shift-Left) thay vì chờ đợi kiểm thử sau khi viết xong mã nguồn?
  5. Q5
    Trong sơ đồ luồng dữ liệu (DFD), hình chữ nhật thường biểu diễn cho thành phần nào?
  6. Q6
    Lỗ hổng Mass Assignment khi client tự ý gán thuộc tính role='admin' vào request body dẫn tới mối đe dọa nào trong STRIDE?

Bài này có giúp bạn hiểu bản chất không?

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

XSS Sơ cấp: Giải mã Reflected và Stored XSS