NorahAlzeid commited on
Commit
2f7dda8
·
verified ·
1 Parent(s): 81605b8

Upload 10 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ security_model.sav filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ==========================
2
+ # واجهة AmanPredict – ثيم شبيه بأبشر
3
+ # ==========================
4
+
5
+ import streamlit as st
6
+ import json
7
+ import pickle
8
+ import numpy as np
9
+ import os
10
+
11
+ # إعداد الصفحة وشعار جانبي
12
+ st.set_page_config(page_title="AmanPredict Dashboard", layout="wide", page_icon="🔐")
13
+
14
+ # ==========================
15
+ # CSS الثيم
16
+ # ==========================
17
+
18
+ custom_css = """
19
+ <style>
20
+ /* خلفية الصفحة */
21
+ [data-testid="stAppViewContainer"] {
22
+ background: linear-gradient(180deg, #f7fdf8 0%, #ffffff 70%);
23
+ }
24
+
25
+ /* الشريط الجانبي */
26
+ [data-testid="stSidebar"] {
27
+ background-color: #0b6b3a;
28
+ color: white;
29
+ }
30
+
31
+ /* عنوان الشريط الجانبي */
32
+ [data-testid="stSidebar"] h1,
33
+ [data-testid="stSidebar"] h2,
34
+ [data-testid="stSidebar"] h3 {
35
+ color: white !important;
36
+ }
37
+
38
+ /* عنوان رئيسي */
39
+ h1 {
40
+ color: #0b6b3a !important;
41
+ font-weight: 800 !important;
42
+ }
43
+
44
+ /* أزرار */
45
+ .stButton>button {
46
+ background-color: #14a44d !important;
47
+ color: white !important;
48
+ border-radius: 6px !important;
49
+ padding: 10px 20px !important;
50
+ }
51
+
52
+ /* الروابط */
53
+ a {
54
+ color: #0b6b3a !important;
55
+ }
56
+ </style>
57
+ """
58
+
59
+ st.markdown(custom_css, unsafe_allow_html=True)
60
+
61
+ # ==========================
62
+ # تحميل النماذج
63
+ # ==========================
64
+
65
+ DOC_MODEL_PATH = "document_model.sav"
66
+ SEC_MODEL_PATH = "security_model.sav"
67
+ DEVICE_STORE_PATH = "device_store.json"
68
+
69
+ doc_model = pickle.load(open(DOC_MODEL_PATH, "rb"))
70
+ sec_model = pickle.load(open(SEC_MODEL_PATH, "rb"))
71
+
72
+ # ==========================
73
+ # ملف الأجهزة الموثوقة
74
+ # ==========================
75
+
76
+ if not os.path.exists(DEVICE_STORE_PATH):
77
+ with open(DEVICE_STORE_PATH, "w") as f:
78
+ json.dump({}, f)
79
+
80
+ with open(DEVICE_STORE_PATH, "r") as f:
81
+ device_store = json.load(f)
82
+
83
+ USER = "user_1"
84
+ if USER not in device_store:
85
+ device_store[USER] = []
86
+
87
+ def save_devices():
88
+ with open(DEVICE_STORE_PATH, "w") as f:
89
+ json.dump(device_store, f, indent=2)
90
+
91
+ # ==========================
92
+ # الشريط الجانبي
93
+ # ==========================
94
+
95
+ st.sidebar.title("📌 AmanPredict")
96
+ page = st.sidebar.radio(
97
+ "اختر الصفحة:",
98
+ ["🏠 الصفحة الرئيسية", "🔐 أمان الدخول", "🪪 تنبؤ الوثائق", "📊 السجل الأمني", "⚙ الإعدادات"]
99
+ )
100
+
101
+ # ==========================
102
+ # الصفحة الرئيسية
103
+ # ==========================
104
+
105
+ if page == "🏠 الصفحة الرئيسية":
106
+ st.title("AmanPredict – لوحة الذكاء الأمني")
107
+ st.write("""
108
+ منصة ذكية تعتمد على الذكاء الاصطناعي لتقديم:
109
+ - تحليل سلوك الدخول وكشف محاولات الاختراق
110
+ - توثيق الأجهزة الموثوقة
111
+ - تنبؤ المخاطر للوثائق الحكومية
112
+ - تقارير أمنية احترافية (MVP)
113
+ """)
114
+
115
+ # ==========================
116
+ # أمان الدخول
117
+ # ==========================
118
+
119
+ elif page == "🔐 أمان الدخول":
120
+ st.title("🔐 نظام أمان الدخول – Device Security AI")
121
+
122
+ device_id = st.text_input("معرّف الجهاز:", "device_X1")
123
+ country = st.selectbox("الدولة:", ["Saudi Arabia", "Other"])
124
+ sessions = st.number_input("عدد الجلسات النشطة:", 1, 10)
125
+ days = st.slider("الأيام المتبقية للوثيقة:", 0, 180, 30)
126
+
127
+ device_known = device_id in device_store[USER]
128
+ device_flag = 0 if device_known else 1
129
+ location_flag = 0 if country == "Saudi Arabia" else 2
130
+
131
+ if st.button("تشغيل الفحص الأمني"):
132
+ X = np.array([[days, sessions, device_flag, location_flag, 0, 0]])
133
+ score = -sec_model.decision_function(X)[0]
134
+ normalized = 1 / (1 + np.exp(-score))
135
+
136
+ st.subheader("📊 النتيجة الأمنية")
137
+ st.write("نسبة الخطر:", round(normalized, 3))
138
+
139
+ if normalized > 0.85:
140
+ st.error("🚨 خطر عالي — تم إيقاف الدخول")
141
+ elif normalized > 0.6:
142
+ st.warning("⚠ خطر متوسط — نحتاج تحقق")
143
+ if st.button("اتصال من أبشر (محاكاة)"):
144
+ st.info("📞 يتم الاتصال الآن…")
145
+ else:
146
+ st.success("✔ دخول آمن")
147
+ if not device_known:
148
+ if st.button("توثيق الجهاز"):
149
+ device_store[USER].append(device_id)
150
+ save_devices()
151
+ st.success("✔ تم توثيق الجهاز")
152
+
153
+ # ==========================
154
+ # تنبؤ الوثائق
155
+ # ==========================
156
+
157
+ elif page == "🪪 تنبؤ الوثائق":
158
+ st.title("🪪 تنبؤ المخاطر للوثائق الحكومية")
159
+
160
+ days_left = st.number_input("الأيام المتبقية:", 0, 180)
161
+ status = st.selectbox("الحالة:", ["active", "expiring"])
162
+ status_v = 0 if status == "active" else 1
163
+
164
+ if st.button("تنفيذ التنبؤ"):
165
+ pred = doc_model.predict([[days_left, status_v]])[0]
166
+ if pred == 1:
167
+ st.error("⚠ الوثيقة عالية المخاطر — يجب التجديد")
168
+ else:
169
+ st.success("✔ الوثيقة آمنة")
170
+
171
+ # ==========================
172
+ # السجل الأمني
173
+ # ==========================
174
+
175
+ elif page == "📊 السجل الأمني":
176
+ st.title("📊 سجل محاولات الدخول")
177
+ st.info("ميزة قيد التطوير — نسخة محاكاة فقط.")
178
+
179
+ # ==========================
180
+ # الإعدادات
181
+ # ==========================
182
+
183
+ elif page == "⚙ الإعدادات":
184
+ st.title("⚙ الإعدادات")
185
+
186
+ st.write("الأجهزة الموثوقة:")
187
+ st.write(device_store[USER])
188
+
189
+ if st.button("مسح جميع الأجهزة"):
190
+ device_store[USER] = []
191
+ save_devices()
192
+ st.warning("✔ تم حذف جميع الأجهزة.")
app.py (‏Dashboard) ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import json
3
+ import pickle
4
+ import numpy as np
5
+ import os
6
+
7
+ # ------------------------------
8
+ # تحميل النماذج
9
+ # ------------------------------
10
+
11
+ DOC_MODEL_PATH = "document_model.sav"
12
+ SEC_MODEL_PATH = "security_model.sav"
13
+ DEVICE_STORE_PATH = "device_store.json"
14
+
15
+ doc_model = pickle.load(open(DOC_MODEL_PATH, "rb"))
16
+ sec_model = pickle.load(open(SEC_MODEL_PATH, "rb"))
17
+
18
+ # ------------------------------
19
+ # الأجهزة الموثوقة
20
+ # ------------------------------
21
+
22
+ if not os.path.exists(DEVICE_STORE_PATH):
23
+ with open(DEVICE_STORE_PATH, "w") as f:
24
+ json.dump({}, f)
25
+
26
+ with open(DEVICE_STORE_PATH, "r") as f:
27
+ device_store = json.load(f)
28
+
29
+ USER = "user_1"
30
+ if USER not in device_store:
31
+ device_store[USER] = []
32
+
33
+ def save_devices():
34
+ with open(DEVICE_STORE_PATH, "w") as f:
35
+ json.dump(device_store, f, indent=2)
36
+
37
+ # ------------------------------
38
+ # واجهة لوحة التحكم Dashboard
39
+ # ------------------------------
40
+
41
+ st.set_page_config(page_title="AmanPredict AI Dashboard", layout="wide")
42
+
43
+ st.sidebar.title("📌 قائمة التنقل")
44
+ page = st.sidebar.radio(
45
+ "اختر الصفحة:",
46
+ ["🏠 الصفحة الرئيسية", "🔐 أمان الدخول", "🪪 تنبؤ الوثائق", "📊 السجل الأمني", "⚙ الإعدادات"]
47
+ )
48
+
49
+ # ------------------------------
50
+ # الصفحة الرئيسية
51
+ # ------------------------------
52
+
53
+ if page == "🏠 الصفحة الرئيسية":
54
+ st.title("AmanPredict – لوحة الذكاء الأمني")
55
+ st.write("""
56
+ هذا النموذج يستخدم الذكاء الاصطناعي لتحليل:
57
+ - أمان الدخول (الأجهزة + السلوك)
58
+ - درجة المخاطر في الوثائق الحكومية
59
+ - اكتشاف محاولات الدخول غير الطبيعية
60
+ """)
61
+
62
+ # ------------------------------
63
+ # أمان الدخول
64
+ # ------------------------------
65
+
66
+ elif page == "🔐 أمان الدخول":
67
+ st.title("🔐 أمان الدخول — Device Security AI")
68
+
69
+ st.write("تحليل دخول المستخدم بناءً على الجهاز والموقع وعدد الجلسات.")
70
+
71
+ device_id = st.text_input("معرّف الجهاز (Fingerprint)", "device_X1")
72
+ country = st.selectbox("الدولة:", ["Saudi Arabia", "Other"])
73
+ sessions = st.number_input("عدد الجلسات النشطة:", 1, 10)
74
+ days = st.slider("الأيام المتبقية للوثيقة:", 0, 180, 30)
75
+
76
+ device_known = device_id in device_store[USER]
77
+ device_flag = 0 if device_known else 1
78
+ location_flag = 0 if country == "Saudi Arabia" else 2
79
+
80
+ if st.button("تشغيل الفحص الأمني"):
81
+ X = np.array([[days, sessions, device_flag, location_flag, 0, 0]])
82
+ score = -sec_model.decision_function(X)[0]
83
+ normalized = 1 / (1 + np.exp(-score))
84
+
85
+ st.subheader("📊 النتيجة الأمنية")
86
+ st.write("نسبة الخطر:", round(normalized, 3))
87
+
88
+ if normalized > 0.85:
89
+ st.error("🚨 خطر عالي — تم إيقاف الدخول")
90
+ elif normalized > 0.6:
91
+ st.warning("⚠ خطر متوسط — نحتاج تحقق إضافي")
92
+ if st.button("اتصال من أبشر (محاكاة)"):
93
+ st.info("📞 يتم التواصل للتحقق…")
94
+ else:
95
+ st.success("✔ دخول آمن")
96
+ if not device_known:
97
+ if st.button("توثيق الجهاز"):
98
+ device_store[USER].append(device_id)
99
+ save_devices()
100
+ st.success("تم التوثيق بنجاح ✔")
101
+
102
+ # ------------------------------
103
+ # تنبؤ الوثائق
104
+ # ------------------------------
105
+
106
+ elif page == "🪪 تنبؤ الوثائق":
107
+ st.title("🪪 تنبؤ المخاطر للوثائق الحكومية")
108
+
109
+ days_left = st.number_input("عدد الأيام المتبقية", 0, 180)
110
+ status = st.selectbox("الحالة:", ["active", "expiring"])
111
+ status_v = 0 if status == "active" else 1
112
+
113
+ if st.button("تنفيذ التنبؤ"):
114
+ pred = doc_model.predict([[days_left, status_v]])[0]
115
+ if pred == 1:
116
+ st.error("⚠ الوثيقة عالية المخاطر — يجب التجديد")
117
+ else:
118
+ st.success("✔ الوثيقة آمنة")
119
+
120
+ # ------------------------------
121
+ # السجل الأمني
122
+ # ------------------------------
123
+
124
+ elif page == "📊 السجل الأمني":
125
+ st.title("📊 سجل محاولات الدخول")
126
+ st.info("ميزة قيد التطوير (محاكاة فقط).")
127
+
128
+ # ------------------------------
129
+ # الإعدادات
130
+ # ------------------------------
131
+
132
+ elif page == "⚙ الإعدادات":
133
+ st.title("⚙ الإعدادات")
134
+
135
+ st.write("الأجهزة ال��وثوقة:")
136
+ st.write(device_store[USER])
137
+
138
+ if st.button("مسح جميع الأجهزة"):
139
+ device_store[USER] = []
140
+ save_devices()
141
+ st.warning("تم حذف جميع الأجهزة الموثوقة.")
data.csv ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Days_Left,Document_Status,Risk_Level
2
+ 30,active,Low
3
+ 5,expiring,High
4
+ 15,active,Low
5
+ 2,expiring,High
6
+ 60,active,Low
device_store.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
document_model.sav ADDED
Binary file (1.46 kB). View file
 
model.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from sklearn.model_selection import train_test_split
3
+ from sklearn.tree import DecisionTreeClassifier
4
+ import pickle
5
+
6
+ # قراءة البيانات
7
+ df = pd.read_csv("data.csv")
8
+
9
+ # تحويل القيم النصية لأرقام
10
+ df["Document_Status"] = df["Document_Status"].map({"active": 0, "expiring": 1})
11
+ df["Risk_Level"] = df["Risk_Level"].map({"Low": 0, "High": 1})
12
+
13
+ # ميزات إضافية لتتناسب مع التطبيق:
14
+ # - تغيّر الجهاز device_flag
15
+ # - تغيّر الموقع location_flag
16
+ # سنضيف أعمدة وهمية حتى يقبلها النموذج
17
+
18
+ df["Device_Flag"] = 0
19
+ df["Location_Flag"] = 0
20
+
21
+ # تجهيز البيانات
22
+ X = df[["Days_Left", "Document_Status", "Device_Flag", "Location_Flag"]]
23
+ y = df["Risk_Level"]
24
+
25
+ # تدريب النموذج
26
+ model = DecisionTreeClassifier()
27
+ model.fit(X, y)
28
+
29
+ # حفظ النموذج
30
+ pickle.dump(model, open("prediction_model.sav", "wb"))
31
+
32
+ print("Model trained successfully with 4 features!")
prediction_model.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # prediction_model.py
2
+ import pandas as pd
3
+ from sklearn.tree import DecisionTreeClassifier
4
+ import pickle
5
+
6
+ def train_document_model():
7
+ df = pd.read_csv("data.csv")
8
+
9
+ df["Document_Status"] = df["Document_Status"].map({"active": 0, "expiring": 1})
10
+ df["Risk_Level"] = df["Risk_Level"].map({"Low": 0, "High": 1})
11
+
12
+ X = df[["Days_Left", "Document_Status"]]
13
+ y = df["Risk_Level"]
14
+
15
+ model = DecisionTreeClassifier()
16
+ model.fit(X, y)
17
+
18
+ pickle.dump(model, open("document_model.sav", "wb"))
19
+ print("✔ تم تدريب نموذج الوثائق Document Model")
20
+
21
+ if _name_ == "_main_":
22
+ train_document_model()
prediction_model.sav ADDED
Binary file (1.49 kB). View file
 
security_model.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pickle
3
+ from sklearn.ensemble import IsolationForest
4
+
5
+ def train_security_model(path="security_model.sav"):
6
+ rng = np.random.RandomState(42)
7
+
8
+ # بيانات تدريب عشوائية (للـ MVP)
9
+ X = rng.normal(size=(600, 6))
10
+
11
+ model = IsolationForest(
12
+ contamination=0.05,
13
+ random_state=42
14
+ )
15
+
16
+ model.fit(X)
17
+
18
+ pickle.dump(model, open(path, "wb"))
19
+ print("✔ تم تدريب نموذج الأمن CyberSecurity Model")
20
+
21
+ if __name__ == "__main__":
22
+ train_security_model()
security_model.sav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3162ecf53ca3a980110677ec0f60efc248901ce46d19a4bbcb9e8bcb38aa2755
3
+ size 1162409