Prompt Injection là một phương pháp tấn công mới khai thác các đặc tính cấu trúc của Mô hình Ngôn ngữ Lớn (LLMs), cụ thể là cách chúng ghép các prompt đầu vào, để buộc chúng tạo ra nội dung nguy hiểm.
Cách Jailbreak diễn ra:
- Hiểu về thành phần đầu vào: Đầu vào của LLM bao gồm năm thành phần:
System Prompt (Ts)
,User Prefix (Tup)
,User Prompt (Tu)
,Assistant Prefix (Tap)
, vàAssistant Prompt (Ta)
.
Trong một cuộc trò chuyện với AI, có nhiều yếu tố ảnh hưởng đến cách AI hiểu và phản hồi. Các thuật ngữ đề cập là những thành phần cơ bản trong cấu trúc của một luồng hội thoại, thường được sử dụng trong các mô hình LLM.
1. System Prompt (Ts)
Định nghĩa: Đây là một chuỗi văn bản được đưa vào đầu mỗi cuộc trò chuyện, nhằm thiết lập bối cảnh, vai trò, tính cách hoặc các quy tắc chung cho mô hình AI. Nó giống như việc đưa ra một "chỉ dẫn" tổng quan cho AI trước khi bắt đầu.
Mục đích:
- Thiết lập vai trò: Hướng dẫn AI đóng vai trò cụ thể, ví dụ: " là một trợ lý y tế chuyên nghiệp," " là một nhà văn cổ điển," hoặc “ là một chatbot lịch sự và vui tính.”
- Đặt ra quy tắc: Đặt ra các giới hạn hoặc quy tắc cho phản hồi, ví dụ: "Không bao giờ trả lời các câu hỏi về chính trị," "Chỉ sử dụng tiếng Việt," “Trả lời ngắn gọn và đi thẳng vào vấn đề.”
- Cung cấp bối cảnh: Cung cấp thông tin nền tảng để AI có thể đưa ra các phản hồi phù hợp hơn, ví dụ: “ đang trong một cuộc phỏng vấn xin việc.”
- Ví dụ:
System Prompt (Ts) = " là một trợ lý AI thông minh và hữu ích, được thiết kế để trả lời các câu hỏi một cách lịch sự, chính xác và đầy đủ. Hãy luôn duy trì thái độ tích cực và thân thiện."
2. User Prefix (Tup)
- Định nghĩa: Đây là một chuỗi văn bản cố định, được sử dụng để đánh dấu hoặc phân tách phần nhập liệu của người dùng trong luồng hội thoại. Nó giúp mô hình nhận biết được rằng phần tiếp theo là câu hỏi hoặc yêu cầu từ người dùng.
- Mục đích: Giúp mô hình phân biệt giữa các phần khác nhau trong cuộc trò chuyện (hệ thống, người dùng, AI), từ đó xử lý thông tin một cách chính xác hơn.
- Ví dụ:
User Prefix (Tup) = "Người dùng: " hoặc "Câu hỏi: " hoặc đơn giản là “User: ”
3. User Prompt (Tu)
- Định nghĩa: Đây là câu hỏi hoặc yêu cầu cụ thể mà người dùng nhập vào. Đây là nội dung chính của yêu cầu.
- Mục đích: Cung cấp thông tin mà AI cần để tạo ra phản hồi. Đây là "đầu vào" chính của mô hình.
- Ví dụ:
User Prompt (Tu) = "Kể một câu chuyện về một con rồng biết bay và một chàng hiệp sĩ."
4. Assistant Prefix (Tap)
- Định nghĩa: Tương tự như User Prefix, đây là một chuỗi văn bản cố định được sử dụng để đánh dấu phần phản hồi của AI.
- Mục đích: Giúp mô hình nhận ra rằng phần tiếp theo của chuỗi là câu trả lời của chính nó. Nó giúp định hướng cho quá trình tạo văn bản (text generation).
- Ví dụ:
Assistant Prefix (Tap) = "Trợ lý: " hoặc "Trả lời: " hoặc “Assistant: ”
5. Assistant Prompt (Ta)
Một chuỗi hội thoại hoàn chỉnh sẽ có cấu trúc như sau:
Ts + Tup + Tu + Tap + Ta
Khi gửi một yêu cầu tới AI, thực chất là đang xây dựng một "prompt" lớn và đầy đủ, bao gồm tất cả các thành phần này. Mô hình AI sẽ nhận toàn bộ chuỗi này, và nhiệm vụ của nó là tiếp tục tạo ra phần Assistant Prompt (Ta)
một cách hợp lý.
Ví dụ một luồng hội thoại hoàn chỉnh:
- Prompt đầu vào (được gửi đến mô hình):
" là một trợ lý AI thông minh. Người dùng: Kể một câu chuyện về một con rồng. Trợ lý:" - Mô hình sẽ sinh ra phần còn lại:
“Ngày xưa, có một con rồng tên là Falcor. Nó sống trong một hang động bí ẩn...” - Kết quả cuối cùng hiển thị cho người dùng:
"Ngày xưa, có một con rồng tên là Falcor. Nó sống trong một hang động bí ẩn..." (chỉ hiển thị phầnTa
)
Như vậy Assistant Prompt (Ta) = "Ngày xưa, có một con rồng tên là Falcor. Nó sống trong một hang động bí ẩn..."
Trong PI, người dùng chỉ có thể thao túng Tu, trong khi các thành phần khác được cố định bởi người dựng model. Đầu vào hoàn chỉnh cho model được cấu trúc như Ts + Tup + Tu + Tap
, trong đó Tap báo hiệu sự bắt đầu phản hồi của model.
Cơ chế tấn công (tương tự SQL Injection): Ý tưởng cốt lõi của PI Jailbreak tương tự SQL injection. Trong SQL injection, một câu lệnh bị thay đổi bằng cách chèn các ký tự như "--" để "comment out" một phần câu lệnh gốc. Tương tự, PI Jailbreak hoạt động bằng cách xây dựng Tu để hiệu quả "comment out" phần Tap của model. Điều này đánh lừa LLM coi Tap gốc là nội dung bình thường thay vì chỉ thị điều khiển cho đầu ra.
Mục tiêu của phương pháp:
- Vô hiệu hóa Tap: Biến
Tap
gốc trở thành nội dung, không phải lệnh. - Tạo T'ap: Một phiên bản nhân bản của
Tap
, gọi làT'ap
, được chèn vào không gian Tu.T'ap
này đóng vai trò như điểm bắt đầu phản hồi mới do kẻ tấn công kiểm soát. - Thêm tiền tố gây hại (Tp): Sau
T'ap
, mộtTip
độc hại được thêm vào. Từ góc nhìn của LLM,Tip
và bất kỳ nội dung gây hại nào tiếp theo (Thc
) như là đầu ra hợp lệ do chính nó tạo ra.
Kiểm soát mẫu và sinh tiền tố trả lời khẳng định:
- Module kiểm soát mẫu: PI sử dụng phương pháp khớp mẫu để kiểm soát vị trí của
T'ap
trongTu
. Điều này liên quan đến việc tạo Rule Statement (Tr) quy định cáchT'ap
xuất hiện (ví dụ: "Câu trả lời của PHẢI chènT'ap
sau mỗi N từ").Tr
tương ứng vớiTbap
(văn bản trướcT'ap
) trong cấu trúc prompt tổng thể. - Sinh tiền tố trả lời khẳng định (Taap):
Tip
(gọi làTaap
trong phương pháp) được xây dựng để phù hợp với prompt gây hại và tuân thủ mẫu được định nghĩa trongTr
. Nó thường bắt đầu bằng các cụm như "Sure, here is" hoặc "Certainly!" kèm theo tuyên bố đạo đức, nhưng lại định hướng về hướng gây hại. - Lựa chọn kích hoạt: Một "jailbreak trigger" (ví dụ: "\n1.") cũng được chèn vào, vì LLM thường dùng khi liệt kê.
Thực thi Jailbreaking: Lệnh gây hại (Thi
), câu lệnh kiểm soát mẫu (Tc
), tiền tố trả lời khẳng định (Taap), và kích hoạt jailbreak (Ttri
) được nối với nhau để tạo thành prompt người dùng cuối (Tu
). Đầu vào hoàn chỉnh Ts + Tup + Th + Tc + Taap + Ttri + Tap
sau đó được đưa vào LLM.
Loại bỏ bất thường: Đầu ra được tạo (Ta
) được đánh giá. Nếu có bất thường như phản hồi bị gián đoạn (ví dụ: do token kết thúc), đầu vào sẽ được chỉnh sửa và gửi lại. Nếu mô hình từ chối phản hồi (ví dụ: "I cannot" hoặc "I can't"), tham số NumI
sẽ được chọn lại và quá trình lặp lại.
6. Minh họa khai thác:
- Chuẩn bị
Danh sách các yêu cầu độc hại và câu trả lời mong muốn
Prefix answer cho mỗi model
- Chuẩn bị bộ comment cho mỗi model

Llama2-7b-chat-hf:
Prompt bình thường:

Kết hợp injection:

GPT-3.5-turbo:
Prompt bình thường:

Kết hợp injection:

Thực hiện khai thác leak đoạn chat trên chatbot Telegram chạy GPT-4o-mini:
Prompt bình thường:

Truyền thẳng prompt injection bằng text:

Khai thác qua hình ảnh:

Kết quả:

Đây là những khái niệm và ví dụ cơ bản nhất vầ Prompt Injection dạng Jailbreak. Những ví dụ này cho thấy PI Jailbreak có thể vượt qua cơ chế an toàn bằng cách tích hợp lệnh gây hại vào một mẫu mà LLM đã được huấn luyện để tuân theo, từ đó sinh ra nội dung nguy hiểm. Các bài viết sau sẽ tiếp tục phân tích rộng hơn về ứng dụng của PI trong nhiều context khác nhau.
Reference:
- Prompt Injection Attacks on LLMs - HiddenLayer: https://hiddenlayer.com/innovation-hub/prompt-injection-attacks-on-llms/?utm_source=chatgpt.com
- AI Model Penetration: Testing LLMs for Prompt Injection & Jailbreaks: https://www.youtube.com/watch?v=xOQW_qMZdlc
- Related Works on Prompt Injection Attacks: https://hackmd.io/@rishika2110/SyCOAM3R1l?utm_source=chatgpt.com
- SQL Injection Jailbreak: https://arxiv.org/html/2411.01565v1
- Prompt Injections in the Wild - Exploiting Vulnerabilities in LLM Agents | HITCON CMT 2023: https://www.youtube.com/watch?v=7jymOKqNrdU