> ## Content Index
> Fetch the complete content index at: https://arabroot.io/llms.txt
> Use this file to discover other available public pages before exploring further.

# ماذا تبني من ضوابط الهيئة الوطنية للأمن السيبراني؟
- URL: https://arabroot.io/articles/ماذا-تبني-من-ضوابط-الهيئة-الوطنية-للامن-السيبراني/
- Published: 2026-10-13T02:00:00.000Z
- Updated: 2026-10-14T07:41:36.000Z
- Description: أفكار منتجات تبنى على الالتزامات المتكررة في ضوابط الهيئة، مع مختبر يحول نتائج الفحص إلى تقرير أدلة مربوط بأرقام الضوابط.
- Author: فريق عرب رووت
- Tags: الأدلة التقنية, الأمن السيبراني, السيادة الرقمية والامتثال, القطاع الحكومي, الاستضافة الذاتية

في مقال [ضوابط الهيئة الوطنية للأمن السيبراني: أيها ينطبق عليك؟](https://arabroot.io/articles/%D8%B6%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D9%87%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D9%88%D8%B7%D9%86%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D8%A7%D9%8A%D9%87%D8%A7-%D9%8A%D9%86%D8%B7%D8%A8%D9%82-%D8%B9%D9%84%D9%8A%D9%83/) قرأنا مجموعات الضوابط واحدة بعد الأخرى، ولاحظنا أن أغلبها يكرر الشيء نفسه بأشكال مختلفة: اجرد أصولك، وافحصها كل فترة محددة، وسجل ما يحدث عليها، واحفظ الدليل، وراجع، ثم أعد ذلك كله في الدورة القادمة. وكل التزام يتكرر بهذا الشكل في مئات الجهات هو عمل يدوي يدفع أحدهم ثمنه كل شهر، وهذا بالضبط ما يبحث عنه من يريد بناء منتج.

وقد وضعنا في مقال [ماذا تبني؟ أفكار منتجات تقنية محلية](https://arabroot.io/articles/%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%A8%D9%86%D9%8A-%D8%A7%D9%81%D9%83%D8%A7%D8%B1-%D9%85%D9%86%D8%AA%D8%AC%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%85%D8%AD%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D9%8A%D8%AC/) فكرتين قريبتين من هذا الموضوع، هما [أتمتة الحوكمة والامتثال GRC](https://arabroot.io/articles/%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%A8%D9%86%D9%8A-%D8%A7%D9%81%D9%83%D8%A7%D8%B1-%D9%85%D9%86%D8%AA%D8%AC%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%85%D8%AD%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D9%8A%D8%AC/#idea-11) و[المراقبة الأمنية المدارة SOC](https://arabroot.io/articles/%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%A8%D9%86%D9%8A-%D8%A7%D9%81%D9%83%D8%A7%D8%B1-%D9%85%D9%86%D8%AA%D8%AC%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%85%D8%AD%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D9%8A%D8%AC/#idea-14)، ولن نكرر ما فيهما من منافسين وحجم سوق، وإنما نذهب هنا إلى مستوى الضابط نفسه، فنسأل لكل التزام: ما رقمه في الوثيقة، ومن يدفع لتنفيذه، وما الذي يجعل المنتج المحلي أنسب، وما أصغر نسخة يمكن بيعها، وما الذي سوف يتعبك فيها. ثم نبني مختبراً صغيراً يبين قلب منتج الأدلة: سجل أصول ونتائج فحص حقيقية تتحول إلى تقرير عربي مربوط بأرقام ضوابط ECC، ثم نكسره عمداً. وسوف نناقش في هذا المقال ما يلي:

- كيف تقرأ الضوابط بعين من يبني منتجاً، وما البوابات التنظيمية التي تمر بها كل فكرة.
- اثنتا عشرة فكرة منتج مبنية على التزامات محددة بأرقامها، وجدول يقارن بينها.
- مختبر يحول سجل أصول ونتائج Trivy وLynis إلى تقرير أدلة بالعربية مع قائمة فجوات.
- كيف يعطيك التقرير تغطية كاملة كاذبة عندما ينقص سجل الأصول أصلاً واحداً، وكيف تصلحه.

⚠️

هذا المقال تعليمي، وليس استشارة نظامية أو قانونية ولا استشارة امتثال ولا استثمار. أرقام الضوابط منقولة من الوثائق المنشورة على موقع الهيئة الوطنية للأمن السيبراني في أكتوبر 2026، والنص العربي لكل وثيقة هو المرجع، وشروط التسجيل والترخيص قد تتغير، فراجع الهيئة والجهات المختصة قبل أن تبني أو تبيع. ودرجات المقارنة في الجدول تقدير منا وليست بيانات مقاسة.

## كيف تقرأ الضوابط بعين من يبني منتجاً؟

عندما يقرأ مدير الأمن السيبراني ضابطاً مثل 2-10-3-1 «فحص الثغرات واكتشافها دورياً» فهو يرى مهمة، أما من يبني منتجاً فيرى ثلاثة أشياء: نشاطاً يتكرر، ودليلاً يجب أن يحفظ بعد كل تكرار، وجهات كثيرة عليها النشاط نفسه. وقد شرحنا في [قسم النمط المتكرر في مقال ECC](https://arabroot.io/articles/%D8%A7%D9%84%D8%B6%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D8%A7%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-nca-ecc-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%B3%D9%8A%D8%B7%D8%A9/#pattern) أن كل مكون تقريباً يطلب وثيقة ثم تطبيقاً ثم حداً أدنى ثم مراجعة دورية، والدليل الإرشادي GECC-2:2026 يذكر لكل بند مخرجات متوقعة Expected Deliverables، فمثلاً يطلب لـ 2-10-3-1 «تقارير دورية لتقييم الثغرات واكتشافها»، ولـ 2-1-2 «سجلاً موثقاً ومحدثاً لكل الأصول، مثل ملف Excel أو حل آلي مثل CMDB». وهذه المخرجات هي في الحقيقة قائمة مواصفات لمنتجات.

وهناك ثلاث علامات تجعل الالتزام فرصة حقيقية وليس مجرد خدمة استشارية لمرة واحدة:

- **التكرار بمدة محددة:** كلما حددت المجموعة المتخصصة مدة، مثل الفحص الشهري في CSCC 2-9-2، أصبح العمل اليدوي مكلفاً، وأصبح للأتمتة قيمة تقاس بالساعات.
- **الدليل الذي يتولد من الأنظمة:** الدليل الذي يخرج من نظام، مثل تقرير فحص أو سجل دخول، يمكن جمعه آلياً، أما الدليل الذي يكتبه شخص، مثل محضر لجنة، فقيمة المنتج فيه أقل.
- **التداخل بين المجموعات:** الجهة التي عليها ECC وCSCC وTCC معاً تحتاج من يطبق الأشد على كل أصل ويعيد استخدام الدليل نفسه لكل الضوابط المرتبطة به، كما شرحنا في [قسم اجتماع المجموعات](https://arabroot.io/articles/%D8%B6%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D9%87%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D9%88%D8%B7%D9%86%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D8%A7%D9%8A%D9%87%D8%A7-%D9%8A%D9%86%D8%B7%D8%A8%D9%82-%D8%B9%D9%84%D9%8A%D9%83/#combine).

والصورة التالية تبين الالتزامات التي اخترناها وما يقابلها من منتجات، مع أمثلة من أرقام الضوابط:

![اثنتا عشرة بطاقة ملونة مرقمة: أدلة امتثال مستمرة، وجرد الأصول واكتشافها، ومتابعة الثغرات بمدد كل مجموعة، ووضعية السحابة لطرفي CCC، وتصنيف البيانات وتعتيمها ومنع تسربها، واكتشاف أصول الأنظمة التشغيلية OT، ووصول عن بعد مسجل، وحماية الحسابات والعلامة من الانتحال، وجرد التشفير ومطابقة NCS، ومخاطر الأطراف الخارجية، وتوعية مخصصة لكل مجموعة، واختبار الاستعادة بدليل موقع، وتحت كل بطاقة أرقام ضوابط مثل ECC 2-10-3 وOTCC 2-1-1-2 وDCC 2-4-1-3](https://arabroot.io/content/images/2026/10/nca-startup-ideas-01-obligations.webp)

كل بطاقة التزام يتكرر في أكثر من جهة، وتحته أرقام الضوابط التي تطلبه

## البوابات التنظيمية قبل أن تبدأ

قبل الأفكار نفسها، هناك بوابات تمر بها أغلبها، ومن الأفضل أن تعرفها قبل أن تكتب سطراً من الكود، والسبب أن بعضها يحدد من تستطيع أن تبيع له أصلاً:

- **التسجيل لدى الهيئة:** بحسب [صفحة التسجيل والترخيص](https://nca.gov.sa/ar/registration-and-licensing/?ref=arabroot.io)، أصبح تسجيل كل جهة تقدم حلولاً أو خدمات أو منتجات للأمن السيبراني في المملكة متطلباً تنظيمياً من 1 أغسطس 2022، عبر منصة حصين.
- **ترخيص مراكز العمليات المدارة MSOC:** تقديم خدمات مراكز عمليات الأمن السيبراني المدارة يحتاج ترخيصاً بفئتين، الأولى تسمح بخدمة الجهات الحكومية وجهات البنى الحساسة، والثانية تسمح بخدمة الجهات الأخرى فقط، وتنشر الهيئة قائمة المرخصين على الصفحة نفسها. ولاحظ أن ضوابط القطاع الخاص NCNICC تطلب في 2-12-1-2 الاشتراك لدى مقدم خدمة مرخص، فالترخيص هنا شرط لدخول السوق وليس ميزة إضافية.
- **إذا استضفت بيانات عملائك فأنت مقدم خدمة سحابية:** المنتج الذي يقدم كخدمة SaaS لجهات حكومية أو جهات بنى حساسة يضعك في موقع مقدم الخدمة CSP في ضوابط الحوسبة السحابية CCC-2:2024، والوثيقة تقول إن مقدم الخدمة داخل نطاق ECC أو خارجه عليه الالتزام بالضوابط الأساسية والسحابية معاً، أي 37 ضابطاً و94 ضابطاً فرعياً فوق ECC، منها 1-4-P-1-1 التي تطلب كوادر سعودية في وظائف الأمن السيبراني بمراكز البيانات داخل المملكة.
- **البيانات خارج الهيئة:** مسائل توطين البيانات وتصنيفها نقلت إلى مكتب إدارة البيانات الوطنية NDMO في سدايا، والبيانات الشخصية تخضع لنظام حماية البيانات الشخصية PDPL، كما ذكرنا في [قسم العلاقة بسدايا](https://arabroot.io/articles/%D8%B6%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D9%87%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D9%88%D8%B7%D9%86%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D8%A7%D9%8A%D9%87%D8%A7-%D9%8A%D9%86%D8%B7%D8%A8%D9%82-%D8%B9%D9%84%D9%8A%D9%83/#pdpl)، فراجعهما لكل منتج يخزن أدلة عملائك.

ولهذا السبب سوف تجد أن كثيراً من الأفكار التالية أسهل في نسخة تثبت داخل بيئة العميل On-premises، لأنها تبعدك عن عبء مقدم الخدمة السحابية، وتطمئن العميل الذي لا يريد أن يرفع تقارير ثغراته إلى سيرفر غيره.

## اثنتا عشرة فكرة مبنية على الضوابط

لكل فكرة الحقول نفسها: الضوابط التي تطلبها بأرقامها، ومن يدفع، ولماذا يفوز المحلي، ومن ينافس، والمشاريع مفتوحة المصدر التي تبدأ منها، وأصغر نسخة تبيعها MVP، والصعب فيها. ولم نذكر من المنافسين إلا من تحققنا من موقعه الرسمي، وإذا لم نجد منافساً محلياً تحققنا منه فإننا نقول ذلك.

### 1\. أدلة امتثال مستمرة Continuous Evidence

- **الضوابط:** النمط المتكرر في كل مكون، وبالأخص ما له مخرج آلي: ECC 2-1-2 و2-10-3 و2-3-3-3 و2-12-3، ونظائرها في NCNICC التي تشترك مع ECC في ترقيم المكون الثاني، مثل 2-10-1-2 و2-12-1-1.
- **من يدفع:** مدير الأمن السيبراني، ومكاتب الاستشارات التي تجهز عملاءها للتقييم.
- **ما الجديد هنا فوق** [**فكرة أتمتة GRC**](https://arabroot.io/articles/%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%A8%D9%86%D9%8A-%D8%A7%D9%81%D9%83%D8%A7%D8%B1-%D9%85%D9%86%D8%AA%D8%AC%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%85%D8%AD%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D9%8A%D8%AC/#idea-11)**:** أن تبدأ من الدليل وليس من السجل، فالمنتج يجمع المخرجات من الأنظمة نفسها ويربطها بالضابط ويحفظها بتاريخها، والواجهة تأتي بعد ذلك. ولاحظ فجوة المحتوى الحالية: مكتبات الأطر في [CISO Assistant](https://github.com/intuitem/ciso-assistant-community?ref=arabroot.io) (AGPL-3.0 للنسخة المجتمعية) فيها ECC-2:2024 وOTCC، ولكن ضوابط الحوسبة السحابية فيها ما زالت CCC-1:2020، ولم نجد فيها DCC ولا CSCC ولا TCC ولا OSMACC ولا NCNICC وقت كتابة المقال، فمن يبني مكتبات صحيحة لهذه المجموعات بالعربية يقدم شيئاً غير موجود.
- **أصغر نسخة:** ما يبنيه المختبر في هذا المقال، مع تصدير بصيغة أداة التقييم التي تنشرها الهيئة، أي صف لكل ضابط فيه مستوى الالتزام والملاحظات وإجراء التصحيح والتاريخ المتوقع.
- **الصعب فيها:** صيانة مكتبة الضوابط مع كل إصدار جديد، وإقناع المقيم بأن الدليل الآلي موثوق، وهذا يحتاج بصمة Hash وتاريخاً ومصدراً لكل دليل.

### 2\. جرد الأصول واكتشافها Asset Inventory and Discovery

- **الضوابط:** ECC 2-1-2، وCCC 2-1-P-1-1 التي تذكر قاعدة بيانات إدارة الإعدادات CMDB بالاسم، وCCC 2-1-T-1-1 التي تطلب من المشترك جرد كل الخدمات السحابية، وOTCC 2-1-1-2 التي تطلب حلاً آلياً للجرد، وTCC 2-1-1-1 وOSMACC 2-1-1-1 لجرد أنظمة العمل عن بعد وحسابات التواصل.
- **من يدفع:** إدارة تقنية المعلومات قبل إدارة الأمن، لأن الجرد يفيدها في التراخيص والدعم أيضاً.
- **لماذا المحلي:** الجرد يحتاج اتصالاً بكل شيء في شبكة العميل، وكثير من الجهات لا تقبل وكيلاً Agent يرسل بيانات أصولها إلى الخارج.
- **من أين تبدأ:** [osquery](https://github.com/osquery/osquery?ref=arabroot.io) (Apache-2.0) لجمع معلومات الأجهزة، وواجهات Docker والسحابة لاكتشاف ما يعمل.
- **أصغر نسخة:** مقارنة يومية بين السجل المعتمد وما يكتشف فعلاً، مع قائمة بالأصول التي لا مالك لها ولا تصنيف، وهذه المقارنة هي ما سوف نكسره في المختبر.
- **الصعب فيها:** توحيد هوية الأصل الواحد بين مصادر مختلفة، فالسيرفر نفسه له اسم في السجل وعنوان IP في الشبكة ومعرف في السحابة.

### 3\. متابعة الثغرات بمدد كل مجموعة

- **الضوابط:** ECC 2-10-3، وCSCC 2-9-1-2 و2-9-2 بفحص شهري، وCCC 2-9-P-1-1 بفحص شهري للمكونات الخارجية وكل ثلاثة أشهر للداخلية، وCCC 2-9-T-1-1، وTCC 2-9-1-1 و2-9-1-2، وOTCC 2-9-1-3 بمدة تتغير مع مستوى المرفق، وNCNICC 2-10-1-3 للتطبيقات الخارجية.
- **من يدفع:** فريق إدارة الثغرات، وهو غالباً من يجمع التقارير من عدة أدوات يدوياً.
- **لماذا المحلي:** أدوات الفحص العالمية تعرض الخطورة بمقياس CVSS، ولكنها لا تعرف أن الأصل نفسه نظام حساس عليه مهلة شهر، أو نظام عمل عن بعد عليه ثلاثة أشهر، فالقيمة في جدول المدد المربوط بالمجموعات.
- **من أين تبدأ:** [DefectDojo](https://github.com/DefectDojo/django-DefectDojo?ref=arabroot.io) (BSD-3-Clause) لتجميع نتائج الأدوات، و[Trivy](https://github.com/aquasecurity/trivy?ref=arabroot.io) (Apache-2.0) و[OpenSCAP](https://github.com/OpenSCAP/openscap?ref=arabroot.io) (LGPL-2.1) للفحص، وقد شرحنا Trivy في [فحص Docker Images والبنية ككود](https://arabroot.io/articles/%D9%81%D8%AD%D8%B5-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D9%83%D9%83%D9%88%D8%AF-%D9%85%D8%B9-trivy/).
- **أصغر نسخة:** لوحة تقول لكل أصل: آخر فحص، والمدة المطلوبة عليه بحسب أشد مجموعة تنطبق، والثغرات التي تجاوزت مهلة المعالجة.
- **الصعب فيها:** مهلة المعالجة نفسها تحددها الجهة في معاييرها في أغلب المجموعات، فالمنتج يحتاج أن يقرأ سياسة العميل وليس قيمة ثابتة.

### 4\. وضعية السحابة لطرفي CCC

- **الضوابط للمشترك CST:** 1-3-T-1-1 مراقبة التزام مقدم الخدمة بالتشريعات والعقد بشكل مستمر أو لحظي، و2-2-T-1-4 التحقق متعدد العوامل للحسابات المميزة، و2-11-T-1-1 تفعيل سجلات الدخول والأحداث، و2-6-T-1-1 استراتيجية الخروج.
- **الضوابط لمقدم الخدمة CSP:** 2-3-P-1-6 إبلاغ المشتركين بمتطلبات الأمن التي يوفرها المقدم، و2-9-P-1-2 إبلاغهم بالثغرات التي قد تؤثر عليهم، و2-12-P-1-6 الإبلاغ اللحظي عن الحوادث التي قد تؤثر عليهم.
- **الفكرة:** منتج بوجهين، فللمشترك فحص لإعدادات حسابه السحابي مقابل ضوابط T مع تقرير عربي، ولمقدم الخدمة المحلي بوابة ثقة Trust Portal يعرض فيها لعملائه حالة التزامه وإشعارات الثغرات والحوادث التي تطلبها ضوابط P.
- **من أين تبدأ:** [Prowler](https://github.com/prowler-cloud/prowler?ref=arabroot.io) (Apache-2.0) لفحص إعدادات السحابة، مع مكتبة قواعد مربوطة بأرقام CCC.
- **الصعب فيها:** مقدمو الخدمة المحليون يختلفون في واجهاتهم البرمجية، والأداة العالمية تدعم المزودين العالميين أولاً، فالقيمة في دعم المحلي، والثمن في كتابة موصل لكل مزود.

### 5\. تصنيف البيانات وتعتيمها ومنع تسربها

- **الضوابط:** DCC 2-4-1-1 العلامة المائية القابلة للتتبع، و2-4-1-2 منع تسرب البيانات DLP وإدارة الصلاحيات، و2-4-1-3 حظر البيانات خارج بيئة الإنتاج إلا بعد التعتيم Data Masking أو المزج Data Scrambling، و3-1-1-6 إعادة التصنيف قبل المشاركة مع طرف خارجي، و2-6-1-5 سجل عمليات الإتلاف، وفي CCC الضابط 2-6-P-1-1 بالمعنى نفسه لبيانات منظومة السحابة.
- **من يدفع:** مالك البيانات وإدارة الأمن، وفرق التطوير التي تحتاج نسخة من قاعدة الإنتاج للاختبار.
- **لماذا المحلي:** اكتشاف البيانات الحساسة يعتمد على اللغة، فالاسم الرباعي ورقم الهوية الوطنية ورقم الجوال السعودي والعنوان الوطني أنماط محلية، وأدوات التعتيم العالمية لا تعرفها جاهزة.
- **من أين تبدأ:** [Presidio](https://github.com/microsoft/presidio?ref=arabroot.io) (MIT) لاكتشاف البيانات الشخصية وتعتيمها، مع كتابة أدوات تعرف Recognizers عربية، وقواعد التعتيم داخل قاعدة البيانات نفسها.
- **أصغر نسخة:** أداة تنسخ قاعدة PostgreSQL إلى بيئة الاختبار وتعتم الأعمدة المصنفة، وتولد محضراً يثبت ما تم تعتيمه، وهو دليل مباشر للضابط 2-4-1-3.
- **الصعب فيها:** الأخطاء في الاكتشاف تكلف في الاتجاهين، فإذا فات المنتج عموداً حساساً فقد تسربت البيانات، وإذا عتم كل شيء فلن تصلح البيانات للاختبار.

### 6\. اكتشاف أصول الأنظمة التشغيلية OT ومراقبة تقسيمها

- **الضوابط:** OTCC 2-1-1-2 الجرد الآلي، و2-4-1-1 و2-4-1-2 تقسيم المناطق Zones، و2-4-1-9 منع الاتصال المباشر بين شبكة الشركة والأنظمة التشغيلية، و2-11-1-8 التنبيه عند اتصال جهاز جديد، و2-11-1-5 كشف رفع البرامج وتنزيلها على الأصول بما فيها أنظمة السلامة SIS.
- **من يدفع:** المرافق الحساسة في الطاقة والمياه والصناعة، ويدفع عادة مدير أمن الأنظمة التشغيلية بالتعاون مع إدارة التشغيل.
- **المنافسون العالميون:** [Claroty](https://claroty.com/?ref=arabroot.io) و[Nozomi Networks](https://www.nozominetworks.com/?ref=arabroot.io) و[Dragos](https://www.dragos.com/?ref=arabroot.io)، وكلها تقدم جرد أصول الأنظمة التشغيلية ومراقبتها، ولم نتحقق من منافس محلي متخصص في هذا الجزء.
- **من أين تبدأ:** [Zeek](https://github.com/zeek/zeek?ref=arabroot.io) (BSD) لتحليل الشبكة، و[Malcolm](https://github.com/cisagov/Malcolm?ref=arabroot.io) (Apache-2.0) من وكالة CISA الأمريكية، وهو مجموعة جاهزة لتحليل حركة الشبكة تشمل بروتوكولات صناعية.
- **أصغر نسخة:** جهاز مراقبة سلبية Passive على منفذ مرآة Mirror Port، يخرج قائمة الأصول المكتشفة ومخطط الاتصالات بين المناطق، ويبلغ عن أي اتصال يخالف 2-4-1-9.
- **الصعب فيها:** الفحص النشط قد يوقف وحدة تحكم قديمة، والضوابط نفسها تطلب في 2-9-1-1 و2-10-1-2 أن يكون الفحص بأثر محدود أو معدوم على الإنتاج، والوصول إلى الميدان والبروتوكولات الصناعية الخاصة بكل مصنع يحتاج خبرة لا تتعلمها من الكتب.

### 7\. وصول عن بعد مؤقت ومسجل

- **الضوابط:** OTCC 2-2-1-7 وصول عن بعد استثنائي بعد تقييم المخاطر، عبر قناة مشفرة بتحقق متعدد، لمدة محددة، مع مراقبة الجلسة وتسجيلها، وTCC 2-2-1-2 منع الدخول المتزامن، وTCC 2-11-1-4 مراقبة الدخول من خارج المملكة، وCSCC 2-3-1-4 أجهزة إدارة معزولة للحسابات المميزة.
- **من يدفع:** الجهة التي تسمح لموردين وفنيين بالدخول إلى أنظمتها، وهي كثيرة في التشغيل والصيانة.
- **لماذا المحلي:** تسجيلات الجلسات من أكثر الأدلة حساسية، والجهة تريدها داخل بيئتها، وسير الموافقة يجب أن يناسب طريقة العمل في الجهة.
- **من أين تبدأ:** [Apache Guacamole](https://arabroot.io/articles/apache-guacamole-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D8%A7%D9%84%D9%89-%D8%B3%D9%8A%D8%B1%D9%81%D8%B1%D8%A7%D8%AA%D9%83-%D9%85%D9%86-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD/) (Apache-2.0) للدخول من المتصفح مع تسجيل الجلسة، ووسيط هوية بتحقق متعدد، وقد شرحنا الوصول المميز في [إدارة الهوية والوصول IAM والوصول المميز PAM](https://arabroot.io/articles/%D8%A7%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%87%D9%88%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-iam-%D9%88%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D8%A7%D9%84%D9%85%D9%85%D9%8A%D8%B2-pam/).
- **أصغر نسخة:** طلب وصول بسبب ومدة، وموافقة، وجلسة تنتهي تلقائياً، وتسجيل محفوظ مربوط برقم الطلب.
- **الصعب فيها:** هذا السوق فيه منتجات PAM عالمية ناضجة، فالمنتج المحلي يفوز بالبساطة وبالربط المباشر بالضوابط، وليس بعدد المزايا.

### 8\. حماية الحسابات الرسمية والعلامة التجارية من الانتحال

- **الضوابط:** OSMACC 2-1-1-1 جرد الحسابات سنوياً، و2-2-1-5 التحقق متعدد العوامل، و2-6-1-3 مراقبة الانتحال، و2-6-1-4 المراقبة الآلية لتغير نمط الحسابات، وفي DCC الضابط 2-4-1-4، وفي NCNICC الضابط 2-7-1-2، وكلاهما يطلب خدمة حماية العلامة التجارية Brand Protection.
- **من يدفع:** إدارة الاتصال المؤسسي مع إدارة الأمن، وهي من الحالات القليلة التي يكون فيها المشتري خارج التقنية.
- **المنافسون العالميون:** [ZeroFox](https://www.zerofox.com/?ref=arabroot.io) يقدم الحماية من الانتحال والتصيد ضمن الحماية الخارجية، ولم نتحقق من منافس محلي.
- **لماذا المحلي:** الانتحال يحدث بالعربية وبأسماء الجهات المحلية وبلهجات المنطقة، والنطاقات المقلدة تستخدم حروفاً تشبه الحروف الأصلية، وهذا يحتاج فهماً للغة والسوق.
- **أصغر نسخة:** جرد للحسابات الرسمية مع حالة التحقق المتعدد لكل حساب كما يصرح بها مالكه، ومراقبة يومية لحسابات ونطاقات جديدة تشبه اسم الجهة، مع محضر شهري يكون دليلاً لـ OSMACC 2-6-1-3.
- **الصعب فيها:** الوصول إلى بيانات المنصات محكوم بشروط كل منصة وواجهاتها البرمجية، وطلب إزالة الحساب المنتحل يعتمد على استجابة المنصة.

### 9\. جرد التشفير ومطابقته للمعايير الوطنية NCS

- **الضوابط:** ECC 2-8-3، وCCC 2-7-P-1-1 و2-7-T-1-1 بالمستوى المتقدم، وTCC 2-7-1-1 بالمستوى المتقدم لاتصالات العمل عن بعد، وفي DCC الضابطان 2-5-1-1 و2-5-1-2 بالمستويين المتقدم والمتوسط، وكلها تحيل إلى المعايير الوطنية للتشفير NCS-1:2020.
- **الفكرة:** أداة تجرد ما تستخدمه كل خدمة فعلاً من بروتوكولات وخوارزميات وأطوال مفاتيح وشهادات، ثم تقارنه بالمستوى المطلوب في NCS، فمثلاً RSA بطول 3072 بت مقبول في المستوى المتوسط MODERATE وغير مقبول في المتقدم ADVANCED، وAES بمفتاح 256 بت هو المقبول في المتقدم.
- **من أين تبدأ:** [testssl.sh](https://github.com/testssl/testssl.sh?ref=arabroot.io) (GPL-2.0) لفحص إعدادات TLS، مع جدول NCS مكتوب كقواعد، والأساسيات في [التشفير للمطورين](https://arabroot.io/articles/%D8%A7%D9%84%D8%AA%D8%B4%D9%81%D9%8A%D8%B1-%D9%84%D9%84%D9%85%D8%B7%D9%88%D8%B1%D9%8A%D9%86-%D8%A7%D9%84%D9%87%D8%A7%D8%B4-%D9%88%D9%83%D9%84%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B1%D9%88%D8%B1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD/).
- **لماذا المحلي:** المعيار وطني، والأدوات العالمية تقارن بمعايير أخرى، ولا تعرف أن «المتقدم» في ضابط TCC يعني قائمة محددة.
- **الصعب فيها:** التشفير لا يقتصر على TLS، فهناك تشفير قواعد البيانات والنسخ الاحتياطية والمفاتيح داخل التطبيقات، وكثير منها لا يظهر من الشبكة.

### 10\. مخاطر الأطراف الخارجية بالضوابط الوطنية

- **الضوابط:** ECC 4-1-2 بنود العقود، و4-1-3 تقييم المخاطر لمقدمي التعهيد والخدمات المدارة، وDCC 3-1-1-2 ضمانات حذف البيانات مع تقديم الأدلة، و3-1-1-3 توثيق كل عمليات مشاركة البيانات ومبرراتها، وOTCC 4-1-1-4 تقييم الأطراف الخارجية وتدقيقها دورياً، وCCC 4-1-P-1-4 إدارة مخاطر موردي مقدم الخدمة.
- **من يدفع:** المشتريات وإدارة المخاطر، وفي الجهة الأخرى المورد نفسه الذي يريد أن يجيب عن الاستبيان مرة واحدة لكل عملائه.
- **المنافسون العالميون:** [SecurityScorecard](https://securityscorecard.com/?ref=arabroot.io) لإدارة مخاطر سلسلة التوريد والأطراف الخارجية، و[Vanta](https://www.vanta.com/?ref=arabroot.io) الذي يقدم إدارة مخاطر الموردين ضمن منصته، ولم نتحقق من منافس محلي.
- **لماذا المحلي:** الاستبيان المحلي يجب أن يسأل بأرقام الضوابط الوطنية وبالعربية، وأن يتعامل مع بنود مثل وجود مركز العمليات المدار داخل المملكة في ECC 4-1-3.
- **أصغر نسخة:** استبيان عربي مربوط بالضوابط، يجيب عنه المورد مرة ويشارك إجابته وأدلته مع عدة عملاء بإذنه.
- **الصعب فيها:** المورد لا يحب الاستبيانات، فالمنتج يحتاج أن يوفر عليه وقتاً حقيقياً حتى يشارك.

### 11\. توعية مخصصة لكل مجموعة

- **الضوابط:** ECC 1-10-3 بموضوعاته، وDCC 1-3-1 التي تضيف التعامل مع البيانات في السفر والاجتماعات والطابعات والإتلاف، وTCC 1-3-1 لشبكات المنزل والأجهزة العامة، وOSMACC 1-4-1 لحسابات التواصل، وNCNICC 1-5 الذي يذكر برامج الفدية والتصيد بالاسم.
- **الفكرة:** برنامج توعية يبني محتوى كل موظف من المجموعات التي تنطبق على عمله، فموظف الاتصال المؤسسي يأخذ OSMACC، والموظف عن بعد يأخذ TCC، ويخرج للجهة دليل إكمال لكل ضابط فرعي.
- **من أين تبدأ:** نظام تعلم مفتوح المصدر للمحتوى، و[GoPhish](https://arabroot.io/articles/%D9%85%D8%AD%D8%A7%D9%83%D8%A7%D8%A9-%D8%A7%D9%84%D8%AA%D8%B5%D9%8A%D8%AF-phishing-%D8%A8%D8%AD%D9%85%D9%84%D8%A7%D8%AA-%D9%85%D8%B5%D8%B1%D8%AD-%D8%A8%D9%87%D8%A7-%D9%85%D8%B9-gophish/) (MIT) لمحاكاة التصيد.
- **الصعب فيها:** السوق مزدحم، والتمييز يأتي من جودة المحتوى العربي ومن ربطه بالضوابط، وليس من المنصة.

### 12\. اختبار الاستعادة الذي يولد محضره

- **الضوابط:** ECC 2-9-3-3 فحص فعالية الاستعادة دورياً، و3-1-3 خطط التعافي من الكوارث، وCSCC 2-8-2 كل ثلاثة أشهر، وTCC 2-8-2 كل ستة أشهر، وCCC 3-1-P-1-2 استمرارية أنظمة الأمن في منظومة السحابة.
- **الفكرة:** مجدول يستعيد النسخة الاحتياطية في بيئة معزولة، ويشغل فحوصاً تثبت أن النظام يعمل بعد الاستعادة، ثم يكتب محضراً فيه الوقت المستغرق والنتيجة، فيصبح الدليل ناتجاً عن الاختبار نفسه.
- **من أين تبدأ:** [restic](https://github.com/restic/restic?ref=arabroot.io) (BSD-2-Clause) وأدوات النسخ التي قارنا بينها في [restic أم Borg أم Kopia](https://arabroot.io/articles/restic-%D8%A3%D9%85-borg-%D8%A3%D9%85-kopia/)، والفكرة الأساسية في [النسخ الاحتياطي بقاعدة 3-2-1 واختبار الاستعادة](https://arabroot.io/articles/%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D8%A8%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-3-2-1-%D9%88%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D8%A7%D8%AF%D8%A9/).
- **الصعب فيها:** لكل نظام طريقة مختلفة لإثبات أنه «يعمل» بعد الاستعادة، فالمنتج يحتاج قوالب فحص لكل نوع شائع من الأنظمة.

وماذا عن مركز العمليات المدار SOC؟ شرحناه في [فكرة المراقبة الأمنية المدارة](https://arabroot.io/articles/%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%A8%D9%86%D9%8A-%D8%A7%D9%81%D9%83%D8%A7%D8%B1-%D9%85%D9%86%D8%AA%D8%AC%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%85%D8%AD%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D9%8A%D8%AC/#idea-14)، والجديد هنا أمران: أن تقديمه أصبح يحتاج ترخيصاً من الهيئة بفئتين كما ذكرنا في [قسم البوابات](#gates)، وأن ضوابط القطاع الخاص NCNICC تطلب في 2-12-1-2 الاشتراك لدى مقدم مرخص، فالسوق اتسع، والدخول إليه أصبح بوابة ترخيص وليس قراراً تجارياً فقط.

## جدول المقارنة بين الأفكار

نضع الأفكار في جدول بخمسة معايير من 1 إلى 5، والدرجات **تقدير منا** بناء على ما ذكرناه في كل فكرة، والهدف منها الترتيب وفتح النقاش، فقد تكون فكرة صعبة على فريق وسهلة على فريق آخر عنده الخبرة:

- **اتساع الطلب:** كم جهة عليها هذا الالتزام، و5 تعني كل جهة تقريباً في نطاق ECC أو NCNICC.
- **ضغط الضوابط:** هل تحدد الضوابط مدة أو دليلاً صريحاً يجعل الشراء ضرورياً.
- **المنافسة:** 5 تعني سوقاً مزدحماً.
- **الصعوبة:** صعوبة بناء منتج يعمل في الإنتاج، و5 هي الأصعب.
- **البوابة:** ثقل التسجيل والترخيص ومتطلبات مقدم الخدمة السحابية، و5 هي الأثقل.

| الفكرة                                  | الطلب | ضغط الضوابط | المنافسة | الصعوبة | البوابة |
| --------------------------------------- | ----- | ----------- | -------- | ------- | ------- |
| [1\. أدلة امتثال مستمرة](#idea-1)       | 5     | 4           | 3        | 3       | 3       |
| [2\. جرد الأصول واكتشافها](#idea-2)     | 5     | 4           | 3        | 3       | 2       |
| [3\. متابعة الثغرات بالمدد](#idea-3)    | 4     | 5           | 4        | 2       | 2       |
| [4\. وضعية السحابة لطرفي CCC](#idea-4)  | 3     | 4           | 3        | 4       | 3       |
| [5\. تصنيف البيانات وتعتيمها](#idea-5)  | 4     | 4           | 3        | 4       | 3       |
| [6\. أصول الأنظمة التشغيلية](#idea-6)   | 2     | 5           | 4        | 5       | 3       |
| [7\. وصول عن بعد مسجل](#idea-7)         | 3     | 4           | 4        | 3       | 2       |
| [8\. حماية الحسابات والعلامة](#idea-8)  | 4     | 3           | 3        | 3       | 2       |
| [9\. جرد التشفير ومطابقة NCS](#idea-9)  | 3     | 3           | 2        | 3       | 2       |
| [10\. مخاطر الأطراف الخارجية](#idea-10) | 4     | 4           | 3        | 2       | 2       |
| [11\. توعية مخصصة](#idea-11)            | 5     | 3           | 5        | 2       | 2       |
| [12\. اختبار الاستعادة بمحضر](#idea-12) | 4     | 4           | 2        | 3       | 2       |

في الجدول أعلاه لاحظ التالي: الفكرتان الأولى والثانية تبدوان متوسطتين في كل شيء، ولكنهما الأساس الذي تقوم عليه بقية الأفكار، فلا يوجد دليل لثغرات أصل لا تعرف أنه موجود، وهذا ما سوف يبينه المختبر التالي.

## المختبر: قلب منتج الأدلة في أقل من مئتي سطر

الهدف من هذا المختبر أن ترى بيدك الجزء الذي لا يظهر في عروض منتجات الامتثال: كيف تتحول نتيجة أداة فحص إلى سطر في تقرير يقول «الضابط 2-10-3-1: مطبق» أو «فجوة»، وأين يكذب هذا السطر. والصورة التالية تبين المراحل، والمختبر يبني الخطوات 1 و3 و5 و6 و8 منها، ثم يضيف الخطوة 2 بعد أن نكسره:

![مخطط من اليمين إلى اليسار: أربعة مصادر مرقمة هي سجل الأصول، والاكتشاف من البيئة بإطار أحمر متقطع، وأدوات الفحص Trivy وLynis وOpenSCAP، وواجهات السحابة والهوية، ثم بطاقة زرقاء للتوحيد حول الأصل، ثم بطاقة داكنة لمكتبة الضوابط والقواعد، ثم ثلاث مخرجات خضراء: مخزن أدلة بتاريخ وبصمة، وتقرير عربي وقائمة فجوات، وتصدير بشكل أداة الهيئة](https://arabroot.io/content/images/2026/10/nca-startup-ideas-02-pipeline.webp)

كل نتيجة تربط بأصل، ثم بضابط، ثم تحفظ دليلاً بتاريخه

والبيئة كلها Containers على جهاز واحد، كل أسمائها تبدأ بـ lab-nca، والإصدارات المستخدمة: Docker Engine 29.8.0، وTrivy 0.75.0 بقاعدة ثغرات محدثة في 2026-10-12، و[Lynis](https://github.com/CISOfy/lynis?ref=arabroot.io) 3.1.7 (GPL-3.0)، وPython 3.13.16، و«بيئة الإنتاج» فيها سيرفران: lab-nca-web من Docker Image الرسمية nginx:1.24.0، وهي نسخة قديمة اخترناها عمداً لأنها مبنية على Debian 11.9 الذي يعده Trivy منتهي الدعم EOSL، وlab-nca-app من python:3.13.16-slim المبنية على Debian 13.7.

### الخطوة الأولى: سجل الأصول

سجل الأصول ملف CSV بسيط، وهو ما تبدأ به أغلب الجهات فعلاً، فيه لكل أصل معرف واسم ونوع ومالك وتصنيف وDocker Image وبيئة:

```text
asset_id,name,type,owner,classification,image,env
A-001,lab-nca-web,web-server,infra-team,restricted,nginx:1.24.0,prod
A-002,lab-nca-app,app-server,dev-team,secret,python:3.13.16-slim,prod
```

والتصنيف هنا بالإنجليزية restricted وsecret لأن الملف يقرؤه الكود، وفي الجهة الحقيقية يتبع مستويات التصنيف المعتمدة لديها.

### الخطوة الثانية: الفحص بـ Trivy وLynis

نشغل السيرفرين، ثم نفحص Docker Image كل أصل في السجل بـ Trivy ونحفظ النتيجة بصيغة JSON، ثم نشغل Lynis داخل سيرفر التطبيق لتدقيق إعداداته، وهذا مقطع من ملف `run.sh` في مجلد المختبر:

```bash
# 1) The "production" environment: two inventoried servers.
docker run -d --name lab-nca-web --label lab-nca.env=prod nginx:1.24.0
docker run -d --name lab-nca-app --label lab-nca.env=prod python:3.13.16-slim sleep infinity

# 2) Vulnerability scan of each inventoried asset's Docker Image with Trivy.
docker volume create lab-nca-trivy-cache
while IFS=, read -r id name type owner cls image env; do
  [ "$id" = "asset_id" ] && continue
  docker run --rm --name lab-nca-trivy -v lab-nca-trivy-cache:/root/.cache \
    aquasec/trivy:0.75.0 image --quiet --format json "$image" > "$OUT/trivy-$name.json"
done < "$LAB/assets.csv"

# 3) Host audit with Lynis inside the app server.
docker cp "$LYNIS_TGZ" lab-nca-app:/opt/lynis.tar.gz
docker exec -w /opt lab-nca-app sh -c "mkdir lynis && tar xzf lynis.tar.gz -C lynis --strip-components=1 && chown -R 0:0 lynis"
docker exec -w /opt/lynis lab-nca-app ./lynis audit system --quick --no-colors \
  --report-file /tmp/lynis-report.dat > "$OUT/lynis-lab-nca-app.log" || true
docker cp lab-nca-app:/tmp/lynis-report.dat "$OUT/lynis-lab-nca-app.dat"
```

وفي الإعداد أعلاه لاحظ التالي:

- Trivy يفحص ما هو مكتوب في السجل فقط، فالحلقة تقرأ `assets.csv` ولا تسأل Docker عما يعمل، وهذا مقصود لأنه ما تفعله أغلب الإعدادات البسيطة، وسوف نعود إليه.
- Volume باسم `lab-nca-trivy-cache` يحفظ قاعدة الثغرات بين التشغيلات حتى لا تنزل في كل مرة.
- نسخنا Lynis كملف tar.gz وفككناه داخل الـ Container، والسبب أن النسخ المباشر لمجلد مفكوك على Windows يغير صلاحيات الملفات، فيرفض Lynis العمل برسالة «permissions of file … are not strict enough».

وعند تشغيل Lynis سوف تجد في آخر المخرج ملخصاً كما يلي:

```text
  -[ Lynis 3.1.7 Results ]-

  Warnings (2):
  ----------------------------
  ! Found one or more vulnerable packages. [PKGS-7392]
      https://cisofy.com/lynis/controls/PKGS-7392/

  ! klogd is not running, which could lead to missing kernel messages in log files [LOGG-2138]
      https://cisofy.com/lynis/controls/LOGG-2138/

  ...
  Details:
  Hardening index : 60 [############        ]
  Tests performed : 229
  Plugins enabled : 2

  Software components:
  - Firewall               [V]
  - Intrusion software     [X]
  - Malware scanner        [X]

```

ولاحظ أن Lynis داخل Container لا يرى كل ما يراه على سيرفر كامل، فقد سجل في تقريره أحداثاً استثنائية مثل عدم وجود مدير خدمات ولا أوامر شبكة، وهذا يعني أن غياب ملاحظة من Lynis لا يعني أن الضابط مطبق، كما سنرى في سطر التوقيت.

### الخطوة الثالثة: الربط بأرقام الضوابط

هذا هو الجزء الذي يجعل المنتج منتج امتثال وليس أداة فحص: كود يقرأ السجل ونتائج الأدوات، ويحكم على كل ضابط بقاعدة، ويكتب الدليل. والملف التالي هو `mapper.py` كاملاً، وهو بمكتبة Python القياسية فقط:

```python
"""Map an asset inventory plus Trivy and Lynis output to NCA ECC-2:2024 control numbers.

Educational lab for the ArabRoot article nca-startup-ideas. Not a compliance tool:
the control mapping and the policy values below are examples, not NCA requirements.

usage: python mapper.py --inventory assets.csv --scans out/ [--discovered out/discovered.txt]
"""
import argparse
import csv
import json
import pathlib
from datetime import datetime, timezone

# ECC-2:2024 control numbers (dash form) with a short Arabic label.
CONTROLS = {
    "2-1-2": "تطبيق متطلبات إدارة الأصول (سجل محدث بالأصول)",
    "2-1-5": "تصنيف الأصول",
    "2-10-3-1": "فحص الثغرات واكتشافها دورياً",
    "2-10-3-2": "تصنيف الثغرات بحسب خطورتها",
    "2-10-3-3": "معالجة الثغرات بحسب تصنيفها",
    "2-3-3-3": "إدارة حزم التحديثات Patch Management",
    "2-3-3-1": "الحماية من البرمجيات الضارة Malware",
    "2-3-3-2": "تقييد وسائط التخزين الخارجية",
    "2-3-3-4": "مزامنة التوقيت مركزياً",
    "2-12-3-1": "تفعيل سجلات الأحداث للأصول الحساسة",
    "1-6-2-2": "مراجعة الإعدادات والتحصين Hardening",
}

# Example policy values that an entity would write in its own standard.
MAX_SCAN_AGE_DAYS = 30
# Lynis test ids (exact id first, then the 4-letter group) mapped to ECC controls.
LYNIS_TO_CONTROL = {
    "HRDN-7230": "2-3-3-1",  # no malware scanner
    "USB-1000": "2-3-3-2",   # USB storage driver enabled
    "STRG-1846": "2-3-3-2",  # firewire storage driver enabled
    "PKGS-7392": "2-3-3-3",  # vulnerable packages installed
    "TIME": "2-3-3-4",       # time synchronisation tests
    "LOGG": "2-12-3-1",      # syslog / logging tests
}

def load_inventory(path):
    with open(path, encoding="utf-8", newline="") as f:
        return {row["name"]: row for row in csv.DictReader(f)}

def load_trivy(path):
    data = json.loads(path.read_text(encoding="utf-8"))
    vulns = []
    for result in data.get("Results", []):
        vulns.extend(result.get("Vulnerabilities") or [])
    created = datetime.fromisoformat(data["CreatedAt"].replace("Z", "+00:00"))
    return data.get("ArtifactName"), created, vulns

def load_lynis(path):
    findings, index = [], None
    for line in path.read_text(encoding="utf-8", errors="replace").splitlines():
        if line.startswith(("warning[]=", "suggestion[]=")):
            kind, rest = line.split("[]=", 1)
            test_id = rest.split("|", 1)[0]
            findings.append((kind, test_id, rest.split("|")[1] if "|" in rest else ""))
        elif line.startswith("hardening_index="):
            index = int(line.split("=", 1)[1])
    return findings, index

def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--inventory", required=True)
    ap.add_argument("--scans", required=True)
    ap.add_argument("--discovered")
    args = ap.parse_args()

    inventory = load_inventory(args.inventory)
    scans_dir = pathlib.Path(args.scans)
    now = datetime.now(timezone.utc)

    # Which assets exist? Without a discovery source we only know what the inventory says.
    if args.discovered:
        discovered = {l.strip() for l in open(args.discovered, encoding="utf-8") if l.strip()}
        source = "السجل + الاكتشاف من بيئة التشغيل"
    else:
        discovered = set()
        source = "السجل فقط"
    universe = sorted(set(inventory) | discovered)

    status, evidence, gaps = {}, {c: [] for c in CONTROLS}, []

    # 2-1-2 and 2-1-5: every running asset is in the inventory, with an owner and a classification.
    missing = [a for a in universe if a not in inventory]
    unclassified = [a for a, r in inventory.items() if not r.get("classification") or not r.get("owner")]
    status["2-1-2"] = "فجوة" if missing else "مطبق"
    evidence["2-1-2"].append(f"{len(inventory)} أصول في السجل، و{len(universe)} أصول معروفة من المصدر: {source}")
    for a in missing:
        gaps.append(("2-1-2", a, "أصل يعمل في بيئة الإنتاج وغير موجود في سجل الأصول"))
    status["2-1-5"] = "فجوة" if unclassified or missing else "مطبق"
    levels = {}
    for r in inventory.values():
        levels[r["classification"]] = levels.get(r["classification"], 0) + 1
    evidence["2-1-5"].append("، ".join(f"{k}={n}" for k, n in sorted(levels.items())))
    for a in missing:
        gaps.append(("2-1-5", a, "لا يوجد له مالك ولا تصنيف لأنه خارج السجل"))

    # 2-10-3-x and 2-3-3-3 from Trivy.
    scanned, sev_total, fixable, critical_open = set(), {}, 0, []
    for asset in universe:
        f = scans_dir / f"trivy-{asset}.json"
        if not f.exists():
            gaps.append(("2-10-3-1", asset, "لا يوجد تقرير فحص ثغرات لهذا الأصل"))
            continue
        image, created, vulns = load_trivy(f)
        age = (now - created).days
        if age > MAX_SCAN_AGE_DAYS:
            gaps.append(("2-10-3-1", asset, f"آخر فحص قبل {age} يوماً"))
            continue
        scanned.add(asset)
        counts = {}
        for v in vulns:
            counts[v["Severity"]] = counts.get(v["Severity"], 0) + 1
            if v.get("FixedVersion"):
                fixable += 1
                if v["Severity"] == "CRITICAL":
                    critical_open.append((asset, v["VulnerabilityID"], v["PkgName"]))
        for k, n in counts.items():
            sev_total[k] = sev_total.get(k, 0) + n
        order = ["CRITICAL", "HIGH", "MEDIUM", "LOW", "UNKNOWN"]
        summary = "، ".join(f"{k}={counts[k]}" for k in order if k in counts)
        evidence["2-10-3-1"].append(f"{asset}: فحص Trivy لـ {image} بتاريخ {created:%Y-%m-%d}")
        evidence["2-10-3-2"].append(f"{asset}: {summary}")

    coverage = len(scanned) / len(universe) * 100 if universe else 0
    status["2-10-3-1"] = "مطبق" if coverage == 100 else "فجوة"
    evidence["2-10-3-1"].insert(0, f"التغطية: {len(scanned)} من {len(universe)} أصول ({coverage:.0f}%)")
    status["2-10-3-2"] = "مطبق" if sev_total else "فجوة"
    status["2-3-3-3"] = "فجوة" if fixable else "مطبق"
    evidence["2-3-3-3"].append(f"عدد الثغرات التي لها تحديث متاح ولم يطبق: {fixable}")
    status["2-10-3-3"] = "فجوة" if critical_open else "مطبق"
    evidence["2-10-3-3"].append(f"عدد ثغرات CRITICAL التي لها إصلاح متاح: {len(critical_open)}")
    for asset, cve, pkg in critical_open[:5]:
        gaps.append(("2-10-3-3", asset, f"{cve} في الحزمة {pkg} خطورتها CRITICAL ولها إصلاح متاح"))
    if len(critical_open) > 5:
        gaps.append(("2-10-3-3", "*", f"و{len(critical_open) - 5} ثغرات CRITICAL أخرى لها إصلاح متاح"))

    # Lynis: hardening index and findings mapped by test-id prefix.
    for asset in universe:
        f = scans_dir / f"lynis-{asset}.dat"
        if not f.exists():
            continue
        findings, index = load_lynis(f)
        evidence["1-6-2-2"].append(f"{asset}: مؤشر التحصين في Lynis = {index}، و{len(findings)} ملاحظة")
        status["1-6-2-2"] = "جزئي" if findings else "مطبق"
        for kind, test_id, text in findings:
            control = LYNIS_TO_CONTROL.get(test_id) or LYNIS_TO_CONTROL.get(test_id[:4])
            if control:
                status[control] = "فجوة"
                if f"{asset}: Lynis {test_id}" not in evidence[control]:
                    evidence[control].append(f"{asset}: Lynis {test_id}")
                gaps.append((control, asset, f"{test_id}: {text}"))
    for c in ("2-3-3-1", "2-3-3-2", "2-3-3-4", "2-12-3-1", "1-6-2-2"):
        status.setdefault(c, "لا يوجد دليل")

    print("# تقرير أدلة الضوابط الأساسية ECC-2:2024 (مثال تعليمي)")
    print(f"تاريخ التوليد: {now:%Y-%m-%d %H:%M} UTC")
    print(f"مصدر قائمة الأصول: {source}")
    print()
    print("| الضابط | الوصف | الحالة | الدليل |")
    print("|---|---|---|---|")
    for c, label in CONTROLS.items():
        ev = "؛ ".join(evidence[c]) or "لا يوجد"
        print(f"| {c} | {label} | {status.get(c, 'لا يوجد دليل')} | {ev} |")
    print()
    print(f"## قائمة الفجوات ({len(gaps)})")
    for c, asset, text in gaps:
        print(f"- [{c}] {asset}: {text}")

if __name__ == "__main__":
    main()
```

وفي الكود أعلاه لاحظ التالي:

- القاموس `CONTROLS` هو مكتبة الضوابط في أصغر صورها، والأرقام من ECC-2:2024، والوصف العربي مختصر منا وليس نص الضابط.
- `MAX_SCAN_AGE_DAYS = 30` قيمة سياسة وليست من الضوابط، فالضابط 2-10-3-1 يقول «دورياً»، والجهة هي التي تحدد المدة في معاييرها، أو تأخذها من مجموعة متخصصة مثل CSCC 2-9-2.
- `LYNIS_TO_CONTROL` يربط نتائج Lynis بالضوابط باسم الاختبار، مثل HRDN-7230 الذي يقترح تثبيت أداة لفحص البرمجيات الضارة، فيقابله 2-3-3-1، وهذا الربط اجتهاد منا يجب أن يراجعه مختص قبل أن يعتمد.
- الأصول التي يحسب عليها التقرير هي `universe`، وهي السجل وحده إذا لم يعط الكود مصدراً للاكتشاف، وهنا مكان الخلل الذي سوف نكسره.

الآن نشغل الكود على السجل ونتائج الفحص:

```bash
docker run --rm --name lab-nca-mapper -v "$LAB":/lab:ro -v "$OUT":/out \
  python:3.13.16-slim python /lab/mapper.py --inventory /lab/assets.csv --scans /out
```

والمخرج سوف يكون كما يلي:

```markdown
# تقرير أدلة الضوابط الأساسية ECC-2:2024 (مثال تعليمي)
تاريخ التوليد: 2026-10-12 16:18 UTC
مصدر قائمة الأصول: السجل فقط

| الضابط | الوصف | الحالة | الدليل |
|---|---|---|---|
| 2-1-2 | تطبيق متطلبات إدارة الأصول (سجل محدث بالأصول) | مطبق | 2 أصول في السجل، و2 أصول معروفة من المصدر: السجل فقط |
| 2-1-5 | تصنيف الأصول | مطبق | restricted=1، secret=1 |
| 2-10-3-1 | فحص الثغرات واكتشافها دورياً | مطبق | التغطية: 2 من 2 أصول (100%)؛ lab-nca-app: فحص Trivy لـ python:3.13.16-slim بتاريخ 2026-10-12؛ lab-nca-web: فحص Trivy لـ nginx:1.24.0 بتاريخ 2026-10-12 |
| 2-10-3-2 | تصنيف الثغرات بحسب خطورتها | مطبق | lab-nca-app: HIGH=48، MEDIUM=60، LOW=61، UNKNOWN=3؛ lab-nca-web: CRITICAL=17، HIGH=175، MEDIUM=300، LOW=238، UNKNOWN=17 |
| 2-10-3-3 | معالجة الثغرات بحسب تصنيفها | فجوة | عدد ثغرات CRITICAL التي لها إصلاح متاح: 9 |
| 2-3-3-3 | إدارة حزم التحديثات Patch Management | فجوة | عدد الثغرات التي لها تحديث متاح ولم يطبق: 249؛ lab-nca-app: Lynis PKGS-7392 |
| 2-3-3-1 | الحماية من البرمجيات الضارة Malware | فجوة | lab-nca-app: Lynis HRDN-7230 |
| 2-3-3-2 | تقييد وسائط التخزين الخارجية | فجوة | lab-nca-app: Lynis USB-1000؛ lab-nca-app: Lynis STRG-1846 |
| 2-3-3-4 | مزامنة التوقيت مركزياً | لا يوجد دليل | لا يوجد |
| 2-12-3-1 | تفعيل سجلات الأحداث للأصول الحساسة | فجوة | lab-nca-app: Lynis LOGG-2130؛ lab-nca-app: Lynis LOGG-2138 |
| 1-6-2-2 | مراجعة الإعدادات والتحصين Hardening | جزئي | lab-nca-app: مؤشر التحصين في Lynis = 60، و34 ملاحظة |

## قائمة الفجوات (13)
- [2-10-3-3] lab-nca-web: CVE-2024-45491 في الحزمة libexpat1 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2024-45492 في الحزمة libexpat1 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2026-33845 في الحزمة libgnutls30 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2026-42010 في الحزمة libgnutls30 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2024-37371 في الحزمة libgssapi-krb5-2 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] *: و4 ثغرات CRITICAL أخرى لها إصلاح متاح
- [2-3-3-2] lab-nca-app: USB-1000: Disable drivers like USB storage when not used, to prevent unauthorized storage or data theft
- [2-3-3-2] lab-nca-app: STRG-1846: Disable drivers like firewire storage when not used, to prevent unauthorized storage or data theft
- [2-3-3-3] lab-nca-app: PKGS-7392: Found one or more vulnerable packages.
- [2-3-3-3] lab-nca-app: PKGS-7392: Update your system with apt-get update, apt-get upgrade, apt-get dist-upgrade and/or unattended-upgrades
- [2-12-3-1] lab-nca-app: LOGG-2130: Check if any syslog daemon is running and correctly configured.
- [2-12-3-1] lab-nca-app: LOGG-2138: klogd is not running, which could lead to missing kernel messages in log files
- [2-3-3-1] lab-nca-app: HRDN-7230: Harden the system by installing at least one malware scanner, to perform periodic file system scans
```

وفي التقرير أعلاه لاحظ التالي:

- Trivy وجد في nginx:1.24.0 سبع عشرة ثغرة CRITICAL، منها تسع لها إصلاح متاح، فصار الضابط 2-10-3-3 فجوة، وهذا الفرق بين «ثغرة» و«ثغرة لها إصلاح لم يطبق» هو ما يهم المدقق في المعالجة.
- الضابط 2-10-3-2 «مطبق» لأن كل ثغرة لها تصنيف خطورة، وهذا صحيح تقنياً، ولكن الدليل الكامل لهذا الضابط يحتاج أيضاً منهجية التصنيف المعتمدة في الجهة، وهي وثيقة لا يولدها أي فحص.
- الضابط 2-3-3-4 الخاص بمزامنة التوقيت «لا يوجد دليل»، لأن Lynis داخل Container لم يجر اختبارات التوقيت أصلاً، والتقرير الصادق يقول ذلك بدلاً من أن يعده مطبقاً لأنه لا توجد ملاحظة.
- السطر الأهم هو 2-10-3-1: «التغطية: 2 من 2 أصول (100%)» و«مطبق»، ولاحظ السطر الثالث في أعلى التقرير: «مصدر قائمة الأصول: السجل فقط».

## اكسره: أصل غير موجود في السجل

في كل جهة يوجد سيرفر أضافه أحدهم «مؤقتاً» قبل سنة، ولم يكتبه في السجل. نفعل الشيء نفسه هنا، فنشغل Container ثالثاً باسم lab-nca-cache في بيئة الإنتاج نفسها، ثم نشغل التقرير مرة أخرى دون أي تغيير:

```bash
docker run -d --name lab-nca-cache --label lab-nca.env=prod redis:7.2.16
docker run --rm --name lab-nca-mapper -v "$LAB":/lab:ro -v "$OUT":/out \
  python:3.13.16-slim python /lab/mapper.py --inventory /lab/assets.csv --scans /out
```

والتقرير يعطيك السطور نفسها حرفياً: «2 من 2 أصول (100%)»، والضابط 2-1-2 «مطبق»، بينما يعمل في الإنتاج أصل ثالث لم يفحص أحد ثغراته ولا يعرف أحد مالكه، والسبب أن الكود لا يعرف من العالم إلا ما في السجل. والصورة التالية تبين الفرق:

![لوحتان متقابلتان: في اليمين باللون الأخضر ما يقوله سجل الأصول، سيرفران مفحوصان وبطاقة ثالثة باهتة لا يعرف عنها شيئاً، ومؤشر تغطية 100%، والضابطان 2-1-2 و2-10-3-1 مطبقان، وفي اليسار باللون الأحمر ما يعمل فعلاً في الإنتاج، السيرفران نفسهما والسيرفر lab-nca-cache بإطار أحمر متقطع خارج السجل وغير مفحوص، ومؤشر تغطية 67%، والضابطان فجوة](https://arabroot.io/content/images/2026/10/nca-startup-ideas-03-false-coverage.webp)

التقرير صادق في حساباته، ولكنه يحسب على عالم ناقص

والإصلاح هو الخطوة الثانية في المخطط: مصدر اكتشاف مستقل عن السجل. وفي المختبر نأخذ قائمة ما يعمل من Docker بالـ Label الذي يميز بيئة الإنتاج، ونعطيها للكود:

```bash
docker ps --filter label=lab-nca.env=prod --format '{{.Names}}' > "$OUT/discovered.txt"
cat "$OUT/discovered.txt"
docker run --rm --name lab-nca-mapper -v "$LAB":/lab:ro -v "$OUT":/out \
  python:3.13.16-slim python /lab/mapper.py --inventory /lab/assets.csv --scans /out \
  --discovered /out/discovered.txt
```

والمخرج سوف يكون كما يلي:

```markdown
lab-nca-cache
lab-nca-app
lab-nca-web

# تقرير أدلة الضوابط الأساسية ECC-2:2024 (مثال تعليمي)
تاريخ التوليد: 2026-10-12 16:19 UTC
مصدر قائمة الأصول: السجل + الاكتشاف من بيئة التشغيل

| الضابط | الوصف | الحالة | الدليل |
|---|---|---|---|
| 2-1-2 | تطبيق متطلبات إدارة الأصول (سجل محدث بالأصول) | فجوة | 2 أصول في السجل، و3 أصول معروفة من المصدر: السجل + الاكتشاف من بيئة التشغيل |
| 2-1-5 | تصنيف الأصول | فجوة | restricted=1، secret=1 |
| 2-10-3-1 | فحص الثغرات واكتشافها دورياً | فجوة | التغطية: 2 من 3 أصول (67%)؛ lab-nca-app: فحص Trivy لـ python:3.13.16-slim بتاريخ 2026-10-12؛ lab-nca-web: فحص Trivy لـ nginx:1.24.0 بتاريخ 2026-10-12 |
| 2-10-3-2 | تصنيف الثغرات بحسب خطورتها | مطبق | lab-nca-app: HIGH=48، MEDIUM=60، LOW=61، UNKNOWN=3؛ lab-nca-web: CRITICAL=17، HIGH=175، MEDIUM=300، LOW=238، UNKNOWN=17 |
| 2-10-3-3 | معالجة الثغرات بحسب تصنيفها | فجوة | عدد ثغرات CRITICAL التي لها إصلاح متاح: 9 |
| 2-3-3-3 | إدارة حزم التحديثات Patch Management | فجوة | عدد الثغرات التي لها تحديث متاح ولم يطبق: 249؛ lab-nca-app: Lynis PKGS-7392 |
| 2-3-3-1 | الحماية من البرمجيات الضارة Malware | فجوة | lab-nca-app: Lynis HRDN-7230 |
| 2-3-3-2 | تقييد وسائط التخزين الخارجية | فجوة | lab-nca-app: Lynis USB-1000؛ lab-nca-app: Lynis STRG-1846 |
| 2-3-3-4 | مزامنة التوقيت مركزياً | لا يوجد دليل | لا يوجد |
| 2-12-3-1 | تفعيل سجلات الأحداث للأصول الحساسة | فجوة | lab-nca-app: Lynis LOGG-2130؛ lab-nca-app: Lynis LOGG-2138 |
| 1-6-2-2 | مراجعة الإعدادات والتحصين Hardening | جزئي | lab-nca-app: مؤشر التحصين في Lynis = 60، و34 ملاحظة |

## قائمة الفجوات (16)
- [2-1-2] lab-nca-cache: أصل يعمل في بيئة الإنتاج وغير موجود في سجل الأصول
- [2-1-5] lab-nca-cache: لا يوجد له مالك ولا تصنيف لأنه خارج السجل
- [2-10-3-1] lab-nca-cache: لا يوجد تقرير فحص ثغرات لهذا الأصل
- [2-10-3-3] lab-nca-web: CVE-2024-45491 في الحزمة libexpat1 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2024-45492 في الحزمة libexpat1 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2026-33845 في الحزمة libgnutls30 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2026-42010 في الحزمة libgnutls30 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] lab-nca-web: CVE-2024-37371 في الحزمة libgssapi-krb5-2 خطورتها CRITICAL ولها إصلاح متاح
- [2-10-3-3] *: و4 ثغرات CRITICAL أخرى لها إصلاح متاح
- [2-3-3-2] lab-nca-app: USB-1000: Disable drivers like USB storage when not used, to prevent unauthorized storage or data theft
- [2-3-3-2] lab-nca-app: STRG-1846: Disable drivers like firewire storage when not used, to prevent unauthorized storage or data theft
- [2-3-3-3] lab-nca-app: PKGS-7392: Found one or more vulnerable packages.
- [2-3-3-3] lab-nca-app: PKGS-7392: Update your system with apt-get update, apt-get upgrade, apt-get dist-upgrade and/or unattended-upgrades
- [2-12-3-1] lab-nca-app: LOGG-2130: Check if any syslog daemon is running and correctly configured.
- [2-12-3-1] lab-nca-app: LOGG-2138: klogd is not running, which could lead to missing kernel messages in log files
- [2-3-3-1] lab-nca-app: HRDN-7230: Harden the system by installing at least one malware scanner, to perform periodic file system scans
```

وفي المخرج أعلاه لاحظ التالي:

- التغطية نزلت إلى «2 من 3 أصول (67%)»، والضوابط 2-1-2 و2-1-5 و2-10-3-1 صارت فجوات، وأول ثلاثة أسطر في قائمة الفجوات كلها عن الأصل نفسه.
- لم يتغير شيء في السيرفرين الأولين ولا في نتائج فحصهما، فالذي تغير هو تعريف «كل الأصول» فقط.
- مصدر الاكتشاف نفسه يمكن أن يكون ناقصاً، فنحن سألنا Docker عن Label محدد، والأصل الذي لا يحمل الـ Label لن يظهر، ولهذا يجمع المنتج الحقيقي عدة مصادر: السحابة والشبكة والهوية والوكلاء على الأجهزة.

والدرس الذي يخص من يبني المنتج: لا تعرض نسبة تغطية دون أن تذكر مصدرها، والأفضل أن يرفض المنتج حساب النسبة أصلاً إذا لم يكن لديه مصدر اكتشاف، لأن رقم 100% من السجل وحده يعطي الإدارة ثقة لا أساس لها، وهو أخطر من غياب الرقم.

وفي النهاية نحذف ما أنشأه المختبر بالاسم فقط، دون أي أمر prune:

```bash
docker rm -f lab-nca-web lab-nca-app lab-nca-cache
docker volume rm lab-nca-trivy-cache
docker rmi nginx:1.24.0 aquasec/trivy:0.75.0
```

## ما الذي ينقص المختبر ليصبح منتجاً؟

المختبر يبين الفكرة، ولكن المسافة بينه وبين منتج يقبله مقيم كبيرة، وأهم ما ينقصه:

- **سلامة الدليل:** كل ملف نتيجة يحتاج بصمة Hash ووقتاً ومصدراً، ويحفظ في مخزن لا يقبل التعديل، والفكرة نفسها شرحناها للسجلات في [سجل التدقيق Audit Trail](https://arabroot.io/articles/%D8%B3%D8%AC%D9%84-%D8%A7%D9%84%D8%AA%D8%AF%D9%82%D9%8A%D9%82-audit-trail-%D9%85%D9%86-%D9%81%D8%B9%D9%84-%D9%85%D8%A7%D8%B0%D8%A7-%D9%88%D9%85%D8%AA%D9%89/).
- **قيم السياسة من العميل:** عمر الفحص المقبول ومهلة المعالجة والمجموعات المنطبقة على كل أصل تأتي من معايير الجهة وسجلها، وليس من ثوابت في الكود.
- **مكتبة ضوابط لكل مجموعة:** القاعدة نفسها، مثل تغطية الفحص، تقابل ECC 2-10-3-1 وNCNICC 2-10-1-2 وCSCC 2-9-2 بمدد مختلفة، فالمكتبة يجب أن تكون بيانات تحدث مع كل إصدار، وليست كوداً.
- **الوثائق التي لا تولدها الأنظمة:** الضابط الأول في كل مكون وثيقة معتمدة والأخير مراجعة دورية، فالمنتج يحتاج مكاناً لرفعها وربطها، وإلا بقي يغطي نصف الضابط.
- **تصدير بصيغة الهيئة:** أداة تقييم DCC المنشورة بصيغة Excel فيها أعمدة مستوى الالتزام والملاحظات وإجراءات التصحيح وتاريخ الالتزام المتوقع، والتصدير بالشكل نفسه يوفر على العميل نسخاً يدوياً.

## أخطاء شائعة عند البناء على الضوابط

- **بيع «الالتزام» بدل بيع الأدلة:** لا يستطيع منتج أن يجعل جهة ملتزمة، فالضوابط فيها قرارات إدارية ووثائق معتمدة، وما تبيعه هو توفير الوقت في جمع الأدلة وتتبع الفجوات.
- **بناء مكتبة الضوابط من النسخة الإنجليزية وحدها:** النص العربي هو المرجع، وبعض الوثائق مثل NCNICC منشورة بالعربية فقط.
- **نسيان أنك قد تصبح مقدم خدمة سحابية:** المنتج المستضاف الذي يحفظ أدلة جهة حكومية يدخلك في ضوابط CCC للمقدم، وخطط لذلك قبل أول عقد.
- **الوثوق بغياب الملاحظة:** كما رأينا في سطر التوقيت، الأداة التي لم تفحص شيئاً لا تعطيك دليلاً على أنه سليم.
- **حساب التغطية على السجل:** هذا هو درس المختبر كله.

## الخلاصة

وصلنا لنهاية الموضوع، وأهم ما فيه:

- الفرصة في الضوابط هي الالتزام الذي يتكرر بمدة محددة ويولد دليلاً من الأنظمة، ويتداخل بين أكثر من مجموعة على الأصل نفسه.
- قبل البناء اعرف البوابات: التسجيل لدى الهيئة لكل مقدم حلول وخدمات أمن سيبراني، وترخيص مراكز العمليات المدارة بفئتين، وضوابط مقدم الخدمة السحابية إذا استضفت بيانات جهات في النطاق.
- الأفكار الاثنتا عشرة تبدأ كلها من التزامات بأرقامها، وأكثرها أساسية جرد الأصول واكتشافها وأدلة الامتثال المستمرة، لأن بقية الأفكار تقوم عليهما.
- المختبر حول سجلاً ونتائج Trivy وLynis إلى تقرير عربي بأحد عشر ضابطاً من ECC وقائمة فجوات، بأقل من مئتي سطر من Python.
- أصل واحد خارج السجل جعل التقرير يقول 100% بدلاً من 67%، فلا تحسب تغطية دون مصدر اكتشاف مستقل، واذكر المصدر بجانب كل نسبة.

[![](https://arabroot.io/content/images/2026/10/nca-controls-family-cover-cover.webp)دليلضوابط الهيئة الوطنية للأمن السيبراني: أيها ينطبق عليك؟أي ضوابط الهيئة الوطنية للأمن السيبراني تنطبق على جهتك، وما الذي تضيفه كل مجموعة متخصصة فوق الضوابط الأساسية.](https://arabroot.io/articles/%D8%B6%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D9%87%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D9%88%D8%B7%D9%86%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D8%A7%D9%8A%D9%87%D8%A7-%D9%8A%D9%86%D8%B7%D8%A8%D9%82-%D8%B9%D9%84%D9%8A%D9%83/)[![](https://arabroot.io/content/images/2026/10/nca-ecc-cover-cover.webp)دليلالضوابط الأساسية للأمن السيبراني NCA ECC بلغة بسيطةكيف تقرأ الضوابط الأساسية ECC دون أن تضيع في أرقامها، وعلى من تنطبق، وما المطلوب من جهتك فعلاً في كل مكون.](https://arabroot.io/articles/%D8%A7%D9%84%D8%B6%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D8%A7%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-nca-ecc-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%B3%D9%8A%D8%B7%D8%A9/)[![](https://arabroot.io/content/images/2026/10/builder-ideas-cover-cover.webp)دليلماذا تبني؟ 24 فكرة منتج تقني محلي بديل للخدمات الأجنبية في السعودية والخليجأربع وعشرون فكرة لمنتجات تقنية يحتاجها السوق السعودي والخليجي بديلاً عن خدمات أجنبية، لكل فكرة المشكلة ومن يدفع، والأنظمة التي تدفع العميل إلى بديل محلي، والمشاريع مفتوحة المصدر التي تبدأ منها، والمخاطر وحجم السوق من مصادر منشورة فقط.](https://arabroot.io/articles/%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%A8%D9%86%D9%8A-%D8%A7%D9%81%D9%83%D8%A7%D8%B1-%D9%85%D9%86%D8%AA%D8%AC%D8%A7%D8%AA-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D9%85%D8%AD%D9%84%D9%8A%D8%A9-%D9%84%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D9%8A%D8%AC/)[![](https://arabroot.io/content/images/2026/10/container-scanning-cover-cover.webp)دليلفحص ال Docker Images وملفات البنية ككود IaCماذا يرى فاحص الثغرات داخل ال Docker Image وما الذي يفوته، وكيف تختار Base Image أصغر وتجعل الفحص بوابة في خط CI.](https://arabroot.io/articles/%D9%81%D8%AD%D8%B5-%D8%A7%D9%84%D8%AD%D8%A7%D9%88%D9%8A%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D9%83%D9%83%D9%88%D8%AF-%D9%85%D8%B9-trivy/)[![](https://arabroot.io/content/images/2026/10/audit-trail-cover-cover.webp)دليلAudit Trail: كيف تبني سجل تدقيق لا يقبل العبثكيف تصمم سجلاً يجيب عن سؤال من غير هذه الصلاحية ومتى، وتحميه من الحذف والتعديل بعد كتابته.](https://arabroot.io/articles/%D8%B3%D8%AC%D9%84-%D8%A7%D9%84%D8%AA%D8%AF%D9%82%D9%8A%D9%82-audit-trail-%D9%85%D9%86-%D9%81%D8%B9%D9%84-%D9%85%D8%A7%D8%B0%D8%A7-%D9%88%D9%85%D8%AA%D9%89/)

وفي مقالات قادمة بإذن الله ضمن [مرحلة الحوكمة والمخاطر والامتثال GRC](https://arabroot.io/start/#stage-grc) سوف نتحدث عن تحقيق ضوابط ECC بأدوات مفتوحة المصدر، وعن جمع الأدلة تلقائياً من السجلات والتقارير ولقطات الإعدادات.

## سجل التحديثات

- أكتوبر 2026: كتابة المقال من وثائق الهيئة الوطنية للأمن السيبراني (ECC-2:2024 وGECC-2:2026 وNCNICC-1:2025 وCSCC-1:2019 وCCC-2:2024 وDCC-1:2022 وOTCC-1:2022 وTCC-1:2021 وOSMACC-1:2021 وNCS-1:2020) وصفحة التسجيل والترخيص، ومكتبات الأطر في مستودع CISO Assistant، والمواقع الرسمية للشركات المذكورة، وتراخيص المشاريع مفتوحة المصدر من مستودعاتها، مع مختبر بإصدارات Trivy 0.75.0 وLynis 3.1.7 وPython 3.13.16 على Docker Engine 29.8.0.