# 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": "Registry Key Entry Deleted."}' ``` ### التوثيق التفاعلي افتحي: **http://127.0.0.1:8000/docs** --- ## ملاحظات - الملف الأصلي `MurshidUIPipeline.ipynb` **لم يُعدَّل** — المنطق منسوخ إلى طبقة `app/ml/`. - النموذج المعتمد في هذه المرحلة: **Logistic Regression** فقط. - لتشغيل بدون GPU للاختبار فقط: ضعي `MURSHID_SKIP_LLM=true` في `.env` (لكن `/rules/analyze` ستعيد 503).