- Reverse proxy mã nguồn mở đặt giữa Claude Code và Anthropic, ẩn danh IP, hash, credential, hostname trước khi gửi đi, rồi phục hồi data thật local.
- Dual-layer Ollama LLM + regex, per-engagement vault, 0% leak trên 645+ test items.
TL;DR
zeroc00I/LLM-anonymization là reverse proxy cho Claude Code: trước khi prompt đi tới Anthropic, proxy thay mọi IP, hash, credential, hostname bằng surrogate; khi response trả về, proxy khôi phục lại data thật ở local. Kết quả: operator thấy nguyên bản, Claude chỉ thấy data ẩn danh. Dual-layer detection (Ollama LLM + regex), vault SQLite riêng cho từng engagement, test suite ép 0% leak trên 645+ item.
What's new
Repo mới nổi trên X qua tweet của VivekIntel, hiện 166 stars / 20 forks, 4 commits — giai đoạn sớm nhưng đã chạy được end-to-end. Điểm khác biệt so với các công cụ PII redaction generic (Presidio, gateway của Radicalbit): fixture và regex được viết riêng cho ngữ cảnh pentest — nmap, mimikatz, CrackMapExec, Responder, NTDS dump, Burp HTTP history, Zeek conn.log, CloudTrail, AWS Pacu, Volatility, GoPhish, Kerberos/NTLM, AD CS.
Why it matters
Pentester dùng Claude Code rất nhanh, nhưng hầu hết NDA cấm gửi IP nội bộ, credential, hostname ra third-party API. Hai lựa chọn cũ đều đau:
- Bỏ Claude, dùng model local nhỏ hơn → giảm chất lượng phân tích rõ rệt.
- Redact bằng tay → dễ lọt, không reversible, mệt.
Proxy này giữ full power của Claude nhưng nội dung đi ra đã được thay bằng surrogate, và deanonymize khi data quay về — pentester vẫn nhìn thấy 10.20.0.10 = dc01.acmecorp.local, Claude chỉ thấy 203.0.113.47 = dc-0042.pentest.local.
How it works
Dòng chảy một request:
User nhập: nmap 10.20.0.10
↓ proxy ẩn danh
Claude nhận: nmap 203.0.113.47
↓ Claude trả lời
Response: "203.0.113.47 is DC01"
↓ proxy deanonymize bằng vault
User thấy: "10.20.0.10 is dc01.acmecorp.local"Hai lớp phát hiện chạy song song:
- LLM detector (Ollama,
qwen3:1.7bmặc định) — bắt contextual data: bare hostname, domain\username, cleartext password, tên tổ chức, file path. - Regex safety net — IPv4/IPv6, CIDR, MD5/SHA1/SHA256/NTLM, MAC, email, domain, URL, AWS token, JWT.
Tầng dưới là PII Vault dạng SQLite: surrogate mapping bền giữa các session, cô lập theo ENGAGEMENT_ID. Cùng một IP trong engagement A và B sẽ map sang hai surrogate khác nhau — không có cross-client correlation nếu vault lỡ rò rỉ.
Technical facts
| Hạng mục | Chi tiết |
|---|---|
| Model mặc định | qwen3:1.7b (~1–2s/req) |
| Model high-stakes | qwen3:4b (~3–5s/req) |
| Model test | qwen3:0.6b |
| Test fixtures | 49 fixtures, 645+ items |
| Catch rate | 100% (ép 0% leak) |
| Catch rate ban đầu | ~85% (16 fixtures) |
| Surrogate IPv4 | RFC 5737 TEST-NET (203.0.113.x...) |
| Surrogate domain | *.pentest.local |
| Port mặc định | 8080 |
| Chunk size LLM | 1500 ký tự |
| Deploy modes | VPS / Python+Ollama / Docker |
Biến môi trường chính: ENGAGEMENT_ID, OLLAMA_HOST, OLLAMA_MODEL, LLM_ENABLED, OLLAMA_TIMEOUT, LLM_CHUNK_SIZE, PORT.
Comparison
| Phương án | Data ra ngoài? | Sức mạnh LLM | Reversible? |
|---|---|---|---|
| Claude Code trực tiếp | Có (raw → Anthropic) | Full frontier | N/A |
| METATRON (local-only Ollama) | Không | Hạn chế bởi local model | N/A |
| LLM-anonymization proxy | Không (đã ẩn danh) | Full Claude | Có (vault local) |
| Redact thủ công | Tuỳ, dễ sai | Full frontier | Không |
Use cases
- Red team engagement mà NDA cấm gửi IP/credential nội bộ ra third-party API.
- Phân tích
nmap,CrackMapExec,mimikatz,Responder, NTDS dump bằng Claude mà không lộ AD domain thật. - Triage Burp HTTP history, Zeek
conn.log, CloudTrail event, output AWS Pacu. - Công ty pentest multi-client: mỗi engagement một vault riêng, tránh cross-client correlation.
- Blue/purple team dùng Claude để tóm tắt alert mà không leak hostname nội bộ.
Limitations & pricing
- Miễn phí, open source trên GitHub; README chưa gắn license file rõ ràng — nên fork/pin commit SHA nếu dùng cho engagement thật.
- Tắt
LLM_ENABLEDsẽ mất khả năng bắt contextual data (bare hostname, domain\username lạ). - Output dày hơn 1500 ký tự có thể bị chia chunk, rủi ro miss ở biên.
- Không bảo vệ screenshot, file paste ngoài Claude Code, hoặc tool bên ngoài.
- Tấn công tương quan dựa trên writing style/metadata nằm ngoài phạm vi — proxy không ẩn được giọng văn đặc trưng của org.
- Surrogate có thể đụng nhau (xác suất thấp, không phải zero) trong cùng engagement.
- Không thay thế NDA, contract, DLP — chỉ là một lớp defense-in-depth.
- Cần Ollama chạy local + 1.7B–4B model (~vài GB RAM/VRAM).
What's next
Dấu hiệu từ README: tiếp tục mở rộng fixture suite (đã đi từ 16 lên 49), tinh chỉnh prompt LLM cho edge-case contextual, và polish VPS deployment. Project có script auto_improve.py: chạy regex-only trên toàn bộ fixture → báo leak → auto-patch regex mới → refine system prompt cho phần còn lại. Cycle <5 giây ở giai đoạn regex, ~1–2 phút cho full pipeline.
Nếu bạn đang dùng Claude Code trong engagement và đang redact tay — đây là tool đáng thử nghiệm trong lab trước khi đưa vào production. Pin commit SHA, test trên fixture riêng của bạn, và đừng quên: tool này là defense-in-depth, không thay thế NDA.
Nguồn: github.com/zeroc00I/LLM-anonymization, tweet gốc, METATRON (so sánh), Radicalbit — LLM data privacy.

