Cross Site Scripting - XSS là gì?

XSS (Cross Site Scripting) là một kiểu tấn công cho phép hacker chèn những đoạn script độc hại (thông thường là Javascript hoặc HTML) vào website và sẽ được thực thi ở phía người dùng (trong trình duyệt của người dùng).

Đối với XSS, người bị tấn công là người dùng chứ không phải website, hacker có thể dùng XSS để gửi những đoạn script độc hại tới một người dùng bất kỳ, và trình duyệt của người dùng sẽ thực thi những đoạn script đó và gửi về cho hacker những thông tin của người dùng thông qua email hoặc server do hacker định sẵn từ trước.

Mục đích của tấn công XSS

Phụ thuộc vào mục đích của hacker, những đoạn Javascript được chèn vào để lấy những thông tin như:

  • Cookie: hacker có thể lấy được cookie của người dùng và dùng những thông tin trong cookie để giả mạo phiên truy cập hoặc lấy những thông tin nhạy cảm khác được lưu trong cookie.
  • Keylogging: hacker có thể ghi lại những thao tác gõ phím của người dùng bằng cách sử dụng sự kiện addEventListener trong Javascript và gửi tất cả những thao tác gõ phím đó về cho hắn để thực hiện những mục đích như đánh cắp các thông tin nhạy cảm, lấy mật khẩu truy cập website hoặc mã số thẻ tín dụng...
  • Phishing: hacker có thể thay đổi giao diện của website bằng cách thay đổi cấu trúc HTML trong trang web để đánh lừa người dùng. Hacker có thể tạo ra những form đăng nhập giả nhằm lừa người dùng đăng nhập vào để đánh cắp mật khẩu.

Các dạng tấn công XSS

Trước đây, XSS chỉ được chia thành 2 dạng gồm Persistent và Non-Persistent. Vào năm 2005, người ta đã thêm vào một dạng tấn công XSS khác, đó là DOM-based XSS. Vì vậy XSS có thể được chia thành 3 dạng sau đây:

  1. Persistent XSS (hay còn gọi là Stored XSS)
  2. Non-Persistent XSS (hay còn gọi là Reflected XSS)
  3. DOM-based XSS

Persistent XSS (Stored XSS)

Stored XSS là dạng tấn công mà hacker chèn trực tiếp các mã độc vào cơ sở dữ liệu của website. Dạng tấn công này xảy ra khi các dữ liệu được gửi lên server không được kiểm tra kỹ lưỡng mà lưu trực tiếp vào cơ sở dữ liệu. Khi người dùng truy cập vào trang web này thì những đoạn script độc hại sẽ được thực thi chung với quá trình load trang web.

Dạng tấn công bằng Stored XSS được mô tả như sau

Mô hình mô tả dạng tấn công Stored XSS

Như hình trên, ta có thể thấy được quá trình tấn công như sau

  • Trước tiên, hacker sẽ khai thác lỗi Stored XSS trên website bằng cách tìm những form (khung đăng ký, khung comment, khung liên hệ ...) không được kiểm tra kỹ dữ liệu đầu vào và tiến hành chèn các đoạn mã độc vào cơ sở dữ liệu.
  • Sau đó khi người dùng truy cập vào trang web có chứa dữ liệu liên quan đến cơ sở dữ liệu này thì ngay lập tức, các đoạn script độc hại sẽ được chạy chung với trang web.
  • Khi các đoạn script được thực thi, tuỳ vào mục đích của hacker, các đoạn script sẽ gửi về cho hacker nhũng thông thông tin như cookie, session token .... đến đây, coi như quá trình tấn công của hacker đã thành công.

Non-Persistent XSS (Reflected XSS)

Reflected XSS là dạng tấn công thường gặp nhất trong các loại hình XSS. Với Reflected XSS, hacker không gửi dữ liệu độc hại lên server nạn nhân, mà 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.

Dạng tấn công bằng Reflected XSS được mô tả như sau

Mô hình mô tả dạng tấn công Reflected XSS

Như hình trên, ta có thể thấy được quá trình tấn công như sau

  • Trước tiên, hacker sẽ gửi cho nạn nhân một đường link có chứa mã độc hại đi kèm, ví dụ [code]http://victim.com/index.php?id=<script>alert(document.cookie)</script>[/code] nhưng đường link trên sẽ dễ khiến nạn nhân chú ý và sẽ nghi ngờ, 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ụ [code]http%3A%2F%2Fvictim.com%2Findex.php%3Fid%3D%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E[/code] 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.

DOM-based XSS

DOM-based XSS là một dạng tấn công XSS làm thay đổi cấu trúc của trang web bằng cách thay đổi cấu trúc HTML. Đối với dạng tấn công này, hacker sẽ chèn các đoạn script nhằm làm thay đổi giao diện mặc định của trang web thành một giao diện giả, ví dụ như tạo ra form đăng nhập giả và dụ người dùng đăng nhập để chiếm mật khẩu của họ. DOM-based XSS là một biến thể của Persistent XSS và Non-Persistent XSS.

Để hiểu rõ hơn về DOM-based XSS chúng ta cùng xem xét ví dụ sau:

Ví dụ ta có một URL như sau http://www.victim.com/hello.php

[code type="PHP"]<!DOCTYPE html> <html> <body> <?php if(isset($_GET("name"))) { echo "Hello " . $_GET["name"]; }?> </body> </html>[/code]

Như ta thấy, đoạn code trên dùng để hiện thị nội dung chào mừng người dùng khi người dùng được chuyển hướng tới, tên của người dùng được lấy từ tham số name trên URL

[code]http://www.victim.com/hello.php?name=passionery[/code]

URL trên sẽ chào mừng người dùng có tên passionery.

Mô tả dạng tấn công DOM-based XSS

Xem xét source code của hello.php, ta thấy không có sự ràng buộc dữ liệu nào, vì vậy, thay vì truyền tham số là passionery, ta có thể thay bằng

[code type="JavaScript"]<script>document.getElementById('hello').innerHTML="<label>Vui lòng xác nhận lại mật khẩu để tiếp tục: </label><input type='password'/><button onclick='show()'>Submit</button>";function show(){alert('HACKED');}</script>[/code]

Như vậy URL sẽ thành

[code]http://www.victim.com/hello.php?name=<script>document.getElementById('hello').innerHTML="<label>Vui lòng xác nhận lại mật khẩu để tiếp tục:</label><input type='password'/><button onclick='show()'>Submit</button>";function show(){alert('HACKED');}</script>[/code]

Khi đó, giao diện của trang web sẽ thay đổi thành

Mô tả dạng tấn công DOM-based XSS

Khi người dùng nhập mật khẩu vào và nhấn Submit thì lập tức script sẽ được thực thi và gửi về cho hacker mật khẩu của người dùng.

Mô tả dạng tấn công DOM-based XSS

Qua ví dụ trên ta thấy cách tấn công của DOM-based XSS cũng tương đối giống với cách tấn công của Reflected XSS là phải dụ người dùng click vào link có chứa mã độc để thực hiện tấn công. Ngoài ra, cũng có thể thấy giao diện của trang web có thể bị thay đổi bởi đoạn script được thêm vào, và sau đó nó sẽ thực thi như là một phần của trang web, như vậy sẽ làm cho người dùng lầm tưởng và hacker sẽ dễ dàng đạt được mục đích.

6 comments:

  1. bài viết hay lắm. Cảm ơn anh!

    ReplyDelete
  2. Có ai phân biệt dc DOM XSS với Reflected XSS không chỉ cho e với ạ :((

    ReplyDelete
    Replies
    1. Bài viết trên đã giải thích rõ ràng rồi.

      Delete

Powered by Blogger.