Phát hiện lỗ hổng tràn số nguyên trong mô-đun an toàn của ngôn ngữ Move
Gần đây, một nghiên cứu sâu đã phát hiện ra một lỗ hổng tràn số nguyên mới trong ngôn ngữ Move. Lỗ hổng này tồn tại trong quá trình xác minh an toàn tham chiếu, liên quan đến một số khái niệm và cơ chế cốt lõi của ngôn ngữ Move.
Ngôn ngữ Move sẽ thực hiện xác thực mã trước khi thực thi bytecode, chia thành bốn bước. Lỗ hổng mới phát hiện này xuất hiện trong bước reference_safety. Bước này chịu trách nhiệm xác thực tính an toàn của tham chiếu, bao gồm việc kiểm tra xem có phải tham chiếu lơ lửng hay không, tính an toàn khi truy cập tham chiếu biến và tính an toàn khi truy cập tham chiếu lưu trữ toàn cục, v.v.
Trọng tâm của xác thực an toàn là phân tích các khối cơ bản trong mỗi hàm. Khối cơ bản là một chuỗi mã không có chỉ thị nhánh ngoại trừ điểm vào và ra. Ngôn ngữ Move xác định các khối cơ bản bằng cách duyệt mã byte, tìm tất cả các chỉ thị nhánh và chỉ thị vòng lặp.
Trong quá trình xác thực, hệ thống sẽ duy trì một cấu trúc AbstractState, chứa thông tin về đồ thị vay và các biến cục bộ, nhằm đảm bảo tính an toàn của các tham chiếu trong hàm. Quy trình xác thực sẽ thực thi mã khối cơ bản, tạo ra trạng thái sau khi thực thi, sau đó sẽ hợp nhất trạng thái trước và sau khi thực thi, cập nhật trạng thái khối và truyền tải đến các khối tiếp theo.
Lỗi xảy ra trong hàm join_. Khi tổng độ dài của tham số hàm và độ dài biến cục bộ vượt quá 256, do việc sử dụng kiểu u8 để biểu diễn biến local, sẽ dẫn đến tràn số nguyên. Mặc dù ngôn ngữ Move có cơ chế kiểm tra số lượng locals, nhưng chỉ kiểm tra số lượng biến cục bộ mà không bao gồm độ dài tham số.
Lỗ hổng tràn này có thể dẫn đến tấn công từ chối dịch vụ. Kẻ tấn công có thể xây dựng một khối mã lặp, lợi dụng sự tràn để thay đổi trạng thái của khối. Khi khối cơ bản được thực thi lại, nếu chỉ thị cần truy cập chỉ số không tồn tại trong bản đồ locals mới, sẽ dẫn đến sự cố hệ thống.
Để minh họa lỗ hổng này, các nhà nghiên cứu đã cung cấp một bằng chứng khái niệm (PoC). Bằng cách thiết lập các tham số cụ thể và số lượng biến cục bộ, có thể kích hoạt tràn số nguyên, dẫn đến hệ thống panic.
Lỗ hổng này chỉ ra rằng ngay cả những ngôn ngữ được thiết kế nghiêm ngặt cũng có thể tồn tại những rủi ro về an ninh. Nó nhấn mạnh tầm quan trọng của việc kiểm tra mã, cũng như cần xem xét nhiều tình huống biên trong thiết kế ngôn ngữ. Đối với ngôn ngữ Move, nên đề xuất thêm nhiều kiểm tra an ninh tại thời gian chạy, chứ không chỉ dựa vào cơ chế an ninh ở giai đoạn xác thực.
Với việc ngôn ngữ Move được ứng dụng rộng rãi trong lĩnh vực Web3, việc nghiên cứu và phát hiện các lỗ hổng tiềm ẩn này là rất quan trọng để nâng cao tính an toàn của toàn bộ hệ sinh thái. Các nhà phát triển và các nhà nghiên cứu an ninh cần phải giữ tinh thần cảnh giác, liên tục theo dõi và cải thiện hiệu suất an toàn của ngôn ngữ Move.
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.
14 thích
Phần thưởng
14
9
Đăng lại
Chia sẻ
Bình luận
0/400
GateUser-aa7df71e
· 08-19 18:48
Một dự án nữa sắp sập, tràn ra sẽ phá sản.
Xem bản gốcTrả lời0
TokenVelocity
· 08-17 11:11
Làm việc hai năm nuôi sống mọi người, hao tổn cả gia sản, chỉ mình tôi gánh vác, 3000 ngày giấc mơ khởi nghiệp tỉnh giấc.
Xem bản gốcTrả lời0
GateUser-0717ab66
· 08-16 22:28
Ai tràn ra ai sb
Xem bản gốcTrả lời0
ForumLurker
· 08-16 22:27
move lại gây chuyện gì nữa?
Xem bản gốcTrả lời0
TokenTaxonomist
· 08-16 22:23
nói một cách thống kê, một con đường tiến hóa khác không thành công cho move... không ngạc nhiên lắm thật sự
Ngôn ngữ Move tham chiếu mô-đun bảo mật phát hiện lỗ hổng tràn số nguyên, tấn công có thể gây ra sự cố hệ thống.
Phát hiện lỗ hổng tràn số nguyên trong mô-đun an toàn của ngôn ngữ Move
Gần đây, một nghiên cứu sâu đã phát hiện ra một lỗ hổng tràn số nguyên mới trong ngôn ngữ Move. Lỗ hổng này tồn tại trong quá trình xác minh an toàn tham chiếu, liên quan đến một số khái niệm và cơ chế cốt lõi của ngôn ngữ Move.
Ngôn ngữ Move sẽ thực hiện xác thực mã trước khi thực thi bytecode, chia thành bốn bước. Lỗ hổng mới phát hiện này xuất hiện trong bước reference_safety. Bước này chịu trách nhiệm xác thực tính an toàn của tham chiếu, bao gồm việc kiểm tra xem có phải tham chiếu lơ lửng hay không, tính an toàn khi truy cập tham chiếu biến và tính an toàn khi truy cập tham chiếu lưu trữ toàn cục, v.v.
Trọng tâm của xác thực an toàn là phân tích các khối cơ bản trong mỗi hàm. Khối cơ bản là một chuỗi mã không có chỉ thị nhánh ngoại trừ điểm vào và ra. Ngôn ngữ Move xác định các khối cơ bản bằng cách duyệt mã byte, tìm tất cả các chỉ thị nhánh và chỉ thị vòng lặp.
Trong quá trình xác thực, hệ thống sẽ duy trì một cấu trúc AbstractState, chứa thông tin về đồ thị vay và các biến cục bộ, nhằm đảm bảo tính an toàn của các tham chiếu trong hàm. Quy trình xác thực sẽ thực thi mã khối cơ bản, tạo ra trạng thái sau khi thực thi, sau đó sẽ hợp nhất trạng thái trước và sau khi thực thi, cập nhật trạng thái khối và truyền tải đến các khối tiếp theo.
Lỗi xảy ra trong hàm join_. Khi tổng độ dài của tham số hàm và độ dài biến cục bộ vượt quá 256, do việc sử dụng kiểu u8 để biểu diễn biến local, sẽ dẫn đến tràn số nguyên. Mặc dù ngôn ngữ Move có cơ chế kiểm tra số lượng locals, nhưng chỉ kiểm tra số lượng biến cục bộ mà không bao gồm độ dài tham số.
Lỗ hổng tràn này có thể dẫn đến tấn công từ chối dịch vụ. Kẻ tấn công có thể xây dựng một khối mã lặp, lợi dụng sự tràn để thay đổi trạng thái của khối. Khi khối cơ bản được thực thi lại, nếu chỉ thị cần truy cập chỉ số không tồn tại trong bản đồ locals mới, sẽ dẫn đến sự cố hệ thống.
Để minh họa lỗ hổng này, các nhà nghiên cứu đã cung cấp một bằng chứng khái niệm (PoC). Bằng cách thiết lập các tham số cụ thể và số lượng biến cục bộ, có thể kích hoạt tràn số nguyên, dẫn đến hệ thống panic.
Lỗ hổng này chỉ ra rằng ngay cả những ngôn ngữ được thiết kế nghiêm ngặt cũng có thể tồn tại những rủi ro về an ninh. Nó nhấn mạnh tầm quan trọng của việc kiểm tra mã, cũng như cần xem xét nhiều tình huống biên trong thiết kế ngôn ngữ. Đối với ngôn ngữ Move, nên đề xuất thêm nhiều kiểm tra an ninh tại thời gian chạy, chứ không chỉ dựa vào cơ chế an ninh ở giai đoạn xác thực.
Với việc ngôn ngữ Move được ứng dụng rộng rãi trong lĩnh vực Web3, việc nghiên cứu và phát hiện các lỗ hổng tiềm ẩn này là rất quan trọng để nâng cao tính an toàn của toàn bộ hệ sinh thái. Các nhà phát triển và các nhà nghiên cứu an ninh cần phải giữ tinh thần cảnh giác, liên tục theo dõi và cải thiện hiệu suất an toàn của ngôn ngữ Move.