Phân tích lỗ hổng biên dịch viên Solidity và chiến lược ứng phó
Trình biên dịch là một trong những thành phần cơ bản của hệ thống máy tính hiện đại, có chức năng chuyển đổi mã nguồn của ngôn ngữ lập trình cao cấp thành mã lệnh có thể thực thi bởi máy tính. Giống như mã ứng dụng, trình biên dịch cũng có thể tồn tại lỗ hổng bảo mật, trong một số trường hợp có thể gây ra rủi ro bảo mật nghiêm trọng.
Chức năng của trình biên dịch Solidity là chuyển mã hợp đồng thông minh thành mã lệnh của máy ảo Ethereum (EVM). Khác với lỗ hổng của chính EVM, lỗ hổng của trình biên dịch Solidity sẽ không ảnh hưởng trực tiếp đến mạng Ethereum, nhưng có thể dẫn đến mã EVM được tạo ra không nhất quán với mong đợi của nhà phát triển, từ đó gây ra các vấn đề về bảo mật hợp đồng thông minh.
Dưới đây là một vài ví dụ thực tế về lỗ hổng biên dịch Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Lỗ hổng này tồn tại trong các phiên bản trước của trình biên dịch Solidity (>=0.1.6 <0.4.4). Trong một số trường hợp, trình biên dịch không dọn dẹp đúng cách các byte cao, dẫn đến giá trị của biến storage bị thay đổi một cách không mong muốn.
SOL-2022-4 Tác động bên ngoài bộ nhớ InlineAssembly
Lỗi này tồn tại trong các phiên bản trình biên dịch từ 0.8.13 đến 0.8.15. Do xử lý sai các khối assembly trong quá trình tối ưu hóa biên dịch, có thể dẫn đến việc các thao tác ghi nhớ bị loại bỏ một cách sai lầm.
Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch từ 0.5.8 đến 0.8.16. Khi thực hiện thao tác abi.encode trên mảng kiểu calldata, có thể xóa sai một số dữ liệu, dẫn đến việc dữ liệu liền kề bị thay đổi.
Đối với lỗ hổng của trình biên dịch Solidity, đội ngũ an ninh blockchain Cobo đưa ra những khuyến nghị sau:
Đối với nhà phát triển:
Sử dụng phiên bản trình biên dịch Solidity mới hơn
Hoàn thiện trường hợp kiểm tra đơn vị
Tránh sử dụng các tính năng ngôn ngữ phức tạp, chẳng hạn như lắp ghép nội tuyến, mã hóa và giải mã abi của mảng đa chiều, v.v.
Đối với nhân viên an ninh:
Cân nhắc các rủi ro bảo mật có thể do trình biên dịch gây ra trong quá trình kiểm toán.
Thúc giục nâng cấp phiên bản biên dịch trong quy trình phát triển
Đánh giá tác động an toàn thực tế của lỗ hổng biên dịch viên dựa trên tình huống cụ thể
Một số tài nguyên hữu ích:
Blog cảnh báo an toàn chính thức của Solidity
Danh sách lỗi trong kho GitHub Solidity
Danh sách lỗi biên dịch viên các phiên bản
Thông báo lỗ hổng trình biên dịch trên trang mã hợp đồng Etherscan
Bằng cách hiểu rõ đặc điểm và ảnh hưởng của lỗ hổng trình biên dịch Solidity, các nhà phát triển và nhân viên an ninh có thể đánh giá toàn diện hơn về rủi ro an toàn của hợp đồng thông minh và thực hiện các biện pháp phòng ngừa tương ứng.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
16 thích
Phần thưởng
16
4
Chia sẻ
Bình luận
0/400
BlockchainDecoder
· 07-08 10:18
Theo bài báo cổ điển Phân tích Biên dịch Solidity (2022), hệ số rủi ro của loại lỗ hổng này đạt 78.3%, khuyên nên áp dụng cẩn thận phiên bản 0.8.0+ để tránh.
Xem bản gốcTrả lời0
DaisyUnicorn
· 07-08 10:14
Ying Ying, trình biên dịch cũng đã có lỗi nhỏ, mau chóng nâng cấp phiên bản mới đi!
Xem bản gốcTrả lời0
FlashLoanLarry
· 07-08 10:13
chỉ là một ngày khác trong defi... khai thác trình biên dịch = cơ hội mev vô hạn thật sự
Phân tích lỗ hổng của trình biên dịch Solidity và các chiến lược phòng ngừa
Phân tích lỗ hổng biên dịch viên Solidity và chiến lược ứng phó
Trình biên dịch là một trong những thành phần cơ bản của hệ thống máy tính hiện đại, có chức năng chuyển đổi mã nguồn của ngôn ngữ lập trình cao cấp thành mã lệnh có thể thực thi bởi máy tính. Giống như mã ứng dụng, trình biên dịch cũng có thể tồn tại lỗ hổng bảo mật, trong một số trường hợp có thể gây ra rủi ro bảo mật nghiêm trọng.
Chức năng của trình biên dịch Solidity là chuyển mã hợp đồng thông minh thành mã lệnh của máy ảo Ethereum (EVM). Khác với lỗ hổng của chính EVM, lỗ hổng của trình biên dịch Solidity sẽ không ảnh hưởng trực tiếp đến mạng Ethereum, nhưng có thể dẫn đến mã EVM được tạo ra không nhất quán với mong đợi của nhà phát triển, từ đó gây ra các vấn đề về bảo mật hợp đồng thông minh.
Dưới đây là một vài ví dụ thực tế về lỗ hổng biên dịch Solidity:
Lỗ hổng này tồn tại trong các phiên bản trước của trình biên dịch Solidity (>=0.1.6 <0.4.4). Trong một số trường hợp, trình biên dịch không dọn dẹp đúng cách các byte cao, dẫn đến giá trị của biến storage bị thay đổi một cách không mong muốn.
Lỗi này tồn tại trong các phiên bản trình biên dịch từ 0.8.13 đến 0.8.15. Do xử lý sai các khối assembly trong quá trình tối ưu hóa biên dịch, có thể dẫn đến việc các thao tác ghi nhớ bị loại bỏ một cách sai lầm.
Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch từ 0.5.8 đến 0.8.16. Khi thực hiện thao tác abi.encode trên mảng kiểu calldata, có thể xóa sai một số dữ liệu, dẫn đến việc dữ liệu liền kề bị thay đổi.
Đối với lỗ hổng của trình biên dịch Solidity, đội ngũ an ninh blockchain Cobo đưa ra những khuyến nghị sau:
Đối với nhà phát triển:
Đối với nhân viên an ninh:
Một số tài nguyên hữu ích:
Bằng cách hiểu rõ đặc điểm và ảnh hưởng của lỗ hổng trình biên dịch Solidity, các nhà phát triển và nhân viên an ninh có thể đánh giá toàn diện hơn về rủi ro an toàn của hợp đồng thông minh và thực hiện các biện pháp phòng ngừa tương ứng.