Mistral-7B Cybersecurity MixLoRA (Q4_K_M GGUF)
Mô hình ngôn ngữ chuyên ngành An toàn thông tin, fine-tune từ
mistralai/Mistral-7B-Instruct-v0.3 bằng QLoRA / RS-LoRA, đóng gói ở định dạng
GGUF (Q4_K_M) để chạy bằng llama.cpp hoặc Ollama trên CPU/GPU phổ thông.
Internship project — Large Language Model for Cybersecurity — HCMUT (BK TP.HCM), học kỳ 242, 2024–2025. SV: Nguyễn Hoàng Dung (2252109). GVHD: Nguyễn Lê Quốc Anh.
Tóm tắt
| Hạng mục | Giá trị |
|---|---|
| Base model | mistralai/Mistral-7B-Instruct-v0.3 (load 4-bit qua unsloth/...-bnb-4bit) |
| Kỹ thuật | QLoRA + RS-LoRA (use_rslora=true) |
| LoRA config | r=96, lora_alpha=128, lora_dropout=0, bias=none |
| target_modules | q,k,v,o_proj + gate,up,down_proj |
| Quantization train | bitsandbytes NF4, compute_dtype=bfloat16, double-quant |
| Max seq length | 16384 |
| Optimizer | adamw_8bit, scheduler linear, warmup_ratio=0.03 |
| Final train loss | ~0.2311 |
| File GGUF | mistral_mixlora_q4_k_m.gguf — Q4_K_M, ~4.07 GB, GGUF v3 |
| Arch / params / ctx | llama / 7.2B / 32768 |
Lưu ý: báo cáo PDF mô tả phiên bản 2-adapter merge (r=64, alpha=128) trên When2Call + VulZoo-CWE. File GGUF công bố ở đây là bản MixLoRA / RS-LoRA (r=96) hội tụ tốt hơn (loss ≈ 0.2311) — đó là lý do tên thư mục
0.2311_Q4_MixLora_K_M.
Dữ liệu huấn luyện
- nvidia/When2Call (
sft_train, ~15k mẫu): năng lực function-calling / phân loại & điều phối incident response. - NUS-Curiosity/VulZoo — CWE subset (1.634 loại CWE): kiến thức điểm yếu phần mềm (mô tả, nền tảng, ví dụ, biện pháp khắc phục, quan hệ CWE/CVE).
Mục đích sử dụng
Trợ lý kiểm thử xâm nhập theo OWASP ASTG: gợi ý chiến lược, payload, công cụ (nmap, nikto, sqlmap, Burp, ffuf…), kết quả kỳ vọng và biện pháp khắc phục, cùng tri thức CWE/CVE. Chỉ dùng cho kiểm thử được cấp phép / mục đích giáo dục & phòng thủ.
Prompt format (Mistral Instruct)
<s>[INST] {system}\n\n{user_prompt} [/INST]
Cách dùng
llama.cpp
llama-cli -m mistral_mixlora_q4_k_m.gguf -c 8192 \
-p "[INST] What is CWE-502: Deserialization of Untrusted Data? [/INST]"
Ollama (kèm Modelfile pentester trong repo)
ollama create mistral-cyber-mixlora:0.2311-q4km -f Modelfile
ollama run mistral-cyber-mixlora:0.2311-q4km "Analyze https://target/search?q=test for SQLi"
Python (llama-cpp-python)
from llama_cpp import Llama
llm = Llama(model_path="mistral_mixlora_q4_k_m.gguf", n_ctx=8192)
out = llm("[INST] Explain CWE-89 and how to remediate it [/INST]", max_tokens=512)
print(out["choices"][0]["text"])
Thông số sinh khuyến nghị (theo Modelfile)
temperature=0.25, top_p=0.85, top_k=35, repeat_penalty=1.18, num_ctx=8192.
Hạn chế
- Đánh giá chủ yếu bằng training loss + định tính; chưa có benchmark chuẩn / human eval quy mô. Có thể bịa CVE/CWE (hallucination) — luôn kiểm chứng.
- Q4_K_M giảm chất lượng nhẹ so với FP16; có sẵn bản
mistral_mixlora.gguf(FP16) nếu cần.
Trích dẫn
@misc{dung2025mistralcyber,
title = {Large Language Model for Cybersecurity: Mistral-7B MixLoRA},
author = {Nguyen Hoang Dung and Nguyen Le Quoc Anh},
year = {2025},
school = {Ho Chi Minh City University of Technology (HCMUT)},
note = {Internship project, GalaxyOne}
}
Benchmark Results (đo thực tế) (mistral_mixlora_q4_k_m.gguf)
Thực thi thực tế ngày 2026-06-14 bằng llama.cpp (build
b1-8ed274e, ggml 0.15.1). File đo:models/mistral_mixlora_q4_k_m.gguf— Q4_K_M, 4,372,815,392 bytes (~4.07 GiB), GGUF v3, archllama, 7.25B params, ctx tối đa 32768.
4.1 Môi trường benchmark
| Thành phần | Chi tiết |
|---|---|
| CPU | AMD Ryzen 7 3800X (8C/16T) |
| RAM | 30 GiB |
| GPU | NVIDIA GeForce RTX 5060 Ti 16 GB (Blackwell, compute capability 12.0) |
| Driver / CUDA runtime | 580.159.03 / CUDA 13.0 |
| CUDA toolkit (build) | 12.4 — build llama.cpp với CMAKE_CUDA_ARCHITECTURES=90 (PTX), driver JIT sang sm_120 |
| llama.cpp | commit 8ed274e, target: llama-bench / llama-perplexity / llama-cli |
4.2 Tốc độ suy luận (llama-bench, prompt 512 tok, gen 128 tok, trung bình 5 lần)
| Backend | Prefill (pp512) | Decode (tg128) |
|---|---|---|
| CPU (16 threads) | 47.49 ± 0.56 t/s | 4.27 ± 0.06 t/s |
| GPU (CUDA, -ngl 99) | 3730.05 ± 145.96 t/s | 89.86 ± 0.07 t/s |
→ GPU nhanh hơn CPU ~78× ở prefill và ~21× ở decode. Model 4 GB nạp trọn vào 16 GB VRAM.
4.3 Perplexity (chất lượng ngôn ngữ tổng quát)
- Dataset: WikiText-2 raw (
wiki.test.raw),n_ctx=512, 642 chunks, GPU. - Final estimate: PPL = 6.6085 ± 0.03883
Đây là PPL trên văn bản tiếng Anh tổng quát. Mức ~6.6 (ctx 512) cho thấy model vẫn giữ
năng lực ngôn ngữ nền sau khi fine-tune chuyên ngành (không bị suy thoái thảm khốc).
Lưu ý: PPL tính ở ctx=512; nếu đo ở ctx lớn hơn (2048+) giá trị sẽ thấp hơn — khi so sánh
giữa các bản (FP16 vs Q4, base vs finetune) phải giữ cùng ctx và cùng file test.
4.4 Chất lượng theo domain (Domain QA, GPU, temp=0.25/top_p=0.85/top_k=35, gen ≤320 tok)
Bộ 5 câu hỏi CWE + incident response. Trích kết quả (đã cắt ở 320 token):
Q1 — What is CWE-502 (Deserialization of Untrusted Data)?
Mô tả đúng bản chất lỗi deserialization untrusted → RCE; gợi ý công cụ
ysoserial(gadget chain CommonsCollections), Burp Intruder fuzzing, payloadContent-Type: application/x-java-serializable. Cấu trúc theo Strategy/Payload/Tools/Explanation/Expected Outcome. ✔ Chính xác kỹ thuật.
Q2 — Explain CWE-89 (SQL Injection) + 3 remediations.
Giải thích thiếu sanitize input; payload
' UNION SELECT NULL--; toolssqlmap, Burp; remediation: parameterized queries, least-privilege, WAF. ✔ Đúng trọng tâm.
Q3 — CWE-79 (XSS) và vai trò output encoding.
Nêu đúng cơ chế: encode
</>thành</>để vô hiệu script; payload<script>alert('XSS')</script>; tools OWASP ZAP, Burp; remediation OWASP Java Encoder. ✔ Đúng.
Q4 — Web server đang bị DDoS, liên hệ ai & xử lý ngay?
Khuyến nghị liên hệ hosting/network team, chặn IP bằng
iptables -A INPUT -s <ip> -j DROP, rate-limit bằng nginxlimit_req, load balancing. ✔ Thể hiện năng lực incident-response (When2Call).
Q5 — Phân tích URL …/search?q=test cho SQLi.
Chọn chiến lược UNION-based, payload
' UNION SELECT NULL--, lệnhcurlđã URL-encode +sqlmap -u … --tables, remediation đầy đủ 3 lớp. ✔ Áp dụng đúng vào mục tiêu cụ thể.
Nhận xét tổng hợp: Model bám đúng template OWASP ASTG (Strategy → Payload → Tools →
Explanation → Expected Outcome → Remediation), kết hợp được tri thức CWE (từ VulZoo) và
phản ứng theo tình huống (từ When2Call). Hạn chế quan sát: payload SQLi đôi khi lặp lại mẫu
' UNION SELECT NULL-- (đa dạng thấp); cần kiểm chứng thủ công trước khi dùng. Output bị cắt ở
mốc 320 token (do -n 320), tăng num_predict nếu cần phần Remediation đầy đủ.
4.5 Chấm điểm tự động: Kiến thức & Khả năng chọn/gọi tools
Harness grade_bench.py (chạy GPU, temp=0.2). Chấm tự động bằng regex khớp đáp án đúng.
A. Knowledge — tra cứu CWE-ID → tên weakness (12 câu)
| Kết quả | Điểm |
|---|---|
| Đúng | 1 / 12 = 8.3 % |
Ví dụ bịa sai (hallucination) đáng lưu ý:
| Hỏi | Đáp án đúng | Model trả lời |
|---|---|---|
| CWE-89 | SQL Injection | "improper neutralization of OS commands" ✗ |
| CWE-79 | Cross-site Scripting | "Buffer Overflow" ✗ |
| CWE-502 | Deserialization of Untrusted Data | "Insecure Permissions" ✗ |
| CWE-78 | OS Command Injection | "Insecure Deserialization" ✗ |
| CWE-434 | Unrestricted Upload of File | "Uncontrolled… upload" ✓ |
Phát hiện quan trọng: model nhớ phần mô tả lỗi (khi tên CWE có sẵn trong câu hỏi — xem 4.4, trả lời rất tốt) nhưng KHÔNG nhớ ánh xạ số hiệu CWE → tên. Nguyên nhân: dữ liệu CWE từ VulZoo được học theo dạng mô tả/giải thích, thiếu cặp huấn luyện "CWE-XX = tên". Đây chính là điểm cần bổ sung dữ liệu nếu muốn dùng model để tra cứu theo ID.
B. Tool selection / function-calling — chọn đúng công cụ cho nhiệm vụ (10 câu)
| Kết quả | Điểm |
|---|---|
| Đúng (chấm chặt) | 8 / 10 = 80 % |
| Nhiệm vụ | Tool kỳ vọng | Model | KQ |
|---|---|---|---|
| Tự động khai thác SQLi | sqlmap | sqlmap | ✓ |
| Fingerprint web stack | whatweb/nmap | nmap | ✓ |
| Brute-force thư mục | ffuf/gobuster/dirb | dirb | ✓ |
| Quét lỗ hổng web | nikto/ZAP | ZAP | ✓ |
| Sửa/intercept HTTP | Burp | Burp | ✓ |
| Tìm exploit công khai | searchsploit/metasploit | Nessus | ✗* |
| Bắt gói mạng | wireshark/tcpdump | Wireshark | ✓ |
| Phát hiện WAF | wafw00f | nmap http-waf-detect | ✗* |
| Port scan | nmap | nmap | ✓ |
| Test reflected XSS | xsstrike/dalfox/burp | Burp Repeater | ✓ |
*2 ca "fail" thực ra là câu trả lời hợp lý về kỹ thuật (Nessus tìm lỗ hổng/exploit;
nmap --script http-waf-detectphát hiện WAF), chỉ là không trùng tool kỳ vọng cứng. Nếu chấm theo "giải pháp đúng" thì năng lực chọn tool ~90–100 %. Model luôn xuất đúng format Strategy/Payload/Tools → khả năng gọi tools (function-calling) tốt — phù hợp mục tiêu When2Call.
Tổng kết điểm
| Trục | Điểm | Đánh giá |
|---|---|---|
| Knowledge (CWE ID→tên) | 8.3 % | ❌ Yếu — cần bổ sung dữ liệu ánh xạ ID |
| Knowledge (mô tả khi có tên, xem 4.4) | tốt (định tính) | ✔ |
| Tool selection / function-calling | 80 % (≈90 %+ nếu chấm linh hoạt) | ✔ Mạnh |
| Perplexity (WikiText-2, ctx512) | 6.61 | ✔ Giữ năng lực nền |
4.6 Cách tái lập
# Build (GPU Blackwell qua PTX JIT; bỏ 2 cờ CUDA nếu chạy CPU)
git clone --depth 1 https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=90 -DCMAKE_BUILD_TYPE=Release
cmake --build build -j --target llama-bench llama-perplexity llama-cli
GGUF=models/mistral_mixlora_q4_k_m.gguf
# (1) tốc độ
./build/bin/llama-bench -m $GGUF -p 512 -n 128 -ngl 99 -r 5
# (2) perplexity (wikitext-2-raw/wiki.test.raw)
./build/bin/llama-perplexity -m $GGUF -f wiki.test.raw -ngl 99 -c 512
# (3) domain QA (single-turn; bản llama.cpp mới dùng -st thay cho -no-cnv)
./build/bin/llama-cli -m $GGUF -ngl 99 -c 4096 -n 320 -st --no-warmup \
--temp 0.25 --top-p 0.85 --top-k 35 --repeat-penalty 1.18 \
-sys "You are an expert penetration tester ..." -p "What is CWE-502?"
Lưu ý phiên bản: llama.cpp mới đã bỏ
-no-cnv(báo lỗi "use llama-completion instead"); dùng-st/--single-turn. Máy không cóunzip→ giải nén wikitext bằngpython3 -c "import zipfile; ...".
- Downloads last month
- 187
4-bit
Model tree for anhnlq/mistral-7b-cybersecurity-mixlora-GGUF
Base model
mistralai/Mistral-7B-v0.3