Tổng quan về CSRF

 

TỔNG QUAN VỀ CSRF

 

I. CSRF là gì

Kỹ thuật tấn công CSRF hay còn gọi là kỹ thuật tấn công “Cross-site Request Forgery“, nghĩa là kỹ thuật tấn công giả mạo chính chủ thể của nó. 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.

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.

CSRF còn dc gọi là “session riding“, “XSRF”

II. Lịch sử về tấn công CSRF

Các kiểu tấn công CSRF xuất hiện từ những năm 1990, tuy nhiên các cuộc tấn công này xuất phát từ chính IP của người sử dụng nên log file của các website k cho thấy các dấu hiệu của CSRF. Các cuộc tấn công theo kĩ thuật CSRF k dc báo cáo đầy đủ, đến năm 2007 mới có một vài tài liệu miêu tả chi tiết về các trường hợp tấn công CSRF.

Vào tháng 2 năm 2008, khoảng 18 triệu khách hàng trên eBay tại trang auction.co.kr tại Hàn Quốc đã bị mất thông tin cá nhân. Cũng trong năm 2008 này, nhiều khách hàng của một ngân hàng Mexico cũng bị tấn công bởi một email có chứa thẻ image. Link của image này sẽ chuyển đổi DNS trong router của nạn nhân, khiến cho khi họ truy cập vào trang web của ngân hàng sẽ dẫn tới trang mạo danh, lừa đảo. Trong 2 trường hợp kể trên hacker đều sử dụng kĩ thuật tấn công CSRF.

III. Kịch bản tấn công

Người dùng A duyệt diễn đàn của mình. Một người dùng khác, B đăng tải 1 thông điệp lên diễn đàn. Giả sử rằng B có ý đồ k tốt và anh ta muốn lấy tiền từ những người có tài khoản tại ngân hàng như AB sẽ tạo 1 thông báo, trong đó có chèn 1 đoạn code như sau:

trong đó sender là người gửi tiền, receiver là người nhận tiền và amount là số tiền chuyển. Hiển nhiên là đường link này chỉ được người A thực thi, vì thế nên phải có một thao tác kiểm tra sender chính là người thực thi đường link. Tuy nhiên, đoạn code trên được che giấu rất kỹ:

  • Thứ nhất: nó thêm một thông điệp bình thường khiến người dùng không chú ý.
  • Thứ hai: thẻ <img> được gán thêm vào với kích thước 0x0 pixel khiến người dùng không thể thấy được.

Giả sử A đang đăng nhập tài khoản ngân hàng của mình và chưa đăng xuất để kết thúc thì Trình duyệt của A sẽ gửi câu lệnh HTTP GET đến địa chỉ lưu trong thẻ “<img>” trong đoạn mã trên và nó sẽ dc thực hiện bằng quyền chứng thực của A.

Trong ví dụ trên hacker có thể sử dụng 1 URL khác, ví dụ: http://www.phpcoban.com/admin/project/1/delete để xóa đi một dự án quan trọng nào đó mà A đang làm.

Các kĩ thuật CSRF rất đa dạng, lừa người dùng click vào link, gửi email chứa các đoạn mã độc đến người dùng…

  IV. Cách phòng chống

Để ngăn chặn CSRF, có hai phương pháp thường được sử dụng:

1. Sử dụng token

Phương pháp thứ nhất là chèn thêm token vào đường link thực hiện thao tác. Giá trị token này phải mạnh, khó đoán, thường là hash của session ID của user kết hợp với password, IP của user, thời điểm đăng nhập,…Mục đích của token là làm cho hacker không thể xác định được chính xác đường link thực hiện thao tác.

Với ví dụ ở trên, ta thêm biến token vào thì đường link có dạng:

http://www.xyzbank.vn/sendfund.php?sender=A&receiver=B&amount=1000000000&token=6asdkasd6ocucs

Giá trị của biến token được sinh ra ngẫu nhiên hoặc tùy theo thuật toán của lập trình viên. Trong file sendfund.php sẽ có một hàm sinh ra token này và kiểm tra xem có khớp với giá trị token trên URL không, nếu không khớp thì thao tác chuyển tiền trên không được thực hiện.

Điểm yếu của phương pháp này là khi giá trị token bị lộ và khi trang web sử dụng ajax sẽ không load lại trang sẽ khiến mã token này không sinh ra khiến nó trở nên vô dụng.

2. Chèn bước xác nhận trung gian trước những thao tác nhạy cảm

Có thể yêu cầu user nhập lại mật khẩu để xác nhận thao tác thực hiện hoặc yêu cầu nhập captcha.

Các dịch vụ thanh toán (ngân hàng, chứng khoán) thường yêu cầu user sử dụng thêm OTP (One-time password) hoặc chứng thư số để xác nhận lại các giao dịch.

Sau bài viết này mình mong các bạn có những hiểu biết đầu tiên về CSRF và các cách phòng tránh cơ bản. Cảm ơn các bạn đã theo dõi và hẹn gặp lại ở các bài tiếp theo.

 

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="">