Tiêu đề gốc: "PeckShield: Balancer nền tảng DeFi đã bị hack và toàn bộ quá trình xảy ra sự cố kỹ thuật"
Nguồn gốc: PeckShield
Bắt đầu từ 02:03 sáng ngày 29/6 theo giờ Bắc Kinh, mô hình "cho vay là khai thác" đã thu hút nhiều sự chú ý trong thời gian gần đây Hai nhóm mã thông báo giảm phát ERC20 STA và STONK trên Balancer nền tảng DeFi đã bị hack, dẫn đến tổng thiệt hại hơn 500.000 USD.
Sau khi nhân viên an ninh của PeckShield can thiệp vào quá trình phân tích, họ nhanh chóng xác định rằng bản chất của vấn đề là các token giảm phát và hợp đồng thông minh của nó trên Balancer đã thất bại trong một số trường hợp nhất định. Tính không tương thích cho phép kẻ tấn công tạo ra các nhóm lưu thông STA/STONK sai lệch về giá và kiếm lợi từ chúng.
Kẻ tấn công đã thực hiện cuộc tấn công theo bốn bước, cụ thể:
1) Kẻ tấn công đã vượt qua Flash Loan cho vay 104.331 WETH từ nền tảng dYdX;
2) Kẻ tấn công liên tục thực hiện lệnh gọi swapexactMountin() cho đến khi hầu hết mã thông báo STA do Balancer sở hữu bị tiêu thụ hết, rồi bắt đầu cuộc tấn công tiếp theo. Cuối cùng, Balancer chỉ còn lại 0,000000000000000001 STA.
3) Kẻ tấn công lợi dụng sự không tương thích giữa mã thông báo STA và hợp đồng thông minh Balancer, tức là sự không khớp giữa kế toán và số dư, để thực hiện các cuộc tấn công, làm cạn kiệt các tài sản khác trong nhóm quỹ và cuối cùng là tổng giá trị lợi nhuận là 523.616,52 USD tài sản kỹ thuật số.
4) Kẻ tấn công đã hoàn trả khoản vay nhanh đã vay từ dYdX và lấy đi tài sản kỹ thuật số thu được từ cuộc tấn công.
Ở những trang tiếp theo, chúng ta sẽ phân tích dần dần các cuộc tấn công do hacker thực hiện trong giao dịch flash loan này.
Bản phân tích kỹ thuật của toàn bộ quá trình Balancer bị hack

(Minh họa toàn bộ quá trình hack)
Bước một: Flash Loan
Từ dYdX Flash Loan 104.331 WETH, phần này sẽ rõ ràng đối với những độc giả đã quen thuộc với mô hình cho vay DeFi và sẽ không lặp lại ở đây.
Bước 2: Xóa nội dung STA của Balancer
Kẻ tấn công đã xóa Balancer thông qua nhiều lệnh gọi swapExactAmountIn() để chuẩn bị cho cuộc tấn công tiếp theo. Điều đáng nói là chúng tôi phát hiện ra rằng số lượng tài sản có thể đổi mỗi lần trong mã hợp đồng thực sự có giới hạn trên, tuy nhiên, kẻ tấn công xảo quyệt đã tính toán trước số lượng WETH tối đa có thể đổi được và khéo léo để lại Bộ cân bằng chỉ với 0,0000000000000000001 STA.
Do nguyên tắc "cân bằng động" giữa các tài sản của nhóm vốn Balancer (BPool), STA còn lại gần bằng 0 sẽ làm tăng giá trị của STA. Điều này cho phép mọi người trao đổi 1 STA lấy một số lượng lớn tài sản kỹ thuật số khác.
Bước ba: Kiếm lợi nhuận từ cuộc tấn công
Sau hai bước chuẩn bị đầu tiên, kẻ tấn công Đã đến lúc để thể hiện kỹ năng thực sự của bạn!

(Bước 3 : Tấn công biểu tượng lợi nhuận)
Theo cách trên, kẻ tấn công 0,0000000000000000001 STA đã được gửi đến BPool thông qua hàm swapExactAmountIn(). Với chênh lệch giá trị rất cao, 30.347 WETH đã được trao đổi ngay lập tức và thu được lợi nhuận. Tại thời điểm này, cơ chế kế toán nội bộ của BPool_records[STA] được tăng thêm 1 trước khi BPool thực sự nhận được 0,0000000000000000001 STA (lưu ý: kẻ tấn công sẽ sử dụng gulp() để đặt lại giá trị này sau).


(Bước 3: Dưới biểu tượng lợi nhuận tấn công) span>
Ngoài ra, chúng tôi còn thấy rằng ở cuối swapExactAmountIn() , _pullUnderlying() cố gắng thu thập STA tiêu thụ tương ứng từ phía kẻ tấn công. Tuy nhiên, vì STA cũng sẽ tính phí xử lý 1% khi chuyển tiền nên BPool sẽ không thực sự nhận được bất kỳ STA nào. Điều này gây ra sự không khớp giữa số dư STA thực tế của BPool và kế toán nội bộ.


Phần tiếp theo là phần thú vị nhất, kẻ tấn công gọi gulp() để liên tục thiết lập lại _records[STA], khiến cho There luôn là 0,0000000000000000001 STA trong BPool. Do đó, kẻ tấn công có thể sử dụng mức giá cực cao 0,0000000000000000001 STA để tiêu thụ tất cả các tài sản khác như WETH, SNX, LINK, v.v. trong nhóm lưu thông.

Bước 4: Hoàn trả Flash loan

Cuối cùng, như được hiển thị trong hình trên, kẻ tấn công đã hoàn trả 104.331 WETH đã vay từ khoản vay nhanh.
Đề xuất
Cuộc tấn công này một lần nữa bộc lộ những rủi ro về khả năng tương thích của khả năng kết hợp DeFi. Cách đây không lâu, hai nền tảng Uniswap và Lendf.Me đã phải hứng chịu những đợt tấn công rất nghiêm trọng của hacker do vấn đề tương thích với chuẩn ERC777. Điều cần cảnh báo là các cuộc tấn công tương tự của hacker có thể xảy ra phổ biến trong ngành DeFi trong tương lai.
Nếu bạn hỏi làm thế nào để tránh những cuộc tấn công như vậy thì sao? Có thể có hai ý tưởng tối ưu hóa và điều chỉnh: 1) Khi STA/STONK thực hiện transfer() hoặc transferFrom(), khi số tiền chuyển không đủ để trả phí xử lý, nó sẽ trực tiếp quay trở lại hoặc trả về Sai; 2) Balancer nên thực hiện mọi transferFrom () Kiểm tra số dư của BPool sau khi hàm được gọi.
Tất nhiên, việc đưa ra các biện pháp khắc phục sự cố bảo mật sau đó không thể bù đắp được những tổn thất đã xảy ra, chúng tôi tin rằng giải pháp tốt nhất là hãy chuẩn bị trước. Các nhà phát triển dự án DeFi nên tận dụng các đặc tả mã tốt nhất có thể và có thể tìm kiếm các công ty bảo mật bên thứ ba để hỗ trợ họ tiến hành các thử nghiệm tấn công và phòng thủ toàn diện trước khi lên mạng để tìm ra tất cả các lỗ hổng tiềm ẩn nhiều nhất có thể. Cuối cùng, hãy cố gắng hết sức để điều tra kỹ lưỡng mọi sự kết hợp giữa ERC20, ERC777 và các dự án DeFi khác.
Theo dõi
Không còn nghi ngờ gì nữa rằng sự cố xảy ra với Balancer cũng sẽ có tác động đến Cộng đồng DeFi và điều này Rất có thể điều tương tự sẽ xảy ra tiếp theo. Chúng tôi muốn nhắc nhở phần lớn các nhà phát triển dự án DeFi hãy chú ý đến vấn đề bảo mật của hợp đồng.
Thống kê của chúng tôi cho thấy Balancer đã mất tổng cộng 523.616,52 USD tài sản kỹ thuật số trong cuộc tấn công này. Chi tiết như sau:

Liên kết gốc: https://mp.weixin.qq.com
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia
