Phân tích lỗ hổng 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 chính của nó là chuyển đổi ngôn ngữ lập trình cao cấp thành các lệnh cấp thấp mà máy tính có thể thực thi. Mặc dù hầu hết các nhà phát triển và nhân viên an ninh chủ yếu chú trọng đế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 cũng quan trọng không kém. Là một chương trình máy tính, trình biên dịch cũng có thể tồn tại các lỗ hổng bảo mật, điều này có thể mang lại rủi ro an ninh nghiêm trọng trong một số trường hợp.
Mục đích của trình biên dịch Solidity là chuyển đổi mã hợp đồng thông minh thành các lệnh của máy ảo Ethereum (EVM). Khác với các lỗ hổng của EVM, lỗ hổng của trình biên dịch Solidity chủ yếu ảnh hưởng đến các nhà phát triển hợp đồng thông minh, và sẽ không trực tiếp gây nguy hiểm cho an ninh mạng Ethereum. Tuy nhiên, lỗ hổng của trình biên dịch có thể dẫn đến mã EVM được tạo ra không phù hợp với mong đợi của nhà phát triển, từ đó có thể gây ra hậu quả nghiêm trọng như mất mát tài sản của người dùng.
Dưới đây là một vài ví dụ thực tế về lỗ hổng trình biên dịch Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Lỗi 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). Vấn đề nằm ở việc EVM sử dụng các phần tử ngăn xếp kích thước 32 byte, trong khi Solidity hỗ trợ các kiểu dữ liệu nhỏ hơn. Trong một số trường hợp, trình biên dịch không làm sạch đúng cách các byte cao, dẫn đến việc ghi đè dữ liệu không mong muốn.
SOL-2022-4 Tác động bên cạnh bộ nhớ trong hợp ngữ
Lỗ hổng này ảnh hưởng đến các phiên bản >=0.8.13 <0.8.15 của trình biên dịch. Vấn đề xuất phát từ việc xử lý sai các khối lắp ghép nội tuyến trong quá trình tối ưu hóa của trình biên dịch, dẫn đến một số thao tác ghi vào bộ nhớ bị loại bỏ một cách sai lầm.
Lỗ hổng này tồn tại trong 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 mã hóa ABI cho một số loại mảng calldata, thao tác dọn dẹp dữ liệu sai dẫn đến việc dữ liệu liền kề bị thay đổi, gây ra sự không nhất quán trong kết quả mã hóa và giải mã.
Đối với lỗ hổng của trình biên dịch Solidity, chúng tôi đư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ị, tăng cường tỷ lệ bao phủ mã
Tránh sử dụng các tính năng cao cấp như lắp ráp nội tuyến, mã hóa và giải mã ABI phức tạp.
Đối với nhân viên an ninh:
Cân nhắc các rủi ro an ninh có thể do trình biên dịch gây ra trong quá trình kiểm toán
Thúc đẩy nâng cấp phiên bản trình biên dịch trong quy trình phát triển
Giới thiệu kiểm tra tự động phiên bản biên dịch trong CI/CD
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 Solidity
Danh sách lỗi biên dịch viên các phiên bản
Nhắc nhở lỗ hổng trình biên dịch trên Etherscan
Tóm lại, mặc dù không cần quá lo lắng về các lỗ hổng của trình biên dịch, nhưng trong quá trình phát triển và kiểm toán hợp đồng thông minh, vẫn cần chú trọng đầy đủ đến mối đe dọa an ninh tiềm ẩn này. Bằng cách thực hiện các biện pháp phòng ngừa phù hợp, có thể giảm thiểu tối đa rủi ro do các lỗ hổng của trình biên dịch mang lại.
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.
9 thích
Phần thưởng
9
7
Chia sẻ
Bình luận
0/400
BoredApeResistance
· 07-08 04:11
Cần cẩn thận với việc mã hóa.
Xem bản gốcTrả lời0
SelfCustodyBro
· 07-06 15:49
Còn viết mã không? Về nhà thử nghiệm trước đã.
Xem bản gốcTrả lời0
TokenDustCollector
· 07-05 04:47
Trước khi kiểm tra hợp đồng, cần phải kiểm tra trình biên dịch.
Xem bản gốcTrả lời0
0xSoulless
· 07-05 04:46
天天被 chơi đùa với mọi người,还不如编译器直接把我割完
Xem bản gốcTrả lời0
SmartContractPlumber
· 07-05 04:43
Biết rằng các bạn đều nóng lòng lên Mạng chính nhưng bạn có dám lên không?
Xem bản gốcTrả lời0
ConsensusDissenter
· 07-05 04:39
Lại một lần nữa hợp đồng thông minh gặp sự cố rồi.
Lỗ hổng trình biên dịch Solidity: Điều các nhà phát triển cần biết và chiến lược đối phó
Phân tích lỗ hổng 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 chính của nó là chuyển đổi ngôn ngữ lập trình cao cấp thành các lệnh cấp thấp mà máy tính có thể thực thi. Mặc dù hầu hết các nhà phát triển và nhân viên an ninh chủ yếu chú trọng đế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 cũng quan trọng không kém. Là một chương trình máy tính, trình biên dịch cũng có thể tồn tại các lỗ hổng bảo mật, điều này có thể mang lại rủi ro an ninh nghiêm trọng trong một số trường hợp.
Mục đích của trình biên dịch Solidity là chuyển đổi mã hợp đồng thông minh thành các lệnh của máy ảo Ethereum (EVM). Khác với các lỗ hổng của EVM, lỗ hổng của trình biên dịch Solidity chủ yếu ảnh hưởng đến các nhà phát triển hợp đồng thông minh, và sẽ không trực tiếp gây nguy hiểm cho an ninh mạng Ethereum. Tuy nhiên, lỗ hổng của trình biên dịch có thể dẫn đến mã EVM được tạo ra không phù hợp với mong đợi của nhà phát triển, từ đó có thể gây ra hậu quả nghiêm trọng như mất mát tài sản của người dùng.
Dưới đây là một vài ví dụ thực tế về lỗ hổng trình biên dịch Solidity:
Lỗi 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). Vấn đề nằm ở việc EVM sử dụng các phần tử ngăn xếp kích thước 32 byte, trong khi Solidity hỗ trợ các kiểu dữ liệu nhỏ hơn. Trong một số trường hợp, trình biên dịch không làm sạch đúng cách các byte cao, dẫn đến việc ghi đè dữ liệu không mong muốn.
Lỗ hổng này ảnh hưởng đến các phiên bản >=0.8.13 <0.8.15 của trình biên dịch. Vấn đề xuất phát từ việc xử lý sai các khối lắp ghép nội tuyến trong quá trình tối ưu hóa của trình biên dịch, dẫn đến một số thao tác ghi vào bộ nhớ bị loại bỏ một cách sai lầm.
Lỗ hổng này tồn tại trong 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 mã hóa ABI cho một số loại mảng calldata, thao tác dọn dẹp dữ liệu sai dẫn đến việc dữ liệu liền kề bị thay đổi, gây ra sự không nhất quán trong kết quả mã hóa và giải mã.
Đối với lỗ hổng của trình biên dịch Solidity, chúng tôi đư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:
Tóm lại, mặc dù không cần quá lo lắng về các lỗ hổng của trình biên dịch, nhưng trong quá trình phát triển và kiểm toán hợp đồng thông minh, vẫn cần chú trọng đầy đủ đến mối đe dọa an ninh tiềm ẩn này. Bằng cách thực hiện các biện pháp phòng ngừa phù hợp, có thể giảm thiểu tối đa rủi ro do các lỗ hổng của trình biên dịch mang lại.