KiemTienOnline360

Chia sẻ hành trình kiếm tiền và đầu tư bắt đầu từ con số 0

Đầu tư tiền số, Kiến thức Đầu tư

Chi tiết cơ chế tấn công vào Harvest Finance – Cách mà hacker lấy đi 24 triệu USD chỉ trong vòng 7 phút

Chi tiết cơ chế tấn công vào Harvest Finance - Cách mà hacker lấy đi 24 triệu USD chỉ trong vòng 7 phút

Chi tiết cơ chế tấn công vào Harvest Finance - Cách mà hacker lấy đi 24 triệu USD chỉ trong vòng 7 phút

Chia sẻ bài viết
5
(2)

Vào ngày 26 tháng 10, 02:53:31 AM + UTC, một kẻ tấn công đã thực hiện hành vi đánh cắp tiền từ kho tiền USDC và USDT của Harvest Finance. Vậy chi tiết cơ chế tấn công này ra sao, làm thế nào mà Hacker có thể lấy 24 triệu USD từ Harvest Finance chỉ trong vòng vài phút một cách đơn giản như vậy?

Kẻ tấn công đã khai thác một khoản chênh lệch giá và tổn thất vô thường ảnh hưởng đến giá trị của các tài sản riêng lẻ bên trong nhóm Y của Curve.fi, nơi mà quỹ của Harvest được đầu tư. Theo các báo cáo đăng tải đầu ngày thứ Hai 2020-10-26, hơn 24 triệu đô la đã được rút khỏi các bể Harvest Finance và được đổi qua renBTC. Các khoản tiền khác chuyển đổi thông qua Tornado Cash – công cụ giao dịch ẩn danh trên Ethereum. Chi tiết xem: Nền tảng DeFi Harvest Finance Bị Tấn Công 24 Triệu USD, giá token FARM giảm 65% sau đó.

Chi tiết cơ chế tấn công vào Harvest Finance - Cách mà hacker lấy đi 24 triệu USD chỉ trong vòng 7 phút
Chi tiết cơ chế tấn công vào Harvest Finance – Cách mà hacker lấy đi 24 triệu USD chỉ trong vòng 7 phút

Lỗ hổng của dự án nằm trong kiến trúc kinh tế, chứ không liên quan tới mã nguồn của Smart Contract. Đầu tiên chúng ta phải hiểu cơ chế tạo lợi nhuận của Harvest Finance

  • Harvest Finance tập hợp các Farmer nhỏ lẻ lại để tạo ra quỹ lớn, và sử dụng quỹ này để thực hiện Farm một cách tự động trên các nền tảng để tối ưu lợi nhuận.
  • Các chiến lược đầu tư của Harvest đều được tính toán tự động trong thời gian thực, thông qua dữ liệu tỉ giá từ các nền tảng phi tập trung. Kho tiền sử dụng giá trị của tài sản (Chính là tỉ giá) để tính toán số lượng cổ phiếu được phát hành cho người dùng gửi tiền. Họ cũng sử dụng giá trị của tài sản khi người dùng rút tiền khỏi kho tiền để tính toán khoản thanh toán mà người dùng sẽ nhận được khi thoát.
  • Các tài sản bên trong một số hầm (bao gồm USDC và USDT) được gửi vào các nhóm chia sẻ của các giao thức DeFi cơ bản (chẳng hạn như nhóm Y trên Curve.fi). Các tài sản bên trong các nhóm như vậy có thể chịu tác động của thị trường như mất mát vô thường, chênh lệch giá và trượt giá. Do đó, giá trị của chúng có thể bị thao túng thông qua các giao dịch thị trường với khối lượng lớn.

Kẻ tấn công liên tục khai thác tác động của việc mất USDC và USDT vô thường bên trong nhóm Y trên Curve.fi (Thực chất liên quan tỉ giá). Họ đã sử dụng giá trị tài sản bị thao túng để gửi tiền vào kho tiền của Harvest và mua cổ phiếu kho tiền với mức giá có lợi, sau đó thoát ra khỏi kho tiền với giá cổ phiếu thông thường tạo ra lợi nhuận. Chuỗi sự kiện sau đây theo dõi cuộc tấn công.

Địa chỉ ví của kẻ tấn công là 0xf224ab004461540778a914ea397c589b677e27bb. Nó đã triển khai một hợp đồng 0xc6028a9fa486f52efd2b95b949ac630d287ce0af, qua đó họ thực hiện toàn bộ cuộc tấn công vào ngày 26 tháng 10 năm 2020, 02:53:31 SA + UTC. 10 ETH sử dụng cho cuộc tấn công được lấy từ Tornado trong giao dịch 0x4b7b9e387a79289720a0226f695913d1d11dbdc681b7218a432136cc089363c4.

  1. Cuộc tấn công tự bắt đầu trong giao dịch 0x35f8d2f572fceaac9288e5d462117850ef2694786992a8c3f6d02612277b0877.
  2. Kẻ tấn công đã đưa một lượng lớn USDT (~18,308,555) và USDC (50,000,000) từ Uniswap vào hợp đồng tấn công.
  3. Hợp đồng đã chuyển đổi 17,222,012 USDT thành USDC thông qua hoán đổi bên trong Y pool. Hiệu quả của việc hoán đổi là giá trị USDC cao hơn trong nhóm Y do các tài sản khác chịu tổn thất vô thường. Hợp đồng thông minh đã thu được số tiền gần tương đương là 17,216,703 USDC.
  4. Kẻ tấn công đã gửi 49,977,468 USDC vào kho tiền USDC của Harvest, nhận tổng số 51,456,280 fUSDC ở mức 0.97126080216 USDC mỗi cổ phiếu. Giá của một cổ phiếu trước cuộc tấn công là 0.980007 USDC, vì vậy kẻ tấn công đã giảm giá trị của cổ phiếu khoảng 1%. Kiểm tra chênh lệch giá trong chiến lược của Harvest không vượt quá ngưỡng 3% và do đó không hoàn nguyên giao dịch.
  5. Kẻ tấn công đã đổi lại 17,239,234 USDC thành USDT thông qua Y pool. Kết quả là nhận được giá trị thấp hơn ban đầu của USDC trong nhóm Y do hoàn nguyên hiệu ứng mất mát vô thường. Kẻ tấn công đã nhận lại được 17,230,747 USDT.
  6. Kẻ tấn công đã rút khỏi Harvest’s USDC vault giao dịch tất cả cổ phiếu fUSDC với giá 50,596,877 USDC. Giá của một cổ phiếu là 0.98329837664 USDC khi giá trị của USDC bên trong nhóm Y giảm. USDC được thanh toán hoàn toàn bằng bộ đệm của kho tiền USDC của Harvest, hoàn toàn không tương tác với nhóm Y. Lợi nhuận ròng (không tính phí vay nhanh) là 619,408 USDC. Kẻ tấn công đã lặp lại quy trình nhiều lần trong cùng một giao dịch.
  7. Sau khi thực hiện 17 giao dịch tấn công nhằm vào kho tiền USDC trong vòng 4 phút, kẻ tấn công đã lặp lại quy trình theo cách tương tự đối với kho tiền USDT bắt đầu với giao dịch 0x0fc6d2ca064fc841bc9b1c1fad1fbb97bcea5c9a1b2b66ef837f1227e06519a6. Họ đã thực hiện 13 giao dịch nhắm vào kho tiền USDT trong vòng 3 phút nữa.
  8. Vào cuối quá trình vào ngày 26 tháng 10 năm 2020, 03:01:48 AM + UTC, kẻ tấn công đã chuyển 13,000,000 USDC và 11,000,000 USDT từ hợp đồng tấn công đến địa chỉ 0x3811765a53c3188c24d412daec3f60faad5f119b trong giao dịch 0x53fae6f1d6b8a76a666a0bf7f9c724e6006465e544f89f1515b939d8911e8c58
  9. Kẻ tấn công đã chuyển một số tiền trở lại người triển khai Harvest trong giao dịch 0x25119cd54a4562aa427d9770af383512f9cb5e8e4d17232ad96b69dc293a3510. Đây là 1,761,898 USDC và 718,914 USDT.

Với 17 triệu USDT trên Curve và 50 triệu USDC trên Harvest Finance, một chu trình sẽ tạo ra một khoản lợi nhuận ~600,000 USDC từ việc chênh lệch giá:

Chi phí để tác động vào tỉ giá cho 1 chu trình (~13,800 USD) - Chi tiết cơ chế tấn công vào Harvest Finance
Chi phí để tác động vào tỉ giá cho 1 chu trình (~13,800 USD)
(Chi tiết cơ chế tấn công vào Harvest Finance)
Lợi nhuận trên Harvest Finance cho 1 chu trình (~600,000 USD) - Chi tiết cơ chế tấn công vào Harvest Finance
Lợi nhuận trên Harvest Finance cho 1 chu trình (~600,000 USD)
(Chi tiết cơ chế tấn công vào Harvest Finance)

Yêu cầu của cuộc tấn công này phải nhanh nên bắt buộc phải làm tự động. Số tiền USDT phải đủ lớn để tạo ra khoảng chênh lệch giá trên 1% nhưng không được quá lớn để tránh giá chênh lệch quá 3%. Số tiền đẩy vào Harvest Finance

Harvest Finance sau đó đã hành động và rút tất cả tiền từ các nhóm chia sẻ ngay sau khi đánh giá cuộc tấn công và xây dựng lại quy trình của nó. Điều này bao gồm DAI, USDC, USDT, TUSD cũng như WBTC và đồng nhân dân tệ. Các quỹ hiện đang có mặt trong hầm và không thể bị thị trường thao túng thêm. Cuộc tấn công không liên quan đến DAI, TUSD, WBTC và đồng nhân dân tệ, và những người gửi tiền trong các hầm này không bị ảnh hưởng.

Giá cổ phiếu của kho tiền USDC giảm từ 0,980007 xuống 0,834953 và giá cổ phiếu của kho tiền USDT giảm từ 0,978874 xuống 0,844812, dẫn đến mức giảm tương ứng là 13,8% 13,7%. Giá trị bị mất là khoảng 33,8 triệu đô la, tương ứng với khoảng 3,2% tổng giá trị bị khóa trong giao thức vào thời điểm trước cuộc tấn công.

Để khắc phục vấn đề này trong tương lai, Harvest Finance đưa ra một số lựa chọn như sau:

  • Thực hiện cơ chế cam kết và tiết lộ tiền gửi. Điều này sẽ loại bỏ khả năng thực hiện gửi tiền và rút tiền trong một giao dịch duy nhất và do đó, làm cho các cuộc tấn công dựa trên khoản vay nhanh không khả thi. Về phía người dùng, điều này có nghĩa là trong quá trình gửi tiền, mã thông báo của họ sẽ được chuyển vào Thu hoạch trong một giao dịch. Người dùng sau đó sẽ yêu cầu phần của họ trong một giao dịch khác, lý tưởng là bên trong một khối khác. Điều này sẽ tạo thành một sự thay đổi về trải nghiệm người dùng và có khả năng phát sinh chi phí xăng cao hơn nhưng vẫn có thể chấp nhận được đối với người gửi tiền.
  • Cấu hình chặt chẽ hơn của kiểm tra kho tiền gửi hiện có trong các chiến lược. Ngưỡng hiện tại được đặt thành 3% và nó không đủ để bảo vệ kho tiền trước một cuộc tấn công như vậy. Tuy nhiên, một ngưỡng nghiêm ngặt hơn có thể làm cho một cuộc tấn công như vậy không khả thi về mặt kinh tế, nó có thể hạn chế tiền gửi trong trường hợp có tác động mất mát vô thường tự nhiên. Các sự kiện kéo dài hơn 7 phút vào Chủ nhật cho thấy rằng biện pháp này không đủ hiệu quả và do đó nên được xem là biện pháp bổ sung cho các biện pháp khác.
  • Rút tiền trong một tài sản cơ bản. Khi người dùng gửi tiền vào các kho tiền sử dụng nhóm chia sẻ (chẳng hạn như nhóm Y), họ giao dịch hiệu quả tài sản đơn lẻ của mình lấy tài sản nhóm (chẳng hạn như yCurve). Nếu người dùng chỉ rút tài sản cơ bản, họ sẽ có thể giao dịch chúng để lấy kết hợp tài sản theo điều kiện thị trường hiện tại. Nếu thị trường bị thao túng, giao dịch cũng sẽ bị thao túng như vậy, điều này sẽ ngăn thực thể tấn công tạo ra lợi nhuận. Từ quan điểm của người dùng thông thường, việc rút yCRV có thể được thực hiện bằng cách chuyển đổi thành stablecoin trong một giao dịch riêng biệt. Mặc dù điều này yêu cầu thay đổi UX, nhưng điều này cũng có thể giải quyết vấn đề trượt giá xã hội và do đó có thể có lợi cho giao thức. Điểm bất lợi của cách tiếp cận này là nó ràng buộc cơ chế rút tiền với chiến lược hiện đang được sử dụng: nếu một chiến lược được chuyển sang một chiến lược khác không sử dụng nhóm cơ bản được chia sẻ hoặc sử dụng một nhóm khác, thì tài sản được tạo ra bởi rút tiền cũng sẽ thay đổi.
  • Sử dụng oracles để xác định giá tài sản. Mặc dù giá tài sản gần đúng có thể được xác định một cách hiệu quả từ các phép toán bên ngoài (do Chainlink hoặc Maker cung cấp), nó sẽ có mối liên hệ rất lỏng lẻo với giá cổ phiếu thực. Nếu giá trị của các tài sản bên trong giao thức DeFi cơ bản khác với giá trị được báo cáo bởi Oracle, thì kho tiền sẽ tiếp xúc với chênh lệch giá tự do và một cuộc tấn công flashloan. Đây không phải là giải pháp cho Thu hoạch, tuy nhiên, các điều kỳ diệu sẽ được xem xét trong thiết kế hệ thống và các chiến lược giảm thiểu có thể có (vì chúng đã được xem xét cho đến thời điểm này).

Nguồn: Harvest Flashloan Economic Attack Post-Mortem

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 2

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Bình luận bị đóng

Giao diện bởi Anders Norén