Phân tích sự kiện tấn công tái nhập của OrionProtocol
Vào chiều ngày 2 tháng 2 năm 2023, OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do lỗ hổng hợp đồng, gây thiệt hại khoảng 2,9 triệu USD, trong đó bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên Binance Smart Chain.
Phân tích quá trình tấn công
Kẻ tấn công trước tiên tạo ra một hợp đồng Token và thực hiện các thao tác 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 vay mượn thông qua phương thức swap của UNI-V2, và gọi phương thức swapThroughOrionPool của hợp đồng ExchangeWithAtomic để thực hiện việc trao đổi token. Đường trao đổi được thiết lập là USDC → Token mà kẻ tấn công tạo ra → USDT.
Trong quá trình đổi, do hợp đồng Token được tạo ra bởi kẻ tấn công có chức năng gọi lại, dẫn đến việc khi thực hiện phương thức ExchangeWithAtomic.swapThroughOrionPool, thông qua Token.Transfer tiếp tục gọi lại phương thức ExchangeWithAtomic.depositAsset, gây ra tấn công tái nhập. Điều này khiến số tiền gửi liên tục gia tăng, cuối cùng kẻ tấn công hoàn thành việc thu lợi thông qua hoạt động 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 trong địa chỉ ví của kẻ tấn công, phần còn lại đã được chuyển đi thông qua dịch vụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi của lỗ hổng xuất hiện trong hàm doSwapThroughOrionPool. Hàm này gọi hàm _doSwapTokens, trong hàm đó, thao tác chuyển token xảy ra trước khi curBalance được cập nhật. Kẻ tấn công đã tận dụng tính năng gọi lại được thêm vào hàm transfer của Token tùy chỉnh, gọi lại hàm depositAsset trước khi curBalance được cập nhật, dẫn đến việc curBalance bị cập nhật sai. Cuối cùng, kẻ tấn công đã rút tiền thành công sau khi hoàn trả khoản vay chớp nhoáng bằng cách gọi hàm withdraw.
Đề xuất phòng ngừa
Khi thiết kế hợp đồng, cần xem xét những rủi ro tiềm ẩn có thể phát sinh từ nhiều loại Token và các con đường trao đổi khác nhau.
Tuân theo quy tắc lập trình "Đánh giá trước, cập nhật biến sau, cuối cùng là gọi bên ngoài" (mô hình Checks-Effects-Interactions) có thể cải thiện hiệu suất bảo mật của hợp đồng.
Khi thực hiện chức năng trao đổi token, cần đặc biệt chú ý đến rủi ro tấn công tái nhập, có thể xem xét sử dụng cơ chế khóa tái nhập để bảo vệ.
Đối với các chức năng quan trọng liên quan đến việc thao tác tài chính, nên thực hiện kiểm toán và kiểm tra an toàn toàn diện, bao gồm mô phỏng các tình huống biên và các tình huống bất thường.
Thực hiện kiểm tra an toàn hợp đồng định kỳ, kịp thời cập nhật và sửa chữa các lỗ hổng tiềm ẩn.
Bằng cách thực hiện các biện pháp này, có thể giảm đáng kể rủi ro 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. Trong hệ sinh thái Web3, an toàn luôn là một trong những yếu tố quan trọng nhất.
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, thiệt hại 2,9 triệu đô la Mỹ tài sản mã hóa
Phân tích sự kiện tấn công tái nhập của OrionProtocol
Vào chiều ngày 2 tháng 2 năm 2023, OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do lỗ hổng hợp đồng, gây thiệt hại khoảng 2,9 triệu USD, trong đó bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên Binance Smart Chain.
Phân tích quá trình tấn công
Kẻ tấn công trước tiên tạo ra một hợp đồng Token và thực hiện các thao tác 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 vay mượn thông qua phương thức swap của UNI-V2, và gọi phương thức swapThroughOrionPool của hợp đồng ExchangeWithAtomic để thực hiện việc trao đổi token. Đường trao đổi được thiết lập là USDC → Token mà kẻ tấn công tạo ra → USDT.
Trong quá trình đổi, do hợp đồng Token được tạo ra bởi kẻ tấn công có chức năng gọi lại, dẫn đến việc khi thực hiện phương thức ExchangeWithAtomic.swapThroughOrionPool, thông qua Token.Transfer tiếp tục gọi lại phương thức ExchangeWithAtomic.depositAsset, gây ra tấn công tái nhập. Điều này khiến số tiền gửi liên tục gia tăng, cuối cùng kẻ tấn công hoàn thành việc thu lợi thông qua hoạt động 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 trong địa chỉ ví của kẻ tấn công, phần còn lại đã được chuyển đi thông qua dịch vụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi của lỗ hổng xuất hiện trong hàm doSwapThroughOrionPool. Hàm này gọi hàm _doSwapTokens, trong hàm đó, thao tác chuyển token xảy ra trước khi curBalance được cập nhật. Kẻ tấn công đã tận dụng tính năng gọi lại được thêm vào hàm transfer của Token tùy chỉnh, gọi lại hàm depositAsset trước khi curBalance được cập nhật, dẫn đến việc curBalance bị cập nhật sai. Cuối cùng, kẻ tấn công đã rút tiền thành công sau khi hoàn trả khoản vay chớp nhoáng bằng cách gọi hàm withdraw.
Đề xuất phòng ngừa
Khi thiết kế hợp đồng, cần xem xét những rủi ro tiềm ẩn có thể phát sinh từ nhiều loại Token và các con đường trao đổi khác nhau.
Tuân theo quy tắc lập trình "Đánh giá trước, cập nhật biến sau, cuối cùng là gọi bên ngoài" (mô hình Checks-Effects-Interactions) có thể cải thiện hiệu suất bảo mật của hợp đồng.
Khi thực hiện chức năng trao đổi token, cần đặc biệt chú ý đến rủi ro tấn công tái nhập, có thể xem xét sử dụng cơ chế khóa tái nhập để bảo vệ.
Đối với các chức năng quan trọng liên quan đến việc thao tác tài chính, nên thực hiện kiểm toán và kiểm tra an toàn toàn diện, bao gồm mô phỏng các tình huống biên và các tình huống bất thường.
Thực hiện kiểm tra an toàn hợp đồng định kỳ, kịp thời cập nhật và sửa chữa các lỗ hổng tiềm ẩn.
Bằng cách thực hiện các biện pháp này, có thể giảm đáng kể rủi ro 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. Trong hệ sinh thái Web3, an toàn luôn là một trong những yếu tố quan trọng nhất.