Phân tích lỗ hổng biên dịch viên Solidity và các biện pháp đối 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 từ 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ù 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, nhưng sự an toàn của chính trình biên dịch cũng quan trọng không kém. Lỗ hổng trong trình biên dịch có thể mang lại rủi ro an ninh nghiêm trọng trong những tình huống cụ thể, chẳng hạn như khi trình duyệt phân tích và thực thi mã Javascript, có thể dẫn đến việc thực thi mã từ xa do lỗ hổng trong engine phân tích.
Trình biên dịch Solidity cũng không phải là ngoại lệ, có nhiều phiên bản tồn tại lỗ hổng bảo mật. Vai trò 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). 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 chính EVM. Lỗ hổng EVM 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ủ yếu ảnh hưởng đến các nhà phát triển và người dùng hợp đồng thông minh.
Một mối nguy hiểm của lỗ hổng trong trình biên dịch Solidity là nó 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. Bởi vì 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ể gây ra hậu quả nghiêm trọng. Các vấn đề này khó phát hiện thông qua việc kiểm tra mã đơn giản, cần phải phân tích kết hợp phiên bản trình biên dịch cụ thể và kiểu mã.
Dưới đây là một vài ví dụ thực tế về lỗi 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 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ử lý đúng cách các thao tác xóa bit cao sau khi tràn số nguyên, có thể dẫn đến việc giá trị của các biến liền kề bị thay đổi một cách không mong muốn.
SOL-2022-4 InlineAssemblyMemorySideEffects:
Lỗ hổng này tồn tại trong các phiên bản biên dịch viên >=0.8.13 <0.8.15. Do việc xử lý sai mã lắp ghép trong quá trình tối ưu hóa của biên dịch viên, có thể dẫn đến một số thao tác bộ nhớ bị tối ưu hóa sai.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch viên >= 0.5.8 < 0.8.16. Khi thực hiện thao tác abi.encode trên mảng kiểu calldata, có thể xóa nhầm 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 các đề xuất 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ị
Tránh sử dụng lắp ráp nội tuyến, mã hóa và giải mã abi phức tạp, v.v.
Sử dụng cẩn thận các tính năng ngôn ngữ mới và các chức năng thử nghiệm
Đối với nhân viên an ninh:
Xem xét rủi ro mà trình biên dịch có thể 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 viên 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 quy trình CI/CD
Đánh giá tác động an ninh thực tế của lỗ hổng biên dịch viên dựa trên tình hình cụ thể của dự án
Một số nguồn tài nguyên hữu ích:
Cảnh báo an toàn do Solidity chính thức phát hành
Danh sách lỗi được cập nhật từ kho chính thức của Solidity
Danh sách lỗi biên dịch viên các phiên bản
Tính năng cảnh báo lỗ hổng trình biên dịch do Etherscan cung cấp
Bằng cách chú trọng đến an toàn của trình biên dịch, hoàn thiện kiểm tra, sử dụng các tính năng phức tạp một cách cẩn thận, và kịp thời cập nhật phiên bản trình biên dịch, các nhà phát triển và nhân viên an ninh có thể giảm thiểu hiệu quả rủi ro do lỗ hổng của trình biên dịch Solidity mang lại, nâng cao tính an toàn tổng thể của hợp đồng thông minh.
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.
15 thích
Phần thưởng
15
6
Chia sẻ
Bình luận
0/400
Rekt_Recovery
· 07-12 06:08
rip đến quỹ của mọi người... đã trải qua, mất tất cả vì lỗi biên dịch vào năm 2018 smh
Xem bản gốcTrả lời0
RunWhenCut
· 07-12 05:51
测 không đo thì cũng phải chơi đùa với mọi người
Xem bản gốcTrả lời0
FUDwatcher
· 07-12 03:11
Con bug này thật đáng sợ, tôi đi đây!
Xem bản gốcTrả lời0
ResearchChadButBroke
· 07-09 10:27
Biên dịch lại gặp sự cố? Thức khuya sửa lỗi đi.
Xem bản gốcTrả lời0
MoonlightGamer
· 07-09 10:19
Mã đã kiểm tra rồi, không có vấn đề gì cả.
Xem bản gốcTrả lời0
GasGuzzler
· 07-09 09:58
Còn đang viết hợp đồng thông minh nữa, một mùi đồ ngốc.
Phân tích lỗ hổng của trình biên dịch Solidity và chiến lược ứng phó
Phân tích lỗ hổng biên dịch viên Solidity và các biện pháp đối 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 từ 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ù 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, nhưng sự an toàn của chính trình biên dịch cũng quan trọng không kém. Lỗ hổng trong trình biên dịch có thể mang lại rủi ro an ninh nghiêm trọng trong những tình huống cụ thể, chẳng hạn như khi trình duyệt phân tích và thực thi mã Javascript, có thể dẫn đến việc thực thi mã từ xa do lỗ hổng trong engine phân tích.
Trình biên dịch Solidity cũng không phải là ngoại lệ, có nhiều phiên bản tồn tại lỗ hổng bảo mật. Vai trò 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). 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 chính EVM. Lỗ hổng EVM 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ủ yếu ảnh hưởng đến các nhà phát triển và người dùng hợp đồng thông minh.
Một mối nguy hiểm của lỗ hổng trong trình biên dịch Solidity là nó 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. Bởi vì 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ể gây ra hậu quả nghiêm trọng. Các vấn đề này khó phát hiện thông qua việc kiểm tra mã đơn giản, cần phải phân tích kết hợp phiên bản trình biên dịch cụ thể và kiểu mã.
Dưới đây là một vài ví dụ thực tế về lỗi 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 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ử lý đúng cách các thao tác xóa bit cao sau khi tràn số nguyên, có thể dẫn đến việc giá trị của các biến liền kề bị thay đổi một cách không mong muốn.
SOL-2022-4 InlineAssemblyMemorySideEffects: Lỗ hổng này tồn tại trong các phiên bản biên dịch viên >=0.8.13 <0.8.15. Do việc xử lý sai mã lắp ghép trong quá trình tối ưu hóa của biên dịch viên, có thể dẫn đến một số thao tác bộ nhớ bị tối ưu hóa sai.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch viên >= 0.5.8 < 0.8.16. Khi thực hiện thao tác abi.encode trên mảng kiểu calldata, có thể xóa nhầm 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 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ố nguồn tài nguyên hữu ích:
Bằng cách chú trọng đến an toàn của trình biên dịch, hoàn thiện kiểm tra, sử dụng các tính năng phức tạp một cách cẩn thận, và kịp thời cập nhật phiên bản trình biên dịch, các nhà phát triển và nhân viên an ninh có thể giảm thiểu hiệu quả rủi ro do lỗ hổng của trình biên dịch Solidity mang lại, nâng cao tính an toàn tổng thể của hợp đồng thông minh.