# garak của NVIDIA: một lệnh pip, một lệnh quét, rồi nối vào endpoint của khách

> Trước khi đội bảo mật của khách hỏi "chatbot này có bị lừa không", FDE nên có sẵn một bản quét chạy lại được, và biết rõ PASS hay FAIL trong bản quét đó chứng minh được tới đâu.

Bản gốc: https://fdetimes.net/vi/cong-cu/garak-quet-lo-hong-llm-cua-nvidia-cho-fde/

Một lệnh pip để cài, một lệnh nữa để bắn probe vào một mô hình ngôn ngữ và nhận về các dòng PASS hoặc FAIL. Bắt đầu với garak, bộ quét lỗ hổng LLM mã nguồn mở do NVIDIA và cộng đồng cùng phát triển, chỉ cần chừng đó.

Chuyện này quan trọng với FDE vì câu hỏi bảo mật thường đến muộn và đến gấp. Agent chạy demo xong xuôi rồi, đội pháp chế hoặc bảo mật của khách mới hỏi: nó có lộ dữ liệu không, có bị lừa bỏ qua chỉ dẫn không?

Trả lời "đã thử vài prompt" thì không đủ. Một bản quét chạy lại được, có kết quả cho từng probe, thuyết phục hơn nhiều. Nhưng chỉ khi bạn hiểu con số trong bản quét đó nói gì và không nói gì.

## garak kiểm tra cái gì?

README của dự án tóm gọn mục đích: kiểm tra xem một ứng dụng chạy trên LLM có thể bị đẩy vào những kiểu hỏng hóc không ai mong muốn hay không. Tên garak là viết tắt của Generative AI Red-teaming and Assessment Kit, và bài báo giới thiệu công cụ được đăng trên arXiv tháng 6/2024.

Với FDE, chữ đáng để ý là "ứng dụng". Tài liệu chính thức nói garak giúp tìm điểm yếu và hành vi không mong muốn trong bất cứ thứ gì dùng công nghệ mô hình ngôn ngữ, từ mô hình trần đến chatbot.

Ở chỗ khách, thứ cần bảo vệ hiếm khi là mô hình gốc. Đó là chatbot đã gắn system prompt, dữ liệu nội bộ và công cụ, nên bản quét có giá trị nhất là bản quét chạy vào chính ứng dụng đó.

## Lần quét đầu tiên trông thế nào?

Cài đặt chỉ cần một lệnh:

```bash
python -m pip install -U garak
```

Hướng dẫn "Your first scan" dùng mô hình gpt2 trên Hugging Face và một probe về ngôn từ tục tĩu:

```bash
python -m garak --model_type huggingface --model_name gpt2 --probes lmrc.Profanity
```

Đây là bài tập cục bộ, không phải hệ thống của khách. Giá trị của nó là cho bạn thấy định dạng kết quả trước khi phải giải thích định dạng ấy trong một phòng họp.

## Nối garak vào chatbot của khách

Bước từ gpt2 sang hệ thống thật đi qua REST generator. README mô tả `rest.RestGenerator` là thành phần rất linh hoạt, kết nối được với bất kỳ endpoint REST nào trả về plaintext hoặc JSON.

Bài viết của Databricks về việc áp dụng garak trên nền tảng của họ nói thêm phần việc cụ thể: REST generator cần một file cấu hình JSON, mô tả cấu trúc request và cách đọc response. Nói cách khác, garak không tự đoán API của khách; bạn phải chỉ cho nó.

Thử hình dung khách là một công ty bảo hiểm có chatbot trả lời về hợp đồng. Giả sử đội kỹ thuật của họ đưa bạn một request mẫu như sau (tên trường ở đây là giả định):

```json
{"session_id": "test-01", "message": "Hợp đồng của tôi có chi trả khi nhà bị ngập không?"}
```

Và response mẫu của bot, cũng là giả định:

```json
{"reply": "Theo điều khoản bổ sung, hợp đồng của anh chị...", "sources": ["dieu-khoan-bo-sung.pdf"]}
```

Từ cặp mẫu này, file cấu hình phải nói đúng hai điều. Về request: giữ nguyên cấu trúc, nhưng thay câu hỏi trong trường `message` bằng prompt mà probe sinh ra. Về response: lấy câu trả lời từ trường `reply`, bỏ qua `sources`, vì detector chỉ nên chấm lời bot nói.

Tên các khóa trong chính file cấu hình thì chép theo tài liệu REST generator của garak, đừng đoán. Phần khó thật sự là có được request và response mẫu chính xác từ khách, nên hãy xin chúng ngay từ buổi chốt phạm vi.

## PASS và FAIL thực ra đo gì?

Tài liệu "Reading the results" đưa ra một dòng mẫu: `FAIL ok on 17/ 20 (failure rate: 15%)`. Đọc kỹ: probe sinh ra 20 đầu ra, detector chấm 17 cái là ổn, 3 cái bị bắt, nên tỷ lệ lỗi là 15% và cả dòng bị gắn FAIL.

Trang tài liệu đó không nêu ngưỡng nào được coi là đạt. Vì thế, câu "chatbot của anh chị FAIL" là cách trình bày tệ; câu đúng là "3 trên 20 lần thử của probe này cho ra đầu ra bị detector đánh dấu".

Chi tiết thứ hai dễ bị bỏ qua hơn: nhiều detector có thể cùng chấm một tập đầu ra. Một probe vì thế có thể PASS ở detector này và FAIL ở detector khác, nên bảng báo cáo cho khách phải ghi rõ detector nào cho ra kết quả nào.

**Điểm mấu chốt:** Một dòng PASS chỉ nói rằng lần thử này không thành công, không nói rằng hệ thống an toàn.

## Những gì garak không làm thay bạn

Databricks cảnh báo hai chiều. Tỷ lệ thành công thấp trong các bài thử không có nghĩa là miễn nhiễm. Còn detector có dương tính giả, nên kết quả thường phải được xem tay.

Vì vậy, trước khi đưa một FAIL lên slide, hãy mở 3 đầu ra bị bắt và tự đọc. Trước khi viết "đã PASS", hãy ghi rõ đã chạy những probe nào, trên môi trường nào.

Giới hạn lớn nhất lại là pháp lý. Tài liệu viết thẳng: chỉ chạy garak trên hệ thống bạn được phép dùng. Bắn hàng loạt prompt tấn công vào production của khách khi chưa có văn bản cho phép có thể khiến đội bảo mật của họ coi đó là một cuộc tấn công thật, nên hãy chốt phạm vi, môi trường và thời điểm quét trước.

## Học gì trước, và ghi vào CV thế nào?

Bắt đầu bằng lệnh gpt2 ở trên, rồi tự tính lại failure rate từ số đầu ra ổn trên tổng số. Sau đó dựng một endpoint REST nhỏ của riêng bạn và viết file cấu hình JSON để garak gọi được nó; đó chính là kỹ năng bạn sẽ dùng ở chỗ khách.

Khi đưa kỹ năng này vào CV, hãy viết nó thành một phép đo có giới hạn rõ ràng. Một dòng như "nối garak vào chatbot nội bộ qua REST, theo dõi failure rate từng probe qua mỗi lần phát hành, rà tay mọi FAIL trước khi báo cáo" cho thấy bạn biết đo, và biết con số đo được đến đâu.

Nếu chưa có khách thật, hãy làm việc đó với một dự án mã nguồn mở của chính bạn và công khai cả lệnh, file cấu hình lẫn kết quả. Khách sẽ không nhớ bạn đã dùng công cụ gì; họ nhớ người đã nói thật với họ rằng PASS chưa phải là an toàn.

**Thử ngay tuần này:**

- Cài garak bằng pip, rồi chạy lại lệnh quét gpt2 với probe lmrc.Profanity trong hướng dẫn "Your first scan" và tự tính lại failure rate từ số đầu ra đạt trên tổng
- Chọn một FAIL trong kết quả, mở các đầu ra bị detector bắt và ghi lại đâu là lỗi thật, đâu là dương tính giả
- Soạn một trang mẫu "phạm vi kiểm thử bảo mật LLM" gồm endpoint, môi trường, thời điểm quét, request mẫu và response mẫu, để xin khách xác nhận bằng văn bản

## Nguồn

- [garak: A Framework for Security Probing Large Language Models](https://arxiv.org/abs/2406.11036)

- [GitHub - NVIDIA/garak: the LLM vulnerability scanner](https://github.com/NVIDIA/garak)

- [Your first scan - garak documentation](https://docs.garak.ai/garak/llm-scanning-basics/your-first-scan.md)

- [garak: LLM vulnerability scanner](https://garak.ai)

- [Welcome to garak!](https://docs.garak.ai/)

- [Reading the results - garak documentation](https://docs.garak.ai/garak/llm-scanning-basics/reading-the-results.md)

- [AI Security in Action: Applying NVIDIA's Garak to LLMs on Databricks](https://www.databricks.com/blog/ai-security-action-applying-nvidias-garak-llms-databricks)
