File size: 4,710 Bytes
26e1c2e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | # Murshid Backend
REST API لمشروع "مرشد — من التنبيهات إلى التوجيه: ربط تقنيات MITRE ATT&CK لمحللي SOC"
## التقنيات
- **FastAPI** — REST API
- **MySQL** + **SQLAlchemy** — قاعدة البيانات
- **Alembic** — هجرة الجداول
- **Logistic Regression** — النموذج الأساسي في هذه المرحلة
- **SecureBERT+** — تضمينات نصية
- **Llama 3 8B** — تلخيص قواعد Wazuh
> المنطق مستخرج من `MurshidUIPipeline.ipynb` دون تعديله.
---
## هيكل المشروع
```
murshid_backend/
app/
main.py ← نقطة تشغيل FastAPI
config.py
api/routes/
health.py ← GET /health
rules.py ← POST /rules/analyze + GET /results/{rule_id}
queries.py ← GET /queries/{technique_id} + Admin endpoints
services/
ml_service.py
rule_service.py
result_service.py
template_service.py
ml/
sanitizer.py ← تنظيف XML
summarizer.py ← تلخيص Llama
embedder.py ← SecureBERT+
logistic_model.py ← Logistic Regression inference
pipeline.py ← analyze_rule() الشامل
models/ ← SQLAlchemy ORM (6 جداول من ER Diagram)
schemas/ ← Pydantic schemas
repositories/ ← DB access layer
db/
base.py
session.py
alembic/
versions/0001_initial_schema.py
requirements.txt
.env.example
```
---
## جداول قاعدة البيانات (مستخرجة من ER Diagram §3.2.6)
| جدول | المصدر في التقرير |
|------|-------------------|
| `users` | User entity — username, email, password_hash, role |
| `mapping_jobs` | MappingJob entity — job_id, file_name, status, progress, timestamp |
| `rules` | Rule entity — rule_id, embedding_vector, job_id |
| `techniques` | Technique entity — technique_id, technique_name, tactic |
| `rule_technique_mappings` | RuleTechniqueMapping — rule_id, technique_id, confidence_score |
| `query_templates` | QueryTemplate — purpose, wql_query, note, is_active |
---
## الإعداد والتشغيل
### 1) متطلبات
- Python 3.10+
- MySQL 8+
- GPU موصى به لـ Llama 3 8B
### 2) تثبيت
```powershell
cd d:\GP\murshid_backend
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
```
### 3) إعداد قاعدة البيانات
إنشاء قاعدة البيانات في MySQL:
```sql
CREATE DATABASE murshid_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
### 4) إعداد `.env`
```powershell
copy .env.example .env
```
عدّلي القيم:
```env
MURSHID_DB_URL=mysql+pymysql://root:YOUR_PASSWORD@localhost:3306/murshid_db
MURSHID_MODELS_DIR=d:/GP/Needed
HF_TOKEN=hf_xxxx
MURSHID_SKIP_LLM=false
```
### 5) تأكد من وجود ملفات النماذج في `d:\GP\Needed`
```
murshid_logreg_pipeline_manual_oof_pcatuned.joblib
murshid_logreg_thresholds_manual_oof_pcatuned.npy
murshid_label_columns.json
```
### 6) تشغيل Alembic (هجرة الجداول)
```powershell
alembic upgrade head
```
### 7) تشغيل الـ API
```powershell
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
```
---
## الـ Endpoints
| Method | URL | الوصف |
|--------|-----|--------|
| `GET` | `/health` | فحص حالة النظام والنماذج |
| `POST` | `/rules/analyze` | تحليل قاعدة Wazuh XML وحفظ النتائج |
| `GET` | `/results/{rule_id}` | استرجاع التقنيات المخزنة لمعرف القاعدة |
| `GET` | `/queries/{technique_id}` | جلب قوالب WQL لتقنية معينة |
| `POST` | `/admin/templates` | إضافة قالب WQL جديد (Admin) |
| `PATCH` | `/admin/templates/{id}` | تعديل أو تعطيل قالب (Admin) |
### مثال — تحليل قاعدة
```bash
curl -X POST http://127.0.0.1:8000/rules/analyze \
-H "Content-Type: application/json" \
-d '{"rule_xml": "<rule id=\"597\" level=\"5\"><description>Registry Key Entry Deleted.</description></rule>"}'
```
### التوثيق التفاعلي
افتحي: **http://127.0.0.1:8000/docs**
---
## ملاحظات
- الملف الأصلي `MurshidUIPipeline.ipynb` **لم يُعدَّل** — المنطق منسوخ إلى طبقة `app/ml/`.
- النموذج المعتمد في هذه المرحلة: **Logistic Regression** فقط.
- لتشغيل بدون GPU للاختبار فقط: ضعي `MURSHID_SKIP_LLM=true` في `.env` (لكن `/rules/analyze` ستعيد 503).
|