هذا الالتزام موجود في:
2026-07-27 22:12:00 +03:00
الأصل fec5a12c36
التزام 38d3735f21
12 ملفات معدلة مع 449 إضافات و0 حذوفات

78
miniSIEM/README.md Normal file
عرض الملف

@@ -0,0 +1,78 @@
# هيكل المشروع
- **Log Sources**
- تمثل مصادر السجلات (Logs) التي يجمع منها النظام البيانات.
- في هذا المشروع سيتم استخدام **3 ملفات `.log` وهمية** لتجربة النظام ومحاكاة بيئة حقيقية، ويمكن توليدها بسهولة باستخدام ChatGPT.
- أمثلة على المصادر:
- `auth.log` : محاولات تسجيل الدخول.
- `nginx.log` : طلبات خادم الويب.
- `app.log` : أخطاء التطبيق.
---
- **Log Collector (Python)**
- مسؤول عن قراءة السجلات من جميع المصادر بشكل دوري.
- يجمع كل سجل (Log Entry) ويمرره إلى مرحلة التحليل دون إجراء أي قرار أمني بنفسه.
---
- **Parser + Detection Rules**
- يقوم الـ Parser بتحليل كل Log واستخراج المعلومات المهمة مثل:
- عنوان IP
- الوقت
- نوع الحدث
- الرسالة
- بعد ذلك يتم تطبيق مجموعة من **قواعد الكشف (Detection Rules)** لتحديد ما إذا كان الحدث طبيعياً أو مشبوهاً.
- أمثلة على القواعد:
- أكثر من **5 محاولات تسجيل دخول فاشلة** خلال دقيقة واحدة → **Brute Force**.
- طلب يحتوي على كلمات مثل `UNION SELECT` أو `' OR 1=1`**SQL Injection**.
- محاولة الوصول إلى `/admin` أو ملفات حساسة بشكل متكرر → **Directory Enumeration**.
- إرسال مرفق بريد إلكتروني بامتداد `.exe` أو `.bat`**احتمال Malware**.
- عدد كبير من الطلبات من نفس عنوان IP خلال فترة قصيرة → **Suspicious Activity**.
---
- **Alerts Database / File**
- عند اكتشاف حدث مشبوه، يتم إنشاء Alert يحتوي على:
- الوقت
- عنوان IP
- نوع الهجوم
- مستوى الخطورة (Low / Medium / High)
- تُحفظ التنبيهات في ملف `alerts.json` (أو قاعدة بيانات في الأنظمة الأكبر) ليتم عرضها لاحقاً.
---
- **Dashboard (HTML / CSS / JavaScript)**
- واجهة رسومية تعرض التنبيهات التي اكتشفها النظام.
- تعرض معلومات مثل:
- عناوين IP المشبوهة.
- نوع الهجوم.
- مستوى الخطورة.
- وقت اكتشاف الحدث.
- يتم تحديث البيانات من ملف `alerts.json` الذي ينتجه برنامج Python.
---
# تشغيل المشروع
1. شغّل برنامج تحليل السجلات:
```bash
python siem.py
```
سيقوم البرنامج بقراءة ملفات الـ Logs وتحليلها وإنشاء ملف `alerts.json`.
2. بعد ذلك شغّل خادم HTTP لعرض لوحة التحكم:
```bash
python -m http.server 8000
```
3. افتح المتصفح وانتقل إلى:
```text
http://localhost:8000/dashboard/
```
ستظهر لوحة التحكم وتعرض جميع التنبيهات التي اكتشفها النظام.

32
miniSIEM/alerts.json Normal file
عرض الملف

@@ -0,0 +1,32 @@
[
{
"time": "2026-07-27 21:59:27.947124",
"ip": "10.0.0.5",
"attack": "Brute Force Login",
"severity": "HIGH"
},
{
"time": "2026-07-27 21:59:27.947161",
"ip": "10.0.0.5",
"attack": "Brute Force Login",
"severity": "HIGH"
},
{
"time": "2026-07-27 21:59:27.947285",
"ip": "10.0.0.8",
"attack": "Web Attack Attempt",
"severity": "MEDIUM"
},
{
"time": "2026-07-27 21:59:27.947295",
"ip": "10.0.0.9",
"attack": "Web Attack Attempt",
"severity": "MEDIUM"
},
{
"time": "2026-07-27 21:59:27.947408",
"ip": "LOCAL",
"attack": "Application Error",
"severity": "LOW"
}
]

33
miniSIEM/dashboard/app.js Normal file
عرض الملف

@@ -0,0 +1,33 @@
fetch("../alerts.json")
.then(res=>res.json())
.then(data=>{
let table=document.getElementById("alerts");
data.forEach(alert=>{
table.innerHTML +=
`
<tr>
<td>${alert.ip}</td>
<td>${alert.attack}</td>
<td>${alert.severity}</td>
</tr>
`
});
});

عرض الملف

@@ -0,0 +1,45 @@
<html>
<head>
<title>Mini SIEM Dashboard</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Security Alerts</h1>
<table>
<thead>
<tr>
<th>IP</th>
<th>Attack</th>
<th>Severity</th>
</tr>
</thead>
<tbody id="alerts"></tbody>
</table>
<script src="app.js"></script>
</body>
</html>

عرض الملف

@@ -0,0 +1,24 @@
body{
font-family:Arial;
margin:40px;
}
table{
border-collapse:collapse;
width:80%;
}
td,th{
border:1px solid black;
padding:10px;
}

1
miniSIEM/logs/app.log Normal file
عرض الملف

@@ -0,0 +1 @@
ERROR database failed

2
miniSIEM/logs/auth.log Normal file
عرض الملف

@@ -0,0 +1,2 @@
Jul 27 Failed password for root from 10.0.0.5
Jul 27 Failed password for admin from 10.0.0.5

2
miniSIEM/logs/nginx.log Normal file
عرض الملف

@@ -0,0 +1,2 @@
10.0.0.8 GET /admin.php
10.0.0.9 GET /sql?id=1

104
miniSIEM/siem.py Normal file
عرض الملف

@@ -0,0 +1,104 @@
import re
import json
from datetime import datetime
LOG_FILES = [
"logs/auth.log",
"logs/nginx.log",
"logs/app.log"
]
alerts = []
def create_alert(ip, attack, severity):
alert = {
"time": str(datetime.now()),
"ip": ip,
"attack": attack,
"severity": severity
}
alerts.append(alert)
def analyze_auth(line):
pattern = r"Failed password.*from ([0-9.]+)"
result = re.search(pattern,line)
if result:
ip = result.group(1)
create_alert(
ip,
"Brute Force Login",
"HIGH"
)
def analyze_web(line):
if "admin" in line or "sql" in line.lower():
ip = line.split()[0]
create_alert(
ip,
"Web Attack Attempt",
"MEDIUM"
)
def analyze_app(line):
if "ERROR" in line:
create_alert(
"LOCAL",
"Application Error",
"LOW"
)
def collect_logs():
for file in LOG_FILES:
with open(file) as f:
for line in f:
if "auth" in file:
analyze_auth(line)
elif "nginx" in file:
analyze_web(line)
else:
analyze_app(line)
collect_logs()
with open("alerts.json","w") as f:
json.dump(
alerts,
f,
indent=4
)
print("SIEM Scan Completed")
print(len(alerts),"alerts found")