Thử nghiệm và Xác minh Chính thức cho Bảo mật Hợp đồng Thông minh Web3

Thử nghiệm và Xác minh Chính thức cho Bảo mật Hợp đồng Thông minh Web3

Kiểm tra và xác minh chính thức về bảo mật hợp đồng thông minh Web3 Thông minh dữ liệu PlatoBlockchain. Tìm kiếm dọc. Ái.

Thơi gian đọc: 9 phút

Hãy tưởng tượng đi nhảy dù. Trước khi nhảy khỏi máy bay, bạn sẽ kiểm tra chiếc dù của mình hàng trăm lần, phải không? Kiểm tra và thử nghiệm là một phần không thể thiếu của bảo mật; nghĩ về bất kỳ điều gì liên quan đến bảo mật. Sau này có thể sẽ có cơ chế kiểm tra, cho dù là lắp camera quan sát hay kiểm tra mực bút trước khi thi viết ở trường, chúng tôi đều tuân thủ các biện pháp an toàn. Rủi ro liên quan càng cao, chúng tôi càng kiểm tra mọi thứ nhiều hơn. Và khi chúng ta nói về hợp đồng thông minh, rủi ro là RẤT LỚN. Bạn không thể bất cẩn khi nói đến bảo mật hợp đồng thông minh.

1. Bảo mật luôn cần thiết.

Bạn chắc chắn có thể khóa cửa hai lần hoặc ba lần không thành vấn đề. Bạn có thể chắc chắn rằng ngôi nhà của bạn không thể bị cướp khi bạn đi vắng? Bạn không thể vì bạn không biết tên cướp có thể làm gì để đột nhập vào nhà—điều này cũng đúng với mọi biện pháp an toàn mà chúng ta áp dụng. Không có phương pháp hoàn toàn an toàn sẽ đảm bảo an toàn. Tuy nhiên, hành động chúng ta thực hiện nhanh chóng sẽ làm tăng cơ hội được an toàn, đó là ý nghĩa của trò chơi. Chúng tôi muốn tăng tỷ lệ an toàn bằng cách sử dụng các biện pháp khác nhau.

Thế giới của Web3 không khác biệt. Không có phương pháp an toàn nào để tự cứu mình, nhưng việc có các kiểm toán viên giàu kinh nghiệm từ QuillAudits có thể tăng đáng kể khả năng giao thức của bạn được bảo mật và sẽ đảm bảo tính bảo mật cập nhật của bạn. Trong web3, có hai cơ chế quan trọng giúp bạn hiểu mức độ an toàn của mình bằng cách thực hiện một số thử nghiệm trên giao thức của bạn: -

  1. Thử nghiệm hợp đồng thông minh
  2. Xác minh chính thức hợp đồng thông minh

Hãy cùng tìm hiểu chi tiết về chúng và tìm hiểu cách chúng giúp chúng ta biết được những điểm yếu hoặc lỗ hổng trong hợp đồng của mình.

2. Thử nghiệm hợp đồng thông minh

Một nhà phát triển có kinh nghiệm có thể giải thích công việc cho máy bằng mã. Tuy nhiên, đôi khi máy không mô tả chính xác cơ chế mà nhà phát triển đã nghĩ đến do một lỗ hổng hoặc lỗi logic trong mã. Thử nghiệm là quá trình giúp xác định nơi mã của chúng tôi bị lỗi và những gì có thể được thực hiện để làm cho nó tương ứng với hành động mà chúng tôi cần nó thực hiện.

Thử nghiệm hợp đồng thông minh là một giai đoạn trong chu kỳ phát triển mà chúng tôi thực hiện phân tích chi tiết các hợp đồng của mình và cố gắng tìm ra vị trí và lý do tại sao mã của chúng tôi bị lỗi. Hầu như tất cả các hợp đồng thông minh đều trải qua giai đoạn này. Có hai cách thử nghiệm hợp đồng thông minh được thực hiện. Hãy khám phá chúng.

2.1 Tự động

Như tên cho thấy, phương pháp thử nghiệm hợp đồng thông minh này được sử dụng để thực hiện thử nghiệm theo kịch bản. Nó liên quan đến phần mềm tự động thực hiện các bài kiểm tra lặp đi lặp lại để tìm ra bất kỳ lỗ hổng và khiếm khuyết nào trong hợp đồng thông minh. Các công cụ kiểm tra tự động này có thể được cấu hình với dữ liệu kiểm tra và kết quả mong đợi. Sau đó, kết quả thực tế được so sánh với kết quả dự kiến ​​để kiểm tra xem hợp đồng có hoạt động bình thường hay không. Kiểm thử tự động có thể được phân loại thành ba loại.

2.1.1. Kiểm tra chức năng

Giả sử bạn viết chương trình lấy hai số a và b rồi trả về phép cộng cả hai số. Vì vậy, để kiểm tra chương trình đó, bạn cho 2 và 8 và cho kết quả dự kiến ​​là 10. Bây giờ, khi chương trình chạy, nó cũng sẽ trả về 10. Nếu đúng như vậy, thì nó hoạt động tốt và mã của chúng ta đúng, nhưng nếu nó không, sau đó có một số lỗi với mã của chúng tôi. 

Kiểm tra chức năng yêu cầu hiểu hợp đồng của bạn sẽ hoạt động như thế nào trong các điều kiện nhất định. Chúng ta có thể kiểm tra nó bằng cách chạy một phép tính với các giá trị đã chọn và so sánh kết quả trả về. Kiểm tra chức năng có ba lớp: -

  1. Kiểm tra đơn vị: - Điều này đề cập đến việc kiểm tra tính chính xác của các thành phần riêng lẻ của hợp đồng thông minh. Nó mang tính quyết đoán hoặc yêu cầu các câu lệnh trên các biến.
  1. Tích hợp thửng: – Những thỏa thuận này với việc thử nghiệm một số thành phần riêng lẻ cùng nhau. Kiểm thử tích hợp là cấp độ cao hơn trong hệ thống phân cấp so với kiểm thử đơn vị. Nó giúp chúng tôi xác định các lỗi phát sinh từ sự tương tác của các chức năng khác nhau, có thể là một phần của các hợp đồng thông minh khác.
  1. WELFARE thửng: – Đây là mức cao nhất trong hệ thống phân cấp. Trong quá trình này, chúng tôi kiểm tra toàn bộ hợp đồng dưới dạng một hệ thống được tích hợp đầy đủ để xem liệu nó có hoạt động theo nhu cầu của chúng tôi hay không. Nó được thực hiện từ quan điểm của người dùng và cách tốt nhất để làm điều đó là triển khai nó trên các mạng thử nghiệm.

2.1.2. Phân tích tĩnh

Phân tích tĩnh có thể được thực hiện mà không cần chạy chương trình. Nó liên quan đến việc phân tích mã nguồn hoặc mã byte của hợp đồng thông minh trước khi thực hiện. Do đó, đặt tên cho nó, phân tích tĩnh có thể dẫn đến việc phát hiện một số lỗ hổng phổ biến.

2.1.3. Phân tích động

Không giống như phân tích tĩnh, phân tích động được thực hiện trong thời gian chạy hợp đồng thông minh để xác định các vấn đề trong mã. Bộ phân tích mã động quan sát trạng thái đang chạy của hợp đồng và tạo báo cáo chi tiết về các lỗ hổng và vi phạm tài sản. Fuzzing thuộc phân tích động. Fuzzing đang cung cấp đầu vào không chính xác hoặc độc hại để thực thi mã ngoài ý muốn.

Hướng dẫn sử dụng 2.2

Như tên cho thấy, phương pháp thử nghiệm hợp đồng thông minh này liên quan đến sự tương tác thường xuyên với nhà phát triển con người. Kiểm toán mã, trong đó các nhà phát triển xem qua các dòng mã, thuộc chế độ Thủ công của kiểm tra hợp đồng thông minh.

Chế độ thủ công đòi hỏi thời gian, kỹ năng, tiền bạc và công sức đáng kể. Tuy nhiên, kết quả thường xứng đáng vì với điều này, chúng tôi xác định các lỗ hổng có thể không được chú ý trong thử nghiệm tự động. Có hai loại kiểm thử thủ công cơ bản: -

2.2.1 Kiểm tra mã: - 

Cách tốt nhất để kiểm tra xem biện pháp an toàn của bạn có hoạt động tốt hay không là thử phá vỡ nó. Ví dụ, nếu bạn muốn kiểm tra xem ổ khóa ô tô của mình có hoạt động bình thường hay không, hãy thử phá nó. Bây giờ bạn có thể yêu cầu rằng một tên trộm xe lành nghề có thể dễ dàng đột nhập vào xe của tôi. Tôi có thể không, vì vậy giải pháp là thuê một người thành thạo trong việc đột nhập để anh ta có thể hướng dẫn bạn!

 Vâng, tôi đang nói về QuillAudits. Chúng tôi là một nhóm kiểm toán viên lành nghề có thể hướng dẫn bạn. Kiểm tra mã yêu cầu tư duy của kẻ tấn công để tìm tất cả các lỗ hổng có thể có trong mã nguồn. Kiểm toán mã là đánh giá chi tiết mã của hợp đồng thông minh để phát hiện ra các lỗ hổng và lỗ hổng tiềm ẩn.

2.2.2 Tiền thưởng lỗi: -

Nếu bạn cho rằng có thể có một số lỗi bảo mật trong mã nguồn của mình (phần lớn là như vậy) và bạn không thể tìm thấy chúng, thì bạn có thể thuê dịch giả tự do làm công việc này bằng cách tạo một hệ thống phần thưởng. Nó giống như thông báo phần thưởng cho bất kỳ ai hack được hợp đồng thông minh của bạn. Bằng cách này, bạn tìm hiểu về lỗ hổng bảo mật có trong hợp đồng thông minh của mình để bạn có thể bảo vệ nó tốt hơn và cứu người dùng của mình khỏi bị mất mát.

3. Xác minh chính thức Hợp đồng thông minh

Xác minh chính thức là quá trình đánh giá tính đúng đắn của hợp đồng dựa trên các thông số kỹ thuật chính thức. Điều này có nghĩa là xác minh chính thức đánh giá xem mã có thực hiện những gì được dự định hay không. Xác minh chính thức sử dụng các phương pháp chính thức để chỉ định, thiết kế và xác minh các chương trình.

3.1 Đặc tả hình thức là gì?

Trong ngữ cảnh của hợp đồng thông minh, thông số kỹ thuật chính thức đề cập đến các thuộc tính phải giữ nguyên trong mọi trường hợp có thể. Đây là những thuộc tính " bất biến " vì chúng không thể thay đổi và biểu thị các xác nhận logic về việc thực hiện hợp đồng.

Đặc tả hình thức là tập hợp các câu lệnh được viết bằng ngôn ngữ hình thức. Thông số kỹ thuật bao gồm các thuộc tính khác nhau và mô tả các thuộc tính của hợp đồng sẽ hoạt động như thế nào trong các trường hợp khác. Thông số kỹ thuật chính thức là rất quan trọng vì nếu hợp đồng không có các biến bất biến hoặc thuộc tính thay đổi trong quá trình thực thi, điều đó có thể dẫn đến khả năng khai thác tài sản, dẫn đến tổn thất lớn.

Nó có thể giúp chúng tôi xác định liệu một hợp đồng thông minh có đáp ứng các thông số kỹ thuật hoặc có các hành vi không mong muốn hay không. Xác minh chính thức có ba thành phần: thông số kỹ thuật, mô hình và công cụ xác minh.

3.1.1 Đặc điểm kỹ thuật

Thông số kỹ thuật là một bản mô tả rõ ràng, rõ ràng và đầy đủ về các yêu cầu đối với một hợp đồng thông minh. Nó nên mô tả hợp đồng phải làm gì và không được làm gì. Dưới đây là một ví dụ về đặc điểm kỹ thuật cho một hợp đồng thông minh, đơn giản có thêm hai số:

// Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
// Implementation details are not relevant to the specification
// …
}

Mô hình 3.1.2

Một mô hình chính thức đại diện cho hợp đồng thông minh có thể được sử dụng để suy luận về hành vi của nó. Một mô hình phổ biến cho hợp đồng thông minh là ngôn ngữ lập trình Solidity. Đây là một mô hình ví dụ cho chức năng thêm được mô tả ở trên:

// Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public view returns (uint) {
return a + b;
}

3.1.3 Công cụ xác minh

Công cụ xác minh là một công cụ có thể phân tích một mô hình và xác minh tính chính xác của nó liên quan đến một thông số kỹ thuật nhất định. Có một số công cụ xác minh có sẵn cho hợp đồng thông minh, bao gồm:

Thần thoại: một công cụ thực thi mã nguồn mở có thể phát hiện nhiều lỗ hổng bảo mật trong hợp đồng thông minh Solidity.

Phối lại IDE: một môi trường phát triển tích hợp bao gồm một công cụ xác minh chính thức có thể xác minh tính đúng đắn của các hợp đồng thông minh.

Chứng minh Certora: một công cụ thương mại có thể xác minh tính chính xác của hợp đồng thông minh bằng cách sử dụng suy luận toán học tự động. Dưới đây là một ví dụ về cách xác minh chính thức có thể được sử dụng để xác minh tính đúng đắn của hợp đồng thông minh bằng Chứng minh Certora:

pragma solidity 0.7.6; // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint)
function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Model: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function add(uint a, uint b) public pure returns (uint) {
return a + b;
} // Specification: Adds two numbers
// Inputs: a, b (uint)
// Outputs: the sum of a and b (uint) function test_add(uint a, uint b) public pure returns (bool) {
uint expected = a + b;
uint actual = add(a, b);
return expected == actual;
} // Verification: Verify the correctness of the add function contract TestAdd {
function test_add(uint a, uint b) public view returns (bool) {
return CertoraProver.verify(test_add, a, b);
}
}

Trong ví dụ trên, chúng tôi xác định hợp đồng thông minh Solidity bao gồm mô hình chức năng thêm, thông số kỹ thuật cho chức năng và công cụ xác minh (Certora Prover) có thể xác minh tính chính xác của chức năng. Chúng tôi cũng xác định hàm kiểm tra (test_add) có thể được sử dụng để xác minh tính chính xác của hàm.

3.2 Thử nghiệm VS Xác minh chính thức

Như chúng ta đã thảo luận, thử nghiệm trả về kết quả mong đợi đối với một số bot dữ liệu đầu vào mà nó thiếu vì chúng tôi không thể nói về dữ liệu mà nó chưa được thử nghiệm. Thực tế là không thể kiểm tra nó trên mọi đầu vào có thể. Vì vậy, chúng tôi không chắc chắn về "tính đúng đắn về chức năng" của nó. Đó là lúc xác minh chính thức xuất hiện. Các phương pháp xác minh chính thức sử dụng các kỹ thuật toán học nghiêm ngặt để chỉ định và xác minh phần mềm hoặc hợp đồng thông minh.

3.3 Kỹ thuật xác minh chính thức

Xác minh chính thức có nhiều kỹ thuật để tăng cường bảo mật hợp đồng thông minh. Trong phần này của blog, chúng ta sẽ khám phá một vài điều riêng lẻ.

3.3.1 Kiểm tra mô hình

Như chúng ta đã thảo luận về đặc điểm kỹ thuật chính thức là gì, chúng tôi kiểm tra hợp đồng thông minh dựa trên đặc điểm kỹ thuật của nó trong kỹ thuật xác minh chính thức này. Các hợp đồng thông minh này được biểu diễn dưới dạng các hệ thống chuyển đổi trạng thái và các thuộc tính được xác định bằng logic thời gian. 

Kỹ thuật này chủ yếu được sử dụng để đánh giá các thuộc tính tạm thời mô tả hành vi của hợp đồng thông minh theo thời gian. Thuộc tính kiểm soát truy cập (quản trị gọi tự hủy) có thể được viết ra dưới dạng logic hình thức. Sau đó, thuật toán kiểm tra mô hình có thể xác minh xem hợp đồng có đáp ứng xác minh chính thức này hay không.

Kiểm tra mô hình sử dụng một kỹ thuật gọi là Khám phá không gian trạng thái, về cơ bản là thử tất cả các trạng thái có thể có mà hợp đồng thông minh của chúng ta có thể ở đó và sau đó kiểm tra xem có bất kỳ trạng thái nào dẫn đến vi phạm tài sản hay không. Tuy nhiên, điều này có thể dẫn đến vô số trạng thái; do đó, những người kiểm tra mô hình dựa vào các kỹ thuật trừu tượng hóa để có thể phân tích hiệu quả các hợp đồng thông minh.

3.3.2 Chứng minh định lý

Chứng minh định lý là về suy luận toán học về tính đúng đắn của các chương trình. Nó liên quan đến việc tạo ấn tượng hợp lý về hệ thống và thông số kỹ thuật của hợp đồng và xác minh “sự tương đương về mặt logic” giữa các tuyên bố. Tương đương logic là một mối quan hệ toán học nói rằng câu A đúng khi và chỉ khi câu B đúng.

Như chúng ta đã học trong kỹ thuật kiểm tra mô hình, chúng ta lập mô hình các hợp đồng dưới dạng các hệ thống chuyển tiếp với các trạng thái hữu hạn. Chứng minh định lý có thể xử lý việc phân tích các hệ thống trạng thái vô hạn. Tuy nhiên, một người chứng minh định lý tự động không phải lúc nào cũng biết liệu một vấn đề logic có thể quyết định được hay không; do đó, sự trợ giúp của con người thường được yêu cầu để hướng dẫn người chứng minh định lý trong việc rút ra các bằng chứng đúng đắn.

4. Phần kết luận

Thử nghiệm và xác minh chính thức đều là những phần không thể thiếu trong quá trình phát triển hợp đồng thông minh. Đây là những phương pháp được sử dụng để làm cho hợp đồng thông minh trở nên an toàn và giúp hợp đồng sẵn sàng để triển khai. Nhưng như bạn đã biết, bảo mật không bao giờ là đủ. Nhiều hợp đồng thông minh đã bị hack chỉ vì không có thử nghiệm thích hợp. Hơn bao giờ hết, cộng đồng web3 cần các giao thức an toàn hơn. 

Chúng tôi tại QuillAudits đang thực hiện sứ mệnh giúp bảo vệ các giao thức của bạn. Với đội ngũ lành nghề và giàu kinh nghiệm của mình, chúng tôi đảm bảo không một lỗ hổng nào không được chú ý. Hãy truy cập trang web của chúng tôi và đảm bảo an toàn cho dự án Web3 của bạn!

28 Lượt xem

Dấu thời gian:

Thêm từ quillhash