Mô phỏng cách thức tấn công qua CSRF

Tấn công qua CSRF và Nonce trong WordPress

CSRF là gì ?

Trước tiên chúng ta cần phải tìm hiểu một vài khái niệm về cách thức tấn công CSRF:

CSRF ( Cross Site Request Forgery) là kĩ thuật tấn công bằng cách sử dụng quyền chứng thực của người sử dụng đối với 1 website khác. Các ứng dụng web hoạt động theo cơ chế nhận các câu lệnh HTTP từ người sử dụng, sau đó thực thi các câu lệnh này.

Mô phỏng cách thức tấn công qua CSRF
Mô phỏng cách thức tấn công qua CSRF

Hacker sử dụng phương pháp CSRF để lừa trình duyệt của người dùng gửi đi các câu lệnh http đến các ứng dụng web. Trong trường hợp phiên làm việc của người dùng chưa hết hiệu lực thì các câu lệnh trên sẽ dc thực hiện với quyền chứng thực của người sử dụng.

Ví dụ trong trường hợp này: Tôi vừa đăng nhập vào trong admin của JamViet.com thì có một bạn buzz tôi qua skype bảo rằng đường dẫn này có vấn đề ( jamviet.com/wp-admin?delete_post=12) và cần tôi kiểm tra lại, nhưng sau khi tôi click vào thì vô tình đã xóa mất bài có ID là 12 vì đơn giản là tôi đã đăng nhập admin và việc này hoàn toàn hợp lệ, đây là cách tấn công CSRF đơn giản nhất mà các bạn có thể thấy, và nếu lừa dạng kiểu này thì nhiều người bị dính !

Đừng lo, nếu bạn đang phát triển hệ thống trên WordPress thì các bạn có thể yên tâm rằng WordPress đã có cơ chế chống lại vấn đề này với các hàn tạo mã Nonce ! Đây là mã tạo ngẫu nhiên theo các action và mỗi một action này sẽ sinh ra một mã độc nhất để thực thi một việc nào đó, ví dụ bạn bấm vào xóa thùng rác chẳng hạn, nó sẽ có mã như sau:

http://example.com/wp-admin/post.php?post=119&action=trash&_wpnonce=c7c235f5c6

Có một biến trên đường dẫn là _wpnonce với mã tạo ra ngắn nhưng độc nhất để đảm bảo rằng lệnh này của người dùng là hoàn toàn hợp lệ, nếu bạn gửi một lệnh tấn công qua CSRF là điều không thể vì bạn hoàn toàn không nhận được mã nonce hợp lệ !

Nonce là một mã được tạo ra bởi các hàm bảo mật của WordPress và chỉ được sử dụng một lần duy nhất, nhằm đảm bảo rằng người dùng không bị nhầm lẫn các hành động, ví dụ như đóng trình duyệt và mở lại trình duyệt, lệnh sẽ không thực thi được lần thứ hai, các mã Nonce được sinh ra tự động và chèn vào tất cả các lệnh thực thi trong admin, tuy nhiên chúng ta có thể sử dụng ngoài giao diện bằng cách gọi các hàm liên quan trong WordPress.

Các hàm liên quan tới Nonce trong WordPress

  1. wp_explain_nonce() – đã bị loại bỏ khỏi version mới nhất
  2. wp_nonce_ays() – thêm dòng thông báo “bạn có chắc muốn làm việc này” để cảnh báo người dùng.
  3. wp_nonce_field() – dùng để thêm các giá trị vào trong form và các input ẩn, không dành cho các đường dẫn.
  4. wp_nonce_url() – thêm mã Nonce vào các đường dẫn
  5. wp_verify_nonce() – kiểm tra tính hợp lệ của mã đã tạo
  6. wp_create_nonce() – tạo mã Nonce
  7. check_admin_referer() – Kiểm tra tính hợp lệ của lệnh, đảm bảo rằng lệnh này được người dùng click từ admin
  8. check_ajax_referer() – Kiểm tra tính hợp lệ của lệnh Ajax, tuy nhiên cũng như hàm bên trên, những điều này làm giả được bằng flash
  9. wp_referer_field() – Kiểm tra tính hợp lệ của Referal được ẩn trong một form, giá trị này cũng được làm giả dễ dàng bằng Firebug

Tùy vào nhu cầu sử dụng mà các bạn có thể dùng các hàm trên do WordPress cung cấp, các bạn có thể tham khảo thêm thông tin tại đây: http://codex.wordpress.org/WordPress_Nonces

Chúc các bạn thành công !

TÁC GIẢ:

Tôi là Jam, thâm niên 7 năm thiết kế website và làm SEO. Hãy theo dõi blog của tôi để nhận được nhiều chia sẻ thú vị xung quanh chủ đề công nghệ.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *