فحص قوّة كلمات المرور عبر كسرها – الجزء الأول

من المعروف أن كلمات المرور هي أكثر الوسائل المستخدمة في التّحقق من كون شخص ما هو ما يدّعيه. من هنا تأتي الحاجة لدى المؤسّسات إلى التّأكد من كون العاملين فيها: 1- يستخدمون كلمات مرور قويّة 2- هذه الكلمات يتمّ تغييرها كل فترة زمنيّة معيّنة (يفضل كل 90 يوماً)

قد يقول قائل: في ويندوز يمكن استخدام سياسة المجموعة من أجل اجبار المستخدمين على استخدام كلمات مرور معقدّة. وجواب ذلك أنّ هذا وحده غير كافي، فكلمة مثل Pas5w0rd تحقق شروط السياسات (8 أحرف على الأقل، تحتوي على أحرف وأرقام، إلخ) ولكن هذه الكلمة يسهل على برامج كسر كلمات المرور كسرها. لذلك يستحسن أن تكون هناك آلية داخل المؤسسات للتّأكد من قوّة كلمات المرور.

في هذه المقالة سنقوم بعملية فحص كلمات المرور في كلِّ من ويندوز ولينكس.

كلمات المرور في ويندوز

في ويندوز يتمّ تخزين كلمات المرور بصيغتين. الأولى LANMAN Hash وهي طريقة قديمة ومعقدّة (ولكن بدون فائدة إضافيّة). حيث يتمّ تحويل كلمة المرور إلى حروف عليا (ABC…Z) ويتم الإضافة عليها لجعلها مكوّنة من 14 حرفاً. مثلاً لو كانت كلمة مرورك عبارة عن 9 أحرف، تقوم الطريقة بإلإضافة عليها لجعلها مكوّنة من 14 حرفاً. بعدها تقوم بتقسيمها إلى قسمين، كل قسم يحتوي على 7 أحرف. ومن ثمّ تستخدم DES في تشفير الناتج باستخدام قيمة ثابتة. بعدها يتمّ وصل القسمين معاً وتخزينهما. طبعاً هذا يعطيك فكرة عن طول كلمة المرور التي يقوم المستخدم باستخدامها إذا كانت 7 حروف او أقل وذلك بسبب القيمة الثابتة التي تستخدم في عملية تشفير الأفسام.

ظلّت هذه الطريقة هي الطريقة الافتراضيّة لحفظ كلمات المرور في أنظمة ويندوز لغاية ويندوز فيستا حيث استبدلت بطريقة NT hash.

الخوارزميّة المستخدمة في NT hash أسهل بكثير من الطريقة السّابقة وأقوى منها. حيث يتمّ استخدام MD4 في انشاء ال hash ومن ثمّ تخزينها.

كلمات المرور في ويندوز كانت ولا زالت لا تستخدم ما يعرف بال salting وهو الذي يقوم بجعل كلمات المرور المتشابهة تظهر وكأنها كلمات مختلفة كما هو الحال في لينكس. فكلمات المرور في ويندوز كانت (ولا زالت) تحتاج إلى صلاحيات نظام أو مدير للوصول إليها. في حين نظام لينكس كانت الكلمات تخزن في ملف passwd وكان بإمكان أي مستخدم للنّظام الإطلاع على هذه الملف ومشاهدة تشفير كلمات المرور وإذا صدف أن كانت كلمة مروره مشابهة لكلمة مرور مستخدم آخر فعندها سيعرف المستخدم كلمة مرور مستخدم آخر دون الحاجة إلى كسرها. هذا الأمر أدى إلى استخدام تقنيّة ال salting لجعل كلمات المرور المتشابهة تظهر وكأنها كلمات مختلفة. ثم تمّ نقل تشفير الكلمات إلى ملف آخر يدعى shadow ولا يمكن قراءة محتوياته إلّا لمن لديه صلاحيّات الجذر.

الحصول على كلمات المرور

للحصول على كلمات المرور تحتاج إلى صلاحيّات مدير النّظام أو الجذر.

في نظام ويندوز

يمكن استخدام أحد الأدوات التّاليّة للحصول على كلمات الهاش الخاص بالمستخدمين:

1- gsecdump

2- pwdump7

3- hashdump (في ميتاسبلويت)

وهناك العديد من البرامج الأخرى.

هاش كلمات مرور في يندوز

هاش كلمات مرور في يندوز

كما نشاهد في الصورة أعلاه معلومات الدّخول مسجّلة كالآتي:

1- اسم المستخدم ( current تعني كلمة المرور الحاليّة و hist_X تعني تاريخ كلمة المرور)

2- رقم المستخدم (في حالة كون المستخدم مدير النّظام الافتراضي رقم العضويّة هو 500)

3- كلمة المرور بصيغة LANMAN

4- كلمة المرور بصيغة NT hash

في لينكس

سنستخدم أداة John the Ripper لدمج كلِّ من passwd و  shadow. أداة JtR تحتوي على أداة أخرى تدعى unshadow والتي تقوم بعمليّة الدّمج:


#./unshadow /etc/passwd /etc/shadow > /tmp/passes-to-crack.txt

كسر كلمات المرور

الآن وقد حصلنا على كلمات المرور، سنقوم باستخدام John the Ripper من أجل كسر هذه الكلمات.

سنبدأ بكسر كلمات مرور الويندوز باستخدام القاموس. JtR يأتي ومعه ملف يحتوي على العديد من الكلمات التي يكثر استخدامها بين المستخدمين. سنقوم بتزويده بموقع هذا الملف (الموقع يخلف بحسب طريقة التثبيت في هذا المثال تمّ تثبيت JtR باستخدام مستودعات ابنتو)


# john --format=nt --wordlist=/usr/share/john/password.lst /home/sam2
Loaded 3 password hashes with no different salts (NT MD4 [Generic 1x])
guesses: 0 time: 0:00:00:01 100% c/s: 7225 trying: raiders - zhonggu

نلاحظ أن عملية الكسر باستخدام القاموس كانت سريعة جدّاً ولم تستطع معرفة أيّاً من كلمات المرور.

سنقوم الآن بتجربة طريقة تعرف باسم الهجين (Hybrid) وهي عبارة عن استخدام القاموس مع عمل بعض التعديلات على كلمات المرور (مثلاً استبدال بعض الأحرف بأرقام على سبيل المثال S تستبدل بالرّقم 5)

ولكن قبل ذلك سنقوم بحذف ملف يدعى john.pot. هذه العمليّة هامّة جدّاً لأنّه في حال كان هذا الملف موجوداً فإن JtR سيستخدم هذا الملف كمرجع له وهو ما نريده هنا لأنّ سيجبر JtR على عدم تجريب الكلمات التي تمّ تجربتها من قبل في الطريقة السّابقة.

موقع الملف يختلف باختلاف طريقة التثبيت. فمثلاً في هذه الحالة، كون التثبيت تمّ باستخدام مستودعات أبنتو فإن الملف يتمّ تخزينه في مجلد مخفي باسم john تحت اسم المستخدم الذي يقوم بعملية الكسر، في حالتنا هذه المستخدم هو الجذز.


rm /root/.john/john.pot

الآن نقوم بمحاولة كسر كلمات المرور


john --format=nt --wordlist=/usr/share/john/password.lst --rules /home/be/Downloads/sam2
Loaded 3 password hashes with no different salts (NT MD4 [Generic 1x])
Test123 (ahamd)
guesses: 1 time: 0:00:00:01 100% c/s: 204868 trying: Surfing - Zhongguing

ونلاحظ ان JtR قد تمكّن من اكتشاف إحدى كلمات المرور بشكل شبه فوري، والعملية كلّها لم تستغرق حتى ثانية واحدة.

للأطلاع على محتوى John.pot


cat /root/.john/john.pot
$NT$3b1da22b1973c0bb86d4a9b6a9ae65f6:Test123

الآن سنقوم باستخدام طريقة brute force

john --format=nt /home/be/Downloads/sam2
Loaded 3 password hashes with no different salts (NT MD4 [Generic 1x])
Test123 (ahamd)
guesses: 1 time: 0:00:14:32 (3) c/s: 9674K trying: Job$lb - Job$su
guesses: 1 time: 0:00:14:57 (3) c/s: 9656K trying: dld_299i - dld_2te8
guesses: 1 time: 0:00:16:30 (3) c/s: 9683K trying: AVanw0 - AVarku
guesses: 1 time: 0:00:17:30 (3) c/s: 9699K trying: mlvpuev1 - mlvpudga
guesses: 1 time: 0:00:17:32 (3) c/s: 9702K trying: 3dgun16e - 3dgun1ar
Session aborted

كما نلاحظ فبعد 17 دقيقة لم نتمكن من الحصول سوى على كلمة مرور واحدة. هذا لا يعني أن الكلمات المستخدمة قويّة (ولكن ليس لديّ وقت للانتظار 🙂 ). بالإمكان أن نشاهد خلال أي لحظة أين وصل JtR في محاولاته من خلال الضغط على مفتاح المسافة.

لنفرض أن السياسة لدى المؤسسة هي استعمال كلمات مرور بطول 7 حروف على الأقل. في هذا الحالة استطيع تخصيص JtR لكسر كلمات المرور التي تحتوي على 7 حروف فأكثر بدلاً من الوضع الإفتراضي والذي قد يبدأ من أي قيمة أقل 7 حروف وهذا بدوره يوفّر الكثير من الوقت. لتبديل القيم الإفتراضيّة نقوم بتعديل الملف /
etc/john/john.conf

[Incremental:All]
File = /usr/share/john/all.chr
MinLen = 7
MaxLen = 8
CharCount = 95

[Incremental:Alpha]
File = /usr/share/john/alpha.chr
MinLen = 7
MaxLen = 8
CharCount = 26

[Incremental:Digits]
File = /usr/share/john/digits.chr
MinLen = 7
MaxLen = 8
CharCount = 10

[Incremental:Alnum]
File = /usr/share/john/alnum.chr
MinLen = 7
MaxLen = 8
CharCount = 36

وبعد ذلك نقوم بعمليّة الكسر من جديد.

john --format=nt /home/be/Downloads/sam2
Loaded 2 password hashes with no different salts (NT MD4 [Generic 1x])
guesses: 0 time: 0:00:00:04 (3) c/s: 7315K trying: atencon - atencl2
guesses: 0 time: 0:00:01:44 (3) c/s: 9732K trying: grevlcl - grevCn5
guesses: 0 time: 0:00:06:12 (3) c/s: 9857K trying: 4prnfnki - 4prnftbl
guesses: 0 time: 0:00:06:37 (3) c/s: 9866K trying: cwegssk - cwegd3c
tesT123 (ali)

هنا تمكنّا من الحصول على كلمة مرور المستخدم ali بعد ست دقائق.

أكتفي بهذا القدر وإن شاء الله في الجزء الثّاني سأكمل الموضوع، كذلك سأقوم بعمل مقارنة بين عملية كسر كلمات المرور باستخدام JtR والذي تمّ تثبيته من المستودع (أو بالإعدادات الإفتراضيّة). وعملية كسر كلمات المرور بعد عمل بعض التخصيص أثناء التثبيت. حتى ذلك الحين، اترككم لتجربة ما تمّ تغطيته في هذا المقال.

نبذة عن الكاتب

بشار ماجستير نظم معلومات. مهندس أنظمة يمتلك خبرة في إدارة أنظمة ويندوز ولينكس. باحث ومختصص في مجال أنظمة المعلومات، معالجة الحوادث الأمنيّة، تحليل الإختراقات الأمنيّة، وفحصوصات الاختراق. حاصل على العديد من الشهادات الأمنيّة. عضو في مجلس استشاريّي معهد سانز لأمن المعلومات.

التعليقات:

اترك تعليقاً | عدد التعليقات: (1)

  1. […] This post was mentioned on Twitter by Security 4 Arabs. Security 4 Arabs said: http://goo.gl/mcJvW فحص قوّة كلمات المرور عبر كسرها – الجزء الأول […]

أكتب تعليق