Blog

Bản dịch tự động · Đọc bằng tiếng Anh

Mô-đun SSO 2 - Lỗ hổng hợp đồng thông minh: Đi sâu vào tấn công tái nhập

Hợp đồng thông minh mang lại tính minh bạch nhưng cũng tiềm ẩn rủi ro. Bài viết này khám phá các lỗ hổng như Tái nhập, với vụ tổn thất 150 triệu USD của DAO làm ví dụ. Lỗi tràn số nguyên dẫn đến thiệt hại 900 triệu USD của BeautyChain. DAOMaker mất 4 triệu USD do lỗ hổng kiểm soát truy cập. Tấn công FlashLoan khiến Harves Finance mất 38 triệu USD.

Bởi Markos Mebellis

Mô-đun SSO 2 - Lỗ hổng hợp đồng thông minh: Đi sâu vào tấn công tái nhập
Trên trang này

Hợp đồng thông minh đang cách mạng hóa các ngành công nghiệp toàn cầu nhờ tính hiệu quả, minh bạch và bất biến. Tuy nhiên, thiết kế mở và tự động của chúng cũng khiến chúng dễ bị tổn thương. Để tối đa hóa tiềm năng và giảm thiểu mối đe dọa, việc nắm bắt các lỗ hổng và con đường tấn công tiềm tàng là rất quan trọng. Việc xây dựng và duy trì các hợp đồng này đòi hỏi sự chú ý cẩn thận và tuân thủ các thực tiễn tốt nhất. Bài viết này đi sâu vào các lỗ hổng phổ biến, minh họa bằng các trường hợp thực tế để nâng cao hiểu biết. Hãy xem bài viết sau, được cung cấp bởi Salus Security.

Các lỗ hổng chính:

**Tái nhập:**Ở đây, kẻ tấn công khai thác một lỗ hổng, tái nhập vào các hàm trước khi các thao tác quan trọng hoàn tất hoặc giá trị được cập nhật.

Tái nhập đơn hàm: Điều này xảy ra khi một hợp đồng tương tác với một hợp đồng độc hại, cho phép hợp đồng sau tái nhập vào một hàm. Ví dụ, các hợp đồng độc hại có thể liên tục tái nhập vào hàm 'withdrawBalance', rút thêm ether trước khi số dư được cập nhật.

Các cuộc tấn công đáng chú ý:

  • The DAO (2016): Sau khi huy động được 150 triệu USD, nó đã bị hack do lỗ hổng mã hóa. Điều này dẫn đến sự phân tách của mạng Ethereum.
  • PolyDex (2021): Mất 500k USD do một cuộc tấn công tái nhập vào Hợp đồng thông minh PLX Locker.
  • Bacon Protocol (2022): Chịu tổn thất 1 triệu USD từ một lỗi tái nhập trong hàm lend().
  • Lendf.Me (2020): Mất khoảng 24,7 triệu USD trên nhiều loại tiền mã hóa.

**Tái nhập chéo hàm:**Phát sinh từ trạng thái chia sẻ giữa các hàm khác nhau và bảo vệ tái nhập kém. Ví dụ 'balances' ở trên cho thấy mặc dù 'withdrawAll' có bảo vệ, kẻ tấn công vẫn có thể khai thác hàm 'transfer'.

Các sự cố khét tiếng:

  • DFX Finance (2022): Mất hơn 7 triệu USD do một cuộc tấn công khai thác một hàm không có bảo vệ tái nhập.
  • Hundred Finance (2022): Mất khoảng 6,5 triệu USD sau một cuộc tấn công tái nhập khai thác hàm borrowFresh.
  • Fei Protocol (2022): Mất khoảng 80 triệu USD từ một cuộc tấn công lợi dụng lỗ hổng Tái nhập.

**Tái nhập chéo hợp đồng:**Kết quả từ trạng thái chia sẻ giữa các hợp đồng khác nhau và trình tự sửa đổi biến sai. Ngay cả khi các hàm có bảo vệ, các hàm khác, như 'burnAccount', vẫn có thể bị khai thác.

Các cuộc tấn công nổi bật:

  • Rari Capital (2021): Mất khoảng 10 triệu USD (~2600 ETH) trong vòng chưa đầy một giờ.
  • ValueDefi (2021): Mất 5345.314 WBNB do tính toán cổ phần không hợp lệ, dựa vào dữ liệu bên ngoài.

Tái nhập chỉ đọc:

Tái nhập chỉ đọc khai thác một hàm mà mặc dù không thay đổi trạng thái của hợp đồng, vẫn có thể tạo ra đầu ra sai lệch khi trạng thái không nhất quán.

Các cuộc tấn công đáng chú ý:

  • QuickSwap (2022): Kẻ khai thác đã lạm dụng một khoản vay nhanh để điều chỉnh giá giao ngay của tài sản, lừa đảo 138 ETH và 700 token MATIC. Điều này có thể xảy ra do một lỗ hổng trong oracle Curve LP.
  • dForce (2023): Một lỗi tái nhập chỉ đọc nằm trong mã truy cập oracle giá trên chuỗi Arbitrum và Optimism với Curve Finance.
  • Sentimente (2023): Một cuộc tấn công, khai thác lỗ hổng tái nhập chỉ đọc, dẫn đến trộm cắp 1 triệu USD. May mắn thay, 90% đã được thủ phạm trả lại.
  • Sturdy (2023): Mất khoảng 442 ETH do vấn đề tái nhập chỉ đọc của Balancer khi giá của B-stETH-STABLE bị giả mạo.

Phòng chống lỗ hổng tái nhập:

  1. Luôn tuân thủ mô hình kiểm tra-hiệu ứng-tương tác.
  2. Sử dụng bảo vệ tái nhập cho tất cả các thao tác nhạy cảm.
  3. Xử lý mọi cuộc gọi bên ngoài một cách tỉ mỉ.

Tràn số nguyên:

Khi các phép tính vượt quá giới hạn, chúng bị tràn, thường dẫn đến giá trị cực nhỏ hoặc cực lớn.

Các cuộc tấn công minh họa:

  • BeautyChain (2018): Kẻ tấn công đã lấy 10^58 BEC thông qua tràn số nguyên, bán tháo số tiền lên tới 900 triệu USD.
  • Poolz (2023): Dẫn đến tổn thất khoảng 665.000 USD trên chuỗi Ethereum, Binance và Polygon.

Biện pháp chống tràn số nguyên:

  1. Sử dụng các phương pháp tính toán an toàn như thư viện safeMath.
  2. Ưu tiên kiểm tra giới hạn để đảm bảo kết quả nằm trong phạm vi.
  3. Áp dụng phiên bản trình biên dịch solidity 0.8.0 trở lên để phát hiện tràn tích hợp.

Kiểm soát truy cập:
Lỗ hổng kiểm soát truy cập phát sinh từ việc thiếu các ràng buộc truy cập nghiêm ngặt đối với các hàm xử lý các thao tác quan trọng.

  • Các cuộc tấn công nổi bật:
  • DAOMaker (2021): Một khoản tiền khổng lồ ~4 triệu USD đã bị rút sau khi hàm init bị bỏ ngỏ.
  • GymNetwork (2022): Kẻ khai thác đã lợi dụng sơ hở xác thực trong depositFromOtherContract(), tạo điều kiện tăng số dư bất hợp pháp mà không cần thanh toán thực tế. Tổn thất? Khoảng 2.475,91 WBNB.
  • Tempdao (2023): Cách tiếp cận lỏng lẻo đối với kiểm soát truy cập cho hàm migrateStake dẫn đến tổn thất vượt quá 2,34 triệu USD.

Lỗ hổng kiểm soát truy cập

  • Mô tả: Các lỗ hổng phát sinh do cơ chế hạn chế không đầy đủ quản lý quyền truy cập và đặc quyền đối với các thao tác cụ thể trong hệ thống.

Biện pháp phòng ngừa:

  1. Kiểm tra quyền nghiêm ngặt: Luôn thực thi các giao thức quyền nghiêm ngặt cho các hàm, đặc biệt là những hàm xử lý các thao tác nhạy cảm.
  2. Cơ chế đa chữ ký: Đối với các nhiệm vụ cần ra quyết định chung, sử dụng giao thức đa chữ ký yêu cầu nhiều phê duyệt trước khi thực hiện các thao tác nhạy cảm.

Các vectơ tấn công phổ biến

  • Mô tả: Nhiều phương thức hoặc kênh khác nhau mà kẻ tấn công lợi dụng lỗ hổng trong hệ thống, chủ yếu là trong hợp đồng thông minh.

Ví dụ đáng chú ý:

  • Tấn công FlashLoan: Lợi dụng tính năng vay tức thời của các hệ thống tài chính phi tập trung để thực hiện các hoạt động độc hại.
  • Front-Running: Kẻ tấn công biết được giao dịch đang chờ xử lý của người dùng khác và hành động dựa trên đó bằng cách trả phí gas cao hơn.

Tấn công FlashLoan

  • Mô tả: Mặc dù bản chất không phải là một cuộc tấn công, FlashLoan là một tính năng DeFi cho phép người dùng vay những khoản tiền lớn ngay lập tức mà không cần tài sản thế chấp. Nó đã bị lợi dụng do các lỗ hổng logic trong tương tác và quan hệ giữa các hợp đồng.

Các cuộc tấn công đáng chú ý:

  1. Harves Finance (2020.10.26): Dẫn đến thiệt hại 38 triệu USD.
  2. InverseFinance (2022.6.16): Dẫn đến thiệt hại 53.2445 WBTC và 99,976.29 USDT.
  3. NewFreeDAO (2022.9.8): Rút cạn 4,481 WBNB, tương đương khoảng 1,25 triệu USD.
  4. Lodestar (2022.12.11): Bị khai thác thông qua thao túng giá oracle.
  5. 0vix (2023.4.28): Dẫn đến thiệt hại 2 triệu USD trên chuỗi Polygon.

Khuyến nghị phòng ngừa:

  1. Nhận diện các đặc điểm của Flashloan trong quá trình phát triển dự án.
  2. Để xác định giá chính xác, hãy sử dụng phương pháp trung bình có trọng số theo thời gian hoặc nhiều oracle.

Chạy trước giao dịch

  • Mô tả: Kẻ tấn công biết được giao dịch của người dùng khác từ memPool và lợi dụng điều đó bằng cách trả phí gas cao hơn.

Các cuộc tấn công đáng chú ý:

  1. Sushi Badger Digg (2021.1.25): Gây thiệt hại 81.68 ETH.
  2. Sushiswap Ape-ETH pool (2022.5.17): Kẻ tấn công thu lợi khoảng 0.3 ETH.
  3. Uniswap (2023.4.2): Gây thiệt hại khoảng 25 triệu USD thông qua tấn công sandwich.

Khuyến nghị phòng ngừa:

  1. Sử dụng bảo vệ trượt giá khi giao dịch.
  2. Thực hiện giao dịch vào giờ thấp điểm, đặc biệt trong thị trường biến động.
  3. Sử dụng FlashBot rpc của 1inch để gửi giao dịch trực tiếp đến thợ đào, qua đó bỏ qua memPool.

Tóm tắt

Chúc mừng! Bạn đã hoàn thành Mô-đun 2 - Lỗ hổng Hợp đồng Thông minh: Đi sâu vào Tấn công Tái nhập và các Lỗ hổng Phổ biến

Hãy cùng ôn lại những gì bạn đã học:

Lỗ hổng tái nhập - Kẻ tấn công lợi dụng kẽ hở, gọi lại hàm trước khi hàm hoàn tất.

  • Tái nhập trong một hàm: Một hợp đồng độc hại gọi lại một hàm trong hợp đồng khác.
  • Tái nhập chéo hàm: Trạng thái dùng chung giữa các hàm khác nhau bị lợi dụng do bảo vệ tái nhập kém.
  • Tái nhập chéo hợp đồng: Khai thác trạng thái chia sẻ giữa các hợp đồng khác nhau.
  • Tái nhập chỉ đọc: Khai thác một hàm tạo ra kết quả sai lệch khi trạng thái không nhất quán.

Tràn số nguyên - Các phép tính vượt quá giới hạn đặt ra, dẫn đến giá trị cực đoan.

Lỗ hổng kiểm soát truy cập - Phát sinh từ việc thiếu các ràng buộc truy cập nghiêm ngặt đối với các hàm thiết yếu.

Các vectơ tấn công phổ biến - Các phương thức mà kẻ tấn công lợi dụng lỗ hổng hệ thống.

**FlashLoan Attack **- Một tính năng DeFi cho phép vay lớn tức thì không cần tài sản thế chấp nhưng bị lợi dụng do lỗi logic.

Tấn công Front-running- Kẻ tấn công biết được các giao dịch đang chờ xử lý và trục lợi bằng cách trả phí gas cao hơn.

Bài viết này được mang đến cho bạn bởi:

Tóm tắt — minh họa