GhienCoin.comGhiền Coin
Ethereum và hợp đồng thông minh

Khi hợp đồng thông minh có lỗi: những bài học đắt giá

Hợp đồng thông minh chạy đúng từng chữ mã nguồn, nên một lỗi nhỏ cũng có thể bị khai thác để rút tài sản mà không ai chặn được. Lịch sử Ethereum có những sự cố lớn đã buộc cộng đồng phải chọn giữa sửa lại lịch sử hay chấp nhận mất mát, và để lại bài học về kiểm toán mã, quyền nâng cấp và sự khiêm tốn.

🎙️
📑 Nội dung theo chương
  1. 0:31 Vì sao lỗi trên blockchain nguy hiểm hơn
  2. 1:16 Một kiểu lỗi kinh điển
  3. 1:55 Sự cố làm chuỗi tách đôi
  4. 2:38 Kiểm toán mã có bảo đảm gì không
  5. 3:17 Quyền nâng cấp, con dao hai lưỡi
  6. 3:53 Gói lại
  7. 4:26 Câu hỏi thường gặp
🔊 Bản audio (lồng nhạc nền)

Xin chào, đây là Ghiền Coin. Hợp đồng thông minh chạy đúng từng chữ của mã nguồn, không hơn không kém. Vì thế, một lỗi nhỏ mà người viết không lường trước có thể bị kẻ khác khai thác để rút tài sản, và mạng lưới sẽ thi hành việc đó một cách mẫn cán như mọi giao dịch hợp lệ khác. Không có người gác cổng nào đứng ra nói khoan đã, chỗ này có vấn đề.

Tập này kể về bản chất của lỗi hợp đồng thông minh, một sự cố lớn trong lịch sử Ethereum đã khiến chuỗi bị tách đôi, và những bài học mà người dùng bình thường nên mang theo.

Vì sao lỗi trên blockchain nguy hiểm hơn

Phần mềm nào cũng có lỗi. Ứng dụng trên điện thoại có lỗi thì công ty phát hành bản cập nhật, có khi hoàn tiền cho người bị ảnh hưởng. Ngân hàng có lỗi hệ thống thì có thể đóng băng giao dịch, đảo ngược sai sót.

Hợp đồng thông minh thì khác ở ba điểm. Thứ nhất, nó thường giữ tài sản thật, có khi rất lớn. Thứ hai, mã nguồn công khai, nên kẻ xấu đọc được và tìm lỗi thoải mái. Thứ ba, sau khi đưa lên, nhiều hợp đồng không sửa được, và giao dịch đã xác nhận thì không đảo ngược được.

Ba điểm này gộp lại tạo nên một môi trường mà người làm bảo mật hay ví như chiếc két sắt đặt giữa quảng trường, bản vẽ của két dán ngay bên cạnh, ai cũng có thể thử mở suốt ngày đêm.

Đó là lý do viết hợp đồng thông minh được coi là một trong những công việc lập trình đòi hỏi cẩn trọng cao nhất.

Một kiểu lỗi kinh điển

Một kiểu lỗi nổi tiếng được gọi là gọi lại lồng nhau, tiếng Anh là reentrancy. Hình dung một hợp đồng cho phép rút tiền, với thứ tự: chuyển tiền cho người rút trước, rồi mới cập nhật số dư.

Kẻ tấn công viết một hợp đồng riêng, để khi nhận tiền thì lập tức gọi lại lệnh rút một lần nữa. Vì số dư chưa kịp cập nhật, hợp đồng nạn nhân tưởng vẫn còn tiền và chuyển tiếp. Vòng lặp diễn ra nhiều lần trước khi số dư được trừ.

Lỗi này nghe như một chi tiết thứ tự nhỏ. Nhưng trên blockchain, chi tiết nhỏ đó đủ để rút sạch một quỹ chung.

Sau sự cố, cách viết an toàn được phổ biến rộng: luôn cập nhật trạng thái trước rồi mới chuyển tài sản. Nhưng mỗi năm vẫn có những kiểu lỗi mới được phát hiện.

Sự cố làm chuỗi tách đôi

Những năm đầu của Ethereum, có một dự án quỹ đầu tư tự quản trên blockchain, gom được lượng ether rất lớn từ cộng đồng. Một lỗi trong hợp đồng của quỹ đã bị khai thác, và một phần đáng kể số ether bị rút ra.

Cộng đồng Ethereum đứng trước lựa chọn khó: can thiệp để đảo ngược hậu quả bằng cách nâng cấp mạng lưới, hay tôn trọng nguyên tắc mã là luật và chấp nhận mất mát.

Phần lớn cộng đồng chọn can thiệp, và chuỗi chính tiếp tục với tên Ethereum. Một bộ phận không đồng ý, giữ nguyên lịch sử cũ và tiếp tục chuỗi đó dưới tên Ethereum Classic.

Sự kiện này trở thành ví dụ kinh điển về câu hỏi: blockchain có thật sự bất biến không, khi đa số cộng đồng có thể đồng ý thay đổi. Câu trả lời trung thực là bất biến về kỹ thuật, nhưng vẫn phụ thuộc đồng thuận của con người.

Kiểm toán mã có bảo đảm gì không

Sau những sự cố như vậy, nghề kiểm toán hợp đồng thông minh phát triển mạnh. Các nhóm chuyên gia đọc mã, chạy công cụ kiểm tra, tìm lỗi trước khi hợp đồng được đưa lên.

Kiểm toán giúp giảm rủi ro đáng kể, nhưng không loại bỏ được. Đã có nhiều hợp đồng qua kiểm toán vẫn bị khai thác, vì lỗi nằm ở chỗ người kiểm toán không nghĩ tới, hoặc vì hợp đồng được sửa sau kiểm toán.

Với người dùng bình thường, cụm từ đã được kiểm toán thường được dùng như lời quảng cáo. Hãy hiểu nó là đã có người xem qua, không phải là an toàn tuyệt đối.

Kẻ lừa đảo còn làm giả báo cáo kiểm toán, hoặc dẫn tên những đơn vị kiểm toán không có thật. Một lời bảo đảm an toàn quá chắc chắn luôn đáng nghi.

Quyền nâng cấp, con dao hai lưỡi

Để vá lỗi, nhiều dự án viết hợp đồng có thể nâng cấp, với một chìa khoá quản trị nằm trong tay nhóm phát triển hoặc một nhóm người ký chung.

Cách này giúp sửa lỗi nhanh, nhưng tạo ra điểm tập trung quyền lực. Nếu chìa khoá quản trị bị đánh cắp, hoặc người giữ chìa khoá có ý xấu, họ có thể thay luật để rút tài sản của mọi người.

Nhiều vụ mất tài sản lớn không phải do lỗi mã thuần tuý mà do chìa khoá quản trị bị lộ. Bảo mật hợp đồng thông minh vì thế không chỉ là bảo mật mã mà còn là bảo mật con người và quy trình.

Không có cách nào hoàn hảo. Chọn bất biến thì chịu lỗi vĩnh viễn, chọn nâng cấp được thì chịu rủi ro người giữ chìa khoá.

Gói lại

Hợp đồng thông minh làm đúng từng chữ mã, nên lỗi nhỏ cũng có thể bị khai thác để rút tài sản. Mã công khai, giao dịch không đảo ngược, làm cho lỗi nguy hiểm hơn phần mềm thường.

Một sự cố lớn từng khiến Ethereum tách thành hai chuỗi, cho thấy tính bất biến vẫn phụ thuộc đồng thuận con người.

Kiểm toán giảm rủi ro nhưng không loại bỏ, quyền nâng cấp vá được lỗi nhưng tạo ra điểm tập trung. Bài học cho người dùng: chữ an toàn tuyệt đối không tồn tại trong thế giới này.

Danh mục Ethereum đến đây là trọn. Danh mục sau, mình chuyển sang chủ đề quan trọng nhất với mọi người: ví và bảo mật.

Câu hỏi thường gặp

Vì sao lỗi hợp đồng thông minh khó sửa?

Vì nhiều hợp đồng không thể sửa sau khi đưa lên, và giao dịch đã xác nhận không đảo ngược được.

Ethereum Classic ra đời từ đâu?

Từ việc một bộ phận cộng đồng không đồng ý can thiệp sau một sự cố lớn, nên giữ nguyên lịch sử cũ và tiếp tục chuỗi đó.

Hợp đồng đã kiểm toán có an toàn tuyệt đối không?

Không. Kiểm toán giảm rủi ro nhưng đã có nhiều hợp đồng qua kiểm toán vẫn bị khai thác.

Reentrancy là gì?

Là kiểu lỗi khi hợp đồng chuyển tài sản trước rồi mới cập nhật số dư, cho phép kẻ tấn công gọi rút lặp lại nhiều lần.

Hợp đồng có thể nâng cấp thì tốt hay xấu?

Có cả hai mặt. Vá được lỗi nhưng người giữ chìa khoá quản trị có quyền rất lớn, và chìa khoá đó có thể bị lộ.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.