Vào chiều ngày 2 tháng 2 năm 2023, hợp đồng OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do có lỗ hổng. Kẻ tấn công đã thu lợi 2,844,766 USDT trên chuỗi Ethereum và 191,606 BUSD trên chuỗi Binance Smart Chain, tổng cộng khoảng 2,9 triệu USD.
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 công việc chuẩn bị liên quan. Sau đó, kẻ tấn công thực hiện vay mượn thông qua chức năng swap của một DEX, và gọi phương thức swapThroughOrionPool của OrionProtocol để thực hiện đổi token. Đường đổi token bao gồm địa chỉ hợp đồng Token do kẻ tấn công tạo ra, điều này tạo điều kiện cho cuộc tấn công callback tiếp theo.
Trong quá trình thực hiện phương thức swapThroughOrionPool, do hợp đồng Token của kẻ tấn công chứa logic gọi lại, dẫn đến việc kích hoạt cuộc tấn công tái nhập trong quá trình chuyển tiền. Kẻ tấn công đã lợi dụng phương thức Token.Transfer để gọi nhiều lần hàm ExchangeWithAtomic.depositAsset, khiến 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 nhuận.
Dòng tiề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 lấy đượ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 có một lỗi logic khi thực hiện thao tác _doSwapTokens. Cụ thể, hợp đồng chỉ cập nhật biến curBalance sau khi chuyển tiền hoàn tất, điều này đã tạo ra 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, gọi lại hàm depositAsset nhiều lần, dẫn đến việc cập nhật curBalance sai. Cuối cùng, sau khi hoàn trả khoản vay chớp nhoáng, kẻ tấn công đã thành công trong việc rút ra số tiền vượt quá.
Đề 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 lưu ý các điểm sau khi thiết kế hợp đồng:
Khi thực hiện chức năng đổi token, cần phải xem xét toàn diện các loại token khác nhau và những rủi ro an ninh có thể phát sinh từ các con đường đổi khác nhau.
Tuân thủ nghiêm ngặt quy tắc lập trình "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 trạng thái, sau đó cập nhật trạng thái hợp đồng, cuối cùng mới thực hiện gọi ngoài.
Thực hiện khóa tái nhập trong các thao tác quan trọng để ngăn chặn sự xảy ra của các cuộc tấn công tái nhập.
Thực hiện kiểm toán mã định kỳ, kịp thời phát hiện và sửa chữa các lỗ hổng bảo mật tiềm ẩn.
Cân nhắc việc giới thiệu cơ chế rút tiền chậm, nhằm cung cấp cơ hội can thiệp thủ công cho các giao dịch bất thường.
Bằng cách thực hiện những biện pháp này, có thể nâng cao đáng kể tính an toàn của hợp đồng thông minh, giảm thiểu rủi ro bị tấn công. Trong hệ sinh thái Web3, an toàn luô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.
16 thích
Phần thưởng
16
8
Chia sẻ
Bình luận
0/400
LidoStakeAddict
· 07-17 03:22
Lại một con heo nữa.
Xem bản gốcTrả lời0
NervousFingers
· 07-14 05:42
又一项目被Phiếu giảm giá啊...
Xem bản gốcTrả lời0
TokenUnlocker
· 07-14 04:00
Một lỗ hổng tái nhập chưa bị khóa khác?
Xem bản gốcTrả lời0
GasSavingMaster
· 07-14 03:59
Công nghệ hiện tại cũng không xuất sắc lắm.
Xem bản gốcTrả lời0
PanicSeller69
· 07-14 03:58
Lại nổ rồi, thật tuyệt!
Xem bản gốcTrả lời0
PortfolioAlert
· 07-14 03:37
Nạn nhân thứ hai của lỗ hổng hợp đồng...
Xem bản gốcTrả lời0
SerumSqueezer
· 07-14 03:36
Lần này là lần thứ mấy rồi, lại rò rỉ và thủng?
Xem bản gốcTrả lời0
ForkTongue
· 07-14 03:33
Lại là cuộc tấn công tái nhập, những dự án này vẫn chưa rút ra bài học?
OrionProtocol bị tấn công tái nhập, 2,9 triệu đô la bị đánh cắp.
Phân tích cuộc tấn công tràn vào OrionProtocol
Vào chiều ngày 2 tháng 2 năm 2023, hợp đồng OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do có lỗ hổng. Kẻ tấn công đã thu lợi 2,844,766 USDT trên chuỗi Ethereum và 191,606 BUSD trên chuỗi Binance Smart Chain, tổng cộng khoảng 2,9 triệu USD.
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 công việc chuẩn bị liên quan. Sau đó, kẻ tấn công thực hiện vay mượn thông qua chức năng swap của một DEX, và gọi phương thức swapThroughOrionPool của OrionProtocol để thực hiện đổi token. Đường đổi token bao gồm địa chỉ hợp đồng Token do kẻ tấn công tạo ra, điều này tạo điều kiện cho cuộc tấn công callback tiếp theo.
Trong quá trình thực hiện phương thức swapThroughOrionPool, do hợp đồng Token của kẻ tấn công chứa logic gọi lại, dẫn đến việc kích hoạt cuộc tấn công tái nhập trong quá trình chuyển tiền. Kẻ tấn công đã lợi dụng phương thức Token.Transfer để gọi nhiều lần hàm ExchangeWithAtomic.depositAsset, khiến 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 nhuận.
Dòng tiề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 lấy đượ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 có một lỗi logic khi thực hiện thao tác _doSwapTokens. Cụ thể, hợp đồng chỉ cập nhật biến curBalance sau khi chuyển tiền hoàn tất, điều này đã tạo ra 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, gọi lại hàm depositAsset nhiều lần, dẫn đến việc cập nhật curBalance sai. Cuối cùng, sau khi hoàn trả khoản vay chớp nhoáng, kẻ tấn công đã thành công trong việc rút ra số tiền vượt quá.
Đề 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 lưu ý các điểm sau khi thiết kế hợp đồng:
Khi thực hiện chức năng đổi token, cần phải xem xét toàn diện các loại token khác nhau và những rủi ro an ninh có thể phát sinh từ các con đường đổi khác nhau.
Tuân thủ nghiêm ngặt quy tắc lập trình "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 trạng thái, sau đó cập nhật trạng thái hợp đồng, cuối cùng mới thực hiện gọi ngoài.
Thực hiện khóa tái nhập trong các thao tác quan trọng để ngăn chặn sự xảy ra của các cuộc tấn công tái nhập.
Thực hiện kiểm toán mã định kỳ, kịp thời phát hiện và sửa chữa các lỗ hổng bảo mật tiềm ẩn.
Cân nhắc việc giới thiệu cơ chế rút tiền chậm, nhằm cung cấp cơ hội can thiệp thủ công cho các giao dịch bất thường.
Bằng cách thực hiện những biện pháp này, có thể nâng cao đáng kể tính an toàn của hợp đồng thông minh, giảm thiểu rủi ro bị tấn công. Trong hệ sinh thái Web3, an toàn luôn là yếu tố được ưu tiên hàng đầu.