Tấn Công Embedding Trong Hệ Thống RAG - Phần 4: "Cẩm Nang Toàn Diện - Đảo Ngược Có Huấn Luyện, Chọn Vũ Khí Và Phòng Thủ Cho Hệ Thống RAG"
Mở đầu: Khi zero-shot không đủ mạnh
Tiếp tục câu chuyện từ Phần 3.
Bạn đã học được hai cách đảo ngược embedding mà không cần huấn luyện trước. Cách 1 (ngân hàng mẫu) nhanh và nhẹ, nhưng phụ thuộc vào việc có câu mẫu phù hợp. Cách 2 (beam search) mạnh hơn, nhưng cần GPU và thời gian.
Cả hai đều có một điểm chung: yêu cầu bạn biết mô hình embedding của nạn nhân. Nếu không biết, bạn đang mò kim đáy bể.
Vậy nếu bạn không biết mô hình embedding? Hoặc nếu bạn cần độ chính xác cao hơn những gì zero-shot có thể đạt được?
Đó là lúc có huấn luyện lên tiếng. Phần này sẽ giới thiệu hai vũ khí hạng nặng và sau đó là cẩm nang chọn lựa:
- ALGEN (Few-Shot): Chỉ cần vài trăm cặp dữ liệu rò rỉ, không cần biết mô hình embedding
- Vec2Text (Supervised): Đầu tư 60 giờ huấn luyện để đạt độ chính xác cao nhất
- Cẩm nang chọn vũ khí: Khi nào dùng phương pháp nào?
- Phòng thủ: Làm sao bảo vệ hệ thống RAG?
Hãy tưởng tượng bạn là một thám tử. Lần này, bạn không chỉ có một cuốn sách mẫu. Bạn có cả một phòng thí nghiệm để huấn luyện trợ lý riêng của mình. Và quan trọng nhất, bạn có một cẩm nang để biết khi nào gọi ai.
PHẦN 1: ALGEN - Vũ khí few-shot cho tình huống "không biết gì"
1. Vấn đề với các phương pháp trước đây
Tất cả các phương pháp đảo ngược embedding trước ALGEN đều có một điểm yếu chết người: cần quá nhiều dữ liệu rò rỉ.
- Vec2Text cần 1-5 triệu cặp văn bản-embedding
- Các phương pháp khác cần 100.000 mẫu
- Hầu hết cần 8.000 mẫu trở lên
Trong thực tế, một kẻ tấn công hiếm khi có được lượng dữ liệu khổng lồ như vậy. Bạn may mắn nếu có vài trăm cặp.
ALGEN giải quyết vấn đề này bằng một ý tưởng đột phá: không huấn luyện trên dữ liệu của nạn nhân.
💡 Ý tưởng đột phá: Thay vì huấn luyện một mô hình giải mã trên embedding của nạn nhân, hãy căn chỉnh không gian embedding của nạn nhân về không gian embedding của chính bạn, rồi dùng một bộ giải mã đã được huấn luyện sẵn.
2. Ý tưởng cốt lõi: Căn chỉnh không gian embedding
ALGEN (Few-shot Textual Embedding Inversion Attack using Cross-Model ALignment and GENeration) là một phương pháp được công bố tại ACL 2025.
Hãy tưởng tượng bạn có hai loại ổ khóa. Bạn không có chìa khóa cho ổ khóa của nạn nhân (không biết mô hình embedding). Nhưng bạn biết rằng giữa hai loại ổ khóa này có một mối quan hệ tuyến tính - cứ vặn chìa theo một hướng nhất định thì ổ kia cũng mở theo.
ALGEN tìm ra mối quan hệ đó chỉ với một vài cặp chìa-ổ (cặp văn bản-embedding) rò rỉ.
3. Ba bước của ALGEN
Bước 1: Huấn luyện bộ giải mã trên không gian của chính bạn
Trước khi biết gì về nạn nhân, bạn huấn luyện một bộ giải mã FlanT5-small trên dữ liệu công khai. Bộ giải mã này biết cách nhận một embedding và biến nó thành văn bản - nhưng chỉ trong không gian embedding mà bạn kiểm soát.
Thời gian huấn luyện: khoảng 2 giờ trên một GPU.
Bước 2: Học phép căn chỉnh (Alignment)
Bạn có được một số cặp văn bản-embedding từ nạn nhân. Có thể là:
- Một vài phản hồi API bị rò rỉ
- Một số truy vấn bạn đã ghi lại được
- Hoặc (như chúng ta sẽ thấy) canary injection - tự tiêm dữ liệu của bạn vào hệ thống nạn nhân
Với mỗi cặp (văn bản, embedding_nạn_nhân), bạn cũng tính embedding của cùng văn bản đó bằng mô hình của bạn.
Sau đó, bạn dùng một công thức toán học đơn giản để tìm ra ma trận W sao cho:
embedding_nạn_nhân × W ≈ embedding_của_bạn
Nói một cách dễ hiểu: bạn tìm ra "cách vặn" để biến ổ khóa của nạn nhân thành ổ khóa của bạn.
Điều kỳ diệu: Chỉ cần 1 cặp dữ liệu đã đủ để có một cuộc tấn công thành công một phần. Với 1.000 cặp, hiệu suất đạt đến mức tối ưu.
Bước 3: Tấn công!
Giờ bạn có:
- Bộ giải mã của bạn (biết giải mã embedding trong không gian của bạn)
- Ma trận căn chỉnh (biết biến embedding của nạn nhân thành embedding của bạn)
Khi có embedding của nạn nhân, bạn chỉ cần:
embedding_nạn_nhân × W → embedding_của_bạn → bộ_giải_mã → văn_bản_gốc
Kết quả của ALGEN:
| Mô hình embedding | Rouge-L | Cosine Similarity |
|---|---|---|
| T5 | 45.75% | 0.9464 |
| GTR | 38.27% | 0.8879 |
| mT5 | 43.35% | 0.9370 |
| OpenAI ada-2 | 41.45% | 0.9312 |
Bảng: Hiệu suất của ALGEN trên các mô hình embedding khác nhau khi dùng 1.000 mẫu căn chỉnh
4. Canary Injection - "Tự tạo chìa khóa" cho chính mình
Nhưng nếu bạn không có bất kỳ cặp dữ liệu nào từ nạn nhân thì sao? ALGEN có một chiến thuật đặc biệt: canary injection.
Hãy tưởng tượng bạn là một điệp viên. Thay vì chờ đợi thông tin rò rỉ, bạn tự bơm thông tin của mình vào hệ thống của nạn nhân.
Cách làm:
- Bạn tạo ra hàng nghìn văn bản "mồi" (canary texts) - những câu văn vô hại nhưng có cấu trúc đa dạng
- Bạn chèn chúng vào vector database của nạn nhân (nếu có quyền ghi)
- Hệ thống nạn nhân tự động tính embedding cho những văn bản này
- Bạn xuất khẩu các embedding đó
- Bạn có ngay các cặp
(văn_bản_của_bạn, embedding_nạn_nhân)- hoàn hảo cho bước căn chỉnh!
Chi tiết quan trọng: Khi bạn chèn canary, bạn cũng nhúng chúng với mô hình của mình. Lúc này bạn đã có cả hai phía của phép căn chỉnh.
5. Kết hợp với RAG Probing
ALGEN không dừng lại ở việc giải mã embedding. Sau khi có văn bản gần đúng từ bộ giải mã, bạn có thể kết hợp với RAG Probing (đã học ở Phần 2) để trích xuất thông tin chính xác hơn.
Quy trình:
- ALGEN giải mã embedding → văn bản gần đúng (có thể sai chủ đề)
- Trích xuất từ khóa từ văn bản gần đúng
- Dùng từ khóa để truy vấn RAG
- Phản hồi từ RAG có thể chứa văn bản gốc (có thể bị che dấu)
- Dùng Membership Inference để điền vào các vị trí bị che dấu
6. Thực hành - ALGEN với canary
Bước 1: Thiết lập môi trường và tạo dữ liệu huấn luyện.

Bước 2: Repo ALGEN (link) tùy chỉnh đã có sẵn trong thư mục home của user attacker, bao gồm đủ các chỉnh sửa cần thiết. Giờ hãy cài các dependencies:

Bước 3: Tạo 50.000 canary texts đa dạng

Bước 2: Chèn canary vào vector database của nạn nhân

Bước 3: Huấn luyện bộ giải mã FlanT5-small (2 giờ)

Bước 4: Thực hiện huấn luyện bộ giải mã. Quá trình huấn luyện sử dụng max_length=64 (tạo không gian cho bộ giải mã để tạo ra các câu hoàn chỉnh) và batch_size=32 để vừa với bộ nhớ GPU.

Bước 5: Chạy tấn công với căn chỉnh canary

Kết quả mong đợi: Bộ giải mã tái tạo văn bản gần đúng, có thể sai chủ đề nhưng chứa đủ từ khóa để làm đầu vào cho RAG probing.
PHẦN 2: Vec2Text - Vũ khí "hạt nhân" của đảo ngược embedding
1. Tại sao cần Vec2Text?
ALGEN rất mạnh, nhưng vẫn có giới hạn. Nó có thể tái tạo văn bản gần đúng (Rouge-L ~45%), nhưng không chính xác đến từng từ.
Nếu bạn cần độ chính xác tuyệt đối - ví dụ để trích xuất mật khẩu chính xác - bạn cần một vũ khí mạnh hơn: Vec2Text.
Vec2Text (Morris et al., 2023) là phương pháp đảo ngược embedding có giám sát (supervised) mạnh nhất hiện nay. Điểm mạnh của nó:
- Độ chính xác cao nhất: Có thể đạt >93% độ tương tự, và exact match lên đến 28%
- Hoạt động với API đóng: Không cần biết trọng số mô hình
- Có thể tấn công hàng loạt: Sau khi huấn luyện, mỗi chunk chỉ mất ~15 phút
Nhưng cái giá phải trả: 60 giờ huấn luyện trên GPU.
2. Kiến trúc hai giai đoạn của Vec2Text
Vec2Text không chỉ là một mô hình, mà là hai mô hình phối hợp với nhau:
Giai đoạn 1: Inverter (Bộ đảo ngược)
Bộ đảo ngược học một ánh xạ trực tiếp từ embedding sang văn bản. Nó nhận một embedding vector và tạo ra một "giả thuyết" văn bản ban đầu.
Nhưng giả thuyết này thường không hoàn hảo. Nó có thể đúng ý nhưng sai từ, hoặc đúng cấu trúc nhưng sai chi tiết.
Giai đoạn 2: Corrector (Bộ chỉnh sửa)
Bộ chỉnh sửa nhận:
- Giả thuyết văn bản từ bước 1
- Embedding của giả thuyết đó
- Embedding mục tiêu (của văn bản gốc)
Nó tính phần dư (residual) - sự khác biệt giữa embedding mục tiêu và embedding của giả thuyết.
Sau đó, nó tạo ra một phiên bản đã chỉnh sửa của giả thuyết, với mục tiêu thu hẹp phần dư này.
Quá trình lặp lại: Bộ chỉnh sửa chạy 20-50 vòng, mỗi vòng giả thuyết được tinh chỉnh thêm một chút, cho đến khi nó hội tụ về văn bản gốc.
3. Vec2Text hoạt động thế nào trong thực tế?
Hãy tưởng tượng bạn đang vẽ một bức chân dung. Inverter là lần phác thảo đầu tiên - bạn có một hình dáng cơ bản. Corrector là quá trình bạn nhìn vào bức ảnh gốc và bức phác thảo, rồi chỉnh sửa từng chi tiết: mắt to hơn một chút, mũi dài hơn một chút... Mỗi vòng lặp bức chân dung giống ảnh gốc hơn.
Điều đặc biệt: Vec2Text có thể hoạt động với API đóng (như OpenAI) vì nó không cần biết trọng số của mô hình embedding. Nó chỉ cần gửi truy vấn đến API để nhận embedding của các giả thuyết, rồi so sánh với embedding mục tiêu.
4. Thực hành - Vec2Text
Lưu ý: Huấn luyện Vec2Text mất khoảng 60 giờ trên Tesla T4.
Bước 1: Tạo hybrid corpus (80% doanh nghiệp, 20% Wikipedia)

Bước 2: Huấn luyện bộ Inverter (mất khoảng 50 giờ). Bộ đảo ngược (Inverter) học cách ánh xạ một embedding 384 chiều thành văn bản thông qua một lớp chiếu MLP và một bộ giải mã T5-base. MLP chiếu embedding thành 32 pseudo-token, mỗi token có 768 chiều, mà bộ giải mã T5 sử dụng qua cơ chế cross-attention để tạo ra văn bản một cách tự hồi quy:

Sau 20 epoch (khoảng 50 giờ trên T4), bộ đảo ngược đạt độ tương tự cosine trung bình 0,92 giữa embedding gốc và embedding được tái tạo, với điểm BLEU là 59,4 và ROUGE-L là 0,78 — có nghĩa là văn bản được phục hồi khớp chặt chẽ với bản gốc cả về nội dung lẫn cách diễn đạt. Tỷ lệ khớp chính xác 0,28 có nghĩa là khoảng một trong bốn mẫu validation được tái tạo nguyên văn.
Bước 3: Huấn luyện Corrector (mất khoảng 10 giờ). Bộ chỉnh sửa (Corrector) nhận đầu ra của bộ đảo ngược và tinh chỉnh nó bằng cách sử dụng phần dư embedding (sự khác biệt giữa embedding mục tiêu và embedding của giả thuyết). Nó nối một phép chiếu của phần dư này với văn bản giả thuyết đã được mã hóa bằng T5 và bộ giải mã tạo ra một phiên bản đã được chỉnh sửa. Trước khi huấn luyện, nó tạo trước các giả thuyết tìm kiếm theo chùm từ bộ đảo ngược cho mọi mẫu huấn luyện:

Chỉ số correction_gain của bộ chỉnh sửa đo lường mức cải thiện độ tương tự cosine trung bình so với giả thuyết ban đầu của bộ đảo ngược. Vì bộ đảo ngược đã đạt độ tương tự 0,92, đóng góp biên của bộ chỉnh sửa là nhỏ, nhưng vẫn tích cực. Tổng thời gian huấn luyện cho cả hai giai đoạn là khoảng 60 giờ trên một GPU T4 duy nhất.
Bước 4: Với các mô hình đã được huấn luyện, pipeline tấn công kết hợp tái tạo (15 phút mỗi chunk), khớp mẫu và điền vị trí thành một lệnh duy nhất. Vì đầu ra khá dài, hãy xem xét nó từng bước một:

Mô hình đảo ngược khôi phục ngữ cảnh cấu trúc với độ tương đồng 93,6%. Sau đó, pipeline sử dụng phần văn bản đã được khôi phục này để chọn ra danh mục mẫu (template) khớp nhất:

Văn bản được phục hồi đã xác định chính xác đoạn này là một tài liệu credential_reset, thu hẹp nhóm mẫu từ hơn 200 mẫu trên tất cả các danh mục xuống còn 20 mẫu phù hợp nhất. Với danh mục mẫu đã được xác định, công cụ điền vị trí brute-force từng trình giữ chỗ so với embedding mục tiêu. Các giá trị có entropy thấp (URL, tên người dùng) được phục hồi trước và khóa lại, sau đó vị trí mật khẩu được chạy lại với ngữ cảnh bổ sung đó:

Chiến lược điền và khóa lũy tiến trước tiên phục hồi URL và tên người dùng (các giá trị có entropy thấp, độ tin cậy cao), khóa chúng vào mẫu, sau đó chạy lại vị trí mật khẩu với ngữ cảnh bổ sung đó. Điều này đã cải thiện z-score phục hồi mật khẩu từ 5,44 lên 6,50 — ngữ cảnh đã khóa làm giảm nhiễu trong mẫu, làm cho đóng góp của vị trí mật khẩu vào độ tương tự cosine tổng thể trở nên dễ phân biệt hơn.
Kết quả mong đợi:
[Recon] sim=0.9360 "Please navigate to https://login.megacorpone.ai and click on"
...
[Slot: PASSWORD] Winner: N0=Acc3ss (confidence=HIGH, z=6.50)
Giải thích: Vec2Text tái tạo văn bản với độ tương tự 93.6%, sau đó dùng recon-guided template selection để chọn mẫu phù hợp nhất, và progressive fill-and-lock để điền các vị trí {URL}, {USERNAME}, rồi {PASSWORD}.
PHẦN 3: Cẩm nang chọn vũ khí
1. Bảng so sánh 4 phương pháp
| Tiêu chí | emb_fin.py (Zero-Shot) | zero2text_impl.py (Zero-Shot) | ALGEN (Few-Shot) | Vec2Text (Supervised) |
|---|---|---|---|---|
| Cách làm | So sánh với 500.000 mẫu, bỏ phiếu chọn mật khẩu | Xây dựng lại văn bản token-by-token bằng beam search | Căn chỉnh không gian embedding, giải mã bằng FlanT5-small | Inverter + Corrector, tinh chỉnh qua 20-50 vòng lặp |
| Cần biết mô hình? | ✅ Cần | ✅ Cần | ❌ Không cần (căn chỉnh bằng canary) | ✅ Cần |
| Thời gian chuẩn bị | 0 giờ (không huấn luyện) | 0 giờ (không huấn luyện) | 2 giờ (huấn luyện decoder) | 60 giờ (huấn luyện inverter + corrector) |
| Thời gian/chunk | 2-5 phút | 10-60 phút | 5-10 phút | ~15 phút |
| Cần GPU? | ❌ Không (CPU đủ) | ✅ Có (bắt buộc) | ✅ Có | ✅ Có |
| Cần dữ liệu rò rỉ? | ❌ Không | ❌ Không | ✅ Cần vài trăm cặp (hoặc canary) | ✅ Cần hàng triệu cặp |
| Độ chính xác | 60-92% | 85-96% | 40-75% | 85-96% |
| Exact match | Thấp (phụ thuộc mẫu) | Trung bình | Trung bình | Cao (~28% với 32 token) |
| Tấn công hàng loạt? | ✅ Có | ❌ Không (chậm) | ✅ Có | ✅ Có |
| Khả năng tái sử dụng | Cao (dùng lại mẫu) | Thấp (chạy lại từ đầu) | Trung bình (có thể dùng lại decoder) | Cao (dùng lại mô hình) |
| Phù hợp nhất | Chủ đề phổ biến, cần kết quả nhanh | Cách 1 thất bại, có GPU | Không biết mô hình, có thể chèn canary | Có thời gian chuẩn bị, cần độ chính xác cao |
2. Đường dẫn quyết định
┌─────────────────────────────────────────────────────────────────┐
│ BẮT ĐẦU │
│ Bạn có embedding của nạn nhân. Bạn muốn phục hồi mật khẩu. │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────┐
│ Bạn có biết mô hình embedding │
│ của nạn nhân không? │
└───────────────────────────────┘
│ │
Có Không
│ │
▼ ▼
┌─────────────────────────┐ ┌──────────────────────────┐
│ ✅ Chạy emb_fin.py │ │ ✅ Dùng ALGEN │
│ (Cách 1 - Ngân hàng mẫu)│ │ - Chèn canary vào DB │
└─────────────────────────┘ │ - Huấn luyện decoder │
│ │ - Căn chỉnh & tấn công │
▼ └──────────────────────────┘
┌─────────────────────────┐ │
│ Kết quả có tốt không? │ │
│ - Mẫu > 65%? │ │
│ - Z-score > 3.0? │ │
│ - Tin cậy CAO? │ │
└─────────────────────────┘ │
│ │ │
Có Không │
│ │ │
▼ ▼ ▼
┌──────────┐ ┌────────────────────┐ ┌─────────────────────┐
│ ✅ DỪNG │ │ Chạy zero2text │ │ ALGEN cho kết quả │
│ Kết quả │ │ (Cách 2 - Beam) │ │ chưa đủ chính xác? │
│ đủ tốt! │ └────────────────────┘ └─────────────────────┘
└──────────┘ │ │
▼ ▼
┌────────────────────┐ ┌─────────────────────────┐
│ Kết quả từ Cách 2 │ │ ✅ Dùng Vec2Text │
│ đã tốt chưa? │ │ (Chỉ khi có 60 giờ) │
└────────────────────┘ └─────────────────────────┘
│ │ │
Có Không │
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────────────────────┐
│ ✅ DỪNG │ │ Cân nhắc: │
│ Kết quả │ │ - Bạn có 60 giờ không? │
│ đủ tốt! │ │ - Cần tấn công nhiều? │
└──────────┘ │ - Ngân sách có cho phép?│
└──────────────────────────┘
3. Tình huống thực tế - Áp dụng quy trình
🟢 Tình huống 1: Bạn biết mô hình, cần kết quả nhanh
Bạn: "Tôi đã xác định được mô hình là all-MiniLM-L6-v2."
Bạn: "Tôi không có GPU."
Bạn: "Tôi cần kết quả trong 10 phút."
✅ Chọn: emb_fin.py (Cách 1)
- Chạy ngay, không cần huấn luyện
- Tạo ngân hàng mẫu 500K câu
- Nhận kết quả sau 2-5 phút
🟡 Tình huống 2: Cách 1 cho kết quả yếu
Bạn: "emb_fin.py cho độ tương tự 52%, z-score 1.2."
Bạn: "Kết quả chỉ ở mức WEAK."
Bạn: "Tôi có GPU Tesla T4."
✅ Chọn: zero2text_impl.py (Cách 2)
- Chạy beam search với GPT-2
- Không cần mẫu có sẵn
- Có thể đạt 85-96% độ tương tự
🟠 Tình huống 3: Không biết mô hình embedding
Bạn: "Tôi đã export embeddings nhưng không biết model nào."
Bạn: "Tôi có quyền ghi vào vector database."
Bạn: "Tôi có thể chèn dữ liệu của mình vào."
✅ Chọn: ALGEN
- Không cần biết mô hình nạn nhân
- Chèn canary để tạo dữ liệu căn chỉnh
- Huấn luyện decoder 2 giờ
- Tấn công thành công sau đó
🔴 Tình huống 4: Cần độ chính xác tối đa
Bạn: "Tôi đang tấn công một mục tiêu quan trọng."
Bạn: "Tôi có 1 tuần để chuẩn bị."
Bạn: "Tôi cần phục hồi chính xác 100+ chunk."
Bạn: "Tôi có GPU và ngân sách."
✅ Chọn: Vec2Text
- Đầu tư 60 giờ huấn luyện
- Đạt độ chính xác cao nhất
- Mỗi chunk chỉ mất 15 phút
- Giải được cả khi embedding bị nhiễu
PHẦN 4: Phòng thủ - Bảo vệ hệ thống RAG của bạn
1. Các giới hạn cần nhớ (Điểm yếu của kẻ tấn công)
🔴 Giới hạn 1: Độ dài token
Hầu hết các công cụ chỉ hoạt động tốt với văn bản ngắn (32-64 token). Với văn bản dài (256-512 token), kết quả suy giảm đáng kể.
| Độ dài | Khả năng đảo ngược |
|---|---|
| 8-16 token | ✅ Rất cao (mật khẩu, khóa API) |
| 32-64 token | 🟡 Cao (câu ngắn, đoạn nhỏ) |
| 128-256 token | 🔴 Thấp (đoạn văn dài) |
| >256 token | ⛔ Rất thấp (không khả thi) |
🔴 Giới hạn 2: Mật khẩu ngẫu nhiên
Các phương pháp đều gặp khó với mật khẩu ngẫu nhiên thuần túy (entropy cao).
| Loại mật khẩu | Khả năng phục hồi |
|---|---|
N0=Acc3ss (có nghĩa) |
✅ Cao - mô hình có thể đoán |
Spring2026! (có cấu trúc) |
🟡 Trung bình - nếu có trong wordlist |
1qaz2wsx3edc4rfv (ngẫu nhiên) |
🔴 Thấp - mô hình coi như nhiễu |
🔴 Giới hạn 3: Giảm chiều và lượng tử hóa
Nhiều vector database sản xuất giảm chiều (PCA, random projection) hoặc lượng tử hóa (PQ, SQ) để tiết kiệm bộ nhớ.
| Kỹ thuật nén | Ảnh hưởng đến đảo ngược |
|---|---|
| Không nén (full dim) | ✅ Tốt nhất |
| PCA (giảm chiều) | 🟡 Làm giảm độ chính xác 20-30% |
| Product Quantization (PQ) | 🔴 Làm giảm đáng kể |
🔴 Giới hạn 4: Cần xác định mô hình
| Phương pháp | Cần biết mô hình? |
|---|---|
| emb_fin.py | ✅ BẮT BUỘC |
| zero2text_impl.py | ✅ BẮT BUỘC |
| ALGEN | ❌ KHÔNG cần (căn chỉnh canary) |
| Vec2Text | ✅ BẮT BUỘC |
2. Chiến lược phòng thủ
🛡️ Chiến lược 1: Kiểm soát truy cập vector store
| Hành động | Mức độ bảo vệ |
|---|---|
| Không để vector store public | 🟢 Cơ bản |
| Xác thực mạnh (mTLS, API keys) | 🟢 Tốt |
| Phân quyền chi tiết (read/write/admin) | 🟢 Rất tốt |
| Mã hóa embedding khi lưu trữ | 🟢 Bảo vệ dữ liệu tại rest |
🛡️ Chiến lược 2: Giảm chiều và lượng tử hóa
| Kỹ thuật | Mức độ bảo vệ | Ảnh hưởng đến chất lượng RAG |
|---|---|---|
| Product Quantization (PQ) | 🟢 Cao | 🟡 Giảm nhẹ |
| Scalar Quantization (SQ) | 🟢 Cao | 🟡 Giảm nhẹ |
| PCA (giảm chiều) | 🟡 Trung bình | 🟡 Giảm nhẹ |
🛡️ Chiến lược 3: Phát hiện canary injection
| Hành động | Hiệu quả |
|---|---|
| Giám sát batch insert bất thường | 🟢 Tốt |
| Giới hạn số lượng insert từ IP lạ | 🟢 Tốt |
| Rate limiting API embedding | 🟢 Tốt |
🛡️ Chiến lược 4: Rate limiting và giám sát
| Hành động | Hiệu quả |
|---|---|
| Rate limit API embedding | 🟢 Tốt (ngăn quét hàng loạt) |
| Logging đầy đủ các truy vấn | 🟢 Tốt (để điều tra) |
| Alert khi có nhiều truy vấn từ 1 IP | 🟢 Tốt |
🛡️ Chiến lược 5: Đừng ảo tưởng!
| Niềm tin sai lầm | Thực tế |
|---|---|
| "Embedding chỉ là số, không ai hiểu được" | ❌ Sai - có thể đảo ngược |
| "Lấy được embedding cũng chẳng làm gì được" | ❌ Sai - ALGEN & Vec2Text chứng minh điều ngược lại |
| "API của tôi chỉ trả về embedding đã mã hóa" | ❌ Sai - mọi mã hóa đều có thể bị phá |
Nếu kẻ tấn công có được embeddings, họ có thể khôi phục thông tin nhạy cảm. Bảo vệ vector database của bạn như bảo vệ kho báu.
3. Bảng tóm tắt chiến lược phòng thủ
| Mối đe dọa | Phương pháp tấn công | Phòng thủ |
|---|---|---|
| Xuất khẩu embeddings | emb_fin.py, zero2text_impl.py, ALGEN, Vec2Text | 🔒 Kiểm soát truy cập vector store |
| Không biết mô hình | ALGEN (canary injection) | 🔒 Giám sát insert bất thường |
| Tấn công hàng loạt | emb_fin.py, Vec2Text | 🔒 Rate limiting API |
| Chất lượng cao | Vec2Text (60h huấn luyện) | 🔒 Mã hóa embedding khi lưu trữ |
| Mật khẩu ngắn | Tất cả các phương pháp | 🔒 Giảm chiều/Lượng tử hóa |
💡 Thông điệp cuối cùng
Embedding không an toàn. Vector database không an toàn.
Nếu bạn đang xây dựng một hệ thống RAG, hãy bảo vệ embedding của bạn như bảo vệ mật khẩu.
Nếu bạn là một red teamer, giờ bạn đã có bộ công cụ đầy đủ để đánh giá bảo mật của các hệ thống AI.
📌 Link code tổng hợp
| Script | Mô tả |
|---|---|
| export_embeddings.py | Xuất khẩu embeddings từ Weaviate |
| inference_probing.py | Xác định mô hình embedding |
| chunk_triage_pipe.py | Phân loại 3 tầng |
| generate_templates.py | Tạo ngân hàng mẫu |
| emb_fin.py | Zero-Shot với ngân hàng mẫu |
| zero2text_impl.py | Zero-Shot với beam search |
| ALGEN/ | Few-Shot với ALGEN |
| Vec2Text/ | Supervised với Vec2Text |
"Biết người biết ta, trăm trận trăm thắng." - Tôn Tử
Cảm ơn bạn đã theo dõi toàn bộ series! 🎯
All rights reserved