
BitsLab 旗下 TonBit phát hiện lỗ hổng cốt lõi trong TON VM: Phân tích chi tiết nguyên nhân gốc rễ và các biện pháp khắc phục
Tuyển chọn TechFlowTuyển chọn TechFlow

BitsLab 旗下 TonBit phát hiện lỗ hổng cốt lõi trong TON VM: Phân tích chi tiết nguyên nhân gốc rễ và các biện pháp khắc phục
Báo cáo này phân tích chi tiết các khía cạnh kỹ thuật, nguyên nhân cốt lõi và các phương thức tấn công có thể xảy ra đối với lỗ hổng DoS trọng yếu tồn tại trong Máy ảo TON, đồng thời trình bày giải pháp hiệu quả do nhóm TonBit đề xuất.
Gần đây, hệ thống máy ảo của mạng TON đã đón nhận một nâng cấp bảo mật quan trọng. Đội an toàn TonBit thuộc BitsLab đã thành công phát hiện và hỗ trợ sửa chữa một lỗ hổng cốt lõi có thể dẫn đến việc cạn kiệt tài nguyên của máy ảo TON. Lỗ hổng này khai thác cơ chế đệ quy khi máy ảo xử lý các Continuation lồng ghép, có thể bị hợp đồng độc hại lợi dụng để gây sập hệ thống và làm mất ổn định mạng.
Nếu lỗ hổng này bị lợi dụng ác ý, chỉ cần không tiêu tốn lấy một TON, kẻ tấn công cũng có thể khiến tất cả các nút xác thực (validator) sập hoàn toàn, trực tiếp đe dọa tính khả dụng của mạng lưới. Trong sự kiện lần này, TonBit đã nhanh chóng xác định vị trí lỗ hổng nhờ năng lực kỹ thuật xuất sắc, đồng thời đề xuất giải pháp sáng tạo thay thế cơ chế đệ quy bằng cơ chế lặp, từ đó giúp xây dựng một môi trường sinh thái an toàn hơn cho người dùng TON. Nhóm chính thức của TON trong thông báo cập nhật mới nhất đã đặc biệt gửi lời cảm ơn TonBit vì những đóng góp xuất sắc cho an ninh sinh thái.

Trong báo cáo an ninh chi tiết dưới đây, chúng tôi sẽ đi sâu phân tích nguyên nhân, chi tiết kỹ thuật và giải pháp khắc phục cho lỗ hổng này. Báo cáo mô tả rõ cách thức mà lỗ hổng sử dụng việc lồng ghép sâu các Continuation để tạo chuỗi đệ quy kích hoạt tấn công làm cạn kiệt tài nguyên, cũng như cách hợp đồng độc hại mở rộng ngăn xếp gọi để làm cạn không gian ngăn xếp của máy chủ. Đồng thời, chúng tôi cũng sẽ giới thiệu cách đội TonBit đã loại bỏ thiết kế lỗi trong chuỗi đệ quy, chuyển sang cơ chế lặp phối hợp nhằm hỗ trợ giải quyết triệt để vấn đề này. Việc sửa lỗi không chỉ cải thiện đáng kể tính ổn định của mạng TON mà còn cung cấp tham khảo quan trọng cho an ninh nền tảng ngành blockchain.

Nghiên cứu điển hình: Lỗ hổng DoS trong TON VM và các biện pháp giảm thiểu liên quan
Giới thiệu
Báo cáo này mô tả một lỗ hổng DoS (từ chối dịch vụ) trong máy ảo TON cùng với các biện pháp giảm thiểu vấn đề. Lỗ hổng xảy ra do cách máy ảo xử lý việc lồng ghép Continuation trong quá trình thực thi hợp đồng. Lỗ hổng cho phép hợp đồng độc hại tạo ra Continuation và lồng ghép sâu theo một cách cụ thể, từ đó kích hoạt đệ quy sâu trong quá trình đánh giá, làm cạn không gian ngăn xếp của máy chủ và khiến máy ảo ngừng hoạt động. Để giảm thiểu vấn đề này, máy ảo đã điều chỉnh cách xử lý Continuation và luồng điều khiển. Thay vì thực hiện các lời gọi đuôi tuần tự qua chuỗi Continuation, giờ đây máy ảo chủ động lặp lại chuỗi đó. Phương pháp này đảm bảo chỉ sử dụng không gian ngăn xếp cố định trên máy chủ, ngăn chặn tràn ngăn xếp.
Tóm tắt
Theo tài liệu chính thức, TON VM là một máy ảo dựa trên ngăn xếp, sử dụng Continuation-Passing Style (CPS - phong cách truyền tiếp tục) làm cơ chế luồng điều khiển cho các tiến trình nội bộ và hợp đồng thông minh. Các thanh ghi luồng điều khiển có thể truy cập được bởi hợp đồng, mang lại sự linh hoạt.
Continuation trong TVM về lý thuyết có thể chia thành ba loại:
-
OrdCont (tức vmc_std), chứa các đoạn mã TON ASM cần thực thi, là đối tượng cấp một trong TVM. Hợp đồng có thể tạo và truyền chúng một cách tường minh tại thời điểm chạy để đạt được luồng điều khiển tùy ý.
-
Các Continuation phi thường (Extraordinary continuations), thường bao gồm OrdCont như thành phần, được tạo bởi các nguyên thủy lặp tường minh và các thao tác ngầm đặc biệt, dùng để xử lý các cơ chế luồng điều khiển tương ứng.
-
ArgContExt bổ sung, đóng gói các Continuation khác để lưu dữ liệu điều khiển.
Trong quá trình thực thi hợp đồng, máy ảo đi vào vòng lặp chính, mỗi lần giải mã một byte của đoạn hợp đồng và phân phối thao tác tương ứng đến trình xử lý phù hợp. Các trình xử lý thông thường trả về ngay lập tức sau khi thực hiện thao tác tương ứng.
Ngược lại, các lệnh lặp sẽ tạo một Continuation phi thường bằng cách sử dụng Continuation được cung cấp làm thành phần, rồi nhảy đến Continuation phi thường đó trong ngữ cảnh thích hợp. Bản thân Continuation phi thường thực hiện logic khi nhảy và theo điều kiện sẽ nhảy đến một thành phần nào đó. Ví dụ, khi dùng lệnh WHILE, ta có thể minh họa quá trình này trong Hình 1 (bỏ qua các khả năng thoát).

Hình 1: Logic của Continuation phi thường
Nguyên nhân gốc rễ
Trong phiên bản máy ảo tồn tại lỗ hổng, các bước nhảy này gây ra các lời gọi đuôi động liên tiếp, yêu cầu ngăn xếp máy chủ duy trì một khung ngăn xếp cho mỗi lần nhảy (như Hình 2 minh họa).

Lấy WhileCont làm ví dụ, các phần khác được lược bỏ để ngắn gọn.

Hình 2: Đệ quy ba tầng nhảy để lồng ghép sâu
Lý tưởng thì điều này sẽ không thành vấn đề, vì các thành phần thường được biểu diễn dưới dạng OrdCont, việc nhảy của chúng chỉ lưu ngữ cảnh hiện tại, sau đó chỉ thị cho máy ảo thực thi đoạn mã nó nắm giữ trước các đoạn mã hợp đồng còn lại, không tạo thêm đệ quy. Tuy nhiên, về mặt lý thuyết, Continuation phi thường được thiết kế cho phép thành phần của nó truy cập qua thanh ghi cc (c0) trong TVM (tức nhánh set_c0 nói trên). Do đó, hợp đồng có thể lạm dụng chức năng này để thực hiện đệ quy sâu (sẽ mô tả sau). So với việc thay đổi cách triển khai chức năng thông thường này, thì việc loại bỏ đệ quy trực tiếp trong quá trình nhảy của Continuation phi thường rõ ràng và dễ dàng hơn.
Bằng cách lặp đi lặp lại sử dụng Continuation phi thường đã thu được để xây dựng Continuation phi thường cấp cao hơn, có thể tạo ra một Continuation lồng ghép sâu thông qua vòng lặp. Khi đánh giá các Continuation lồng ghép sâu này, có thể làm cạn không gian ngăn xếp khả dụng của máy chủ, khiến hệ điều hành phát tín hiệu SIGSEGV và chấm dứt tiến trình máy ảo.
Hình 3 cung cấp minh chứng khái niệm (PoC) cho quá trình lồng ghép.


Hình 3: Quá trình lồng ghép
Chúng ta thấy rằng trong mỗi lần lặp, phần thân mở rộng thêm một WhileCont{chkcond=true}. Bằng cách thực thi cc được tạo và lưu ở lần lặp trước, sẽ có được một ngăn xếp gọi giống như sau:

Có thể thấy, không gian ngăn xếp phụ thuộc tuyến tính vào mức độ lồng ghép (tức số lần lặp), điều này cho thấy khả năng làm cạn không gian ngăn xếp.
Về việc khai thác trong môi trường thực tế
Trong blockchain thực tế, giới hạn phí nhiên liệu khiến việc xây dựng hợp đồng độc hại trở nên khó khăn đáng kể. Do độ phức tạp tuyến tính của quá trình lồng ghép (thiết kế TVM ngăn chặn hiệu quả việc xây dựng rẻ hơn thông qua tự tham chiếu), việc phát triển một hợp đồng độc hại khả thi không hề dễ dàng. Cụ thể, một tầng lồng ghép sẽ tạo ra một chuỗi gọi, tiêu thụ ba khung ngăn xếp máy chủ trong tệp nhị phân gỡ lỗi (320 byte), và hai khung trong tệp nhị phân phát hành (256 byte, hai lời gọi sau được nội tuyến hóa thành một). Với các nút xác thực chạy trên hệ điều hành POSIX hiện đại, kích thước ngăn xếp mặc định là 8MiB, đủ để hỗ trợ hơn 30.000 tầng lồng ghép trong tệp nhị phân phát hành. Mặc dù vẫn có thể xây dựng hợp đồng làm cạn ngăn xếp, nhưng khó khăn hơn nhiều so với ví dụ ở phần trước.
Biện pháp giảm thiểu
Bản vá đã thay đổi hành vi nhảy trong trường hợp lồng ghép Continuation. Chúng ta có thể thấy chữ ký của phép nhảy Continuation đã thay đổi.

Lấy UntilCont làm ví dụ, các phần khác được lược bỏ để ngắn gọn.
Thay vì gọi VmState::jump để nhảy đến Continuation tiếp theo, nghĩa là đệ quy thực hiện ba lần nhảy trên mỗi Continuation và chờ giá trị trả về lan ngược lại. Giờ đây, phép nhảy Continuation chỉ giải quyết cấp tiếp theo của Continuation, sau đó trả quyền điều khiển về cho máy ảo.

Máy ảo thông qua cơ chế hợp tác để lần lượt giải quyết từng cấp độ continuation, cho đến khi gặp một NullRef, cho biết việc giải chuỗi đã hoàn tất (như được triển khai trong OrdCont hoặc ExuQuitCont). Trong suốt quá trình lặp này, chỉ luôn luôn cấp phát một phép nhảy continuation duy nhất trên ngăn xếp máy chủ, từ đó đảm bảo việc sử dụng ngăn xếp luôn ở mức hằng định.

Kết luận
Đối với các dịch vụ yêu cầu tính sẵn sàng cao, việc sử dụng đệ quy có thể trở thành một vector tấn công tiềm tàng. Khi liên quan đến logic do người dùng định nghĩa, việc buộc chấm dứt đệ quy có thể rất thách thức. Lỗ hổng DoS này minh họa một trường hợp cực đoan khi chức năng bình thường bị lạm dụng ngoài ý muốn trong điều kiện bị giới hạn tài nguyên (hoặc các ràng buộc khác). Nếu đệ quy phụ thuộc vào đầu vào người dùng, các vấn đề tương tự có thể xảy ra, điều này khá phổ biến trong các nguyên thủy luồng điều khiển của máy ảo.
Báo cáo này phân tích chi tiết các khía cạnh kỹ thuật, nguyên nhân gốc rễ và các phương thức tấn công có thể có của lỗ hổng DoS cốt lõi trong máy ảo TON, đồng thời trình bày giải pháp hiệu quả do đội TonBit đề xuất. Bằng cách điều chỉnh cơ chế nhảy đệ quy của máy ảo thành xử lý theo kiểu lặp, TonBit đã thành công đưa ra giải pháp sửa lỗi, hỗ trợ khắc phục lỗ hổng cốt lõi có thể khiến mạng lưới tê liệt, mang lại sự bảo vệ an ninh vững chắc hơn cho sinh thái TON. Sự kiện này không chỉ thể hiện nền tảng vững chắc của TonBit trong lĩnh vực an ninh công nghệ nền tảng blockchain, mà còn khẳng định vai trò quan trọng của họ với tư cách là Nhà cung cấp Đảm bảo An ninh Chính thức (Security Assurance Provider - SAP) của TON.
Là đối tác an ninh không thể thiếu trong sinh thái TON, TonBit luôn đi đầu trong việc bảo vệ tính ổn định của mạng blockchain và an toàn tài sản người dùng. Từ việc phát hiện lỗ hổng đến thiết kế giải pháp, TonBit凭借 năng lực kỹ thuật mạnh mẽ và hiểu biết sâu sắc về sự phát triển blockchain đã đặt nền móng vững chắc cho sự phát triển lâu dài của mạng TON. Đồng thời, đội ngũ TonBit cũng đang nỗ lực không ngừng trong các lĩnh vực như kiến trúc an ninh mạng, bảo vệ dữ liệu người dùng và nâng cao tính an toàn trong các tình huống ứng dụng blockchain. Trong tương lai, TonBit sẽ tiếp tục thúc đẩy tiến bộ công nghệ an ninh bằng đổi mới, cung cấp nguồn hỗ trợ và bảo đảm liên tục cho sự phát triển lành mạnh của sinh thái TON cũng như toàn ngành blockchain. Công tác phát hiện và hỗ trợ sửa lỗi lần này đã nhận được sự ghi nhận cao từ đội ngũ chính thức của TON, củng cố thêm vị thế ngành của TonBit trong lĩnh vực an ninh blockchain, đồng thời thể hiện cam kết kiên định của họ đối với việc thúc đẩy sự phát triển của sinh thái phi tập trung.
Website chính thức TonBit: https://www.tonbit.xyz/
Twitter chính thức TonBit: https://x.com/tonbit_
Telegram: https://t.me/BitsLabHQ
Linkedin: https://www.linkedin.com/company/tonbit-team/
Blog: https://www.tonbit.xyz/#blogs
Liên hệ Telegram đặt hàng kiểm toán: @starchou
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














