Tải bản đầy đủ (.pdf) (21 trang)

báo cáo cuối kỳ đề tài tìm hiểu về tấn công xss

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (643.27 KB, 21 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆ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 tồn hệ thống thơng tin

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Lời cảm ơn

Nhó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 tồ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 tồ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.

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

MỤ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

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

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

CHƯƠNG 1. 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 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 q 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 webCà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úý của cộng đồng an ninh mạng.

Năm 2002: OWASP bắt đầu đưa XSS vào danh sách Top 10 lỗ hổng bảo mật web phổ biến nhất. Điều này giúp nâng cao nhận thức về mối đe dọa từ XSS.

Từ năm 2000-2007: XSS tiếp tục phát triển với nhiều biến thể mới như XSS phản ánh (reflected), XSS vĩnh viễn (persistent),... giúp kẻ tấn cơng có thể khai thác sâu hơn lỗ hổng này.

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 hồn tồ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 xun xảy ra nhất

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

trong 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 q 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ống1.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]

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Mộ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 .

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

CHƯƠ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.

<small>Phương thức tấn cơng Stored XSS</small>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]

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Vớ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:

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="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 tồ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.

<small>Phương thức tấn cơng Reflected XSS</small>Ví dụ:

Hacker kiểm tra thấy web có lỗi XSS ở ơ tìm kiếm:

[Type here]

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="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:

<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ã hố 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.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

DOM 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 tinhệ 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:

fill in the formKhi truy cập đến thì chúng ta thấy một Form rất bình thường

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Ngườ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

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

CHƯƠNG 3. PHỊNG CHỐNG TẤN CƠNG XSS

3.1 Phịng chống phía server3.1.1 Lọc

Có hai khái niệm cơ bản về quá trình lọc (filter) XSS: lọc đầu vào (inputfiltering) và lọc đầu ra (output filtering). Cách sử dụng phổ biến nhất là lọcđầu vào. Input Filtering được xem là chính xác hơn so với Output Filtering,đặc biệt trong trường hợp XSS Reflected. Tuy nhiên có một sự khác biệtnhỏ, quá trình lọc đầu vào áp dụng cho tất cả các loại dữ liệu, loại bỏ nhữngnội dung không hợp lệ trong khi lọc đầu ra chỉ mang tính áp dụng lại, mụcđích bài trừ các loại mã độc cịn xót lại.

Có 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.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

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ặ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 ngun 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 tồ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 tồ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ể:

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

Trong ví dụ này, biến $user_input chứa chuỗi dữ liệu đầu vào khơng an tồ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 tồn từ người dùng đã được mã hóa và hiển thị an tồ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]

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

3.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.Ngồ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 PlatformCyStack 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.

</div>

×