- Lupin và Justin đã khảo sát sandbox Python của bản xem trước Gemini tại LLM bugSWAT 2024 của Google ở Las Vegas, trích xuất được
/usr/bin/entry/entry_pointvà cấu trúc tệp nội bộ; nhờ lỗ hổng này, họ giành danh hiệu Most Valuable Hacker - Sandbox dựa trên gVisor và GRTE, bị chặn mạng bên ngoài, nhưng mã của người dùng vẫn có thể dùng module
osđể duyệt hệ thống tệp, cho phép đưa các binary nội bộ ra ngoài dưới dạng các đoạn output trên console - Tệp
entry_point579MB nếu xuất trực tiếp sẽ bị timeout, nên họ dùngseek()và mã hóa base64 để tạo các chunk 10MB, rồi dùng Caido Automate gửi yêu cầu lặp lại và ráp lại ở máy cục bộ - Phân tích bằng Binwalk làm lộ thư mục
google3và mã Python liên quan đến sandbox Gemini; khác với phần mã đã được chấp thuận công khai,classification.protocùng nhiều định nghĩa proto bảo mật là thông tin nội bộ mật bị đưa vào ngoài ý muốn - Họ xác nhận cấu trúc sandbox kết nối bằng RPC với các công cụ như Google Flights và khả năng truy cập sandbox agent có đặc quyền cao hơn, nhưng handler đọc tệp nội bộ bị nghi ngờ không thể dùng qua RPC mà chỉ có thể được gọi từ bên ngoài
bugSWAT 2024 và quyền truy cập bản xem trước Gemini
- Lupin và Justin được truy cập sớm bản xem trước của bản cập nhật Gemini tiếp theo tại sự kiện Google LLM bugSWAT năm 2024 ở Las Vegas
- Nhóm Google cung cấp tài liệu mô tả các tính năng mới và hành vi dự kiến; mục tiêu của các nhà nghiên cứu là khám phá và kiểm thử tính năng từ góc nhìn của kẻ tấn công
- Khi bắt đầu bằng prompt đơn giản
run hello world in python3, Gemini tạo mã và cung cấp nút Run in Sandbox trên giao diện - Nhờ kết quả nghiên cứu lỗ hổng này, hai người nhận danh hiệu Most Valuable Hacker tại Las Vegas bugSWAT đó
Cấu trúc cơ bản của sandbox Python trong Gemini
- Khi đó Gemini cung cấp Python Sandbox Interpreter, cho phép chạy mã Python do AI tạo ra hoặc script do người dùng tự viết bên trong môi trường Gemini
- Sandbox được xây dựng dựa trên gVisor của Google và GRTE(Google Runtime Environment)
- gVisor là kernel ở không gian người dùng, chặn các system call giữa ứng dụng container hóa và hệ điều hành host
- Thay vì chỉ dựa vào cô lập ở cấp OS truyền thống, nó triển khai một tập con tối giản các chức năng kernel để giảm bề mặt tấn công
- Các nhà nghiên cứu xem việc thoát sandbox gVisor là một bài toán khó riêng biệt, và sandbox escape có thể thuộc diện nhận tiền thưởng tối đa $100k
- Cách tiếp cận lần này không phải thoát sandbox, mà là tìm xem bên trong sandbox có dữ liệu nào không nên bị lộ ra ngoài hay không
- Ràng buộc cốt lõi là sandbox chỉ có thể chạy binary Python được biên dịch tùy chỉnh
Mapping hệ thống tệp và phát hiện entry_point
- Từ frontend, họ có thể viết lại hoàn toàn mã Python để chạy phiên bản tùy ý trong sandbox
- Dù không thể mở shell, binary Python tùy chỉnh có kèm module
os, nên có thể lập bản đồ hệ thống tệp - Các nhà nghiên cứu viết một hàm Python liệt kê đệ quy tệp và thư mục, đồng thời in ra kích thước và quyền
- Kết quả gọi
lslR("/usr")cho thấy một tệp binary tại/usr/bin/entry/entry_point - Tệp này có kích thước 579MB và trở thành đối tượng trọng tâm của phân tích sau đó
Cách đưa binary ra ngoài khi không có mạng
- Khi thử mã hóa base64 trực tiếp
entry_pointvà in ra frontend, sandbox bị treo rồi cuối cùng timeout - Mọi nỗ lực exfiltrate qua TCP, HTTP, DNS đều thất bại; sandbox trông như bị cô lập hoàn toàn khỏi mạng bên ngoài
- Khi các lệnh gọi ra ngoài bị chặn, các nhà nghiên cứu chọn cách chia nhỏ binary và đưa ra qua output console
- Họ dùng
seek()để di chuyển vị trí đọc trong binary, mã hóa base64 rồi in ra theo các chunk 10MB - Họ dùng Caido làm proxy để bắt yêu cầu gọi sandbox và kết quả, rồi dùng tính năng Automate để gửi lặp lại yêu cầu
- Automate là tính năng cho phép gửi số lượng lớn yêu cầu và thay đổi nhanh các tham số cụ thể
- Sau khi thu thập tất cả chunk base64, họ tái dựng toàn bộ tệp ở máy cục bộ
Kết quả phân tích entry_point
- Lệnh
filenhận diện tệp này là binary liên kết động ở định dạngELF 64-bit LSB shared object, x86-64, version 1 (SYSV) - Output của lệnh
stringsxuất hiện nhiều tham chiếu google3, trỏ tới kho lưu trữ nội bộ của Google - Các tham chiếu này gợi ý sự tồn tại của đường dẫn dữ liệu nội bộ và các mảnh mã, cho thấy binary có dấu vết phần mềm độc quyền của Google
- Binwalk cung cấp manh mối quyết định
- Nó trích xuất toàn bộ cấu trúc tệp bên trong binary
- Kết quả trích xuất làm lộ layout sandbox và các thành phần nội bộ
Thư mục google3 và mã Python liên quan đến Gemini
- Trong thư mục được Binwalk trích xuất có thư mục
google3, bao gồm các thư mục con nhưassistant,base,devtools,file,google,net,pyglib,testing,third_party,util - Trong thư mục
assistant, họ phát hiện mã Gemini liên quan đến RPC dùng để xử lý yêu cầu công cụ như YouTube, Google Flights, Google Maps - Đặc biệt, dưới
google3/assistant/boq/lamda/execution_box/có các tệp Python liên quan đến thực thi sandbox, xử lý hình ảnh, sử dụng công cụ và giao diện RPC google3/assistant/boq/lamda/execution_box/images/py_interpreter.pychứa đoạn mã có vẻ là chuỗi dùng để phát hiện việc dump script trái phép- Chuỗi đó là
"3AVp#dzcQj$U?uLOj+Gl]GlY<+Z8DnKh"
- Chuỗi đó là
- Trong quá trình xem xét sau đó, phần mã Python nội bộ Google3 này được kết luận là lựa chọn đã được Google Security Team chấp thuận cho lộ công khai trước khi phát hành
- Dù mã này có các yếu tố trông giống cơ chế chống dump, bản thân việc lộ công khai đã được chấp thuận
Cấu trúc RPC giữa sandbox và các công cụ Google
- Phân tích sâu hơn xác nhận sandbox giao tiếp với các máy chủ Google bên ngoài để lấy dữ liệu dịch vụ Google như Google Flights
- Giao tiếp này được triển khai thông qua các lớp Python trong
google3.assistant.boq.lamda.execution_box.sandbox_interface - Các hàm như
_set_reader_and_writerthiết lập handle reader và writer cho RPC- Hành vi mặc định có vẻ dùng
/dev/fd/3và/dev/fd/4
- Hành vi mặc định có vẻ dùng
run_tool(name, operation_id, parameters)nhận tên công cụ, ID tác vụ và tham số, tạoRunToolRequestrồi chuyển thành yêu cầu RPC- Các hàm tuần tự hóa dữ liệu sang định dạng tương thích protobuf, ghi vào file descriptor cục bộ
5, rồi đọc phản hồi từ file descriptor7 - Dựa trên các proto tìm thấy trong binary lớn, các nhà nghiên cứu có thể tạo thông điệp trao đổi với RPC server và gọi trực tiếp các công cụ Google
Sandbox agent và khác biệt về quyền
- Không phải sandbox nào cũng có thể truy cập cùng một tập dịch vụ Google
- Sự khác biệt phụ thuộc vào việc sandbox được tạo để chạy mã nguồn Python từ frontend hay do Google Agent tạo ra
- Nhóm Google chỉ ra nghiên cứu nền tảng của Gemini là REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS
- Cách tiếp cận ReAct có cấu trúc trong đó mô hình ngôn ngữ luân phiên tạo dấu vết suy luận và thực hiện hành động cụ thể
- Mô hình vừa giải quyết vấn đề vừa lập kế hoạch, tương tác với nguồn bên ngoài để lấy dữ liệu cần thiết
- Đây được giới thiệu là framework áp dụng cho các tác vụ như hỏi đáp, kiểm chứng sự thật, game dựa trên văn bản và duyệt web
- Nếu người dùng hỏi chuyến bay sớm nhất giữa Toronto và New York, Gemini có thể có luồng đại khái như sau
- Diễn giải ý định của người dùng là tìm kiếm chuyến bay
- Lập kế hoạch mã Python để kết nối với công cụ Google Flights
- Tạo mã tìm các chuyến bay từ YYZ đến JFK từ hôm nay đến tuần sau và sắp xếp theo ngày
- Tạo sandbox có quyền cần thiết và chạy mã
- Xử lý output và trả lời người dùng
Thử nghiệm prompt injection phụ trợ và giới hạn
- Các nhà nghiên cứu thử prompt injection bậc hai vào giai đoạn lập kế hoạch của Gemini để xem có thể truy cập sandbox có đặc quyền cao hơn hay không
- Với sự hỗ trợ của Google Security Team, thử nghiệm cho thấy đôi khi có thể truy cập một môi trường trông như sandbox có đặc quyền cao hơn, tùy vào các yếu tố ngẫu nhiên như seed sinh và temperature
- Sandbox có đặc quyền cao hơn ở đây là môi trường có thể dùng hai file descriptor mới để truy cập tiện ích mở rộng
- Bản thân các file descriptor luôn tồn tại nhưng không phải lúc nào cũng thực sự listen
- Khi agent gọi sandbox, nó có thể giám sát lời gọi tiện ích mở rộng dịch vụ Google và tương tác với API
- Khi truy cập từ Python interpreter, các tiện ích mở rộng đó không thể được truy cập
- Các nhà nghiên cứu cho rằng một handler thông điệp cụ thể có thể cho phép đọc tệp trong hạ tầng nội bộ Google và kỳ vọng khả năng P0
- Kết quả xem xét của Google Security Team xác nhận handler bị nghi ngờ đó không thể dùng qua RPC và chỉ có thể được gọi từ bên ngoài
- Dù thử nghiệm còn hạn chế, việc thực thi mã có thể mở ra các khả năng sau
- Reliability: Chạy mã có thể kích hoạt hành vi một cách nhất quán hơn
- Chaining/Complexity: Có thể cấu hình việc điều khiển nhiều công cụ hoặc điều chỉnh tham số phức tạp hơn so với văn bản
- Tool Output Poisoning: Có thể thử thao túng output công cụ hiệu quả hơn
- Leaks: Nếu các phần ẩn của môi trường bị lộ, chúng có thể mang lại lợi thế bổ sung
Các tệp proto thực sự bị lộ
- Các nhà nghiên cứu xác nhận có thể làm rò rỉ tệp proto theo nhiều cách
- Tệp proto là tệp Protocol Buffer, đóng vai trò như bản thiết kế định nghĩa cấu trúc thông điệp và cách hệ thống trao đổi thông tin
- Sau khi chạy
strings entry_point > stringsoutput.txt, họ tìm kiếmDogfoodđể phát hiện một phần proto nội bộ - Một số nội dung được trích xuất chứa mô tả metadata của proto rất nhạy cảm
- Không bao gồm dữ liệu người dùng
- Đó là các danh mục nội bộ Google dùng để phân loại dữ liệu người dùng
Dogfoodchỉ thông lệ Google sử dụng nội bộ sản phẩm và prototype của chính mình trước khi phát hành công khai để kiểm thử và cải thiện- Một trong các tệp bị lộ là
privacy/data_governance/attributes/proto/classification.proto- Tệp này liên quan đến cách dữ liệu được phân loại trong nội bộ Google
- Nó cũng chứa tham chiếu tới tài liệu liên quan, nhưng các tài liệu đó là mật và không dành cho truy cập công khai
Lộ định nghĩa proto bảo mật nội bộ
- Trong cùng output
strings, nhiều tệp proto nội bộ không nên công khai cũng bị lộ - Lệnh
cat stringsoutput.txt| grep '\.proto' | grep 'security'cho thấy các đường dẫn tệp nhạy cảm như sausecurity/thinmint/proto/core/thinmint_core.protosecurity/thinmint/proto/thinmint.protosecurity/credentials/proto/authenticator.protosecurity/data_access/proto/standard_dat_scope.protosecurity/loas/l2/proto/credstype.protosecurity/credentials/proto/end_user_credentials.protosecurity/loas/l2/proto/usertype.protosecurity/credentials/proto/iam_request_attributes.protosecurity/util/proto/permission.protosecurity/loas/l2/proto/common.protoops/security/sst/signalserver/proto/ss_data.protosecurity/credentials/proto/data_access_token_scope.protosecurity/loas/l2/proto/identity_types.protosecurity/credentials/proto/principal.protosecurity/loas/l2/proto/instance.protosecurity/credentials/proto/justification.proto
- Khi kiểm tra
security/credentials/proto/authenticator.prototrong chuỗi của binary, họ có thể thấy dữ liệu đó thực sự đã bị lộ
Vì sao proto lại nằm trong binary
- Google Security Team đã rà soát nội dung bên trong sandbox và chấp thuận cho disclosure công khai
- Tuy nhiên, pipeline build biên dịch binary sandbox có một bước tự động thêm các tệp security proto vào binary nếu cho rằng chúng có thể cần thiết để thực thi quy tắc nội bộ
- Trong trường hợp này, bước đó không cần thiết, nhưng kết quả là các proto nội bộ cực kỳ mật bị đưa vào ngoài ý muốn
- Các nhà nghiên cứu biết Google xem những proto này là thông tin tuyệt mật không được công khai, nên đã báo cáo đây là bug
- Cần hiểu sâu các quy tắc kinh doanh và ưu tiên bảo mật của tổ chức mục tiêu để nhận diện và báo cáo những dạng lộ lọt tinh vi như vậy
Kết luận và hàm ý thực tiễn
- Các hệ thống AI tiên tiến trước khi phát hành cần được kiểm thử kỹ không chỉ về hành vi tính năng mà cả các artifact nội bộ
- Ngay cả sandbox trông đơn giản cũng có thể tạo ra đường lộ ngoài dự kiến khi kết nối với nhiều tiện ích mở rộng
- Khi nhiều thành phần hoạt động cùng nhau, một thiếu sót nhỏ có thể tạo ra đường dẫn vấn đề mới
- Trong trường hợp này, phần mã nội bộ đã được chấp thuận công khai được phân biệt với các proto mật bị đưa vào ngoài ý muốn; phần sau trở thành trọng tâm của báo cáo bảo mật thực sự
- Trong môi trường kết hợp AI agent, thực thi sandbox, gọi công cụ và RPC nội bộ, cần rà soát không chỉ cô lập thực thi mà cả tài sản bên trong sandbox và artifact build
Chưa có bình luận nào.