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, trong đó bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên BSC.
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 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 đổi token. Đường đổi được thiết lập là [USDC, Token do kẻ tấn công tạo ra, USDT].
Trong quá trình trao đổ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, kẻ tấn công đã tiếp tục gọi lại phương thức ExchangeWithAtomic.depositAsset thông qua Token.Transfer, thực hiện cuộc tấn công tái nhập. Điều này dẫn đến số tiền gửi bị 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 nhuận 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 nào đó. Trong số 1651 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 cập nhật biến curBalance sau khi thực hiện chuyển token, điều này tạo cơ hội cho kẻ tấn công. Kẻ tấn công đã thêm chức năng callback vào hàm transfer của token giả, gọi hàm depositAsset, dẫn đến việc cập nhật curBalance sai. Cuối cùng, kẻ tấn công đã rút tiền thừa thông qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Tái hiện tấn công
Các nhà nghiên cứu đã cung cấp một phần mã POC, mô phỏng quá trình tấn công. Kết quả thử nghiệm cho thấy, kẻ tấn công đã thành công trong việc khai thác lỗ hổng hợp đồng để lấy thêm USDT.
Đề xuất an toàn
Đối với các dự án có chức năng trao đổi token, cần xem xét các rủi ro bảo mật có thể phát sinh từ nhiều loại Token và các đường trao đổi khác nhau. Đề xuất tuân thủ quy tắc lập trình "kiểm tra trước, ghi vào biến sau, sau đó thực hiện gọi bên ngoài" (mô hình Checks-Effects-Interactions) để nâng cao tính bảo mật và ổn định của hợp đồng. Ngoài ra, phía dự án nên cố gắng loại bỏ rủi ro hợp đồng ngoài chuỗi, đảm bảo việc vận hành an toàn 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.
21 thích
Phần thưởng
21
3
Chia sẻ
Bình luận
0/400
VirtualRichDream
· 07-15 08:57
Hả? Ai đi kiểm tra xem là có nội gián làm không?
Xem bản gốcTrả lời0
HallucinationGrower
· 07-12 12:30
Không có công việc kiểm tra an ninh thì đã làm gì?
OrionProtocol bị tấn công tái nhập, thiệt hại 2,9 triệu USD. Phân tích lỗ hổng bảo mật và đề xuất biện pháp phòng ngừ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, 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, trong đó bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên BSC.
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 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 đổi token. Đường đổi được thiết lập là [USDC, Token do kẻ tấn công tạo ra, USDT].
Trong quá trình trao đổ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, kẻ tấn công đã tiếp tục gọi lại phương thức ExchangeWithAtomic.depositAsset thông qua Token.Transfer, thực hiện cuộc tấn công tái nhập. Điều này dẫn đến số tiền gửi bị 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 nhuận 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 nào đó. Trong số 1651 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 cập nhật biến curBalance sau khi thực hiện chuyển token, điều này tạo cơ hội cho kẻ tấn công. Kẻ tấn công đã thêm chức năng callback vào hàm transfer của token giả, gọi hàm depositAsset, dẫn đến việc cập nhật curBalance sai. Cuối cùng, kẻ tấn công đã rút tiền thừa thông qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Tái hiện tấn công
Các nhà nghiên cứu đã cung cấp một phần mã POC, mô phỏng quá trình tấn công. Kết quả thử nghiệm cho thấy, kẻ tấn công đã thành công trong việc khai thác lỗ hổng hợp đồng để lấy thêm USDT.
Đề xuất an toàn
Đối với các dự án có chức năng trao đổi token, cần xem xét các rủi ro bảo mật có thể phát sinh từ nhiều loại Token và các đường trao đổi khác nhau. Đề xuất tuân thủ quy tắc lập trình "kiểm tra trước, ghi vào biến sau, sau đó thực hiện gọi bên ngoài" (mô hình Checks-Effects-Interactions) để nâng cao tính bảo mật và ổn định của hợp đồng. Ngoài ra, phía dự án nên cố gắng loại bỏ rủi ro hợp đồng ngoài chuỗi, đảm bảo việc vận hành an toàn của hệ sinh thái Web3.