Phân tích lỗ hổng trình biên dịch Solidity và biện pháp phòng ngừa
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 mã nguồn của ngôn ngữ lập trình cấp 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 tính bảo mật của mã ứng dụng, nhưng tính bảo mật của chính trình biên dịch cũng không thể bị bỏ qua. Thực tế, 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 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 an ninh nghiêm trọng.
Trình biên dịch Solidity có vai trò chuyển đổi mã hợp đồng thông minh thành mã lệnh cho 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 đề cập đến các vấn đề phát sinh trong quá trình chuyển đổi mã. Những lỗ hổng này 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 phù hợp với kỳ vọng của nhà phát triển, từ đó gây ra hậu quả nghiêm trọng.
Dưới đây là một số ví dụ về lỗ hổng 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). Nó có thể dẫn đến việc các biến storage trả về giá trị không mong đợi mà không bị thay đổi. Sự không nhất quán này có thể gây ra các vấn đề nghiêm trọng trong các thao tác quan trọng như xác thực quyền truy cập hoặc ghi sổ tài sả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. Nó xuất phát từ việc trình biên dịch đã sai sót trong quá trình tối ưu hóa, loại bỏ các lệnh thao tác bộ nhớ dường như thừa nhưng thực tế là cần thiết, dẫn đến giá trị trả về của hàm không khớp với kỳ vọng.
Lỗ hổng này ảnh hưởng đến 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 thao tác abi.encode trên mảng kiểu calldata, biên dịch viên đã xóa sai một số dữ liệu, dẫn đến dữ liệu liền kề 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ã.
Để đối phó với rủi ro do lỗ hổng của trình biên dịch Solidity gây ra, độ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 mới hơn của trình biên dịch Solidity
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, mã hóa và giải mã abi phức tạp, cẩn thận khi sử dụng các tính năng mới và chức năng thử nghiệm.
Đối với nhân viên an ninh:
Chú ý đến những rủi ro mà trình biên dịch có thể gây ra trong quá trình kiểm toán an 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 SDL, xem xét việc đưa vào kiểm tra tự động trong CI/CD.
Đánh giá ảnh hưở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ố tài nguyên hữu ích:
Cảnh báo an toàn được phát hành chính thức từ Solidity
Danh sách lỗi trong kho GitHub Solidity
Lời nhắc an toàn trên trang mã hợp đồng Etherscan
Bằng cách chú ý đến an toàn của trình biên dịch, sử dụng hợp lý các tài nguyên liên quan, các nhà phát triển và nhân viên an ninh có thể phòng ngừa tốt hơn các rủi ro tiềm ẩn từ lỗ hổng trình biên dịch Solidity, 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.
18 thích
Phần thưởng
18
6
Chia sẻ
Bình luận
0/400
MEVSupportGroup
· 07-24 16:22
Vấn đề của trình biên dịch mới là thảm họa lớn...
Xem bản gốcTrả lời0
MetaverseLandlord
· 07-24 02:50
Cảnh báo nghề lập trình viên hiện tại có nguy cơ cao!
Xem bản gốcTrả lời0
Ramen_Until_Rich
· 07-22 03:21
Không đến sông Hoàng Hà thì lòng không chết.
Xem bản gốcTrả lời0
AirdropHunterXM
· 07-22 03:15
Bắt đầu kiểm tra cách kiếm tiền
Xem bản gốcTrả lời0
LiquidityWitch
· 07-22 03:15
Nguy cơ tràn ngập nguy hiểm quá
Xem bản gốcTrả lời0
SelfStaking
· 07-22 03:06
Hoảng quá, nhanh chóng cập nhật lên phiên bản mới nhất
Phân tích lỗ hổng trình biên dịch Solidity và biện pháp phòng ngừa
Phân tích lỗ hổng trình biên dịch Solidity và biện pháp phòng ngừa
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 mã nguồn của ngôn ngữ lập trình cấp 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 tính bảo mật của mã ứng dụng, nhưng tính bảo mật của chính trình biên dịch cũng không thể bị bỏ qua. Thực tế, 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 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 an ninh nghiêm trọng.
Trình biên dịch Solidity có vai trò chuyển đổi mã hợp đồng thông minh thành mã lệnh cho 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 đề cập đến các vấn đề phát sinh trong quá trình chuyển đổi mã. Những lỗ hổng này 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 phù hợp với kỳ vọng của nhà phát triển, từ đó gây ra hậu quả nghiêm trọng.
Dưới đây là một số ví dụ về lỗ hổng 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). Nó có thể dẫn đến việc các biến storage trả về giá trị không mong đợi mà không bị thay đổi. Sự không nhất quán này có thể gây ra các vấn đề nghiêm trọng trong các thao tác quan trọng như xác thực quyền truy cập hoặc ghi sổ tài sả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. Nó xuất phát từ việc trình biên dịch đã sai sót trong quá trình tối ưu hóa, loại bỏ các lệnh thao tác bộ nhớ dường như thừa nhưng thực tế là cần thiết, dẫn đến giá trị trả về của hàm không khớp với kỳ vọng.
Lỗ hổng này ảnh hưởng đến 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 thao tác abi.encode trên mảng kiểu calldata, biên dịch viên đã xóa sai một số dữ liệu, dẫn đến dữ liệu liền kề 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ã.
Để đối phó với rủi ro do lỗ hổng của trình biên dịch Solidity gây ra, độ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ố tài nguyên hữu ích:
Bằng cách chú ý đến an toàn của trình biên dịch, sử dụng hợp lý các tài nguyên liên quan, các nhà phát triển và nhân viên an ninh có thể phòng ngừa tốt hơn các rủi ro tiềm ẩn từ lỗ hổng trình biên dịch Solidity, nâng cao tính an toàn tổng thể của hợp đồng thông minh.