
مولد تخمين كلمات المرور باستخدام القواعد النحوية الاحتمالية الخالية من السياق (PCFG)
PCFG = قواعد نحوية سياقية احتمالية
PCFG = مخمن ضبابي رائع
باختصار: مجموعة من الأدوات لإجراء أبحاث حول كيفية إنشاء البشر لكلمات المرور. يمكن استخدامها لاختراق تجزئات كلمات المرور، وكذلك إنشاء كلمات مرور اصطناعية (honeywords)، أو المساعدة في تطوير خوارزميات أفضل لقوة كلمات المرور.
المدرّب (Trainer): 4.4
المخمن (Guesser): 4.6
PRINCE_LING: 4.3
مسجل النقاط (Password_Scorer): 4.4
يُستخدم Sphinx لإنشاء دليل المطور ديناميكيًا بناءً على تعليقات التوثيق في الكود. لبناء دليل المطور، راجع التعليمات في /doc/INSTRUCTIONS.rst
يمكن أيضًا العثور على نسخة PDF مبنية مسبقًا من دليل المطور في /doc/build/latex/pcfgdevelopersguide.pdf. ملاحظة: لن أعيد بناء هذا الدليل بين الإصدارات الرئيسية للحفاظ على نظافة تاريخ git. بمعنى آخر، ارتكاب ملفات PDF يصبح فوضويًا سريعًا. لذلك قد يكون الدليل المبني مسبقًا قديمًا قليلاً، لذا إذا كنت تستخدمه للمساعدة في كتابة/تعديل الكود، فمن المستحسن بناء الدليل بنفسك بدلاً من استخدام المبني مسبقًا.
يستخدم هذا المشروع التعلم الآلي لتحديد عادات إنشاء كلمات المرور لدى المستخدمين. يتم إنشاء نموذج PCFG عن طريق التدريب على قائمة من كلمات المرور المكشوفة/المخترقة. في سياق هذا المشروع، يُشار إلى النموذج باسم مجموعة القواعد (ruleset) ويحتوي على أجزاء مختلفة من كلمات المرور التي تم تحديدها أثناء التدريب، بالإضافة إلى احتمالاتها المرتبطة. يمكن أن يكون هذا التجزئة مفيدًا لأدوات الاختراق الأخرى مثل PRINCE، و/أو يمكن دمج أجزاء من مجموعة القواعد مباشرة في هجمات القواميس التقليدية. يتضمن هذا المشروع أيضًا مولد تخمينات PCFG الذي يستخدم مجموعة القواعد هذه لتوليد تخمينات كلمات المرور بترتيب الاحتمالات. هذا أقوى بكثير من هجمات القواميس القياسية، وقد أثبت في الاختبارات قدرته على اختراق كلمات المرور في المتوسط مع تخمينات أقل بكثير مقارنة بالطرق الأخرى المتاحة للجمهور. الجانب السلبي هو أن توليد التخمينات بترتيب الاحتمالات بطيء، مما يعني أنه يُنتج في المتوسط 50-100 ألف تخمين في الثانية، بينما يمكن لخوارزميات GPU إنشاء ملايين إلى مليارات (وأكثر) من التخمينات في الثانية ضد خوارزميات التجزئة السريعة. لذلك، فإن مخمن PCFG هو الأفضل للاستخدام ضد أعداد كبيرة من التجزئات المملحة، أو خوارزميات التجزئة البطيئة الأخرى، حيث يتم تعويض تكلفة الأداء للخوارزمية بدقة التخمينات.
pip3 install chardetتم إنشاء مجموعة القواعد الافتراضية المضمنة في هذا المستودع عن طريق التدريب على مجموعة فرعية من 1 مليون كلمة مرور من مجموعة بيانات RockYou. يمكن تحقيق أداء أفضل عن طريق التدريب على مجموعة كاملة من 32 مليون كلمة مرور لـ RockYou، ولكن تم استبعاد ذلك للحفاظ على حجم التنزيل صغيرًا. يمكنك استخدام مجموعة القواعد الافتراضية لبدء توليد كلمات المرور دون الحاجة إلى التدريب على قائمة جديدة، ولكن من المستحسن التدريب على مجموعة مستهدفة من كلمات المرور التي قد تكون أقرب إلى ما تحاول استهدافه. إذا قمت بإنشاء مجموعة القواعد الخاصة بك، فإليك دليل سريع:
python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESETpython3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6
ب. --save_sensitive: إذا تم تحديد ذلك، سيتم حفظ البيانات الحساسة مثل عناوين البريد الإلكتروني ومواقع الويب الكاملة التي تم اكتشافها أثناء التدريب في مجموعة القواعد. على الرغم من أن مولد تخمينات PCFG لا يستخدم هذه البيانات حاليًا، إلا أنها ذات قيمة كبيرة أثناء هجوم اختراق كلمة مرور حقيقي. هذا الخيار معطى افتراضيًا لجعل هذه الأداة أسهل في الاستخدام في البيئة الأكاديمية. ملاحظة: حتى عندما يكون هذا الخيار معطلاً، ستظل هناك بالتأكيد بيانات PII محفوظة داخل مجموعة القواعد، لذا قم بحماية مجموعات القواعد المولدة بشكل مناسب. مثال: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
ج. --comments: يضيف تعليقًا إلى ملف تكوين مجموعة القواعد الخاصة بك. هذا مفيد حتى تعرف لماذا وكيف قمت بإنشاء مجموعة القواعد الخاصة بك عند النظر إليها لاحقًا. قم بتضمين التعليق الذي تريد إضافته بين علامتي اقتباس.يؤدي هذا إلى توليد التخمينات إلى stdout باستخدام مجموعة قواعد PCFG مدربة مسبقًا. يمكن بعد ذلك توجيه هذه التخمينات إلى أي برنامج تريد استخدامها. إذا لم يتم تحديد مجموعة قواعد، فسيتم استخدام مجموعة القواعد الافتراضية DEFAULT. لأغراض هذا الدليل، سنفترض أن مجموعة القواعد المستخدمة هي NEW_RULESET.
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --loadهناك العديد من الحالات التي قد ترغب فيها في تقدير احتمالية إنشاء كلمة مرور بواسطة مجموعة قواعد مدربة مسبقًا. على سبيل المثال، يمكن أن يكون هذا جزءًا من مقياس قوة كلمة المرور، أو استخدامه لأغراض بحثية أخرى. تم تضمين برنامج عينة لأداء ذلك.
python3 password_scorer -r NEW_RULESET -i INPUT_LISTالاسم: Prince-Ling (PRINCE Language Idexed N-Grams)
نظرة عامة: ينشئ قوائم كلمات مخصصة بناءً على مجموعة قواعد/قواعد نحوية PCFG مدربة مسبقًا للاستخدام في هجمات التوافق من نوع PRINCE. الفكرة وراء ذلك هي أنه نظرًا لأن مدرّب PCFG يقوم بالفعل بتقسيم مجموعة تدريب من كلمات المرور إلى تحليلات فردية، يمكن الاستفادة من هذه المعلومات لإنشاء قوائم كلمات مستهدفة لهجمات أخرى.
الآليات الأساسية: تحت الغطاء، أداة Prince-Ling هي في الأساس مولد تخمينات PCFG مصغر. تقوم بإزالة توليد تخمينات ماركوف، واستبدال الهياكل الأساسية المستخدمة في هجمات PCFG العادية بهيكل أساسي مخفض بشكل كبير مصمم خصيصًا لإنشاء قوائم كلمات PRINCE. يسمح ذلك بتوليد كلمات القاموس بترتيب الاحتمالات مع التركيز على مدى فائدة هذه الكلمات المتوقعة في هجوم PRINCE.
استخدام Prince-Ling
python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAMEpython3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt
إذا لاحظت أي أخطاء، أو إذا كانت لديك ميزة ترغب في رؤيتها مضافة، فيرجى فتح issue على صفحة github هذه. كما أقبل طلبات السحب (pull requests)، ولكن من المفضل ربط طلب السحب بـ issue حتى أتمكن من مراجعته بسهولة أكبر، وطرح الأسئلة، وفهم التغييرات التي تقوم بها بشكل أفضل.
هناك الكثير من التحسينات التي يمكن إجراؤها على نمذجة استراتيجيات إنشاء كلمات المرور باستخدام PCFGs. أنا منفتح جدًا للأفكار والتغييرات والاقتراحات الجديدة. مجرد أن الكود يفعل شيئًا بطريقة معينة لا يعني أن هذا هو الخيار الأفضل. على سبيل المثال، الهيكل الأساسي للنهج الحالي حيث يتم إنشاء أقنعة لسلاسل الأحرف الأبجدية والأرقام وغيرها، تم اختياره لأنه كان الخيار "الأسهل" للتنفيذ. كان لفريقي نقاش كبير حول أن الخيار الأفضل قد يكون البدء بكلمة أساسية، ثم نمذجة قواعد التعديل التقليدية المطبقة عليها كتحولات في PCFG. لذا لا تتردد في الإبداع مع هذا الكود!