Review công cụ bảo vệ ứng dụng LLM: lọc thông tin cá nhân, guardrail và quét lỗ hổng
Mình làm bảo mật ứng dụng, thời gian gần đây phần lớn công việc là đánh giá các chatbot và agent trước khi lên production. Chia sẻ các công cụ mã nguồn mở mình hay dùng, chia theo 3 nhóm việc. NHÓM 1: LỌC THÔNG TIN CÁ NHÂN (PII) Mục tiêu: không để số điện thoại, email, số CMND/CCCD, số tài khoản bị gửi lên dịch vụ LLM bên ngoài hoặc lưu vào log. - Microsoft Presidio: phát hiện và che thông tin cá nhân trong văn bản. Có sẵn nhận dạng cho nhiều loại phổ biến, và cho phép tự thêm mẫu (regex, danh sách) cho định dạng Việt Nam như số CCCD 12 số, số điện thoại 10 số. - Kinh nghiệm: nhận dạng tên người tiếng Việt bằng công cụ có sẵn còn yếu. Mình kết hợp thêm mẫu tự viết và chấp nhận che dư một chút còn hơn bỏ sót. - Mẹo: che bằng mã giả (ví dụ ) rồi thay lại sau khi nhận câu trả lời, để LLM vẫn hiểu ngữ cảnh. NHÓM 2: GUARDRAIL (KIỂM SOÁT ĐẦU VÀO / ĐẦU RA) Mục tiêu: chặn yêu cầu độc hại, giữ chatbot trong phạm vi, kiểm tra câu trả lời trước khi tới người dùng. - Llama Guard (Meta): model phân loại nội dung an toàn/không an toàn cho cả câu hỏi và câu trả lời, chạy local được. - NeMo Guardrails (NVIDIA): framework định nghĩa "luật" hội thoại, ví dụ chatbot chăm sóc khách hàng không được bàn chuyện chính trị, phải chuyển sang người khi khách đòi hoàn tiền. - Kinh nghiệm: guardrail bằng model thêm độ trễ và chi phí. Mình chỉ áp dụng cho những điểm thật sự rủi ro, còn lại dùng kiểm tra bằng quy tắc đơn giản. NHÓM 3: QUÉT LỖ HỔNG (RED TEAMING) Mục tiêu: chủ động tấn công thử ứng dụng trước khi kẻ xấu làm. - garak (NVIDIA): công cụ quét lỗ hổng cho LLM, có sẵn nhiều kiểu tấn công như prompt injection, jailbreak, làm lộ dữ liệu huấn luyện. - promptfoo: vừa để đánh giá chất lượng prompt vừa có chế độ red teaming, dễ đưa vào CI. - Kinh nghiệm: các bộ tấn công có sẵn chủ yếu bằng tiếng Anh. Mình luôn bổ sung bộ câu tấn công tiếng Việt riêng, vì nhiều chatbot chặn tốt tiếng Anh nhưng lại "dễ dãi" với tiếng Việt. NHỮNG ĐIỀU CÔNG CỤ KHÔNG THAY ĐƯỢC - Thiết kế quyền đúng từ đầu: agent chỉ được truy cập dữ liệu mà người dùng đang chat được phép xem. Đây là lỗi mình gặp nhiều nhất, và không công cụ lọc nào sửa được. - Prompt injection gián tiếp: nội dung độc nằm trong tài liệu, email, trang web mà agent đọc. Cách phòng chủ yếu là giới hạn những gì agent được làm sau khi đọc nội dung bên ngoài, và yêu cầu người xác nhận với hành động quan trọng. - Ghi log đầy đủ để điều tra khi có sự cố. CHECKLIST TỐI THIỂU TRƯỚC KHI LÊN PRODUCTION 1. Che thông tin cá nhân trước khi gửi ra ngoài và trước khi ghi log. 2. Kiểm tra quyền ở tầng code cho mọi công cụ agent gọi. 3. Hành động có tác động (gửi email, xoá, thanh toán) phải có người xác nhận. 4. Chạy bộ red teaming (cả tiếng Anh và tiếng Việt) trong CI. 5. Có cách tắt nhanh tính năng AI khi phát hiện sự cố. Mọi người đang dùng công cụ gì? Có ai có bộ câu tấn công tiếng Việt muốn chia sẻ không?