Năm 2021 được coi là thời điểm bùng nổ của DeFi. Tổng giá trị bị khóa trong các giao thức tài chính phi tập trung đã tăng lên trên 180 tỷ USD, và các nền tảng cho vay, các nhà tổng hợp lợi nhuận và các cầu nối chuỗi được ra mắt gần như hàng tuần. Thay vào đó, năm 2021 trở thành năm mà các cuộc tấn công DeFi 2021 thống trị mọi tiêu đề – các nhà tấn công đã lấy đi khoảng 1,3 tỷ USD từ các giao thức trong 44 sự kiện riêng biệt, tăng 160% so với năm trước. Vật dụng nguy hiểm nhất trong kho vũ khí của họ là khoản vay flash, một cơ chế vay mượn được thiết kế cho mục đích arbitrage mà các nhà tấn công đã sử dụng để điều khiển giá cả với chi phí gần như bằng 0.
Bài tổng hợp này sẽ đi qua các vụ tấn công DeFi lớn nhất trong năm 2021, phân tích các yếu tố tấn công đã tạo điều kiện cho chúng và rút ra những bài học về bảo mật vẫn còn áp dụng cho ngày nay. Bất kể bạn là một nhà phát triển kiểm tra một giao thức mới hay là một nhà đầu tư đang cố gắng đọc thông tin công bố rủi ro, hiểu cách 2021 bị tấn công là cách nhanh nhất để hiểu những yêu cầu bảo mật thực sự của DeFi.
Hình ảnh tổng thể: thực sự đã mất bao nhiêu?
Các con số thiệt hại trong năm 2021 khác nhau rất nhiều tùy thuộc vào người nào đang đếm và những gì họ bao gồm. CertiK, một công ty bảo mật smart contract, đã ghi nhận 1,3 tỷ USD bị mất trong 44 vụ tấn công DeFi trong năm 2021, tăng so với khoảng 500 triệu USD trong năm trước đó. Chainalysis đưa ra con số 2,2 tỷ USD, nhưng con số này bao gồm cả các vụ rút tiền và lừa đảo thoái lui cùng với các vụ khai thác nguyên lý thuần túy. Đối với Elliptic, ước tính 10,5 tỷ USD còn đi xa hơn nữa, bao gồm các thiệt hại gián tiếp do giá token sụt giảm sau mỗi vụ tấn công.
Đối với bài tổng hợp này, số liệu hữu ích nhất là số liệu bảo thủ: khoảng 1,3 đến 1,5 tỷ USD trong các vụ khai thác smart contract và giao thức trực tiếp. Đó là thiệt hại mà các nhà tấn công thực sự đã thu được từ các kho, các nhóm lưu lượng và các hợp đồng thưởng. Kích thước trung bình của các cuộc tấn công đã tăng từ 8,3 triệu USD trong năm 2020 lên khoảng 36 triệu USD trong năm 2021, và số lượng sự kiện đã tăng hơn ba lần, từ 16 lên 55. Sự kiện lớn nhất, vụ tấn công mạng Poly Network, đã chiếm 611 triệu USD riêng của nó – gần một nửa tổng số trong năm.
Hai nguyên nhân đã thúc đẩy vụ nổ này. Thứ nhất, tổng giá trị được khóa trong DeFi đã tăng gấp mười lần, cho phép các kẻ tấn công có một nguồn tài nguyên lớn hơn để tiêu hao. Thứ hai, các khoản vay flash đã loại bỏ rào cản về vốn để tiến hành một cuộc tấn công, một chuyển biến chúng ta sẽ nghiên cứu chi tiết trong thời gian tới.
Vectơ tấn công chủ yếu: Các cuộc tấn công bằng vay tiền nhanh 2021
Vay flash là một hình thức vay mượn nguyên thủy độc đáo của DeFi. Bạn có thể vay bất kỳ số tiền nào – hàng chục triệu đô la – mà không cần tài sản thế chấp, miễn là bạn trả lại trong giao dịch tương tự. Nếu không thể trả được, toàn bộ giao dịch sẽ bị hủy bỏ như không có gì xảy ra. Vay flash được phát minh với mục đích hợp pháp: đấu tranh giữa các sàn giao dịch, trao đổi tài sản thế chấp và tự thanh lý khoản vay. Tuy nhiên, vào năm 2021, chúng trở thành công cụ chính của các kẻ tấn công DeFi.
Mẫu tấn công này khá đồng nhất trong các vụ tấn công. Một kẻ tấn công vay một số tiền lớn, sử dụng nó để biến dạng giá của một tài sản trên một kho chứa nhà tạo thị trường tự động (AMM), sau đó tương tác với một giao thức mục tiêu dựa trên giá đã bị biến đổi làm nguồn tham chiếu. Vì giao thức tin rằng giá đã bị biến đổi, nó đánh giá không chính xác tài sản thế chấp, phát hành quá nhiều phần thưởng hoặc cho phép kẻ tấn công rút tiền nhiều hơn số tiền đã gửi. Kẻ tấn công trả lại khoản vay và mang lợi nhuận đi. Toàn bộ chuỗi này được thực hiện trong một khối duy nhất – thường trong vòng một giây.
Trước khi có các khoản vay flash, để điều khiển một kho chứa AMM, kẻ tấn công phải đã sở hữu một vị thế lớn. Các khoản vay flash đã giảm yêu cầu vốn này xuống mức chi phí gas. Chính vì vậy, các vụ tấn công DeFi lớn nhất năm 2021 đều được điều khiển bởi vector này: PancakeBunny, Belt Finance, Spartan Protocol và Cream Finance đều bị tấn công theo các biến thể của cùng một chiến lược.
Tại sao các oracle giá AMM là điểm yếu
Vấn đề sâu hơn không phải là khoản vay flash chính nó – khoản vay flash là một công cụ trung lập. Vấn đề là nhiều giao thức đọc giá của họ trực tiếp từ giá hiện tại của một hồ sơ AMM duy nhất. Giá hiện tại trên một AMM chỉ là một hàm của tỷ lệ hai khoản dự trữ token, do đó bất kỳ ai có thể chuyển đổi tỷ lệ đó trong thời gian ngắn đều có thể đặt giá theo ý muốn của họ. Các giao thức tin tưởng vào giá hiện tại như một oracle là tin tưởng vào một số mà một kẻ tấn công có thể in ra theo yêu cầu.
Cách khắc phục xuất hiện từ năm 2021 là Time-Weighted Average Price (TWAP) oracle, một phương pháp trung bình giá trong một khoảng thời gian để một giao dịch đơn lẻ không thể thay đổi nó. Một số giao thức cũng đã áp dụng các oracle bên ngoài theo phong cách Chainlink, lấy giá từ các nguồn dữ liệu ngoài chuỗi. Tuy nhiên, trong năm 2021, quá nhiều giao thức vẫn đang đọc giá hiện tại nguyên thủy, và các nhà tấn công đã biết điều này.
5 vụ tấn công DeFi lớn nhất năm 2021
1. Poly Network – 611 triệu USD (10 tháng 8)
Hacker tấn công mạng Poly Network vẫn là vụ tấn công DeFi lớn nhất trong lịch sử theo số lượng tổng thể. Mạng Poly Network là một cầu nối giữa các chuỗi Ethereum, BNB Chain và Polygon. Người tấn công đã khai thác lỗi thiết kế trong hợp đồng EthCrossChainManager, chịu trách nhiệm xác minh và truyền các thông điệp giữa các chuỗi. Hợp đồng quản lý này đã được cấp quyền gọi bất kỳ phương thức nào trên bất kỳ hợp đồng nào trên chuỗi đích – một đặc quyền quá mức vi phạm nguyên tắc tối thiểu quyền hạn.
Người tấn công đã gửi một giao dịch xuyên chuỗi được thiết kế từ Ontology, thay thế danh sách người giữ được lưu trữ trong EthCrossChainData, và tự đặt mình là người giữ duy nhất được ủy quyền. Khi kiểm soát vai trò người giữ, họ có thể phê duyệt việc rút tiền từ các kho của mạng Poly trên tất cả ba chuỗi. Họ đã lấy đi khoảng 611 triệu USD trong ETH, BNB và USDC.
Sau đó, điều không thể lường trước xảy ra: kẻ tấn công đã hoàn trả gần hết số tiền trong vòng 15 ngày, tự xưng là một hacker "bí mật". Tether đã tạm dừng 33 triệu USDT, và kẻ tấn công đã chuyển USDC thành DAI thông qua Curve để tránh bị tạm dừng tương tự. Tuy nhiên, việc hoàn trả này không làm giảm mức độ nghiêm trọng của lỗ hổng. Nguyên nhân gốc rễ – một hợp đồng có quyền gọi không giới hạn – đã cho phép kẻ tấn công rút hết số tiền trên cầu bất cứ lúc nào. "Việc hoàn trả" có thể là do không thể rửa tiền 611 triệu USD trong bối cảnh bị công chúng giám sát chặt chẽ, chứ không phải vì lòng nhân ái.
2. Compound Finance – lên đến 147 triệu USD (29 tháng 9)
Hacker Compound không thực hiện một cuộc tấn công cho vay nhanh hay một hành vi can thiệp oracle. Đó là một lỗi được chấp thuận bởi cơ chế quản trị. Đề xuất 062, được cộng đồng bỏ phiếu và thông qua, chứa một lỗi logic một ký tự: một biểu thức lớn hơn (>) mà thực sự phải là lớn hơn hoặc bằng (>=). Ký tự đó đã khiến chức năng distributeSupplierComp phân phối quá nhiều token COMP, token thưởng quản trị của quy trình.
Tối đa 280.000 token COMP – có giá trị khoảng từ 147 đến 162 triệu USD vào thời điểm đó – đã có thể được yêu cầu. Không có khoản gửi hoặc khoản vay của người dùng bị ảnh hưởng; chỉ có token thưởng bị ảnh hưởng. Tuy nhiên, thiệt hại đã được tăng cường bởi một vấn đề cơ cấu: không có quyền kiểm soát để tạm dừng phân phối. Mọi sửa chữa cần một chu kỳ quản trị đầy đủ kéo dài bảy ngày. Đề xuất 63 đã phục vụ như một biện pháp tạm thời, và Đề xuất 64 đã đưa ra giải pháp vĩnh viễn, nhưng đến lúc đó đã có khoảng 27 triệu USD đã được yêu cầu trong một giao dịch sớm duy nhất.
Dạy chúng ta ở đây là quản trị chính nó là một điểm tấn công. Một đề xuất có lỗi có thể được thông qua bằng cách bỏ phiếu một cách nhất trí nếu không ai kiểm tra diff cẩn thận. Kiểm tra mã đối với các đề xuất quản trị quan trọng như đối với việc triển khai smart contract.
3. Cream Finance – 130 triệu USD (27 tháng 10)
Cream Finance là nạn nhân lặp lại của năm 2021. Thông báo cho vay đã bị tấn công ba lần: 37,5 triệu USD vào tháng 2, 18,8 triệu USD vào tháng 8 và sau đó 130 triệu USD vào tháng 10 – tổng cộng 186 triệu USD bị mất trong một năm. Sự tấn công vào tháng 10 là phức tạp nhất trong số ba lần.
Người tấn công đã vay 500 triệu USD bằng DAI từ MakerDAO, sau đó điều khiển giá của yUSD thông qua một kho lưu lượng đa tài sản. Việc làm tăng giá trị tài sản thế chấp của họ cho phép họ vay từ các thị trường v1 của Cream và rút 130 triệu USD. Đường tấn công bao gồm nhiều giao thức – AAVE, Yearn và Curve đều được sử dụng như các bước khởi đầu – cho thấy khả năng kết hợp của DeFi tạo ra các điểm yếu liên hoàn. Mỗi giao thức trong chuỗi đã được kiểm toán một cách riêng lẻ, nhưng sự kết hợp này tạo ra một con đường có thể bị khai thác mà không một cuộc kiểm toán nào đã xem xét.
Yearn Finance sau đó đã cứu được 9,42 triệu đô la từ hậu quả, nhưng mô hình rộng hơn đã rõ ràng: một giao thức có một điểm yếu thường có các vấn đề hệ thống, và một bản sửa lỗi duy nhất không giải quyết nguyên nhân gốc của các hành vi bảo mật kém.
4. Badger DAO – 120 triệu USD (2 tháng 12)
Sự tấn công vào DAO Badger gây chú ý vì các smart contract của giao thức này hoàn toàn an toàn. Sự tấn công diễn ra hoàn toàn trên lớp Web2. Một kẻ tấn công đã lấy được một khóa API bị xâm phạm cho cấu hình Badger Cloudflare Workers và sử dụng nó để chèn mã JavaScript độc hại vào giao diện đầu cuối của giao thức. Bản mã này xuất hiện từ ngày 10 tháng 11 và được chạy với các khoảng thời gian ngẫu nhiên để tránh bị phát hiện, yêu cầu người dùng chấp thuận chi tiêu mã thông qua không giới hạn.
Khi người dùng tương tác với giao diện Badger bình thường, họ vô tình chấp thuận cho phép chi tiêu cho địa chỉ của kẻ tấn công. Khoảng 500 ví đã tạo ra các phê duyệt độc hại, và kẻ tấn công đã lấy đi khoảng 120 triệu USD – tương đương 2.100 BTC và 151 ETH. Khoảng 9 triệu USD sau đó được coi là có thể khôi phục. Badger đã tạm dừng hoạt động của các kho bằng cách ngừng transferFrom, hạn chế thêm các thiệt hại.
Liên minh này phản ánh cách tiếp cận chuỗi cung ứng và đầu cuối được thấy trong các sự kiện sau đó. Các smart contract là không thể thay đổi và được kiểm toán, nhưng người dùng trang web không tin tưởng để tương tác với chúng. An toàn đầu cuối là an toàn DeFi, mặc dù nó tồn tại bên ngoài blockchain.
5. PancakeBunny – 45 triệu USD (tháng 5)
PancakeBunny là một giao thức tối ưu hóa lợi nhuận trên chuỗi BNB. Người tấn công đã thực hiện tám khoản vay flash với tổng giá trị hơn 700 triệu USD, điều khiển giá USDT/BNB và BUNNY/BNB trên PancakeSwap. Giao thức này sử dụng một oracle dựa trên AMM để đo lường giá trị của các token LP cho các phép tính thưởng, và oracle đó đã đọc giá hiện tại đã bị điều khiển.
Hacker đã gọi hàm getReward() và nhận được 6,97 triệu token BUNNY mới – có giá trị khoảng 1 tỷ USD theo giá mặt. Sau đó, họ đã bán ra các token này, khiến giá BUNNY sụt từ khoảng 145 USD xuống 20 USD, và thu về lợi nhuận khoảng 45 triệu USD. Không có kho nào bị ảnh hưởng trực tiếp; đây là một vụ tấn công kinh tế hoàn toàn. Ba dự án tách ra – AutoShark, Merlin Labs và PancakeHunny – sau đó đã bị khai thác bằng cùng một kỹ thuật, cho thấy vấn đề di truyền lỗi tách ra: việc tách ra một giao thức không di truyền được tính bảo mật của nó, chỉ có một cảm giác giả về nó.
Báo cáo phân tích thiệt hại theo danh mục tấn công
Khi phân loại các khoản lỗ trong năm theo loại tấn công, chúng ta có thể thấy những nơi mà thiệt hại thực sự tập trung. Các cuộc tấn công khai thác cầu nối giữa các chuỗi, do Poly Network dẫn đầu, chiếm phần lớn nhất với khoảng 611 triệu USD. Các cuộc tấn công mạo danh cho vay flash và mạo danh oracle – PancakeBunny, Cream, Belt, Spartan và các tổ chức khác – đã gây ra tổng cộng hơn 400 triệu USD thiệt hại. Những lỗi logic trong smart contract, bao gồm lỗi quản trị Compound và số 0 bị đặt sai của Uranium Finance, đã thêm vào 230 triệu USD. Các cuộc tấn công vào cơ sở hạ tầng đầu cuối và Web2, chủ yếu là Badger DAO, chiếm khoảng 120 triệu USD. Các cuộc tấn công vào quyền kiểm soát khóa và truy cập, bao gồm mnemonic bị đánh cắp của EasyFi, đã gây ra khoảng 180 triệu USD.
Những bài học rút ra là không có một biện pháp bảo vệ nào bao phủ tất cả các danh mục này. Kiểm tra smart contract phát hiện lỗi logic nhưng không ngăn chặn các vi phạm ở phía trước. TWAP oracles ngăn chặn các hành vi gian lận trong vay tiền nhanh nhưng không ngăn chặn các lỗi quản trị. Các biện pháp bảo vệ phụ thuộc vào từng lớp, và một giao thức bảo vệ một lớp trong khi bỏ qua lớp khác vẫn còn bị lộ.
Ba lớp bảo mật của DeFi
Khi xem xét các sự kiện trong năm 2021, các cuộc tấn công chia thành ba lớp khác nhau, mỗi lớp yêu cầu các biện pháp phòng thủ khác nhau.
Layer 1 – Lógica smart contract. Uranium Finance, Spartan Protocol và Compound đều bị lỗi trong mã hợp đồng chính. Cách phòng vệ ở đây là xác minh chính thức, kiểm toán kỹ lưỡng và việc thử nghiệm bao gồm các trường hợp đặc biệt như các điều kiện giới hạn (lỗi > so với >=).
Layer 2 – Thiết kế kinh tế và oracle. PancakeBunny, Cream, Belt và Vee Finance đã bị khai thác thông qua việc điều chỉnh giá và sai lệch về khuyến khích. Các hợp đồng được thực hiện chính xác theo cách được ghi rõ; lỗi nằm ở thiết kế. Các biện pháp phòng vệ bao gồm oracle TWAP, nhiều nguồn giá độc lập và mô hình kinh tế tính đến vốn quy mô cho vay flash.
Layer 3 – Cơ sở hạ tầng hoạt động và Web2. EasyFi, Badger DAO và Poly Network đều bị tấn công thông qua các khóa, quyền truy cập API hoặc các vai trò có quyền đặc biệt – không phải là logic hợp đồng. Các biện pháp phòng thủ bao gồm ví đa ký, hạn chế thời gian đối với các hành động của người quản trị, thay đổi thường xuyên các khóa API và các chính sách bảo mật nội dung trên các giao diện trước.
Trong hầu hết các cuộc phân tích sau khi xảy ra sự cố trong năm 2021, mọi vụ tấn công đều được xem là "bug trong smart contract", nhưng cách diễn giải này che giấu bài học thực sự: mỗi lớp cần có mô hình bảo mật riêng, và một giao thức chỉ có thể mạnh mẽ như lớp yếu nhất của nó.
Bảng kiểm tra an ninh: những bài học vẫn còn đúng
Các biện pháp bảo mật có thể ngăn chặn hầu hết các thiệt hại trong năm 2021 đã được hiểu rõ ràng ngày nay, nhưng các quy trình vẫn được triển khai mà không có chúng. Đây là danh sách kiểm tra mà năm 2021 đã viết bằng máu.
- Sử dụng TWAP hoặc các oracle đa nguồn. Không bao giờ đọc giá chợ AMM nguyên thủy như là nguồn cung cấp giá duy nhất. Trình bình theo thời gian hoặc lấy từ các mạng oracle bên ngoài, vì vậy một giao dịch đơn lẻ không thể thay đổi giá. Timelocks và multi-sig cho các khóa quản trị. Không có khóa nào nên có thể tiêu hao một quy trình. Các hành động của người quản trị nên yêu cầu nhiều chữ ký và một khoảng thời gian chậm công khai để cộng đồng có thể phản ứng. 2. Xác minh chính thức các hợp đồng quan trọng. Các kiểm toán bắt được các mô hình phổ biến, nhưng xác minh chính thức chứng minh các tính chất toán học – như "hàm này không thể phát hành quá nhiều phần thưởng" – mà không có bộ kiểm tra nào có thể bao phủ hoàn toàn. 3. An toàn phía trước. Các header Content Security Policy, thay đổi khóa API và tính toàn vẹn của các tài nguyên phụ trên các đoạn mã đều ngăn chặn mô hình DAO Badger là chèn mã độc hại vào một giao diện đáng tin cậy. 4. Tạm dừng khẩn cấp và các thiết bị phân phối. Khi có vấn đề, quy trình nên có thể ngừng hoạt động trong vòng vài phút, không phải chờ 7 ngày để bỏ phiếu về quản trị. Sự không thể tạm dừng phân phối của Compound trong thời gian thực đã biến một lỗi dễ điều chỉnh thành một sự rủi ro 147 triệu đô la.
Những câu hỏi thường gặp
Số tiền bị mất do các cuộc tấn công DeFi trong năm 2021 là bao nhiêu?
Con số được đề cập nhiều nhất là khoảng 1,3 tỷ USD trong các vụ khai thác trực tiếp trên 44 sự kiện, theo báo cáo "Tình trạng bảo mật DeFi" của CertiK. Các ước tính rộng hơn từ Chainalysis đạt 2,2 tỷ USD khi bao gồm các vụ rút tiền, và con số 10,5 tỷ USD của Elliptic bao gồm các thiệt hại gián tiếp từ sự sụt giảm giá của các token sau mỗi vụ tấn công.
Lừa đảo DeFi lớn nhất trong năm 2021 là gì?
Sự xâm nhập vào mạng lưới Poly vào ngày 10 tháng 8 năm 2021 là sự xâm nhập lớn nhất với số tiền 611 triệu USD. Nhà tấn công đã khai thác các quyền đặc quyền quá mức trong hợp đồng EthCrossChainManager để thay đổi danh sách người giữ và cạn kiệt các kho trên Ethereum, BNB Chain và Polygon. Các khoản tiền đã được hoàn trả phần lớn trong vòng 15 ngày, nhưng lỗ hổng này rất nghiêm trọng.
Tại sao các khoản vay flash được sử dụng trong nhiều cuộc tấn công năm 2021?
Việc cho vay flash cho phép các kẻ tấn công vay số tiền lớn mà không cần tài sản thế chấp, miễn là khoản vay được trả lại trong cùng một giao dịch. Điều này loại bỏ rào cản về vốn để thực hiện thủ đoạn điều chỉnh giá – trước đây, một kẻ tấn công cần phải có các vị thế lớn để điều chỉnh giá của kho chứa AMM. Với các khoản vay flash, chi phí duy nhất là phí gas, khiến các cuộc tấn công trở nên dễ tiếp cận cho bất kỳ ai có thể viết một smart contract.
Có bao giờ hacker của mạng Poly bị bắt không?
Tuy nhiên, danh tính của kẻ tấn công mạng Poly Network chưa được xác nhận công khai. Kẻ tấn công đã liên lạc với nhóm thông qua các tin nhắn trên chuỗi và đã trả lại số tiền, tự xưng là một hacker có ý định tốt. Các nhà nghiên cứu an ninh nhận thấy việc trả lại số tiền này có thể là do khó khăn trong việc rửa tiền 611 triệu USD dưới sự giám sát toàn cầu hơn là vì lòng từ thiện.
Làm thế nào để ngăn chặn các vụ tấn công DeFi năm 2021?
Hầu hết các sự cố có thể được ngăn chặn bằng các biện pháp hiện đang được áp dụng như: sử dụng TWAP hoặc các oracle đa nguồn thay vì giá thị trường AMM nguyên thủy, sử dụng multi-sig và timelock trên các khóa quản trị, xác minh chính thức các chức năng hợp đồng quan trọng, các biện pháp kiểm soát bảo mật đầu vào, và các cơ chế ngừng khẩn cấp. Vấn đề về quản trị của Compound đặc biệt nhấn mạnh đến nhu cầu phải kiểm tra kỹ lưỡng các đề xuất về quản trị trước khi đưa chúng ra để bỏ phiếu.
Có bất kỳ giao thức DeFi nào bị hack hơn một lần trong năm 2021 không?
Có. Cream Finance đã bị tấn công 3 lần trong năm 2021 – mất 37,5 triệu USD vào tháng 2, 18,8 triệu USD vào tháng 8 và 130 triệu USD vào tháng 10, tổng cộng là 186 triệu USD. Mẫu này cho thấy các giao thức có một lỗ hổng thường có những khoảng trống về bảo mật toàn hệ thống mà một bản cập nhật đơn lẻ không thể khắc phục.
Hiểu về các vụ tấn công DeFi năm 2021 không chỉ là một bài tập về lịch sử. Các vector tấn công đã định hình năm đó – sự điều khiển các khoản vay nhanh, sự phụ thuộc vào oracle, các lỗi trong quản trị và sự vi phạm ở phía trước – vẫn là các mối đe dọa chính đối với các giao thức DeFi hiện nay. Các biện pháp phòng thủ đã được biết đến. Câu hỏi là các giao thức có chọn thực hiện chúng trước hay sau khi chúng xuất hiện trong báo cáo hậu quả
