SlowMist: Phân tích vụ trộm Cetus, 1 token được đòn bẩy 230 triệu đô la Mỹ
Đây là một cuộc tấn công toán học cực kỳ tinh vi. Kẻ tấn công đã chọn các tham số cụ thể thông qua các tính toán chính xác và khai thác lỗ hổng trong hàm checked_shlw để lấy được thanh khoản trị giá hàng tỷ đô la với giá chỉ bằng 1 mã thông báo.
Tiêu đề gốc: "SlowMist: Phân tích vụ trộm 230 triệu đô la từ Cetus"
Tác giả gốc: Victory, Lisa, SlowMist Technology
Bối cảnh
Vào ngày 22 tháng 5, theo tin tức cộng đồng, Cetus, nhà cung cấp thanh khoản trong hệ sinh thái SUI, bị nghi ngờ bị tấn công, độ sâu của nhóm thanh khoản giảm đáng kể và nhiều cặp giao dịch mã thông báo trên Cetus đã giảm. Số tiền thiệt hại ước tính vượt quá 230 triệu đô la Mỹ. Sau đó, Cetus đã đưa ra thông báo rằng: "Một sự cố đã được phát hiện trong giao thức của chúng tôi. Vì lý do an toàn, hợp đồng thông minh đã bị tạm dừng. Hiện tại, nhóm đang điều tra sự cố. Chúng tôi sẽ sớm đưa ra tuyên bố điều tra thêm".
Sau sự cố, nhóm bảo mật SlowMist đã can thiệp vào quá trình phân tích và đưa ra cảnh báo bảo mật. Sau đây là phân tích chi tiết về các phương pháp tấn công và chuyển tiền.
(https://x.com/CetusProtocol/status/1925515662346404024)
Thông tin liên quan
Một trong những giao dịch tấn công:https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x
Phân tích cuộc tấn công
Cốt lõi của sự cố này là kẻ tấn công đã cẩn thận xây dựng các tham số để gây tràn dữ liệu nhưng bỏ qua khả năng phát hiện và cuối cùng đã sử dụng một lượng rất nhỏ mã thông báo để đổi lấy một lượng lớn tài sản thanh khoản. Sau đây là phân tích các bước cụ thể:
(Sơ đồ trình tự tấn công)
1. Kẻ tấn công đầu tiên đã vay 10.024.321,28 haSUI thông qua một khoản vay nhanh, khiến giá của nhóm giảm mạnh từ 18.956.530.795.606.879.104 xuống còn 18.425.720.184762886, tức là giảm giá 99,90%.
2. Kẻ tấn công đã cẩn thận chọn một phạm vi giá cực kỳ hẹp để mở một vị thế thanh khoản:
Tick giới hạn dưới: 300000 (giá: 60.257.519.765.924.248.467.716.150)
Tick giới hạn trên: 300200 (giá: 60.863.087.478.126.617.965.993.239)
Độ rộng phạm vi giá: chỉ 1,00496621%
3. Sau đó là phần cốt lõi của cuộc tấn công. Kẻ tấn công tuyên bố sẽ thêm 10.365.647.984.364.446.732.462.244.378.333.008 đơn vị thanh khoản khổng lồ, nhưng do một lỗ hổng, hệ thống chỉ thu thập được 1 token A.
Chúng ta hãy phân tích lý do tại sao kẻ tấn công có thể trao đổi thanh khoản khổng lồ chỉ với 1 token. Lý do chính là có lỗ hổng phát hiện tràn bộ nhớ trong checked_shlw trong hàm get_delta_a. Kẻ tấn công đã lợi dụng điều này và gây ra sai lệch nghiêm trọng trong tính toán của hệ thống về lượng haSUI thực sự cần phải thêm vào. Do tình trạng tràn tiền không được phát hiện nên hệ thống đã đánh giá sai số lượng haSUI cần thiết, khiến kẻ tấn công có thể đổi một lượng lớn tài sản thanh khoản chỉ bằng một số lượng nhỏ mã thông báo, qua đó hoàn thành cuộc tấn công.
Khi hệ thống tính toán cần bao nhiêu haSUI để thêm một lượng thanh khoản lớn như vậy:
Điểm mấu chốt ở đây là việc triển khai hàm checked_shlw bị lỗi nghiêm trọng. Trên thực tế, bất kỳ giá trị đầu vào nào nhỏ hơn 0xffffffffffffff <<192 sẽ bỏ qua kiểm tra tràn. Tuy nhiên, khi các giá trị này được dịch trái 64 bit, kết quả vượt quá phạm vi biểu diễn của u256 và dữ liệu bậc cao bị cắt cụt, dẫn đến kết quả nhỏ hơn nhiều so với giá trị lý thuyết. Điều này khiến hệ thống đánh giá thấp lượng haSUI cần thiết trong các phép tính tiếp theo.
· Sai mặt nạ: 0xffffffffffffffff << 192 = số rất lớn (khoảng 2^256-2^192)
· Hầu như tất cả các đầu vào đều nhỏ hơn mặt nạ này, bỏ qua phát hiện tràn
· Vấn đề thực tế: khi n >= 2^192, n<< 64 sẽ vượt quá phạm vi u256 và bị cắt bớt
Giá trị trung gian của kẻ tấn công tính thanh khoản * sqrt_price_diff = 6277101735386680763835789423207666908085499738337898853712:
· Nhỏ hơn mặt nạ lỗi, bỏ qua phát hiện tràn
· Tuy nhiên, sau khi dịch chuyển sang trái 64 bit, nó sẽ vượt quá giá trị tối đa của u256, khiến phần vượt quá bị cắt bớt
· Kết quả tính toán cuối cùng nhỏ hơn khoảng 1, nhưng vì được làm tròn lên nên thương bằng 1
4. Cuối cùng, kẻ tấn công đã xóa tính thanh khoản và thu được khoản thu nhập token khổng lồ:
· Lần xóa đầu tiên: 10.024.321,28 haSUI
· Lần xóa thứ hai: 1 haSUI
· Lần xóa thứ ba: 10.024.321,28 haSUI
5. Kẻ tấn công đã trả lại khoản vay nhanh và kiếm được lợi nhuận ròng khoảng 10.024.321,28 haSUI và 5.765.124,79 SUI, cuộc tấn công đã hoàn tất.
Công tác sửa chữa của nhóm dự án
Sau cuộc tấn công, Cetus đã phát hành bản vá sửa chữa. Để biết mã sửa chữa cụ thể, vui lòng tham khảo: https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebabb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409.
Hàm checked_shlw đã sửa chữa như sau:
Hướng dẫn sửa chữa: Đã sửa lỗi mặt nạ không chính xác 0xffffffffffffffff << 192 đến ngưỡng chính xác 1 << 192 Đã sửa điều kiện phán đoán từ n > mask thành n >= mask Đảm bảo rằng khi dịch chuyển trái 64 bit có thể gây tràn, cờ tràn có thể được phát hiện chính xác và trả về
Phân tích MistTrack
Theo phân tích, kẻ tấn công 0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06 đã kiếm được lợi nhuận khoảng 230 triệu đô la Mỹ, bao gồm SUI, vSUI, USDC và các tài sản khác.
Chúng tôi phát hiện ra rằng kẻ tấn công đã chuẩn bị Phí Gas hai ngày trước, sau đó thực hiện một nỗ lực trước khi tấn công, nhưng không thành công:
Sau khi kiếm được lợi nhuận, kẻ tấn công đã chuyển một phần tiền như USDC, SOL và suiETH đến địa chỉ EVM 0x89012a55cd6b88e407c9d4ae9b3425f55924919b thông qua các cầu nối chuỗi chéo như Sui Bridge, Circle, Wormhole và Mayan:
Trong số đó, 5.2341 WBNB đã được chuyển đến địa chỉ BSC 0x89012a55cd6b88e407c9d4ae9b3425f55924919b: Sau đó, kẻ tấn công đã gửi 10 triệu đô la tài sản vào Suilend:
Kẻ tấn công cũng đã chuyển 24.022.896 SUI đến một địa chỉ mới 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214c88d0286a0ac9562, địa chỉ này vẫn chưa được chuyển ra ngoài:
May mắn thay, theo Cetus, với sự hợp tác của Quỹ SUI và các thành viên khác trong hệ sinh thái, số tiền 162 triệu đô la bị đánh cắp trên SUI đã bị đóng băng thành công.
(https://x.com/CetusProtocol/status/1925567348586815622)
Tiếp theo, chúng tôi sử dụng công cụ theo dõi và chống rửa tiền trên chuỗi MistTrack để phân tích địa chỉ 0x89012a55cd6b88e407c9d4ae9b3425f55924919b trên EVM nhận tiền liên chuỗi. Địa chỉ này đã nhận được 5,2319 BNB trên BSC và vẫn chưa chuyển ra: Địa chỉ này đã nhận được 3.000 USDT, 40,88 triệu USDC, 1.771 SOL và 8.130,4 ETH trên Ethereum. Trong đó, USDT, USDC và SOL được đổi lấy ETH thông qua coW Swap, ParaSwap, v.v.:
Sau đó, địa chỉ này đã chuyển 20.000 ETH đến địa chỉ 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16, vẫn chưa được chuyển ra ngoài:
Số dư hiện tại của địa chỉ này trên Ethereum là 3.244 ETH:
MistTrack đã thêm các địa chỉ được đề cập ở trên vào thư viện địa chỉ độc hại. Đồng thời, chúng tôi sẽ tiếp tục theo dõi số dư địa chỉ.
Tóm tắt
Cuộc tấn công này chứng minh sức mạnh của lỗ hổng tràn toán học. Kẻ tấn công đã chọn các tham số cụ thể thông qua các tính toán chính xác và khai thác lỗ hổng trong hàm checked_shlw để lấy được hàng tỷ đô la thanh khoản với giá chỉ bằng 1 token. Đây là một cuộc tấn công toán học cực kỳ tinh vi. Nhóm bảo mật SlowMist khuyến nghị các nhà phát triển xác minh chặt chẽ các điều kiện biên của tất cả các hàm toán học trong quá trình phát triển hợp đồng thông minh.
Tuyên bố miễn trừ trách nhiệm: Mọi thông tin trong bài viết đều thể hiện quan điểm của tác giả và không liên quan đến nền tảng. Bài viết này không nhằm mục đích tham khảo để đưa ra quyết định đầu tư.
Bạn cũng có thể thích
Galxe ra mắt Starboard: Một giải pháp thông minh hơn cho việc phát triển Web3 cộng đồng
Tóm lại Galxe đã ra mắt Starboard, một công cụ phân tích và phát triển được thiết kế để hỗ trợ các dự án xác định, thu hút và khen thưởng những người đóng góp tạo ra tác động lớn nhất.

Thương mại Ấn-Hoa Kỳ tiến triển: Cơ hội cho tiền điện tử
Nga mở cửa cho ngân hàng cung cấp dịch vụ tiền điện tử
Ngân hàng Ấn Độ mở rộng ứng dụng đồng rupee điện tử
Thịnh hành
ThêmGiá tiền điện tử
Thêm








