GIỚI THIỆU CHUNG VỀ TẤN CÔNG XSS1.1 Tấn công XSS là gìXSS Cross-site Scripting là một lỗ hổng bảo mật phổ, trong đó kẻ tấn công sẽ chèn các đoạn mã độc thường là Javascript vào bên trong
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
□□&□□ BÁO CÁO CUỐI KỲ
Đề tài: TÌM HIỂU VỀ TẤN CÔNG XSS
Học phần: An toàn hệ thống thông tin
Trang 2Lời cảm ơnNhóm em xin trân thành cảm ơn TS Vũ Thành Nam và TS Ngô Thị Hiền đã hướng dẫn chúng em học phần An toàn Hệ thống thông tin MI4260 Sau khi hoàn thành học phần này, chúng em đã được biết và hiểu được những khái niệm cơ bản về mật mã, định danh, xác thực, bảo mật,… Với những kiến thức mà chúng em thu được sau khi hoàn thành học phần này, chúng em tự tin có thể nắm vững về an toàn thông tin và áp dụng được những điều này trong học tập và cuộc sống.
Trang 3MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ TẤN CÔNG XSS 1
1.1 Tấn công XSS là gì 1
1.2 Lịch sử xuất hiện 1
1.3 Tấn công XSS thực hiện như thế nào? 1
1.4 Ví dụ cuộc tấn công phổ biến 2
CHƯƠNG 2 PHÂN LOẠI TẤN CÔNG XSS 4
2.1 Stored XSS 4
2.2 Reflected XSS 6
2.3 DOM XSS 7
CHƯƠNG 3 PHÒNG CHỐNG TẤN CÔNG XSS 10
3.1 Phòng chống phía server 10
3.1.1 Lọc 10
3.1.2 Input encoding 10
3.1.3 Output encoding 11
3.2 Phòng chống phía client 12
3.2.1 Dựa trên Proxy-based 12
3.2.2 Application-level firewall 13
3.3 Kiểm thử tự động XSS 13
3.3.1 CyStack Platform – A Web Security Platform 13
3.3.2 Phần mềm Burp Suite Free 14
3.3.3 Phần mềm Netsparker 14
3.3.4 Arachni 14
3.3.5 Phần mềm W3af 14
CHƯƠNG 4 KẾT LUẬN 16
Trang 4CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ TẤN CÔNG XSS
1.1 Tấn công XSS là gì
XSS (Cross-site Scripting) là một lỗ hổng bảo mật phổ, trong đó kẻ tấn công
sẽ chèn các đoạn mã độc (thường là Javascript) vào bên trong trang web, các đoạn mã này sẽ được thực thi khi người dùng truy cập và hiển thị các trang có chứa những đoạn mã đó
Mục đích chính của quá trình tấn công chính là đánh cắp dữ liệu nhận dạng của người dùng Bao gồm như Cookies, Session Tokens cùng các thông tin liên quan khác Ở hầu hết các trường hợp tấn công này chủ yếu được sử dụng
để ăn cắp Cookie của người khác
Hậu quả:
Đánh cắp thông tin người dùng
Deface - làm thay đổi nội dung trang web
Cài đặt mã độc khác (tải chương trình về)
1.2 Lịch sử xuất hiện
Năm 1996-1999: XSS được phát hiện lần đầu tiên khi các trình duyệt web bắt đầu hỗ trợ Javascript Lúc này, các ứng dụng web chưa hiểu rõ
về việc lọc đầu vào từ người dùng
Năm 2000: Chi tiết về lỗ hổng XSS bắt đầu được công bố rộng rãi CERT cũng bắt đầu đưa ra cảnh báo về mối đe dọa từ XSS
Năm 2001: XSS liên quan tới trang web Yahoo Mail bị khai thác để đánh cắp thông tin tài khoản người dùng Vụ việc này đã thu hút sự chú
1.3 Tấn công XSS thực hiện như thế nào?
Cách thức mà Hacker sử dụng là thông qua các đoạn Script và thực thi
ăn cắp thông tin ở phía Client Kiểu tấn công này hoàn toàn có thể thực hiện với hầu hết các ngôn ngữ lập trình khác Thế nhưng thường xuyên xảy ra nhất
Trang 5trong các cuộc tấn công vẫn là Javascript và HTML.Vậy cuộc tấn công diễn ranhư thế nào?
Để thực hiện tấn công XSS, kẻ tấn công sẽ lợi dụng các lỗ hổng bảo mật của trang web, nơi mà hệ thống cho phép người dùng nhập và lưu trữ các đoạn mã độc trên server Mỗi khi người dùng tải trang về, thì các đoạn mã độcnày sẽ được thực thi ở phía trình duyệt
Để một lỗi XSS xảy ra, phải bao gồm 2 quá trình:
Thứ 1: Kẻ tấn công chèn các đoạn mã độc vào hệ thống webThứ 2: Người dùng truy cập vào trang web
Tấn công XSS sẽ không thể xảy ra được nếu như người dùng không thực sự truy cập vào hệ thống web Điều này có nghĩa là dữ liệu lưu ở Cơ sở dữ liệu phía Server vẫn an toàn mặc dù mã độc đã được chèn vào hệ thống
1.4 Ví dụ cuộc tấn công phổ biến
Một trong những ví dụ nổi tiếng nhất về lỗ hổng cross-site scripting (XSS)
là Myspace Samy Worm được tạo bởi Samy Kamkar
Vào tháng 10 năm 2005, Samy đã khai thác lỗ hổng XSS trên Myspace, chophép anh ta lưu trữ một payload JavaScript trên hồ sơ của mình Khi mộtngười dùng đã đăng nhập truy cập vào hồ sơ Myspace của anh ta, codepayload sẽ thực thi, làm cho những người bạn xem thông tin của Samy trênMyspace sẽ hiển thị văn bản:
“but most of all, samy is my hero”
Sau đó, mã sẽ tự sao chép vào hồ sơ người xem và tiếp tục lây nhiễm cáctrang người dùng Myspace khác
[Type here]
Trang 6Một vụ tấn công XSS nổi tiếng khác vào năm 2014, trang thương mại điện
tử eBay đã kêu gọi người dùng của mình thay đổi mật khẩu sau khi bị hacker tấn công và xâm nhập vào cơ sở dữ liệu cá nhân của 145 triệu người dùng trên eBay Đây được xem là một trong những vụ tấn công mạng lớn nhất lịch sử Các hacker đã xâm nhập vào hệ thống của eBay qua tài khoản của 3 nhân viên và có quyền truy cập nội bộ trong suốt 229 ngày Các hacker đã có thể nắm giữ được mật khẩu cũng như tên, địa chỉ email, địa chỉ nhà, số điện thoại, ngày sinh… trong đó ngoại trừ mật khẩu
đã được mã hóa, các thông tin còn lại đều chưa được mã hóa eBay đã phải chịu sự chỉ trích mạnh mẽ và tổn thất rất lớn vì phản ứng chậm chạp sau vụ tấn công
Trang 7CHƯƠNG 2 PHÂN LOẠI TẤN CÔNG XSS
2.1 Stored XSS
Loại tấn công XSS này chủ yếu tập trung vào khai thác việc “thiếu kiểm tra”
dữ liệu truyền vào khi cho người dùng nhập liệu vào hệ thống Các trường dữ liệu nhập vào từ người dùng: các ô comment trong trang blog, các ô điền nội dung của thông tin tài khoản (tên, địa chỉ, …)
Hacker chèn trực tiếp các mã độc vào cơ sở dữ liệu của website
Phương thức tấn công Stored XSS
Ví dụ:
Giả sử trang web của chúng ta có ô nhập nội dung Search như sau, với mỗi tìm kiếm mà người dùng nhập vào, hệ thống sẽ hiển thị lại kết quả:
[Type here]
Trang 8Với các nội dung nhập thông thường, thì hệ thống sẽ hiểu đây là những kí tự bình thường và không gặp vấn đề gì khi hiển thị Tuy nhiên, nếu có một ai đó thử tấn công vào hệ thống của ta với nội dung nhập vào là:
<script>alert("XSS attack!");</script>
Khi đó, rất có thể những nội dung hiển thị sẽ bị hiểu lầm là một đoạn mã Javascript thay vì chỉ là một đoạn văn bản thông thường Thay vì hiển thị nội dung, đoạn mã Javascript trên sẽ được trình duyệt kích hoạt và trong tình huống này một hộp thoại sẽ được hiển thị ra:
nếu kẻ tấn công lợi dụng lỗ hổng này để chèn vào các đoạn mã Javascript âmthầm lấy cắp cookie chứa sessionID của phiên đăng nhập người dùng Khi đó,với thông tin lấy cắp được, kẻ tấn công có thể mạo danh người dùng để truycập vào hệ thống web, từ đó lấy cắp nhiều thông tin hơn nữa
Hacker chèn đoạn javascript:
Trang 9<script> var name = 'hacker';alert(document.cookie);''; </script>Hiển thị ra cookie của người dùng.
2.2 Reflected XSS
Reflected XSS là một cuộc tấn công xảy ra khi ứng dụng nhận dữ liệu trong yêu cầu HTTP và trả về phản hồi theo cách không an toàn Reflected XSS thực thi được ở phía client (trình duyệt người dùng) mà không lưu vào cơ sở
dữ liệu của website
Hacker gửi trực tiếp link có chứa mã độc cho người dùng, khi người dùng click vào link này thì trang web sẽ được load chung với các đoạn script độc hại Reflected XSS thường dùng để ăn cắp cookie, chiếm session,… của nạn nhân hoăc cài keylogger, trojan … vào máy tính nạn nhân
Phương thức tấn công Reflected XSS
Ví dụ:
Hacker kiểm tra thấy web có lỗi XSS ở ô tìm kiếm:
[Type here]
Trang 10• Hacker sẽ chèn đoạn script vào sau query:
và gửi cho nạn nhân một đường link có chứa mã độc hại đi kèm:
http://demo.testfire.net/search.jsp?query=<script>alert(document.cookie)
<script>
• Để cho người dùng khó phát hiện nên khi gửi đường link trên cho nạn nhân, hacker có thể sẽ mã hoá nó thành những ký tự lạ khó đọc, ví dụ:
• Như vậy, nạn nhân sẽ không nghi ngờ đường link lạ, và click vào link
• Khi nạn nhân click vào đường link được hacker gửi, trình duyệt sẽ load trang web và thực thi các đoạn script kèm theo, sau đó gửi về cho hacker những thông tin của nạn nhân
• Từ phía site của mình, hacker sẽ bắt được nội dung request trên và coi như session của người dùng sẽ bị chiếm Đến lúc này, 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ó.2.3 DOM XSS
DOM viết tắt của Document Object Model là 1 dạng chuẩn của W3C đưa ra nhằ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ả các thành phần trong HTML, XML đều được xem như một node
Trang 11DOM Based XSS là kỹ thuật khai thác XSS dựa trên việc thay đổi cấu trúc DOM của tài liệu, cụ thể là HTML.
Phân biệt với reflected và stored xss
Đặc điểm chung của reflected và stored xss là các đoạn mã nguy hiểm sau khi được chèn vào sẽ được thực thi sau respond của server, có nghĩa là lỗi nằm về phía server Còn DOM based XSS đi ngược lại với đặc điểm này, mã độc được thực thi ngay khi xử lý phía client mà không thông qua server
Ví dụ:
Giả sử như một website có đường dẫn đăng ký với một form bình thường Bởivậy, người dùng sẽ không nghi ngờ mà chủ động điền các thông tin trongform 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ùngnguy hiểm Bạn có thể tham khảo kịch bản tấn công trong hình dưới đây: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
Trang 12Người dùng sẽ không nghi ngờ với form thông thường như thế này, và khi lựachọn giới tính, Script sẽ được thực thi
Trang 13Có hai loại thanh lọc dữ liệu đầu vào và đẩu ra: White-List
Filtering và Black-List Filtering
Black-List Filtering
Lọc dữ liệu được định nghĩa sẵn trong 1 danh sách cho trước, khi gặp 1 yêucầu không hợp lệ sẽ hủy, không thực hiện yêu cầu Ưu điểm là dễ cấu hình,triển khai nhưng nhược điểm là khi xuất hiện một cuộc tấn công kiểu mới(chưa được định nghĩa trong black-list) thì không thể phát hiện và ngănchặn cuộc tấn công
White-List Filtering
Cho phép quy định sẵn trước 1 danh sách hợp lệ, chỉ có những yêu cầuthuộc danh sách này mới được thực hiện Vì thế ngăn chặn được các kiểutấn công mới, nhược điểm là khi có một ứng dụng mới được phát triển thìcũng phải được cập nhật trong White-List Tuy nhiên White-List Filteringbảo mật hơn so với Black-List Filtering
3.1.2 Input encoding
Mã hóa đầu vào có thể trở thành một vị trí trung tâm cho tất cả các bộ lọc,đảm bảo chỉ có một điểm duy nhất cho tất cả các bộ lọc
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ó[Type here]
Trang 14khô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ặckhông hợp lệ Tuy nhiên việc mã hóa tất cả dữ liệu không đáng tin cậ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ủ.
Ví dụ: nếu một trang web cho phép người dùng nhập dữ liệu vào mộttrường văn bản, thì dữ liệu đó nên được mã hóa trước khi được lưu trữ hoặchiển thị trên trang web Mã hóa đầu vào có thể được thực hiện bằng cách sửdụng các hàm mã hóa như htmlentities() hoặc htmlspecialchars() trongPHP hoặc các hàm tương tự trong các ngôn ngữ lập trình khác
Có thể sử dụng hàm htmlspecialchars() như sau:
$untrusted_data = $_POST['input_field'];
$safe_data = htmlspecialchars($untrusted_data, ENT_QUOTES, 'UTF-8’);Trong đó, biến $untrusted_data chứa dữ liệu đầu vào không được tin cậy, và biến $safe_data chứa dữ liệu sau khi được mã hóa để đảm bảo an toàn trên trang web Tham số ENT_QUOTES trong hàm htmlspecialchars()cho phép mã hóa cả dấu ngoặc kép và nháy đơn, và UTF-8 là tập ký tự được sử dụng để mã hóa
3.1.3 Output encoding
Để phòng chống tấn công XSS, một trong những phương pháp quan trọng
là mã hóa đầu ra Khi dữ liệu được hiển thị trên trang web, nó nên được mãhóa để đảm bảo rằng các ký tự đặc biệt như <, >, & và " không được hiểu sai là các thẻ HTML hoặc JavaScript Mã hóa đầu ra có thể được thực hiện bằng cách sử dụng các hàm mã hóa như htmlentities() hoặc
htmlspecialchars() trong PHP hoặc các hàm tương tự trong các ngôn ngữ lập trình khác
Nếu dữ liệu được hiển thị trên trang web mà không được mã hóa trước đó, thì kẻ tấn công có thể chèn mã độc vào dữ liệu đó và tấn công trang web Khi dữ liệu được mã hóa trước khi được hiển thị, các ký tự đặc biệt sẽ đượcchuyển đổi thành các ký tự an toàn và không thể hiểu sai là các thẻ HTML hoặc JavaScript, giúp ngăn chặn tấn công XSS
Ví dụ: Để minh họa việc mã hóa đầu ra trong PHP để phòng chống tấn công XSS, dưới đây là một ví dụ cụ thể:
Trang 15Trong ví dụ này, biến $user_input chứa chuỗi dữ liệu đầu vào không an toàn từ người dùng, trong đó có chứa đoạn mã JavaScript độc hại Để đảm bảo an toàn, chúng ta sử dụng hàm htmlspecialchars() để mã hóa chuỗi đầu vào và lưu kết quả vào biến $safe_output Tham số ENT_QUOTES cho phép mã hóa cả dấu ngoặc kép và nháy đơn Tập ký tự UTF-8 được sử dụng để đảm bảo hỗ trợ ký tự đa ngôn ngữ.
Sau đó, chúng ta sử dụng hàm echo để hiển thị cả dữ liệu đầu vào và dữ liệu đã được mã hóa trên trang web Kết quả sẽ được hiển thị như sau:
Như vậy, dữ liệu đầu vào không an toàn từ người dùng đã được mã hóa và hiển thị an toàn trên trang web, giúp phòng chống tấn công XSS
3.2 Phòng chống phía client
3.2.1 Dựa trên Proxy-based
Phương pháp chống XSS phía client dựa trên Proxy-based yêu cầu sử dụng một proxy để lọc và kiểm tra các dữ liệu HTTP được trao đổi giữa trình duyệt và máychủ Proxy sẽ phân tích các yêu cầu và phản hồi HTTP để tìm kiếm các ký tự đặcbiệt và các đoạn mã độc có thể gây ra các cuộc tấn công XSS
Khi đầu vào của người dùng được gửi từ trình duyệt đến máy chủ, proxy sẽ chặn yêu cầu này và xác định xem liệu nó có chứa các ký tự đặc biệt hoặc đoạn mã độc hay không Nếu có, proxy sẽ mã hóa hoặc loại bỏ chúng trước khi cho yêu cầu tiếp tục đến máy chủ Nếu phản hồi từ máy chủ chứa các ký tự đặc biệt hoặc đoạn mã độc, proxy sẽ mã hóa hoặc loại bỏ chúng trước khi gửi kết quả trả về cho trình duyệt
Ví dụ: Ví dụ, để bảo vệ trang web khỏi các cuộc tấn công XSS, người dùng có thể cấu hình ModSecurity để tìm kiếm các ký tự đặc biệt trong yêu cầu và phản hồi HTTP và loại bỏ chúng trước khi chúng được gửi hoặc nhận bởi trình duyệt ModSecurity cũng cho phép người dùng sử dụng các biểu thức chính quy để tìm kiếm các đoạn mã độc và loại bỏ chúng khỏi các yêu cầu và phản hồi HTTP.[Type here]
Trang 163.2.2 Application-level firewall
Application-level firewall là một loại tường lửa (firewall) được triển khai trên mức ứng dụng để bảo vệ ứng dụng web khỏi các cuộc tấn công mạng Một trong những cách chống lại các cuộc tấn công XSS (Cross-Site Scripting) là phân tích
dữ liệu trang HTML pages trỏ bởi hyperlinks để tìm kiếm các chuỗi độc hại và chặn yêu cầu bất thường dựa trên tập quy tắc
Các tập quy tắc này được xây dựng dựa trên các ký tự đặc biệt và các từ khóa phổ biến được sử dụng trong cuộc tấn công XSS Firewall sẽ phân tích dữ liệu trang HTML và tìm kiếm các chuỗi độc hại, sau đó so sánh với tập quy tắc để xácđịnh xem các chuỗi đó có nguy cơ dẫn tới rò rỉ thông tin hay không
Nếu firewall xác định được các yêu cầu bất thường, nó sẽ chặn chúng và thông báo cho người quản trị để xử lý Firewall cũng có thể ghi nhật ký các cuộc tấn công để cung cấp thông tin cho việc phân tích và cải thiện tập quy tắc chặn
Ví dụ: nếu firewall phát hiện một chuỗi ký tự như
"<script>alert('XSS attack!')</script>"
nó sẽ coi đó là một chuỗi độc hại và chặn nó để ngăn chặn cuộc tấn công.Ngoài ra, firewall cũng sử dụng tập quy tắc để phát hiện các yêu cầu bất thường
Ví dụ, nếu firewall phát hiện một yêu cầu có chứa các ký tự đặc biệt như "<",
">", "&", hoặc các từ khóa phổ biến được sử dụng trong cuộc tấn công XSS như
"script" hoặc "onload", nó sẽ chặn yêu cầu này và thông báo cho người quản trị
để xử lý
3.3 Kiểm thử tự động XSS
Một công cụ quét lỗ hổng bảo mật thông thường sẽ kết nối với ứng dụng web thông qua giao diện web để có thể tìm ra các lỗ hổng tiềm tàng và những điểmyếu về cấu tạo của web Công cụ này sẽ không truy cập vào mã nguồn mà chỉ thực hiện kiểm tra chức năng để tìm ra các lỗ hổng bảo mật
Hiện nay trên thị trường có rất nhiều công cụ quét lỗ hổng bảo mật ứng dụng web, có thể miễn phí hoặc cần trả phí mới sử dụng được Dưới đây, chúng tôi
sẽ liệt kê một số công cụ quét lỗ hổng bảo mật ứng dụng web hàng đầu có thể giúp bạn đánh giá ứng dụng web để loại bỏ các rủi ro về bảo mật
3.3.1 CyStack Platform – A Web Security Platform
CyStack là một nền tảng nền tảng an ninh mạng đầu tiên tại Việt Nam, CyStack Platform đã bao gồm 04 apps, cung cấp các tính năng bảo vệ cho website của bạn bao gồm: các công cụ quét lỗ hổng bảo mật ứng dụng web, công cụ giám sát an ninh liên tục, tưởng lửa ứng dụng web và truy tìm mã độc
CyStack Scanning: tự động phát hiện các lỗ hổng và đưa ra phương án khắc phục cho bạn