XSS (Tấn công Cross-Site Scripting) là gì?
Cross-Site Scripting, hay XSS, là một lỗ hổng bảo mật trên các trang web cho phép kẻ tấn công thêm các script độc hại vào các trang web. Phần lớn các script này được viết bằng JavaScript.
Nếu ai đó truy cập một trang bị ảnh hưởng bởi XSS, trình duyệt của họ sẽ chạy script của kẻ tấn công. Điều này có thể dẫn đến việc đánh cắp cookie, chiếm đoạt phiên làm việc, hoặc thực hiện các hành động mà không có sự cho phép của người dùng.
XSS, giống như SQL Injection, thường xuyên được liệt kê trong OWASP Top 10 như một trong những lỗ hổng ứng dụng web phổ biến nhất.
XSS hoạt động như thế nào?
XSS thường nhắm vào các ứng dụng web không kiểm tra và làm sạch đầu vào của người dùng một cách đúng đắn.
Ví dụ, nếu một hộp bình luận cho phép HTML hoặc JavaScript thô mà không có bất kỳ bộ lọc nào, kẻ tấn công có thể thêm mã như sau:
<script>alert('Hacked!');</script>
Khi nạn nhân xem trang, mã độc hại sẽ chạy trong trình duyệt của họ.
Tại sao XSS quan trọng trong an ninh mạng
XSS có thể dẫn đến một vi phạm lớn hơn:
- Chiếm đoạt tài khoản (đánh cắp cookie phiên để mạo danh người dùng)
- Trộm cắp dữ liệu (thu thập dữ liệu từ các biểu mẫu như mật khẩu hoặc thẻ tín dụng)
- Tấn công lừa đảo (tiêm các biểu mẫu đăng nhập giả mạo)
- Phát tán phần mềm độc hại (chuyển hướng người dùng đến các trang web độc hại)
Các loại XSS
- XSS dựa trên DOM
- Cuộc tấn công xảy ra hoàn toàn trong trình duyệt bằng cách thao tác với Mô hình Đối tượng Tài liệu (DOM) mà không liên quan đến máy chủ.
- XSS lưu trữ
- Script độc hại được lưu trữ vĩnh viễn trên máy chủ, chẳng hạn như cơ sở dữ liệu, trang hồ sơ.
- XSS phản chiếu
- Script được phản chiếu từ máy chủ web (ví dụ, trong URL hoặc thông báo lỗi), script sẽ được thực thi khi nạn nhân nhấp vào liên kết được tạo bởi kẻ tấn công.
Cách ngăn chặn XSS
- Làm sạch đầu vào & mã hóa đầu ra: luôn làm sạch dữ liệu đầu vào của người dùng trước khi xử lý, chuyển đổi đầu vào của người dùng thành định dạng an toàn
- Sử dụng Chính sách Bảo mật Nội dung (CSP): hạn chế những script nào có thể được thực thi trong trình duyệt.
- Tránh sử dụng eval() và JavaScript nội tuyến: để giảm thiểu rủi ro tiêm nhiễm.
- Kiểm tra bảo mật (DAST/IAST): chạy kiểm tra bảo mật để phát hiện lỗ hổng sớm
Ví dụ trong trường hợp thực tế - Sâu Samy (MySpace, 2005)
Điều gì đã xảy ra: Samy Kamkar đã công bố một hồ sơ MySpace chứa một tải trọng XSS lưu trữ. Khi người dùng khác xem hồ sơ, tải trọng này chạy trong trình duyệt của họ, nó (a) thêm Samy làm bạn, (b) thêm cụm từ “Samy là anh hùng của tôi” vào hồ sơ của họ, và (c) tự sao chép vào trang hồ sơ của những người dùng đó.
Tác động: Con sâu tự lan truyền đến ~1 triệu người dùng trong vòng ~20 giờ, buộc MySpace phải tạm thời ngừng hoạt động.
Tại sao nó hoạt động: MySpace cho phép HTML/thuộc tính không được thoát trong các trường hồ sơ, cho phép thực thi kịch bản lưu trữ trong trình duyệt của khách truy cập.
Bài học / khắc phục: Mã hóa đầu ra đúng cách, làm sạch đầu vào, loại bỏ HTML trong các trường hồ sơ, và vá lỗi nhanh chóng. Samy sau đó đã phải đối mặt với hậu quả pháp lý, và MySpace đã triển khai các bộ lọc.
Thuật ngữ liên quan
- SQL Injection
- DAST (Kiểm tra bảo mật ứng dụng động)
- OWASP Top 10
- CSRF (Giả mạo yêu cầu giữa các trang)