Web13: Session Fixation

Kaito KID

VIP Members
02/07/2013
23
41 bài viết
Web13: Session Fixation
1. Giới thiệu

Session Fixation là một kỹ thuật cho phép hacker có thể chiếm đoạt session của người dùng. Kỹ thuật này lợi dụng việc server không thay đổi giá trị của session ID mỗi khi người dùng đăng nhập, thay vào đó nó sử dụng session ID sẵn có trước đó. Quá trình tấn công bao gồm việc lấy một session ID hợp lệ (có thể bằng cách truy cập vào website), sau đó tìm cách để nạn nhân đăng nhập vào website với session ID này, cuối cùng, khi nạn nhân đăng nhập thành công, hacker sẽ duyệt website với tài khoản của anh ta. Kịch bản cụ thể như sau:
  1. Mallory tìm một website, chẳng hạn http://unsafe.example.com, chấp nhận bất cứ session ID nào từ request mà không cần xác thực.
  2. Mallory sẽ gửi đến Alice một e-mail, trong đó có chứa đường link http://unsafe.example.com/?SID=1234.
  3. Alice đi đến http://unsafe.example.com/?SID=1234. Sau đó đăng nhập vào website.
  4. Mallory chỉ cần đi đến http://unsafe.example.com/?SID=1234, và sử dụng website với tài khoản của Alice.
Mallory có thể dùng các cách sau để set cookie cho Alice:
  • Gửi kèm theo một đoạn script để set cookie
  • Gửi gói tin HTTP Response kèm theo giá trị cookie của MalloryGửi gói tin HTTP Response kèm theo giá trị cookie của Mallory
  • Sử dụng thẻ meta của HTML:

1490893064image1.png

2. Các ví dụ

Ví dụ 1 – Client-side scripting

Tương tự như kịch bản đã nêu ở phần trên, tuy nhiên, trong trường hợp này, Session ID không được truyền vào URL mà nằm trong cookie. Để sửa giá trị của Session ID trong cookie của nạn nhân, hacker sẽ chèn một đoạn Javascript:
http://website.kom/document.cookie=”sessionid=abcd”;

Ví dụ 2 - tag

Tương tự như client-side scripting, nhưng lần này hacker sẽ chèn thêm thẻ :
http://website.kon/

Ví dụ 3 – HTTP header response

Việc chèn Session ID cũng có thể được thực hiện bằng cách chặn các gói tin trao đổi giữa client và Web application, sau đó chèn thêm trường Set-Cookie vào header.

1490893064image2.png
3. Cách phòng chống

Nguyên nhân của lỗi này là do server không tái tạo session ID sau mỗi lần đăng nhập thành công. Vì thế, khắc phục lỗi này cũng không khó, ta chỉ cần thay đổi giá trị của Session ID là xong. Trong PHP, ta dùng hàm session_regenerate_id() để cấp lại session.
 
Chỉnh sửa lần cuối bởi người điều hành:
Bên trên