# PentestFusion Một hệ thống Adapter Fusion cho các tác vụ Pentest, kết hợp nhiều LoRA adapters được fine-tune trên các domain khác nhau của cybersecurity. ## 📋 Tổng quan PentestFusion sử dụng kỹ thuật **Adapter Fusion** để kết hợp 4 LoRA adapters chuyên biệt: - **CVE Adapter**: Phân tích và khai thác CVE - **CAPEC Adapter**: Hiểu biết về các attack patterns (CAPEC) - **Tools Adapter**: Kiến thức về các công cụ pentest - **VulHub Adapter**: Writeups và hướng dẫn từ VulHub Mỗi adapter được fine-tune độc lập trên Llama-3.1-8B-Instruct, sau đó được kết hợp thông qua một **Fusion Layer** sử dụng attention mechanism để tự động điều chỉnh trọng số dựa trên input. ## 🏗️ Kiến trúc ### Base Model - **Model**: `Meta-Llama-3.1-8B-Instruct` (4-bit quantization) - **Framework**: Unsloth (tối ưu hóa training và inference) ### LoRA Adapters Mỗi adapter sử dụng: - **Rank (r)**: 32 - **LoRA Alpha**: 64 - **Target Modules**: `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj` ### Adapter Fusion Layer Fusion layer sử dụng **attention mechanism** để: 1. Tính toán attention scores giữa base model output và từng adapter output 2. Tự động điều chỉnh trọng số cho từng adapter dựa trên context 3. Kết hợp các outputs thành một representation thống nhất ```python # Kiến trúc Fusion h (base model) → Query z₁, z₂, z₃, z₄ (adapters) → Keys & Values Attention(Q, K, V) → Fused Output ``` ## 📦 Cài đặt ### Yêu cầu - Python 3.8+ - CUDA-capable GPU (khuyến nghị) - 16GB+ RAM ### Cài đặt dependencies ```bash pip install -r requirements.txt ``` ## 🚀 Sử dụng ### 1. Load model và adapters ```python from run_fusion import FusionModel import torch from unsloth import FastLanguageModel from peft import PeftModel # Load base model BASE_MODEL = "unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit" model, tokenizer = FastLanguageModel.from_pretrained( model_name=BASE_MODEL, max_seq_length=2048, ) # Load adapters model = PeftModel.from_pretrained(model, "./adapters/llama3_cve_adapter", adapter_name="cve") model.load_adapter("./adapters/llama3_capec_adapter", adapter_name="capec") model.load_adapter("./adapters/llama3_tool_adapter", adapter_name="tools") model.load_adapter("./adapters/llama3_vulhub_writeup_adapter", adapter_name="vulhub") # Tạo fusion model fusion_model = FusionModel(model, ["cve", "capec", "tools", "vulhub"]).cuda() # Load fusion layer weights fusion_model.fusion.load_state_dict( torch.load("./fusion_layer.pt", map_location="cuda") ) fusion_model.eval() ``` ### 2. Inference ```python prompt = "Analyze CVE-2017-15715 and outline exploitation steps." inputs = tokenizer(prompt, return_tensors="pt").to("cuda") with torch.no_grad(): logits, weights = fusion_model(**inputs) # Decode output output_ids = torch.argmax(logits, dim=-1) output_text = tokenizer.decode(output_ids[0], skip_special_tokens=True) # Xem fusion weights (độ quan trọng của từng adapter) print("Fusion Weights:") print(f"CVE : {weights.mean(dim=1)[0][0].item():.4f}") print(f"CAPEC : {weights.mean(dim=1)[0][1].item():.4f}") print(f"TOOLS : {weights.mean(dim=1)[0][2].item():.4f}") print(f"VULHUB: {weights.mean(dim=1)[0][3].item():.4f}") ``` ### 3. Chạy demo ```bash python run_fusion.py ``` ## 📁 Cấu trúc thư mục ``` pentestfusion/ ├── adapters/ │ ├── llama3_cve_adapter/ # CVE analysis adapter │ ├── llama3_capec_adapter/ # CAPEC patterns adapter │ ├── llama3_tool_adapter/ # Pentest tools adapter │ └── llama3_vulhub_writeup_adapter/ # VulHub writeups adapter ├── fusion_layer.pt # Trained fusion layer weights ├── run_fusion.py # Main script ├── requirements.txt # Dependencies └── README.md # Documentation ``` ## 🔬 Chi tiết kỹ thuật ### Adapter Fusion Mechanism Fusion layer sử dụng **multi-head attention** để kết hợp outputs: 1. **Base model output** (`h`) được dùng làm query 2. **Adapter outputs** (`z₁...z₄`) được dùng làm keys và values 3. Attention scores được tính toán và normalize bằng softmax 4. Weighted sum của adapter outputs tạo ra fused representation ### Training - Mỗi adapter được fine-tune độc lập trên dataset chuyên biệt - Fusion layer được train sau khi các adapters đã được fine-tune - Training sử dụng mixed precision (FP16/BF16) để tối ưu memory ## 📊 Adapters | Adapter | Domain | Base Model | Rank | Alpha | |---------|--------|------------|------|-------| | CVE | CVE Analysis | Llama-3.1-8B | 32 | 64 | | CAPEC | Attack Patterns | Llama-3.1-8B | 32 | 64 | | Tools | Pentest Tools | Llama-3.1-8B | 32 | 64 | | VulHub | Writeups | Llama-3.1-8B | 32 | 64 | ## 🤝 Đóng góp Contributions are welcome! Please feel free to submit a Pull Request. ## 📝 License [Specify your license here] ## 🙏 Acknowledgments - [Unsloth](https://github.com/unslothai/unsloth) - Fast LLM fine-tuning framework - [PEFT](https://github.com/huggingface/peft) - Parameter-Efficient Fine-Tuning - [AdapterFusion](https://arxiv.org/abs/2005.00247) - Original Adapter Fusion paper - [LoRA](https://arxiv.org/abs/2106.09685) - Low-Rank Adaptation technique ## 📚 References - [AdapterFusion: Non-Destructive Task Composition for Transfer Learning](https://arxiv.org/abs/2005.00247) - [LoRA: Low-Rank Adaptation of Large Language Models](https://arxiv.org/abs/2106.09685) - [Bayesian-LoRA: Optimal Quantization and Rank Values](https://arxiv.org/pdf/2406.13046) ## ⚠️ Lưu ý - File `fusion_layer.pt` có kích thước lớn (~192MB). Cân nhắc sử dụng Git LFS hoặc GitHub Releases. - Model yêu cầu GPU với CUDA để inference hiệu quả. - Đảm bảo có đủ VRAM (khuyến nghị 16GB+) để load model và adapters.