شفرة شل
الشيفرة الخبيثة هي شيفرة قابلة للتنفيذ مصممة للاستخدام كحمولة لاستغلال ثغرة أمنية في البرمجيات . يتضمن المصطلح كلمة "shell" لأن الهجوم كان يُوصف في الأصل بأنه هجوم يفتح واجهة أوامر (shell shell ) يمكن للمهاجم استخدامها للتحكم في الجهاز المستهدف، ولكن أي شيفرة يتم حقنها للحصول على وصول غير مسموح به يمكن تسميتها شيفرة خبيثة. لهذا السبب، يعتبر البعض تسمية الشيفرة الخبيثة غير دقيقة. [ 1 ]
عادةً ما تتضمن الهجمات حقن بيانات تحتوي على تعليمات برمجية قابلة للتنفيذ في عملية ما قبل أو أثناء استغلالها لثغرة أمنية للسيطرة عليها. ويتم ضبط عداد البرنامج على نقطة دخول التعليمات البرمجية الخبيثة لتشغيلها. ويتم نشر هذه التعليمات غالبًا عن طريق تضمينها في ملف تقوم العملية المعرضة للخطر بتنزيله ثم تحميله في ذاكرتها.
تشير الحكمة الشائعة إلى أنه لتحقيق أقصى قدر من الفعالية، يجب أن يكون حجم حمولة الشيفرة الخبيثة صغيرًا. [ 2 ] يوفر رمز الآلة المرونة اللازمة لتحقيق الهدف. يستغل مطورو الشيفرة الخبيثة التعليمات البرمجية الصغيرة لإنشاء شيفرة خبيثة مضغوطة. [ 3 ] [ 4 ]
الأنواع
- محلي
يُمكّن هجوم الشيفرة الخبيثة المحلية المهاجم من الحصول على صلاحيات وصول مُوسّعة على جهازه. في بعض الحالات، يُمكن استغلال ثغرة أمنية عن طريق إحداث خطأ مثل تجاوز سعة المخزن المؤقت . في حال نجاح الهجوم، تُتيح الشيفرة الخبيثة الوصول إلى الجهاز عبر الصلاحيات المُوسّعة الممنوحة للعملية المُستهدفة.
- بعيد
يستهدف هجوم الشيفرة الخبيثة عن بُعد عمليةً تعمل على جهاز بعيد - سواءً على نفس الشبكة المحلية أو شبكة الإنترانت أو الإنترنت . في حال نجاحه، تُتيح الشيفرة الخبيثة الوصول إلى الجهاز المستهدف عبر الشبكة. وعادةً ما تفتح هذه الشيفرة اتصال TCP/IP للسماح بالوصول إلى واجهة سطر الأوامر على الجهاز المستهدف.
يمكن تصنيف هجوم الشيفرة الخبيثة عن بُعد حسب سلوكه. إذا أنشأت الشيفرة الخبيثة الاتصال، تُسمى " صدفة عكسية" أو "شيفرة خبيثة للاتصال العكسي ". أما إذا أنشأ المهاجم الاتصال، فتُسمى الشيفرة الخبيثة "صدفة ربط " لأنها ترتبط بمنفذ معين على جهاز الضحية. وتتجاوز " صدفة الربط" منفذًا عشوائيًا وتستمع على منفذ عشوائي. [ أ ] تُعد شيفرة إعادة استخدام المقبس ثغرة أمنية تُنشئ اتصالًا بالعملية المُعرَّضة للخطر دون إغلاقه قبل تشغيل الشيفرة الخبيثة، مما يسمح لها بإعادة استخدام هذا الاتصال للوصول عن بُعد. وتُعد شيفرة إعادة استخدام المقبس أكثر تعقيدًا، إذ تحتاج الشيفرة الخبيثة إلى تحديد الاتصال الذي ستعيد استخدامه، وقد يحتوي الجهاز على العديد من الاتصالات المفتوحة. [ 5 ]
يستطيع جدار الحماية رصد الاتصالات الصادرة التي تُنشئها شيفرة برمجية تعتمد على إعادة الاتصال، بالإضافة إلى الاتصالات الواردة التي تُنشئها برمجيات خبيثة تعتمد على ربط الأنظمة، وبالتالي يوفر حماية جزئية ضد الهجمات. حتى في حال وجود ثغرة أمنية في النظام، يمكن لجدار الحماية منع المهاجم من الاتصال بالواجهة البرمجية التي أنشأتها الشيفرة البرمجية. أحد أسباب استخدام الشيفرة البرمجية التي تعتمد على إعادة استخدام المقابس هو أنها لا تُنشئ اتصالات جديدة، مما يجعل اكتشافها وحظرها أكثر صعوبة.
- قم بتنزيل الملف وتشغيله
هجوم تنزيل وتنفيذ الشيفرة الخبيثة يقوم بتنزيل برمجيات خبيثة وتنفيذها على النظام المستهدف. لا يُنشئ هذا النوع من الشيفرة الخبيثة واجهة سطر أوامر، بل يُوجّه الجهاز لتنزيل ملف تنفيذي مُحدد من الشبكة وتشغيله. يُستخدم هذا النوع من الهجمات بكثرة في هجمات التنزيل التلقائي ، حيث يزور الضحية صفحة ويب خبيثة تُحاول بدورها تشغيل شيفرة خبيثة من هذا النوع لتثبيت برامج على جهاز الضحية.
يقوم أحد أشكال هذا الهجوم بتنزيل وتحميل مكتبة . [ 6 ] [ 7 ] تتمثل مزايا هذه التقنية في إمكانية صغر حجم الكود، وعدم الحاجة إلى إنشاء عملية جديدة على النظام المستهدف بواسطة الكود الخبيث، وعدم الحاجة إلى كود لتنظيف العملية المستهدفة حيث يمكن للمكتبة المحملة في العملية القيام بذلك.
- تم إعداده
عندما تكون كمية البيانات التي يمكن للمهاجم حقنها في العملية المستهدفة محدودة للغاية بحيث لا تحقق التأثير المطلوب، قد يكون من الممكن نشر شيفرة خبيثة على مراحل توفر وصولاً متزايداً. قد لا تفعل المرحلة الأولى أكثر من تنزيل المرحلة الثانية التي توفر بدورها الوصول المطلوب.
- البحث عن البيض
هجوم البحث عن البيضة هو هجوم مُرتّب، حيث يقوم المهاجم بحقن شيفرة خبيثة في عملية ما دون أن يعلم مكانها داخل العملية. تُحقن شيفرة خبيثة ثانية، أصغر حجمًا عادةً من الأولى، في العملية للبحث في مساحة عناوينها عن الشيفرة الأولى (البيضة ) ثم تُنفّذها. [ 8 ]
- أومليت
هجوم "أومليت شيل كود"، المشابه لهجوم "إيغ هانت"، يبحث عن عدة كتل صغيرة من البيانات ( بيض ) ويجمعها في كتلة أكبر ( أومليت ) يتم تنفيذها بعد ذلك. يُستخدم هذا الهجوم عندما يكون حجم الكود المُحقون محدودًا لدى المهاجم، ولكنه قادر على حقن عدة كتل. [ 9 ]
التشفير
غالبًا ما تُكتب أكواد Shellcode للتحايل على القيود المفروضة على البيانات التي تسمح بها عملية معينة. تشمل التقنيات العامة ما يلي:
- تحسين الحجم
قم بتحسين الكود لتقليل حجمه.
- كود ذاتي التعديل
قم بتعديل الكود الخاص به قبل تنفيذه لاستخدام قيم البايت التي تكون مقيدة بخلاف ذلك.
- التشفير
لتجنب اكتشاف الاختراق ، قم بالتشفير كفك تشفير ذاتي أو متعدد الأشكال .
- ترميز الأحرف
قد يقوم هجوم يستهدف متصفحًا بإخفاء شيفرة برمجية في سلسلة جافا سكريبت باستخدام ترميز أحرف موسع. [ 10 ] على سبيل المثال، في بنية IA-32 ، إليك تعليمتان غير مشفرتين لا تُنفذان أي عملية (مستخدمتان في شريحة NOP ):
90 NOP 90 NOP
كما هو مُشفّر:
- النسبة المئوية المشفرة :
unescape("%u9090") - حرفية يونيكود :
\u9090 - مرجع الأحرف في HTML/XML :
邐أو邐
- خالٍ من القيم الفارغة
يجب كتابة الشيفرة الخبيثة بدون بايتات ذات قيمة صفرية عند الرغبة في حقنها في سلسلة منتهية بحرف فارغ ، والتي تُنسخ في العملية المستهدفة باستخدام الخوارزمية المعتادة (مثل strcpy ) لإنهاء النسخ عند أول بايت صفري - يُسمى الحرف الفارغ في مجموعات الأحرف الشائعة . إذا احتوت الشيفرة الخبيثة على حرف فارغ، فسيتم اقتطاع النسخة ولن تعمل بشكل صحيح. لإنتاج شيفرة خالية من الأحرف الفارغة من شيفرة تحتوي على أحرف فارغة، يمكن استبدال تعليمات الآلة التي تحتوي على أصفار بتعليمات لا تحتوي عليها. على سبيل المثال، في بنية IA-32 ، تحتوي تعليمة ضبط المسجل EAX على 1 على أصفار كجزء من القيمة الحرفية ( 1يتم توسيعها إلى 1 0x00000001).
B8 01000000 MOV EAX,1
تُحقق التعليمات التالية نفس الهدف (وجود 1 في EAX) بدون تضمين بايتات صفرية عن طريق ضبط EAX أولاً على 0، ثم زيادة EAX إلى 1:
33C0 XOR EAX,EAX 40 INC EAX
- نص
يتكون رمز الاختراق الأبجدي الرقمي من أحرف أبجدية رقمية فقط (من 0 إلى 9، ومن A إلى Z، ومن a إلى z). [ 11 ] [ 12 ] ابتكر المخترقون هذا النوع من التشفير لإخفاء شيفرة الآلة داخل ما يبدو كنص عادي . قد يكون هذا مفيدًا لتجنب اكتشاف الشيفرة، إذ يسمح لها بالمرور عبر المرشحات التي تزيل الأحرف غير الأبجدية الرقمية من السلاسل النصية. [ ب ] يُطلق على نوع مشابه من التشفير اسم "الشيفرة القابلة للطباعة " ، ويستخدم جميع الأحرف القابلة للطباعة (الأحرف الأبجدية الرقمية بالإضافة إلى رموز مثل !@#%^&*). وهناك نوع آخر مقيد بنفس القدر يُسمى " الشيفرة القابلة للتنفيذ عند الصدى"، ولا يحتوي على أي أحرف غير مقبولة بواسطة أمر ECHO . وقد ثبت أنه من الممكن إنشاء رمز اختراق يبدو كنص عادي باللغة الإنجليزية. [ 13 ] تتطلب كتابة مثل هذا الرمز فهمًا معمقًا لبنية مجموعة تعليمات الأجهزة المستهدفة. لقد ثبت أنه من الممكن كتابة رمز أبجدي رقمي قابل للتنفيذ على أكثر من جهاز واحد، [ 14 ] وبالتالي يشكل رمزًا قابلًا للتنفيذ متعدد البنية .
نشر ريكس حلاً بديلاً في مجلة Phrack 57 [ 11 ] ، حيث بيّن إمكانية تحويل أي كود إلى كود أبجدي رقمي. غالبًا ما يُستغل الكود ذاتي التعديل لأنه يسمح للكود باحتواء قيم بايت غير مسموح بها في الأحوال العادية، وذلك باستبدال القيم المشفرة أثناء التشغيل. يمكن إنشاء مُفكِّك شفرة ذاتي التعديل يستخدم في البداية البايتات المسموح بها فقط. يُشفَّر الكود الرئيسي للشيل كود، باستخدام البايتات ضمن النطاق المسموح به فقط. عند تشغيل الشيل كود الناتج، يُعدِّل مُفكِّك الشفرة كوده لاستخدام التعليمات التي يحتاجها، ثم يفك تشفير الشيل كود الأصلي. بعد فك تشفير الشيل كود، ينقل مُفكِّك الشفرة التحكم إليه. وقد ثبت أنه من الممكن إنشاء شيل كود معقد كيفما شاء يبدو كنص إنجليزي عادي. [ 13 ]
تستخدم البرامج الحديثة نظام يونيكود لدعم التدويل والترجمة . غالبًا ما يتم تحويل نص ASCII المُدخل إلى يونيكود قبل المعالجة. عند تحويل حرف ASCII ( لاتين-1 عمومًا) إلى UTF-16 (يونيكود 16 بت)، يُضاف بايت صفري بعد كل بايت (حرف) من النص الأصلي. أثبت أوبسكو في Phrack 61 [ 12 ] أنه من الممكن كتابة شيفرة برمجية خبيثة (shellcode) تعمل بنجاح بعد هذا التحويل. توجد برامج قادرة على ترميز أي شيفرة برمجية خبيثة تلقائيًا إلى شيفرة برمجية خبيثة أبجدية رقمية مقاومة لترميز UTF-16، وذلك استنادًا إلى نفس مبدأ مُفكِّك الشفرة الصغير ذاتي التعديل الذي يفك تشفير الشيفرة البرمجية الخبيثة الأصلية.
التوافق
عادةً ما يُنشر الشيفرة الخبيثة كلغة الآلة، لأنها تتيح الوصول غير المحمي نسبيًا إلى العملية المستهدفة. ولأن لغة الآلة متوافقة ضمن سياق حوسبة محدود نسبيًا ( المعالج ، نظام التشغيل ، وما إلى ذلك)، فإن توافق جزء الشيفرة الخبيثة يكون محدودًا . كذلك، ولأن هجوم الشيفرة الخبيثة يكون أكثر فعالية عندما يكون حجم الشيفرة صغيرًا، واستهداف ثغرات متعددة يزيد من حجمها، فإن الشيفرة عادةً ما تستهدف ثغرة واحدة فقط. مع ذلك، يمكن لجزء واحد من الشيفرة الخبيثة أن يعمل في سياقات وثغرات متعددة. [ 15 ] [ 16 ] [ 17 ] ويمكن تحقيق التنوع من خلال إنشاء جزء واحد يحتوي على تطبيق لسياقات متعددة. تتفرع الشيفرة الشائعة إلى تطبيق سياق وقت التشغيل.
تحليل
بما أن الشيفرة الخبيثة (shellcode) لا تُنفَّذ عادةً بشكل مستقل، فإنه لدراسة وظيفتها، يتم تحميلها عادةً في عملية خاصة. إحدى التقنيات الشائعة هي كتابة برنامج C صغير يحتوي على الشيفرة الخبيثة كبيانات (أي في مخزن مؤقت للبايتات)، ثم يُنقل التحكم إلى التعليمات المُشفَّرة في مؤشر دالة البيانات أو شيفرة التجميع المضمنة . تقنية أخرى هي استخدام أداة عبر الإنترنت، مثل shellcode_2_exe ، لتضمين الشيفرة الخبيثة في ملف تنفيذي جاهز يمكن تحليله باستخدام مصحح أخطاء قياسي. توجد أيضًا أدوات تحليل متخصصة للشيفرة الخبيثة، مثل مشروع iDefense sclog (الذي صدر لأول مرة عام 2005 ضمن حزمة Malcode Analyst Pack). صُمِّم Sclog لتحميل ملفات الشيفرة الخبيثة الخارجية وتنفيذها ضمن إطار عمل لتسجيل واجهة برمجة التطبيقات (API). كما توجد أدوات تحليل للشيفرة الخبيثة تعتمد على المحاكاة، مثل تطبيق sctest الذي يُعد جزءًا من حزمة libemu متعددة المنصات. أداة أخرى لتحليل الشفرة البرمجية تعتمد على المحاكاة، مبنية حول مكتبة libemu، وهي scdbg التي تتضمن غلاف تصحيح أساسي وميزات إعداد تقارير متكاملة.
انظر أيضاً
- أمن الحاسوب – حماية أنظمة الحاسوب من تسريب المعلومات أو سرقتها أو تلفها
- تجاوز سعة الذاكرة المخصصة – خلل برمجي
- مشروع ميتا سبلويت – أداة لاختبار أمن الحاسوب. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
- مفهوم أمن شبكات الحاسوب: تجريف الأصداف
- تجاوز سعة المخزن المؤقت للمكدس - خلل برمجي
ملحوظات
مراجع
- ↑ فوستر، جيمس سي؛ برايس، مايك (12 أبريل 2005). المقابس، وشفرات البرامج، والنقل، والبرمجة: هندسة عكسية للثغرات الأمنية وبرمجة الأدوات لمتخصصي الأمن . كتب إلسيفير للعلوم والتكنولوجيا. ISBN 1-59749-005-9.
- ↑ أنلي، كريس؛ كوزيول، جاك (2007). دليل مبرمج البرمجيات الخبيثة: اكتشاف واستغلال الثغرات الأمنية ( الطبعة الثانية). إنديانابوليس، إنديانا، الولايات المتحدة الأمريكية: وايلي. ISBN 978-0-470-19882-7. OCLC 173682537 .
- ↑ فوستر، جيمس سي. (2005). هجمات تجاوز سعة المخزن المؤقت: الكشف، والاستغلال، والوقاية . روكلاند، ماساتشوستس، الولايات المتحدة الأمريكية: سينغريس. ISBN 1-59749-022-9. OCLC 57566682 .
- ↑ "Tiny Execve sh - لغة التجميع - Linux/x86" . GitHub . تم الاسترجاع في 1 فبراير 2021 .
- ↑ BHA (2013-06-06). "Shellcode/Socket-reuse" . تم الاسترجاع في 2013-06-07 .
- ↑ سكاي لايند (11 يناير 2010). "تم إصدار شفرة برمجية لتنزيل وتحميل مكتبة البيانات" . مؤرشف من الأصل بتاريخ 23 يناير 2010. تم الاطلاع عليه بتاريخ 19 يناير 2010 .
- ↑ "تنزيل وتحميل شفرة مكتبة البرامج الخبيثة لنظام التشغيل ويندوز x86" . 11 يناير 2010. تم الاطلاع عليه بتاريخ 19 يناير 2010 .
- ↑ سكيب (9 مارس 2004). "البحث الآمن في مساحة العناوين الافتراضية للعمليات" (ملف PDF) . nologin . تم الاطلاع عليه بتاريخ 19 مارس 2009 .
- ↑ سكاي لايند (16 مارس 2009). "شفرة برمجية لـ w32 SEH omelet" . Skypher.com. مؤرشف من الأصل بتاريخ 23 مارس 2009. تم الاطلاع عليه بتاريخ 19 مارس 2009 .
- ↑ "تم اكتشاف عدد كبير من أنماط فك التشفير في جافا سكريبت" . مؤرشف من الأصل بتاريخ 2015-04-03.
- 1 2 rix (2001-08-11). "كتابة أكواد برمجية أبجدية رقمية ia32" . Phrack . 0x0b (57). Phrack Inc. #0x0f من 0x12. مؤرشف من الأصل في 2022-03-08 . تم الاسترجاع في 2022-05-26 .
- 1 2 obscou (2003-08-13). "بناء أكواد برمجية IA32 'مقاومة لليونيكود'" . Phrack . 11 (61). Phrack Inc. #0x0b من 0x0f. مؤرشف من الأصل في 2022-05-26 . تم الاسترجاع في 2008-02-29 .
- 1 2 ماسون، جوشوا؛ سمول، سام؛ مونروز، فابيان؛ ماكمانوس، جريج (نوفمبر 2009). شفرة شيل الإنجليزية (ملف PDF) . وقائع المؤتمر السادس عشر لجمعية ACM لأمن الحاسوب والاتصالات. نيويورك، نيويورك، الولايات المتحدة الأمريكية. الصفحات 524-533 . مؤرشف (ملف PDF) من الأصل بتاريخ 26 مايو 2022. تم الاطلاع عليه بتاريخ 10 يناير 2010 . (10 صفحات)
- ↑ شرحٌ لبرمجيات الاختراق متعددة البنية (x86) وبرمجيات الاختراق الأبجدية الرقمية ذات 64 بت . أكاديمية بلاك هات. مؤرشف من الأصل بتاريخ 21-06-2012.
- ↑ يوجين (11 أغسطس 2001). "بنية تتجاوز شفرة Shellcode" . Phrack . شركة Phrack. الإصدار 0x0e من 0x12. مؤرشف من الأصل بتاريخ 9 نوفمبر 2021. تم الاطلاع عليه بتاريخ 29 فبراير 2008 .
- ↑ نيمو (13 نوفمبر 2005). "نظام التشغيل ماك أو إس إكس - شفرة برمجية متعددة المعماريات" . إفصاح كامل . مؤرشف من الأصل بتاريخ 26 مايو 2022. تم الاسترجاع بتاريخ 26 مايو 2022 .
- ↑ تشا، سانغ كيل؛ باك، برايان؛ بروملي، ديفيد ؛ ليبتون، ريتشارد جاي (8 أكتوبر 2010) [4 أكتوبر 2010]. برامج مستقلة عن المنصة (ملف PDF) . وقائع المؤتمر السابع عشر لجمعية ACM حول أمن الحاسوب والاتصالات (CCS'10). شيكاغو، إلينوي، الولايات المتحدة الأمريكية: جامعة كارنيجي ميلون ، بيتسبرغ، بنسلفانيا، الولايات المتحدة الأمريكية / معهد جورجيا للتكنولوجيا ، أتلانتا، جورجيا، الولايات المتحدة الأمريكية. الصفحات 547-558 . doi : 10.1145/1866307.1866369 . ISBN 978-1-4503-0244-9تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 26-05-2022 . تم الاطلاع عليه بتاريخ 26-05-2022 .(12 صفحة) (انظر أيضًا:)
روابط خارجية
- قاعدة بيانات Shell-Storm لشفرات الاختراق متعددة المنصات.
- مقدمة عن تجاوزات سعة المخزن المؤقت وشفرات البرامج الخبيثة
- أساسيات البرمجة باستخدام Shellcoding (ملف PDF): نظرة عامة على البرمجة باستخدام Shellcoding على معالجات x86 بقلم أنجيلو روسيلو
- مقدمة في تطوير الشيفرة البرمجية
- يحتوي على نماذج لبرمجيات الاستغلال (shellcode) من نوع x86 وغير x86، بالإضافة إلى واجهة عبر الإنترنت لتوليد وتشفير برمجيات الاستغلال تلقائيًا، من مشروع Metasploit.
- أرشيف لشفرات البرامج الخبيثة، مصنف حسب نظام التشغيل .
- برنامج تعليمي لتصميم أكواد البرامج النصية لأنظمة مايكروسوفت ويندوز ولينكس، ينتقل من الأساسيات إلى المستويات المتقدمة .
- برنامج تعليمي حول كتابة أكواد شيل كود لنظامي التشغيل ويندوز ولينكس، يحتوي على أمثلة خطوة بخطوة .
- تبسيط تصميم الشيفرة الخبيثة
- ALPHA3 هو برنامج تشفير shellcode يمكنه تحويل أي shellcode إلى كل من Unicode و ASCII، وأحرف كبيرة وأحرف مختلطة، و shellcode أبجدي رقمي.
- كتابة شفرة برمجية صغيرة بواسطة دافيد ستوتارد. ورقة بيضاء تشرح كيفية جعل الشفرة البرمجية صغيرة قدر الإمكان من خلال تحسين كل من التصميم والتنفيذ.
- كتابة حلقات فك تشفير Shellcode لمجموعة تعليمات IA32 المقيدة بواسطة SkyLined مؤرشفة في 2015-04-03 في Wayback Machine ورقة بيضاء تشرح كيفية إنشاء shellcode عندما تكون البايتات المسموح بها في shellcode مقيدة للغاية.
- BETA3 أداة يمكنها تشفير وفك تشفير الشفرة الخبيثة باستخدام مجموعة متنوعة من التشفيرات الشائعة الاستخدام في عمليات الاستغلال.
- Shellcode 2 Exe - محول عبر الإنترنت لتضمين الشفرة البرمجية في غلاف ملف تنفيذي
- Sclog - إصدار محدّث من أداة تحليل الشفرة الخبيثة iDefense sclog (ويندوز)
- Libemu - مكتبة تحليل الشفرة البرمجية القائمة على المحاكاة (*nix/Cygwin)
- Scdbg - مصحح أخطاء الشفرة البرمجية مبني على مكتبة المحاكاة libemu (*nix/Windows)
- استغلالات الحقن
- مصطلحات الحاسوب
