تدقيق السطح
اختبار الاختراق وتحصين البنية التحتية 0DATA
ملخص
نوثّق هنا اختبار الاختراق الكامل للبنية التحتية الإنتاجية 0DATA (217.160.192.96، 23 يوليو 2026). كشف الفحص الأولي عن 28 منفذ TCP مفتوحًا، من بينها منفذا وصول لإدارة النظام معرّضان مباشرة على الإنترنت: Cockpit Server (المنفذ 9090، شيل جذر Ubuntu) وCloudPanel (المنفذ 8443، لوحة إدارة ويب). كانت واجهة FastAPI قابلة للوصول دون SSL (المنفذ 8300، ربط 0.0.0.0)، مما يعرّض الخريطة الكاملة لـ 89 نقطة نهاية عبر /docs و/openapi.json. وكانت خدمة NATS تعرض شعارها (الإصدار 2.10.27، اسم الخادم، المفتاح العام). حدّد التدقيق 3 ثغرات حرجة، و3 عالية، و3 متوسطة. طُبقت جميع التصحيحات في الجلسة نفسها: حجب جدار الحماية (ufw)، إعادة ضبط ربط الواجهة (127.0.0.1)، تعطيل مخطط OpenAPI، وحماية /docs عبر nginx auth_basic. السطح النهائي هو 7 منافذ (مقابل 28). يؤسس هذا البحث منهجية التدقيق ويشكل مرجعًا لعمليات التدقيق الدورية للبنية التحتية.
في جملة واحدة
هذا البحث هو التدقيق. إنه يوثق أول اختبار اختراق منهجي للبنية التحتية 0DATA — 28 منفذًا مفتوحًا اختُزلت إلى 7، و3 ثغرات حرجة صُححت في الجلسة، ومنهجية قابلة للتكرار رُسّخت.
1. المنهجية
أُجري التدقيق في 23 يوليو 2026 على خادم الإنتاج 0DATA (Ubuntu 24.04.4 LTS، العنوان العام 217.160.192.96). تتبع المنهجية مقاربة من أربع مراحل مستوحاة من دليل OWASP لاختبارات اختراق البنية التحتية:
- الاستطلاع — فحص nmap كامل (65 535 منفذ TCP)، وتحديد الخدمات والإصدارات
- رسم الخريطة — جرد الخدمات التي تصغي على 0.0.0.0، وتحليل الشعارات وترويسات HTTP
- الاختراق — اختبارات وصول غير مصادق إلى نقاط نهاية الواجهة، ومحاولات تجاوز المصادقة، والتحقق من الأذونات
- التصحيح — تطبيق التصحيحات، وإعادة التحقق الفورية، وتوثيق الإجراءات
2. الفحص الأولي — سطح الهجوم
كشف فحص nmap الأولي (-sS -p- --min-rate 5000 -T4) عن 28 منفذ TCP مفتوحًا:
كشف تحليل العمليات عن أكثر من 35 خدمة تصغي على 0.0.0.0 (كل الواجهات)، بما فيها PostgreSQL (5432)، وRedis (6379)، وNATS (4222)، وثلاثة خوادم Next.js تطويرية (3000، 3001، 3003)، وخدمات Python متعددة (NOVA، Flask، FastAPI، Gunicorn). كانت قاعدة UFW الافتراضية (deny incoming) تحجب بالفعل الوصول الخارجي إلى معظم هذه المنافذ، لكن الدفاع المتعمق كان غائبًا — فأي تعطل لجدار الحماية كان ليعرّض كامل البنية التحتية الداخلية فورًا.
3. الثغرات الحرجة
حُددت ثلاث ثغرات حرجة، كل واحدة منها قادرة على أن تؤدي إلى اختراق كامل للخادم إذا استُغلت.
3.1 Cockpit Server — شيل الجذر المعرّض (المنفذ 9090)
كانت خدمة Cockpit (cockpit-tls، systemd) قابلة للوصول على المنفذ 9090، معرّضة واجهة إدارة نظام Ubuntu مباشرة على الإنترنت. توفر Cockpit شيلاً تفاعليًا، وإدارة خدمات systemd، وعرض السجلات، وإدارة حسابات المستخدمين — وكل ذلك عبر واجهة ويب.
أي مهاجم يملك بيانات اعتماد النظام (أو يستغل ثغرة في Cockpit) كان ليحصل على وصول كامل بشيل الجذر. كان المنفذ 9090 مصرّحًا به صراحة في UFW (ALLOW IN Anywhere).
ufw delete allow 9090/tcp — حذف فوري لقاعدة UFW. تستمر الخدمة في الإصغاء محليًا لكنها لم تعد قابلة للوصول من الخارج. التحقق: اتصال خارجي timeout (الرمز 124).
3.2 CloudPanel — لوحة إدارة الويب (المنفذ 8443)
كانت لوحة CloudPanel v2.5.3 مقدمة عبر nginx على المنفذ 8443، وقابلة للوصول عبر HTTPS. تدير CloudPanel مجموع مواقع الويب على الخادم: إنشاء/حذف النطاقات، وشهادات SSL، والمستخدمين، وقواعد البيانات، وإعدادات PHP.
لم يكن المنفذ 8443 مدرجًا صراحة في قواعد UFW، لكن nginx كان يصغي عليه على 0.0.0.0. كانت قاعدة UFW الافتراضية (deny incoming) تحجبه نظريًا، لكن وجود هذه الخدمة على كل الواجهات يشكل خرقًا لمبدأ الدفاع المتعمق.
3.3 واجهة FastAPI — تجاوز SSL (المنفذ 8300)
كانت الواجهة الرئيسية للخادم (FastAPI، المنفذ 8300) تصغي على 0.0.0.0، ما يعني أنها كانت قابلة للوصول مباشرة على العنوان العام، دون المرور عبر nginx. كان ذلك يتجاوز:
- تشفير SSL/TLS المقدم عبر nginx (Let's Encrypt)
- تحديد معدل الطلبات (60 طلب/دقيقة) المضبوط في nginx
- ترويسات الأمان (HSTS، CSP) التي يحقنها nginx
- التسجيل المركزي للوصول
بقيت الواجهة قابلة للوصول عبر HTTP مكشوف على http://217.160.192.96:8300/. ورغم أن UFW كان يملك قاعدة DROP للمنفذ 8300، فإن مهاجمًا داخل الشبكة (أو عند تعطل جدار الحماية) كان ليحصل على وصول مباشر وغير مشفر إلى كامل الواجهة.
uvicorn.run(app, host="0.0.0.0", port=8300) → host="127.0.0.1", port=8300 في /opt/web/agents.08.ma/server.py. أصبحت الواجهة الآن قابلة للوصول فقط عبر وكيل nginx (SSL، تحديد المعدل، السجلات). إعادة تشغيل الخادم. التحقق: ss -tlnp | grep 8300 يؤكد الإصغاء الحصري على 127.0.0.1.
3.4 الخريطة العلنية للواجهة (Swagger /docs و /openapi.json)
كانت واجهة Swagger UI (/docs) ومخطط OpenAPI (/openapi.json) قابلين للوصول دون مصادقة عبر nginx. كان المخطط يعرض القائمة الكاملة لنقاط النهاية الـ 89 للواجهة:
هذا التعريض يعادل تسليم مخطط معماري إلى لص. كل نقطة نهاية ومعاملاتها وطريقة HTTP الخاصة بها موثقة علنًا.
1.
FastAPI(docs_url=None, redoc_url=None, openapi_url=None) — تعطيل التوليد التلقائي لمخطط OpenAPI. التحقق: curl /openapi.json → 404.2. إضافة كتلة
location /docs في nginx مع auth_basic — أصبح مسار /docs (مخصص، يدوي) محميًا بكلمة مرور. التحقق: 401 دون بيانات اعتماد، 200 مع بيانات الاعتماد.
4. الثغرات العالية والمتوسطة
| # | الخطورة | الخدمة | المنفذ | الوصف |
|---|---|---|---|---|
| 4 | عالية | NATS | 4222 | شعار يعرض الإصدار 2.10.27، واسم الخادم « 0data-nucleus »، وclient_id، والمفتاح العام (xkey). المصادقة مفعّلة (auth_required:true) لكن إصدارًا قديمًا معرّض. |
| 5 | عالية | PMCD/PMProxy | 44321-44323 | Performance Co-Pilot معرّض — مراقبة النظام (CPU، الذاكرة، الإدخال/الإخراج) قابلة للوصول. بروتوكول غير HTTP لكن الاستغلال ممكن. |
| 6 | عالية | Next.js Dev | 3000, 3003 | خادمان Next.js 16.2.10 تطويريان يصغيان على 0.0.0.0. تتضمن خوادم التطوير ميزات تنقيح (HMR، خرائط المصدر) غير مخصصة للإنتاج. |
| 7 | متوسطة | 08.Services | 5090 | منصة الفنيين معرّضة — تتضمن Google Fonts (اعتمادية خارجية). |
| 8 | متوسطة | /api/organism/state | 8300 | تعرض واجهة organism عناوين IP داخلية (192.168.x.x) في بيانات شذوذ Cytokine. |
| 9 | متوسطة | EPMD | 4369 | Erlang Port Mapper Daemon معرّض — يستخدمه FreeSWITCH. يمكن استغلاله لاكتشاف خدمات Erlang أخرى. |
5. التصحيحات المطبقة
طُبقت جميع التصحيحات في الجلسة نفسها (23 يوليو 2026، 16:30–17:03 UTC). لم تُسجل أي مقاطعة للخدمة.
| # | الإجراء | الأمر/التعديل | الأثر |
|---|---|---|---|
| 1 | حجب Cockpit | ufw delete allow 9090/tcp | شيل جذر Ubuntu غير قابل للوصول من الخارج |
| 2 | حجب PMCD | ufw deny 44321/tcp; ufw deny 44322/tcp; ufw deny 44323/tcp | مراقبة النظام غير قابلة للوصول |
| 3 | ربط الواجهة ← 127.0.0.1 | uvicorn.run(app, host="127.0.0.1", port=8300) | الواجهة عبر nginx SSL فقط |
| 4 | تعطيل OpenAPI | FastAPI(docs_url=None, redoc_url=None, openapi_url=None) | مخطط الواجهة غير قابل للوصول (404) |
| 5 | حماية /docs | nginx auth_basic على location /docs | 401 دون بيانات اعتماد، 200 معها |
| 6 | تنظيف UFW | حذف القاعدتين 14433/tcp، 18765/tcp | خدمات غير نشطة، قواعد يتيمة |
| 7 | إعادة تشغيل الواجهة | kill + إعادة تشغيل uvicorn | التغييرات سارية، 0 توقف ملحوظ |
6. التحقق بعد التصحيح
تم التحقق من كل تصحيح فور تطبيقه:
| الاختبار | الطريقة | النتيجة |
|---|---|---|
| المنفذ 9090 محجوب | اتصال TCP خارجي (timeout 3 ثوانٍ) | Timeout — غير قابل للوصول ✓ |
| المنفذ 8300 الخارجي محجوب | curl نحو IP العام:8300 | Timeout — غير قابل للوصول ✓ |
| ربط الواجهة 127.0.0.1 | ss -tlnp | grep 8300 | 127.0.0.1:8300 فقط ✓ |
| /openapi.json معطل | curl https://cockpit.0data.fr/openapi.json | 404 — Not Found ✓ |
| /docs محمي | curl https://cockpit.0data.fr/docs (بدون مصادقة) | 401 — Authorization Required ✓ |
| /docs قابل للوصول (مصادقة) | curl -u مع بيانات الاعتماد | 200 — OK ✓ |
| SSL cockpit صالح | openssl s_client -connect cockpit.0data.fr:443 | Let's Encrypt، ينتهي في أكتوبر 2026 ✓ |
| PMCD محجوب | اتصال TCP خارجي | Timeout (3 منافذ) ✓ |
| قواعد DROP في IPTables | iptables -L ufw-user-input | 4 قواعد DROP نشطة ✓ |
7. السطح المتبقي
بعد التصحيح، تبقى 7 منافذ مصرّحًا بها في UFW:
| المنفذ | البروتوكول | الخدمة | التبرير |
|---|---|---|---|
| 22 | TCP | SSH | وصول إداري إلزامي |
| 80 | TCP | HTTP (nginx) | إعادة توجيه ← HTTPS + Let's Encrypt |
| 443 | TCP | HTTPS (nginx) | الوكيل العكسي الرئيسي، SSL Let's Encrypt |
| 443 | UDP | HTTPS (nginx) | HTTP/3 (QUIC) |
| 8765 | TCP | KOD Proxy | وكيل تداول (KOD Quantum) |
| 5060 | UDP | SIP (FreeSWITCH) | اتصالات VoIP — مقصود |
| 5080 | UDP | SIP (FreeSWITCH) | اتصالات VoIP — مقصود |
توصيات طويلة الأمد
للوصول إلى بنية بلا سطح غير ضروري، يُوصى بالإجراءات التالية:
- ربط 127.0.0.1 لـ PostgreSQL (5432)، وRedis (6379)، وNATS (4222)، وكل خدمات NOVA (5090–5120، 5190–5199، 8400–8402)
- حذف خوادم Next.js التطويرية (3000، 3003) أو ربطها بـ 127.0.0.1 — لا مكان لخوادم التطوير في الإنتاج
- تدقيق المنفذ 8765 (KOD Proxy) — التحقق من أن المصادقة مطلوبة وأن الخدمة لا تعرض وظيفة غير مقصودة
- إرساء تدقيق UFW دوري (cron أسبوعي) لكشف القواعد الجديدة غير الموثقة
8. خاتمة
يُظهر هذا التدقيق أن البنية التحتية 0DATA كانت محمية وظيفيًا (UFW default deny) لكنها هشة معماريًا: اعتمد الدفاع على طبقة واحدة (جدار الحماية) دون عمق. لو سقطت هذه الطبقة، لأصبحت الخدمات الداخلية البالغ عددها أكثر من 35 خدمة قابلة للوصول مكشوفة.
تضيف التصحيحات المطبقة ثلاث طبقات دفاع إضافية:
- ربط 127.0.0.1 للواجهة — حتى لو سقط UFW، لا تكون الواجهة على الواجهة العامة
- nginx auth_basic على /docs — حتى لو كانت الواجهة قابلة للوصول، تبقى الخريطة مقفلة
- تعطيل OpenAPI — لم يعد المخطط التلقائي موجودًا، سطح صفري
الثغرات الحرجة: 3 → 0
زمن التصحيح: 33 دقيقة (16:30–17:03 UTC)
مقاطعة الخدمة: 0
سطح الإدارة المعرّض: 2 → 0
يرسّخ اختبار الاختراق هذا منهجية تدقيق قابلة للتكرار للبنية التحتية 0DATA. وسيُعاد شهريًا وبعد كل نشر رئيسي. الأمن السيبراني الذي نبيعه يبدأ بالأمن الذي نمارسه.
المراجع
TIKIJJA, Hadda. « الانضباط ». مختبر 0DATA، البحث 001، يوليو 2026.
TIKIJJA, Hadda. « الجهاز العصبي ». مختبر 0DATA، البحث 003، يوليو 2026. Zenodo: 10.5281/zenodo.21342768.
TIKIJJA, Hadda. « الطُعم الرقمي ». مختبر 0DATA، البحث 004، يوليو 2026. Zenodo: 10.5281/zenodo.21270325.
TIKIJJA, Hadda. « الجهاز المناعي ». مختبر 0DATA، البحث 005، يوليو 2026.
TIKIJJA, Hadda. « الطُعم الأول ». مختبر 0DATA، البحث 010، يوليو 2026.
OWASP Foundation. « Web Security Testing Guide ». v4.2, 2024.