4th task
هذا الالتزام موجود في:
128
Privacy_Assessment/README.md
Normal file
128
Privacy_Assessment/README.md
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
- زهقت من الانجليزي و وقتي ضيق اول ملفين بكفو تعرفو اني فلته (o ‵-′)ノ”(ノ﹏<。)
|
||||||
|
|
||||||
|
# DevTools
|
||||||
|
|
||||||
|
- مجموعة أدوات مدمجة داخل متصفحات الويب
|
||||||
|
- تستخدم لفحص وتحليل وتصحيح صفحات ومكونات الويب أثناء تشغيلها.
|
||||||
|
- توفر معلومات عن عناصر الصفحة، الشبكة، التخزين، الكوكيز، الاتصالات، وأداء الموقع.
|
||||||
|
- تساعد المطورين والباحثين الأمنيين على اكتشاف المشاكل وتحليل سلوك الموقع.
|
||||||
|
|
||||||
|
في تقييم الخصوصية، يتم استخدام DevTools لفحص:
|
||||||
|
- Cookies: لمعرفة البيانات المخزنة في المتصفح.
|
||||||
|
- Network: لمراقبة الاتصالات والطلبات الخارجية.
|
||||||
|
- Security: للتحقق من HTTPS وشهادة TLS.
|
||||||
|
- Headers: لتحليل إعدادات الحماية الخاصة بالخادم.
|
||||||
|
|
||||||
|
## موقع مثال
|
||||||
|

|
||||||
|
## تحليل ملفات تعريف الارتباط (Cookies)
|
||||||
|
|
||||||
|
تم فحص ملفات تعريف الارتباط الخاصة بالموقع باستخدام Chrome DevTools من خلال قسم Application.
|
||||||
|
|
||||||
|
تم العثور على عدة Cookies، منها:
|
||||||
|
|
||||||
|
| اسم Cookie | الاستخدام المتوقع | خصائص الحماية |
|
||||||
|
|---|---|---|
|
||||||
|
| APISID | ملف مرتبط بخدمات Google وتفضيلات المستخدم | Secure |
|
||||||
|
| HSID | ملف أمني مرتبط بجلسات Google | Secure + HttpOnly |
|
||||||
|
| SID | معرف جلسة/حماية | Secure |
|
||||||
|
| LOGIN_INFO | معلومات مرتبطة بتسجيل الدخول | Secure |
|
||||||
|
| PREF | تخزين تفضيلات المستخدم | Secure |
|
||||||
|
| SSID | ملف أمني للجلسة | Secure |
|
||||||
|
| _Secure-* | ملفات حماية مرتبطة بخدمات Google | Secure |
|
||||||
|
|
||||||
|
## الملاحظات الأمنية
|
||||||
|
|
||||||
|
- معظم ملفات Cookies تحتوي على خاصية **Secure**، وهذا يعني أنها تُرسل فقط عبر اتصال HTTPS مشفر.
|
||||||
|
- بعض الملفات تحتوي على **HttpOnly**، مما يقلل خطر سرقة ملفات Cookies بواسطة JavaScript في حال وجود ثغرة XSS.
|
||||||
|
- بعض ملفات Cookies لها مدة صلاحية طويلة (حتى عام 2027)، وهذا قد يزيد من المخاطر في حال تم اختراقها أو تسريبها.
|
||||||
|
- تم ملاحظة وجود Cookies تابعة لجهات خارجية (مثل Google)، وقد تستخدم لأغراض التتبع أو تخصيص المحتوى.
|
||||||
|
|
||||||
|
# HTTPS
|
||||||
|
|
||||||
|

|
||||||
|
بعد إعادة تحميل الصفحة تم تحليل الطلبات (Requests).
|
||||||
|
|
||||||
|
## الموارد التي تم تحميلها:
|
||||||
|
|
||||||
|
| المورد | النوع | الملاحظات |
|
||||||
|
|---|---|---|
|
||||||
|
| styles.css | CSS | ملف تنسيق داخلي للموقع |
|
||||||
|
| search-form.css | CSS | تنسيق نموذج البحث |
|
||||||
|
| results.css | CSS | تنسيق نتائج البحث |
|
||||||
|
| video-carousel.css | CSS | تنسيق قسم الفيديو |
|
||||||
|
| images.css | CSS | تنسيق الصور |
|
||||||
|
| footer.css | CSS | تنسيق التذييل |
|
||||||
|
| common.css | CSS | تنسيقات عامة |
|
||||||
|
| Noto Kufi Arabic / Noto Naskh Arabic | Font | خطوط من Google Fonts |
|
||||||
|
| Imagemaxresdefault.jpg | Image | صورة محتوى |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## تحليل المتتبعات (Trackers)
|
||||||
|
|
||||||
|
خلال فحص طلبات الشبكة لم يتم العثور على خدمات تتبع مشهورة مثل:
|
||||||
|
|
||||||
|
- Google Analytics
|
||||||
|
- Facebook Pixel
|
||||||
|
- DoubleClick
|
||||||
|
|
||||||
|
# 3. مقارنة الخصوصية مع محركات بحث أخرى
|
||||||
|
|
||||||
|
تمت مقارنة محرك البحث mithal.space مع محركي بحث آخرين من ناحية الخصوصية:
|
||||||
|
|
||||||
|
| المحرك | جمع البيانات | Trackers | Cookies | مستوى الخصوصية |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| mithal.space | محدود حسب الفحص | لم يتم اكتشاف Trackers واضحة | لا توجد Cookies تتبع ظاهرة | جيد |
|
||||||
|
| DuckDuckGo | لا يقوم بتخزين سجل البحث الشخصي | لا يستخدم Trackers إعلانية | يستخدم أقل قدر ممكن من Cookies | ممتاز |
|
||||||
|
| Google Search | يجمع بيانات البحث والاستخدام لتحسين الخدمات والإعلانات | يحتوي على العديد من خدمات التتبع والتحليل | يستخدم Cookies متعددة للتخصيص والإعلانات | متوسط |
|
||||||
|
|
||||||
|
## التحليل:
|
||||||
|
|
||||||
|
- **mithal.space** يقدم مستوى خصوصية جيد بسبب عدم ظهور أدوات تتبع إعلانية أثناء الفحص، لكنه يعتمد على بعض الموارد الخارجية مثل Google Fonts.
|
||||||
|
- **DuckDuckGo** يعتبر أكثر خصوصية لأنه يقلل جمع بيانات المستخدم ولا يعتمد على الإعلانات الموجهة.
|
||||||
|
- **Google Search** يوفر خدمات متقدمة لكنه يعتمد بشكل كبير على جمع بيانات المستخدم لأغراض التحليل والإعلانات.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 4. التحسينات الأمنية المقترحة لمحرك mithal.space
|
||||||
|
|
||||||
|
## 1. إضافة Content Security Policy (CSP)
|
||||||
|
|
||||||
|
**الوصف:**
|
||||||
|
إضافة HTTP Header للتحكم بالمصادر المسموح تحميلها داخل الموقع.
|
||||||
|
|
||||||
|
**الفائدة:**
|
||||||
|
- تقليل خطر هجمات XSS.
|
||||||
|
- منع تحميل Scripts غير موثوقة.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. إضافة Security Headers إضافية
|
||||||
|
|
||||||
|
**الوصف:**
|
||||||
|
تفعيل Headers للحماية من الهجمات الشائعة.
|
||||||
|
|
||||||
|
تشمل:
|
||||||
|
|
||||||
|
- `Strict-Transport-Security`
|
||||||
|
- `X-Frame-Options`
|
||||||
|
- `X-Content-Type-Options`
|
||||||
|
|
||||||
|
**الفائدة:**
|
||||||
|
- منع Clickjacking.
|
||||||
|
- إجبار استخدام HTTPS.
|
||||||
|
- منع بعض هجمات MIME sniffing.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. تقليل الاعتماد على الخدمات الخارجية
|
||||||
|
|
||||||
|
**الوصف:**
|
||||||
|
استضافة الموارد مثل الخطوط المستخدمة حالياً من Google Fonts داخل خادم الموقع.
|
||||||
|
|
||||||
|
**الفائدة:**
|
||||||
|
- تقليل تسريب معلومات المستخدم إلى أطراف خارجية.
|
||||||
|
- تحسين الخصوصية.
|
||||||
|
- تقليل وقت تحميل الصفحة.
|
||||||
|
|
||||||
ثنائية
Privacy_Assessment/methal.png
Normal file
ثنائية
Privacy_Assessment/methal.png
Normal file
ملف ثنائي غير معروض.
|
بعد العرض: | الارتفاع: | الحجم: 174 KiB |
ثنائية
Privacy_Assessment/network.png
Normal file
ثنائية
Privacy_Assessment/network.png
Normal file
ملف ثنائي غير معروض.
|
بعد العرض: | الارتفاع: | الحجم: 163 KiB |
78
miniSIEM/README.md
Normal file
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
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
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>
|
||||||
|
|
||||||
|
`
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
45
miniSIEM/dashboard/index.html
Normal file
45
miniSIEM/dashboard/index.html
Normal file
@@ -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>
|
||||||
24
miniSIEM/dashboard/style.css
Normal file
24
miniSIEM/dashboard/style.css
Normal file
@@ -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
1
miniSIEM/logs/app.log
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ERROR database failed
|
||||||
2
miniSIEM/logs/auth.log
Normal file
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
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
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")
|
||||||
المرجع في مشكلة جديدة
حظر مستخدم