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 phần quan trọng của hệ thống máy tính hiện đại, có chức năng chuyển đổi 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. Mặc dù hầu hết các nhà phát triển và nhân viên an ninh chủ yếu tập trung vào tính bảo mật của mã ứng dụng, nhưng vấn đề an ninh của chính trình biên dịch cũng không thể bị xem nhẹ. 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 một số trường hợp.
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 (EVM) cho máy ảo Ethereum. Khác với các lỗ hổng của chính EVM, lỗ hổng của trình biên dịch Solidity sẽ 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 khớp với mong đợi của nhà phát triển, từ đó gây ra các vấn đề về an ninh.
Dưới đây là một số ví dụ về lỗ hổng trong trình biên dịch Solidity thực tế:
SOL-2016-9 HighOrderByteCleanStorage
Lỗ hổng này tồn tại trong các phiên bản trình biên dịch Solidity sớm hơn (>=0.1.6 <0.4.4). 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 giá trị của biến lưu trữ bị thay đổi một cách không mong muốn.
SOL-2022-4 Ảnh hưởng của Bộ nhớ InlineAssembly
Lỗ hổng này ảnh hưởng đến các phiên bản trình biên dịch từ 0.8.13 đến 0.8.15. Do vấn đề với chiến lược tối ưu hóa của trình biên dịch, có thể vô tình loại bỏ các thao tác ghi vào bộ nhớ, dẫn đến giá trị trả về của hàm bất thường.
Lỗi 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 mã hóa ABI cho mảng kiểu calldata, có thể xóa sai một số dữ liệu, dẫn đến việc dữ liệu liền kề bị sửa đổi.
Để đối phó với rủi ro do lỗ hổng của trình biên dịch Solidity, các nhà phát triển và nhân viên an ninh có thể thực hiện các biện pháp sau:
Đối với 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 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ể được biên dịch viên đưa vào 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 SDL
Giới thiệu kiểm tra tự động phiên bản biên dịch trong CI/CD
Tài nguyên hữu ích để tham khảo:
Blog cảnh báo an toàn chính thức của Solidity
Danh sách lỗi trong kho GitHub Solidity
Danh sách lỗi của các phiên bản biên dịch
Trang hợp đồng trên Etherscan cung cấp thông báo lỗ hổng trình biên dịch
Tóm lại, mặc dù không cần quá lo lắng về lỗ hổng của biên dịch viên, nhưng trong quá trình phát triển và kiểm toán hợp đồng thông minh, cần phải nhận thức đầy đủ về rủi ro tiềm ẩn này và thực hiện các biện pháp phòng ngừa tương ứ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.
8 thích
Phần thưởng
8
5
Chia sẻ
Bình luận
0/400
BlockImposter
· 7giờ trước
SOL-2016 đều phải theo dõi, sắp xảy ra chuyện lớn.
Xem bản gốcTrả lời0
SelfRugger
· 16giờ trước
Vậy mà giải thích phức tạp như vậy? Lỗ hổng trực tiếp ảnh hưởng đến Ví tiền!
Xem bản gốcTrả lời0
SatoshiSherpa
· 16giờ trước
Ai có thể cho tôi biết phiên bản này còn ai sử dụng không?
Xem bản gốcTrả lời0
MetaverseVagabond
· 16giờ trước
Nội dung bình luận được tạo:
Lỗ hổng này thật sự không chịu nổi, Blockchain bây giờ quá phức tạp!
Xem bản gốcTrả lời0
MemeEchoer
· 16giờ trước
Cái này của biên dịch viên không đáng tin cậy đâu.
Giải thích lỗ hổng của trình biên dịch Solidity: Phân tích rủi ro 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 phần quan trọng của hệ thống máy tính hiện đại, có chức năng chuyển đổi 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. Mặc dù hầu hết các nhà phát triển và nhân viên an ninh chủ yếu tập trung vào tính bảo mật của mã ứng dụng, nhưng vấn đề an ninh của chính trình biên dịch cũng không thể bị xem nhẹ. 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 một số trường hợp.
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 (EVM) cho máy ảo Ethereum. Khác với các lỗ hổng của chính EVM, lỗ hổng của trình biên dịch Solidity sẽ 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 khớp với mong đợi của nhà phát triển, từ đó gây ra các vấn đề về an ninh.
Dưới đây là một số ví dụ về lỗ hổng trong trình biên dịch Solidity thực tế:
Lỗ hổng này tồn tại trong các phiên bản trình biên dịch Solidity sớm hơn (>=0.1.6 <0.4.4). 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 giá trị của biến lưu trữ bị thay đổi một cách không mong muốn.
Lỗ hổng này ảnh hưởng đến các phiên bản trình biên dịch từ 0.8.13 đến 0.8.15. Do vấn đề với chiến lược tối ưu hóa của trình biên dịch, có thể vô tình loại bỏ các thao tác ghi vào bộ nhớ, dẫn đến giá trị trả về của hàm bất thường.
Lỗi 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 mã hóa ABI cho mảng kiểu calldata, có thể xóa sai một số dữ liệu, dẫn đến việc dữ liệu liền kề bị sửa đổi.
Để đối phó với rủi ro do lỗ hổng của trình biên dịch Solidity, các nhà phát triển và nhân viên an ninh có thể thực hiện các biện pháp sau:
Đối với nhà phát triển:
Đối với nhân viên an ninh:
Tài nguyên hữu ích để tham khảo:
Tóm lại, mặc dù không cần quá lo lắng về lỗ hổng của biên dịch viên, nhưng trong quá trình phát triển và kiểm toán hợp đồng thông minh, cần phải nhận thức đầy đủ về rủi ro tiềm ẩn này và thực hiện các biện pháp phòng ngừa tương ứng.
Lỗ hổng này thật sự không chịu nổi, Blockchain bây giờ quá phức tạp!