Phân tích lỗ hổng trình biên dịch 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, chức năng của nó là 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 được bởi 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 sự an toàn của mã ứng dụng chương trình, nhưng an toàn của chính trình biên dịch cũng quan trọng không kém. 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 các lỗ hổng an ninh, và 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.
Lấy ví dụ về trình duyệt, trong quá trình biên dịch và phân tích mã JavaScript, có thể xảy ra các hậu quả nghiêm trọng như thực thi mã từ xa do lỗ hổng của động cơ JavaScript. Trình biên dịch Solidity cũng không ngoại lệ, có nhiều phiên bản tồn tại lỗ hổng 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 cho máy ảo Ethereum (EVM). Cần phân biệt giữa lỗ hổng của trình biên dịch Solidity và lỗ hổng của chính EVM. Lỗ hổng EVM đề cập đến các vấn đề bảo mật phát sinh khi máy ảo thực hiện các lệnh, 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 là những vấn đề trong quá trình biên dịch, 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.
Một trong những mối nguy hại của lỗ hổng trong trình biên dịch Solidity là có thể dẫn đến mã EVM được tạo ra khác với mong đợi của nhà phát triển hợp đồng thông minh. Do các hợp đồng thông minh thường liên quan đến tài sản tiền điện tử của người dùng, bất kỳ lỗi nào do trình biên dịch gây ra đều có thể dẫn đến hậu quả nghiêm trọng. Chỉ thông qua việc kiểm toán mã nguồn hợp đồng rất khó để phát hiện những vấn đề này, cần kết hợp phân tích phiên bản trình biên dịch cụ thể với mẫu mã.
Dưới đây là một số ví dụ về lỗ hổng trong trình biên dịch Solidity thực tế, trình bày hình thức cụ thể, nguyên nhân và tác hại của chúng.
Lỗ hổng HighOrderByteCleanStorage SOL-2016-9 tồn tại trong các phiên bản trước của trình biên dịch Solidity từ (>=0.1.6 đến <0.4.4). Lỗ hổng này có thể dẫn đến việc các biến lưu trữ trả về giá trị không mong muốn mà không bị thay đổ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 hạn, ghi chép tài sản, v.v.
Lỗ hổng InlineAssemblyMemorySideEffects trong SOL-2022-4 tồn tại trong các phiên bản biên dịch viên từ >=0.8.13 đến <0.8.15. Lỗ hổng này xuất phát từ việc xử lý sai mã lắp ghép trong quá trình tối ưu hóa biên dịch, có thể dẫn đến việc một số thao tác bộ nhớ bị loại bỏ sai.
Lỗ hổng SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup ảnh hưởng đến các phiên bản trình biên dịch >= 0.5.8 < 0.8.16. Lỗ hổng này có thể dẫn đến sự không nhất quán dữ liệu khi thực hiện thao tác abi.encode trên mảng loại calldata.
Dựa trên phân tích lỗ hổng của trình biên dịch Solidity, đưa ra các khuyến nghị sau cho các nhà phát triển và nhân viên an ninh:
Nhà phát triển:
Sử dụng phiên bản biên dịch Solidity mới hơn
Cải thiện các trường hợp kiểm tra đơn vị, tăng cường tỷ lệ bao phủ mã
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.
Sử dụng cẩn thận các tính năng mới và chức năng thử nghiệm
Nhân viên an ninh:
Cân nhắc rủi ro có thể do trình biên dịch gây ra trong quá trình kiểm toán an ninh
Thúc đẩy nâng cấp phiên bản biên dịch trong quy trình SDL
Giới thiệu kiểm tra tự động phiên bản trình biên dịch trong CI/CD
Đánh giá tác độ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 ninh do Solidity chính thức phát hành
Danh sách lỗi trong kho lưu trữ GitHub của Solidity
Danh sách lỗi biên dịch của các phiên bản
Thông báo lỗ hổng trình biên dịch trên Etherscan
Tóm lại, mặc dù lỗ hổng biên dịch viên Solidity không phổ biến, nhưng có thể gây ra hậu quả nghiêm trọng. Các nhà phát triển và nhân viên an ninh nên nâng cao cảnh giác và thực hiện các biện pháp thích hợp để giảm thiểu rủi ro.
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.
8 thích
Phần thưởng
8
5
Chia sẻ
Bình luận
0/400
MetaverseHobo
· 18giờ trước
Lại là một đống lỗ hổng, hoảng gì chứ.
Xem bản gốcTrả lời0
OfflineValidator
· 18giờ trước
Chơi mất hơn 2k usdt, tấn công hạ chiều những người hiểu mua thấp bán cao
Dựa vào trình biên dịch lại bị lỗi...
Xem bản gốcTrả lời0
FallingLeaf
· 18giờ trước
Lỗ hổng làm tôi sợ quá, chẳng dám chơi gì cả.
Xem bản gốcTrả lời0
PoetryOnChain
· 18giờ trước
Lại đến theo dõi lỗ hổng, đi thôi đi thôi
Xem bản gốcTrả lời0
AirDropMissed
· 18giờ trước
Lại là lỗi biên dịch, không nhịn được mà phải cười.
Phân tích lỗ hổng biên dịch viên Solidity: Rủi ro, ví dụ và chiến lược ứng phó
Phân tích lỗ hổng trình biên dịch 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, chức năng của nó là 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 được bởi 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 sự an toàn của mã ứng dụng chương trình, nhưng an toàn của chính trình biên dịch cũng quan trọng không kém. 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 các lỗ hổng an ninh, và 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.
Lấy ví dụ về trình duyệt, trong quá trình biên dịch và phân tích mã JavaScript, có thể xảy ra các hậu quả nghiêm trọng như thực thi mã từ xa do lỗ hổng của động cơ JavaScript. Trình biên dịch Solidity cũng không ngoại lệ, có nhiều phiên bản tồn tại lỗ hổng 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 cho máy ảo Ethereum (EVM). Cần phân biệt giữa lỗ hổng của trình biên dịch Solidity và lỗ hổng của chính EVM. Lỗ hổng EVM đề cập đến các vấn đề bảo mật phát sinh khi máy ảo thực hiện các lệnh, 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 là những vấn đề trong quá trình biên dịch, 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.
Một trong những mối nguy hại của lỗ hổng trong trình biên dịch Solidity là có thể dẫn đến mã EVM được tạo ra khác với mong đợi của nhà phát triển hợp đồng thông minh. Do các hợp đồng thông minh thường liên quan đến tài sản tiền điện tử của người dùng, bất kỳ lỗi nào do trình biên dịch gây ra đều có thể dẫn đến hậu quả nghiêm trọng. Chỉ thông qua việc kiểm toán mã nguồn hợp đồng rất khó để phát hiện những vấn đề này, cần kết hợp phân tích phiên bản trình biên dịch cụ thể với mẫu mã.
Dưới đây là một số ví dụ về lỗ hổng trong trình biên dịch Solidity thực tế, trình bày hình thức cụ thể, nguyên nhân và tác hại của chúng.
Lỗ hổng HighOrderByteCleanStorage SOL-2016-9 tồn tại trong các phiên bản trước của trình biên dịch Solidity từ (>=0.1.6 đến <0.4.4). Lỗ hổng này có thể dẫn đến việc các biến lưu trữ trả về giá trị không mong muốn mà không bị thay đổ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 hạn, ghi chép tài sản, v.v.
Lỗ hổng InlineAssemblyMemorySideEffects trong SOL-2022-4 tồn tại trong các phiên bản biên dịch viên từ >=0.8.13 đến <0.8.15. Lỗ hổng này xuất phát từ việc xử lý sai mã lắp ghép trong quá trình tối ưu hóa biên dịch, có thể dẫn đến việc một số thao tác bộ nhớ bị loại bỏ sai.
Lỗ hổng SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup ảnh hưởng đến các phiên bản trình biên dịch >= 0.5.8 < 0.8.16. Lỗ hổng này có thể dẫn đến sự không nhất quán dữ liệu khi thực hiện thao tác abi.encode trên mảng loại calldata.
Dựa trên phân tích lỗ hổng của trình biên dịch Solidity, đưa ra các khuyến nghị sau cho các nhà phát triển và nhân viên an ninh:
Nhà phát triển:
Nhân viên an ninh:
Một số tài nguyên hữu ích:
Tóm lại, mặc dù lỗ hổng biên dịch viên Solidity không phổ biến, nhưng có thể gây ra hậu quả nghiêm trọng. Các nhà phát triển và nhân viên an ninh nên nâng cao cảnh giác và thực hiện các biện pháp thích hợp để giảm thiểu rủi ro.
Dựa vào trình biên dịch lại bị lỗi...