Phân tích sự kiện tấn công tái nhập của OrionProtocol
Tóm tắt sự kiện
Vào ngày 2 tháng 2 năm 2023, OrionProtocol đã chịu một cuộc tấn công tái nhập trên Ethereum và chuỗi thông minh Binance, dẫn đến tổn thất khoảng 2,9 triệu USD. Kẻ tấn công đã lợi dụng lỗ hổng hợp đồng để đánh cắp 2.844.766 USDT trên chuỗi Ethereum và 191.606 BUSD trên chuỗi thông minh Binance.
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, chuẩn bị cho cuộc tấn công tiếp theo.
Thực hiện vay mượn thông qua phương pháp swap của UNI-V2 và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool để thực hiện đổi token. Đường đi của việc đổi bao gồm địa chỉ hợp đồng Token do kẻ tấn công tạo ra.
Khi thực hiện phương thức swapThroughOrionPool, kẻ tấn công lợi dụng hàm gọi lại trong hợp đồng Token tùy chỉnh, gọi lại phương thức ExchangeWithAtomic.depositAsset nhiều lần, 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 thành việc thu lợi 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ừ ví nóng của một nền tảng giao dịch nào đó. Trong số 1,651 ETH kiếm được, 657.5 ETH vẫn còn trong ví của kẻ tấn công, phần còn lại đã được chuyển qua dịch vụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi nằm ở hàm doSwapThroughOrionPool. Hàm này trong quá trình thực hiện _doSwapTokens, trước tiên thực hiện thao tác chuyển tiền, sau đó cập nhật biến curBalance. Kẻ tấn công đã lợi dụng việc thêm callback 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 tính toán sai số dư.
Đề xuất phòng ngừa
Khi 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 Token và các con đường đổi khác nhau.
Tuân thủ mô hình "Kiểm tra - Hiệu lực - Tương tác" (Checks-Effects-Interactions) khi viết mã hợp đồng, tức là trước tiên thực hiện kiểm tra điều kiện, sau đó cập nhật biến trạng thái, cuối cùng là thực hiện gọi ngoại bộ.
Thêm cơ chế bảo mật như khóa tái nhập để ngăn chặn tấn công tái nhập.
Thực hiện kiểm tra mã định kỳ và quét lỗ hổng, kịp thời sửa chữa các mối nguy cơ an ninh tiềm ẩn.
Giới hạn số tiền tối đa cho một giao dịch, thiết lập giới hạn tần suất giao dịch và các biện pháp khác để giảm thiểu tổn thất do các cuộc tấn công tiềm ẩn.
Bằng cách thực hiện các biện pháp này, nhóm dự án có thể nâng cao đáng kể tính an toàn của hợp đồng và giảm thiểu rủi ro bị tấn công tương tự. Việc liên tục chú ý đến an toàn hợp đồng thông minh là vô cùng quan trọng để duy trì sự phát triển lành mạnh của hệ sinh thái Web3.
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.
12 thích
Phần thưởng
12
5
Chia sẻ
Bình luận
0/400
StakeOrRegret
· 07-15 17:28
Lại là cái bẫy của hợp đồng thông minh
Xem bản gốcTrả lời0
TokenEconomist
· 07-15 07:15
để tôi giải thích điều này: lỗ hổng tái nhập cổ điển, về cơ bản là chênh lệch kinh tế nhưng với lỗi hợp đồng thông minh
OrionProtocol đã bị tấn công tái nhập trị giá 2,9 triệu USD, cả hai chuỗi ETH và BSC đều bị ảnh hưởng.
Phân tích sự kiện tấn công tái nhập của OrionProtocol
Tóm tắt sự kiện
Vào ngày 2 tháng 2 năm 2023, OrionProtocol đã chịu một cuộc tấn công tái nhập trên Ethereum và chuỗi thông minh Binance, dẫn đến tổn thất khoảng 2,9 triệu USD. Kẻ tấn công đã lợi dụng lỗ hổng hợp đồng để đánh cắp 2.844.766 USDT trên chuỗi Ethereum và 191.606 BUSD trên chuỗi thông minh Binance.
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, chuẩn bị cho cuộc tấn công tiếp theo.
Thực hiện vay mượn thông qua phương pháp swap của UNI-V2 và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool để thực hiện đổi token. Đường đi của việc đổi bao gồm địa chỉ hợp đồng Token do kẻ tấn công tạo ra.
Khi thực hiện phương thức swapThroughOrionPool, kẻ tấn công lợi dụng hàm gọi lại trong hợp đồng Token tùy chỉnh, gọi lại phương thức ExchangeWithAtomic.depositAsset nhiều lần, 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 thành việc thu lợi 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ừ ví nóng của một nền tảng giao dịch nào đó. Trong số 1,651 ETH kiếm được, 657.5 ETH vẫn còn trong ví của kẻ tấn công, phần còn lại đã được chuyển qua dịch vụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi nằm ở hàm doSwapThroughOrionPool. Hàm này trong quá trình thực hiện _doSwapTokens, trước tiên thực hiện thao tác chuyển tiền, sau đó cập nhật biến curBalance. Kẻ tấn công đã lợi dụng việc thêm callback 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 tính toán sai số dư.
Đề xuất phòng ngừa
Khi 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 Token và các con đường đổi khác nhau.
Tuân thủ mô hình "Kiểm tra - Hiệu lực - Tương tác" (Checks-Effects-Interactions) khi viết mã hợp đồng, tức là trước tiên thực hiện kiểm tra điều kiện, sau đó cập nhật biến trạng thái, cuối cùng là thực hiện gọi ngoại bộ.
Thêm cơ chế bảo mật như khóa tái nhập để ngăn chặn tấn công tái nhập.
Thực hiện kiểm tra mã định kỳ và quét lỗ hổng, kịp thời sửa chữa các mối nguy cơ an ninh tiềm ẩn.
Giới hạn số tiền tối đa cho một giao dịch, thiết lập giới hạn tần suất giao dịch và các biện pháp khác để giảm thiểu tổn thất do các cuộc tấn công tiềm ẩn.
Bằng cách thực hiện các biện pháp này, nhóm dự án có thể nâng cao đáng kể tính an toàn của hợp đồng và giảm thiểu rủi ro bị tấn công tương tự. Việc liên tục chú ý đến an toàn hợp đồng thông minh là vô cùng quan trọng để duy trì sự phát triển lành mạnh của hệ sinh thái Web3.