Tấn công XSS và cách phòng chống

TẤN CÔNG XSS VÀ CÁCH PHÒNG CHỐNG

I. 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.

II. 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.

III. 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

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

Figure-3_stored-attack

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.

2. 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:

xss-example-1

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ụ:


    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ụ:

  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.

 

3. 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

 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ố

 

 URL trên sẽ chào mừng người dùng có tên: Hello, phpcoban

Xem xét source code class 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à phpcoban, ta có thể thay bằng

Như vậy URL sẽ thành

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

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. Ở ví dụ trên đơn giản chỉ là hiện ra chữ HACKED.

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.

IV. Phòng chống XSS

Như đã đề cập ở trên, một tấn công XSS chỉ thực hiện được khi gửi một trang web cho trình duyệt của nạn nhân có kèm theo mã script độc của nạn nhân.

Người ta không lường hết được mức nguy hiểm của XSS nhưng cũng không quá khó để ngăn ngừa XSS. Có rất nhiều cách để giải quyết vấn đề này. OWASP nói rằng để có thể xây dựng website bảo mật cao, đảm bảo các trang phát sinh không chứa các tag của script, đối với dữ liệu của người sử dụng bạn nên làm những việc sau:

  1. Đối với người thiết kế và phát triển ứng dụng web

Với những dữ liệu, thông tin nhập của người dùng, người thiết kế và phát triển ứng dụng web cần thực hiện vài bước cơ bản sau:

  • Chỉ chấp nhận những dữ liệu hợp lệ
  • Từ chối nhận các dữ liệu hỏng
  • Liên tục kiểm tra và lọc dữ liệu
  • Tạo ra danh sách những thẻ HTML được phép sử dụng, xóa bỏ các thẻ <script>, coi đoạn script đó như là đoạn trích dẫn lỗi
  • Lọc dấu nháy đơn hay nháy kép
  • Lọc kí tự NULL
  • Xóa các kí tự “>”, “<” hoặc Output Endcoding các kí tự đó
  • Vẫn cho phép nhập dữ liệu đặc biệt nhưng chúng sẽ đc mã hóa theo chuẩn riêng

 

2. Đối với người dùng

Cấu hình lại trình duyệt để nhắc nhở người dùng có cho phép thực thi ngôn ngữ kịch bản trên máy họ hay không? Tùy vào mức độ tin cậy mà người dùng sẽ quyết đinh.

  • Dùng Firefox: Có thể cài thêm tiện ích(Add-on) YesScript – kiểm soát script từ website
  • Dùng IE: Có thể vào Options/Setting/.. Chúng ta Disable Script
  • Tương tự với Chrome và các trình duyệt khác
    Khi chúng ta vào một trang web mới thì ta cần phải cân nhắc khi click vào link, kiểm tra các link thật kĩ trước khi click. Và tóm lại, chúng ta sẽ an toàn hơn khi cảnh giác cao hơn.

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">