Tấn công Cross-site Request Forgery (CSRF)
Tấn công Cross-site Request Forgery (CSRF hoặc XSRF) xảy ra khi các lệnh trái phép được gửi từ phía người dùng đã được ứng dụng tin tưởng. Khác với XSS, CSRF khai thác niềm tin của ứng dụng đối với trình duyệt của người dùng.
Lỗ hổng CSRF còn được gọi là “tấn công một cú nhấp chuột” (one-click attack) hoặc “session riding”.
CSRF thường ảnh hưởng đến các ứng dụng (hoặc trang web) dựa vào danh tính người dùng. Kẻ tấn công có thể đánh lừa trình duyệt của nạn nhân để gửi yêu cầu HTTP đến một trang đích. Ví dụ: người dùng đã đăng nhập vào ứng dụng bằng cookie được lưu trong trình duyệt có thể vô tình gửi yêu cầu HTTP đến trang web tin tưởng người dùng đó, từ đó kích hoạt hành động không mong muốn.
Tấn công Server-side Request Forgery (SSRF)
SSRF là một kiểu lỗ hổng bảo mật xảy ra khi kẻ tấn công có thể thao túng ứng dụng web để gửi các yêu cầu trái phép đến các hệ thống nội bộ hoặc bên ngoài. Kẻ tấn công thường khai thác SSRF để vượt qua các kiểm soát truy cập, đánh cắp dữ liệu nhạy cảm, hoặc truy cập hệ thống mà bình thường không thể truy cập trực tiếp từ Internet.
Ví dụ: một kẻ tấn công gửi yêu cầu đến một ứng dụng web chứa URL trỏ đến hệ thống nội bộ, như máy chủ cơ sở dữ liệu. Nếu ứng dụng dễ bị SSRF, nó sẽ chuyển tiếp yêu cầu đến hệ thống đó và kẻ tấn công sẽ truy cập được dữ liệu nhạy cảm.
SSRF khó phát hiện vì thường xảy ra trong mạng tin cậy và lưu lượng trông hợp lệ. Một số cách giảm thiểu nguy cơ SSRF:
- Xác thực và lọc dữ liệu đầu vào
- Sử dụng danh sách trắng các URL được phép
- Hạn chế quyền truy cập đến các hệ thống nhạy cảm chỉ dành cho người dùng/hệ thống được phép
Tham khảo: OWASP SSRF Top 10
Hướng dẫn phòng chống: OWASP SSRF Prevention Cheat Sheet
Hướng dẫn phòng chống: OWASP SSRF Prevention Cheat Sheet
Tấn công thao túng Cookie (Cookie Manipulation Attacks)
Tấn công thao túng cookie thường được gọi là Stored DOM-based XSS. Tấn công xảy ra khi một ứng dụng dễ bị tổn thương lưu trữ dữ liệu đầu vào của người dùng và nhúng lại dữ liệu đó vào DOM (giao diện tài liệu HTML) trong phản hồi.
Kịch bản thường gặp: kẻ tấn công dùng đoạn mã JavaScript để ghi dữ liệu điều khiển được vào giá trị của cookie thông qua DOM.
Hậu quả của kiểu tấn công này phụ thuộc vào vai trò của cookie trong ứng dụng — ví dụ: nếu cookie lưu thông tin phiên, thì kẻ tấn công có thể chiếm quyền truy cập người dùng.
Race Conditions (Điều kiện cạnh tranh)
Race condition xảy ra khi hệ thống cố gắng thực hiện hai hoặc nhiều thao tác đồng thời, nhưng thành công phụ thuộc vào thứ tự thực hiện.
Kẻ tấn công khai thác lỗ hổng này bằng cách thực hiện hành động trong khoảng thời gian rất ngắn, trước khi kiểm soát an ninh có hiệu lực.
Race condition còn gọi là Time-of-Check to Time-of-Use (TOCTOU).
Ví dụ: một hệ thống quản lý bảo mật đang đẩy cấu hình mới xuống thiết bị tường lửa. Trong khoảng thời gian tái tạo lại danh sách điều khiển truy cập, kẻ tấn công có thể chớp thời cơ để vượt qua các kiểm soát bảo mật.
Ví dụ minh họa đơn giản:
Một chương trình cho phép nhiều luồng ghi dữ liệu vào một tệp và dùng bộ đếm để theo dõi số luồng hoàn tất. Nếu hai luồng cùng tăng bộ đếm đồng thời, nhưng ghi dữ liệu chưa xong, rồi lại giảm bộ đếm hai lần, tệp có thể bị đóng sớm dẫn đến mất dữ liệu.
👉 Giải pháp: Sử dụng cơ chế đồng bộ như mutex hoặc semaphore để đảm bảo chỉ một luồng được truy cập tài nguyên chia sẻ tại một thời điểm.
API không được bảo vệ (Unprotected APIs)
API (Giao diện lập trình ứng dụng) ngày nay được sử dụng rộng rãi trong hầu hết các ứng dụng hiện đại. Tuy nhiên, nhiều API thiếu kiểm soát đầy đủ và khó giám sát, dẫn đến nguy cơ bảo mật cao.
Một số chuẩn API phổ biến: ■ SOAP (Simple Object Access Protocol)
- Giao thức truy cập dịch vụ web dựa trên chuẩn XML.
- Do Microsoft phát triển, thường được dùng trong các ứng dụng cũ.
- Mô tả dịch vụ bằng tài liệu XSD.
- Tài liệu: SOAP Specification
- Dễ sử dụng hơn SOAP, sử dụng JSON thay vì XML.
- Dễ tài liệu hóa nhờ chuẩn Swagger hoặc OpenAPI.
- Tài liệu: OpenAPI
- Ngôn ngữ truy vấn API mạnh mẽ, phổ biến với ứng dụng di động và bảng điều khiển.
- Hỗ trợ nhiều ngôn ngữ lập trình.
- Tài liệu: GraphQL
Cả SOAP và REST đều dùng giao thức HTTP. Tuy nhiên, SOAP tuân theo cấu trúc nghiêm ngặt hơn.
Tài liệu API - con dao hai lưỡi
Tài liệu API cung cấp thông tin quan trọng không chỉ cho nhà phát triển, mà cũng có thể bị kẻ tấn công lợi dụng.
Các tài liệu thường gặp:
- Swagger/OpenAPI Specification (OAS): swagger.io | OAS Spec trên GitHub
- WSDL (Web Services Description Language): wsdl20-primer
- WADL (Web Application Description Language): WADL trên W3C