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

21 1 0
Tài liệu đã được kiểm tra trùng lặp
báo cáo cuối kỳ đề tài tìm hiểu về tấn công xss

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 XSSHọc phần: An toàn hệ thống thông tin

Trang 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 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 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

Trang 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 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 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 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 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 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ố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]

Trang 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

Trang 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

Phương thức tấn công Stored XSSVí 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 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:

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 XSSVí 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 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:

http://example.com/register.php?message=Please fill in the formKhi truy cập đến thì chúng ta thấy một Form rất bình thường

Trang 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

Trang 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.

Trang 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 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 15

Trong 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 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.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 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.

Ngày đăng: 25/05/2024, 22:23

Tài liệu cùng người dùng

Tài liệu liên quan