
إحدى الطرق لمراقبة المعلومات الحساسة التي قد تتعرض على Github باستمرار
أعلم أن هناك العديد من الأدوات الأخرى المتاحة للعثور على المعلومات الحساسة المُسرَّبة حالياً على Github، وما زلت أستخدم بعضها بنفسي. ومع ذلك، أعتقد أنها لا تزال تفتقر إلى بعض الميزات مثل:
أدوات أخرى تركز أكثر على العثور على معلومات حساسة موجودة في مستودع (Repository) تم تمرير عنوان Git الخاص به إلى الأداة. يوجد عدد قليل فقط من الأدوات المماثلة في الوقت الذي طورت فيه GitMonitor والتي تركز على العثور على المستودعات التي تحتاج إلى الاهتمام بها أولاً، وإيجاد جميع المستودعات ذات الصلة، ثم التحقق لمعرفة ما إذا كانت المعلومات الحساسة موجودة بينها أم لا.
بالإضافة إلى قواعد التحقق من المعلومات الحساسة، تحتاج الأداة أيضاً إلى قواعد للبحث عن المستودعات المهمة. المستودعات التي سيتم النظر فيها قد تكون تلك التي تحتوي على كلمات مفتاحية متعلقة بالشركة أو المشروع.
إذا كنت صياداً للمكافآت (bug bounty hunter) فستكون مهتماً فقط بعدة أهداف في كل مرة. ولكن، إذا كنت مهندس أمن لشركة، فستحتاج إلى معرفة متى يظهر مستودع متعلق بشركتك أو مشروعك وقد يحتوي على معلومات حساسة. يمكن أن تظهر هذه المستودعات في أي مكان على Github، بأي اسم ومن أي حساب. ويجب أن تتلقى تنبيهاً بمجرد ظهور مثل هذا المستودع (مراقبة مستمرة).
الأداة تحتوي على آلية تقارير مرنة.
لهذا السبب قمت بإنشاء هذه الأداة - GitMonitor. تستخدم GitMonitor مجموعتين مختلفتين من القواعد للعثور على ما تحتاجه. مجموعة قواعد البحث ستبحث عن المستودعات التي قد تكون متعلقة بمؤسستك أو مشاريعك الداخلية، أو أي شيء آخر، وتقوم بنسخ (clone) المستودعات المتطابقة إلى المحلي. بعد ذلك، مجموعة قواعد التصفية الحساسة للتحقق مما إذا كانت هذه المستودعات تحتوي على معلومات حساسة. أخيرًا، ستقوم الأداة بالإبلاغ عبر Slack. يمكنك استخدام هذه الأداة مع Cronjob لإنشاء نظام مراقبة مستمر لتتبع المعلومات الحساسة المتعلقة بمؤسستك والتي تم تسريبها على Github واستلام النتائج عبر Slack.
تحديث 15 يونيو 2020: قمنا بتحديث الإصدار إلى 1.0. هذا الإصدار يصلح بعض الأخطاء ليتمكن Gitmonitor من العمل بثبات. نوصي بإجراء git pull إذا كنت تستخدم إصدارات سابقة.
استخدام مجموعتين مختلفتين من القواعد: مجموعة قواعد بحث (yaml) للبحث عن المستودع المهم، ومجموعة قواعد تصفية (regex) للتحقق مما إذا كانت هذه الحاويات المهمة تحتوي على معلومات حساسة. يتم تعريف قواعد البحث (yaml) وقواعد التصفية (regex) بشكل منفصل. يمكن للمستخدمين تعريف قواعد yaml و regex بسهولة ووضوح.
مجموعة قواعد البحث: يمكنك إنشاء العديد من القواعد المختلفة باستخدام ملفات yaml مختلفة. تتيح لك القواعد تعريف كيفية البحث عن المستودعات بمرونة، يمكنك استخدام كلمات مفتاحية، أو كلمات مفتاحية مرتبطة باللغة، واسم الملف والامتداد، أو يمكنك أيضًا تعريف استبعاد بعض المستودعات من البحث بناءً على اللغة أو اسم الملف أو الامتداد. سيتم البحث عن الكلمات المفتاحية من خلال أسماء المستودعات، رموز المستودعات وأيضاً الالتزامات (commits).
مجموعة قواعد التصفية: يمكنك إضافة أو تعديل regex بسهولة للعثور على المعلومات الحساسة التي قد تكون موجودة في المستودعات.
سيتم نسخ (clone) أول مستودع يطابق مجموعة قواعد البحث إلى المحلي. وبعد ذلك، ستتحقق مجموعة قواعد التصفية مما إذا كان هذا المستودع يحتوي على معلومات حساسة. بعد الانتهاء من فحص المعلومات الحساسة، سيسجل Gitmonitor النتائج ويحذف هذا المستودع تلقائياً من المحلي لتوفير المساحة قبل الاستمرار في تكرار هذه العملية حتى يتم العثور على جميع المستودعات ذات الصلة وفحصها.
الإبلاغ عبر Slack.
يمكن جدولة هذه الأداة باستخدام Cronjob للمراقبة المستمرة.

> python3 -m pip install -r requirements.txt
يرجى التأكد من تثبيت Pyyaml الإصدار 5x أو أعلى (pip3 install --ignore-installed PyYAML)
يشرح الجدول التالي معنى كل مفتاح في ملف التكوين:
> export GIT_USERNAME=your Github username
> export GIT_PASSWORD=your Github personal key or password
أو تعريف معلومات بيانات الاعتماد في ملف التكوين (غير موصى به):
مثال لملف التكوين عند تعريف معلومات بيانات الاعتماد في متغيرات البيئة

يمكنك إنشاء العديد من ملفات yaml المختلفة مثل قالب القاعدة لتعريف كلمات مفتاحية متعددة. سيبدو ملف القاعدة كالصورة أدناه:

> python3 gitmonitor.py
على سبيل المثال:

هناك العديد من المجالات في هذا المشروع يمكن تحسينها وتغييرها بشكل كبير أثناء إعادة هيكلة الكود الحالي وتنفيذ ميزات جديدة. سنكون ممتنين للغاية للتعليقات مع التحسينات وطلبات السحب (pull requests) من المجتمع وسيتم قبولها.
بشكل عام، نتبع سير عمل "fork-and-pull" في Git.
ملاحظة: تأكد من دمج آخر التحديثات من "upstream" قبل عمل طلب سحب!
| المفتاح | الوصف |
|---|
| user | اسم مستخدم Github - اتركه فارغاً إذا قمت بإعداد بيانات اعتماد Github عبر متغيرات البيئة |
| pass | كلمة مرور Github - اتركها فارغة إذا قمت بإعداد بيانات اعتماد Github عبر متغيرات البيئة |
| webhooks | رمز Webhook الوارد لإرسال الرسائل من GitMonitor إلى Slack |
| rule | الدليل الذي يحتوي على مجموعة قواعد البحث |
| source | الدليل لتنزيل المستودع |
| log | الدليل الذي سيحتوي على ملف JSON يسجل الحالة بعد كل مسح ضوئي، ويستخدم ملف JSON هذا لمقارنة النتائج بين عمليات المسح (لتحديد المستودعات الجديدة) |
| start | تعريف لافتة لبدء المسح ولافتة لنتائج مسح مجموعة قواعد التصفية الحساسة - ستظهر في النتائج المرسلة إلى Slack |
| end | تعريف لافتة لإنهاء المسح ولافتة لنتائج مسح مجموعة قواعد البحث - ستظهر في النتائج المرسلة إلى Slack |
| all | تعريف لافتة لعرض جميع المستودعات - ستظهر في النتائج المرسلة إلى Slack |