شكل سلسلة المشاكل


  Share  
|


شكل سلسلة المشاكل هي واحدة من عدد قليل حقا هجمات جديدة على السطح في السنوات الأخيرة. من اول من شكل سلسلة يذكر البق كان يونيو 23 ، 2000 ، في ما بعد من قبل lamagra argamal (www.securityfocus.com/archive/1/66842) ؛ باسكال bouchareine اكثر وضوحا وأوضح لهم بعد ذلك بشهر واحد تقريبا (www.securityfocus . Com/archive/1/70552). سبق ان وظيفة بحلول مارك slemko (www.securityfocus.com/archive/1/10383) اشارت الى أساسيات المشكلة ، ولكن فوت قدرة شكل سلسلة البق لكتابة الذاكرة.

كما مع العديد من المشاكل الأمنية ، والسبب الجذرى للشكل سلسلة البق هو يثق المستخدم المدخلات الموردة من دون المصادقه عليها. في ج / ج + + ، شكل الخيط البق يمكن ان تستخدم في الكتابة على مواقع الذاكرة التعسفي ، واخطر الجانب هو ان هذا لا يمكن ان يحدث دون العبث المجاورة للذاكرة بنات. هذه الغرامه - الحبيبات القدرة يسمح لمهاجم الالتفافيه كومة الحمايه ، وحتى تعديل اجزاء صغيرة جدا من الذاكرة. المشكلة يمكن ان تحدث ايضا عندما شكل قيود او تقرأ من موقع غير موثوق فيه المهاجم الضوابط. وهذا الجانب الأخير من هذه المشكلة يميل الى ان يكون اكثر انتشارا على نظم لينكس ويونكس. على نظم ويندوز ، وتطبيق سلسلة الجداول عموما ابقى ضمن برنامج قابل للتنفيذ ، او الموارد ديناميه ربط المكتبات (ملفات). واذا كان المهاجم يمكن اعادة كتابة الرئيسية قابل للتنفيذ او ملفات الموارد ، المهاجم تستطيع اداء العديد من الهجمات أكثر وضوحا مما شكل سلسلة البق.

حتى اذا كنت لا تتعامل مع ج / ج + + ، شكل سلسلة الهجمات ما زال يمكن ان يؤدي الى مشاكل كبيرة. الأكثر وضوحا هو أن المستخدمين يمكن أن يضلل ، ولكن في ظل بعض الظروف ، ربما ايضا المهاجم الاطلاق عبر الموقع او كتابة لغة الاستعلامات البنيويه حقن الهجمات. هذه يمكن استخدامها لالفاسده او تحويل البيانات كذلك.

أثرت اللغات

الاكثر تأثرا بقوة اللغة هو ج / ج + +. هجوم ناجح يمكن ان تؤدي فورا الى تنفيذ قانون تعسفي ، والى الكشف عن المعلومات. لغات أخرى لن يسمح عادة الاعدام التعسفى للقانون ، ولكن أنواع أخرى من هجمات محتملة كما اننا نلاحظ في السابق. بيرل ليست ضعفا مباشرة الى specifiers توليه المستخدم المدخلات ، ولكن يمكن ان يكون ضعفا اذا شكل الخيوط هي في قراءة البيانات من العبث بها.

واوضح الذنب

وضع صيغة موحدة لعرض البيانات او التخزين يمكن ان يكون مهمة صعبة نوعا ما. وبالتالي فان العديد من لغات الحاسوب وتشمل الاجراءات الروتينيه المعتاده لاعادة صياغتها البيانات بسهولة. في معظم لغات ، وتهيئة المعلومات وصفها باستخدام نوعا من سلسلة تسمى شكل الخيط. شكل الخيط هو فعلا تعريف محدود تجهيز البيانات باستخدام اللغة ان مصمم ليجعل من السهل وصف الناتج الاشكال. ولكن العديد من مطوري جعل سهلة خطأ - انها تستخدم البيانات من المستخدمين غير موثوق فيه كما شكل الخيط. وكنتيجه لذلك ، يمكن ان المهاجمين اكتب الخيوط في تجهيز البيانات لغة الى مشاكل عديدة.

تصميم ج / ج + + يجعل هذا الخطره بشكل خاص : ج / ج + + 's تصميم يزيد من صعوبة اكتشاف شكل سلسلة المشاكل ، وشكل بعض الخيوط تشمل خصوصا الخطره الاوامر (لا سيما ٪ ن) لا وجود لها في بعض الدول الاخرى لغات 'شكل سلسلة اللغات.

في ج / ج + + ، وهي مهمة يمكن ان تعلن على اتخاذ متغير عدد من الحجج من خلال تحديد وتعني العلامه (…) اذ كان آخر (او فقط) الحجه. والمشكلة هي ان هذه الوظيفة قد يطلق عليها ، ولا سبيل الى معرفة كم من الحجج يجري مرت فيها الاكثر شيوعا مجموعة من المهام لاتخاذ متغير الطول الحجج هي printf الاسرة : printf ، sprintf ، snprintf ، fprintf ، vprintf ، وحتى على. مهام ذات طابع واسع ان تؤدي نفس الوظيفة لها نفس المشكلة. دعونا نلقي نظرة على مثال :

# تشمل <stdio.h>

مداخله الرئيسية (مداخلة argc ، تشار * argv [])
(
اذا (argc> 1)
Printf (argv [1]) ؛

العودة 0 ؛
)

بسيطة الى حد ما stuff. الآن دعونا ننظر الى ما يمكن ان تذهب الخطأ. المبرمج ينتظر المستخدم لدخول شيئا حميدا ، مثل مرحبا العالم. اذا كنت اعطائها محاولة ، you'll نعود مرحبا العالم. الآن دعونا تغيير مدخلات قليلا - حاول ٪ × ٪ العاشر. على نظام ويندوز إكس بي الافتراضيه باستخدام سطر الاوامر (cmd.exe) ، فأنت الآن في الحصول على ما يلي :

ه : \ مشاريع \ 19_sins \ format_bug> format_bug.exe "× ٪ ٪ ×"
12 ffc0 4011e5

علما انه اذا كنت تشغل نظام تشغيل آخر ، او باستخدام مختلف قيادة خط مترجم ، قد تحتاج الى اجراء بعض التغييرات للحصول على هذا الخيط الدقيق صبت البرنامج الخاص بك ، والنتائج التي من المحتمل ان تكون مختلفة. من أجل سهولة الاستخدام ، أمكنكم وضع الحجج الى شل النصي أو دفعه الملف.

فما الذي حدث؟ فإن وظيفة printf احاطت مدخلا الخيط الذي تسبب بها الى حجتين نتوقع ان تكون دفعت على الكومه قبل الدعوة وظيفة. ٪ × specifiers مكن لكم قراءة الكومه ، اربعة بايت في المرة الواحدة ، بقدر ما أردت. فليس من الصعب ان نتصور لو كان لديك أكثر تعقيدا تعمل سرا ان تخزن في كومة متغير ، المهاجم عندئذ يكون قادرا على قراءة سرية. الناتج هنا هو معالجة كومة من موقع (0x12ffc0) ، تليها المدونه أن الموقع الرئيسي () سيعود الى وظيفة. كما يمكنكم تخيل ، كل هذه هي في غاية الاهميه قطعة من المعلومات التي يجرى تسريبها الى وجود المهاجم.

يمكنك الآن ان يتساءل كيف عادل المهاجم يستخدم شكل سلسلة بقة لكتابة الذاكرة. واحد من اقل تستخدم الشكل هو specifiers ٪ ن ، الذي يكتب عدد من الشخصيات التي كان ينبغي مكتوبة حتى الآن في التصدي للمتغير الذي اعطيتموه كما المناظر الحجه. إليك كيف ينبغي ان تستخدم هذه :

غير موقع دولي بايت ؛
Printf ( "٪ s ٪ n \ n" ، argv [1] ، & بايت) ؛
Printf ( "الخاصة بك المدخلات ٪ د احرف \ ن ، بايت") ؛

الناتج سيكون :

ه : \ مشاريع \ 19_sins \ format_bug> format_bug2.exe "بعض مدخلات عشواءيه"

بعض مدخلات عشواءيه

المدخلات الخاصة بك هو 17 احرف

على منصة مع اربع البايت الاعداد الصحيحه ، و٪ ن الموصف سوف اكتب بايت اربعة دفعة واحدة ، و٪ 26/3/2001 سوف اكتب اثنين بايت. الآن وقد المهاجمين فقط الى الرقم كيف تحصل على العنوان انها تريد في الموقف المناسب في الكومه ، والقرص ميدان العرض specifiers حتى وصل عدد بايت مكتوب هو ما تريد.

اما الآن ، دعونا نفترض ان للتو اذا سمحتم المهاجمين الى السيطرة في شكل سلسلة ا ج / ج + + البرنامج ، انها مسألة وقت قبل ان الرقم الى كيفية جعل لكم البعيد مدوناتها. خاص المزعجين جوانب هذا النوع من الهجوم هو انه قبل شن الهجوم ، فانها يمكن ان بحث في كومة وتصحيح الهجوم على الذبابه. في الواقع ، أول مرة المؤلف اظهر هذا الهجوم في الجمهور ، واستعملها في مختلف قيادة خط مترجم مما كنت تستخدم لخلق المظاهره ، وانه لا يعمل. ونظرا لمرونة فريدة من هذا الهجوم ، كان من الممكن تصحيح المشكلة واستغلال عينه التطبيق مع جمهور الفرجة.

معظم لغات أخرى لا نؤيد ما يعادل ٪ ا ن شكل محدد ، وانهم ليسوا عرضة لمباشرة التنفيذ سهلة للمهاجم الموردة من المدونه ، ولكن لا يزال بامكانك البعيد الى مشاكل. وهناك أخرى ، اكثر تعقيدا البديلين على هذا الهجوم ان لغات أخرى معرضة ل. اذا المهاجمين يمكن ان تحدد شكل الخيط لسجل الناتج الى ملف او قاعدة البيانات ، فانها يمكن ان تتسبب في سجلات صحيحة او مضلله. وبالاضافة الى ذلك ، فان تطبيق القراءة السجلات قد ينظر اليهم على ثقة من المدخلات ، ومتى ما انتهك هذا الافتراض ، ان نقاط الضعف في تطبيق 'sالمعرب اللغوي قد يؤدي الى الاعدام التعسفى للقانون. وهناك مشكلة ذات صلة هو ترسيخ السيطرة حرفا في سجل الملفات - أزرار لاعادة الكتابة يمكن استخدامها لمحو الاشياء ؛ خط المنهون يمكن ان يشوش او حتى القضاء على المهاجم للآثار.

هذا القول ينبغي ان تذهب ، ولكن اذا كان المهاجم يمكن ان تحدد شكل سلسلة تغذية scanf او وظائف مماثلة ، والكارثة هي على الطريق.

فيقول ج / ج + +

على خلاف كثير من العيوب سنقوم دراسة ، وهذا هو احد السهل الى حد ما سبوت مدونة عيب. انه بسيط جدا :

Printf (user_input) ؛
خطأ ، و

Printf ( "٪ s" ، user_input) ؛
صحيح.

متغير واحد على ان مشكلة العديد من المبرمجين الاهمال هو انه لا يكفي للقيام بذلك على الوجه الصحيح الا مرة واحدة. وهناك عدد من المدونه المشتركة التركيبات حيث انك قد تستخدم sprintf الى مكان مهيأ الخيط الى عازلة ، وبعد ذلك يصل زلة وذلك :

Fprintf (stdout ، err_msg) ؛
المهاجم عندئذ فقط قد لمدخلات الصناعات الحرفيه بحيث ان شكل specifiers هم فارون ، وفي معظم الحالات ، وهذا هو أسهل بكثير لأن النسخه تستغل err_msg عازلة في كثير من الاحيان كما سيتم تخصيص على الكومه. وبمجرد ادارة المهاجمين الى المشي الى الوراء حتى الكومه ، فانها سوف تكون قادرة على التحكم في مكان ما يكتب باستخدام مدخلات المستخدم.

المتصله الذنوب

ورغم ان الهجوم هو الاكثر وضوحا فيما يتصل بوضع قانون العيب ، وهي ممارسة شاءعه لوضع تطبيق قيود في الملفات الخارجية لاغراض التدويل. اذا كان طلبك قد ماثوم بعدم حمايه ملف سليم ، ثم مهاجم يمكن ان العرض شكل قيود او بسبب عدم وجود ملف الوصول السليم.

آخر متصل خطيءه هو عدم مصادقة على نحو سليم مدخلات المستخدم. وفي بعض النظم ، بيئة متغيرة تحدد موقع المعلومات ، والموقع ، بدوره ، يحدد فيها دليل الملفات الخاصة بكل لغة سيوجد. وفي بعض النظم ، المهاجم ، بل قد تتسبب في التطبيق التعسفى للنظر في الادله.

اكتشاف الذنب نمط

اي تطبيق ان يأخذ مدخلات المستخدم ويمر عليه الى تهيئة مهمة يحتمل ان يكون في خطر. واحد شائع جدا من هذا المثال خطيءه يحدث بالتزامن مع التطبيقات التي سجل مدخلات المستخدم. وبالاضافة الى ذلك ، قد تسرع في تنفيذ بعض المهام على الشكل داخليا.

اكتشاف الذنب خلال استعراض مدونة

في ج / ج + + ، البحث عن وظائف من printf الاسرة. لنبحث عن المشاكل هي

  Printf (user_input) ؛ 
Fprintf (stdout ، user_input) ؛

اذا كنت ترى ان وظيفة يشبه هذا :

  Fprintf (stdout ، msg_format ، arg1 ، arg2) ؛ 

ثم أنت بحاجة الى التحقق من حيث الخيط msg_format المشار اليها من قبل وكيف يتم تخزين جيدا ومن المحميه.

وهناك العديد من منظومة اخرى تدعو الى ابيس والتي هي ايضا ضعيفة - syslog هو احد الامثله على ذلك. أي وقت ترون دالة على ان يشمل التعريف... في الحجه قائمة ، وانك تبحث في ما يحتمل أن يكون مشكلة.

كثير من شفره المصدر والماسحات الضوءيه ، حتى معجمي منها مثل الفئران وflawfinder ، تستطيع كشف هذا. هناك حتى pscan (www.striker.ottawa.on.ca/ ~ الاند / pscan /) ، الذي صمم خصيصا لذلك.

وهناك ايضا مواجهة الادوات التي يمكن ان تكون في صلب عملية التجميع. فعلى سبيل المثال ، هناك الاسكافي ماسوني غير مدرب 'sformatguard : http://lists.nas.nasa.gov/archives/ext/linux-security-audit/2001/05/msg00030.html

تقنيات الاختبار لايجاد الذنب

تمر تهيئة specifiers الى تطبيق وانظر اذا هي عادت ستعشري القيم. فعلى سبيل المثال ، اذا كان لديك اي طلب ان تتوقع اسم الملف والعودة رسالة خطأ تحتوي على مدخلات عندما ملف لا يمكن العثور عليه ، ثم حاول اعطاءها ملف اسماء مثل notlikely ٪ × ٪ x.txt. اذا كنت احصل على رسالة خطأ على غرار "notlikely12fd234104587.txt لا يمكن العثور عليه ،" ثم لديك للتو وجدت شكل سلسلة الضعف.

ومن الواضح ان هذه اللغة التي تعتمد الى حد ما ؛ عليك ان تمر في تهيئة specifiers التي تستخدمها في تنفيذ اللغة كنت تستخدم على الاقل. ولكن ، بما ان العديد من اللغة تدير وتنفذ في اوقات ج / ج + + ، you'd يكون من الحكمة ايضا في ارسال ج / ج + + تهيئة سلسلة الاوامر للكشف عن الحالات الخاصة بك الكامنة المكتبه خطير الضعف.

علما انه اذا كان الطلب على الانترنت يقوم المستخدم الخاص بك واصداء مدخل الى الوراء يا شاغل اخر سيكون عبر موقع كتابة الهجمات

مثلا ذنوب

البنود التالية المشتركة في نقاط الضعف والتعرض (cve) في http:// cve.mitre.org أمثلة لغة الاستعلامات البنيويه الحقن. من اصل ال 188 cve مداخل الاشارة الى ان شكل الخيوط ، وهذا مجرد عينة.

Cve - 2000 - 0573

من cve الوصف : "lreply وظيفة في وو - ftpd 2.6.0 وعلى الوجه الصحيح في وقت سابق لا يطهر غير موثوق فيه شكل الخيط ، الذي يتيح الناءيه المهاجمين لتنفيذ اوامر تعسفيه اكسيك عبر موقع القيادة."

وهذا هو اول معروفة علنا استغلال لشكل الخيط بقة. عنوان لمرحلة ما بعد bugtraq يؤكد فداحه المشكلة : "توفير الناءيه * * الجذريه على الاقل منذ عام 1994."

Cve - 2000 - 0844

من cve الوصف : "ان بعض مهام تنفيذ النظام الفرعي على موقع يونيكس لا يطهر سليم للمستخدم حقن شكل الخيوط ، والتي تسمح للمهاجمين المحليين لتنفيذ اوامر تعسفيه عن طريق وظائف مثل gettext وcatopen."

النص الكامل الاصلي الاستشاريه ويمكن الاطلاع على www.securityfocus.com/archive/1/80154 ، وهذه المشكلة هي خاصة للاهتمام لانه يؤثر على جوهر نظام يونيكس ابيس لمعظم الخيارين (بما فيها لينكس) ، باستثناء بي اس دي بسبب متغيرات حقيقة ان nlspath المتغير هو تجاهل لبوكفلد مميزة في تطبيق بي اس دي. هذا الاستشاريه ، شأنها شأن العديد من الانذارات الرابطه الأساسية ، وبشكل خاص مكتوبة جيدا وغنيا بالمعلومات ودقيق جدا ويعطي شرحا للمشكلة الشامله

خطوات الخلاص

والخطوة الاولى هي تمر ابدا مدخلات المستخدم مباشرة الى تهيئة الوظيفة ، وايضا ان تكون على يقين من ان تفعل ذلك في كل مستوى من مستويات التعامل بصيغة الناتج. كاعتماد اضافي علما ، وتهيئة وظائف كبيرة فوق. انظروا الى مصدر لل_output اذا كنت مهتما - انه قد يكون من المريح ان يكتبوا :

  Fprintf (stdout ، buf) ؛ 

السابقة خط المدونه ليست مجرد خطرة ، ولكن ايضا تستهلك قدرا كبيرا من دورات اضافية وحدة المعالجه المركزية.

والخطوة الثانية هي ان يتخذ الحرص على ان يكون شكل الخيوط طلبك الاستخدامات ليست سوى قراءة من ثقته في الأماكن ، والطرق الى ان الخيوط لا يمكن السيطرة عليها عن طريق المهاجم. اذا كنت كتابه مدونة لينكس ويونيكس ، على غرار ما حدث من متغيرات بي اس دي وتجاهل nlspath المتغير ، والتي يمكن استخدامها لتحديد ملف المستخدم للرسائل محلي ، يمكن ان يوفر بعض الدفاع في العمق.

ج / ج + + الخلاص

ليس هناك ما هو اكثر لانها اكثر من هذا :

  Printf ( "٪ s" ، user_input) ؛ 

تدابير دفاعية اضافية

الشيك وتحد من موقع الى قيم صالحة. (لمزيد من المعلومات ، انظر ديفيد ناقل لل"اكتب انها آمنة : شكل الخيوط وموقع الترشيح" المدرجه في "الموارد الاخرى" الباب ادناه). لا تستخدم printf - الأسرة من المهام اذا كنت تستطيع تجنب ذلك. فعلى سبيل المثال ، اذا كنت تستخدم سي + + ، وبدلا من استخدام التيار المشغلين :

  # تشمل <iostream> 
//...
الامراض التي تنتقل بالاتصال الجنسي : : محكمة <<user_input
//...

الموارد الاخرى
هذا هو مقال اضافها هندرا فانغ

Share  


© 2005-2010 E-articles.info All Rights Reserved - Terms and conditions