للحصول على إصدار "رسمي" من هذا التطبيق مع عمليات تكامل إضافية لخطوط الأنابيب، يرجى زيارة https://github.com/fortify/IWA-Java.
IWA (تطبيق الويب غير الآمن) Pharmacy Direct هو مثال لتطبيق Java/Spring Web للاستخدام في سيناريوهات DevSecOps والعروض التوضيحية. ويتضمن بعض الأمثلة على التعليمات البرمجية السيئة وغير الآمنة - والتي يمكن العثور عليها باستخدام أدوات اختبار أمان التطبيقات الثابتة والديناميكية مثل تلك التي توفرها Micro Focus Fortify.
أحد الأهداف الرئيسية لهذا المشروع هو توضيح كيف يمكن دمج الأمان مبكرًا ("Shift-Left") وبشكل مستمر ("CI/CD") في دورة حياة التطوير. لذلك، تم تقديم عدد من الأمثلة على "التكاملات" لأدوات خطوط أنابيب CI/CD الشائعة.
يهدف التطبيق إلى توفير وظائف "صيدلية الإنترنت" النموذجية، بما في ذلك شراء المنتجات (الأدوية) وطلب الخدمات (الوصفات الطبية والفحوصات الصحية وما إلى ذلك). يحتوي على واجهة أمامية HTML حديثة (مع بعض JavaScript) وواجهة برمجة التطبيقات المستندة إلى Swagger.
يرجى ملاحظة: لا ينبغي استخدام التطبيق في بيئة الإنتاج!
يمكن العثور على نسخة محدثة من التطبيق قيد التشغيل على https://iwa.onfortify.com.
من أجل تنفيذ أمثلة للسيناريوهات بنفسك، يوصى بأن تقوم "بتقسيم" نسخة من هذا المستودع إلى حساب GitHub الخاص بك. تم وصف عملية "التفرع" بالتفصيل في وثائق GitHub - يمكنك بدء العملية بالنقر فوق الزر "Fork" في أعلى اليمين.
من أجل إنشاء التطبيق وتشغيله بنجاح، ستحتاج إلى تثبيت Java JDK 11 وعلى المسار الخاص بك.
لإنشاء التطبيق باستخدام Gradle، قم بتنفيذ ما يلي من سطر الأوامر:
.gradlew clean build
هناك عدد من الطرق لتشغيل التطبيق اعتمادًا على السيناريو (السيناريوهات) التي ترغب في تنفيذها.
للتشغيل (والاختبار) محليًا في وضع التطوير، قم بتنفيذ ما يلي من سطر الأوامر:
.gradlew bootRun
ثم انتقل إلى عنوان URL: http://localhost:8888. يمكنك القيام بعدد من الإجراءات غير المصادق عليها، لكن إذا أردت تسجيل الدخول يمكنك القيام بذلك كما يلي:
يوجد أيضًا مستخدم إداري:
لاحظ أنه إذا قمت بتسجيل الدخول باستخدام user2
، فسوف يُطلب منك لاحقًا رمز المصادقة متعددة العوامل (MFA). يمكنك العثور على هذا الرمز عن طريق فحص إخراج وحدة التحكم.
إذا كنت ترغب في استخدام خادم بريد إلكتروني للتطوير، فإنني أوصي باستخدام (smtp4dev)[https://github.com/rnwood/smtp4dev.git]. الطريقة الأسهل هي تشغيلها كحاوية إرساء:
docker run --rm -it -p 5000:80 -p 2525:25 rnwood/smtp4dev
قم بإزالة --rm -it
إذا كنت تريد ترك smtp4dev قيد التشغيل في الخلفية، وإلا فسيتم تشغيله حتى تضغط على CTRL + C.
تم بالفعل تكوين الملف (application-dev.yml)[./src/main/resources/application-dev.yml] مسبقًا لاستخدام هذا التكوين. استعرض للوصول إلى http://localhost:5000
لرؤية رسائل البريد الإلكتروني.
يمكن إنشاء ملف JAR في صورة Docker باستخدام Dockerfile
المتوفر والأوامر التالية:
docker build - t iwa -f Dockerfile .
أو على نظام التشغيل Windows:
docker build - t iwa -f Dockerfile.win .
ويمكن بعد ذلك تنفيذ هذه الصورة باستخدام الأوامر التالية:
docker run - d - p 8888 : 8888 iwa
يوجد أيضًا مثال لملف docker-compose.yml
يوضح كيفية تشغيل التطبيق باستخدام HTTPS/SSL باستخدام nginx وcertbot - يرجى ملاحظة أن هذا كمرجع فقط لأنه يستخدم اسم مجال "مشفر بشكل ثابت".
تحتاج معظم الأمثلة التالية إلى بيانات اعتماد خاصة بالبيئة والمستخدم. يتم تحميلها من ملف يسمى .env
في الدليل الجذر للمشروع. لا يتم إنشاء هذا الملف افتراضيًا (ويجب عدم تخزينه مطلقًا في التحكم بالمصادر). يتم توضيح مثال يحتوي على كافة الإعدادات الممكنة للسيناريوهات التالية أدناه:
# Application URL (locally)
APP_URL=http://localhost:8888
# Software Security Center
SSC_URL=http://[YOUR-SSC-SERVER]
SSC_USERNAME=admin
SSC_PASSWORD=password
SSC_AUTH_TOKEN=XXX
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
# ScanCentral SAST/DAST
SCANCENTRAL_CTRL_URL=http://[YOUR-SCANCENTRAL-SERVER]/scancentral-ctrl
SCANCENTRAL_CTRL_TOKEN=XXX
SCANCENTRAL_POOL_ID=00000000-0000-0000-0000-000000000002
[email protected]
SCANCENTRAL_DAST_API=http://[YOUR-SCANCENTRAL-DAST-SERVER]/api/
# ScanCentral FAST
FAST_EXE=C:\Program Files\Micro Focus WIRC Server\Fast.exe
FAST_PORT=8087
FAST_PROXY=127.0.0.1:8087
# Fortify on Demand
FOD_API_URL=https://api.ams.fortify.com
FOD_API_KEY=XXXX
FOD_API_SECRET=YYYY
FOD_TENANT=[YOUR-TENANT]
FOD_USER=[YOUR-USERNAME]
FOD_PAT=XXXX
يوجد مثال لبرنامج PowerShell النصي fortify-sast.ps1 الذي يمكنك استخدامه لتنفيذ اختبار أمان التطبيق الثابت عبر Fortify SCA.
.binfortify - sast.ps1 - SkipSSC
يقوم هذا البرنامج النصي بتشغيل ترجمة sourceanalyzer
ومسح الكود المصدري للمشروع. يقوم بإنشاء ملف Fortify Project Results يسمى IWA-Java.fpr
والذي يمكنك فتحه باستخدام أداة Fortify auditworkbench
:
auditworkbench.cmd .IWA - Java.fpr
كما يقوم أيضًا بإنشاء تقرير PDF يسمى IWA-Java.pdf
ويقوم بتحميل النتائج بشكل اختياري إلى Fortify Software Security Center (SSC).
لكي تتمكن من التحميل إلى SSC، ستحتاج إلى إدخالات في ملف .env
مشابهة لما يلي:
SSC_URL=http://localhost:8080/ssc
SSC_AUTH_TOKEN=28145aad-c40d-426d-942b-f6d6aec9c56f
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
يجب تعيين إدخال SSC_AUTH_TOKEN
على قيمة "CIToken" التي تم إنشاؤها في SSC "Administration->Token Management" .
يوجد برنامج PowerShell النصي fortify-scancentral-sast.ps1 الذي يمكنك استخدامه لحزم المشروع وبدء الفحص عن بعد باستخدام Fortify ScanCentral SAST:
.binfortify - scancentral - sast.ps1
لاستخدام ScanCentral SAST، ستحتاج إلى إدخالات في ملف .env
مشابهة لما يلي:
SSC_URL=http://localhost:8080/ssc
SSC_AUTH_TOKEN=6b16aa46-35d7-4ea6-98c1-8b780851fb37
SSC_APP_NAME=IWA-Java
SSC_APP_VER_NAME=main
SCANCENTRAL_CTRL_URL=http://localhost:8080/scancentral-ctrl
SCANCENTRAL_CTRL_TOKEN=96846342-1349-4e36-b94f-11ed96b9a1e3
SCANCENTRAL_POOL_ID=00000000-0000-0000-0000-000000000002
[email protected]
يجب تعيين إدخال SSC_AUTH_TOKEN
على قيمة "CIToken" التي تم إنشاؤها في SSC "Administration->Token Management" .
لتنفيذ فحص Fortify on Demand SAST، يتعين عليك حزم التعليمات البرمجية المصدر وتحميلها إلى Fortify on Demand. لحزم التعليمات البرمجية في ملف مضغوط للتحميل، يمكنك استخدام الأداة المساعدة للأوامر scancentral
على النحو التالي:
scancentral package - bt gradle - bf build.gradle - bt " clean build -x test " -- output fod.zip
يمكنك بعد ذلك تحميل هذا يدويًا باستخدام Fortify on Demand UI، باستخدام الأداة المساعدة FoDUploader أو عبر Fortify CLI باستخدام الأوامر التالية:
fcli fod session login --url http://api.ams.fortify.com -t YOUR_FOD_TENANT -u YOUR_USERNAME -p YOUR_PASSWORD
fcli fod sast-scan start --release YOUR_APP:YOUR_RELEASE -f fod.zip --store curScan
fcli fod sast-scan wait-for ::curScan::
لإجراء فحص WebInspect، يجب عليك أولاً "تشغيل" التطبيق باستخدام إحدى الخطوات الموضحة أعلاه. ثم يمكنك بدء الفحص باستخدام سطر الأوامر التالي:
" C:Program FilesFortifyFortify WebInspectWI.exe " - s " .etcIWA-UI-Dev-Settings.xml " - macro " .etcIWA-UI-Dev-Login.webmacro " - u " http://localhost:8888 " - ep " .IWA-DAST.fpr " - ps 1008
سيؤدي هذا إلى بدء الفحص باستخدام الإعدادات الافتراضية وملفات تسجيل الدخول الماكرو المتوفرة في الدليل etc
. يفترض أن التطبيق يعمل على "المضيف المحلي: 8888". سيتم إجراء فحص "حرج وذو أولوية عالية" باستخدام السياسة ذات المعرف 1008. بمجرد الانتهاء، يمكنك فتح WebInspect "Desktop Client" والانتقال إلى الفحص الذي تم إنشاؤه لهذا التنفيذ. سيكون ملف FPR المسمى IWA-DAST.fpr
متاحًا أيضًا - يمكنك فتحه باستخدام auditworkbench
(أو إنشاء تقرير PDF باستخدام ReportGenerator
). يمكنك أيضًا تحميله إلى Fortify SSC أو Fortify on Demand.
يوجد مثال لملف البرنامج النصي PowerShell fortify-webinspect.ps1 الذي يمكنك تشغيله لتنفيذ الفحص وتحميل النتائج إلى SSC:
.binfortify - webinspect.ps1
يمكنك استدعاء الفحص الديناميكي Fortify on Demand باستخدام الأداة المساعدة FCLI. على سبيل المثال:
fcli sc-dast session login --ssc-url http://YOUR_SSC.DOMAIN -t YOUR_SSC_CI_TOKEN
fcli sc-dast scan -n "IWA-Java - FCLI" -s YOUR_SCAN_SETTINGS_ID --store curScan
fcli sc-dast scan wait-for ::curScan::
يوفر Fortify on Demands وسيلتين لإجراء مسح DAST: DAST التقليدي و DAST الآلي . في هذا القسم سوف نستخدم DAST Automated لأنه أكثر ملاءمة لتكامل الأوامر وخطوط الأنابيب.
يمكنك استدعاء Fortify on Demand DAST Automated scan باستخدام الأداة المساعدة FCLI. على سبيل المثال:
fcli fod session login --url http://api.ams.fortify.com -t YOUR_FOD_TENANT -u YOUR_USERNAME -p YOUR_PASSWORD
fcli fod dast-scan start --release YOUR_APP:YOUR_RELEASE --store curScan
fcli fod dast-scan wait-for ::curScan::
سيتم تحديده لاحقًا: كيفية تحميل وحدات ماكرو تسجيل الدخول و/أو سير العمل.
يشتمل تطبيق IWA على واجهة برمجة تطبيقات موثقة بالكامل تعتمد على Swagger والتي يمكنك تصفحها على http://localhost:8888/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config. يمكنك إجراء اختبار الأمان لواجهة برمجة التطبيقات (API) هذه باستخدام Fortify WebInspect أو ScanCentral DAST. يتم توفير مجموعة ساعي البريد للمساعدة في هذا. يمكنك ممارسة المجموعة باستخدام نيومان. على سبيل المثال من موجه أوامر PowerShell على نظام التشغيل Windows:
newman run .etcIWA - API - Dev - Auth.postman_collection.json -- environment .etcIWA - API - Dev.postman_environment.json -- export-environment .etcIWA - API - Dev.postman_environment.json
newman run .etcIWA - API - Dev - Workflow.postman_collection.json -- environment .etcIWA - API - Dev.postman_environment.json
من أجل استخدام هذه المجموعة مع WebInspect، ستحتاج إلى التأكد من أن نيومان على المسار ومن ثم يمكنك تشغيل:
& " C:Program FilesFortifyFortify WebInspectWI.exe " - pwc .etcIWA - API - Workflow.postman_collection.json - pec .etcIWA - API - Dev.postman_environment.json - ep " .IWA-API.fpr "
قم باستيراد مجموعات Postman التالية إلى ScanCentral DAST:
etcIWA-API-Prod.postman_environment.json
- كبيئةetcIWA-API-Auth.postman_collection.json
- كمجموعة مصادقةetcIWA-API-Workflow.postman_collection.json
- كمجموعة سير العملستحتاج بعد ذلك إلى الإعدادات التالية لإنشاء الرمز المميز الديناميكي
رمز الاستجابة:
"accessToken"s*:s*"(?<BearerTokenValue>[-a-zA-Z0-9._~+/]+?=*)"
رمز الطلب:
Authorization:sBearers(?<BearerTokenValue>[^rn]*)r?n
حالة الخروج:
[STATUSCODE]401
يمكن تشغيل الفحص من واجهة مستخدم ScanCentral DAST أو من خلال حفظ الإعدادات واستخدام الأمر fcli sc-dast scan
.
يمكن إجراء فحص واجهة برمجة التطبيقات (API) باستخدام مجموعة Postman "المجمعة" التالية:
etcIWA-API-Prod-Combined.postman_environment.json
يمكن استخدام هذا مع DAST التقليدي أو DAST الآلي .
يتيح لك Fortify FAST Proxy التقاط حركة المرور من التشغيل التجريبي التلقائي ثم استخدام حركة المرور كمسار عمل لتنفيذ ScanCentral DAST. لتنفيذ المثال هنا، ستحتاج إلى تثبيت WebInspect محليًا WIRCServerSetup64-ProxyOnly.msi
المتوفر في Dynamic_Addons.zip
لوسائط تثبيت ScanCentral DAST.
هناك بعض الأمثلة على السيلينيوم التي يمكن استخدامها لتنفيذ اختبار وظيفي بسيط للتطبيق قيد التشغيل. يوجد أيضًا بعض البرامج النصية لـ PowerShell start_fast_proxy.ps1 وstop_fast_proxy.ps1 التي يمكن استخدامها لبدء/إيقاف FAST Proxy. لاستخدام هذه البرامج النصية، ستحتاج إلى إدخالات في ملف .env
مشابهة لما يلي:
APP_URL=http://localhost:8888
SSC_AUTH_TOKEN_BASE64=MmYyMTA5MzYtN2Q5Ny00NmM1LWI5NTUtYThkZWI2YmJlMDUy
SSCANCENTRAL_DAST_API=http://scancentral-dast-api.example.com/api/
SCANCENTRAL_DAST_CICD_IDENTIFIER=c3c3df60-de68-45b8-89c0-4c07b53392e7
FAST_PORT=8087
FAST_PROXY=127.0.0.1:8087
SSC_AUTH_TOKEN_BASE64
هو الرمز المميز (الأول) المشفر الموضح في SSC وليس الرمز المميز (الثاني) الذي تم فك تشفيره. ثم قم بتنفيذ ما يلي من سطر الأوامر:
python -m pip install --upgrade pipenv wheel
pipenv shell
pipenv install --dev
تأكد من تشغيل التطبيق ثم قم بتنفيذ ما يلي في نافذة طرفية:
.binstart_fast_proxy.ps1
ثم في نافذة طرفية أخرى قم بتنفيذ ما يلي:
pytest - v - s
ثم أخيراً:
.binstop_fast_proxy.ps1
يجب أن ينتهي الملف FAST القابل للتنفيذ من الجهاز الطرفي الأول ثم يتم تنفيذ الفحص في بيئة ScanCentral DAST الخاصة بك.
إذا كنت تستخدم Jenkins، فسيتم توفير Jenkinsfile
الشامل لأتمتة جميع الخطوات النموذجية لعملية التسليم المستمر (CD) النموذجية لـ DevSecOps. يستخدم المثال Fortify ScanCentral SAST/DAST وSonatype Nexus IQ لتحليل تكوين البرامج.
للاستفادة من Jenkinsfile
أنشئ وظيفة Jenkins Pipeline Job جديدة وفي قسم Pipeline، حدد Pipeline script from SCM
وأدخل تفاصيل الإصدار المتشعب من مستودع GitHub هذا.
يجب التعامل مع التشغيل الأول للمسار كخطوة "إعداد" لأنه سينشئ بعض معلمات الوظيفة التي يمكنك بعد ذلك تحديدها لتحديد الميزات التي تريد تمكينها في المسار.
سوف تحتاج إلى تثبيت وتكوين المكونات الإضافية لـ Fortify Jenkins.
هناك الكثير من الوثائق في ملف Jenkinsfile
نفسه، لذا يرجى فحصها لمعرفة ما عليك القيام به أيضًا من أجل استدعاء ناجح.
يتضمن هذا المستودع عددًا من أمثلة إجراءات GitHub في مسارات عمل .github/ التي تعمل على أتمتة إنشاء التطبيق ومسح التعليمات البرمجية باستخدام إما Fortify on Demand أو Fortify ScanCentral for SAST.
للتكامل مع أدوات خطوط الأنابيب الأخرى، يرجى الاطلاع على https://github.com/fortify/IWA-Java.
يرجى الاطلاع على دليل المساهمة للحصول على معلومات حول كيفية التطوير والمساهمة.
إذا كانت لديك أية مشكلات، فيرجى الرجوع إلى مشكلات GitHub لمعرفة ما إذا كانت قد تمت مناقشتها بالفعل.
هذا التطبيق متاح بموجب رخصة جنو العامة V3