Phân tích độ sâu lỗ hổng của trình biên dịch Solidity
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, chức năng chính của nó là chuyển đổi mã nguồn của ngôn ngữ lập trình cấp cao thành mã lệnh có thể thực thi ở mức thấp của máy tính. Mặc dù hầu hết các nhà phát triển và nhân viên an ninh thường chú ý đến tính an toàn của mã ứng dụng, nhưng tính an toàn của chính trình biên dịch thường bị bỏ qua. Thực tế, trình biên dịch như một chương trình máy tính, cũng có thể tồn tại lỗ hổng bảo mật, những lỗ hổng này trong một số trường hợp có thể mang lại rủi ro an ninh nghiêm trọng.
Ví dụ, trong quá trình trình duyệt phân tích và thực thi mã JavaScript, lỗ hổng của trình biên dịch JavaScript có thể dẫn đến việc người dùng bị tấn công thực thi mã từ xa khi truy cập vào các trang web độc hại, cuối cùng dẫn đến việc kẻ tấn công kiểm soát trình duyệt của nạn nhân thậm chí cả hệ điều hành. Hơn nữa, nghiên cứu cho thấy lỗi của trình biên dịch Clang C++ cũng có thể gây ra các hậu quả nghiêm trọng như thực thi mã từ xa.
Trình biên dịch Solidity cũng tồn tại lỗ hổng bảo mật. Theo cảnh báo bảo mật được phát hành bởi nhóm phát triển Solidity, nhiều phiên bản của trình biên dịch Solidity đều có nguy cơ bảo mật. 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 của máy ảo Ethereum (EVM), những mã lệnh này cuối cùng được tải lên Ethereum thông qua giao dịch và được EVM thực thi.
Cần lưu ý rằng lỗ hổng của trình biên dịch Solidity khác với lỗ hổng của EVM. Lỗ hổng EVM chỉ các vấn đề bảo mật phát sinh khi máy ảo thực hiện các chỉ thị, có thể ảnh hưởng đến toàn bộ mạng Ethereum. Trong khi đó, lỗ hổng của trình biên dịch Solidity chỉ ra các vấn đề trong quá trình trình biên dịch mã Solidity thành mã EVM, không ảnh hưởng trực tiếp đến mạng Ethereum.
Lỗi trình biên dịch Solidity có thể dẫn đến mã EVM được tạo ra không nhất quán với kỳ vọng của các nhà phát triển. Do các hợp đồng thông minh trên Ethereum thường liên quan đến tài sản tiền mã hóa của người dùng, nên bất kỳ lỗi nào do trình biên dịch gây ra đều có thể dẫn đến tổn thất tài sản của người dùng, hậu quả nghiêm trọng. Các nhà phát triển và kiểm toán viên hợp đồng thường chú trọng vào việc thực hiện logic của hợp đồng và các vấn đề an toàn phổ biến, trong khi lỗi trình biên dịch rất khó phát hiện chỉ thông qua kiểm toán mã nguồn, cần phân tích kết hợp với phiên bản trình biên dịch cụ thể và mẫu mã.
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, giá trị của biến storage có thể bị thay đổi một cách bất ngờ, dẫn đến giá trị trả về của hàm không khớp với mong đợi. Sự không nhất quán này có thể gây ra hậu quả nghiêm trọng trong các tình huống như xác thực quyền truy cập hoặc kế toán tài sản.
SOL-2022-4 Hiệu ứng bên của bộ nhớ InlineAssembly
Lỗ hổng 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 vấn đề trong chiến lược tối ưu hóa của trình biên dịch, một số mã lắp ráp nội tuyến có thể bị xóa một cách sai lầm khi thay đổi bộ nhớ, dẫn đến giá trị trả về của hàm bị sai.
Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch viên từ 0.5.8 đến 0.8.16. Khi thực hiện thao tác abi.encode trên mảng loại calldata, có thể làm sạch sai một số dữ liệu, dẫn đến việc dữ liệu liền kề bị sửa đổi, gây ra sự không nhất quán trong dữ liệu sau khi mã hóa và giải mã.
Đố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 khuyến nghị sau:
Đối với các 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 các trường hợp kiểm tra đơn vị, nâng cao tỷ lệ bao phủ mã
Tránh sử dụng lập trình nội tuyến, các thao tác giải mã phức tạp abi, cẩn thận khi sử dụng các tính năng mới và chức năng thử nghiệm.
Đối với nhân viên an ninh:
Xem xét rủi ro an ninh mà trình biên dịch có thể mang lại trong quá trình kiểm toán
Đề nghị đội ngũ phát triển nâng cấp phiên bản trình biên dịch kịp thời
Giới thiệu kiểm tra tự động phiên bản trình biên dịch trong quy trình CI/CD
Đánh giá ảnh hưởng thực tế của lỗ hổng biên dịch viên dựa trên dự án cụ thể
Một số tài nguyên hữu ích:
Cảnh báo an toàn từ blog chính thức của Solidity
Danh sách lỗi của kho GitHub Solidity
Danh sách lỗi biên dịch viên các phiên bản
Lời nhắc lỗi trên trang mã hợp đồng Etherscan
Bằng cách hiểu các đặ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á một cách toàn diện các rủi ro an ninh của hợp đồng thông minh, từ đó thực hiện các biện pháp thích hợp để giảm thiểu mối đe dọa tiềm tà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.
15 thích
Phần thưởng
15
5
Chia sẻ
Bình luận
0/400
RumbleValidator
· 20giờ trước
Lỗ hổng này có thể gây ra lỗi ở lớp nhận thức chung? Rủi ro của các Nút xác thực lớn quá.
Xem bản gốcTrả lời0
SocialFiQueen
· 20giờ trước
Có vẻ như hợp đồng thông minh sắp gặp sự cố rồi~ Haha quá kích thích
Xem bản gốcTrả lời0
CryptoTherapist
· 21giờ trước
chỉ là một trường hợp khác của hội chứng lo âu phát triển... hít thở qua quá trình gỡ lỗi fam
Xem bản gốcTrả lời0
StablecoinAnxiety
· 21giờ trước
Trình biên dịch đều không an toàn, ai dám coding
Xem bản gốcTrả lời0
Blockwatcher9000
· 21giờ trước
Các nhà phát triển thật khó khăn quá, ôm chặt btc của tôi để Rug Pull.
Phân tích lỗ hổng trình biên dịch Solidity: Rủi ro tiềm ẩn ảnh hưởng đến tính an toàn của hợp đồng thông minh
Phân tích độ sâu lỗ hổng của trình biên dịch Solidity
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, chức năng chính của nó là chuyển đổi mã nguồn của ngôn ngữ lập trình cấp cao thành mã lệnh có thể thực thi ở mức thấp của máy tính. Mặc dù hầu hết các nhà phát triển và nhân viên an ninh thường chú ý đến tính an toàn của mã ứng dụng, nhưng tính an toàn của chính trình biên dịch thường bị bỏ qua. Thực tế, trình biên dịch như một chương trình máy tính, cũng có thể tồn tại lỗ hổng bảo mật, những lỗ hổng này trong một số trường hợp có thể mang lại rủi ro an ninh nghiêm trọng.
Ví dụ, trong quá trình trình duyệt phân tích và thực thi mã JavaScript, lỗ hổng của trình biên dịch JavaScript có thể dẫn đến việc người dùng bị tấn công thực thi mã từ xa khi truy cập vào các trang web độc hại, cuối cùng dẫn đến việc kẻ tấn công kiểm soát trình duyệt của nạn nhân thậm chí cả hệ điều hành. Hơn nữa, nghiên cứu cho thấy lỗi của trình biên dịch Clang C++ cũng có thể gây ra các hậu quả nghiêm trọng như thực thi mã từ xa.
Trình biên dịch Solidity cũng tồn tại lỗ hổng bảo mật. Theo cảnh báo bảo mật được phát hành bởi nhóm phát triển Solidity, nhiều phiên bản của trình biên dịch Solidity đều có nguy cơ bảo mật. 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 của máy ảo Ethereum (EVM), những mã lệnh này cuối cùng được tải lên Ethereum thông qua giao dịch và được EVM thực thi.
Cần lưu ý rằng lỗ hổng của trình biên dịch Solidity khác với lỗ hổng của EVM. Lỗ hổng EVM chỉ các vấn đề bảo mật phát sinh khi máy ảo thực hiện các chỉ thị, có thể ảnh hưởng đến toàn bộ mạng Ethereum. Trong khi đó, lỗ hổng của trình biên dịch Solidity chỉ ra các vấn đề trong quá trình trình biên dịch mã Solidity thành mã EVM, không ảnh hưởng trực tiếp đến mạng Ethereum.
Lỗi trình biên dịch Solidity có thể dẫn đến mã EVM được tạo ra không nhất quán với kỳ vọng của các nhà phát triển. Do các hợp đồng thông minh trên Ethereum thường liên quan đến tài sản tiền mã hóa của người dùng, nên bất kỳ lỗi nào do trình biên dịch gây ra đều có thể dẫn đến tổn thất tài sản của người dùng, hậu quả nghiêm trọng. Các nhà phát triển và kiểm toán viên hợp đồng thường chú trọng vào việc thực hiện logic của hợp đồng và các vấn đề an toàn phổ biến, trong khi lỗi trình biên dịch rất khó phát hiện chỉ thông qua kiểm toán mã nguồn, cần phân tích kết hợp với phiên bản trình biên dịch cụ thể và mẫu mã.
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, giá trị của biến storage có thể bị thay đổi một cách bất ngờ, dẫn đến giá trị trả về của hàm không khớp với mong đợi. Sự không nhất quán này có thể gây ra hậu quả nghiêm trọng trong các tình huống như xác thực quyền truy cập hoặc kế toán tài sản.
Lỗ hổng 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 vấn đề trong chiến lược tối ưu hóa của trình biên dịch, một số mã lắp ráp nội tuyến có thể bị xóa một cách sai lầm khi thay đổi bộ nhớ, dẫn đến giá trị trả về của hàm bị sai.
Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch viên từ 0.5.8 đến 0.8.16. Khi thực hiện thao tác abi.encode trên mảng loại calldata, có thể làm sạch sai một số dữ liệu, dẫn đến việc dữ liệu liền kề bị sửa đổi, gây ra sự không nhất quán trong dữ liệu sau khi mã hóa và giải mã.
Đố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 khuyến nghị 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:
Bằng cách hiểu các đặ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á một cách toàn diện các rủi ro an ninh của hợp đồng thông minh, từ đó thực hiện các biện pháp thích hợp để giảm thiểu mối đe dọa tiềm tàng.