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, dự án OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do lỗ hổng hợp đồng, tổng thiệt hại khoảng 2,9 triệu đô la tài sản, trong đó bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên Binance Smart Chain.
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 đặc biệt và thực hiện một loạt công tác chuẩn bị. Sau đó, kẻ tấn công vay vốn thông qua chức năng swap của một DEX nào đó và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool của OrionProtocol để thực hiện việc trao đổi token. Đường dẫn trao đổi bao gồm địa chỉ hợp đồng Token mà kẻ tấn công đã tạo ra, điều này đã chuẩn bị cho cuộc tấn công callback tiếp theo.
Trong quá trình trao đổi, do hợp đồng Token của kẻ tấn công chứa logic callback, dẫn đến việc gọi lại phương thức ExchangeWithAtomic.depositAsset nhiều lần trong khi thực hiện giao dịch chuyển tiền. Cuộc tấn công tái nhập này đã khiến số tiền gửi bị cộng dồn lặp lại, cuối cùng kẻ tấn công đã nhận được số tiền vượt quá hạn mức bình thường 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ừ ví nóng của một nền tảng giao dịch nào đó. Trong số 1,651 ETH mà kẻ tấn công đã 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 qua công cụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi của cuộc tấn công nằm ở hàm doSwapThroughOrionPool của hợp đồng ExchangeWithAtomic. Hàm này không xử lý đúng tình huống tái nhập có thể xảy ra khi thực hiện đổi token. Cụ thể, trong hàm _doSwapTokens, biến curBalance chỉ được cập nhật 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 logic callback vào hàm transfer của Token tùy chỉnh, kích hoạt việc gọi hàm depositAsset mỗi khi có chuyển khoản, dẫn đến biến curBalance bị cập nhật sai. Cuối cùng, sau khi hoàn trả khoản vay chớp nhoáng, kẻ tấn công đã rút tiền thừa thông qua hàm withdraw.
Tái hiện lỗ hổng
Các nhà nghiên cứu đã cung cấp một phần mã POC, trình bày cách khai thác lỗ hổng này để thực hiện tấn công. Mã này chủ yếu mô phỏng quy trình hoạt động của kẻ tấn công, bao gồm việc tạo Token giả, thiết lập bể thanh khoản, thực hiện vay chớp nhoáng và tấn công tái nhập.
Đề xuất về an toàn
Để 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:
Khi thực hiện chức năng trao đổi token, cần xem xét các loại Token khác nhau và những rủi ro tiềm ẩn có thể phát sinh từ các con đường trao đổi.
Tuân theo 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 mới thực hiện các cuộc gọi bên ngoài.
Sử dụng khóa tái nhập hoặc các cơ chế chống tái nhập khác để bảo vệ các hàm quan trọng.
Thực hiện kiểm toán an ninh định kỳ, kịp thời phát hiện và sửa chữa các lỗ hổng tiềm ẩn.
Cân nhắc việc giới hạn số tiền giao dịch hoặc giới hạn tần suất giao dịch để giảm thiểu tác động của các cuộc tấn công tiềm ẩn.
Bằng cách thực hiện những biện pháp này, dự án có thể cải thiện đáng kể tính an toàn của hợp đồng và giảm thiểu nguy cơ bị tấn công. Trong hệ sinh thái Web3, an toàn luôn nên là yếu tố được ưu tiên hàng đầu.
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.
10 thích
Phần thưởng
10
4
Chia sẻ
Bình luận
0/400
SleepTrader
· 8giờ trước
Lại một người mới hợp đồng bị đánh.
Xem bản gốcTrả lời0
StablecoinEnjoyer
· 8giờ trước
Lại bị chạy mất rồi, không nhớ được bài học nào à?
Xem bản gốcTrả lời0
GetRichLeek
· 9giờ trước
Ngày thường bị hợp đồng Phiếu giảm giá hahahaha
Xem bản gốcTrả lời0
MemeEchoer
· 9giờ trước
又躺了啊 看起来 hợp đồng thông minh vẫn phải viết một cách nghiêm túc
OrionProtocol bị tấn công tái nhập, thiệt hại 2,9 triệu đô la tài sản.
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, dự án OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do lỗ hổng hợp đồng, tổng thiệt hại khoảng 2,9 triệu đô la tài sản, trong đó bao gồm 2.844.766 USDT trên Ethereum và 191.606 BUSD trên Binance Smart Chain.
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 đặc biệt và thực hiện một loạt công tác chuẩn bị. Sau đó, kẻ tấn công vay vốn thông qua chức năng swap của một DEX nào đó và gọi phương thức ExchangeWithAtomic.swapThroughOrionPool của OrionProtocol để thực hiện việc trao đổi token. Đường dẫn trao đổi bao gồm địa chỉ hợp đồng Token mà kẻ tấn công đã tạo ra, điều này đã chuẩn bị cho cuộc tấn công callback tiếp theo.
Trong quá trình trao đổi, do hợp đồng Token của kẻ tấn công chứa logic callback, dẫn đến việc gọi lại phương thức ExchangeWithAtomic.depositAsset nhiều lần trong khi thực hiện giao dịch chuyển tiền. Cuộc tấn công tái nhập này đã khiến số tiền gửi bị cộng dồn lặp lại, cuối cùng kẻ tấn công đã nhận được số tiền vượt quá hạn mức bình thường 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ừ ví nóng của một nền tảng giao dịch nào đó. Trong số 1,651 ETH mà kẻ tấn công đã 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 qua công cụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi của cuộc tấn công nằm ở hàm doSwapThroughOrionPool của hợp đồng ExchangeWithAtomic. Hàm này không xử lý đúng tình huống tái nhập có thể xảy ra khi thực hiện đổi token. Cụ thể, trong hàm _doSwapTokens, biến curBalance chỉ được cập nhật 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 logic callback vào hàm transfer của Token tùy chỉnh, kích hoạt việc gọi hàm depositAsset mỗi khi có chuyển khoản, dẫn đến biến curBalance bị cập nhật sai. Cuối cùng, sau khi hoàn trả khoản vay chớp nhoáng, kẻ tấn công đã rút tiền thừa thông qua hàm withdraw.
Tái hiện lỗ hổng
Các nhà nghiên cứu đã cung cấp một phần mã POC, trình bày cách khai thác lỗ hổng này để thực hiện tấn công. Mã này chủ yếu mô phỏng quy trình hoạt động của kẻ tấn công, bao gồm việc tạo Token giả, thiết lập bể thanh khoản, thực hiện vay chớp nhoáng và tấn công tái nhập.
Đề xuất về an toàn
Để 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:
Khi thực hiện chức năng trao đổi token, cần xem xét các loại Token khác nhau và những rủi ro tiềm ẩn có thể phát sinh từ các con đường trao đổi.
Tuân theo 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 mới thực hiện các cuộc gọi bên ngoài.
Sử dụng khóa tái nhập hoặc các cơ chế chống tái nhập khác để bảo vệ các hàm quan trọng.
Thực hiện kiểm toán an ninh định kỳ, kịp thời phát hiện và sửa chữa các lỗ hổng tiềm ẩn.
Cân nhắc việc giới hạn số tiền giao dịch hoặc giới hạn tần suất giao dịch để giảm thiểu tác động của các cuộc tấn công tiềm ẩn.
Bằng cách thực hiện những biện pháp này, dự án có thể cải thiện đáng kể tính an toàn của hợp đồng và giảm thiểu nguy cơ bị tấn công. Trong hệ sinh thái Web3, an toàn luôn nên là yếu tố được ưu tiên hàng đầu.