Chuyển đến nội dung chính

Danh sách kiểm tra bảo mật hợp đồng thông minh

hợp đồng thông minh
bảo mật
Solidity
Trung cấp
Trailofbits
7 tháng 9, 2020
4 phút đọc

Danh sách kiểm tra phát triển hợp đồng thông minh

Dưới đây là quy trình tổng quan mà chúng tôi khuyên bạn nên tuân theo khi viết các hợp đồng thông minh của mình.

Kiểm tra các vấn đề bảo mật đã biết:

  • Đánh giá các hợp đồng của bạn bằng Slither (opens in a new tab). Công cụ này có hơn 40 bộ phát hiện tích hợp sẵn cho các lỗ hổng phổ biến. Hãy chạy nó trên mỗi lần check-in với mã mới và đảm bảo nhận được báo cáo sạch (hoặc sử dụng chế độ phân loại để tắt cảnh báo cho một số vấn đề nhất định).
  • Đánh giá các hợp đồng của bạn bằng Crytic (opens in a new tab). Công cụ này kiểm tra 50 vấn đề mà Slither không làm. Crytic cũng có thể giúp nhóm của bạn luôn nắm bắt tình hình của nhau bằng cách dễ dàng làm nổi bật các vấn đề bảo mật trong các Pull Request trên GitHub.

Xem xét các tính năng đặc biệt của hợp đồng của bạn:

  • Các hợp đồng của bạn có thể nâng cấp được không? Hãy đánh giá mã nâng cấp của bạn để tìm các lỗi bằng slither-check-upgradeability (opens in a new tab) hoặc Crytic (opens in a new tab). Chúng tôi đã ghi nhận 17 cách mà các bản nâng cấp có thể gặp trục trặc.
  • Các hợp đồng của bạn có nhằm mục đích tuân thủ các ERC không? Hãy kiểm tra chúng bằng slither-check-erc (opens in a new tab). Công cụ này ngay lập tức xác định các sai lệch so với sáu thông số kỹ thuật phổ biến.
  • Bạn có tích hợp với các token của bên thứ 3 không? Hãy xem lại danh sách kiểm tra tích hợp token của chúng tôi trước khi phụ thuộc vào các hợp đồng bên ngoài.

Kiểm tra trực quan các tính năng bảo mật quan trọng trong mã của bạn:

Ghi chép lại các thuộc tính bảo mật quan trọng và sử dụng các trình tạo bài kiểm tra tự động để đánh giá chúng:

  • Học cách ghi chép các thuộc tính bảo mật cho mã của bạn. Ban đầu có thể khó khăn, nhưng đây là hoạt động quan trọng nhất để đạt được kết quả tốt. Nó cũng là điều kiện tiên quyết để sử dụng bất kỳ kỹ thuật nâng cao nào trong hướng dẫn này.
  • Định nghĩa các thuộc tính bảo mật trong Solidity, để sử dụng với Echidna (opens in a new tab)Manticore (opens in a new tab). Tập trung vào máy trạng thái, kiểm soát truy cập, các phép toán số học, tương tác bên ngoài và sự tuân thủ các tiêu chuẩn của bạn.
  • Định nghĩa các thuộc tính bảo mật bằng API Python của Slither. Tập trung vào tính kế thừa, sự phụ thuộc của biến, kiểm soát truy cập và các vấn đề cấu trúc khác.
  • Chạy các bài kiểm tra thuộc tính của bạn trên mỗi commit với Crytic (opens in a new tab). Crytic có thể tiếp nhận và đánh giá các bài kiểm tra thuộc tính bảo mật để mọi người trong nhóm của bạn có thể dễ dàng thấy rằng chúng đã vượt qua trên GitHub. Các bài kiểm tra thất bại có thể chặn các commit.

Cuối cùng, hãy lưu ý đến các vấn đề mà các công cụ tự động không thể dễ dàng tìm thấy:

  • Thiếu quyền riêng tư: mọi người khác đều có thể nhìn thấy các giao dịch của bạn trong khi chúng đang xếp hàng chờ trong pool
  • Các giao dịch chạy trước (front running)
  • Các hoạt động mật mã học
  • Các tương tác rủi ro với các thành phần tài chính phi tập trung (DeFi) bên ngoài

Yêu cầu trợ giúp

Giờ làm việc của Ethereum (opens in a new tab) diễn ra vào mỗi chiều thứ Ba. Các phiên 1 kèm 1 kéo dài 1 giờ này là cơ hội để hỏi chúng tôi bất kỳ câu hỏi nào bạn có về bảo mật, khắc phục sự cố bằng các công cụ của chúng tôi và nhận phản hồi từ các chuyên gia về phương pháp hiện tại của bạn. Chúng tôi sẽ giúp bạn hoàn thành hướng dẫn này.

Tham gia Slack của chúng tôi: Empire Hacking (opens in a new tab). Chúng tôi luôn có mặt trong các kênh #crytic và #ethereum nếu bạn có bất kỳ câu hỏi nào.