

Lưu ý của biên tập viên: Bài viết này đến từPeckShield(ID:PeckShield), được in lại bởi Odaily với sự cho phép.
Lưu ý của biên tập viên: Bài viết này đến từ
, được in lại bởi Odaily với sự cho phép.
Vào lúc 02:03 ngày 29 tháng 6 theo giờ Bắc Kinh, hai nhóm mã thông báo giảm phát ERC20 là STA và STONK trên nền tảng DeFi Balancer, gần đây đã thu hút nhiều sự chú ý do mô hình "vay để khai thác", đã bị hack và mất tổng cộng hơn 500.000 đô la.
Sau khi nhân viên bảo mật của PeckShield can thiệp vào quá trình phân tích, họ đã nhanh chóng xác định được bản chất của vấn đề. .
Cuộc tấn công của hacker được chia thành 4 bước, cụ thể:
1) Kẻ tấn công đã cho vay 104.331 WETH từ nền tảng dYdX thông qua các khoản vay nhanh;
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 các mã thông báo STA thuộc sở hữu của Bộ cân bằng cạn kiệt, sau đó bắt đầu cuộc tấn công tiếp theo. Cuối cùng, Bộ cân bằng chỉ còn lại 0,000000000000000001 STA.
3) Kẻ tấn công đã khai thác sự không tương thích giữa mã thông báo STA và hợp đồng thông minh của Balancer, nghĩa là sự không phù hợp giữa sổ sách kế toán và số dư, để thực hiện một 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 kiếm được tổng giá trị 523.616,52 đô la Tài sản kỹ thuật số.4) Kẻ tấn công hoàn trả khoản vay flash đã cho vay từ dYdX và lấy đi tài sản kỹ thuật số thu được từ cuộc tấn công.Giao dịch cho vay chớp nhoáng
tiêu đề phụ
Balancer bị hack và toàn bộ quá trình tháo gỡ kỹ thuật
Mô tả hình ảnh
(Hình minh họa toàn bộ quá trình hack)
Bước 1: Cho vay chớp nhoáng
Từ dYdX flash loan 104.331 WETH, bạn đọc nào đã quen với mô hình cho vay DeFi chắc cũng tương đối rõ phần này nên mình không nhắc lại ở đây.
Bước 2: Xóa tài sản STA của Balancer
Kẻ tấn công đã làm trống tài sản STA của Balancer thông qua nhiều lệnh gọi tớ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 nhận thấy rằng thực tế có giới hạn trên về số lượng tài sản có thể được trao đổi mỗi lần trong mã hợp đồng. Tuy nhiên, kẻ tấn công xảo quyệt đã tính toán trước lượng WETH tối đa có thể được trao đổi và khéo léo đã rời khỏi Bộ cân bằng chỉ với 0,000000000000000001 STA.
Bước ba: Tấn công vì lợi nhuận
Sau hai bước chuẩn bị đầu tiên, đã đến lúc kẻ tấn công thể hiện kỹ năng thực sự của mình!
(Bước 3: Vào biểu tượng lợi nhuận tấn công)
Dựa trên những điều trên, kẻ tấn công đã gửi 0,00000000000000000001 STA đến BPool thông qua hàm swapExactAmountIn() và ngay lập tức đổi 30,347 WETH với chênh lệch giá trị rất cao, 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] thêm 1 trước khi BPool thực sự nhận được 0,000000000000000001 STA (Lưu ý: Sau đó, kẻ tấn công sẽ sử dụng gulp() để đặt lại giá trị).
Mô tả hình ảnh
(Bước 3: dưới biểu tượng kiếm tiền từ tấn công)
Ngoài ra, chúng tôi nhận thấy rằng ở dưới cùng của 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 1% phí xử lý khi chuyển tiền, BPool thực tế sẽ không nhận được bất kỳ STA nào. Điều này sẽ gây ra sự không khớp giữa số dư STA thực tế của BPool và sổ sách kế toán nội bộ.
Cuối cùng, như thể hiện trong hình trên, kẻ tấn công đã hoàn trả 104.331 WETH đã vay từ khoản vay nhanh.
gợi ý
tiêu đề phụ
gợi ý
Tất nhiên, các biện pháp khắc phục sau bất kỳ sự cố bảo mật nào cũng không thể bù đắp được những thiệt hại đã xảy ra, chúng tôi cho rằng giải pháp tốt nhất là phòng ngừa trước. Các nhà phát triển dự án DeFi nên tận dụng các thông số kỹ thuật mã tốt càng nhiều càng tốt và có thể tìm kiếm sự hỗ trợ của các công ty bảo mật bên thứ ba để tiến hành các thử nghiệm tấn công và phòng thủ toàn diện trước khi đưa lên mạng để tìm ra tất cả các lỗ hổng tiềm ẩn càng nhiều càng tốt. Cuối cùng, càng nhiều càng tốt, hãy thực hiện một cuộc điều tra kỹ lưỡng về bất kỳ sự kết hợp nào giữa ERC20, ERC777 và các dự án DeFi khác.
Theo sát
tiêu đề phụ
Theo sát
