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 bởi máy tính. Tuy nhiên, chính trình biên dịch cũng có thể tồn tại lỗ hổng bảo mật, điều này trong một số trường hợp có thể mang lại rủi ro bảo mật nghiêm trọng.
Lấy ví dụ từ lĩnh vực blockchain, 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 EVM ( của máy ảo Ethereum ). Khác với 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 xảy ra vấn đề trong quá trình chuyển đổi Solidity thành mã EVM, có thể dẫn đến mã EVM được tạo ra không nhất quán với kỳ vọng của nhà phát triển. Sự không nhất quán này có thể gây ảnh hưởng nghiêm trọng đến các hợp đồng thông minh có liên quan đến tài sản tiền điện tử.
Hãy cùng tìm hiểu về các lỗ hổng trong trình biên dịch Solidity thông qua một vài trường hợp thực tế:
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 từ ( 0.1.6 đến 0.4.4 ). Trong một số trường hợp, biến storage có thể bị sửa đổi một cách không mong muốn, dẫn đến giá trị trả về của hàm không khớp với mong đợi. Vấn đề này khó phát hiện thông qua việc kiểm tra mã đơn giản, nhưng nếu liên quan đến xác thực quyền hạn hoặc ghi chép tài sản, hậu quả có thể rất nghiêm trọng.
SOL-2022-4 Ảnh hưởng bên cạnh bộ nhớ của InlineAssembly
Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch từ 0.8.13 đến 0.8.15. Do xử lý sai assembly block 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 ghi bộ nhớ bị xóa một cách không chính xác, từ đó tạo ra giá trị trả về của hàm không như mong đợi.
Lỗ hổng này tồn tại trong 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, có thể sẽ xóa nhầm một số dữ liệu, dẫn đến việc dữ liệu kề nhau bị sửa đổi, cuối cùng gây ra sự không nhất quán của dữ liệu sau khi mã hóa và giải mã.
Dựa trên phân tích lỗ hổng của trình biên dịch Solidity, chúng tôi đưa ra các đề xuất sau cho các nhà phát triển và nhân viên an ninh:
Đố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 ráp nội tuyến, các thao tác ABI mã hóa/giải mã phức tạp.
Cẩn thận sử dụng các tính năng ngô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 có thể do trình biên dịch gây ra trong quá trình kiểm toán
Trong quy trình phát triển, thúc giục nâng cấp phiên bản biên dịch.
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 toàn thực tế của các 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 do đội ngũ Solidity phát hành
Danh sách lỗi của kho chính thức Solidity
Danh sách lỗi biên dịch viên các phiên bản
Lời khuyên về an toàn trên trang mã hợp đồng Etherscan
Nói chung, lỗ hổng của trình biên dịch Solidity mặc dù không phổ biến, nhưng ảnh hưởng tiềm tàng không thể bị bỏ qua. Các nhà phát triển và nhân viên an ninh nên tăng cường 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.
16 thích
Phần thưởng
16
4
Đăng lại
Chia sẻ
Bình luận
0/400
PumpDetector
· 08-10 06:17
câu chuyện cũ... đã thấy các vấn đề biên dịch từ năm '13, những ngày mtgox thì điên rồ thật lòng mà nói
Xem bản gốcTrả lời0
AirdropHuntress
· 08-10 06:13
Chi tiết kiểm toán mã không gây hại, ví tiền của các nhà tư bản mới là vấn đề lớn.
Xem bản gốcTrả lời0
TokenEconomist
· 08-10 06:06
thực ra, toàn bộ vấn đề EVM so với trình biên dịch solidity này tương tự như lỗi Y2K nổi tiếng... thật sự thú vị mà nói thật
Xem bản gốcTrả lời0
MidnightTrader
· 08-10 05:59
Cảm giác như trình biên dịch đã hỏng, rủi ro dự án lớn lắm.
Lỗ hổng trình biên dịch Solidity: Rủi ro tiềm ẩn và chiến lược đối 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 bởi máy tính. Tuy nhiên, chính trình biên dịch cũng có thể tồn tại lỗ hổng bảo mật, điều này trong một số trường hợp có thể mang lại rủi ro bảo mật nghiêm trọng.
Lấy ví dụ từ lĩnh vực blockchain, 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 EVM ( của máy ảo Ethereum ). Khác với 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 xảy ra vấn đề trong quá trình chuyển đổi Solidity thành mã EVM, có thể dẫn đến mã EVM được tạo ra không nhất quán với kỳ vọng của nhà phát triển. Sự không nhất quán này có thể gây ảnh hưởng nghiêm trọng đến các hợp đồng thông minh có liên quan đến tài sản tiền điện tử.
Hãy cùng tìm hiểu về các lỗ hổng trong trình biên dịch Solidity thông qua một vài trường hợp thực tế:
Lỗi này tồn tại trong các phiên bản biên dịch Solidity sớm hơn từ ( 0.1.6 đến 0.4.4 ). Trong một số trường hợp, biến storage có thể bị sửa đổi một cách không mong muốn, dẫn đến giá trị trả về của hàm không khớp với mong đợi. Vấn đề này khó phát hiện thông qua việc kiểm tra mã đơn giản, nhưng nếu liên quan đến xác thực quyền hạn hoặc ghi chép tài sản, hậu quả có thể rất nghiêm trọng.
Lỗ hổng này ảnh hưởng đến các phiên bản biên dịch từ 0.8.13 đến 0.8.15. Do xử lý sai assembly block 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 ghi bộ nhớ bị xóa một cách không chính xác, từ đó tạo ra giá trị trả về của hàm không như mong đợi.
Lỗ hổng này tồn tại trong 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, có thể sẽ xóa nhầm một số dữ liệu, dẫn đến việc dữ liệu kề nhau bị sửa đổi, cuối cùng gây ra sự không nhất quán của dữ liệu sau khi mã hóa và giải mã.
Dựa trên phân tích lỗ hổng của trình biên dịch Solidity, chúng tôi đưa ra các đề xuất sau cho các nhà phát triển và nhân viên an ninh:
Đố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:
Nói chung, lỗ hổng của trình biên dịch Solidity mặc dù không phổ biến, nhưng ảnh hưởng tiềm tàng không thể bị bỏ qua. Các nhà phát triển và nhân viên an ninh nên tăng cường 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.