إذا كنت تقوم ببرمجة موقع يحتاج إلى عمل حسابات للمستخدمين، فيجب أن تقوم بتأمين كلمات السر الخاصة بهم إلى أقصى حد ممكن، ومن ذلك طريقة حفظها في قاعدة البيانات، فرغم كل اجراءاتك الأمنية، يجب أن تفترض احتمال تسرب قاعدة البيانات، وفي حال تسربت قاعدة البيانات، لا يجب أن يتمكن المخترق من معرفة كلمات السر الخاصة بالمستخدمين..كيف يمكن ذلك؟
باختصار، لا يجب أن تقوم بتخزين أية كلمات سر في أي مكان في موقعك، ما سوف تختزنه في جدول المستخدمين هو قيمة الهاش، مضافا إليها ما يتعارف عليه بالملح salt، وهي قيمة عشوائية تدمج بكلمة السر قبل التشفير، قيم الهاش وخوارزمياتها تختلف، في حال تخزين كلمات السر، أنصحك باستخدام خوارزمية بطيئة مثل bcrypt مع عمل سياسة لقبول كلمات السر بحيث لا تقل عن 8 حروف ولا تزيد عن 100 حرف.
لكن ماهو الهاش؟
الهاش هو عملية غير عكسية، يشكل ما يشبه البصمة لأي بيانات مدخلة، بالتالي، إذا حصل الهاكر على الهاش فلا يوجد أي طريقة ليعكس عملية الهاش نفسها ويصل للباسوورد، تماماً كما لا يمكنني التعرف على صورة وجهك من خلال بصمة اصبعك.
طيب ماذا يفعل الهاكر عند حصوله على الهاش؟
هناك العديد من الطرق التي يحاول بها الهاكرز كسر كلمات السر المسربة في صورة هاش، أسرع وأكثر هذه الطرق هي جداول رينبو، وهي عبارة عن جداول ضخمة لقواعد بيانات كبرى تحوى كلمات السر المختلفة مع قيم الهاش المسربة لها، بالتالي إذا وجد الهاكر -مثلا- هاش قيمته e334eda896de سيذهب إلى هذه الجداول ليجد قيمة الهاش مخزن أمامها الباسورد الخاص بها!..الأمر لا يستغرق أكثر من عملية بحث في قاعدة بيانات.
وهنا يأتي دور الملح!
ربما ستجد في كل جداول الرينبو هاش مقابل لكلمة سر مثل sunscreen وستجد هاشات مقابلة أيضا لكل تنويعاتها، تذكر أن جداول الهاش تحوي ملايين كلمات السر المختلفة التي تم حسابها مسبقا، الجداول المتوسطة منها قد تحوي 64 مليون قيمة..لكن، ماذا لو انك قبل حساب قيمة الهاش للباسوورد، قمت باضافة الملح إليه؟..يعني بدلا من hash('sunscreen') تقوم بحساب قيمة hash('sunscreene334eda896de')؟
بكل تأكيد، لن تكون القيمة الناتجة لهذا المركب موجودة في أي جدول رينبو..وبذلك أنت ستلجئ الهاكر إلى الطرق الأصعب لمحاولة كسر كلمات السر..
الملح قيمته ليست سرية، في الواقع، بعض مكتبات البرامج تقوم بحفظ الهاش ملحقا بالملح، فحتى مع معرفة قيمة الملح، لن يستطيع المخترق ايجاد الباسوورد الخاص بقيمة الهاش المخزنة!
طيب لماذا يجب ألا يقل طول الباسوورد عن 8 حروف؟ ولماذا أختار خوارزمية بطيئة؟
لأن المخترق سيبدأ في محاولة كل الاحتمالات، سيبدأ أولا بهجمات القاموس، بادئاً بالكلمات الشائعة والتي يتكرر استخدامها كباسوورد، سيقوم باعادة حساب الهاش مع الملح الخاص بك لكل كلمة سر لديه، وهذا هو ما نسمية بهجمة القاموس Dictionary attack. هذه أيضا طريقة شائعة وفعالة، لكن يا عزيزي إذا كنت تستخدم خوارزمية بطيئة، فسوف تستحيل حياة المهاجم جحيماً..فقاموسه يغطي ملايين الكلمات ويحتاج لحظ سعيد لكي يصدف أن الباسوورد الذي يبحث عنه يكون في مكان متقدم من قاموسه، إن كان موجوداً!
إذا فشل هجوم القاموس، فسوف يتوجه لأسلوب القوة الغاشمة Brute force، سيبدأ بمزج الحروف والأرقام والرموز بالتبادل لتجربة كل احتمال ممكن، أسلوب القوة الغاشمة فعال للغاية ومضمون النتيجة، فقط للقيم القصيرة، حساب كل الاحتمالات الممكنة بأسلوب القوة الغاشمة ممكن جداً من الناحية العملية لباسوورد تتألف من أربعة حروف، ومع كل حرف يتم اضافته، سيتصاعد الوقت المطلوب بشكل درامي..حتى يصبح الأمر في حكم المستحيل ابتداء من ثمان أحرف.
لاحظ هذه الصورة، لقد قمت بتشغيل هجوم Brute force لثمان خانات على هاش من نوعية MD5، بواحدة من أسرع برامج كسر الهاش، سيحتاج جهازي إلى قريب السنتين من العمل الدؤوب ليغطي كل الاحتمالات الممكنة..لاحظ أن MD5 هي خوارزمية قديمة، ليست بطيئة كفاية ولا ينصح باستخدامها اليوم..مع ذلك لا زال حساب كل الاحتمالات بها لباسوورد من ثمان خانات أمر يشبه المستحيل.
يقوم الهاكرز أحياناً ببناء أجهزة ذات معالجات متعددة الأنوية مثل معالجات الشاشة، تعمل على التوازي، ليتمكنوا من حساب الهاش بكفاءة وسرعة أعلى، بالطبع، لهذا السبب ننصح دائما المستخدم باختيار كلمات سر طويلة قدر الامكان، مع أقوى المعالجات الموجودة، يظل من الصعب جدا كسر كلمة سر من 20 حرفا بأسلوب القوة الغاشمة..
إذا كان الأمر كذلك، لما أنصح بحد أقصى لطول كلمة السر؟
حسناً، لأن عملية حساب الهاش نفسها مكلفة على السيرفر، واذا تركت الحبل على الغارب للمستخدمين، فسوف يأتي المهاجم ليسجل حسابا على موقعك، ويستغل أنك لا تشترط حدا أقصى لاشغال السيرفر الخاص بك بحساب هاش لقيم مطولة جدا يقوم هو بوضعها كباسوورد، مما يشكل خطر هجوم حجب خدمة DoS باستغلال هذه الخاصية.
الآن، عليك أن تبحث عن الطريقة العملية لهذه النظرية وكيفية تطبيقها في لغة البرمجة الخاصة بك واطار العمل الذي تعمل به. بالتوفيق.
تعليقات
إرسال تعليق