Phân tích lỗ hổng trình biên dịch Solidity và biện pháp ứ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 ngôn ngữ lập trình bậc cao thành mã lệnh có thể thực thi bởi máy tính. Mặc dù các nhà phát triển và nhân viên an ninh thường chú ý đến sự an toàn của mã ứng dụng chương trình, nhưng chính 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ể mang lại rủi ro an ninh nghiêm trọng.
Chức năng của trình biên dịch Solidity là chuyển đổi mã hợp đồng thông minh thành mã lệnh (EVM) cho máy ảo Ethereum. Khác với các lỗ hổng của chính EVM, lỗ hổng của trình biên dịch Solidity chủ yếu thể hiện ở việc có thể có vấn đề khi chuyển đổi từ Solidity sang mã EVM, 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 khớp với mong đợi của nhà phát triển.
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ỗi này tồn tại trong các phiên bản biên dịch Solidity sớm hơn (>=0.1.6 <0.4.4). Do trình biên dịch không xóa đúng các bit cao khi xử lý tràn số nguyên, điều này có thể dẫn đến việc các biến liền kề bị sửa đổi một cách không mong muốn.
SOL-2022-4 InlineAssemblyMemorySideEffects:
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 tối ưu hóa biên dịch phân tích từng khối assembly, có thể vô tình loại bỏ các lệnh ghi nhớ có vẻ dư thừa nhưng thực tế lại hữu ích.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
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, việc xóa sạch một số dữ liệu một cách sai lầm đã dẫn đến việc sửa đổi dữ liệu liền kề.
Đối với lỗ hổng của trình biên dịch Solidity, đội ngũ an ninh blockchain Cobo đưa ra các đề xuất sau:
Đối với các nhà phát triển:
Sử dụng phiên bản biên dịch viên Solidity mới hơn
Hoàn thiện các trường hợp thử nghiệm đơn vị
Tránh sử dụng lắp ráp nội tuyến, các thao tác giải mã và mã hóa abi phức tạp.
Đối với nhân viên an ninh:
Khi kiểm toán, hãy xem xét các rủi ro an ninh có thể do trình biên dịch gây ra.
Thúc giục nâng cấp phiên bản biên dịch viên trong quy trình phát triển
Đánh giá tác động an ninh thực tế của lỗ hổng trình biên dịch dựa trên tình huống cụ thể
Một số tài nguyên hữu ích:
Cảnh báo an toàn chính thức của Solidity
Danh sách lỗi trong kho GitHub của Solidity
Danh sách lỗi của các phiên bản biên dịch
Lời nhắc an toàn trên trang mã hợp đồng Etherscan
Tóm lại, các nhà phát triển và nhân viên an ninh nên chú ý đến các rủi ro bảo mật có thể phát sinh từ lỗ hổng trong trình biên dịch Solidity, giảm thiểu các rủi ro liên quan thông qua việc nâng cấp trình biên dịch, hoàn thiện các bài kiểm tra và các biện pháp khác.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
24 thích
Phần thưởng
24
6
Chia sẻ
Bình luận
0/400
StakeWhisperer
· 07-21 09:21
Sớm theo dõi lỗi biên dịch à? Người mới này thật buồn cười
Xem bản gốcTrả lời0
OnchainGossiper
· 07-21 06:50
Vừa sửa xong lỗ hổng lại có cái mới... Thả tay ra
Xem bản gốcTrả lời0
blockBoy
· 07-20 10:39
Đây là một vấn đề khó khăn... Ai có thể thực sự giải quyết nó.
Phân tích lỗ hổng trình biên dịch Solidity và các chiến lược ứng phó
Phân tích lỗ hổng trình biên dịch Solidity và biện pháp ứ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 ngôn ngữ lập trình bậc cao thành mã lệnh có thể thực thi bởi máy tính. Mặc dù các nhà phát triển và nhân viên an ninh thường chú ý đến sự an toàn của mã ứng dụng chương trình, nhưng chính 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ể mang lại rủi ro an ninh nghiêm trọng.
Chức năng của trình biên dịch Solidity là chuyển đổi mã hợp đồng thông minh thành mã lệnh (EVM) cho máy ảo Ethereum. Khác với các lỗ hổng của chính EVM, lỗ hổng của trình biên dịch Solidity chủ yếu thể hiện ở việc có thể có vấn đề khi chuyển đổi từ Solidity sang mã EVM, 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 khớp với mong đợi của nhà phát triển.
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ỗi này tồn tại trong các phiên bản biên dịch Solidity sớm hơn (>=0.1.6 <0.4.4). Do trình biên dịch không xóa đúng các bit cao khi xử lý tràn số nguyên, điều này có thể dẫn đến việc các biến liền kề bị sửa đổi một cách không mong muốn.
SOL-2022-4 InlineAssemblyMemorySideEffects: 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 tối ưu hóa biên dịch phân tích từng khối assembly, có thể vô tình loại bỏ các lệnh ghi nhớ có vẻ dư thừa nhưng thực tế lại hữu ích.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: 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, việc xóa sạch một số dữ liệu một cách sai lầm đã dẫn đến việc sửa đổi dữ liệu liền kề.
Đối với lỗ hổng của trình biên dịch Solidity, đội ngũ an ninh blockchain Cobo đưa ra các đề xuất sau:
Đối với các nhà phát triển:
Đối với nhân viên an ninh:
Một số tài nguyên hữu ích:
Tóm lại, các nhà phát triển và nhân viên an ninh nên chú ý đến các rủi ro bảo mật có thể phát sinh từ lỗ hổng trong trình biên dịch Solidity, giảm thiểu các rủi ro liên quan thông qua việc nâng cấp trình biên dịch, hoàn thiện các bài kiểm tra và các biện pháp khác.