كود القشرة
في مجال أمن الحاسوب ، يعد كود الشل عبارة عن جزء صغير من كود يتم استخدامه في صورة حمولة في مهاجمة الثغرة الأمنية لأحد البرامج. ويُطلق عليه "كود الشل" نظرًا لأنه يبدأ في العادة في صورة قشرة يمكن للمهاجم من خلالها السيطرة على الماكينة المُعرضة للخطر. وتتم كتابة كود القشرة في العادة في لغة الآلة، ولكن يمكن أن يُطلق اسم كود القشرة على أي جزء من الكود يؤدي مهمة مماثلة. ونظرًا لأن مهمة الحمولة لا تقتصر على تكوين القشرة فحسب، فقد اقترح البعض بأن اسم كود القشرة ليس كافيًا. ومع ذلك، لم تلق محاولات استبدال المصطلح بآخر قبولاً واسعًا.
يمكن أن يكون كود القشرة إما محلي أو عن بُعد، ويعتمد ذلك على ما إذا كان يتيح للمهاجم السيطرة على الماكينة التي يعمل عليها (محلي) أو على ماكينة أخرى عبر الشبكة (عن بُعد).
تم استخدام كود القشرة المحلي من قِبل أحد المهاجمين الذين يتمتعون بوصول محدود لإحدى الماكينات لكن بإمكانه مهاجمة ثغرة أمنية، على سبيل المثال، فيض الدارئ، في عملية ذات ميزة أعلى بتلك الماكينة. وإذا تم تنفيذه بنجاح، فسيوفر كود القشرة للمهاجم الوصول للماكينة عند نفس مستوى الميزات الأعلى للعملية المستهدفة.
يتم استخدام كود القشرة عن بُعد عندما يرغب أحد المهاجمين في استهداف عملية معرضة للخطر تعمل على ماكينة أخرى على شبكة محلية أو إنترانت. وإذا تم تنفيذه بنجاح، فيمكن لكود القشرة أو يتيح للمهاجم الوصول للماكينة المستهدفة عبر الشبكة. وتستخدم أكواد القشرة في العادة اتصالات مأخذ توصيل TCP/IP القياسية للسماح للمهاجم بالوصول إلى القشرة الموجودة على الماكينة المستهدفة. ويمكن تصنيف نوع القشرة هذا استنادًا إلى كيفية إعداد هذا الاتصال: إذا كان بمقدور كود القشرة إنشاء هذا الاتصال، فيُطلق عليه اسم كود قشرة معاودة الاتصال لأن كود القشرة يعاود الاتصال بماكينة المهاجم. من ناحية أخرى، إذا كان المهاجم بحاجة لإنشاء اتصال، فيُطلع على كود القشرة اسم قشرة الربط لأن كود القشرة يرتبط بمنفذ معين يمكن للمهاجم أن يتصل من خلاله للتحكم به. وهناك نوع ثالث، أقل شيوعًا، وهو كود قشرة إعادة استخدام مأخذ التوصيل. ويُستخدم هذا النوع من كود القشرة في بعض الأحيان عندما تقوم إحدى عمليات الهجوم بإنشاء اتصال بالعملية المعرضة للخطر التي لا يتم إغلاقها قبل تشغيل كود القشرة. ويمكن لكود القشرة إعادة استخدام هذا الاتصال للتواصل مع المهاجم. ويصعب إنشاء كود قشرة لإعادة استخدام مأخذ التوصيل لأن كود القشرة بحاجة لاكتشاف أي اتصال لإعادة استخدامه وقد تتوفر لدى الماكينة الكثير من الاتصالات المفتوحة.
يمكن استخدام جدار ناريلاكتشاف الاتصالات الصادرة التي أنشأها كود القشرة لمعاودة الاتصال لقبول الاتصالات الواردة من قِبل كود القشرة. وهذا هو أحد الأسباب وراء استخدام كود قشرة إعادة استخدام مأخذ التوصيل: لأنه لا يقوم بإنشاء اتصالات جديدة ومن ثم يصعب اكتشافه وحجبه.
يعد التنزيل والتنفيذ أحد أنواع كود القشرة عن بُعد التي تقوم بـ تنزيل وتنفيذ بعض أنواع البرامج الضارة على النظام المستهدف. ولا ينتج هذا النوع من كود القشرة أي قشرة، بل يقوم بتوجيه الماكينة لتنزيل ملف معين قابل للتنفيذ من الشبكة، وحفظه على القرص ثم تنفيذه. ويشيع في تلك الأيام استخدام هجمات تتم عبر التنزيل، حيث تزور الضحية صفحة ويب ضارة تحاول بدورها تشغيل عملية التنزيل هذه وتنفيذ كود القشرة ليتم تثبيت البرنامج على ماكينة الضحية. ويقوم نوع مختلف من كود القشرة هذا بتنزيل وتحميل إحدى المكتبات. وتتمثل ميزات هذا الأسلوب في إمكانية جعل هذا الكود أصغر، لأن الموضوع لا يتطلب من كود القشرة إنتاج عملية جديدة على النظام المستهدف، وأن كود القشرة لا يحتاج لكود لتنظيف العملية المستهدفة حيث يمكن القيام بذلك بواسطة مكتبة تم تحميلها داخل العملية.
عندما يكون مقدار البيانات التي يمكن للمهاجم حقنها داخل العملية المستهدفة محدودًا للغاية لتنفيذ كود القشرة المفيد مباشرة، فقد يكون من الممكن تنفيذها على مراحل. أولاً، يتم تنفيذ جزء صغير من كود القشرة (المرحلة الأولى). يقوم هذا الكود بعد ذلك بتنزيل جزء كبير من كود القشرة (المرحلة الثانية) في ذاكرة العملية ثم يقوم بتنفيذه.
هذا نوع آخر من كود القشرة المُقسّم مرحليًا، والذي يتم استخدامه إذا ما تمكن أحد المهاجمين في حقن كود قشرة أكبر داخل العملية لكن يتعذر عليها تحديد أين ستنتهي داخل العملية. ويتم حقن كود قشرة البحث عن البيض داخل العملية عند موقع يمكن التنبؤ به ثم يتم تنفيذه. ويقوم ذلك الكود بعد هذا بالبحث عبر مساحة عنوان العملية عن كود القشرة الأكبر (البيضة) ثم تنفيذه.
هذا النوع من كود القشرة مشابه لكود قشرة البحث عن البيض، لكنه يبحث عن كتل صغيرة متعددة من البيانات (البيض) ثم يعيد تجميعها في كتلة واحدة أكبر حجمًا (أومليت) يتم تنفيذها في وقت لاحق. ويتم استخدام هذا الأسلوب عندما يكون بمقدور أحد المهاجمين حقن عدد من الكتل الصغيرة من البيانات داخل العملية.
ستقوم إحدى الهجمات بحقن كود قشرة داخل العملية المستهدفة قبل أو في نفس الوقت الذي تقوم فيه بمهاجمة ثغرة أمنية للتحكم في عدد البرامج. ويتم ضبط عداد البرامج بحيث يشير إلى الجدول؛ والذي يتم إجراؤه بعده وتنفيذ مهامه. ويتم في الغالب حقن كود القشرة عبر تخزين كود القشرة في البيانات المرسلة عبر الشبكة إلى عملية بها ثغرة أمنية، عبر تزويده في ملف تتم قراءته بواسطة عملية بها ثغرة أمنية أو عبر سطر الأوامر أو البيئة في حالة الثغرات الأمنية المحلية.
نظرًا لأن أغلب العمليات تقوم بفلترة أو تقييد البيانات التي يمكن حقنها، فغالبًا ما يحتاج كود القشرة لأن تتم كتابته للسماح بتطبيق تلك القيود. ويشمل ذلك جعل الكود صغيرًا أو بدون فراغات أو أبجدي رقمي. وقد تم التوصل للعديد من الحلول للتحايل على تلك القيود، ومنها:
• تصميم وتنفيذ عمليات تحسين لخفض حجم كود القشرة.
• تطبيق تعديلات لتفادي القيود في نطاق وحدات البايت في كود القشرة.
• كود ذاتي التعديل يقوم بتعديل عدد من وحدات البايت في الكود الخاص به قبل تنفيذها لإعادة إنشاء وحدات البايت التي يستحيل حقنها في العادة داخل العملية.
نظرًا لقدرة ميزة كشف التطفل على اكتشاف توقيعات أكواد القشرة البسيطة التي يتم إرسالها عبر الشبكة، غالبًا ما يتم ترميزها أو جعلها ذاتية فك التشفير أو متعددة الأشكال لتفادي اكتشافها.
تعمل الهجمات التي تستهدف المتصفحات في العادة على ترميز كود القشرة في سلسلة JavaScript باستخدام ترميز النسبة المئويةأو ترميز "/uXXX" أو ترميز الكيان. وتقوم بعض الهجمات كذلك بالتشويش على سلسلة كود القشرة الذي تم ترميزه للحيلولة دون اكتشافه من قبل نظام اكتشاف التطفل IDS.
على سبيل المثال، في الهيكل أي إيه-32، إليك الصورة التي ستبدو عليها تعليمات NOP (بدون تشغيل)، حيث لا يتم ترميزها أولاً:
ثم يتم بعد ذلك ترميزها إلى سلسلة تستخدم ترميز النسبة المئوية (باستخدام وظيفة unescape() لفك التشفير).
ويتم بعد ذلك ترميزها في سلسلة باستخدام ترميز "uXXX":
وأخيرًا، يتم ترميزها داخل سلسلة باستخدام ميزة ترميز الكيان:
تتم كتابة أغلب أكواد القشرة دون استخدام وحدات بايت ذات قيمة خالية لأنها تهدف لأن يتم حقنها داخل عملية مستهدفة من خلال سلاسل تنتهي بقيمة خالية. وعند نسخ سلسلة تنتهي بقيمة خالية، فسيتم نسخها حتى تشمل أول قيمة خالية إلا أنها لن تعالج وحدات البايت التالية من كود القشرة. وعند حقن كود القشرة الذي يشتمل على قيم خالية بهذه الطريقة، فسيتم حقن جزء واحد فقط من كود القشرة، مما يجعله غير قادر على العمل بنجاح.
لإنتاج كود قشرة بدون قيم خالية من كود قشرة يشتمل على وحدات بايت ذات قيمة خالية، يمكن استبدال تعليمات الماكينة التي تشتمل على أصفار بتعليمات لها نفس التأثير لكنها بدون قيم خالية. على سبيل المثال، في هيكل أي إيه-32 يمكن استبدال هذه التعليمات:
والتي تشتمل على أصفار كجزء من تكوينها الحرفي (يتوسع 1 ليصير 0x00000001) عبر تلك التعليمات:
والتي تتمتع بنفس التأثير لكنها تحتاج لوحدات بايت أقل للترميز كما أنها بدون قيم خالية.
انظر كذلك كود أبجدي رقمي
في حالات معينة، تقوم إحدى العمليات المستهدفة بفلترة أي وحدة بايت من كود القشرة الذي تم حقنه والذي لا يمثل رمزًا أبجديا رقميا أو قابلا للطباعة. وفي ظل هذه الحالات، يكون نطاق التعليمات التي يمكن استخدامها لكتابة كود قشرة محدودًا للغاية. وقد تم نشر حل لهذه المشكلة بواسطة Rix في مجلة ]]Phrack 57يونيكودللسماح]] بتدويل النص. ومع ذلك، ستقوم تلك البرامج بتحويل سلاسل [[أسكي]] إلى يونيكود قبل معالجتها. وتستخدم سلاسل يونيكود التي تم ترميزها في [[UTF-16]] وحدتي بايت لترميز كل رمز (أو أربعة بايت لبعض الرموز الخاصة). وعند تحويل سلسلة [[UTF-16]] إلى UTF-16، يتم إدخال وحدة بايت صفرية بعد كل بايت في السلسلة الأصلية. وقد أثبت Obscou في مجلةPhrack 61[[ أنه بالإمكان كتابة كود قشرة بمقدوره أن يعمل بنجاح بعد عملية التحويل هذه. وهناك برامج يمكنها ترميز أي كود قشرة إلى كود قشرة دليل UTF-16، وذلك استنادًا لنفس مبدأ جهاز فك الترميز الصغير ذاتي التعديل الذي يفك ترميز كود القشرة الأصلي.
تتم كتابة أغلب أكواد القشرة في [[لغة الآلة|لغة الآلةنظرًا]] لأن المستوى المنخفض الذي تتم مهاجمة الثغرة الأمنية عنده يمنح المهاجم وصولاً للعملية. لذا يتم إنشاء كود قشرة لاستهداف مجموعة واحدة محددة من [[وحدة المعالجة المركزية|وحدة المعالجة المركزيةو]][[نظام تشغيل]] و[[حزمة خدمات]]، يطلق عليها [[منصة حاسوب]]. وبالنسبة لبعض الهجمات، بسبب القيود المفروضة على كود القشرة من قبل العملية المستهدفة، يلزم إنشاء كود قشرة محدد للغاية. ومع ذلك، فليس من المستحيل بالنسبة لأحد أكواد القشرة أن يعمل لتنفيذ عدة هجمات، وحزم خدمات وأنظمة تشغيل بل وحتى معالجات. ويتم الوصول لتنوع الاستخدامات هذا عبر إنشاء إصدارات متعددة من كود القشرة تستهدف إصدارات الأنظمة الأساسية وتقوم بإنشاء عنوان يتفرع إلى الإصدارات الصحيحة لنظام التشغيل الذي يعمل الكود عليه. وعند تنفيذه، يتصرف الكود بشكل مختلف عن مع أنظمة التشغيل المختلفة ويقوم بتنفيذ الجزء الصحيح من كود القشرة للنظام الأساسي الذي يعمل عليه.
[[تصنيف:استغلالات أمن الحاسوب]]