ما هو اختطاف الجلسة وكيف يمكنك إيقافه

هذه القصة مخصصة للمبتدئين وأي شخص لديه فهم أساسي لملفات تعريف الارتباط (ملفات تعريف الارتباط للجلسات) ، ولكن من غير متأكد من كيفية تأمينها بشكل صحيح. ليس عليك أن تكون خبيرًا أمنيًا للقيام بذلك. عليك فقط أن تفهم العملية وبعدها ستعرف.

إذا لم يكن لديك أي فكرة عن ملفات تعريف الارتباط أو كيفية عملها ، فيرجى قراءة هذه المقالة حول ملفات تعريف الارتباط HTTP.

دعنا نذهب اليها! لديك تطبيق ويب رائع يقدم خدمة رائعة للعملاء. هذا يعني أنه سيكون لديك آلية مصادقة لإيصال المستخدم إلى تطبيقك. أنت تعرف مدى أهمية الأمن. لقد نفذت كل أنواع الإجراءات الأمنية أثناء المصادقة. عظيم!

عند المصادقة الناجحة ، يجب عليك إنشاء جلسة لهذا المستخدم. هذا يعني أنك تقوم بالفعل بإنشاء ملف تعريف ارتباط وإرساله مرة أخرى إلى المتصفح. على سبيل المثال ، في تطبيق ويب Java ، بشكل افتراضي ، يطلق عليه JSESSIONID. يبدو شيئًا مثل هذا:

باستخدام ملف تعريف الارتباط هذا ، فقط خادم الويب الخاص بك قادر على تحديد هوية المستخدم وسيقدم المحتوى وفقًا لذلك. ويبدو ملف تعريف الارتباط هذا رائعًا. لا توجد معلومات حساسة في ملف تعريف الارتباط ، فقط المعرف العشوائي (غير قابل للتخمين). لذا فإن المستخدم آمن! …حق؟

حسنًا ، ليس بالضبط ، دعنا نلقي نظرة فاحصة.

هناك خاصيتان في ملف تعريف الارتباط هذا: HttpOnly (HTTP) و Secure. قيمها فارغة ، مما يعني عدم تمكينها لملف تعريف الارتباط هذا . هذا هو المكان الذي تصل فيه إلى النقطة التي لم تعد آمنة.

هذا هو المكان الذي تدخل فيه Session Hijacking.

اختطاف الجلسة ، المعروف أيضًا باسم اختطاف ملفات تعريف الارتباط ، هو استغلال جلسة كمبيوتر صالحة - تسمى أحيانًا مفتاح جلسة - للحصول على وصول غير مصرح به إلى المعلومات أو الخدمات في نظام الكمبيوتر. - ويكيبيديا

لذلك فهو فعل سرقة معرف جلسة العميل ، والتي من خلالها يمكنهم الوصول إلى تطبيق الويب الخاص بك كما لو كانوا ذلك العميل.

هل هذا ممكن؟ كيف يحصلون على معرف الجلسة الموجود في متصفح المستخدم؟

انه من الممكن. سبب ذلك هو خاصيتان لملف تعريف الارتباط (أو الأعلام) التي رأيناها سابقًا ( HttpOnly و Secure ).

HttpOnly علم

HttpOnlyلا يمكن الوصول إلى ملفات تعريف الارتباط إلى Document.cookieواجهة برمجة تطبيقات JavaScript ؛ يتم إرسالها فقط إلى الخادم. على سبيل المثال ، لا يلزم أن تكون ملفات تعريف الارتباط التي تستمر في جلسات من جانب الخادم متاحة لجافا سكريبت ، HttpOnlyويجب تعيين العلامة.

لذلك بعبارات بسيطة ، إذا لم تقم بتعيين علامة httpOnly ، فسيكون ملف تعريف الارتباط الخاص بك قابلاً للقراءة من كود JavaScript للواجهة الأمامية.

افتح أي صفحة ويب لا يحتوي ملف تعريف الارتباط الخاص بها على مجموعة علامة httpOnly. ثم افتح Chrome Dev Console ثم انقر فوق علامة تبويب وحدة التحكم (Cmd + Shift + J أو Ctrl + Shift + J). اكتب document.cookieوأدخل ، وسترى شيئًا مثل هذا:

كما ترى ، ستحصل على جميع معلومات ملفات تعريف الارتباط. يمكن لمهاجم JavaScript ببساطة نشر هذا على الخادم الخاص به لاستخدامه لاحقًا.

قد تتساءل كيف يمكنهم كتابة هذا الرمز في التطبيق الخاص بك. هذا ممكن بعدة طرق.

تتمثل إحدى الطرق في إدخال بعض مكتبة JS التابعة لجهات خارجية غير موثوق بها مثل التسجيل والأدوات المساعدة وما إلى ذلك. اقرأ هذه المقالة أنا أحصد أرقام بطاقات الائتمان وكلمات المرور من موقعك. وإليك الطريقة .

هناك طريقة أخرى تتمثل في استخدام هجوم البرمجة عبر الموقع . لن ندخل في تفاصيل ذلك ، لكن تذكر أنه يمكن القيام به.

اذا كيف بإمكاننا تصليحه؟

لا يلزم حتى أن يكون ملف تعريف ارتباط الجلسة متاحًا للوصول إليه بواسطة عميل JavaScript. مطلوب فقط للخادم. يجب أن نجعله متاحًا فقط للخادم. يمكن القيام بذلك عن طريق إضافة كلمة واحدة ( httpOnly ) في عنوان استجابة set_cookie http. مثله:

Set-Cookie: JSESSIONID=T8zK7hcII6iNgA; Expires=Wed, 21 May 2018 07:28:00 GMT; HttpOnly

من خلال إضافة علامة httpOnly ، فأنت توجه المتصفح بأنه لا ينبغي قراءة ملف تعريف الارتباط هذا بواسطة كود JavaScript. المتصفح سوف يعتني بالباقي. هذه هي الطريقة التي تبدو بها بعد إضافة علامة httpOnly:

لاحظ علامة التجزئة في خاصية HTTP. يشير ذلك إلى تمكين httpOnly .

هنا يمكنك رؤية هذا المستند. لا يُرجع ملف تعريف الارتباط ملف تعريف ارتباط الجلسة الخاص بنا. بمعنى أنه لا يمكن لـ JS قراءته ، بما في ذلك أي نصوص خارجية.

هذا كل شيء - واحد أسفل واحد للذهاب!

العلم الآمن

و آمن العلم يرشد المتصفح أن الكوكي يجب أن تعاد فقط إلى التطبيق عبر اتصالات مشفرة، وهذا هو، اتصال HTTPS.

لذلك ، عندما يتم إرسال ملف تعريف الارتباط إلى المتصفح بعلامة آمنة ، وعندما تقدم طلبًا إلى التطبيق باستخدام HTTP ، فلن يقوم المتصفح بإرفاق ملف تعريف الارتباط هذا في الطلب. سيتم إرفاقه فقط في طلب HTTPS. سيتم تشفير طلب HTTPS بحيث يتم إرسال ملفات تعريف الارتباط بأمان عبر الشبكة إلى تطبيقك.

كيف يمكن لشخص ما قراءة ملف تعريف الارتباط في طلب HTTP؟

يمكن تحقيق ذلك عندما يقوم شخص ما (يُطلق عليه هجوم "رجل في الوسط" ) بمراقبة كل حركة المرور في شبكة العملاء. يمكنهم رؤية بيانات النص الواضح إذا كان الطلب في HTTP.

عندما يتم إرسالها عبر HTTPS ، سيتم تشفير جميع البيانات من المتصفح وإرسالها إلى الشبكة. لن يتمكن المهاجم من الحصول على البيانات الأولية التي كنت ترسلها. ولن يتمكن المهاجم من فك تشفير المحتوى. هذا هو السبب في أن إرسال البيانات عبر SSL آمن.

اذا كيف بإمكاننا تصليحه؟

تمامًا مثل علامة httpOnly ، تحتاج فقط إلى إضافة العلامة الآمنة في رأس استجابة set_cookie HTTP. مثله:

Set-Cookie: JSESSIONID=T8zK7hcII6iNgA; Expires=Wed, 21 May 2018 07:28:00 GMT; HttpOnly; Secure

في Java يمكن القيام بذلك بعدة طرق. إذا كنت تستخدم Servlet 3.0 أو أعلى ، فيمكنك تكوين هذه الإعدادات في web.xml على النحو التالي :

  true true  

إذا كانت بيئتك لا تدعمها ، فيمكنك إضافتها يدويًا. على سبيل المثال باستخدام Servlets يمكنك القيام بذلك:

أخيرًا ، هكذا يبدو الأمر عند تعيين كلتا العلامتين ،

استنتاج

لذلك عندما تتعامل مع ملفات تعريف الارتباط للجلسة أو أي ملفات تعريف ارتباط مهمة أخرى ، تأكد من إضافة هاتين العلامتين.

شكرًا على القراءة ، نتمنى لك تأمينًا سعيدًا!