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 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 trên máy tính. So với mã ứng dụng, tính bảo mật của chính trình biên dịch thường dễ bị bỏ qua. Tuy nhiên, 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, trong một số trường hợp có thể mang lại rủi ro bảo mật nghiêm trọng.
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 EVM, các lỗ hổng trong 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 nhất quán với những gì nhà phát triển mong đợi, từ đó gây ra các vấn đề về an toàn hợp đồng thông minh.
Dưới đây là một số ví dụ thực tế về lỗ hổng trình 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). 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ị biến bị sửa đổi một cách không mong muốn.
SOL-2022-4 Ảnh hưởng của bộ nhớ AssemblyInline
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 xử lý lỗi không đúng trong quá trình tối ưu hóa biên dịch đối với các khối assembly đơn lẻ, có thể dẫn đến việc các thao tác bộ nhớ bị tối ưu hóa sai.
Lỗ hổng này ảnh hưởng đến 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, một số dữ liệu đã bị xóa nhầm, 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, đề xuất các biện pháp an toàn sau:
Dành cho 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ị
Tránh sử dụng lắp ghép nội tuyến, các thao tác 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 bảo mật có thể do trình biên dịch gây ra trong quá trình kiểm toán
Thúc giục nâng cấp phiên bản biên dịch trong quy trình phát triển
Đá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 huống cụ thể
Một số tài nguyên hữu ích:
Blog cảnh báo an ninh chính thức của Solidity
Danh sách lỗi trong kho GitHub Solidity
Thông báo lỗ hổng trình biên dịch trên trang hợp đồng Etherscan
Tóm lại, mặc dù các lỗ hổng biên dịch không nên gây hoang mang quá mức, nhưng các nhà phát triển và nhân viên an ninh vẫn cần phải nâng cao cảnh giác, thực hiện các biện pháp phù hợp để giảm thiểu rủi ro liên quan.
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.
13 thích
Phần thưởng
13
7
Chia sẻ
Bình luận
0/400
MondayYoloFridayCry
· 12giờ trước
Nâng cấp cũng chưa chắc có ích.
Xem bản gốcTrả lời0
BlockchainTalker
· 18giờ trước
thực ra, điều này giống như việc để cửa trước của bạn không khóa trong khu vực web3 smh
Xem bản gốcTrả lời0
hodl_therapist
· 07-15 05:58
Các bạn cuốn vương hãy chú ý bảo vệ sức khỏe
Xem bản gốcTrả lời0
CommunitySlacker
· 07-15 05:49
Lỗi lại được cập nhật, thật phiền phức.
Xem bản gốcTrả lời0
GasGuru
· 07-15 05:45
Làm cho tôi không dám vào hợp đồng nữa.
Xem bản gốcTrả lời0
SmartContractRebel
· 07-15 05:41
Ghét biên dịch viên ngọt ngào quá.
Xem bản gốcTrả lời0
PebbleHander
· 07-15 05:36
Lỗ hổng hợp đồng mới giải quyết thế nào... đừng hoảng loạn
Phân tích và biện pháp phòng ngừa lỗ hổng trình biên dịch Solidity
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 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 trên máy tính. So với mã ứng dụng, tính bảo mật của chính trình biên dịch thường dễ bị bỏ qua. Tuy nhiên, 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, trong một số trường hợp có thể mang lại rủi ro bảo mật nghiêm trọng.
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 EVM, các lỗ hổng trong 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 nhất quán với những gì nhà phát triển mong đợi, từ đó gây ra các vấn đề về an toàn hợp đồng thông minh.
Dưới đây là một số ví dụ thực tế về lỗ hổng trình biên dịch Solidity:
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). 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ị biến bị sửa đổ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 xử lý lỗi không đúng trong quá trình tối ưu hóa biên dịch đối với các khối assembly đơn lẻ, có thể dẫn đến việc các thao tác bộ nhớ bị tối ưu hóa sai.
Lỗ hổng này ảnh hưởng đến 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, một số dữ liệu đã bị xóa nhầm, 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, đề xuất các biện pháp an toàn sau:
Dành cho 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ù các lỗ hổng biên dịch không nên gây hoang mang quá mức, nhưng các nhà phát triển và nhân viên an ninh vẫn cần phải nâng cao cảnh giác, thực hiện các biện pháp phù hợp để giảm thiểu rủi ro liên quan.