Vào ngày 28 tháng 3 năm 2024, Prisma Finance bị một cuộc tấn công cho vay nhanh và dự án bị thiệt hại khoảng 12,21 triệu USD.
SharkTeam đã tiến hành phân tích kỹ thuật về sự cố này và tóm tắt các biện pháp phòng ngừa bảo mật. Chúng tôi hy vọng rằng các dự án tiếp theo có thể học hỏi từ điều này và cùng nhau xây dựng đường dây bảo mật cho ngành công nghiệp blockchain.
Kẻ tấn công 1: 0x7e39e3b3ff7adef2613d5cc49558eab74b9a4202 (viết tắt là 0x7e39)
Hợp đồng tấn công 1: 0xd996073019c74b2fb94ead236e32032405bc027c (viết tắt là 0xd996)
Kẻ tấn công 2: 0x7fe83f45e0f53651b3ed9650d2a2c67d8855e385
Hợp đồng tấn công 2: 0x4148310fe4544e82f176570c6c7b649290a90e17
Hợp đồng mục tiêu bị tấn công: 0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6
Cuộc tấn công bao gồm 16 giao dịch, lấy giao dịch tấn công đầu tiên làm ví dụ:
0x00c503b595946bccaea3d58025b5f9b3726177bbdc9674e634244135282116c7
Quá trình tấn công như sau:
1. Đọc tất cả tài sản thế chấp và nợ trong hợp đồng mục tiêu tại địa chỉ 0x56a201b872b50bbdee0021ed4d1bb36359d291ed (viết tắt là 0x56a2).
Kết quả trả về như sau:
Kết quả trả về như sau:
Địa chỉ 0x56a2 có tổng số 1.745 wstETH làm tài sản thế chấp trong hợp đồng mục tiêu và tổng số nợ là 1.442.100 mkUSD.
2. Kẻ tấn công 0x7e39 gọi hàm flashLoan trong hợp đồng nợ mkUSD thông qua hợp đồng tấn công 0xd996.
Bộ thu tham số được đặt thành MigrateTroveZap và số tiền là tất cả khoản nợ được truy vấn ở trên.
Sau đó, hàm onFlashLoan trong bộ thu (ở đây là MigrateTroveZap) được gọi trong hàm flashLoan.
Chức năng onFlashLoan trước tiên sẽ hoàn trả tất cả các khoản nợ ban đầu thông qua các khoản vay nhanh, rút tài sản thế chấp cho người nhận, sau đó người nhận thế chấp lại một lượng tài sản thế chấp nhất định và vay một số nợ nhất định. Có hai chức năng chính được gọi là:
(1) chức năng closeTrove, trả nợ và rút toàn bộ tài sản thế chấp (1745.08 swtETH) từ troverManager đến người nhận (ở đây là hợp đồng MigrateTroveZap);
(2) chức năng openTrove, người nhận sẽ thế chấp lại 463,18 wstETH vào troverManager và gánh khoản nợ 1.443.598 mkUSD.
Có thể thấy từ dữ liệu trên rằng sau khi chức năng flashLoan được thực thi, tài sản thế chấp được trích xuất từ troverManager và thuộc địa chỉ 0x56a2 vẫn được giữ lại trong bộ thu và số tiền xấp xỉ 1745,08 – 463,18 = 1281,90 wstETH.
3. Kẻ tấn công 0x7e39 đã vay 1 wstETH từ Balancer thông qua khoản vay nhanh bằng cách tấn công hợp đồng 0xd996.
Sau đó, thế chấp 1 wstETH và vay khoản nợ 2000 mkUSD, cộng với phí, tổng số nợ là 2200 mkUSD.
4. Tương tự bước 2, gọi hàm flashLoan trong hợp đồng nợ mkUSD, ở đây bộ nhận tham số vẫn được đặt là MigrateTroveZap, số tiền là toàn bộ số nợ sau khi cam kết 1 wstETH tức là 2000 mkUSD. Trong hàm FlashLoan, hàm onFlashLoan trong bộ thu được gọi, sau đó các hàm closeTrove và openTrove được gọi.
Tuy nhiên, tài khoản tham số trong hàm closeTrove và openTrove ở đây không còn là địa chỉ 0x56a2 ở trên mà là hợp đồng tấn công 0xd996 cam kết 1 wstETH.
(1) chức năng closeTrove, trả nợ và rút toàn bộ tài sản thế chấp (1 swtETH) từ troverManager về người nhận (đây vẫn là hợp đồng MigrateTroveZap). Tại thời điểm này, có 1281,90 +1=1282,90 wstETH trong bộ thu.
(2) chức năng openTrove, người nhận sẽ thế chấp lại 1282,80 wstETH (gần như tất cả) vào troverManager và gánh khoản nợ 2001,8 mkUSD.
Trên thực tế, 1281,80 wstETH trong tài sản thế chấp ở đây không thuộc về hợp đồng tấn công 0xd996 mà thuộc về địa chỉ trên 0x56a2.
5. Cuối cùng, kẻ tấn công 0x7e39 đã gọi riêng hàm closeTrove thông qua hợp đồng tấn công 0xd996 và trích xuất 1282,80 wstETH đã thế chấp vào hợp đồng tấn công 0xd996.
Sau khi hoàn trả khoản vay nhanh, kẻ tấn công vẫn kiếm được lợi nhuận 1281,80 wstETH, tương đương khoảng 2,30 triệu USD.
Nguyên nhân sâu xa của sự cố này là do hợp đồng dự án có tính năng xác minh logic và quyền, cho phép kẻ tấn công lợi dụng lỗ hổng này để lấy tài sản cầm cố từ các địa chỉ tài khoản khác.
WstETH cuối cùng mà kẻ tấn công thu được là tài sản thế chấp của địa chỉ ban đầu 0x56a2 trong hợp đồng troverManager.Thông qua chức năng flashLoan của hợp đồng mkUSD, hắn đã tùy chỉnh các tham số của hàm onFlashLoan trong hợp đồng MigrateTroveZap, sử dụng MigrateTroveZap để chuyển đổi nó thành tài sản thế chấp của hợp đồng tấn công, sau đó sử dụng nó để tấn công hợp đồng. Giải nén nó.
Kẻ tấn công thao túng việc thế chấp và rút các địa chỉ tài khoản khác thông qua hàm flashLoan trong hợp đồng mkUSD và hàm onFlashLoan trong hợp đồng MigrateTroveZap.
(1) Hàm flashLoan thiếu xác minh địa chỉ người nhận tham số, vì người nhận trong hàm onFlashLoan sẽ nhận được tất cả tài sản thế chấp của tài khoản nên người nhận cần được xác minh là đáng tin cậy;
(1) Hàm flashLoan thiếu xác minh địa chỉ người nhận tham số, vì người nhận trong hàm onFlashLoan sẽ nhận được tất cả tài sản thế chấp của tài khoản nên người nhận cần được xác minh là đáng tin cậy;
(2) Chức năng onFlashLoan thiếu xác minh địa chỉ tài khoản, vì chức năng closeTrove và openTrove đều là tài sản của tài khoản đang được vận hành nên cần bổ sung xác minh quyền cho tài khoản;
Ngoài việc xác minh hai tham số địa chỉ này, cũng có thể cần phải xác minh các tham số số lượng và logic triển khai trong hàm flashLoan.
Để đối phó với cuộc tấn công này, chúng ta nên tuân theo các biện pháp phòng ngừa sau trong quá trình phát triển:
(1) Trong quá trình thiết kế và phát triển dự án, phải duy trì tính toàn vẹn và chặt chẽ của logic, đặc biệt khi liên quan đến việc chuyển giao tài sản, đồng thời cần tăng cường xác minh quyền nghiên cứu chức năng để đảm bảo rằng người gọi , hàm gọi và các tham số hàm, logic truyền, v.v. đều an toàn và đáng tin cậy.
(2) Trước khi dự án đi vào hoạt động, cần tìm nhóm kiểm toán bên thứ ba chuyên nghiệp để thực hiện kiểm toán hợp đồng.
Tầm nhìn của SharkTeam là bảo vệ thế giới Web3. Nhóm bao gồm các chuyên gia bảo mật giàu kinh nghiệm và các nhà nghiên cứu cấp cao từ khắp nơi trên thế giới, những người thành thạo lý thuyết cơ bản về blockchain và hợp đồng thông minh. Nó cung cấp các dịch vụ bao gồm nhận dạng và ngăn chặn rủi ro, kiểm toán hợp đồng thông minh, KYT/AML, phân tích trên chuỗi, v.v. và đã tạo ra nền tảng chặn và nhận dạng rủi ro thông minh trên chuỗi ChainAegis, có thể chống lại Mối đe dọa liên tục nâng cao một cách hiệu quả (Nâng cao). Persistent Threat) trong thế giới Web3. , APT). Nó đã thiết lập mối quan hệ hợp tác lâu dài với những người chơi chủ chốt trong các lĩnh vực khác nhau của hệ sinh thái Web3, như Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, Collab.Land, v.v.
Trang web chính thức: https://www.sharkteam.org
Twitter: https://twitter.com/sharkteamorg
Điện tín: https://t.me/sharkteamorg
Bất hòa: https://discord.gg/jGH9xXCjDZ
Tất cả bình luận