Các dự án Web3 nên xem xét thêm các quy trình bảo mật ở tất cả các giai đoạn của vòng đời phát triển.
Nhiều vụ hack đã xảy ra với các dự án Web3 lẽ ra có thể được ngăn chặn bằng cách tăng cường bảo mật cho các hợp đồng thông minh.
Thông thường, những kẻ tấn công tìm và khai thác các lỗ hổng trong toàn bộ chuỗi phát triển phần mềm—từ thiết kế đến triển khai, bảo trì và phát hành mã mới. Nếu có một quy trình phát triển hợp đồng thông minh và ứng phó rủi ro tiêu chuẩn, chúng tôi tin rằng các sự cố bảo mật sẽ giảm đi tương ứng.
Mục đích của bài đăng này là phác thảo các yếu tố bảo mật cốt lõi mà các nhà xây dựng, nhà phát triển và nhóm bảo mật Web3 phải xem xét khi thiết kế, phát triển và duy trì hệ thống hợp đồng thông minh. Khung sau đây thảo luận về tám yếu tố bảo mật cốt lõi nên được triển khai trong suốt vòng đời phát triển phần mềm—từ lập mô hình mối đe dọa đến chuẩn bị ứng phó khẩn cấp.
Trước khi hiểu về bảo vệ an ninh hợp đồng thông minh, cần phải hiểu giai đoạn phát triển của phần mềm. Phát triển phần mềm có thể được chia thành năm giai đoạn sau:
Thiết kế : Nhà phát triển mô tả chức năng cần thiết và hoạt động của hệ thống, bao gồm các điểm chuẩn quan trọng và các thuộc tính cố định.
Phát triển : Các nhà phát triển viết mã cho hệ thống.
Kiểm tra và đánh giá : Các nhà phát triển chạy tất cả các mô-đun trong môi trường thử nghiệm để đánh giá độ chính xác và ổn định của mã.
Triển khai : Nhà phát triển đưa hệ thống vào môi trường trực tiếp.
Bảo trì : Các nhà phát triển đánh giá và sửa đổi hệ thống để đảm bảo hệ thống hoạt động như dự kiến.
Với nền tảng của chu trình phát triển cơ bản này, giờ đây chúng ta có thể đi sâu vào các cân nhắc ảnh hưởng đến bảo mật hợp đồng thông minh ở mỗi bước. Sơ đồ dưới đây ánh xạ các yếu tố được xem xét đến các giai đoạn phát triển có liên quan. Cần lưu ý rằng một số bước trong liên kết có nhiều cân nhắc về bảo mật:
Như đã trình bày ở trên, vòng đời phát triển phần mềm không phải lúc nào cũng theo một đường thẳng. Trong thực tế, có thể có sự chồng chéo hoặc mở rộng sang các giai đoạn khác. Có thể cần lặp lại một số bước cho mỗi lần phát hành. Một số nhiệm vụ—chẳng hạn như kiểm tra và đánh giá bảo mật—có thể cần được thực hiện từ đầu đến cuối.
Vòng đời phần mềm và các cân nhắc bảo mật tương ứng được mô tả ở trên cung cấp thông tin cơ bản hữu ích để thúc đẩy tính bảo mật của hợp đồng thông minh, nhưng chúng tôi sẽ xem xét chúng chi tiết hơn bên dưới để có thể hiểu, áp dụng và chia sẻ những thực tiễn này. câu hỏi: Cái gì, Tại sao và Như thế nào.
Cân nhắc bảo mật hợp đồng thông minh trong giai đoạn thiết kế Xem xét mô hình hóa mối đe dọa và thiết kế bảo mật
Điều gì: Điều quan trọng là phải thực hiện các kế hoạch cụ thể để xác định và ưu tiên các mối đe dọa tiềm ẩn đối với hệ thống ngay từ đầu vòng đời phát triển - các nhà phát triển hợp đồng thông minh nên xác định tất cả các biện pháp kiểm soát bảo mật để kiểm tra, kiểm tra và giám sát tất cả các mối đe dọa. Tất cả các giả định về bảo mật, bao gồm cả mức độ phức tạp dự kiến và phương tiện tấn công, cần được xác định rõ ràng và khớp nối trong giai đoạn thiết kế.
Lý do: Mặc dù các nhà phát triển có xu hướng chỉ tập trung vào mục đích sử dụng hợp đồng hoặc giao thức thông minh, nhưng sự tập trung duy nhất này có thể khiến họ có những điểm mù mà kẻ tấn công có thể khai thác.
Làm thế nào: Thực hiện theo các phương pháp lập mô hình mối đe dọa đã biết. Nếu nhóm phát triển không có chuyên môn về bảo mật nội bộ, thì nhóm đó nên làm việc sớm với các chuyên gia tư vấn bảo mật trong giai đoạn thiết kế. Áp dụng tâm lý "kẻ tấn công" khi thiết kế hệ thống và cho rằng bất kỳ cá nhân, phần cứng hoặc dịch vụ nào cũng có thể bị tấn công.
Cân nhắc bảo mật trong giai đoạn phát triển Xem xét quản lý và kiểm soát truy cập
Cái gì: Thực hiện kiểm soát truy cập, giới hạn quyền của các tài khoản đặc quyền và hợp đồng thông minh gọi các chức năng đặc biệt để thực hiện các tác vụ quản trị (chẳng hạn như nâng cấp hợp đồng và đặt các tham số đặc biệt). Thực hiện theo "nguyên tắc đặc quyền tối thiểu": mỗi người tham gia chỉ nên có các đặc quyền truy cập tối thiểu cần thiết.
Lý do: Việc duy trì giao thức thông qua quá trình nâng cấp và quản trị cho phép các nhà phát triển cải thiện giao thức bằng cách thêm các tính năng mới, vá các vấn đề bảo mật và tối ưu hóa cho các điều kiện thay đổi. Điều này có thể cấu thành một vi phạm an ninh nghiêm trọng nếu khả năng nâng cấp không được kiểm soát đúng cách.
Cách thức: Xây dựng một ví đa chữ ký hoặc hợp đồng DAO sẽ làm cho các thay đổi đối với giao thức trở nên minh bạch và phải trải qua quá trình xem xét kỹ lưỡng cũng như khóa thời gian (ban hành bị trì hoãn có chủ ý và khả năng hủy bỏ) để đảm bảo chúng có thể được xác minh chính xác và đúng chỗ. tấn công quản trị. Đảm bảo các khóa đặc quyền được lưu trữ an toàn và có thể truy cập được trong ví tự lưu trữ hoặc dịch vụ ký quỹ an toàn.
Cân nhắc tích hợp các mẫu có thể tái sử dụng, đã thử và đúng
Điều gì: Tận dụng các tiêu chuẩn hợp đồng thông minh hiện có càng nhiều càng tốt (chẳng hạn như Hợp đồng OpenZeppelin) và đánh giá các vấn đề bảo mật có thể phát sinh trong các tích hợp mà bạn có thể cần với các giao thức hiện có.
Lý do: Việc sử dụng các tiêu chuẩn hiện có đã được thử nghiệm trong trận chiến, được cộng đồng xem xét kỹ lưỡng có thể giúp giảm thiểu rủi ro bảo mật một cách lâu dài. Đánh giá rủi ro của việc tích hợp giao thức giúp bạn thực hiện kiểm tra bảo mật để ngăn chặn các cuộc tấn công chống lại các thành phần bên ngoài, chẳng hạn như thao túng tiên tri.
Làm thế nào: Nhập các thư viện và giao diện hợp đồng đáng tin cậy đã trải qua kiểm toán bảo mật.Xét cho cùng, trọng tâm của Crypto và Web3 là nguồn mở, tái sử dụng và khả năng kết hợp. Đảm bảo ghi lại các phụ thuộc hợp đồng của bạn và các phiên bản của chúng trong cơ sở mã của bạn và giảm thiểu dấu vết tài nguyên của mã của bạn; ví dụ: nhập các mô-đun con cụ thể của các dự án lớn thay vì mọi thứ; biết mức độ tiếp xúc của bạn để bạn có thể giám sát cuộc tấn công; sử dụng giao diện chính thức để gọi bên ngoài các giao thức và đảm bảo xem xét các rủi ro tích hợp tiềm ẩn; theo dõi các bản cập nhật và tiết lộ thông tin bảo mật của các hợp đồng được sử dụng lại của bạn.
Cân nhắc bảo mật cho các giai đoạn thử nghiệm và xem xét Xem xét thử nghiệm và tài liệu dự án
Cái gì: Tạo tài liệu mã rõ ràng, toàn diện và thiết lập bộ kiểm tra nhanh chóng, toàn diện, dễ chạy. Nếu có thể, hãy tiến hành các thử nghiệm chuyên sâu hơn trên mạng thử nghiệm hoặc trong môi trường thử nghiệm được thiết lập bằng mô phỏng mạng chính.
Lý do: Việc viết các giả định cho hành vi dự kiến không chỉ giúp đảm bảo giải quyết các rủi ro trong mô hình mối đe dọa mà còn giúp người dùng và kiểm toán viên bên ngoài hiểu được ý định của nhóm phát triển. Việc tạo các bộ kiểm tra mã có thể giúp chứng minh hoặc bác bỏ các giả định và khuyến khích suy nghĩ sâu hơn về các mô hình mối đe dọa. Bộ thử nghiệm này nên bao gồm các thử nghiệm thiết kế cơ học để kiểm tra tính kinh tế mã thông báo của dự án trong các tình huống thị trường khắc nghiệt, cũng như các thử nghiệm tích hợp và đơn vị.
Cách thức: Thử nghiệm với các khung thử nghiệm đã biết và các ứng dụng kiểm tra bảo mật - chẳng hạn như Hardhat, Mythril, Slither, Truffle, v.v.; cung cấp các kỹ thuật thử nghiệm khác nhau, chẳng hạn như làm mờ, kiểm tra thuộc tính và thậm chí xác minh chính thức (formal verify); ghi chép kỹ lưỡng tài liệu của bạn mã, sử dụng chú thích NatSpec để chỉ định các tác dụng phụ, tham số và giá trị trả về dự kiến. Tạo tài liệu trực tiếp bằng các công cụ tạo tài liệu và ghi chú thiết kế cấp cao.
Xem xét đánh giá nội bộ và kiểm toán bảo mật
Điều gì: Dành thời gian để tìm lỗi thông qua kiểm tra mã bên trong và bên ngoài.
Lý do: Việc chuyển từ phát triển tính năng sang các vấn đề bảo mật giúp nhà phát triển có thời gian khám phá các vấn đề bảo mật tiềm ẩn. Đánh giá bên ngoài có thể đặc biệt hữu ích trong vấn đề này, vì chúng có thể mang lại quan điểm và kiến thức chuyên môn bên ngoài mà nhóm phát triển không có.
Làm thế nào: Tại một thời điểm thích hợp trong quá trình phát triển dự án, hãy lên lịch đóng băng tính năng để có thời gian đánh giá nội bộ, sau đó là đánh giá bên ngoài. Những hành động này nên được thực hiện trước khi triển khai và nâng cấp trực tiếp, hãy xem hướng dẫn từ ConsenSys, Nascent, OpenZeppelin và Trail of Bits cung cấp cho nhà phát triển danh sách kiểm tra những điều cần xem xét -- bao gồm cả thời gian -- cho bất kỳ ai chuẩn bị kiểm tra . Ngoài ra, hãy đảm bảo xem xét các giao dịch triển khai để đảm bảo chúng sử dụng các phiên bản mã đã được kiểm tra và có các thông số phù hợp, đặc biệt là khi nâng cấp phần mềm.
Cân nhắc bảo mật trong các giai đoạn triển khai và bảo trì Xem xét khuyến khích sự tham gia của cộng đồng mũ trắng
Cái gì: Tạo một chương trình khuyến khích sự tham gia của cộng đồng vào các cải tiến bảo mật cho các cơ sở mã nguồn mở. Một cách tiếp cận là thiết lập tiền thưởng lỗi. Một cách tiếp cận khác là khuyến khích cộng đồng phát triển các giao thức để giám sát và phát hiện bot.
Lý do: Các nhóm phát triển có thể hưởng lợi từ kiến thức và kinh nghiệm rộng hơn (một lần nữa, mã nguồn mở cũng giúp ích cho Crypto). Đáng chú ý, các chương trình như vậy có thể giúp khơi dậy sự nhiệt tình của nhà phát triển đối với một dự án, về cơ bản biến cộng đồng và tin tặc mũ trắng thành những người truyền giáo. Họ cũng có thể giúp biến những kẻ tấn công tiềm năng thành những người bảo vệ bằng cách cung cấp cho tin tặc một cách để trở thành những người bảo vệ.
Cách thực hiện: Sử dụng nền tảng tiền thưởng lỗi (chẳng hạn như Code4rena, HackenProof, Immunefi hoặc Secureum) để cung cấp phần thưởng dựa trên mức độ nghiêm trọng cho hệ thống tiền thưởng nhằm khuyến khích các tin tặc lành nghề tiết lộ các lỗ hổng. (Tiết lộ: Một số đồng tác giả của bài báo này làm việc cho Forta, một mạng cung cấp cấu trúc khuyến khích mã thông báo để tạo các bot giám sát bảo mật chất lượng cao phi tập trung.) Các nhóm phát triển có thể khuyến khích các cộng đồng giao thức của họ tận dụng các phương pháp tiếp cận truyền thống và dựa trên Web3 Để khuyến khích việc tìm kiếm lỗi và cho phép người tham gia kiếm được phần thưởng tiềm năng để tăng cường bảo mật, tạo ra lợi ích cho tất cả mọi người.
Xem xét giám sát thời gian thực
Cái gì: Triển khai các hệ thống giám sát hợp đồng thông minh và các thành phần vận hành chính như oracle và cầu nối chuỗi chéo, đồng thời báo cáo hoạt động đáng ngờ cho nhóm phát triển và cộng đồng dựa trên các mô hình mối đe dọa đã biết.
Lý do: Việc phát hiện sớm các vấn đề cho phép các nhóm phản ứng nhanh với các lỗ hổng và lỗi, có khả năng ngăn ngừa hoặc giảm thiểu thiệt hại. Đây có vẻ là một ý tưởng dễ nghĩ đến, nhưng nó có thể bị bỏ qua trong quá trình lập kế hoạch.
Cách thực hiện: Sử dụng nền tảng giám sát hoặc nút phân tán để chạy rô-bốt giám sát các sự kiện hợp đồng thông minh trong thời gian thực. Xây dựng bảng điều khiển và thông báo cảnh báo cho các nhóm phát triển và cộng đồng rộng lớn hơn khi cần.
Xem xét các quy trình ứng phó sự cố
Cái gì: Tận dụng các công cụ và quy trình có thể phản hồi ngay lập tức với bất kỳ vấn đề bảo mật nào khi nó phát sinh.
Lý do: Ngay cả khi đã áp dụng các biện pháp bảo vệ tốt nhất trước khi triển khai, vẫn có thể xảy ra các sự cố tạm thời với hợp đồng thông minh và các thành phần chính như oracle và cầu nối chuỗi chéo. Có những người tận tâm, quy trình rõ ràng và tự động hóa tại chỗ đảm bảo rằng các sự cố có thể được điều tra nhanh chóng và giải quyết nhanh nhất có thể.
Làm thế nào: Chuẩn bị cho tình huống xấu nhất bằng cách lập kế hoạch cách ứng phó với sự cố hoặc trường hợp khẩn cấp và tự động hóa phản ứng đó ở mức độ lớn nhất có thể. Điều này bao gồm việc giao trách nhiệm điều tra và phản hồi cho các cá nhân có thẩm quyền, những người có thể liên hệ công khai với những người liên quan đến vấn đề bảo mật thông qua danh sách gửi thư bảo mật được phân phối, hướng dẫn trong kho mã hoặc đăng ký hợp đồng thông minh. Dựa trên mô hình mối đe dọa của thỏa thuận, hãy phát triển một quy trình có thể bao gồm các bài tập tình huống và thời gian phản hồi dự kiến cho hành động khẩn cấp. Cân nhắc tích hợp tự động hóa vào ứng phó sự cố: Ví dụ: một công cụ có thể nhận các sự kiện từ rô-bốt Forta và hành động theo các sự kiện đó.
Cân nhắc bảo mật nên là một phần không thể thiếu của sự phát triển thành công, không chỉ là một suy nghĩ sau.
Mặc dù khung trên cung cấp một số hướng dẫn nhanh cho các nhóm xây dựng giao thức và ứng dụng Web3 để cải thiện bảo mật trong suốt quá trình phát triển, nhưng tổng quan ngắn gọn là không đủ để cung cấp một cuộc thảo luận toàn diện về tất cả các khía cạnh của bảo mật hợp đồng thông minh. Các nhóm thiếu kiến thức chuyên môn về bảo mật nội bộ nên liên hệ với các chuyên gia bảo mật Web3 có trình độ, những người có thể giúp các nhóm áp dụng hướng dẫn chung ở trên vào tình huống cụ thể của họ. Nhưng quan trọng nhất, hãy nhớ rằng bảo mật không chỉ đơn giản là đánh dấu vào danh sách kiểm tra để quản lý các vấn đề phức tạp, nó luôn là một tập hợp các hoạt động liên tục, không bao giờ kết thúc. Chúng tôi vẫn đang ở giai đoạn đầu thiết lập các thực tiễn này, vì vậy, bây giờ là lúc để cộng tác tạo và chia sẻ các thực tiễn bảo mật cho tất cả các nhà phát triển.