Dòng thời gian và phản ánh của vụ hack Vyper

“Trust but verify” (tin tưởng nhưng phải xác minh), không làm “after the fact”. Lỗi nghiêm trọng nhất là màu đen dưới ánh đèn.

Do tính bất biến của hợp đồng, dự án sẽ hoàn toàn dựa vào mã được viết từ nhiều năm trước, khi sửa lỗi, chúng ta cần chú ý nhiều hơn đến tác động tiềm tàng của nó.

Lần này nó xảy ra như thế này.

mốc thời gian

Trong bài viết này, tôi sẽ sử dụng "chúng tôi" để chỉ tất cả những người đã làm việc chăm chỉ cho sự kiện này. Tôi cảm thấy rằng mặc dù ban đầu tôi đã đóng góp một chút vào việc tìm ra lỗi, nhưng vô số người đã giúp đỡ rất nhiều trong suốt quá trình.

13:10 UTC pETH/ETH $11 triệu [1] làm khô hạn.

13:19 UTC Michal đăng trên ETHSecurity về việc giá pETH giảm đột ngột.

Igor là người đầu tiên nhận thấy có gì đó không ổn. Nhờ anh ấy, chúng tôi bắt đầu điều tra thêm.

Nhưng làm cách nào để robot nhập lại hàm add_liquidity() trong lệnh gọi remove_liquidity()?

14:01 UTC Thành lập một nhóm dự phòng về vấn đề này.

14:07 UTC Chúng tôi sử dụng trình dịch ngược yêu thích của mình [2] Dịch ngược hợp đồng JPEGd và nhận thấy rằng các khe bảo vệ vào lại hơi khác một chút.

// Gửi mục nhập bảng cho add_liquidity(uint256 [2] ,uint256) nhãn_0057: nếu (lưu trữ [0x00] ) { revert(bộ nhớ[0x00:0x00]); } kho [0x00] = 0x01; // Gửi mục nhập bảng cho remove_liquidity(uint256,uint256 [2] ) nhãn_1AF3: nếu (lưu trữ [0x02] ) { revert(bộ nhớ[0x00:0x00]); } kho [0x02] = 0x01;

14:27 UTC Chúng tôi đã xác nhận vấn đề này bằng một hợp đồng thử nghiệm đơn giản tại địa phương.

@bên ngoài @nonreentrant("khóa") kiểm tra def(addr: address) -> bool: trả về Đúng @bên ngoài @nonreentrant("khóa") def test2(addr: address) -> bool: trả về Sai

Đây không chỉ là một lỗi reentrancy khác.

Tại thời điểm này, chúng tôi nhận ra mức độ ảnh hưởng của việc này. Chặn tin nhắn, chúng tôi đã xóa các tin nhắn công khai về lỗ hổng này.

14:37 UTC Wavey đã giúp xác định cam kết dễ bị tấn công và phiên bản bị ảnh hưởng. Charles và tôi cũng đã xác nhận điều này bằng cách kiểm tra thủ công đầu ra của trình biên dịch Vyper.

Đó là một cuộc chạy đua chống lại tin tặc.

Rất may, mọi người cũng nhầm lẫn nó với khả năng truy cập lại chỉ đọc. Trích từ kênh Web3 Security Alert - Alchemix và Metronome DAO cũng bị hack do lỗi read-only reentrancy [3]

Michael cũng tìm thấy các lỗ hổng tiềm ẩn trong nhóm alETH và msETH đang chạy phiên bản 0.2.15.

14:50 UTC msETH/ETH cạn kiệt [4] 。

15:34 UTC alETH/ETH đã cạn kiệt [5] 。

15:43 UTC Chúng tôi đã tìm thấy một lỗ hổng trong CRV/ETH được biên dịch bằng Vyper phiên bản 0.3.0 [6] . Điều quan trọng là chúng tôi giữ bí mật các hợp đồng bị ảnh hưởng càng lâu càng tốt.

16:11 UTC Chúng tôi bắt đầu nghiên cứu các lỗ hổng mũ trắng.

Thật không may, có quá nhiều tổ chức đang tiến hành nghiên cứu độc lập cùng một lúc và có rất nhiều tin đồn. Vào lúc 16:44 UTC, chúng tôi quyết định đưa ra tuyên bố công khai về phiên bản bị ảnh hưởng [7] 。

Đến 18:32 UTC, chúng tôi đã có một khai thác bằng chứng về khái niệm có thể được sử dụng cho một cuộc giải cứu mũ trắng tiềm năng. Chainlight's bpak cũng đang xử lý một lỗ hổng cùng lúc và chia sẻ nó lúc 19:06 UTC.

Năm phút sau, lúc 19:11 UTC, ai đó đã đánh cắp tiền [8] 。

Cấu trúc tấn công rất khác so với bằng chứng về khái niệm của chúng tôi và không có khả năng bị rò rỉ từ nhóm của chúng tôi. Dù sao, nó rất bực bội.

Tuy nhiên, có rất nhiều việc phải làm.

21:26 UTC Addison đã đưa ra một kế hoạch đầy tham vọng để cứu các tài sản còn lại trong nhóm CRVETH.

Nếu bạn gửi 30 nghìn crv vào nhóm crv/eth, Bạn có thể cập nhật phí quản trị sau đó đặt tỷ lệ crv/eth khoảng 0,15 eth cho mỗi crv Về cơ bản, tất cả hàng trăm K crv trong nhóm có thể được trích xuất

21:52 UTC bpak đã tạo ra một bằng chứng về khái niệm hoạt động có thể tiết kiệm được 3100 ETH.

Mười phút sau, lúc 22:02 UTC, chúng tôi lại bị đánh bại. Bất ngờ khi CRV quản lý chi phí bằng robot [9] Tiền đã được sử dụng và hồ bơi đã cạn kiệt [10] 。

đổ tội

đổ lỗi (Balme) là một từ mạnh. Chỉ ngón tay là vô ích. Tôi nghĩ thật hữu ích khi nghĩ về những gì có thể được thực hiện tốt hơn.

Cuộc thi

Những nỗ lực của Mũ Trắng đều bị đánh bại trong vòng chưa đầy nửa giờ. Đôi khi, mỗi giây đều có giá trị.

Có lẽ những cuộc tấn công này có thể đã được thực hiện với sự chuẩn bị và nguồn lực tốt hơn. Đồng thời, đây dường như là một con dao hai lưỡi. Tổng hợp thông tin về cách thực hiện hack có thực sự là một ý tưởng hay không? Chúng ta nên tin ai?

Mặt khác, tôi nghĩ rằng toàn bộ quá trình là rất hiệu quả. Chúng tôi đã đi từ nghi ngờ ban đầu đến xác nhận ai là người dễ bị tấn công trong 2 giờ 4 phút.

Công bố thông tin

Tôi vừa là kiểm toán viên vừa là hacker mũ trắng.

Ngành kiểm toán có một nền văn hóa xuất bản độc đáo. Chúng tôi được trả tiền cho khả năng lãnh đạo tư duy kỹ thuật và hiểu biết sâu sắc về các lỗ hổng. Một cách để chứng tỏ khả năng lãnh đạo và sự uyên thâm của họ là xuất bản [11] "Tin sốt dẻo" về hack. Các nhà nghiên cứu rất tốn kém, và lợi tức đầu tư là sự công khai.

Mặt khác, có một lập luận thuyết phục rằng việc tiết lộ sớm một phiên bản bị ảnh hưởng sẽ có tác động đáng kể đến giải cứu mũ trắng.

Nếu kéo dài thêm nửa giờ, 18 triệu đô la có thể đã được tiết kiệm.

Kiểm toán viên không trả tiền cho tác động của các báo cáo của họ. Thay vào đó, họ nhận được lượt thích, lượt tweet lại và mức độ phù hợp. Đây dường như là một vấn đề.

Bước tiếp theo

Tôi không đồng ý với "chúng tôi cần xác minh chính thức để giải quyết vấn đề này" và những thứ tương tự. Lỗi này có thể được phát hiện bằng thử nghiệm đơn vị. Xác minh chính thức rất hữu ích đối với nhiều loại lỗi, nhưng tôi không tin rằng nó hữu ích như nhau đối với các trình biên dịch tương đối đơn giản, không tối ưu hóa.

Lưu ý rằng lỗi này đã được sửa vào tháng 11 năm 2021 [12] 。

Tôi nghĩ rằng lỗ hổng Vyper này không phải là vấn đề với chính công nghệ hoặc ngôn ngữ của nhóm Vyper, mà là vấn đề về quy trình. Lỗi này đã được sửa từ lâu mà không nhận ra tác động tiềm ẩn của nó tại thời điểm sửa.

Đáng tiếc là hàng công rất dễ bị xem nhẹ. Do tính bất biến của hợp đồng, các dự án hoàn toàn dựa vào mã được viết từ nhiều năm trước. Các nhà phát triển giao thức và chuyên gia bảo mật nên biết về các phát triển bảo mật mới nhất trong ngăn xếp thực thi.

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)