CSRF – Khái niệm, kịch bản khai thác và cách phòng chống - Phần 1

Kaito KID

VIP Members
02/07/2013
23
41 bài viết
CSRF – Khái niệm, kịch bản khai thác và cách phòng chống - Phần 1
Tóm tắt
Bài viết này đề cập đến một lỗ hổng thường xuất hiện trong các ứng dụng web, nằm trong OWASP TOP 10 (2013) – CSRF. Bài viết được tổng hợp từ các tài liệu về CSRF, cách kiểm tra, đánh giá code và cách phòng chống CSRF của tổ chức OWASP.

1. CSRF là gì?
Cross-Site Request Forgery, cũng được biết đến với các tên gọi one-click attack, session riding, XSRF, là một phương thức tấn công lừa người dùng cuối thực hiện những hành động không mong muốn trên một ứng dụng web. Phương thức tấn công này sẽ “mượn tay” người dùng gửi những request định sẵn đến server, trong khi họ vẫn đang trong phiên đăng nhập.
Ví dụ, A có quyền thực hiện một quyền X thông qua một link HTTP. B bằng cách nào đó biết được link này, nhưng không có quyền thực thi. Anh ta sẽ lừa A click vào link soạn sẵn của mình, khi đó, link HTTP sẽ được thực thi một cách hợp pháp dưới quyền của A.

2. Kịch bản khai thác
Chúng ta cùng xem xét một ví dụ sau: Alice muốn chuyển $100 cho Bob thông qua website bank.com, website này có lỗ hổng CSRF. Maria, một kẻ tấn công, muốn lừa Alice gửi tiền cho cô ta. Maria phải thực hiện hai bước sau:
  • Xây dựng một URL hoặc một đoạn script để khai thác.
  • Lừa Alice thực thi URL hoặc đoạn script trên.

Đối với phương thức GET
Nếu ứng dụng web sử dụng phương thưc GET để truyền tham số và thực thi hành động, tác vụ chuyển tiền có thể được thực hiện thông qua URL tương tự như sau:

HTML:
GET http://bank.com/transfer.do?acct=BOB&amount=100 HTTP/1.1

Đầu tiên, Maria sẽ tạo một URL có nhiệm vụ chuyển tiền từ tài khoản của Alice đến tài khoản của cô ta:

HTML:
http://bank.com/transfer.do?acct=MARIA&amount=100000

Bằng một số kỹ thuật Social Engineering, Maria sẽ lừa Alice request đến bank.com với URL trên. Ví dụ:

HTML:
[URL="http://bank.com/transfer.do?acct=MARIA&amount=100000"]View my Pictures![/URL]

Hoặc:

HTML:
[IMG]http://bank.com/transfer.do?acct=MARIA&amount=100000[/IMG]

Đối với phương thức POST
Khác với trường hợp vừa nêu trên, ứng dụng web sẽ gửi thông tin lên thông qua phương thức POST:

HTML:
POST http://bank.com/transfer.do HTTP/1.1
acct=BOB&amount=100

Request sẽ không được chuyển đến server thông qua thẻ A hay IMG, nhưng có thể được chuyển đi thông qua thẻ FORM:

HTML:
 
Chỉnh sửa lần cuối bởi người điều hành:
Bên trên