Phân tích lỗ hổng trình biên dịch Solidity và chiến lược ứng phó
Biên dịch viên 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 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 biên dịch viên thường bị bỏ qua. Tuy nhiên, biên dịch viên với tư cách là một chương trình máy tính, cũng có thể tồn tại các lỗ hổng bảo mật, trong những trường hợp nhất định sẽ 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 chính EVM, các lỗ hổng của trình biên dịch Solidity chủ yếu thể hiện khi có vấn đề xảy ra trong quá trình chuyển đổi từ Solidity sang mã EVM. Điều này có thể dẫn đến mã EVM được tạo ra không phù hợp với mong đợi của nhà phát triển, từ đó gây ra sự cố khi chạy hợp đồng thông minh, đe dọa an toàn tài sản của người dùng.
Dưới đây là một vài ví dụ về lỗ hổng 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ước của trình biên dịch Solidity (>=0.1.6 <0.4.4). Trong một số trường hợp nhất định, các biến storage có thể bị thay đổi một cách không mong muốn, không phù hợp với hành vi dự kiến. Sự không nhất quán này có thể dẫn đến hậu quả nghiêm trọng, đặc biệt là khi các biến được sử dụng để xác thực quyền hạn hoặc ghi chép tài sản.
SOL-2022-4 Tác Động Bên Cạnh Bộ Nhớ InlineAssembly
Lỗ hổng này tồn tại trong các phiên bản trình biên dịch từ 0.8.13 đến 0.8.15. Do lỗi trong quá trình tối ưu hóa biên dịch, có thể dẫn đến việc các thao tác ghi bộ nhớ bị xóa nhầm, từ đó gây ra hành vi chương trình không như mong đợi.
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, có thể xóa sai một số dữ liệu, dẫn đến việc dữ liệu lân cận bị sửa đổi, 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 với lỗ hổng của trình biên dịch Solidity, đội ngũ bảo mật blockchain Cobo đã đưa ra những khuyến nghị 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 ghép nội tuyến, mã hóa và giải mã abi phức tạp, v.v.
Đối với nhân viên an ninh:
Cân nhắc rủi ro an ninh mà trình biên dịch có thể 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 viên trong quy trình SDL
Đá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ể
Tài nguyên hữu ích:
Blog cảnh báo an toàn chính thức của Solidity
Danh sách lỗi của kho GitHub Solidity
Lời nhắc an toàn trên trang mã hợp đồng Etherscan
Tóm lại, dù không cần hoảng sợ quá mức, nhưng các nhà phát triển và nhân viên bảo mật nên nhận thức đầy đủ về những rủi ro tiềm ẩn của lỗ hổng trình biên dịch Solidity, và thực hiện các biện pháp thích hợp để giảm thiểu những nguy cơ an ninh có thể xảy ra.
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
6
Chia sẻ
Bình luận
0/400
ZkProofPudding
· 12giờ trước
Lại mát một trình biên dịch
Xem bản gốcTrả lời0
TheMemefather
· 12giờ trước
Compiler cũng có lỗ hổng? Khó chịu quá
Xem bản gốcTrả lời0
HodlOrRegret
· 12giờ trước
Lại tiếp tục nâng cấp và xuất hiện bug, người chịu thiệt hại lớn nhất luôn là bán lẻ.
Xem bản gốcTrả lời0
wrekt_but_learning
· 12giờ trước
Lỗi mã này thật sự là một cái bẫy, làm tôi cảm thấy rùng mình.
Xem bản gốcTrả lời0
GweiTooHigh
· 12giờ trước
Trình biên dịch lại gặp lỗi rồi, thật là chọc tức.
Lỗ hổng trình biên dịch Solidity đe dọa đến an toàn hợp đồng thông minh, các nhà phát triển cần cảnh giác.
Phân tích lỗ hổng trình biên dịch Solidity và chiến lược ứng phó
Biên dịch viên 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 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 biên dịch viên thường bị bỏ qua. Tuy nhiên, biên dịch viên với tư cách là một chương trình máy tính, cũng có thể tồn tại các lỗ hổng bảo mật, trong những trường hợp nhất định sẽ 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 chính EVM, các lỗ hổng của trình biên dịch Solidity chủ yếu thể hiện khi có vấn đề xảy ra trong quá trình chuyển đổi từ Solidity sang mã EVM. Điều này có thể dẫn đến mã EVM được tạo ra không phù hợp với mong đợi của nhà phát triển, từ đó gây ra sự cố khi chạy hợp đồng thông minh, đe dọa an toàn tài sản của người dùng.
Dưới đây là một vài ví dụ về lỗ hổng 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ước của trình biên dịch Solidity (>=0.1.6 <0.4.4). Trong một số trường hợp nhất định, các biến storage có thể bị thay đổi một cách không mong muốn, không phù hợp với hành vi dự kiến. Sự không nhất quán này có thể dẫn đến hậu quả nghiêm trọng, đặc biệt là khi các biến được sử dụng để xác thực quyền hạn hoặc ghi chép tài sản.
Lỗ hổng này tồn tại trong các phiên bản trình biên dịch từ 0.8.13 đến 0.8.15. Do lỗi trong quá trình tối ưu hóa biên dịch, có thể dẫn đến việc các thao tác ghi bộ nhớ bị xóa nhầm, từ đó gây ra hành vi chương trình không như mong đợi.
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, có thể xóa sai một số dữ liệu, dẫn đến việc dữ liệu lân cận bị sửa đổi, 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 với lỗ hổng của trình biên dịch Solidity, đội ngũ bảo mật blockchain Cobo đã đưa ra những khuyến nghị sau:
Đối với các nhà phát triển:
Đối với nhân viên an ninh:
Tài nguyên hữu ích:
Tóm lại, dù không cần hoảng sợ quá mức, nhưng các nhà phát triển và nhân viên bảo mật nên nhận thức đầy đủ về những rủi ro tiềm ẩn của lỗ hổng trình biên dịch Solidity, và thực hiện các biện pháp thích hợp để giảm thiểu những nguy cơ an ninh có thể xảy ra.