Lỗ hổng XSS và các biện pháp khắc phục

Lỗ hổng XSS và các biện pháp khắc phục.docx

Nội dung chia sẻ: Lỗ hổng XSS và các biện pháp khắc phục

Lỗ hổng XSS và các biện pháp khắc phục Lỗ hổng XSS đã tồn tại từ lâu nhưng kịch bản hiện nay vẩn có thể thực hiện với những kiểu tấn công mới trong tương lai. Bài viết này trình bày nghiên cứu về những nguy hiểm của lỗ hổng XSS, cách khai thác lỗ hổng và các biện pháp khắc phục các cuộc tấn công XSS. XSS (Cross site scripting) là một lỗ hổng ứng dụng web trong đó một người dùng cuối có thể bị tấn công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP.) những thẻ HTML hay những đoạn mã script nguy hiểm. Lỗ hổng XSS đã tồn tại từ lâu nhưng kịch bản hiện nay vẩn có thể thực hiện với những kiểu tấn công mới trong tương lai. Bài viết này trình bày nghiên cứu về những nguy hiểm của lỗ hổng XSS, cách khai thác lỗ hổng và các biện pháp khắc phục các cuộc tấn công XSS. GIỚI THIỆU Với sự ra đời của công nghệ phát triển web động, cùng với việc sử dụng ngày càng nhiều các ứng dụng web gây ra nhiều lỗ hổng hơn cho web. Cross Site Scripting (gọi tắt là CSS hay XSS) là một lỗ hổng dựa trên việc tiêm mã - (Injection) được tìm thấy trong các ứng dụng web, trong đó các mã độc hại được tiêm như các biến đầu vào vào payload. Khi người dùng truy cập một ứng dụng web bị lây nhiễm, các mã độc hại được lặp lại cho trình duyệt của người dùng. Mã tiêm có khả năng đọc, thay đổi và truyền tải dữ liệu được phân loại truy cập bằng trình duyệt như cookies, session tokens. CÁC LOẠI TẤN CÔNG XSS Những lỗ hổng XSS tồn tại trên những website và ứng dụng web khác nhau, nhưng nhìn chung có thể phân thành 3 loại tấn công XSS phổ biến: Tấn công không liên tục hoặc tấn công phản hồi (Non¬Persistent or Reflected Vulnerability); Tấn công lưu trữ XSS (Stored or Persistent vulnerability); Tấn công dựa trên DOM hoặc XSS nội bộ (DOM-based XSS or Local XSS). Các cuộc tấn công phản hồi hoặc XSS không liên tục Các cuộc tấn công không liên tục (Hình 1) được thực hiện khi dữ liệu được cung cấp bởi một khách hàng web sử dụng ngay lập tức bằng kịch bản server-side script để tạo ra một trang kết quả cho người dùng. Nếu dữ liệu người dùng cung cấp không còn giá trị và được bao gồm trong các trang kết quả mà không cần mã hóa HTML, việc này cho phép mã phía máy khách được tiêm vào trang một cách chủ động. Mã tiêm có thể được phản hồi trên máy chủ web như trong kết quả tìm kiếm hoặc như một thông báo lỗi, hoặc bất kỳ thông điệp trả lời như vậy mà bao gồm một phần của đầu vào gửi đến máy chủ như một phần của yêu cầu. Các cuộc tấn công phản hồi có thể được gửi đến người dùng thông qua một con đường khác như trong một e-mail thông báo hoặc có thể trên một số máy chủ web khác. Khi một người dùng bị lừa click vào một liên kết độc hại hoặc submit một form đặc biệt, mã tiêm đi đến máy chủ web có lỗ hổng, phản hồi cuộc tấn công ngược trở lại trình duyệt của nạn nhân. Các trình duyệt sau đó thực thi mã vì nó đến từ một máy chủ thực. Tấn công dựa trên các lỗ hổng XSS Tấn công dựa trên các lỗ hổng XSS (Hình 2) cho phép thực hiện những tấn công mạnh nhất, trong đó các mã độc hại được gửi đến một trang web, nơi nó được lưu trữ trong thời gian nhất định (trong một cơ sở dữ liệu, hệ thống tập tin, hoặc bất kỳ đâu) và sau đó hiển thị cho người sử dụng trong một trang web mà không được mã hóa bằng cách sử dụng các thực thể HTML (ví dụ bảng tin trực tuyến, nơi mà người dùng được phép đăng bài định dạng HTML để người dùng khác có thể đọc nó). Tấn công dựa trên DOM Dựa trên DOM (Document Object Model) (Hình 3) hoặc Local XSS, kẻ tấn công nhúng dữ liệu tấn công trong các side client từ bên trong một vài trang trên máy chủ web. Ví dụ, nếu một phần của JavaScript truy cập một URL yêu cầu các tham số và viết một vài HTML trên trang riêng của mình, việc sử dụng thông tin này mà không được mã hóa bằng cách sử dụng các thực thể HTML, thì có thể sẽ xuất hiện lỗ hổng XSS khi các văn bản dữ liệu này được trình diễn lại bằng các trình duyệt HTML và có thể bao gồm thêm các script phía máy trạm. CÁC TẨN CÔNG KHAI THÁC XSS Dữ liệu trên Android có nhiều lỗ hổng Các lỗ hổng chỉ ra ở đây tồn tại trong framework Android 2.2. Nó có thể được khai thác để truy cập các tập tin được lưu trữ trong SDcard của các thiết bị chạy Android. Các trình duyệt trên Android không nhắc nhở người dùng khi tải về một tập tin, ví dụ một tập tin "payload.html" được tự động tải về / sdcard / download / payload.html. Một JavaScript có thể được sử dụng để mở file "payload" một cách tự động mà nguyên nhân là trình duyệt để hiển thị các file local và cho phép các cách thức để có thể truy cập vào SDcard và các tập tin được lưu trữ bên trong đó. Sau đó, nó có thể gửi nội dung của các tập tin truy cập trở lại trang web có lỗ hổng. Việc khai thác đơn giản là sử dụng JavaScript và chuyển hướng, nó có thể được sử dụng trên nhiều thiết bị cầm tay và các phiên bản khác nhau của Android. Nhưng nó cũng có một vài hạn chế như tên và đường dẫn của tập tin được truy cập đã được biết đến trước đó. Vì nó không phải là một lỗ hổng root nên không thể truy cập tất cả các tập tin, mà chỉ những gì được lưu trữ trên SDcard. Thuật toán URI cải tiến của Skype hoặc trình duyệt nhúng Webkit trên IOS Lỗ hổng này tồn tại trong framework của iOS. Nó có thể bị khai thác bởi một kẻ tấn công nhằm truy cập vào cơ sở dữ liệu SQLLite Address Book của người dùng và cũng để đặt cuộc gọi trực tiếp sử dụng Skype. Ứng dụng Skype được phát triển cho iOS sử dụng một tập tin HTML lưu trữ local để hiển thị tin nhắn chat từ người dùng Skype khác, nhưng nó thất bại trong việc mã hóa "Full Name“ của người dùng đến (incoming users). Điều này cho phép kẻ tấn công thực thi mã JavaScript độc hại khi nạn nhân xem tin nhắn. Vấn đề ở đây là thực hiện khai thác bằng cách sử dụng trình duyệt nhúng Webkit. Ngoài ra, các nhà phát triển Skype đã thiết lập các chương trình URI cho trình duyệt nhúng "file :| I“ cho phép kẻ tấn công truy cập hệ thống tập tin và đọc bất kỳ tập tin bởi các ứng dụng iOS sandbox. Trong tương lai, cần hạn chế các ứng dụng của bên thứ ba để thực hiện các hành động được xác định bởi URL cũng như URI cho phép các trang web nhúng một iframe mà buộc Skype mở ra (nếu nó được cài đặt) và gọi tới một số điện thoại cụ thể. JavaScript . HTML5 API cho các cuộc gọi liên miền Lỗ hổng này chỉ có thể được khai thác trên các hệ thống Windows. HTML5 có hai API để thực hiện cuộc gọi liên miền - Cross Origin Requests và WebSockets. Bằng cách sử dụng chúng, JavaScript có thể tạo ra các kết nối tới IP hoặc cổng bất kỳ (ngoài cổng bị chặn), làm cho chúng trở thành một đối tượng lý tưởng cho tấn công port scanning. Các API có thể bị khai thác để xác định xem trạng thái các cổng đang được kết nối là mở hay đóng hay lọc. Điều này được thực hiện nhờ sự giúp đỡ của hai thuộc tính: 'ready state' (cho biết tình trạng của các kết nối tại một thời điểm nhất định) và "'time duration' mà mỗi "readyState" là giá trị cuối. Do đó bằng cách quan sát sự khác biệt trong hành vi có thể xác định bản chất của các cổng. Là một cấp độ ứng dụng nên việc quét thành công cũng phụ thuộc vào bản chất của các ứng dụng đang chạy trên các cổng mục tiêu. Khi một yêu cầu được gửi đến ứng dụng, chúng đọc yêu cầu và giữ nguyên trạng thái để socket ở trạng thái mở, có thể có một hoặc nhiều đầu vào trong một định dạng cụ thể. Nếu mục tiêu đang chạy một ứng dụng như vậy thì tình trạng của nó không thể được xác định. Chúng ta có thể mở rộng kỹ thuật này để thực hiện các chức năng quét mạng cũng như phát hiện các địa chỉ IP trong nội bộ. HTML5 thực hiện dựa trên lịch sử của AJAX HTML5 có một tính năng cho phép người dùng truy cập các trang web khác nhau và liên kết một trang web mà không thay đổi URL. Nó được thực hiện với sự giúp đỡ của chức năng window.history. pushState (). HTML5 được tạo ra cho các trang web AJAX để sửa đổi dễ dàng trong thanh địa chỉ cửa sổ và lịch sử thao tác. Đó là một tính năng tuyệt vời và thuận tiện cho các nhà phát triển - ví dụ, các ứng dụng AJAX có thể dễ dàng hỗ trợ trở lại và nút bấm phía trước mà không cần đến URI định danh đoạn (#). Nhưng nó cũng có thể được khai thác cho một trang web có lỗ hổng XSS vì nó cho phép kẻ tấn công chuyển hướng người dùng đến liên kết bất kỳ mà không thay đổi URL trong thanh địa chỉ. Truy cập tới điều khiển WScript ActiveX trong trình duyệt IE Các thiết lập bảo mật trong trình duyệt IE (Internet Explorer) cho phép truy cập vào điều khiển ActiveX WScript thông qua ngôn ngữ script như JavaScript và VBScript. Các mẫu ứng dụng cho thấy làm thế nào để sử dụng đối tượng ActiveX "WScript.shell" để tương tác với máy của khách hàng. Với việc kiểm soát ai có thể thực hiện các lệnh tương tự như một dấu nhắc trình báo mà không thông báo cho người sử dụng. Sử dụng Shell người ta cũng có thể tạo, xóa và sửa đổi các tập tin văn bản thông qua WScript. FileSystemObject. IE7 đã đưa vào một điều khiển bảo mật mới được gọi là "nguồn dữ liệu truy cập trên toàn miền", mà bây giờ bằng cách mặc định được thiết lập để nhắc nhở người dùng nếu họ muốn cho phép kịch bản của bạn để nói chuyện với "domains" khác (nó xem xét hệ thống tập tin như là một miền riêng biệt) nhưng người ta có thể viết một kịch bản tập tin trực tiếp vào đĩa và sau đó thực hiện nó.

truyện kiếm hiệp audio