Cross-Site Scripting (XSS) là gì?
Cross-Site Scripting (XSS) là một loại tấn công an ninh nhắm vào các ứng dụng web. Kẻ tấn công chèn các đoạn mã nguy hiểm vào trang web. Khi người dùng truy cập trang web đó, họ sẽ không biết rằng đoạn mã độc này sẽ được thực thi trong trình duyệt của họ.
Thay vì tấn công trực tiếp người dùng, XSS tận dụng những trang web có lỗ hổng bảo mật. Khi người dùng tương tác với các trang web đó. Đoạn mã độc sẽ được kích hoạt. Điều này có thể dẫn đến việc đánh cắp thông tin quan trọng. Chiếm đoạt phiên đăng nhập của người dùng, và nhiều vấn đề khác.
Do được hỗ trợ rộng rãi trên nhiều trình duyệt và nền tảng web và có thể được tạo ra bằng bất kỳ ngôn ngữ nào mà trình duyệt web hỗ trợ. JavaScript đã trở thành lựa chọn phổ biến cho các kẻ tấn công. Mặc dù các cuộc tấn công XSS đã xuất hiện từ hơn 15 năm trước. Nhưng chúng vẫn rất phổ biến và nguy hiểm cho tới ngày nay.
Đọc thêm: Các kiểu tấn công mạng phổ biến hiện nay
Tác động của Cross-Site Scripting
Khi một trang web bị tấn công bằng cross-site scripting, một loạt các vấn đề có thể nhanh chóng xuất hiện. Một trong số những vấn đề có thể gặp phải bao gồm:
- Thông tin nhạy cảm của người dùng bị tiết lộ
- Kẻ tấn công chiếm quyền truy cập vào tài khoản trực tuyến và giả mạo người dùng
- Phá hoại nội dung trang web
- Tải lên các chương trình mã độc như Trojan-horse
- Chuyển hướng trang web, dẫn người dùng đến các trang web nguy hiểm
Cross-site scripting có thể gây thiệt hại nghiêm trọng cho tổ chức nếu không được phát hiện và xử lý nhanh chóng. Cả doanh nghiệp và khách hàng đều có nguy cơ bị tấn công XSS. Uy tín và các mối quan hệ có thể bị ảnh hưởng tiêu cực sau khi xảy ra một cuộc tấn công malware thành công.
Vào Mùa Giáng Sinh năm 2018, một cuộc tấn công XSS quy mô lớn đã xảy ra trên các trang web bán lẻ trực tuyến. Phần mềm độc hại đánh cắp thẻ tín dụng có tên” Magecart”. Phần mềm này tận dụng lỗ hổng bằng cách tự chèn vào các trang thanh toán trực tuyến. Và đây là lần đầu tiên một cuộc tấn công như vậy xảy ra trên quy mô lớn. Thông tin thẻ tín dụng của người dùng có thể đã được tải lên một máy chủ do kẻ tấn công kiểm soát. Và có thể bị bán hoặc sử dụng cho các giao dịch gian lận.
Các hình thức tấn công Cross-Site Scripting
Các cuộc tấn công Cross-site scripting thường được phân loại thành một trong các hình thức sau đây.
Reflected XSS
Tấn công Reflected XSS là khi một trang web có lỗ hổng cho phép nhận dữ liệu từ trình duyệt web của người dùng để tấn công họ. Trong loại tấn công này, đoạn mã độc hại được gửi từ chính trình duyệt của người dùng. Và không được lưu trữ trên máy chủ có lỗ hổng.
Một ví dụ đơn giản về cuộc tấn công Reflected XSS. Có thể bao gồm việc kẻ tấn công tạo một đường link chứa một đoạn mã độc hại. Và gửi nó đến một trang web có trang tìm kiếm có lỗ hổng XSS:
http://vulnerable-website.com/search?search_term=<script>(đoạn mã độc)</script>
Kẻ tấn công sau đó cần yêu cầu người dùng truy cập vào đường link này từ trình duyệt web của họ. Ví dụ như bằng cách gửi một email chứa đường link. Hoặc đăng URL lên một trang web công khai và dẫn dụ người dùng truy cập vào link này.
Khi người dùng (là mục tiêu) nhấp vào liên kết, trang web có lỗ hổng sẽ nhận tham số truy vấn “search_term” và hiển thị nó trên trang tìm kiếm. Khiến người dùng nghĩ đó là nội dung mà mình đang muốn tìm. Nhưng thực tế, giá trị của tham số này lại là mã độc.
Vì trang web không kiểm tra đúng cách thông tin mà người dùng nhập vào ô tìm kiếm “search_term”. Đoạn mã độc sẽ được chèn vào trang web và được thực thi khi trang web hiển thị kết quả tìm kiếm.
Persistent XSS
Tấn công Persistent XSS, như tên gọi, được lưu trữ (persistent) trực tiếp trên máy chủ có lỗ hổng. Khác với cuộc tấn công Reflected, nơi mà đoạn mã độc hại được gửi bởi nạn nhân. Tấn công Persistent có thể được thực thi trong quá trình người dùng tương tác với trang web hoặc ứng dụng đó.
Một ví dụ đơn giản về cuộc tấn công Persistent XSS có thể là khi kẻ tấn công đăng một bài viết trên diễn đàn của một trang web có lỗ hổng. Thay vì một bài viết diễn đàn thông thường, nội dung của bài viết này chứa đoạn mã độc hại của kẻ tấn công. Khi một người dùng truy cập bài viết này trên diễn đàn. Trình duyệt web của họ sẽ tải và thực thi đoạn mã độc hại.
Như bạn có thể thấy, điểm khác biệt giữa cuộc tấn công Reflected và Persistent. Là cuộc tấn công Persistent coi tất cả người dùng của một trang web hoặc ứng dụng có lỗ hổng là mục tiêu của cuộc tấn công.
DOM-Based XSS (Document Object Model)
Một loại tấn công XSS khác là DOM-based, xảy ra khi có lỗ hổng trong những đoạn mã chạy trực tiếp trên trình duyệt của người dùng. Mà trang web/ứng dụng đó luôn gửi đến họ. Khác với các loại tấn công Reflected XSS và Persistent XSS. Ở đây trang web/ứng dụng không gửi trực tiếp đoạn mã độc hại đến trình duyệt của người dùng. Thay vào đó, trang web/ứng dụng có các đoạn mã chạy ở phía máy khách có lỗ hổng. Và chúng “chuyển giao” đoạn mã độc hại đến trình duyệt của người dùng.
Ví dụ về cuộc tấn công XSS dựa trên DOM giống với ví dụ về cuộc tấn công Reflected XSS ở trên. Kẻ tấn công tạo ra một đường link với một đoạn mã độc hại. Như là “search_term” và gửi nó đến những người họ muốn tấn công.
Khi người dùng nhấp vào đường link này, trình duyệt của họ tải trang tìm kiếm của trang web và các đoạn mã chạy ở phía máy khách có lỗ hổng. Mặc dù “search_term” vẫn được gửi đi như là một thông số để máy chủ xử lý. Nhưng bản thân trang web không tạo ra trang web có mã độc được chèn vào.
Thay vào đó, các tập lệnh phía máy khách bị lỗi của trang web được thiết kế. Để tự động thay thế giá trị của “search_term” (tức là mã độc) vào trang tìm kiếm được hiển thị trên trình duyệt của nạn nhân. Điều này khiến trình duyệt của nạn nhân tải và thực thi mã độc của kẻ tấn công.
Tấn công XSS dựa trên DOM nhấn mạnh một thực tế. Rằng các lỗ hổng XSS không chỉ giới hạn ở phần mềm phía máy chủ mà còn có thể xuất hiện ở phía máy khách.
Cách ngăn chặn tấn công XSS
Với nhiều hình thức của các cuộc tấn công XSS. Các tổ chức cần biết cách tự bảo vệ mình một cách đầy đủ và ngăn chặn các vấn đề trong tương lai. Các trang web đang bắt đầu trở nên khó giám sát chặt chẽ hơn bao giờ hết. Do chúng ngày càng trở nên phức tạp. Tần suất các cuộc tấn công có thể sẽ tiếp tục gia tăng theo thời gian.
Những đề xuất sau đây có thể giúp bảo vệ người dùng của bạn chống lại các cuộc tấn công XSS:
Kiểm tra đầu vào của người dùng
- Tăng cường xác thực để phát hiện các đầu vào được cung cấp bởi người dùng có thể gây hại.
- Mã hóa đầu ra để ngăn chặn dữ liệu do người dùng cung cấp có khả năng độc hại kích hoạt hành vi tự động tải. Và thực thi bởi trình duyệt.
Hạn chế sử dụng dữ liệu của người dùng:
- Chỉ sử dụng dữ liệu của người dùng khi thực sự cần thiết. Giảm thiểu nguy cơ mã độc tiềm ẩn.
Sử dụng Chính sách bảo mật nội dung
- Cung cấp mức độ bảo vệ cao hơn và giảm nhẹ rủi ro của các cuộc tấn công XSS. Bằng cách sử dụng các công cụ chuyên dụng để tìm ra các điểm yếu trong phần mềm. Kịp thời vá lỗi trước khi bị tin tặc khai thác.
Thường xuyên sử dụng công cụ quét lỗ hổng ứng dụng web. Để xác định các lỗ hổng XSS trong phần mềm của bạn.