عدم نقل البيانات في اتصال مشفر

مقدمة

نقل البيانات غير مشفرة بيسمح للمهاجم باعتراض البيانات والتعديل عليها او سرقتها, لو تطبيق ما بيتم عملية تسجيل الدخول من خلال اتصال غير مشفر هنا بيبقي في خطر كبير علي بيانات المستخدمين, لو اي طرف تالت اعترض الاتصال هيبقي قادر علي سرقة بينات تسجيل الدخول وبالتالي سرقة حساب المستخدم (Account Takeover)

البروتوكول المستخدم في نقل البيانات بين الطبيق والمستخدم (Client and Server) هو بروتوكول ال HTTP ودا بيعتمد علي ال TCP في نقل البيانات وبيعتمد علي المنفذ (port) رقم 80 ولاكن البيانت بتتنقل في صورة غير مشفرة

علشان ننقل البيانات في صورة مشفرة بنستخدم ال HTTPS او HTTP over TLS وال TLS دا البروتوكول المسؤل عن عملية التشفير ولا كن في الحالة دي هنعتمد علي المنفذ(port) رقم 443

الاختبار

ازاي نعرف اذا كان التطبيق بيعتمد علي HTTP او HTTPS ؟

1- ممكن نستخد nmap علشان نعرف المنافذ(ports) المفتوحة وبالتالي نحدد نوع البروتوكول المستخدم.

2- المتصفح ممكن من خلال ال URL نحدد نوع البروتوكول ولو عايزين نشوف تفاصيل اكتر يبقي من خلال ال developers tools

3- البروكسي زي burpsuite

هل احنا بنشوف التطبيق بيتسخدم HTTPS ولا لا وخلاص ولا في حاجة تاني؟

في حاجة تانية مهمة جدا بجانب استخدام التشفير وهو ضمان نقل جميع البيانات من خلال اتصال مشفر, بعد ما بنعرف هل الموقع بيدعم التشفير ولا لا, بنبدأ نحلل التطبيق تحدديا الطلبات اللي بنبعتها ورد التطبيق عليها.

اي رد التطبيق لو العميل (Client) بعت طلب (Request) HTTP؟

في احتمالين:

الاول وهو ان التطبيق يرد يرد بالمورد (Resource) اللي المستخدم طلبه في نفس الاتصال, ودا سلوك سئ

الثاني وهو ان التطبيق يعيد توجيه (redirection) المستخدم علشان يبدأ اتصال مشفر الاول وبعدين يرد عليه بالمورد(resource) اللي طلبه, ودا اللي احنا عايزينه

علشان نختبر التطبيق هنستخدم اداة اسمها curl (ودي command line tool بتدعم مجموعة واسعة من البروتوكولات من ضمنهم ال HTTP)

في المثال الاول بعتنا HTTP Request ل twitter رد علينا بال status code 301 وال location header فيها عنوان الموقع لاكن بالنسخة المشفرة معني كدا ان اي request بنبعته علي المنفذ(port) رقم 80 ,تويتر مش هيرد باي بيانات ويعمل اعداة توجيه (redirection)للعميل او المستخدم للنسخة المشفرة (HTTPS) فالعميل هيبدأ اتصال مشفر ويبدأ يبعت ويستلم البيانات بشكل امن

في الصورة دي حاولت اعمل login علي twitter ولاكن من خلال اتصال HTTP بردو عملي اعادة توجية علشان استخدم HTTPS

في المثال الثاني طلبنا example.com ولاكن الموقع رد بالمورد(Resource) المطلوب في اتصال غير مشفر بالرغم من ان الموقع بيدعم الاتصال المشفر, لو حد اعترض الاتصال بقا له القدرة علي تعديل البيانات او سرقتها, مثلا لو جينا نسجل الدخول وكتبا في المتصفح example.com وضغطنا Enter المتصفح اول حاجة هيتصل علي المنفذ (port) رقم 80 وهيبعت ويستلم البيانات بشكل غير مشفر لان الموقع ما عملش اعادة توجيه للمتصفح علشان يستخدم النسخة المشفرة بالتالي لما تكتب اسم المستخدم وكلمة المرور وتدوس login, اي حد هيعترض الاتصال يقدر يسرق بياناتك وبالتالي يسرق حسابك (Account Takeover)

الشخص القادر علي اعتراض الاتصال ممكن يكون معاك في نفس الشبكة او مزود خدمة الانترنت او مزود خدمة ال VPN

الحلول

1- استخدام HTTPS بدل HTTP

2- اعادة توجية جميع الطلبات من HTTP الي HTTPS

3 - استخدام HSTS (HTTP Strict Transport Security): ودي اَليه امان التطبيق او الخادم (server) بيعرف نفسه بيها انو مينفعش تتصل عليه غير من خلال اتصال مشفر ودا عن طريق response header لما المتصفح بيشوف ال header دي مش بيتصل علي الموقع بعد كدا غير من خلال اتصال HTTPS

Strict-Transport-Security: max-age=63072000

المصادر

1- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security

2- https://www.upguard.com/blog/hsts

3- https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/04-Authentication_Testing/01-Testing_for_Credentials_Transported_over_an_Encrypted_Channel.html

4- https://blog.templatetoaster.com/redirect-http-to-https/

Last updated