Tấn công Prompt Injection vào LLM và Bảo mật Guardrail
Các LLM không có ranh giới cứng giữa chỉ dẫn và dữ liệu. Mọi thứ trong cửa sổ ngữ cảnh (context window) đều là một luồng token duy nhất. Prompt injection xảy ra khi dữ liệu của kẻ tấn công đóng vai trò như các chỉ dẫn. Bạn không thể chỉ bằng cách lọc dữ liệu mà đạt được sự an toàn. Bạn phải quản lý nó bằng chiến lược phòng thủ chiều sâu (defense-in-depth).
Sự thất bại của các phương pháp phòng thủ thông thường:
- Danh sách chặn từ khóa (Keyword Blocklists): Kẻ tấn công sử dụng các từ đồng nghĩa, lỗi chính tả hoặc các ngôn ngữ khác nhau để vượt qua chúng. Việc lọc các chuỗi ký tự không giúp lọc được ý đồ (intent).
- Che giấu đầu ra (Output Redaction): Kẻ tấn công có thể chia nhỏ hoặc mã hóa các thông tin bí mật khiến việc khớp chuỗi ký tự trực tiếp bị thất bại.
- Các mô hình đánh giá LLM (LLM Judges): Một mô hình riêng biệt có thể bị thao túng tâm lý (socially engineered) để tin rằng một thông tin bí mật là vô hại.
- Kiểm duyệt bởi con người (Human Review): Con người nhìn thấy văn bản đã được hiển thị, chứ không phải các byte thô. Họ không thể thấy các ký tự ẩn được sử dụng trong kỹ thuật ASCII smuggling.
ASCII Smuggling là một mối đe dọa lớn. Nó sử dụng các ký tự không hiển thị như Unicode Tags hoặc khoảng trắng không độ rộng (zero-width spaces) để che giấu các chỉ dẫn. Mô hình sẽ đọc được chúng, nhưng con người thì không thấy gì cả. Điều này cho phép giả mạo danh tính và trích xuất dữ liệu thông qua email hoặc lịch.
Cách bảo vệ ứng dụng của bạn:
- Làm sạch các payload thô (Sanitize raw payloads): Loại bỏ các ký tự điều khiển và ký tự không độ rộng trước khi chúng đến được mô hình.
- Sử dụng danh sách cho phép (Allowlists): Xác định các danh mục Unicode cụ thể mà bạn cần thay vì cố gắng truy tìm các danh mục xấu.
- Chuẩn hóa dữ liệu (Normalize data): Sử dụng chuẩn hóa NFKC cho tất cả các đầu vào.
- Giảm thiểu thông tin bí mật (Minimize secrets): Không đưa dữ liệu nhạy cảm vào cửa sổ ngữ cảnh nếu mô hình không cần đến chúng.
- Coi RAG là không đáng tin cậy (Treat RAG as untrusted): Giả định rằng bất kỳ tài liệu nào bạn truy xuất cho mô hình đều là một vector tấn công injection tiềm năng.
- Theo dõi các điểm bất thường (Watch for anomalies): Đánh dấu các đầu vào có độ dài hiển thị khác với số lượng mã điểm (code-point) thô.
Bảo mật là một lỗi trong pipeline, không chỉ là lỗi của mô hình. Giải pháp nằm ở mã nguồn ứng dụng của bạn.
Nguồn: https://dev.to/geekaara/llm-prompt-injection-guardrail-security-glm
Cộng đồng học tập tùy chọn: https://t.me/GyaanSetuAi