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 vào payload như các biến đầu vào. 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 dựa trên các lỗ hổng XSS (Stored or Persistent vulnerability); Tấn công dựa trên DOM hoặc XSS nội bộ (DOM-based XSS Local XSS).
1.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ôngkhông liên tụcđược thực hiệnkhidữ liệuđược cung cấp bởimột khách hàng websử dụngngay lập tức bằng kịch bảnserver-side script để tạo ra mộttrang kết quảcho người dùng. Nếu dữ liệungười dùng cung cấpkhông còn giá trịvàđược bao gồm trongcáctrang kết quảmà không cầnmã hóaHTML,việc này cho phépmã phía máy kháchđượctiêm vàotrang một cách chủ động. Mãtiêmcó thể đượcphản hồi trênmáy chủ webnhưtrongkế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ờinhư vậy màbao gồmmột phần củađầu vàogửi đến máy chủnhư một phần củayêu cầu.Các cuộc tấn côngphản hồi có thể được gửi đếnngười dùng thông quamột con đường khácnhưtrongmột e-mailthông báohoặc có thểtrênmột số máy chủweb khác.Khi một người dùngbị lừaclick vào mộtliên kết độc hạihoặc gửi đimột mẫuđặ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ượctrở lại trình duyệtcủa nạn nhân.Các trình duyệtsau đóthực thi mãvìnó đến từmột máy chủthực.
2.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, cho phépthực hiện những tấn côngmạnh nhất, trong đó cácmã độc hạiđược gửiđến một trang web, nơi nó được lưu trữ trongthời gian nhất định(trong mộtcơ sở dữ liệu, hệ thống tập tin, hoặc bất kỳ chỗ nào) và sau đóhiển thịcho người sử dụngtrongmột trang webmà khôngđược mã hóabằng cách sử dụngcá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ùngkhác có thể đọc nó).
3.Tấn công dựa trên DOM
Dựa trênDOM(Document Object Model) hoặcLocal XSS, kẻ tấn côngnhúngdữ liệutấn côngtrongcác side clienttừ bên trong mộtvài trang trênmáy chủ web.Ví dụ, nếumột phần củaJavaScripttruy cập mộtURLyêu cầu cáctham số vàviếtmột vàiHTML trêntrang riêng của mình, việc sử dụng thông tinnàymà không đượcmã hóabằng cách sử dụngcác thực thể HTML,thì có thể sẽ xuất hiện lỗ hổngXSS,khicácvăn bảndữ liệu nàyđược trình diễn lạibằng các trình duyệtHTML vàcó thểbao gồm thêm cácscriptphía máy trạm.
CÁC TẤN CÔNG KHAI THÁC XSS
1.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à là nguyên nhân 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 ở gốc (root) nên nó không thể truy cập tất cả các tập tin, mà chỉ có những gì được lưu trữ trên SDcard.
2.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ữ tại chỗ để 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ệnkhai thácbằng cách sử dụngtrình duyệt nhúngWebkit.Ngoài racác nhà phát triểnSkypeđã thiết lập cácchương trìnhURIcho trình duyệtnhúng"file :/ /" cho phép kẻ tấn côngtruy cập hệ thốngtập tin và đọcbất kỳ tập tinbởi cácứng dụngiOSsandbox.
Trong tương lai, cần hạn chếcác ứng dụngcủa bên thứ bađể thực hiện cáchành độngđược xác định bởiURLcũng nhưURIcho phépcác trang webnhúngmột iframe màbuộcSkypemởra (nếu nó được cài đặt) và gọi tới một số điện thoại cụ thể.JavaScript<>src="skype://1900expensivepremiumnumber?call"> .
3.HTML5APIcho các cuộc gọiliên miền
Lỗ hổng nàychỉ có thể đượckhai tháctrên các hệ thống Windows. HTML5có haiAPI đểthực hiện cuộc gọiliên miền-Cross Origin Requests và WebSockets.Bằng cách sử dụngchúng, JavaScript có thể tạo ra các kết nốitới bất kỳIPnào vàvới bất kỳ cổng(ngoài cổng bị chặn),làm cho chúng trở thành mộtđối tượnglý tưởng chotấn công quét các cổng. CácAPIcó thể bịkhai thácđể xác định xem trạng thái cáccổngđang được kết nối làmở hayđóng haylọc.Điều này được thực hiện nhờ sự giúp đỡ củahai thuộc tính: 'ready state'(cho biếttình trạng của cáckết nối tại mộtthờ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átsự khác biệt có thểxác định bản chấtcủa các cổng.Làmột cấp độ ứng dụngnên việc quétthành công cũng phụ thuộc vàobản chất củacácứng dụng đang chạytrên các cổngmục tiêu. Khi một yêu cầuđược gửi đếnứng dụng, chúngđọcyêu cầu vàgiữ nguyên trạng thái để socket ở trạng thái mở, có thể cónhiều đầu vàohoặc đầu vàotrong một định dạngcụ thể.Nếu mục tiêu đangchạy một ứng dụngnhư vậy thìtình trạng của nókhôngthể được xác định. Chúng ta có thểmở rộngkỹ thuật này đểthực hiện cácchức năng quétmạng cũng nhưphát hiện các địa chỉIP trong nội bộ.
4.HTML5thực hiện dựa trên lịch sử của AJAX
HTML5có một tính năngcho phép người dùngtruy cập các trangweb khác nhauvàliên kết trongmột trang webmà không thay đổiURL. Nó được thực hiệnvớisự giúp đỡ của chức năngwindow.history.pushState(). Nó được tạo racho các trang webAJAXđể sửa đổidễ dàngtrongthanh địa chỉcửa sổvà lịch sửthao tác. Nó cũng có thểđược khai thác chomột trang web có lỗ hổng XSSvì nó cho phépkẻ tấn công chuyển hướng người dùngđến bất kỳliên kếtmà không thay đổiURLtrong thanh địa chỉ.
5.Truy cập tới điều khiển WScript ActiveX trong trình duyệt IE
Các thiết lậpbảo mật trong trình duyệt IE (InternetExplorer) chophép truy cập vàođiều khiểnActiveXWScriptthông quangôn ngữ scriptnhư JavaScriptvà VBScript. Các mẫu ứng dụngcho thấylàm thế nào đểsử dụng đối tượngActiveX "WScript.shell" đểtương tác vớimáy của khách hàng. Sử dụngShellngười ta cũngcó thể tạo,xóa và sửa đổicác tập tinvăn bản thông quaWScript.FileSystemObject.
6.File API trong HTML5
Lỗ hổng nàyhiện đang đượcthực thi trongWebkit(mới nhất của Google Chrome) và có thể bịkhai thácđể chuyển đổitrình duyệtchromeGooglevào một file server.FileAPItrongHTML5cho phépcác JavaScript truy cậpcác file,một khi nó đượclựa chọnbởi người sử dụng(tức làtrước khi tải nó lên).Ngoàiviệc cung cấpkinh nghiệmđể các file tải lên tốt hơn, nócũng có thểđược sử dụngmột cách độc hại như ăn cắpcác file của bạntrongtấn công XSS. Với cách thức thông minhbạn có thể ẩninputtype=file điều khiểnđể người dùngkhông hề biếtviệc tải lên cáctập tin.Trong trường hợp này,các tập tinđược lựa chọn bởingười sử dụng tronghộp thoại 'OpenFile'là người duy nhấtcó thểđược truy cập.Tuy nhiên,inputtype=directory filelà một tính năngtuyệt vờicho phépngười dùng tải lênnội dung của mộtthư mục đượclựa chọn,như vậykẻ tấn công có thể được phép truy cập vào toàn bộthư mục.
7.Bản đồ XSS
Google trong khi thu thập dữ liệu cho các Xem Google Street cũng đã thu thập dữ liệu của các mạng không dây trong vùng lân cận và địa chỉ vật lý (MAC) của các router và sau đóphối hợp ánh xạ chúng vào GPS. Ở đây, một XSS khai thác có thể được sử dụng để lập bản đồ vị trí của người dùng. Việc khai thác XSS có thể lấy địa chỉ vật lý (MAC) của router mục tiêu và sau đóphối hợp sử dụng Google Maps để xác định GPS. Một trang độc hại bạn đang truy cập có thể thực hiện một XSS khai thác và phục hồi của tọa độ GPS từ Google Maps. Các bộ định tuyến và trình duyệt web tự chúng không chứa bất kỳ dữ liệu vị trí địa lý/GPS và Geo vị trí dựa trên IP. Nó hoạt động thông qua Router XSS mà có được địa chỉ MAC của router thông qua AJAX. Địa chỉ MAC sau đó được gửi đến kẻ tấn công và chuyển nó đến địa điểm dựa vào dịch vụ của Google mà từ đó có thể biết được tọa độ gần đúng của người sử dụng.
8.NATPINNING-IRCOver HTTP
Trong một cuộc tấn công XSS, một trang web buộc router của người dùng hoặc tường lửa gửi đến cổng bất kỳ số cổng của máy người dùng thông qua cơ chế dịch địa chỉ (NAT) Khi nạn nhân nhấp chuột vào một URL XSS có lỗ hổng có một hình thức ẩn kết nối với http://attacker.com:6667 (port IRC), người dùng gửi mẫu đi mà không biết. Một kết nối HTTP được tạo ra bởi kẻ tấn công tới máy chủ IRC (kết nối giả) chỉ đơn giản là lắng nghe. Direct Client- to-Client(DCC) là một tiểu giao thức IRC liên quan cho phép trao đổi các tập tin và thực hiện các cuộc trò chuyện không chuyển tiếp bằng cách cho phép các Peers kết nối với nhau bằng cách sử dụng một máy chủ IRC cho tín hiệu bắt tay.Chat DCCyêu cầu mở một cổng local trên máy trạm mà được kết nối ngược. Khi router ngăn chặn tất cả các kết nối từ bên trong, nó quyết định chuyển tiếp lưu lượng đến cổng Chat DCC ngược về máy của nạn nhân cho phép NAT traversal cho những kẻ tấn công để kết nối trở lại và trò chuyện với anh ta. Tuy nhiên, kẻ tấn công có chỉ định cổng.Ví dụ, cổng 21 (FTP), các cổng router chuyển tiếp 21 trở lại hệ thống nội bộ của nạn nhân. Kẻ tấn công có một con đường rõ ràng để kết nối với các nạn nhân trên cổng 21 và khởi động một cuộc tấn công.
9.Các khai thác trên trình duyệt
Bất kỳ ai có thểkhai thác cácngăn xếpứng dụng trình duyệtvàthực hiện mộtmã shellhoặc mở mộtphiênMeterpreterbằng cách sử dụnglỗi bộ nhớliên quan đếnlỗ hổngXSS. Những lỗ hổngkháccũng có thể trả vềphiênMeterpretermà khôngtấn công cácứng dụngstack một cáchtrực tiếp. Ví dụ nhưjavaapplet củaký tựcó thểđược sử dụng đểdownload các mã độcvà thực hiệnmột tập tin exe.
BIỆN PHÁP KHẮC PHỤC XSS
Hiện nay, các ứng dụng web đang được phổ biến rộng rãi để cung cấp các dịch vụ trực tuyến khác nhau. Nhưng đồng thời lỗ hổng ứng dụng đang được phát hiện và công bố với tốc độ đáng báo động. Trên thế giới, bảo mật web có thể dễ dàng bị xâm nhập. Do đó, bảo mật trở thành bắt buộc để bảo vệ người dùng trước các cuộc tấn công. Các biện pháp khác nhau có thể được áp dụng để tránh trở thành nạn nhân của XSS. Các cơ chế ngăn ngừa (XSS Cheat Sheet - OWASP, 2013) có thể được thực hiện ở phía máy chủ hoặc phía khách hàng.
1.Bảo vệmáy chủ
Để bảo vệkhỏi các lỗ hổngXSS, các biện phápsau đây có thểđược thực hiện bởinhà phát triển tạiphía máy chủ.Các khuyến nghị cơ bản đó là: Không nên quátin tưởng vàonhững gì server yêu cầu cung cấp(bao gồm cảcác tập tin cookie) của người dùng; Người sử dụng cầnđược xác nhậnvà xác nhậntrước khi cho phéptruy cập vào nó; Bảo vệcó thểđược thực hiệnbằng cách hạn chếcácmiềnvà đường dẫnđể chấp nhậncookie,thiết lập chúngnhưHttpOnly, sử dụng SSLvà không bao giờlưu trữdữ liệu bí mậttrong các cookie; Có thểvô hiệu hóaviệc sử dụng cácScript mộtcách an toàntừ cáctrang web khách hàng.
Các Headernội dungChính sách An ninh cũng có thểđược sử dụng để bảo mật chống lạiviệc khai tháclỗ hổngXSS. Ngoài ra,mã hóamột cách thích hợp các ký tự điều khiểnHTML, JavaScript, CSSvà URLnên được thực hiệnđể làm cho chúngvô hạitrước khichúng được hiển thịtrong trình duyệt. Sử dụngcácbộ lọcđểlàm sạchđầu vàongười dùng: filter_sanitize_encoded(để mã hóa URL), htmlentities(lọc HTML), ilter_sanitize_magic_quotes(áp dụng addslashes()). Các bộ lọc nàygiữmột chiếc đồng hồđầu vàongười sử dụngvà kiểm trajavascript hoặcHTTP POSTtrong các đầu vàovà sau đóngăn chặn cácscript được thực thi.Ngoài ra có thể sử dụng một số thư việnbảo mật có sẵnđể mã hóangười dùng nhập vàonhư“ProjectOWASPEncoding” tạiGoogle Code, lọcHTMLhoặcHtmlawedcho PHPAnti-XSS Class, các ứng dụngthuầnAntiSamyAPIcho NethoặcXSS-HTML -Bộ lọc cho Java.
2.Bảo vệ điểm cuối
Người dùng có thểthực hiện các bướcngăn chặnđể không trở thành nạn nhâncủaXSS bằng cách cài đặtcác tiện ích trình duyệthoặc sử dụng các bộ lọc XSS để ngăn chặn việc thực hiện các script.Ví dụ, cáctiện íchbao gồmNoScriptchoFireFox; NotScriptschoChrome và Operatrong khiIE 8cócác add-ons này từ trước.