Lật ngược thế cờ: Tình hình của Ethereum
Nguồn | Blog Ethereum
Nguồn | Blog Ethereum
Mục đích của bài đăng trên blog này là chính thức phơi bày một vấn đề nghiêm trọng và rõ ràng với nền tảng Ethereum trước hard fork Berlin.
Mục đích của bài đăng trên blog này là chính thức phơi bày một vấn đề nghiêm trọng và rõ ràng với nền tảng Ethereum trước hard fork Berlin.
tiêu đề phụ
tình trạng
Hãy bắt đầu với nền tảng của Ethereum và "trạng thái" của nó.
Trạng thái của Ethereum bao gồm một trie patricia-merkle, một loại cây tiền tố. Bài viết này sẽ không đi sâu vào chi tiết kỹ thuật, đơn giản là khi trạng thái phát triển, cành cây sẽ ngày càng rậm rạp hơn. Mỗi tài khoản tham gia là một lá mới. Giữa các rễ của cây và giữa các lá có một số lượng lớn các nút "trung gian".
Để tìm một tài khoản cụ thể hoặc một "chiếc lá" trong cây khổng lồ này, từ gốc của cây và thông qua các nút trung gian, cần phải giải quyết 6-9 hàm băm để cuối cùng băm dữ liệu mà chúng ta đang tìm kiếm. .
Nói tóm lại, đối với mỗi truy vấn tra cứu tài khoản, 8-9 thao tác phân tích cú pháp được thực hiện. Mỗi thao tác phân tích cú pháp là một truy vấn cơ sở dữ liệu và mỗi truy vấn cơ sở dữ liệu có thể là bất kỳ số lượng thao tác đĩa thực tế nào. Số lượng hoạt động của đĩa khó dự đoán, nhưng vì các khóa trie được băm bằng mật mã (chống va chạm), nên các khóa là "ngẫu nhiên", đây là trường hợp xấu nhất đối với bất kỳ cơ sở dữ liệu nào.
Khi Ethereum đã phát triển, luôn cần phải tăng chi phí gas cho các hoạt động truy cập cây. Vào tháng 10 năm 2016, sau khi trải qua thời gian "Cuộc tấn công Thượng Hải", mạng Ethereum đã trải qua một đợt hard fork Tangerine Whistle ở độ cao khối 2.463.000, bao gồm EIP 150, làm tăng đáng kể chi phí gas của một số hoạt động nhất định và đưa ra một số lượng lớn Thay đổi để bảo vệ chống lại các cuộc tấn công DoS.
Một đợt tăng phí gas khác là trong đợt nâng cấp Istanbul vào tháng 12 năm 2019, đã kích hoạt EIP 1884.
EIP-1884 giới thiệu những thay đổi sau đối với phí gas:
➤SLOAD tăng từ 200 lên 800 gas
➤EXTCODEHASH tăng từ 400 lên 700 gas
tiêu đề phụ
các vấn đề
Vào tháng 3 năm 2019, Martin Swende đã thực hiện một số phép đo hiệu suất opcode EVM. EIP-1884 sau đó dựa trên cuộc điều tra này. Broken Meter đã xuất bản bài báo này (2019/9) vài tháng trước khi EIP-1884 được kích hoạt.
Hai nhà nghiên cứu bảo mật ethereum, Hubert Ritzdorf và Matthias Egli, và một trong những tác giả của bài báo, Daniel Perez, đã "vũ khí hóa" một lỗ hổng và gửi nó cho chương trình tiền thưởng lỗi của ethereum. Đây là vào ngày 4 tháng 10 năm 2019.
Mọi người nên đọc toàn bộ tài liệu mà họ đã gửi, tài liệu này rất chi tiết.
Cùng ngày, các nhà phát triển từ Geth, Parity và Aleth đã biết về tài liệu này trong một kênh dành riêng cho bảo mật giữa các máy khách.
Bản chất của lỗ hổng này là kích hoạt truy vấn thử ngẫu nhiên. Đây là một ví dụ đơn giản:
Trong báo cáo của họ, các nhà nghiên cứu đã sử dụng eth_call để thực thi tải trọng này trên các nút đã đồng bộ hóa mạng chính. Sau đây là dữ liệu trong quá trình thực thi của họ, tiêu tốn 10 triệu gas:
Parity: ~90s
Geth: ~70s
➤ EXTCODEHASH (400 gas) tiêu thụ 10 triệu gas
Parity : ~50s
Geth : ~38s
➤ EXTCODEHASH (700 gas) tiêu thụ 10 triệu gas
Rõ ràng, những thay đổi trong EIP-1884 đã giúp giảm tác động của cuộc tấn công này, nhưng vẫn chưa đủ.
Nó đang đến gần hội nghị nhà phát triển ở Osaka. Tại hội nghị nhà phát triển, thông tin về vấn đề này đã được chia sẻ với các nhà phát triển khách hàng trên mạng chính. Chúng tôi cũng đã gặp Hubert, Mathias và Greg Markou (từ Chainsafe, người cũng đang thực hiện một số công việc ETC vào thời điểm đó). Các nhà phát triển của ETC cũng nhận được báo cáo này.
Khi năm 2019 sắp kết thúc, chúng tôi biết rằng vấn đề còn tồi tệ hơn so với dự đoán trước đó, với các giao dịch độc hại có khả năng đẩy thời gian khối vào phạm vi phút. Tệ hơn nữa, cộng đồng nhà phát triển không hài lòng với EIP-1884, vì EIP-1884 đã phá vỡ một số quy trình hợp đồng và người dùng cũng như thợ mỏ rất mong muốn tăng giới hạn gas của khối.
tiêu đề phụ
giải pháp
giải pháp
Cách thứ hai là giải quyết nó thông qua công nghệ phần mềm, sửa đổi mô hình và cấu trúc dữ liệu trong máy khách.
tiêu đề phụ
Công việc của tầng giao thức
Bản phát hành đầu tiên về cách đối phó với các kiểu tấn công này có tại đây. Vào tháng 2 năm 2020, nó được phát hành chính thức với tên EIP 2583. Ý tưởng là áp đặt một hình phạt bất cứ khi nào tra cứu trie dẫn đến bỏ lỡ.
Tuy nhiên, Peter đã tìm ra một biện pháp đối phó, một cuộc tấn công "tiếp sức có khiên", giúp hạn chế hiệu quả giới hạn trên của hình phạt này (khoảng 800).
Vấn đề với việc xử phạt các truy vấn bỏ lỡ là trước tiên cần phải tra cứu để xác định xem có nên áp dụng hình phạt hay không. Nhưng nếu khí còn lại không đủ để trả tiền phạt, việc tiêu thụ chưa thanh toán đã được thực hiện. Ngay cả khi nó gây ra một ngoại lệ bị ném, thì vẫn có thể gói các lần đọc trạng thái này vào các cuộc gọi lồng nhau, cho phép người gọi bên ngoài tiếp tục cuộc tấn công lặp lại mà không phải trả tiền phạt (đầy đủ).
Vì lý do này, EIP này đã bị hủy bỏ và chúng tôi đang tìm kiếm các giải pháp thay thế tốt hơn.
➤ Alexey Akhunov đề xuất khái niệm về Dầu mỏ, nguồn thứ hai của khí đốt, nhưng về bản chất nó không giống với khí đốt vì nó vô hình đối với tầng thực thi và có thể khiến giao dịch bị lùi lại trên toàn cầu.
➤ Martin cũng là tác giả của một đề xuất tương tự vào tháng 5 năm 2020 (Gas And Karma)
Trong khi lặp lại các cơ chế khác nhau này, Vitalik Buterin đã đề xuất trực tiếp tăng chi phí gas và giữ danh sách truy cập. Vào tháng 8 năm 2020, Martin và Vitalik bắt đầu tinh chỉnh EIP-2929 và EIP-2930 đồng hành của nó.
EIP-2929 giải quyết hiệu quả nhiều vấn đề trước đó.
➤ So với EIP-1884 làm tăng chi phí gas vô điều kiện, EIP-2929 chỉ làm tăng chi phí gas của phần không được thăm dò. Điều này dẫn đến chi phí ròng tăng ít hơn một điểm phần trăm.
➤ Với việc bổ sung EIP-2930, sẽ không có sự gián đoạn nào đối với bất kỳ quy trình hợp đồng nào
Vào ngày 15 tháng 4 năm 2021, cả hai EIP đã được kích hoạt trong bản nâng cấp Berlin.
tiêu đề phụ
Công tác phát triển
Giải pháp mà Peter đề xuất vào tháng 10 năm 2019 là "ảnh chụp nhanh trạng thái động".
Ảnh chụp nhanh là cấu trúc dữ liệu phụ trợ được sử dụng để lưu trữ trạng thái Ethereum ở định dạng phẳng, có thể được xây dựng hoàn toàn trực tuyến trong quá trình hoạt động trực tiếp của nút Geth. Lợi ích của ảnh chụp nhanh là chúng hoạt động như các cấu trúc được tăng tốc để truy cập trạng thái:
➤ Thay vì đọc đĩa O(log N) (x chi phí LevelDB) để truy cập tài khoản hoặc khe lưu trữ, ảnh chụp nhanh có thể cung cấp thời gian truy cập O(1) trực tiếp (x chi phí LevelDB).
➤ Ảnh chụp nhanh hỗ trợ lặp qua tài khoản và lưu trữ với độ phức tạp O(1) cho mỗi mục nhập, cho phép các nút từ xa truy xuất dữ liệu trạng thái tuần tự rẻ hơn nhiều so với trước đây.
➤ Ảnh chụp nhanh cũng cho phép các trường hợp sử dụng kỳ lạ hơn, chẳng hạn như cắt tỉa trạng thái Thử ngoại tuyến hoặc di chuyển sang các định dạng dữ liệu khác.
Nhược điểm của ảnh chụp nhanh là tài khoản gốc và dữ liệu lưu trữ được sao chép một cách hiệu quả. Đối với mạng chính, điều này có nghĩa là có thêm 25 GB dung lượng SSD.
Khái niệm ảnh chụp nhanh động đã được bắt đầu từ giữa năm 2019 và mục đích ban đầu chủ yếu là để thúc đẩy việc thực hiện đồng bộ hóa ảnh chụp nhanh. Vào thời điểm đó, nhóm Geth đang bận rộn với nhiều "dự án lớn".
➤ Cắt ngoại tuyến
➤ Ảnh chụp nhanh động + đồng bộ hóa ảnh chụp nhanh
➤ Thực hiện phân phối trạng thái LES (Giao thức con Ethereum nhẹ) thông qua trạng thái sharding
tiêu đề phụ
tóm tắt
tóm tắt
Vào tháng 3 đến tháng 4 năm 2021, giao thức snap/1 đã được triển khai trong ứng dụng khách geth, cho phép đồng bộ hóa thông qua thuật toán dựa trên ảnh chụp nhanh mới. Mặc dù vẫn không phải là chế độ đồng bộ hóa mặc định, đây là một bước quan trọng trong việc tạo ảnh chụp nhanh không chỉ hữu ích như một biện pháp phòng thủ tấn công mà còn là một tối ưu hóa quan trọng cho người dùng.
Về mặt thỏa thuận, việc nâng cấp Berlin sẽ hoàn thành vào tháng 4/2021.
Dưới đây là một số điểm chuẩn được phát triển trong môi trường giám sát AWS của chúng tôi:
➤ Trước khi nâng cấp Berlin, không có snapshot, 25M gas: 14,3 giây
➤ Trước khi nâng cấp Berlin có 1 bản snapshot, 25M gas: 1.5s
➤ Sau khi nâng cấp Berlin, không có ảnh chụp nhanh, 25M gas: ~3,1 giây
➤ Sau khi nâng cấp Berlin, với ảnh chụp nhanh, 25M gas: ~0,3 giây
Các số liệu sơ bộ cho thấy bản nâng cấp Perlin có thể giảm hiệu quả của cuộc tấn công xuống 5 lần và ảnh chụp nhanh xuống 10 lần, để giảm tổng tác động xuống 50 lần.
Chúng tôi ước tính rằng hiện tại trên mạng chính (15M gas), đối với một nút geth không sử dụng ảnh chụp nhanh, có thể tạo một khối với thời gian thực hiện là 2,5-3 giây. Đối với các nút không có ảnh chụp nhanh, con số này tiếp tục trở nên tồi tệ hơn khi trạng thái phát triển.
Về tính khả thi của việc thực hiện cuộc tấn công này, chi phí để kẻ tấn công mua toàn bộ khối là khoảng vài ETH (15M gas là 1,5 ETH cho 100 Gwei).
tiêu đề phụ
Tại sao công bố nó bây giờ?
Trên thực tế, rủi ro này luôn là một "bí mật mở", đã vô tình được tiết lộ công khai hơn một lần và đã được đề cập nhiều lần trong các cuộc họp của nhà phát triển cốt lõi, nhưng không đề cập chi tiết.
Giờ đây, việc nâng cấp berlin đã được triển khai và các nút của geth cũng đang sử dụng đồng bộ hóa ảnh chụp nhanh theo mặc định, chúng tôi ước tính rằng mối đe dọa hiện ở mức rất thấp và đã đến lúc tiết lộ đầy đủ những gì đang diễn ra đằng sau hậu trường.
Bài viết này được viết bởi Martin Holst Swende và Peter Szilagyi vào ngày 23-04-2021. Nó sẽ được chia sẻ với các dự án dựa trên Ethereum vào ngày 26-04-2021 và phát hành công khai vào ngày 18-05-2021.
Liên kết gốc:https://blog.ethereum.org/2021/05/18/eth_state_problems/


