BitsLab phát hiện lỗ hổng nhân TON VM: nguyên nhân gốc rễ và biện pháp giảm thiểu chi tiết

Báo cáo này phân tích chi tiết về các chi tiết kỹ thuật, nguyên nhân cơ bản và các phương pháp tấn công có thể của lỗ hổng DoS cốt lõi tồn tại trong TON Máy ảo, đồng thời trình bày giải pháp hiệu quả được đề xuất bởi nhóm TonBit.

Gần đây, hệ thống Máy ảo của mạng TON đã được nâng cấp bảo mật quan trọng. Nhóm an ninh TonBit thuộc BitsLab đã thành công phát hiện và hỗ trợ khắc phục một lỗ hổng lõi có thể dẫn đến tiêu thụ tài nguyên TON Máy ảo. Lỗ hổng này tận dụng cơ chế đệ quy khi xử lý Continuation lồng nhau của Máy ảo, có thể bị hợp đồng độc hại lợi dụng, gây sự cố hệ thống và mạng không ổn định.

Nếu lỗ hổng này bị lợi dụng một cách ác ý, có thể khiến cho tất cả các nút xác minh bị sập, đe dọa trực tiếp tính sẵn có của mạng mà không cần phải tiêu thụ một TON. Trong sự cố này, TonBit đã nhanh chóng xác định lỗ hổng bằng khả năng kỹ thuật xuất sắc của mình và đưa ra một giải pháp sáng tạo thay thế đệ quy bằng đệ quy thông qua việc điều chỉnh cơ chế điều khiển nội bộ của máy ảo, thành công xây dựng một môi trường sinh thái an toàn hơn cho người dùng TON. Đội ngũ chính thức của TON đã đặc biệt cảm ơn TonBit vì đóng góp xuất sắc cho an ninh sinh thái trong thông báo cập nhật mới nhất của họ.

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

Nghiên cứu trường hợp: Lỗ hổng DoS trong TON VM và các biện pháp hạn chế 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 và các biện pháp giảm nhẹ để khắc phục vấn đề này. Lỗ hổng này xảy ra do cách Máy ảo xử lý một Continuation lồng nhau trong quá trình thực thi hợp đồng. Lỗ hổng này cho phép hợp đồng độc hại tạo ra Continuation và lồng sâu theo cách cụ thể, từ đó kích hoạt đệ quy sâu trong quá trình đánh giá, tiêu tốn không gian stack của máy chủ và làm cho Máy ảo dừng hoạt động. Để giảm nhẹ vấn đề này, Máy ảo đã thay đổi cách xử lý Continuation và luồng điều khiển. Bây giờ, Máy ảo không còn thực hiện cuộc gọi đuôi tuần tự thông qua chuỗi Continuation mà thay vào đó lặp lại chuỗi một cách chủ động. Phương pháp này đảm bảo chỉ sử dụng không gian stack máy chủ không đổi, ngăn chặn tràn stack.

Tổng quan

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 kiểu truyền tiếp Continuation-Passing Style (CPS) làm cơ chế điều khiển của nó, được sử dụng cho luồng nội bộ và hợp đồng thông minh. Đăng ký luồng điều khiển là có thể truy cập từ hợp đồng, do đó cung cấp tính linh hoạt.

TVM中的Continuation理论上可以分为三类:

OrdCont(即vmc_std),bao gồm các đoạn TON ASM cần thực thi, là một đối tượng cấp độ một trong TVM. Hợp đồng có thể tạo ra chúng một cách rõ ràng trong thời gian chạy và truyền chúng để thực hiện bất kỳ luồng điều khiển nào.

Không phải là Continuation thông thường (tiếp tục phi thường), thường chứa OrdCont như một phần, được tạo ra thông qua ngôn ngữ lập trình vòng lặp rõ ràng và các hoạt động ngụ ý đặc biệt, được sử dụng để xử lý cơ chế luồng điều khiển tương ứng.

ArgContExt额外,封装其他Continuation以保存控制数据。

Trong quá trình thực hiện hợp đồng, Máy ảo đi vào vòng lặp chính và giải mã một ký tự của đoạn hợp đồng mỗi lần, và phân chia thao tác tương ứng vào các chương trình xử lý thích hợp. Các chương trình xử lý thông thường trả về ngay sau khi thực hiện thao tác tương ứng.

Tương đối, hướng dẫn lặp lại sẽ sử dụng Continuation được cung cấp như một thành phần để tạo ra một Continuation không phổ thông và chuyển đến Continuation không phổ thông trong ngữ cảnh phù hợp. Chính Continuation không phổ thông sẽ thực hiện các logic khi chuyển đổi và dựa vào điều kiện để chuyển đến một thành phần nào đó. Ví dụ, khi sử dụng hướng dẫn WHILE, chúng ta có thể minh họa quá trình này trong hình 1 (bỏ qua khả năng thoát khỏi).

Hình 1: Logic Continuation không phải là thông thường

Nguyên nhân cơ bản

Trong các phiên bản Máy ảo có lỗi này, các nhảy này sẽ dẫn đến cuộc gọi đuôi động liên tục, yêu cầu ngăn xếp chính phải duy trì một khung ngăn xếp cho mỗi lần nhảy (như hình 2).

Ví dụ với WhileCont, các phần khác được lược bỏ để ngắn gọn.

Hình 2: Đa nhảy tái phát đệ quy để thâm nhập vào lồng bẫy

Trong tình huống lý tưởng, điều này sẽ không tạo thành vấn đề, vì các thành phần thường được biểu thị dưới dạng OrdCont, chỉ lưu trữ ngữ cảnh hiện tại và sau đó chỉ định Máy ảo thực hiện các đoạn mã mà nó giữ, thực hiện trước các đoạn mã hợp đồng còn lại và không tạo thêm đệ quy. Tuy nhiên, Continuation không phổ thông trong lý thuyết cho phép các thành phần của nó truy cập vào thanh ghi cc (c0) trong TVM (nhánh set_c0 đã được đề cập trong văn bản trên). Do đó, hợp đồng có thể lạm dụng tính năng này để thực hiện đệ quy Độ sâu (được mô tả sau). So với việc thay đổi cài đặt của chức năng thông thường này, loại bỏ đệ quy trực tiếp trong quá trình chuyển tiếp của Continuation không phổ biến là rõ ràng và dễ dàng hơn.

Bằng cách sử dụng tiếp tục không phổ thông đã có để xây dựng tiếp tục không phổ thông cấp trên, bạn có thể tạo ra một Máy ảo lồng Độ sâu bằng cách lặp lại. Những tiếp tục lồng Độ sâu này, khi được đánh giá, có thể làm cạn không gian ngăn chứa stack có sẵn của máy chủ, dẫn đến hệ điều hành phát ra tín hiệu SIGSEGV và kết thúc quá trình Máy ảo.

Hình 3 cung cấp bằng chứng khái niệm của quá trình nhúng (PoC).

Hình 3: Quá trình lắp ráp bẫy

Chúng ta thấy rằng trong mỗi lần lặp, phần thân được mở rộng bởi một WhileCont{chkcond=true}. Bằng cách thực thi cc được tạo và lưu trong lần lặp trước, bạn sẽ nhận được một ngăn xếp cuộc gọi trông như thế này:

Có thể thấy, không gian ngăn xếp và mức độ lồng nhau (tức số lần lặp lại) có mối quan hệ phụ thuộc tuyến tính, điều này cho thấy có thể gây ra tình trạng cạn kiệt không gian ngăn xếp.

Về việc sử dụng trong môi trường thực tế

Trong Blockchain thực tế, việc hạn chế phí nhiên liệu làm cho việc xây dựng hợp đồng độc hại khá khó khăn. Do tính tuyến tính của quá trình lồng ghép (TVM hiệu quả ngăn chặn việc xây dựng rẻ tiền hơn thông qua việc tự tham chiếu), việc phát triển một hợp đồng độc hại thực tế là không dễ dàng. Cụ thể, một lớp lồng ghép sẽ tạo ra một chuỗi gọi, tiêu tốn ba khung ngăn xếp chính trong tệp nhị phân để gỡ lỗi (320 byte), trong khi tiêu tốn hai khung ngăn xếp trong tệp nhị phân đã xuất bản (256 byte, hai cuộc gọi cuối cùng được nhúng vào một cuộc gọi). Đối với Nút xác minh 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, điều này đủ để hỗ trợ hơn 30.000 lớp lồng ghép trong tệp nhị phân đã xuất bản. Mặc dù vẫn có thể xây dựng một hợp đồng có thể tiêu tốn hết không gian ngăn xếp, nhưng điều này khó khăn hơn nhiều so với ví dụ ở phần trước.

Biện pháp giảm nhẹ

Bản vá này đã thay đổi hành vi chuyển nhảy trong trường hợp lồng ghép Continuation. Chúng ta có thể thấy chữ ký của chuyển nhảy Continuation đã thay đổi.

Ví dụ với UntilCont, các phần khác được lược bỏ vì sự ngắn gọn.

Không còn gọi VmState::jump để chuyển đến Continuation tiếp theo, điều này có nghĩa là thực hiện nhảy ba lần đệ quy trên mỗi Continuation và chờ giá trị trả về truyền ngược. Bây giờ, nhảy Continuation chỉ giải quyết mức tiếp theo của Continuation, sau đó trả lại quyền điều khiển cho Máy ảo.

Máy ảo thông qua việc hợp tác lặp lại giải mã từng cấp độ của continuation, cho đến khi gặp một NullRef, cho biết việc giải mã chuỗi đã hoàn tất (được thực hiện trong OrdCont hoặc ExuQuitCont). Trong quá trình lặp này, chỉ có một việc gán continuation nhảy trên ngăn xếp chủ, đảm bảo việc sử dụng ngăn xếp luôn duy trì ổn định.

Kết luận

Đối với các dịch vụ cần có tính sẵn sàng cao, việc sử dụng đệ quy có thể trở thành Vectơ tấn công tiềm ẩn. Khi liên quan đến logic do người dùng xác định, việc chấm dứt đệ quy một cách bắt buộc có thể đầy thách thức. Lỗ hổng DoS này thể hiện một trường hợp cực đoan khi chức năng bình thường bị lạm dụng một cách không nguyên tắc khi tài nguyên bị hạn chế (hoặc trong các điều kiện hạn chế khác). Nếu đệ quy phụ thuộc vào đầu vào của người dùng, vấn đề tương tự có thể xảy ra, điều này rất phổ biến trong các ngôn ngữ điều khiển Máy ảo.

Báo cáo này phân tích chi tiết về các chi tiết kỹ thuật của lỗ hổng DoS lõi tồn tại trong Máy ảo TON, nguyên nhân cơ bản và cách tấn công có thể xảy ra, đồng thời trình bày giải pháp hiệu quả được đề xuất bởi nhóm TonBit. Bằng cách điều chỉnh cơ chế chuyển hướng đệ quy của Máy ảo thành xử lý lặp, TonBit đã thành công đề xuất giải pháp để khắc phục lỗ hổng, giúp khắc phục lỗ hổng lõi có thể gây ra sự tê liệt mạng, mang lại bảo vệ an ninh mạnh mẽ hơn cho hệ sinh thái TON. Sự kiện này không chỉ thể hiện sự tích luỹ sâu sắc của TonBit trong lĩnh vực an ninh công nghệ cơ bản của chuỗi khối, mà còn cho thấy vai trò quan trọng của họ là Nhà cung cấp Đảm bảo An ninh Chính thức của TON (SAP).

TonBit, như một đối tác an ninh không thể thiếu của sinh thái TON, luôn tiên phong trong việc bảo vệ tính ổn định của mạng lưới Khối và an toàn tài sản của người dùng. Từ việc phát hiện lỗ hổng đến thiết kế giải pháp, với khả năng kỹ thuật mạnh mẽ và sự hiểu biết sâu sắc về sự phát triển của mạng lưới Khối, TonBit đã đặt nền tảng vững chắc cho sự phát triển bền vững của mạng lưới TON. Đồng thời, đội ngũ TonBit cũng liên tục nỗ lực trong các lĩnh vực 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 của các trường hợp sử dụng của mạng lưới Khối. Trong tương lai, TonBit sẽ tiếp tục đóng góp và đảm bảo sự hỗ trợ liên tục và bảo đảm cho sinh thái TON và toàn bộ ngành công nghiệp mạng lưới Khối thông qua việc tiến bộ công nghệ an ninh dựa trên sáng tạo. Việc phát hiện lỗ hổng này và hỗ trợ công việc khắc phục đã nhận được sự công nhận cao từ phía TON, từ đó củng cố thêm vị trí hàng đầu của TonBit trong lĩnh vực an ninh mạng lưới Khối và thể hiện cam kết mạnh mẽ 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.

Trang web chính thức của TonBit:

Twitter chính thức của TonBit:

Telegram:

Linkedin:

Blog: #blogs

Liên hệ về yêu cầu kiểm toán Telegram: @starchou

Xem bản gốc
Nội dung chỉ mang tính chất tham khảo, không phải là lời chào mời hay đề nghị. Không cung cấp tư vấn về đầu tư, thuế hoặc pháp lý. Xem Tuyên bố miễn trừ trách nhiệm để biết thêm thông tin về rủi ro.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate.io
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)