Phân tích sự kiện tấn công tái nhập của OrionProtocol
Vào ngày 2 tháng 2 năm 2023, OrionProtocol đã gặp phải một cuộc tấn công tái nhập trên Ethereum và Binance Smart Chain, dẫn đến thiệt hại khoảng 2,9 triệu đô la Mỹ. 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 Binance Smart.
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 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. Sau đó, kẻ tấn công đã 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 việc đổi token. Đường đổi bao gồm địa chỉ hợp đồng Token mà kẻ tấn công đã tạo ra.
Trong quá trình trao đổi, do việc hợp đồng Token của kẻ tấn công có cơ chế gọi lại, kẻ tấn công có thể tiếp tục gọi lại phương thức ExchangeWithAtomic.depositAsset thông qua Token.Transfer, từ đó 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 lặp lại, cuối cùng kẻ tấn công đã hoàn thành việc thu lợi bằng cách thực hiện thao tác 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ố 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.
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, mà hàm này cập nhật biến curBalance sau khi thực hiện thao tác chuyển tiền. Kẻ tấn công đã lợi dụng chức năng callback đượ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 thêm tiền qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Đề xuất phòng ngừa
Để ngăn chặn các cuộc tấn công tương tự, chúng tôi khuyên các dự án nên chú ý đến các điểm sau khi thiết kế hợp đồng:
Xem xét các tình huống bất ngờ có thể xảy ra do nhiều Token và nhiều đường trao đổi.
Tuân theo mô hình mã hóa "Kiểm tra - Hiệu lực - Tương tác" (Checks-Effects-Interactions), 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 mới thực hiện gọi bên ngoài.
Sử dụng khóa tái nhập trước và sau các thao tác quan trọng, ngăn chặn các cuộc tấn công tái nhập.
Thực hiện kiểm tra an toàn cho hợp đồng Token gọi từ bên ngoài.
Thực hiện kiểm tra mã định kỳ và kiểm tra an ninh, phát hiện và sửa chữa kịp thời các lỗ hổng tiềm ẩn.
Bằng cách thực hiện các biện pháp này, dự án có thể cải thiện đáng kể tính an toàn và ổn định của hợp đồng, giảm thiểu tối đa rủi ro bị tấn công.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
17 thích
Phần thưởng
17
7
Chia sẻ
Bình luận
0/400
AirdropHunterXiao
· 14giờ trước
Dự án Blockchain lại bị kéo một đợt
Xem bản gốcTrả lời0
MemecoinResearcher
· 14giờ trước
ngmi... có vẻ như lời nguyền reentrancy lại xuất hiện một lần nữa fr fr
Xem bản gốcTrả lời0
NightAirdropper
· 14giờ trước
Hàng ngày bị đen tối thật khổ sở
Xem bản gốcTrả lời0
rugpull_survivor
· 14giờ trước
chơi đùa với mọi người một nhát còn một nhát tiếp theo
OrionProtocol đã chịu một cuộc tấn công tái nhập trị giá 2,9 triệu đô la Mỹ, phân tích quy trình tấn công và các đề xuất phòng ngừa.
Phân tích sự kiện tấn công tái nhập của OrionProtocol
Vào ngày 2 tháng 2 năm 2023, OrionProtocol đã gặp phải một cuộc tấn công tái nhập trên Ethereum và Binance Smart Chain, dẫn đến thiệt hại khoảng 2,9 triệu đô la Mỹ. 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 Binance Smart.
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 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. Sau đó, kẻ tấn công đã 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 việc đổi token. Đường đổi bao gồm địa chỉ hợp đồng Token mà kẻ tấn công đã tạo ra.
Trong quá trình trao đổi, do việc hợp đồng Token của kẻ tấn công có cơ chế gọi lại, kẻ tấn công có thể tiếp tục gọi lại phương thức ExchangeWithAtomic.depositAsset thông qua Token.Transfer, từ đó 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 lặp lại, cuối cùng kẻ tấn công đã hoàn thành việc thu lợi bằng cách thực hiện thao tác 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ố 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.
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, mà hàm này cập nhật biến curBalance sau khi thực hiện thao tác chuyển tiền. Kẻ tấn công đã lợi dụng chức năng callback đượ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 thêm tiền qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Đề xuất phòng ngừa
Để ngăn chặn các cuộc tấn công tương tự, chúng tôi khuyên các dự án nên chú ý đến các điểm sau khi thiết kế hợp đồng:
Bằng cách thực hiện các biện pháp này, dự án có thể cải thiện đáng kể tính an toàn và ổn định của hợp đồng, giảm thiểu tối đa rủi ro bị tấn công.