Cardano và sự cố mạng
Ngày 19 tháng 04 năm 2023
Vào ngày 23 tháng 1 năm 2023, blockchain Cardano đã trải qua lần thử nghiệm thực tế đầu tiên về khả năng phục hồi quy mô lớn. Với khoảng gần 60% tất cả các node Cardano bị lỗi và phải khởi động lại. Tôi được yêu cầu viết một bài đăng trên blog cung cấp phân tích hậu kỳ tập trung vào cộng đồng về vụ việc, phản hồi nhanh chóng từ IOG và cộng đồng cũng như sự mạnh mẽ của mạng Cardano.
Sự cố xảy ra như thế nào?
Vào ngày 23 tháng 1 năm 2023, lúc 7:09:01 PM EST, mạng Cardano phải đối mặt với một thách thức bất ngờ khi một số lượng đáng kể các node bị sập và khởi động lại. Sự cố đã được thành viên cộng đồng Smaug báo cáo ngay trên GitHub, có thể tìm thấy tại đây. Bạn có thể tìm thấy báo cáo sự cố chính thức của IOG, được phát hành hôm nay, tại đây.
Phản ứng nhanh
Để đối phó với vấn đề được báo cáo, IOG đã nhanh chóng thành lập một nhóm "đặc nhiệm", tập hợp các thành viên từ cộng đồng, bao gồm cả tôi, để xác định nguyên nhân của sự cố và phát triển giải pháp. Lực lượng "đặc nhiệm" đã quản lý để xác định các ứng cử viên có khả năng gây ra sự cố và đưa ra bản sửa lỗi cho các node tạo khối để phát hành trong vòng một tuần.
Theo chính sách tiết lộ có trách nhiệm, để giảm thiểu rủi ro bị tấn công trong khi các nhà sản xuất khối đang nâng cấp, các chi tiết chính xác được giữ kín trong nội bộ. Gần đây, chi tiết về bản sửa lỗi đã được xuất bản có thể tìm thấy tại đây.
Một mạng tự phục hồi
Một trong những điểm chính cần nhấn mạnh là khả năng tự phục hồi của mạng Cardano. Mặc dù có một số lượng đáng kể các node bị sập, nhưng mạng đã có thể khôi phục trong vòng vài phút, theo đúng như những gì đã được thiết kế. Sự phục hồi nhanh chóng này cho thấy sự mạnh mẽ của blockchain Cardano và khả năng xử lý các thách thức bất ngờ của nó.
Tái tạo sự cố và xác nhận sửa chữa
Các kỹ sư trong nhóm IOG Ledger đã xác định thành công nguyên nhân có thể gây ra lỗi. Lực lượng "đặc nhiệm" đóng vai trò hỗ trợ bằng cách động não đưa ra các ý tưởng và xác nhận các giả thuyết do các kỹ sư trình bày. Tận dụng QuickCheck, một khung thử nghiệm dựa trên thuộc tính, các thử nghiệm đơn vị (Unit test) đã được tạo để tái tạo sự cố ở quy mô nhỏ. Quá trình này cho phép xác thực bản sửa lỗi được đề xuất trong một môi trường được kiểm soát. Mặc dù chúng tôi đã thành công trong việc giải quyết vấn đề bằng QuickCheck, nhưng chúng tôi đã gặp phải những thách thức khi cố gắng tái tạo lỗi trên một mạng thử nghiệm hoàn toàn riêng tư. Mặc dù điều này hạn chế khả năng xác nhận bản sửa lỗi trên quy mô lớn hơn của chúng tôi, nhưng nhóm vẫn tự tin rằng nguyên nhân cốt lõi của sự cố đã được giải quyết và bản sửa lỗi sẽ ngăn chặn các sự cố tương tự trong tương lai.
Tiết lộ trách nhiệm
IOG đã đợi một khoảng thời gian thích hợp trước khi công bố chi tiết về bản sửa lỗi, cùng với bài đăng trên blog này để tuân thủ các thông lệ công bố thông tin có trách nhiệm. Quyết định này được đưa ra để giảm thiểu nguy cơ các tác nhân độc hại có thể tái tạo lỗi và gây ra sự cố lặp đi lặp lại, đảm bảo sự an toàn và ổn định của mạng Cardano.
Chi tiết kỹ thuật
Nguyên nhân gốc rễ của lỗ hổng bảo mật có thể bắt nguồn từ việc các bất biến bị vi phạm trong Data.Map
, xảy ra do việc triển khai Máp bán tùy chỉnh có tên là “CanonicalMap” để theo dõi dữ liệu MultiAsset. Chức năng chèn tùy chỉnh trong CanonicalMap có thể dẫn đến cấu trúc cây không cân bằng và do đó, làm hỏng các node.
Để kích hoạt lỗi hiếm gặp này, một chuỗi sự kiện cụ thể cần xảy ra:
- Một chuỗi các giao dịch đã tạo ra trạng thái bên trong phù hợp trong UTXO để chuẩn bị cho hệ thống về lỗ hổng bảo mật.
- Một node đã khởi động lại, đặt lại UTXO của nó thành một cấu trúc bên trong khác.
- Node đã nhận được một giao dịch vào mempool của nó, tiêu thụ UTXO với một số ID chính sách hoặc token gốc khác nhau. Giao dịch này không gây ra sự cố trên node mà nó được gửi tới nhưng đã gây ra sự cố trên các node khác có cấu trúc bên trong “nguy hiểm”.
- Giao dịch được lan truyền đến các mempool của các node khác mà không gây ra sự cố ngay lập tức.
- Node đã đúc một khối chứa giao dịch và truyền nó tới cácnode khác.
- Khi khối đến các node khác, chúng đã gặp sự cố khi chúng cố gắng chấp nhận khối.
Lỗi này rất khó tái tạo do sự tương tác phức tạp của các yếu tố và chuỗi sự kiện chính xác được yêu cầu. Điều đáng chú ý là lỗi hiếm gặp này được phát hiện tương đối sớm trong lịch sử của nhiều loại tài sản và tiền lãi tài sản thế chấp, xét đến tập hợp các điều kiện duy nhất cần thiết để nó xảy ra.
cardano-slurp
Một điều rút ra từ sự cố này là một dự án cá nhân của tôi, cardano-slurp. Một phần nguyên nhân khiến sự cố này khó xử lý là do bất kỳ node nào nhìn thấy dữ liệu gây ra sự cố … đã bị hỏng. Cardano-slurp là một chương trình hoạt động giống như một node cardano đối với mạng, trao đôei về các khối và giao dịch, nhưng chỉ lưu trữ chúng mà không xử lý chúng theo bất kỳ cách nào. Điều này sẽ cho phép chúng tôi nắm bắt bất kỳ chất thải độc hại nào trong tương lai, cũng như viết các phân tích thú vị về các mẫu lưu lượng truy cập mạng trong thế giới thực.
Kết luận
Điều quan trọng cần biểu dương là phản ứng nhanh chóng từ IOG và cộng đồng, cũng như khả năng tự phục hồi của mạng. Những nỗ lực của lực lượng "đặc nhiệm" đã dẫn đến việc khắc phục kịp thời và vụ việc như một lời nhắc nhở về tầm quan trọng của sự hợp tác và giao tiếp minh bạch trong thế giới công nghệ blockchain.
Nguồn bài viết tại đây
Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới