
أداة مسح ضوئي تعتمد على YAML من سطر الأوامر، تكتشف الخدمات والملفات والمجلدات المكشوفة على نقاط النهاية الويب. مصممة للمطورين لدمج الفحوصات الأمنية في خطوط أنابيب CI/CD بتوقيعات قابلة للتخصيص.

ChopChop هي أداة سطر أوامر لاختبار أمن التطبيقات الديناميكي على تطبيقات الويب، تم كتابتها في البداية بواسطة فريق Michelin CERT.
هدفها هو مسح عدة نقاط نهاية وتحديد تعرض الخدمات/الملفات/المجلدات من خلال جذر الويب.
يتم تعريف الفحوصات/التوقيعات في ملف تكوين (افتراضياً: chopchop.yml)، قابل للتكوين بالكامل، وخاصة من قبل المطورين.

"تشوب تشوب" هي عبارة من أصل كانتوني. تعني "أسرع" وتقترح أن يتم شيء الآن وبدون تأخير.
حاولنا جعل عملية البناء سهلة ونأمل أن تكون بهذه البساطة:
$ go mod download
$ go build .
يجب أن يكون هناك ملف ثنائي gochopchop في المجلد.
بفضل سجل حاويات جيتهاب، نحن قادرون على تزويدك ببعض صور Docker المبنية حديثاً!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
ولكن إذا كنت تفضل، يمكنك أيضًا بناؤه محليًا، انظر أدناه:
docker build -t gochopchop .
نحن نحاول باستمرار جعل goChopChop سهلاً قدر الإمكان. مسح مضيف بهذه الأداة بسيط كما يلي:
$ ./gochopchop scan https://foobar.com
docker run gochopchop scan https://foobar.com
docker run -v ./:/app chopchop scan -c /app/chopchop.yml https://foobar.com
تمت إعادة الكتابة بلغة Golang قبل بضعة أشهر ولكن لا يزال هناك الكثير لفعله. فيما يلي بعض الميزات التي نخطط لإضافتها: [x] معالجة متعددة الخيوط لأداء أفضل [x] القدرة على تحديد عدد الخيوط المتزامنة [x] ألوان وتنسيق أفضل [x] القدرة على تصفية الفحوصات/التوقيعات للبحث عنها [x] نماذج واختبارات وحدات [x] تكامل مستمر لجيتهاب والمزيد!
لاختبار ChopChop من البداية إلى النهاية بسرعة، قمنا بتوفير خادم ويب في tests/server.go. لتجربته، يرجى تشغيل go run tests/server.go ثم تشغيل chopchop بالأمر التالي ./gochopchop scan http://localhost:8000 --verbosity Debug. يجب أن يطبع ChopChop "لم يتم العثور على ثغرات أمنية".
هناك أيضًا اختبارات وحدات يمكنك تشغيلها باستخدام go test -v ./.... هذه الاختبارات مدمجة في سير عمل التكامل المستمر لجيتهاب.
يمكنك العثور على الخيارات المتاحة لأمر scan:
| العلامة | العلامة الكاملة | الوصف |
|---|---|---|
-h | --help | دليل المساعدة |
-v | --verbosity | مستوى تفصيل التسجيل |
-c | --signature | مسار ملف التوقيع المخصص |
-k | --insecure | تعطيل التحقق من SSL |
-u | --url-file | مسار ملف محدد يحتوي على عناوين URL للاختبار |
-b | --max-severity | حظر خط أنابيب CI إذا كانت الشدة أعلى أو تساوي العلامة المحددة |
-e | --export | نوع تصدير المخرجات (csv و/أو json) |
--export-filename | تحديد اسم الملف لملف (ملفات) التصدير | |
-t | --timeout | مهلة لطلبات HTTP |
--severity-filter | تصفية الإضافات حسب الشدة | |
--plugin-filter | تصفية الإضافات حسب اسم الإضافة | |
--threads | عدد الخيوط المتزامنة |
فيما يلي قائمة بالاستخدامات المتقدمة التي قد تهمك. ملاحظة: يمكن استخدام مُعِيدات التوجيه مثل > للمعالجة اللاحقة.
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins أو plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 لـ 4 عمال$ ./gochopchop plugins --threads 4
--max-severity Medium$ ./gochopchop scan https://foobar.com --max-severity Medium
./gochopchop scan https://foobar.com --timeout 1 --verbosity --export=csv,json --export-filename boo --plugin-filters=Git,Zimbra,Jenkins
$ ./gochopchop plugins
$ ./gochopchop plugins --severity High
$ ./gochopchop scan --url-file url_file.txt
$ ./gochopchop scan https://foobar.com --export=csv,json --export-filename results
كتابة فحص جديد بسيط مثل:
- endpoint: "/.git/config"
checks:
- name: Git exposed
match:
- "[branch"
remediation: Do not deploy .git folder on production servers
description: Verifies that the GIT repository is accessible from the site
severity: "High"
يتم تعيين نقطة نهاية (مثل /.git/config) إلى فحوصات متعددة مما يتجنب إرسال X طلب لـ X فحص. يمكن إجراء فحوصات متعددة من خلال طلب HTTP واحد.
كل فحص يحتاج إلى هذه الحقول:
| السمة | النوع | الوصف | اختياري؟ | مثال |
|---|---|---|---|---|
| name | string | اسم الفحص | لا | Git exposed |
| description | string | وصف صغير للفحص | لا | Ensure .git repository is not accessible from the webroot |
| remediation | string | إعطاء إجراء علاجي لهذه "المشكلة" المحددة | لا | Do not deploy .git folder on production servers |
| severity | Enum("High", "Medium", "Low", "Informational") | تقييم الأهمية إذا تم تفعيله في بيئتك | لا | High |
| status_code | integer | رمز حالة HTTP الذي يجب إرجاعه | نعم | 200 |
| headers | List of string | قائمة الرؤوس التي يجب أن تكون في استجابة HTTP | نعم | N/A |
| no_headers | List of string | قائمة الرؤوس التي يجب ألا تكون في استجابة HTTP | نعم | N/A |
| match | List of string | قائمة السلاسل النصية التي يجب أن تكون في استجابة HTTP | نعم | "[branch" |
| no_match | List of string | قائمة السلاسل النصية التي يجب ألا تكون في استجابة HTTP | نعم | N/A |
| query_string | معاملات GET التي يجب تمريرها إلى نقطة النهاية | String | نعم | query_string: "id=FOO-chopchoptest" |
| اسم المكتبة | الرابط | الترخيص |
|---|---|---|
| Viper | https://github.com/spf13/viper | MIT License |
| Go-pretty | https://github.com/jedib0t/go-pretty | MIT License |
| Cobra | https://github.com/spf13/cobra | Apache License 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Apache License 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | MIT License |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (Simplified License) |
| Go-runewidth | https://github.com/mattn/go-runewidth | MIT License |
يرجى الرجوع إلى ملف third-party.txt لمزيد من المعلومات.
تم إصدار ChopChop بموجب ترخيص Apache 2.0.
يرجى الرجوع إلى ملف LICENSE لمزيد من المعلومات.