Kỹ thuật tấn công XSS và cách ngăn chặn

06-08-23 Admin
-

XSS là gì

XSS (Cross-Site Scripting) là một loại lỗ hổng bảo mật phổ biến trong các ứng dụng web. Khi một ứng dụng web không kiểm tra hoặc sử lý đầu vào từ người dùng một cách đúng đắn, kẻ tấn công có thể chèn mã độc hại (thường là JavaScript) vào các trang web hoặc ứng dụng web khác nhau. Khi người dùng truy cập vào các trang web bị ảnh hưởng, mã độc hại này sẽ được thực thi trên trình duyệt của họ.

Các tấn công XSS thường được sử dụng để đánh cắp thông tin cá nhân của người dùng, phiền toái người dùng bằng cách chèn nội dung độc hại, hoặc thực hiện các hành động trái phép như thay đổi nội dung trang, đánh cắp cookie, chuyển hướng người dùng tới các trang web độc hại khác, vv.

Để bảo vệ ứng dụng web khỏi các tấn công XSS, các nhà phát triển cần thực hiện việc kiểm tra và xử lý đầu vào từ người dùng một cách cẩn thận, và sử dụng các kỹ thuật mã hóa dữ liệu khi cần thiết. Sử dụng thư viện bảo mật và ràng buộc CSP (Content Security Policy) cũng là một phương pháp hữu ích để giảm thiểu nguy cơ XSS.

Tấn công XSS thực hiện như thế nào?

Tấn công XSS thực hiện thông qua việc chèn mã độc hại (thường là JavaScript) vào các trang web hoặc ứng dụng web để thực thi trên trình duyệt của người dùng. Có hai loại chính của tấn công XSS: Reflected XSS và Stored XSS.

Các loại tấn công XSS

Để hiểu rõ hơn về cách thực hiện tấn công XSS và các biến thể của nó, dưới đây là một số thông tin chi tiết hơn về cách tấn công này có thể diễn ra:

1. Reflected XSS:

Reflected XSS (còn được gọi là Non-Persistent XSS hoặc Type-I XSS) là một loại tấn công XSS mà mã độc hại được chèn vào các yêu cầu HTTP và sau đó được phản hồi lại từ máy chủ trở lại trình duyệt của người dùng dưới dạng phản hồi từ máy chủ. Khi người dùng nhấn vào một liên kết độc hại hoặc truy cập vào một URL chứa mã độc hại, trình duyệt sẽ thực thi mã đó.

Cách thức tấn công Reflected XSS thường diễn ra như sau:

 

1. Kẻ tấn công tạo một đoạn mã độc hại, ví dụ: <script>alert('XSS attack!');</script>.

2. Kẻ tấn công sử dụng kỹ thuật xử lý đầu vào không đúng đắn hoặc thiếu kiểm tra để chèn mã độc hại vào một tham số trong URL hoặc trong các biểu mẫu trên trang web.

3. Khi người dùng nhấn vào liên kết chứa đoạn mã độc hại hoặc gửi biểu mẫu, yêu cầu HTTP sẽ được gửi đến máy chủ.

4. Máy chủ xử lý yêu cầu và chèn đoạn mã độc hại vào phản hồi HTTP.

5. Phản hồi HTTP chứa đoạn mã độc hại được trả về trình duyệt của người dùng.

6. Trình duyệt hiểu rằng đây là mã JavaScript và thực thi nó, hiển thị hộp thoại cảnh báo hoặc thực hiện các hành động không mong muốn.

  1. 7. 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. Stored XSS:

Stored XSS (còn được gọi là Persistent XSS hoặc Type-II XSS) là một loại tấn công XSS mà mã độc hại được lưu trữ trên máy chủ và hiển thị đến người dùng khi họ truy cập vào các trang hoặc chức năng chứa mã độc hại đó. Điểm khác biệt chính giữa Stored XSS và Reflected XSS là ở Stored XSS, mã độc hại được lưu trữ lâu dài trên máy chủ và có thể tác động đến nhiều người dùng khác nhau.

1.  Kẻ tấn công chèn đoạn mã độc hại vào cơ sở dữ liệu của ứng dụng web thông qua các kênh đầu vào của người dùng, như bình luận, hồ sơ người dùng, thư, tin nhắn, vv. 

ví dụ  :

2. Khi người dùng truy cập vào trang web hoặc chức năng chứa đoạn mã độc hại, máy chủ trả về mã độc hại đã được lưu trữ trong cơ sở dữ liệu.

3. Trình duyệt nhận được phản hồi từ máy chủ và thực thi đoạn mã độc hại, thường là JavaScript.

Kịch bản khai thác:


3 DOM-based XSS:

  • Đây là một biến thể của XSS mà mã độc hại không được chèn vào máy chủ, mà thay vào đó, nó tận dụng lỗ hổng trong DOM (Document Object Model) của trang web để thực thi mã.
  • Mã độc hại thường được chèn vào các trường đầu vào, như tiêu đề trang, thẻ <input>, hoặc các tham số truyền qua URL. Khi trang web xử lý dữ liệu này và sử dụng nó để thay đổi nội dung trang, mã độc hại sẽ được thực thi.

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

 

Thay vì truyền

message=Please fill in the form

thì truyền

message=<label>Gender</label>

<select class = "form-control" onchange="java_script_:show()"><option value="Male">Male</option><option value="Female">Female</option></select>

<script>function show(){alert();}</script>

 

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

Kịch bản khai thác:
 

  •  

Các cách để ngăn chặn XSS

1. Kiểm tra và xử lý đầu vào từ người dùng: Đảm bảo rằng tất cả đầu vào từ người dùng được kiểm tra và xử lý một cách cẩn thận. Tất cả các dữ liệu từ người dùng nên được mã hóa hoặc hạn chế các ký tự đặc biệt và mã HTML/JavaScript trước khi lưu trữ hoặc hiển thị trên trang web.

2. Sử dụng thư viện bảo mật: Sử dụng các thư viện bảo mật và khung công việc (framework) có sẵn để giúp ngăn chặn các tấn công XSS. Các thư viện này thường cung cấp các phương pháp an toàn để xử lý và hiển thị dữ liệu từ người dùng.

3. Áp dụng Content Security Policy (CSP): CSP là một cơ chế bảo mật trong HTTP header cho phép bạn xác định những nguồn tài nguyên nào được phép tải trên trang web. Bằng cách định rõ các nguồn tài nguyên hợp lệ, bạn có thể giới hạn khả năng thực thi mã độc hại từ nguồn không đáng tin cậy.

4. Escape và Encode dữ liệu: Trước khi hiển thị dữ liệu từ người dùng, hãy chắc chắn rằng bạn đã escape và encode dữ liệu đó đúng cách. Điều này giúp ngăn chặn mã JavaScript không mong muốn được thực thi.

5. Sử dụng HTTP Only và Secure flags cho Cookie: Đảm bảo rằng tất cả các cookie được sử dụng để lưu trữ thông tin đăng nhập và phiên làm việc có cờ HTTP Only và Secure. Cờ HTTP Only ngăn chặn truy cập cookie thông qua mã JavaScript và cờ Secure chỉ cho phép truyền cookie qua kết nối an toàn.

6. Thực hiện kiểm tra an ninh thường xuyên: Kiểm tra an ninh định kỳ để tìm kiếm và khắc phục các lỗ hổng bảo mật trong ứng dụng web. Điều này bao gồm việc sử dụng các công cụ kiểm tra an ninh tự động và kiểm tra bằng tay để đảm bảo rằng ứng dụng không có các lỗ hổng XSS.

7. Hạn chế quyền truy cập: Đảm bảo rằng các tài khoản người dùng chỉ có quyền truy cập và thực thi các chức năng mà họ cần thiết. Hạn chế quyền truy cập giúp giảm thiểu khả năng kẻ tấn công sử dụng các lỗ hổng XSS để lấy dữ liệu hay thực hiện các hành động không đáng được phép.

8. Sử dụng các thư viện và framework an toàn: Sử dụng các thư viện và framework được tin cậy và được cập nhật thường xuyên để giảm thiểu các lỗ hổng bảo mật có thể được khai thác.

Kết luận

XSS (Cross-Site Scripting) là một loại tấn công bảo mật phổ biến trong ứng dụng web. Tấn công XSS xảy ra khi kẻ tấn công chèn mã độc hại (thường là JavaScript) vào các trang web hoặc ứng dụng web, và khi người dùng truy cập vào trang đó, mã độc hại sẽ thực thi trên trình duyệt của họ.

Có hai biến thể chính của tấn công XSS là Reflected XSS và Stored XSS. Trong Reflected XSS, mã độc hại được chèn vào yêu cầu HTTP và phản hồi lại từ máy chủ trở lại trình duyệt. Trong Stored XSS, mã độc hại được lưu trữ trên máy chủ và hiển thị đến nhiều người dùng khi truy cập vào các trang chứa mã độc hại.

Trong khi thực hiện kiểm thử, Tester nên đánh giá các rủi ro mang lại từ các cuộc tấn công XSS có thể xảy ra. Tấn công XSS có thể ảnh hưởng đến các ứng dụng web, nó được coi là một trong những cuộc tấn công nguy hiểm và nguy hiểm nhất. Do đó, chúng ta không nên quên kiểm thử tấn công XSS này

Nguồn: https://www.softwaretestinghelp.com/cross-site-scripting-xss-attack-test/ 

 https://viblo.asia/p/ky-thuat-tan-cong-xss-va-cach-ngan-chan-YWOZr0Py5Q0

 

 

Bài viết liên quan

Cải thiện công việc thông qua công cụ hỗ trợ ghi nhớ

23-09-2024 Admin
76 views + likes

Trong quá trình làm việc hàng ngày, nhiều nhân sự gặp phải khó khăn trong việc nhớ và quản lý các công việc, dễ dẫn đến bỏ sót nhiệm vụ quan trọng

8 Công cụ Marketing Online hỗ trợ bán hàng hiệu quả nhất 2024

19-08-2024 Hồ Thị Mỹ Anh
64 views + likes

Bán hàng hiệu quả, tăng doanh số là mục tiêu của bất cứ cửa hàng kinh doanh nào bởi đây là một trong những yếu tố tiên quyết giúp giảm thời gian quay vòng vốn. Vậy có những công cụ nào hỗ trợ bán hàng hiệu quả?

Overloading và Overriding có gì khác nhau?

12-07-2024 Admin
83 views + likes

Overloading và Overriding là hai khái niệm quan trọng trong lập trình hướng đối tượng, và chúng có những sự khác biệt cơ bản:

Hướng dẫn sử dụng phần mềm quản lý gym BIGAPPTECH

16-01-2024 Nguyễn Hoài Nam
149 views + likes

Hướng dẫn sử dụng phần mềm quản lý gym BIGAPPTECH

Tầm Quan Trọng Của Website Đối Với Doanh Nghiệp Mới Thành Lập

31-01-2024 Nguyễn Hoài Nam
85 views + likes

Tầm Quan Trọng Của Website Đối Với Doanh Nghiệp Mới Thành Lập