
يعالج مخرجات SARIF من أدوات التحليل الثابت (Static Analysis) لاكتشاف الأسرار المضمّنة في الكود المصدري وتنقيحها، مما يُنشئ نسخة نظيفة دون الأسرار الأصلية.
سيتولى SecretScrub تنظيف جميع أسرارك الثابتة المكتوبة في الكود. يعالج هذا البرنامج النصي الملفات بصيغة SARIF التي تولّدها أدوات تحليل ثابتة مختلفة. تمسح الأداة دليلًا داخل نظام الملفات، وتنقّي جميع حالات الأسرار المكتشفة داخل ملفات SARIF في نسخة جديدة من الدليل. ولأن الأسرار غالبًا ما تكون موجودة في سجلات Git، فإن دليل .git يُستبعد من النسخة الناتجة.
على الرغم من أن SARIF صيغة معيارية في الصناعة، إلا أن هناك اختلافات في مخرجات SARIF التي تنتجها الأدوات المختلفة. ونتيجة لذلك، فإن الأدوات الوحيدة المدعومة حاليًا هي كما يلي.
| Tool | Version | Comments |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | يعمل فقط مع التقارير المُنشأة باستخدام الخيار --no-git لمسح نظام الملفات دون مستودع Git الأساسي إن وُجد. |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | يجب معالجة مخرجات Ccs مسبقًا إلى صيغة SARIF باستخدام البرنامج النصي المرفق ccs2sarif.py. |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | يجب معالجة مخرجات CQ مسبقًا إلى صيغة SARIF باستخدام البرنامج النصي المرفق cq2sarif.py. ولأن مخرجات CQ قد تكون مشوشة جدًا، يُنصح بتنفيذ عملية التنقية بشكل منفصل أو تسمية الملفات بحيث يظهر ملف CQ أخيرًا في الدليل. |
| BinDetect | أداة مدمجة تكتشف الملفات الثنائية التي عادةً ما تغفل عنها الأدوات الأخرى الموجهة للنصوص. |
بسبب الاختلافات في مخرجات SARIF، من الممكن أن مخرجات الإصدارات المستقبلية من الأداة لن تعمل بشكل صحيح.
التبعيات مذكورة في ملف requirements.txt. باختصار، الحزم التالية مطلوبة:
| Package |
|---|
$ python secretscrub.py --input <path> --srcdir <path> --outdir <path> [--report <path>]
$ python secretscrub.py --analyse-with <analysis-tool-list> --srcdir <path> --outdir <path> [--report <path>]
ملاحظة: لكي تعمل الأداة، يجب أن تكون الأدوات موجودة ومثبتة على النظام الحالي:
صورة Docker المبنية من شجرة المصدر هذه تتضمن أداة SecretScrub ونسخًا من أدوات Trivy وGitLeaks وccs وcq.
إذا تم بناؤها بوسم secretscrub:latest، فإن الأمر التالي سيبدأ تشغيل عملية تحليل وتنقية كاملة مع تقرير مصاحب.
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
لاحظ أن هذا يتضمن ربط مجلدين داخل الحاوية. الأول -- <source-path> -- يجب أن يحتوي على الكود المصدري الأصلي غير المنقّى. الثاني -- <output-path> -- سيتلقى المخرجات والتقرير المنقّيين.
تفترض الأمثلة التالية أن المصدر مخزَّن داخل دليل فرعي باسم src، وأن SecretScrub مثبّت داخل دليل فرعي باسم tools.
$ python tools/secretscrub.py --analse-with trivy,gitleaks,bindetect --srcdir src --outdir src-redacted
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
| Version |
|---|
| asn1 | 2.7.0 |
| filetype | 1.2.0 |
| py7zr | 0.20.5 |
| pyzipper | 0.3.6 |
| regex | 2023.5.5 |
| sarif-tools | 1.0.0 |
| Parameter | Definition |
|---|
| input | موقع نتائج SARIF التي سيتم معالجتها. قد يحتوي على ملفات SARIF متعددة قد تكون مولّدة باستخدام أدوات مدعومة مختلفة. |
| srcdir | موقع الكود المصدري الأصلي الذي تم فحصه لإنتاج نتائج CQ التي سيتم معالجتها. |
| outdir | الموقع الذي سيتم تخزين ملفات المصدر المنقّاة فيه. |
| placeholder | النص البديل الذي سيُدرج بدلاً من جميع الأسرار المكتشفة. يمكنه قبول البدائل التالية: - ${tool} اسم الأداة المستخدمة لاكتشاف السر- ${rule} اسم القاعدة المستخدمة لاكتشاف السر- ${regex} التعبير النمطي المرتبط بالقاعدة المستخدمة لاكتشاف السر- ${yaml} بنية YAML بتنسيق التدفق تحتوي (إن كانت معروفة) على أسماء الأداة والقاعدة المستخدمتين لاكتشاف السر فقط- ${yaml_regex} بنية YAML بتنسيق التدفق تحتوي (إن كانت معروفة) على أسماء الأداة والقاعدة والتعبير النمطي المستخدم لاكتشاف السر |
| process-archives | مفتاح للإشارة |
| report | موقع واسم تقرير CSV المزمع إنشاؤه ويتضمن تفاصيل الأسرار المنقّاة. |
| report-encryption | إذا تم إنشاء ملف تقرير، فهذه هي طريقة التشفير التي سيتم استخدامها. القيم الممكنة: none, zip-aes256. الافتراضي: zip-aes256 |
| log-level | مستوى التسجيل المستخدم لمخرجات الأداة. القيم الممكنة: critical, fatal, error, warning, info, debug. الافتراضي: info |
| Parameter | Definition |
|---|
| analyse-with | قائمة مفصولة بفواصل بالأدوات التي سيتم استدعاؤها. قد تشمل أيًا مما يلي: trivy, gitleaks, ccs. cq, bindetect |
| srcdir | موقع الكود المصدري الأصلي الذي تم فحصه لإنتاج نتائج CQ التي سيتم معالجتها. |
| outdir | الموقع الذي سيتم تخزين ملفات المصدر المنقّاة فيه. |
| placeholder | النص البديل الذي سيُدرج بدلاً من جميع الأسرار المكتشفة. يمكنه قبول البدائل التالية: - ${tool} اسم الأداة المستخدمة لاكتشاف السر- ${rule} اسم القاعدة المستخدمة لاكتشاف السر- ${regex} التعبير النمطي المرتبط بالقاعدة المستخدمة لاكتشاف السر- ${yaml} بنية YAML بتنسيق التدفق تحتوي (إن كانت معروفة) على أسماء الأداة والقاعدة المستخدمتين لاكتشاف السر فقط- ${yaml_regex} بنية YAML بتنسيق التدفق تحتوي (إن كانت معروفة) على أسماء الأداة والقاعدة والتعبير النمطي المستخدم لاكتشاف السر |
| report | موقع واسم تقرير CSV المزمع إنشاؤه ويتضمن تفاصيل الأسرار المنقّاة. |
| report-encryption | إذا تم إنشاء ملف تقرير، فهذه هي طريقة التشفير التي سيتم استخدامها. القيم الممكنة: none, zip-aes256. الافتراضي: zip-aes256 |
| log-level | مستوى التسجيل المستخدم لمخرجات الأداة. القيم الممكنة: critical, fatal, error, warning, info, debug. الافتراضي: info |
| Tool | Comments |
|---|
| Trivy | يجب تثبيت أمر trivy وأن يكون متاحًا في المسار. |
| GitLeaks | يجب تثبيت أمر gitleaks وأن يكون متاحًا في المسار. |
| ccs | يجب أن يكون ملف ccs.py موجودًا داخل دليل فرعي باسم ccs داخل الدليل الذي يحتوي على ملف secretscrub.py. |
| cq | يجب أن يكون ملفا cq.py وfn.py موجودين داخل دليل فرعي باسم cq داخل الدليل الذي يحتوي على ملف secretscrub.py. |
| bindetect | هي أداة مضمّنة حاليًا مع secretscrub ولا يلزم تثبيت إضافي. |