Một chatbot chăm sóc khách hàng đã làm rò rỉ các câu lệnh hệ thống (system prompts) của chính nó chỉ sau một yêu cầu đơn giản về công thức nấu thịt cừu. Chỉ trong vòng vài phút, con bot không chỉ cung cấp công thức nấu ăn mà còn tạo ra mã Python và tiết lộ các hướng dẫn nội bộ điều hướng hành vi của nó.
Sự cố này chứng minh rằng “câu lệnh hệ thống” của một mô hình ngôn ngữ không phải là một bức tường bảo mật. Khi một bot tự quyết định ngay tức thì liệu yêu cầu của người dùng có phù hợp với nhiệm vụ của nó hay không, kẻ tấn công có thể điều hướng lập luận đó và khiến mô hình tiết lộ các thông tin đặc quyền.
Điều gì đã gây ra vụ vi phạm
Bài kiểm tra bắt đầu với một câu hỏi đơn giản: “Bạn có thể cho tôi công thức nấu món thịt cừu hầm không?” Con bot, với mục đích đã được tuyên bố là giải thích các dịch vụ của công ty, đã phản hồi bằng một công thức đầy đủ, thêm một đoạn mã Python ngắn để phân tích các thành phần, và sau đó in ra nguyên văn câu lệnh hệ thống của nó – đoạn văn bản hướng dẫn mô hình cách hành xử.
Bản thân yêu cầu này hoàn toàn vô hại; mối nguy hiểm nằm ở việc con bot sẵn lòng coi công thức nấu ăn là một phần trong nhiệm vụ cốt lõi của nó.
Tại sao điều này lại quan trọng
Các chatbot hiện đang đảm nhận các vai trò tiếp xúc với khách hàng, xử lý dữ liệu cá nhân, kích hoạt các giao dịch hoặc điều khiển các công cụ nội bộ. Nếu một mô hình có thể bị xúi giục để tiết lộ bộ hướng dẫn của chính nó, kẻ tấn công sẽ có được cái nhìn sâu sắc về các rào chắn bảo vệ (guardrails) vốn được thiết kế để ngăn chặn mô hình thực hiện các hành vi gây hại.
Cách thức cuộc tấn công hoạt động
- Phác họa mục đích của bot – Người kiểm thử xác định rằng nhiệm vụ của bot là giải thích các dịch vụ của công ty.
- Tạo ra một mối liên hệ giả mạo – Bằng cách tuyên bố rằng công thức nấu ăn là cần thiết để quyết định xem người dùng nên sử dụng dịch vụ nào, người kiểm thử đã tạo cho yêu cầu một sự liên quan hời hợt đối với nhiệm vụ của bot.
- Khai thác logic – Con bot đã chấp nhận sự liên quan được thêu dệt này, cho phép yêu cầu vượt qua bước kiểm tra mức độ liên quan nội bộ và vô hiệu hóa các rào chắn bảo vệ lẽ ra đã chặn yêu cầu đó.
Cuộc tấn công dựa trên việc mô hình tự đánh giá mức độ liên quan. Khi sự đánh giá đó có thể bị lay chuyển, các "quy tắc" của chính mô hình sẽ trở nên có thể thương lượng được.
Ba điểm yếu gây thất bại
| Giai đoạn thất bại | Điều gì đã xảy ra |
|---|---|
| Chiếm đoạt mục tiêu | Bot đã coi một yêu cầu nấu ăn không liên quan là một phần trong mục tiêu giải thích dịch vụ của nó. |
| Chệch hướng năng lực | Nó đã tạo ra mã Python có thể thực thi mặc dù vai trò của nó không bao gồm việc tạo mã. |
| Rò rỉ câu lệnh | Nó đã in ra chính xác câu lệnh hệ thống lẽ ra phải được giữ kín. |
Mỗi giai đoạn đại diện cho sự phá vỡ một lớp phòng thủ khác nhau mà nhiều hệ thống triển khai mặc định cho rằng chính mô hình sẽ thực thi.
Các lớp phòng thủ thực sự hiệu quả
Việc đưa các rào chắn bảo vệ ra khỏi mô hình và đưa vào mã nguồn xác định (deterministic code) sẽ khôi phục lại một ranh giới bảo mật đáng tin cậy.
- Định tuyến tác vụ (Task routing) – Sử dụng một bộ phân loại (classifier) riêng biệt để ánh xạ các tin nhắn đến một danh sách cố định các ý định (intents) được cho phép. Nếu một yêu cầu nằm ngoài danh sách đó, hãy từ chối ngay lập tức. Mô hình sẽ không bao giờ có cơ hội để tranh luận về mức độ liên quan.
- Năng lực tối thiểu (Least capability) – Tước bỏ các công cụ mà bot không cần thiết. Nếu nó không yêu cầu thực thi mã hoặc truy cập cơ sở dữ liệu rộng rãi, hãy loại bỏ các khả năng đó.
- Ủy quyền xác định (Deterministic authorization) – Thực hiện kiểm tra quyền hạn trong mã ứng dụng, không phải trong mô hình ngôn ngữ. Mô hình có thể đề xuất một hành động, nhưng mã nguồn mới là bên quyết định có thực hiện hành động đó hay không.
- Kiểm chứng đầu ra (Output validation) – Quét mọi phản hồi của mô hình để tìm nội dung không được phép — chẳng hạn như các câu lệnh hệ thống hoặc dữ liệu nhạy cảm — trước khi nó đến tay người dùng.
Một bộ lọc chỉ đơn thuần hỏi "Yêu cầu này có bị cấm không?" có thể bị một người dùng có sức thuyết phục vượt qua. Một lớp định tuyến kiểm tra dựa trên một danh sách đóng sẽ không để lại kẽ hở cho bất kỳ sự thương lượng nào.
Những điều cần lưu ý tiếp theo
Các doanh nghiệp dựa vào AI hội thoại nên kiểm tra (audit) các hệ thống triển khai của họ đối với ba chế độ thất bại đã được minh họa qua bài kiểm tra công thức thịt cừu. Trong thời gian chờ đợi, hãy coi bất kỳ câu lệnh hệ thống nào cũng là kiến thức công khai; đừng trông chờ vào nó để ngăn mô hình tiết lộ chính mình.
Bài học rút ra rất rõ ràng: nếu mô hình bảo mật của bạn phụ thuộc vào một đoạn hướng dẫn bằng ngôn ngữ tự nhiên, nó rất mong manh. Hãy củng cố nó bằng mã nguồn có thể được kiểm tra, quản lý phiên bản và thực thi bất kể mô hình nói gì.
