
خدمة تقوم بفحص Infrastructure as Code الخاص بك بحثًا عن الثغرات الأمنية الشائعة
خدمة تقوم بفحص البنية التحتية كرمز (Infrastructure as Code) لديك بحثًا عن الثغرات الشائعة.
| الجانب | المعلومات |
|---|---|
| اسم الأداة | IaC Scan Runner |
| صورة Docker | xscanner/runner |
| حزمة PyPI | iac-scan-runner |
| التوثيق | docs |
| اتصل بنا | [email protected] |
IaC Scan Runner هي خدمة REST API تُستخدم لفحص حزمة IaC (البنية التحتية كرمز) وإجراء فحوصات متنوعة للكود من أجل العثور على الثغرات والتحسينات المحتملة. استكشف docs لمزيد من المعلومات.
يشرح هذا القسم كيفية تشغيل REST API.
يمكنك تشغيل REST API باستخدام صورة Docker العامة xscanner/runner كما يلي:
# run IaC Scan Runner REST API in a Docker container and
# navigate to localhost:8080/swagger or localhost:8080/redoc
$ docker run --name iac-scan-runner -p 8080:80 xscanner/runner
أو يمكنك بناء الصورة محليًا وتشغيلها كما يلي:
# build Docker container (it will take some time)
$ docker build -t iac-scan-runner .
# run IaC Scan Runner REST API in a Docker container and
# navigate to localhost:8080/swagger or localhost:8080/redoc
$ docker run --name iac-scan-runner -p 8080:80 iac-scan-runner
لتشغيل باستخدام CLI لـ IaC Scan Runner:
# install the CLI
$ python3 -m venv .venv && . .venv/bin/activate
(.venv) $ pip install iac-scan-runner
# print OpenAPI specification
(.venv) $ iac-scan-runner openapi
# install prerequisites
(.venv) $ iac-scan-runner install
# run IaC Scan Runner REST API
(.venv) $ iac-scan-runner run
لتشغيل محليًا من المصدر:
# Export env variables
export MONGODB_CONNECTION_STRING=mongodb://localhost:27017
export SCAN_PERSISTENCE=enabled
export USER_MANAGEMENT=enabled
# Setup MongoDB
$ docker run --name mongodb -p 27017:27017 mongo
# install prerequisites
$ python3 -m venv .venv && . .venv/bin/activate
(.venv) $ pip install -r requirements.txt
(.venv) $ ./install-checks.sh
# run IaC Scan Runner REST API (add --reload flag to apply code changes on the way)
(.venv) $ uvicorn src.iac_scan_runner.api:app
سيعرض هذا الجزء أحد عمليات النشر الممكنة وأمثلة مختصرة حول كيفية استخدام استدعاءات API.
أولاً سنقوم باستنساخ مستودع iac scan runner وتشغيل API.
$ git clone https://github.com/xlab-si/iac-scan-runner.git
$ docker compose up
بعد ذلك، يمكنك استخدام نقاط نهاية API مختلفة عن طريق الاتصال بـ localhost:8000. يمكنك أيضًا الانتقال إلى localhost:8000/swagger أو localhost:8000/redoc واختبار جميع نقاط نهاية API هناك. في هذا المثال، سنستخدم curl لاستدعاء نقاط نهاية API.
curl -X 'POST' \
'http://0.0.0.0/project?creator_id=test' \
-H 'accept: application/json' \
-d ''
سيتم إرجاع معرف المشروع إلينا. في هذا المثال، معرف المشروع هو 1e7b2a91-2896-40fd-8d53-83db56088026.
curl -X 'PUT' \
'http://0.0.0.0:8000/projects/1e7b2a91-2896-40fd-8d53-83db56088026/checks/ansible-lint/disable' \
-H 'accept: application/json'
curl -X 'POST' \
'http://0.0.0.0:8000/projects/1e7b2a91-2896-40fd-8d53-83db56088026/scan?scan_response_type=json' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F '[email protected];type=application/zip'
هذا كل شيء.
في مرحلة معينة، قد يكون من الضروري تضمين أدوات فحص جديدة في سير عمل الفحص، بهدف توفير تغطية أوسع لمعايير IaC وأنواع المشاريع. لذلك، في هذا القسم الفرعي، يتم تحديد ووصف تسلسل الخطوات المطلوبة لهذا الغرض. ومع ذلك، يجب تنفيذ الخطوات يدويًا كما سيتم وصفه، ولكن من المخطط أتمتة هذه العملية في المستقبل عبر API وتوفير واجهة سهلة الاستخدام ستساعد المستخدم أثناء استيراد الأدوات الجديدة التي ستصبح جزءًا من الكتالوج المتاح الذي يشكل سير عمل الفحص. يوضح الشكل 16 الخطوات المطلوبة التي يجب اتخاذها لتوسيع سير عمل الفحص بأداة جديدة.
الخطوة 1 – إضافة فئة خاصة بالأداة إلى دليل الفحوصات
أولاً، من المطلوب إضافة فئة Python جديدة خاصة بالأداة إلى دليل الفحوصات داخل الكود المصدري لـ IaC Scan Runner:
iac-scan-runner/src/iac_scan_runner/checks/new_tool.py
ترث فئة الأداة الجديدة فئة Check الموجودة، والتي توفر تعميمًا لأدوات سير عمل الفحص. علاوة على ذلك، من الضروري توفير تنفيذ للطرق التالية:
الخطوة 2 – إضافة نسخة فئة أداة الفحص داخل مُنشئ ScanRunner بمجرد إضافة الفئة الجديدة المشتقة من Check إلى الكود المصدري لـ IaC Scan Runner، يلزم أيضًا تعديل الكود المصدري للفئة الرئيسية المسماة ScanRunner. فيما يتعلق بتعديلات هذه الفئة، يلزم أولاً استيراد الفئة الخاصة بالأداة، ثم إنشاء نسخة جديدة من الفئة الخاصة بأداة الفحص وإضافتها إلى قاموس فحوصات IaC داخل def init_checks(self). أ. استيراد فئة أداة الفحص from iac_scan_runner.checks.tfsec import TfsecCheck ب. إنشاء نسخة جديدة من كائن أداة الفحص داخل init_checks """Initiate predefined check objects""" new_tool = NewToolCheck() ج. إضافتها إلى قاموس self.iac_checks داخل init_checks
self.iac_checks = {
new_tool.name: new_tool,
…
}
الخطوة 3 – إضافة أداة الفحص إلى مصفوفة التوافق داخل فئة Compatibility على الجانب الآخر، داخل الملف src/iac_scan_runner/compatibility.py، يجب أيضًا توسيع القاموس الذي يمثل مصفوفة التوافق. هناك حالتان محتملتان: أ) يجب إضافة نوع ملف جديد كمفتاح، مع قائمة بالأدوات ذات الصلة كقيمة ب) يجب إضافة أداة جديدة إلى قائمة التوافق لنوع الملف الموجود.
compatibility_matrix = {
"new_type": ["new_tool_1", "new_tool_2"],
…
"old_typeK": ["tool_1", … "tool_N", "new_tool_3"]
}
الخطوة 4 – توفير الدعم لتلخيص النتائج أخيرًا، الخطوة الأخيرة في تسلسل التعديلات المطلوبة لتوسيع سير عمل الفحص هي تعديل فئة ResultsSummary (src/iac_scan_runner/results_summary.py). بالضبط، يلزم إلحاق جزء من الكود بطريقة summarize_outcome الخاصة بها والتي ستبحث عن سلاسل محددة خاصة بالأداة ويمكن استخدامها لتحديد ما إذا كان الفحص قد نجح أو فشل. داخل الحلقة التي تجتاز الفحوصات المتوافقة، لكل أداة جديدة يجب تضمين هيكل if-else التالي:
if check == "new_tool":
if outcome.find("Check pass string") > -1:
self.outcomes[check]["status"] = "Passed"
return "Passed"
else:
self.outcomes[check]["status"] = "Problems"
return "Problems"
هذا العمل مرخص بموجب Apache License 2.0.
يمكنك الاتصال بفريق xOpera عن طريق إرسال بريد إلكتروني إلى [email protected].
تلقى هذا المشروع تمويلاً من برنامج البحث والابتكار Horizon 2020 التابع للاتحاد الأوروبي بموجب اتفاقية المنحة رقم 101000162 (PIACERE).