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, Orion Protocol trên chuỗi Ethereum và Binance đã 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 đô la Mỹ. Cụ thể, thiệt hại bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên chuỗi Binance.
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, chuẩn bị cho cuộc tấn công tiếp theo. Sau đó, kẻ tấn công vay tiề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 hoán đổi token.
Đường dẫn trao đổi được thiết lập thành [USDC, Token do kẻ tấn công tạo ra, USDT]. Trong quá trình trao đổi, do hợp đồng Token do kẻ tấn công tạo ra có chức năng gọi lại, kẻ tấn công có thể tiếp tục gọi lại phương thức depositAsset của hợp đồng ExchangeWithAtomic thông qua phương thức Transfer của Token, từ đó thực hiện tấn công tái nhập, làm cho số tiền gửi liên tục gia tăng. Cuối cùng, kẻ tấn công hoàn tất việc rút tiền để thu lợi.
Phân tích lỗ hổng
Lỗ hổng nằm ở hàm doSwapThroughOrionPool trong hợp đồng ExchangeWithAtomic. Hàm này có vấn đề sau khi thực hiện _doSwapTokens:
Cập nhật biến curBalance sau khi thực hiện thao tác chuyển tiền.
Không tuân theo mô hình "Kiểm tra - Hiệu ứng - Tương tác" (Checks-Effects-Interactions).
Kẻ tấn công đã lợi dụng lỗ hổng này, thêm chức năng gọi lại vào hàm transfer của hợp đồng Token giả mạo, khiến nó gọi hàm depositAsset khi thực hiện chuyển khoản. Điều này dẫn đến biến curBalance bị cập nhật sai, cho phép kẻ tấn công rút tiền thừa qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
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 đã 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.
Đề xuất phòng ngừa
Để tránh các cuộc tấn công tương tự, nhóm dự án nên chú ý đến những điểm sau:
Khi thiết kế hợp đồng, cần xem xét các tình huống bất ngờ có thể phát sinh từ nhiều Token và các con đường trao đổi khác nhau.
Tuân thủ nghiêm ngặt quy tắc lập trình "kiểm tra - hiệu quả - tương tác", đảm bảo thực hiện đánh giá trước, sau đó cập nhật biến trạng thái, cuối cùng mới thực hiện gọi bên ngoài.
Đối với các hoạt động quan trọng liên quan đến chuyển tiền, thực hiện các kiểm tra và hạn chế an ninh nghiêm ngặt hơn.
Thực hiện kiểm toán an ninh hợp đồng định kỳ để phát hiện và sửa chữa kịp thời các lỗ hổng tiềm ẩn.
Sự kiện này một lần nữa nhắc nhở chúng ta rằng, an ninh là vô cùng quan trọng trong phát triển hợp đồng thông minh. Các bên dự án nên luôn giữ cảnh giác và thực hiện nhiều biện pháp bảo vệ để giảm thiểu rủi ro hợp đồng ở mức tối đa.
Xem bản gốc
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 USD USDT và BUSD
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, Orion Protocol trên chuỗi Ethereum và Binance đã 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 đô la Mỹ. Cụ thể, thiệt hại bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên chuỗi Binance.
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, chuẩn bị cho cuộc tấn công tiếp theo. Sau đó, kẻ tấn công vay tiề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 hoán đổi token.
Đường dẫn trao đổi được thiết lập thành [USDC, Token do kẻ tấn công tạo ra, USDT]. Trong quá trình trao đổi, do hợp đồng Token do kẻ tấn công tạo ra có chức năng gọi lại, kẻ tấn công có thể tiếp tục gọi lại phương thức depositAsset của hợp đồng ExchangeWithAtomic thông qua phương thức Transfer của Token, từ đó thực hiện tấn công tái nhập, làm cho số tiền gửi liên tục gia tăng. Cuối cùng, kẻ tấn công hoàn tất việc rút tiền để thu lợi.
Phân tích lỗ hổng
Lỗ hổng nằm ở hàm doSwapThroughOrionPool trong hợp đồng ExchangeWithAtomic. Hàm này có vấn đề sau khi thực hiện _doSwapTokens:
Kẻ tấn công đã lợi dụng lỗ hổng này, thêm chức năng gọi lại vào hàm transfer của hợp đồng Token giả mạo, khiến nó gọi hàm depositAsset khi thực hiện chuyển khoản. Điều này dẫn đến biến curBalance bị cập nhật sai, cho phép kẻ tấn công rút tiền thừa qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
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 đã 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.
Đề xuất phòng ngừa
Để tránh các cuộc tấn công tương tự, nhóm dự án nên chú ý đến những điểm sau:
Sự kiện này một lần nữa nhắc nhở chúng ta rằng, an ninh là vô cùng quan trọng trong phát triển hợp đồng thông minh. Các bên dự án nên luôn giữ cảnh giác và thực hiện nhiều biện pháp bảo vệ để giảm thiểu rủi ro hợp đồng ở mức tối đa.