Phân tích sự kiện tấn công tái nhập của OrionProtocol
Vào lúc 15:40:20 UTC ngày 2 tháng 2 năm 2023, hợp đồng OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do có lỗ hổng. Kẻ tấn công đã thu lợi được 2,844,766 USDT trên chuỗi Ethereum và 191,606 BUSD trên chuỗi Binance Smart, tổng cộng khoảng 2,9 triệu USD.
Phân tích quá trình tấn công
Kẻ tấn công trước tiên triển khai một hợp đồng Token tùy chỉnh và thực hiện các hoạt động chuyển nhượng và ủy quyền liên quan, chuẩn bị cho cuộc tấn công tiếp theo.
Sau đó, kẻ tấn công đã thực hiện vay mượn thông qua phương pháp swap của một DEX nào đó, và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool của OrionProtocol để thực hiện việc đổi token. Đường đổi được thiết lập là [USDC, Token của kẻ tấn công, USDT].
Trong quá trình trao đổi, do hợp đồng Token được tạo ra bởi kẻ tấn công chứa logic gọi lại, nên khi thực hiện thao tác Chuyển, sẽ kích hoạt việc gọi lại phương thức ExchangeWithAtomic.depositAsset, dẫn đến số tiền gửi bị cộng dồn nhiều lần. Cuối cùng, kẻ tấn công hoàn tất việc kiếm lợi nhuận thông qua thao tác rút tiền.
Dòng tiền
Vốn ban đầu của kẻ tấn công đến từ tài khoản ví nóng của một nền tảng giao dịch. Trong số 1,651 ETH đã kiếm được, 657.5 ETH vẫn còn nằm trong địa chỉ ví của kẻ tấn công, phần còn lại đã được chuyển qua dịch vụ trộn tiền.
Phân tích lỗ hổng
Vấn đề cốt lõi nằm ở hàm doSwapThroughOrionPool của hợp đồng ExchangeWithAtomic. Hàm này cập nhật biến curBalance sau khi thực hiện chuyển tiền Token, tạo điều kiện cho cuộc tấn công tái nhập. Kẻ tấn công lợi dụng hàm gọi lại transfer của Token tùy chỉnh để gọi phương thức depositAsset, dẫn đến việc curBalance bị cập nhật sai. Cuối cùng, kẻ tấn công đã rút thêm tiền thông qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Đề xuất an toàn
Trong thiết kế hợp đồng, cần xem xét các rủi ro an ninh có thể phát sinh từ nhiều loại Token và các đường đổi khác nhau.
Tuân theo mô hình "Kiểm tra - Hiệu ứng - Tương tác"(Checks-Effects-Interactions) để viết mã hợp đồng, tức là trước tiên kiểm tra điều kiện, sau đó cập nhật biến trạng thái, và cuối cùng thực hiện gọi ngoài.
Triển khai khóa tái nhập trong các hàm quan trọng để ngăn chặn các cuộc tấn công tái nhập.
Đối với hợp đồng Token được gọi từ bên ngoài, cần thực hiện kiểm tra an ninh nghiêm ngặt và quản lý danh sách trắng.
Thực hiện kiểm toán an ninh hợp đồng định kỳ, kịp thời phát hiện và khắc phục các lỗ hổng tiềm ẩn.
Bằng cách thực hiện những biện pháp này, có thể giảm hiệu quả rủi ro cho các hợp đồng thông minh bị tấn công, nâng cao tính an toàn tổng thể của dự án.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
OrionProtocol bị tấn công tái nhập với thiệt hại 2,9 triệu USD
Phân tích sự kiện tấn công tái nhập của OrionProtocol
Vào lúc 15:40:20 UTC ngày 2 tháng 2 năm 2023, hợp đồng OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do có lỗ hổng. Kẻ tấn công đã thu lợi được 2,844,766 USDT trên chuỗi Ethereum và 191,606 BUSD trên chuỗi Binance Smart, tổng cộng khoảng 2,9 triệu USD.
Phân tích quá trình tấn công
Kẻ tấn công trước tiên triển khai một hợp đồng Token tùy chỉnh và thực hiện các hoạt động chuyển nhượng và ủy quyền liên quan, chuẩn bị cho cuộc tấn công tiếp theo.
Sau đó, kẻ tấn công đã thực hiện vay mượn thông qua phương pháp swap của một DEX nào đó, và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool của OrionProtocol để thực hiện việc đổi token. Đường đổi được thiết lập là [USDC, Token của kẻ tấn công, USDT].
Trong quá trình trao đổi, do hợp đồng Token được tạo ra bởi kẻ tấn công chứa logic gọi lại, nên khi thực hiện thao tác Chuyển, sẽ kích hoạt việc gọi lại phương thức ExchangeWithAtomic.depositAsset, dẫn đến số tiền gửi bị cộng dồn nhiều lần. Cuối cùng, kẻ tấn công hoàn tất việc kiếm lợi nhuận thông qua thao tác rút tiền.
Dòng tiền
Vốn ban đầu của kẻ tấn công đến từ tài khoản ví nóng của một nền tảng giao dịch. Trong số 1,651 ETH đã kiếm được, 657.5 ETH vẫn còn nằm trong địa chỉ ví của kẻ tấn công, phần còn lại đã được chuyển qua dịch vụ trộn tiền.
Phân tích lỗ hổng
Vấn đề cốt lõi nằm ở hàm doSwapThroughOrionPool của hợp đồng ExchangeWithAtomic. Hàm này cập nhật biến curBalance sau khi thực hiện chuyển tiền Token, tạo điều kiện cho cuộc tấn công tái nhập. Kẻ tấn công lợi dụng hàm gọi lại transfer của Token tùy chỉnh để gọi phương thức depositAsset, dẫn đến việc curBalance bị cập nhật sai. Cuối cùng, kẻ tấn công đã rút thêm tiền thông qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Đề xuất an toàn
Trong thiết kế hợp đồng, cần xem xét các rủi ro an ninh có thể phát sinh từ nhiều loại Token và các đường đổi khác nhau.
Tuân theo mô hình "Kiểm tra - Hiệu ứng - Tương tác"(Checks-Effects-Interactions) để viết mã hợp đồng, tức là trước tiên kiểm tra điều kiện, sau đó cập nhật biến trạng thái, và cuối cùng thực hiện gọi ngoài.
Triển khai khóa tái nhập trong các hàm quan trọng để ngăn chặn các cuộc tấn công tái nhập.
Đối với hợp đồng Token được gọi từ bên ngoài, cần thực hiện kiểm tra an ninh nghiêm ngặt và quản lý danh sách trắng.
Thực hiện kiểm toán an ninh hợp đồng định kỳ, kịp thời phát hiện và khắc phục các lỗ hổng tiềm ẩn.
Bằng cách thực hiện những biện pháp này, có thể giảm hiệu quả rủi ro cho các hợp đồng thông minh bị tấn công, nâng cao tính an toàn tổng thể của dự án.