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 lúc 15:40:20 UTC, OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do lỗ hổng hợp đồ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 thiệt hại khoảng 2,9 triệu USD.
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 tùy chỉnh và thực hiện các công việc chuẩn bị cần thiết. Sau đó, kẻ tấn công đã vay vốn thông qua chức năng swap của một DEX, gọi phương thức ExchangeWithAtomic.swapThroughOrionPool của OrionProtocol để 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, kẻ tấn công đã lợi dụng chức năng callback của hợp đồng Token tùy chỉnh để gọi lại phương thức ExchangeWithAtomic.depositAsset nhiều lần, dẫn đến số tiền gửi liên tục tăng lên. Cuối cùng, kẻ tấn công đã hoàn tất việc rút tiền và thu lợi.
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. 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 dịch vụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi nằm ở các hàm doSwapThroughOrionPool và _doSwapTokens của hợp đồng ExchangeWithAtomic. Những hàm này cập nhật biến curBalance sau khi thực hiện chuyển nhượng token, vi phạm mô hình "Kiểm tra - Hiệu lực - Tương tác" (Checks-Effects-Interactions). Kẻ tấn công đã thêm logic callback vào hàm transfer của Token tùy chỉnh, dẫn đến việc cập nhật curBalance sai, từ đó thực hiện tấn công tái nhập.
Tái hiện tấn cô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 để tiến hà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 lấy thêm USDT.
Đề xuất an toàn
Các bên dự án 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à các con đường trao đổi có thể mang lại rủi ro an toàn.
Tuân thủ nghiêm ngặt quy tắc mã hóa "kiểm tra - hiệu lực - tương tác", đảm bảo rằng việc cập nhật biến trạng thái hoàn tất trước khi gọi từ bên ngoài.
Thực hiện các cơ chế bảo mật như khóa tái nhập để ngăn chặn các cuộc tấn công tái nhập.
Thực hiện kiểm tra mã định kỳ và kiểm tra an ninh, 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 áp dụng cơ chế hạn mức, kiểm soát số tiền tối đa cho mỗi giao dịch, giảm thiểu tổn thất tiềm ẩn.
Sự kiện này một lần nữa nhắc nhở chúng ta rằng trong phát triển hợp đồng thông minh, chúng ta phải luôn cảnh giác và coi trọng tính an toàn. Chỉ bằng cách không ngừng hoàn thiện các biện pháp an ninh, chúng ta mới có thể đảm bảo sự phát triển lành mạnh 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.
OrionProtocol bị tấn công tái nhập, thiệt hại 2,9 triệu USD
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 lúc 15:40:20 UTC, OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập do lỗ hổng hợp đồ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 thiệt hại khoảng 2,9 triệu USD.
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 tùy chỉnh và thực hiện các công việc chuẩn bị cần thiết. Sau đó, kẻ tấn công đã vay vốn thông qua chức năng swap của một DEX, gọi phương thức ExchangeWithAtomic.swapThroughOrionPool của OrionProtocol để 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, kẻ tấn công đã lợi dụng chức năng callback của hợp đồng Token tùy chỉnh để gọi lại phương thức ExchangeWithAtomic.depositAsset nhiều lần, dẫn đến số tiền gửi liên tục tăng lên. Cuối cùng, kẻ tấn công đã hoàn tất việc rút tiền và thu lợi.
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. 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 dịch vụ trộn coin.
Phân tích lỗ hổng
Vấn đề cốt lõi nằm ở các hàm doSwapThroughOrionPool và _doSwapTokens của hợp đồng ExchangeWithAtomic. Những hàm này cập nhật biến curBalance sau khi thực hiện chuyển nhượng token, vi phạm mô hình "Kiểm tra - Hiệu lực - Tương tác" (Checks-Effects-Interactions). Kẻ tấn công đã thêm logic callback vào hàm transfer của Token tùy chỉnh, dẫn đến việc cập nhật curBalance sai, từ đó thực hiện tấn công tái nhập.
Tái hiện tấn cô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 để tiến hà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 lấy thêm USDT.
Đề xuất an toàn
Các bên dự án 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à các con đường trao đổi có thể mang lại rủi ro an toàn.
Tuân thủ nghiêm ngặt quy tắc mã hóa "kiểm tra - hiệu lực - tương tác", đảm bảo rằng việc cập nhật biến trạng thái hoàn tất trước khi gọi từ bên ngoài.
Thực hiện các cơ chế bảo mật như khóa tái nhập để ngăn chặn các cuộc tấn công tái nhập.
Thực hiện kiểm tra mã định kỳ và kiểm tra an ninh, 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 áp dụng cơ chế hạn mức, kiểm soát số tiền tối đa cho mỗi giao dịch, giảm thiểu tổn thất tiềm ẩn.
Sự kiện này một lần nữa nhắc nhở chúng ta rằng trong phát triển hợp đồng thông minh, chúng ta phải luôn cảnh giác và coi trọng tính an toàn. Chỉ bằng cách không ngừng hoàn thiện các biện pháp an ninh, chúng ta mới có thể đảm bảo sự phát triển lành mạnh của hệ sinh thái Web3.