التشفير المزدوج
التشفير المزدوج هو عملية تشفير البيانات مرتين متتاليتين باستخدام نفس نظام التشفير. ويُستخدم عادةً كتقنية هجومية لتجاوز أنظمة المصادقة أو مرشحات الأمان التي تعترض مدخلات المستخدم. في هجمات التشفير المزدوج ضد مرشحات الأمان، تُستبدل أحرف الحمولة التي تعتبرها هذه المرشحات غير مسموح بها بنسختها المشفرة مرتين.
يُعدّ التشفير المزدوج لعنوان URI نوعًا خاصًا من التشفير المزدوج، حيث يتم تشفير البيانات باستخدام عنوان URI مرتين متتاليتين. وقد استُخدم هذا النوع لتجاوز أنظمة المصادقة وفلاتر الأمان ضد هجمات حقن التعليمات البرمجية ، واختراق الدليل ، وهجمات البرمجة النصية عبر المواقع (XSS)، وهجمات حقن SQL .
وصف
في التشفير المزدوج، يتم تشفير البيانات مرتين متتاليتين باستخدام نفس نظام التشفير، أي أن شكل البيانات المشفر مرتين Xهو Encode(Encode(X))حيث Encodeتمثل دالة التشفير. [ 1 ]
يُستخدم التشفير المزدوج عادةً كتقنية هجومية لتجاوز أنظمة المصادقة أو مرشحات الأمان التي تعترض مدخلات المستخدم. [ 2 ] في هجمات التشفير المزدوج ضد مرشحات الأمان، تُستبدل أحرف الحمولة التي تُعتبر غير قانونية من قِبل هذه المرشحات بصيغتها المشفرة مرتين. [ 3 ] قد تُعامل مرشحات الأمان البيانات Xوصيغتها المشفرة على أنها غير قانونية. [ 4 ] ومع ذلك، لا يزال من الممكن أن لا تُعامل Encode(Encode(X))البيانات المشفرة مرتين، وهي الصيغة المشفرة مرتين X، على أنها غير قانونية من قِبل مرشحات الأمان، وبالتالي تمر عبرها، ولكن لاحقًا، قد يستخدم النظام المستهدف الصيغة المُفككة مرتين من البيانات Encode(Encode(X))، وهي Xالصيغة التي كانت ستُعاملها المرشحات على أنها غير قانونية. [ 5 ]
ترميز URI مزدوج
التشفير المزدوج لـ URI، والذي يُشار إليه أيضًا بالتشفير المئوي المزدوج، هو نوع خاص من التشفير المزدوج حيث يتم تشفير البيانات باستخدام URI مرتين متتاليتين. [ 6 ] بعبارة أخرى، يكون شكل البيانات المشفر باستخدام URI المزدوج Xهو URI-encode(URI-encode(X)). [ 7 ] على سبيل المثال، لحساب شكل البيانات المشفر باستخدام URI المزدوج <، يتم أولاً <تشفيرها باستخدام URI كـ %3C، ثم يتم تشفيرها بدورها باستخدام URI كـ %253C، أي double-URI-encode(<) = URI-encode(URI-encode(<)) = URI-encode(%3C) = %253C. [ 8 ] كمثال آخر، لحساب شكل البيانات المشفر باستخدام URI المزدوج ../، يتم أولاً ../تشفيرها باستخدام URI كـ %2E%2E%2F، ثم يتم تشفيرها بدورها باستخدام URI كـ %252E%252E%252F، أي double-URI-encode(../) = URI-encode(URI-encode(../)) = URI-encode(%2E%2E%2F) = %252E%252E%252F. [ 9 ]
يُستخدم ترميز URI المزدوج عادةً كتقنية هجومية ضد تطبيقات الويب ومتصفحات الويب لتجاوز أنظمة المصادقة وفلاتر الأمان التي تعترض مدخلات المستخدم . [ 10 ] [ 11 ] على سبيل المثال ، نظرًا لاستخدام و ....%2E%252E.%252E.
استُخدمت هجمات التشفير المزدوج لـ URI لتجاوز أنظمة المصادقة وفلاتر الأمان ضد حقن التعليمات البرمجية، واختراق الدليل، وXSS، وحقن SQL. [ 14 ]
وقاية
قد يسمح فك تشفير بعض مدخلات المستخدم مرتين باستخدام نفس آلية فك التشفير، مرة قبل تطبيق إجراء أمني ومرة بعده، بهجمات التشفير المزدوج لتجاوز ذلك الإجراء الأمني. [ 15 ] لذا، ولمنع هجمات التشفير المزدوج، يجب أن تتم جميع عمليات فك التشفير على مدخلات المستخدم قبل آليات المصادقة وفلاتر الأمان التي تعترض مدخلات المستخدم. [ 16 ]
أمثلة
PHP
في لغة برمجة PHP ، يتم فك تشفير عناصر البيانات في `<data> ` و` <data>` بشكل كافٍ، لذا ينبغي على المبرمجين تجنب استدعاء الدالة `<data>` عليها. [ 17 ] يؤدي استدعاء الدالة `<data>` على بيانات تمت قراءتها من ` <data>` أو `<data>` إلى فك تشفير البيانات مرة أخرى، مما قد يفتح المجال لهجمات التشفير المزدوج.$_GET$_REQUESTurldecodeurldecode$_GET$_REQUEST
اجتياز الدليل
في برنامج PHP التالي، تُستخدم قيمة `<file>` $_GET["file"]لإنشاء مسار الملف المراد إرساله إلى المستخدم. هذا يُتيح إمكانية شنّ هجمات اختراق المسار التي تُدمج حمولتها في مُعامل HTTP GET file. كإجراء أمني ضد هجمات اختراق المسار، يبحث هذا البرنامج في القيمة التي يقرأها من `<file>` $_GET["file"]عن تسلسلات اختراق المسار، ويتوقف إذا وجد أحدها. مع ذلك، بعد هذا الفحص، يقوم البرنامج بفك تشفير URI للبيانات التي قرأها من `<file>` $_GET["file"]، مما يجعله عرضةً لهجمات التشفير المزدوج لـ URI.
<?php /* لاحظ أن $_GET قد تم فك تشفير URI بالفعل */ $path = $_GET [ "file" ];/* فلتر الأمان */ /* الخروج إذا احتوى إدخال المستخدم على تسلسل اختراق الدليل */ إذا ( strstr ( $path , "../" ) أو strstr ( $path , ".. \\ " )) { exit ( "تم اكتشاف محاولة اختراق الدليل." ); }/* فك تشفير مدخلات المستخدم باستخدام URI مرة أخرى */ $path = urldecode ( $path );/* إنشاء مسار الملف المراد إرساله باستخدام مدخلات المستخدم */ echo htmlentities ( file_get_contents ( "uploads/" . $path ));يقوم هذا المرشح بحظر حمولات مثل
../../../../etc/passwd
وشكلها المشفر باستخدام URI
%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2Fetc%2Fpasswd
لكن عندما يتم ترميز الحمولة المذكورة أعلاه بشكل مزدوج على النحو التالي
%252E%252E%252F%252E%252E%252F%252E%252E%252F%252E%252E%252Fetc%252Fpasswd
سيتجاوز هذا الفلتر، لأن قيمة $_GET["file"]ستكون النسخة المشفرة مرة واحدة. عندما يتم تشفير الحمولة مرة واحدة، فإنها لا تحتوي على أي تسلسل لاجتياز الدليل، وبالتالي تمر عبر الفلتر دون تغيير. بمجرد تمريرها إلى الدالة urldecode، ستصبح ../../../../etc/passwd، مما يؤدي إلى هجوم ناجح.
البرمجة النصية عبر المواقع
في برنامج PHP التالي، تُستخدم قيمة `<T>` $_GET["name"]لإنشاء رسالة تُعرض للمستخدم. هذا يُعرّض البرنامج لهجمات البرمجة النصية عبر المواقع (XSS) التي تُدمج حمولتها في مُعامل HTTP GET name. كإجراء أمني ضد هجمات XSS، يُعقّم البرنامج القيمة التي يقرأها من `<T>` $_GET["name"]باستخدام htmlentitiesالدالة `<T>`. مع ذلك، بعد هذه المعالجة، يُفك تشفير البيانات المقروءة من `<T>` باستخدام URI $_GET["name"]، مما يجعله عُرضة لهجمات التشفير المزدوج لـ URI.
<?php /* لاحظ أن $_GET قد تم فك تشفيرها بالفعل باستخدام URI */ $name = $_GET [ "name" ];/* فلتر الأمان */ /* تنظيف مدخلات المستخدم باستخدام htmlentity */ $name = htmlentities ( $name );/* فك تشفير مدخلات المستخدم باستخدام URI مرة أخرى */ $name = urldecode ( $name );/* إنشاء رسالة لعرضها باستخدام مدخلات المستخدم */ echo "Hello " . $name ;يقوم هذا المرشح بحظر حمولات مثل
<script> alert ( 123 ) </script>وشكلها المشفر باستخدام URI
%3Cscript%3Ealert%28123%29%3C%2Fscript%3E
لكن عندما يتم ترميز الحمولة بشكل مزدوج على النحو التالي
%253Cscript%253Ealert%2528123%2529%253C%252Fscript%253E
سيتجاوز هذا الفلتر، لأن قيمة $_GET["name"]المتغير ستكون بصيغة التشفير الأحادي. لا تحتوي صيغة التشفير الأحادي على أي أحرف غير مسموح بها، وستمر عبر الدالة htmlentitiesدون تغيير. بعد ذلك، بمجرد أن urldecodeتقوم الدالة بفك تشفيرها للمرة الثانية، ستصبح القيمة، مما يؤدي إلى هجوم ناجح.<script>alert(123)</script>
مصادر
- كابيك (2022). "كابيك-120: التشفير المزدوج" . capec.mitre.org . 3.7 . تاريخ الاسترجاع: 23 يوليو 2022 .
- CWE (2022). "CWE-174: فك تشفير مزدوج لنفس البيانات" . cwe.mitre.org . 4.8 . تاريخ الاسترجاع: 23 يوليو 2022 .
- إمبيرفا (2022). "ترميز عنوان URL المزدوج" . docs.imperva.com . تم الاطلاع عليه بتاريخ 23 يوليو 2022 .
- OWASP (2022). "التشفير المزدوج" . owasp.org . تم الاطلاع عليه بتاريخ 23 يوليو 2022 .
- PHP (2022). "urldecode" . php.net . تم الاطلاع عليه بتاريخ 23 يوليو 2022 .
- بورت سويغر (2022). "هجمات التمويه باستخدام التشفير" . portswigger.net . التمويه عبر تشفير عنوان URL المزدوج . تم الاطلاع عليه بتاريخ 23 يوليو 2022 .
- براساد، براخار (2016). "التشفير المزدوج" . إتقان اختبار اختراق الويب الحديث . دار نشر باكت. الصفحات 11-14 . ISBN 978-1785284588.
مراجع
- ↑ CAPEC 2022 ، الوصف . "يستخدم الخصم تكرار عملية التشفير لمجموعة من الأحرف (أي تشفير حرف، تشفير حرف، تشفير حرف) لإخفاء حمولة طلب معين."
- ↑ مؤتمر CAPEC 2022 ، الوصف، مسار التنفيذ . "قد يسمح هذا [التشفير المزدوج] للمهاجم بتجاوز المرشحات التي تحاول اكتشاف الأحرف أو السلاسل غير المسموح بها، مثل تلك التي قد تُستخدم في هجمات الاختراق أو الحقن [...] على سبيل المثال، من خلال التشفير المزدوج لبعض الأحرف في عنوان URL (مثل النقاط والشرطات المائلة)، قد يحاول المهاجم الوصول إلى موارد مقيدة على خادم الويب أو إجبار المتصفح على تصفح صفحات محمية (وبالتالي تخريب خدمة المصادقة). كما يمكن للمهاجم محاولة تنفيذ هجمات حقن أخرى باستخدام نمط الهجوم هذا: حقن الأوامر، حقن SQL، إلخ."
- ↑ مؤتمر CAPEC 2022 ، الوصف، مسار التنفيذ . "قد يسمح هذا [التشفير المزدوج] للمهاجم بتجاوز المرشحات التي تحاول اكتشاف الأحرف أو السلاسل غير المسموح بها، مثل تلك التي قد تُستخدم في هجمات الاختراق أو الحقن. [...] جرّب التشفير المزدوج لأجزاء من المدخلات لمحاولة تجاوز المرشحات."
- ↑ OWASP 2022 ، الوصف . "باستخدام التشفير المزدوج، من الممكن تجاوز مرشحات الأمان التي تقوم بفك تشفير مدخلات المستخدم مرة واحدة فقط."
- ↑ OWASP 2022 ، الوصف : "باستخدام التشفير المزدوج، يُمكن تجاوز مرشحات الأمان التي تُفك تشفير مُدخلات المستخدم مرة واحدة فقط. تُنفَّذ عملية فك التشفير الثانية بواسطة منصة الواجهة الخلفية أو الوحدات التي تُعالج البيانات المُشفَّرة بشكل صحيح، ولكنها لا تحتوي على فحوصات الأمان المُناسبة."
- ↑ براساد 2016 ، ص 11. "الترميز المئوي المزدوج هو نفسه الترميز المئوي مع اختلاف بسيط يتمثل في أن كل حرف يتم ترميزه مرتين بدلاً من مرة واحدة."
- ↑ براساد 2016 ، ص 11. "الترميز المئوي المزدوج هو نفسه الترميز المئوي مع اختلاف بسيط يتمثل في أن كل حرف يتم ترميزه مرتين بدلاً من مرة واحدة."
- ↑ براساد 2016 ، ص 11. "لذا، إذا أردتُ ترميز < باستخدام الترميز المزدوج، فسأقوم أولاً بترميزه إلى تنسيقه المرمز بنسبة مئوية، وهو %3c، ثم أقوم بترميز رمز% مرة أخرى بنسبة مئوية. وستكون النتيجة %253c."
- ↑ OWASP 2022 ، الوصف . "على سبيل المثال، يُمثل الرمز ../ (نقطة-نقطة-شرطة مائلة) %2E%2E%2F في التمثيل الست عشري. عند إعادة ترميز الرمز %، يكون تمثيله في الشفرة الست عشرية %25. ستكون نتيجة عملية الترميز المزدوجة ../ (نقطة-نقطة-شرطة مائلة) هي %252E%252E%252F"
- ↑ براساد 2016 ، ص 11. "تُعد هذه التقنية [الترميز المضاعف] مفيدة للغاية عند محاولة التهرب من المرشحات التي تحاول حظر بعض الأحرف المشفرة".
- ↑ مؤتمر CAPEC 2022 ، مسار التنفيذ . "على سبيل المثال، من خلال التشفير المزدوج لبعض الأحرف في عنوان URL (مثل النقاط والشرطات المائلة)، قد يحاول المهاجم الوصول إلى موارد مقيدة على خادم الويب أو إجبار المتصفح على تصفح صفحات محمية (وبالتالي تعطيل خدمة المصادقة). كما يمكن للمهاجم محاولة تنفيذ هجمات حقن أخرى باستخدام نمط الهجوم هذا: حقن الأوامر، وحقن SQL، وما إلى ذلك."
- ↑ CAPEC 2022 ، الوصف . "على سبيل المثال، يمكن ترميز النقطة (.)، التي تُستخدم غالبًا في هجمات اختراق المسار، وبالتالي غالبًا ما يتم حظرها بواسطة المرشحات، في عنوان URL على أنها %2E. ومع ذلك، فإن العديد من المرشحات تتعرف على هذا الترميز وستظل تحظر الطلب."
- ↑ CAPEC 2022 ، الوصف . "في حالة التشفير المزدوج، سيتم تشفير % في تشفير عنوان URL أعلاه مرة أخرى كـ %25، مما ينتج عنه %252E الذي قد لا تلتقطه بعض المرشحات، ولكن لا يزال من الممكن تفسيره على أنه نقطة (.) بواسطة المفسرات على الهدف."
- ↑ CWE 2022 ، أمثلة مُلاحظة .
- ↑ CWE 2022 ، الوصف . "يقوم البرنامج بفك تشفير نفس المدخل مرتين، مما قد يحد من فعالية أي آلية حماية تحدث بين عمليات فك التشفير."
- ↑ CWE 2022 ، التدابير التخفيفية المحتملة . "يجب فك تشفير المدخلات وتوحيدها وفقًا للتمثيل الداخلي الحالي للتطبيق قبل التحقق من صحتها (CWE-180)."
- ↑ ملاحظات PHP 2022. "تحذير: المتغيرات العامة $_GET و$_REQUEST مُفكّكة بالفعل. قد يؤدي استخدام urldecode() على عنصر في $_GET أو $_REQUEST إلى نتائج غير متوقعة وخطيرة."
روابط خارجية
- ثغرات أمنية في الويب
