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 đã bị tấn công tái nhập do lỗ hổng hợp đồng trên Ethereum và Binance Smart Chain, tổng thiệt hại khoảng 2,9 triệu USD. Thiệt hại cụ thể bao gồm 2,844,766 USDT trên chuỗi Ethereum và 191,606 BUSD trên chuỗi Binance Smart.
Phân tích quá trình tấn công
Kẻ tấn công đầu tiên triển khai một hợp đồng Token tùy chỉnh 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 thực hiện vay mượn thông qua phương thức swap của một DEX và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool để thực hiện đổ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, kẻ tấn công đã lợi dụng chức năng gọi lại của hợp đồng Token tùy chỉnh, thông qua phương thức Token.Transfer để gọi lại liên tục hàm ExchangeWithAtomic.depositAsset, dẫn đến số tiền gửi được cộng dồn liên tục. Cuối cùng, kẻ tấn công đã hoàn thành việc kiếm lợi thông qua thao tác rút tiền.
Dòng tiền
Nguồ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 mà kẻ tấn công đã thu đượ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 nằm ở hàm doSwapThroughOrionPool. Hàm này gọi hàm _doSwapTokens, sau khi thực hiện chuyển tiền mã thông báo, biến curBalance được cập nhật. Kẻ tấn công đã thêm logic callback vào hàm transfer của Token tùy chỉnh, gọi hàm depositAsset, dẫn đến việc cập nhật curBalance không chính xác. Sau đó, kẻ tấn công gọi hàm withdraw để rút tiền sau khi hoàn trả khoản vay chớp nhoáng, hoàn thành cuộc tấn công.
Tái hiện tấn công
Kẻ tấn công tạo ra hợp đồng mã thông báo ERC20 tùy chỉnh và lợi dụng chức năng vay chớp nhoáng của một DEX để thực hiện tấn công. Các bước chính bao gồm:
Tạo Token tùy chỉnh và thiết lập cặp giao dịch với USDC, USDT
Chuẩn bị vốn ban đầu và cung cấp tính thanh khoản
Gọi các hàm depositAsset và swapThroughOrionPool của hợp đồng ExchangeWithAtomic
Thêm logic callback vào hàm transfer của Token tùy chỉnh
Cuối cùng, rút tiền lợi nhuận thông qua hàm withdraw.
Những lời khuyên an toàn
Để tránh các cuộc tấn công tương tự, nhóm dự án nên lưu ý những điểm sau:
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 lộ trình trao đổi.
Tuân theo quy tắc mã hóa "Kiểm tra trước, có hiệu lực sau, tương tác sau" (Checks-Effects-Interactions)
Thực hiện kiểm toán an ninh toàn diện, đặc biệt chú ý đến rủi ro tấn công gọi lại.
Cân nhắc sử dụng cơ chế bảo mật như khóa tái nhập
Thực hiện quét lỗ hổng hợp đồng và đánh giá an ninh định kỳ
Sự kiện này một lần nữa nhấn mạnh tầm quan trọng của an toàn hợp đồng thông minh, các dự án nên liên tục chú ý và cải thiện các biện pháp an toàn của họ để bảo vệ tài sản của người dùng và duy trì uy tín của nền tảng.
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遭2.9亿重入攻击 资金已部分流入 cốc trộn tiền điện tử
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 đã bị tấn công tái nhập do lỗ hổng hợp đồng trên Ethereum và Binance Smart Chain, tổng thiệt hại khoảng 2,9 triệu USD. Thiệt hại cụ thể bao gồm 2,844,766 USDT trên chuỗi Ethereum và 191,606 BUSD trên chuỗi Binance Smart.
Phân tích quá trình tấn công
Kẻ tấn công đầu tiên triển khai một hợp đồng Token tùy chỉnh 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 thực hiện vay mượn thông qua phương thức swap của một DEX và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool để thực hiện đổ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, kẻ tấn công đã lợi dụng chức năng gọi lại của hợp đồng Token tùy chỉnh, thông qua phương thức Token.Transfer để gọi lại liên tục hàm ExchangeWithAtomic.depositAsset, dẫn đến số tiền gửi được cộng dồn liên tục. Cuối cùng, kẻ tấn công đã hoàn thành việc kiếm lợi thông qua thao tác rút tiền.
Dòng tiền
Nguồ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 mà kẻ tấn công đã thu đượ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 nằm ở hàm doSwapThroughOrionPool. Hàm này gọi hàm _doSwapTokens, sau khi thực hiện chuyển tiền mã thông báo, biến curBalance được cập nhật. Kẻ tấn công đã thêm logic callback vào hàm transfer của Token tùy chỉnh, gọi hàm depositAsset, dẫn đến việc cập nhật curBalance không chính xác. Sau đó, kẻ tấn công gọi hàm withdraw để rút tiền sau khi hoàn trả khoản vay chớp nhoáng, hoàn thành cuộc tấn công.
Tái hiện tấn công
Kẻ tấn công tạo ra hợp đồng mã thông báo ERC20 tùy chỉnh và lợi dụng chức năng vay chớp nhoáng của một DEX để thực hiện tấn công. Các bước chính bao gồm:
Những lời khuyên an toàn
Để tránh các cuộc tấn công tương tự, nhóm dự án nên lưu ý những điểm sau:
Sự kiện này một lần nữa nhấn mạnh tầm quan trọng của an toàn hợp đồng thông minh, các dự án nên liên tục chú ý và cải thiện các biện pháp an toàn của họ để bảo vệ tài sản của người dùng và duy trì uy tín của nền tảng.