فاصله التجاوزات


Bookmark and Share this Article Original English article


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

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

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

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

أثرت اللغات

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

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

ورغم سنا الذهاب الى تقديم قائمة شاملة لغات المتضرره ، ومعظم كبار السن معرضون لغات عازلة التجاوزات

واوضح الذنب

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

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

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

يكفي نظريا - ولندع النظر مثالا :

# تشمل <stdio.h>

باطل dontdothis (تشار * مدخلات)
(
تشار buf [16] ؛

Strcpy (buf ، مدخلات) ؛

Printf ( "٪ s \ n" ، buf) ؛
)

مداخله الرئيسية (مداخلة argc ، تشار * argv [])
(
/ / حتى سنا فحص الحجج
/ / ماذا تتوقعون من خطط الشراء السنويه التي تستخدم strcpy؟
Dontdothis (argv [1]) ؛
العودة 0 ؛
)

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

0 x0012fec0 c8 12 00 èþ الحديد.. <- التصدي للbuf الحجه
0 x0012fec4 C4 18 32 00 ä.2. <- التصدي للمساهمه الحجه
0 x0012fec8 d0 12 00 ðþ الحديد.. <- بداية buf
0 x0012fecc 04 80 40 00. <<unicode:80>> @.
0 x0012fed0 السبع 02 4f ç ذ. ؟ O
0 x0012fed4 66 00 00 00 F... <- نهاية buf
0 x0012fed8 e4 12 00 äþ الحديد.. <- محتويات ebp السجل
0 x0012fedc بوخارست 10 40 00؟ . @. <- عودة معالجة
0 x0012fee0 C4 18 32 00 ä.2. <- التصدي للحجة لdontdothis
0 x0012fee4 ثاني وو 12 00 àÿ..
0 x0012fee8 10 13 40 00.. @. <- معالجة الرئيسية () سيعود الى

نتذكر ان كل من القيم على كومة هي الى الوراء. وهذا مثال على ذلك هو نظام من شركة انتل ، الذي هو "القليل - endian." وهذا يعني أقلها أهمية البايت من قيمتها يأتي أولا ، حتى اذا رأيت العودة في معالجة ذاكرة "3f104000 ،" انها حقا معالجة 0x0040103f.

الآن دعونا ننظر الى ما يحدث عند buf هو الكتابة فوقه. الاولى السيطرة على المعلومات الكومه هي محتويات الموسعه قاعدة مؤشر (ebp) السجل. Ebp يتضمن مؤشر الاطار ، واذا كان من جانب واحد - الفيض يحدث ، ebp سيتم اقتطاعها. اذا كان المهاجم تستطيع ان تتحكم في ذكرى 0x0012fe00 (التصريف جانب واحد وأصل أصفار الاخيرة البايت) ، البرنامج يقفز الى ذلك المكان وينفذ مهاجم الموردة من المدونه.

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

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

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

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

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

النقطه هو ان هذا الهجاء الذكيه ما ينبغي عمله هو مجرد تثبيت البق! وقد حدثت عدة مرات الى ان "مدونة تحسينات نوعية" لقد اتضح ان المعالجات الامنية في الماضي. هذا الكاتب عادل امضى اكثر من ثلاث ساعات بحجه مع فريق التنمية حول ما اذا كان ينبغي لها ان تحدد أ بقة. البريد الالكتروني الخيط كان ما مجموعه ثمانيه اشخاص على انه ، ونحن بسهولة امضى 20 ساعة (نصف شخص في الاسبوع) لمناقشة ما إذا كان حل المشكلة أم لا ، لأن تطور فريق يريد اثبات ان المدونه كان يمكن استغلالها. بمجرد ان خبراء الامن اثبتت بقة المشكلة هي في واقع الأمر ، فيكس بنحو ساعة واحدة من الوقت والمطور ساعات قليلة من اختبار الزمن. هذا لا يصدق وهو مضيعه للوقت.

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

فهو مشترك خاطئ مفاده ان التجاوزات فى كومة عازلة للاستغلال هي اقل من كومة التجاوزات ، ولكن هذا لا تبين ان الامر كذلك. كومة معظم التطبيقات تعاني من نفس العيب الاساسي كما الكومه - المستخدم التحكم في البيانات والبيانات هي تتداخل. ويتوقف ذلك على تنفيذ ذكرى محصص ، ومن الممكن في كثير من الاحيان للحصول على الكومه الى مكان مدير بايت اربعة من المهاجم اختيار الموقع المحدد الى جانب المهاجم. تفاصيل كيفية الاعتداء على كومة غامضة الى حد ما. حديث واضح مكتوب عرضا عن هذا الموضوع ، "موثوق بها ويندوز كومة مآثر" ماثيو "shok" conover & horovitz افرط في جرعة المخدر ، ويمكن الاطلاع على http://cansecwest.com/ csw04/csw04-oded + connover.ppt. حتى لو الكومه مدير تخريب لا يمكن ان تفعل اى مهاجم 'sالمناقصه ، في بيانات المجاور المخصصات قد تحتوي على مؤشرات مهمة ، او المؤشرات التي ستستخدم لكتابة المعلومات. في وقت واحد ، واستغلال كومة الفيضانات يعتبر الغريبه والتي يصعب كومة الفيضانات الآن نحو اكثر تواترا من انواع استغلال الاخطاء.

فيقول ج / ج + +

وهناك العديد والعديد من الطرق لتجاوز عازلة فى ج / ج + +. و هذا ما تسبب في اصبع دودة موريس :

تشار buf [20] ؛

يحصل (buf) ؛

وليس هناك اي طريقة لاستخدام تحصل على مدخلات من يقرأ stdin دون المخاطرة وجود الفائض من المخزون الاحتياطي - بدلا من استخدام fgets. ولعل الثانية الاكثر شعبية في طريقه الى الفائض الى استخدام العازل هو strcpy (انظر المثال السابق). وهذه طريقة اخرى لسبب المشاكل :

تشار buf [20] ؛
تشار بادئة [] = "http://" ؛

Strcpy (buf ، بادئة) ؛
Strncat (buf ، الطريق ، sizeof (buf)) ؛
ما هو الخطأ؟ والمشكلة هنا هي انه strncat له سوء تصميم الوصله. وظيفة يريد ان عدد الحروف المتاحة عازلة ، او ترك الفضاء ، وليس الحجم الاجمالي للبلدان المقصد عازلة. اليك الطريقة المفضلة لآخر لسبب الفيضانات :

تشار buf [max_path] ؛

Sprintf (buf ، "٪ s - ٪ d \ n" ، الطريق ، errno) ؛

ومن المستحيل تقريبا ، ما عدا في حالات قليلة الزاويه ، الى استخدام sprintf بأمان. أ النشرة الامنية الحرجه لمايكروسوفت ويندوز تم الافراج عنه لان sprintf كان يستخدم في قطع الاشجار وظيفة التصحيح. الرجوع الى النشرة ms04 - 011 لمزيد من المعلومات (انظر الوصله في "الموارد الاخرى" الباب).

اليك آخر المفضلة :

تشار buf [32] ؛
Strncpy (buf ، بيانات ، strlen (البيانات)) ؛
إذن ما الذي يعيب هذا؟ الحجه الاخيرة هي طول المقبل عازلة ، وليس حجم المقصد فاصله!

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

_ Snwprintf (wbuf ، sizeof (wbuf) ، "٪ s \ n" ، مدخلات) ؛
التالية تجاوز قليلا هو اكثر اثارة للإهتمام :

Bool copystructs (inputfile * pinfile ، غير موقع طويلة نعول)
(
انا غير موقع طويلة ؛

M_pstructs = الجديدة structs [العد] ؛

لط = 0 ؛ انا <العد ؛ انا + +)
(
اذا (! Readfromfile (pinfile ، & (m_pstructs [أنا])))
كسر ؛
)
)
كيف يمكن لهذا الفشل؟ عندما كنت اعتبر ان نسميه ج + + الجديدة] [المشغل ، ومن مماثلة الى الشفره التالية :

رمز = malloc (sizeof (النوع) * العد) ؛
واذا كان المستخدم لوازم الفرز ، فليس من الصعب تحديد قيمة ان الفيضانات تكاثر العملية داخليا. You'll ثم تخصيص عازلة اصغر بكثير عليك ، والمهاجم قادر على الكتابة اكثر من قيادتكم عازلة. المقبلة ج + + المطيع في مايكروسوفت البصريه الاستوديو 2005 يتضمن فحص داخلي لمنع هذه المشكلة. نفس المشكلة يمكن ان يحدث داخليا في كثير من التطبيقات calloc ، الذي يؤدي نفس العملية. وهذا هو جوهر كثير عدد صحيح الفيض البق : انها ليست الفيض عدد صحيح ان اسباب المشكلة الامنية ؛ انها الفاصله التي تجاوز يلي بسرعة ان يسبب الصداع. ولكن المزيد عن هذا في خطيءه (3).

واليك طريقة أخرى عازلة التجاوز يمكن ان تحصل المنشاه :

# تحديد max_buf 256
باطل badcode (تشار * مدخلات)
(
قصيرة لين ؛
تشار buf [max_buf] ؛

لين = strlen (مدخلات) ؛

/ / بالطبع يمكننا أن نستخدم strcpy بأمان
اذا كان (لين <max_buf)
Strcpy (buf ، مدخلات) ؛
)
هذا يبدو كما لو انه ينبغي العمل ، والحق؟ المدونه هي فعلا تعتريها المشاكل. سنقوم الخوض في هذا بمزيد من التفصيل عندما نناقش عدد صحيح الفيضانات في خطيءه 3 ، ولكن اعتبر ان الاخطاء المطبعيه الاولى هي دائما من نوع توقيع دولي. مدخلا اطول من 32k سوف الوجه لين الى عدد سلبي ؛ وهو ما سيحصل عليه upcast الى وجود دولي والحفاظ على التوقيع ؛ والان ومن دائما اصغر من max_buf ، متسببا الفيض. أ الطريقة الثانية you'll تواجه مشاكل اذا هو الخيط هو اكبر من 64k. الآن لديكم تقصير خطأ : لين سيكون عدد صغير ايجابية. فيكس الرئيسي هو ان نتذكر ان size_t هو معرف في اللغة على النحو الصحيح لنوع الاستخدام للمتغيرات التي تمثل الاحجام من جانب اللغة المواصفات. وثمة مشكلة اخرى هي ان تتربص به للمساهمه قد لا تكون لاغيه - انهائها. اليك ما يشبه افضل مدونة :

Const size_t max_buf = 256 ؛
باطل lessbadcode (تشار * مدخلات)
(
Size_t لين ؛
تشار buf [max_buf] ؛

لين = strlen (مدخلات) ؛

/ / بالطبع يمكننا أن نستخدم strcpy بأمان
اذا كان (لين <max_buf)
Strcpy (buf ، مدخلات) ؛
)

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

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

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

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

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

هنا هي البحث عن العناصر :

  • المدخلات ، سواء كان يقرأ من الشبكه ، ملف ، او من سطر الاوامر

  • نقل البيانات من قال المدخلات الى الهياكل الداخلية

  • الاستخدام غير الامن يدعو الى التعامل مع الخيط

  • استخدام الحساب الى حساب مخصص حجمها أو حجم ما تبقى من عازلة

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

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

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

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

عموما هو افضل نهج لتعقب مدخلات المستخدم من نقاط الدخول لطلبك من خلال جميع وتدعو الى وظيفة. اذ يدرك ما المهاجم ضوابط فهناك فرق كبير بين

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

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

ألاعيب أخرى لمحاولة يبحثون عن اي مكان في المساهمة فيها من طول ما هو مستخدم محدد. تغيير طول بحيث انها لا تتطابق مع طول الخيط ، وخصوصا ان نبحث عن عدد صحيح الفيض الامكانيات - الشروط حيث الطول + 1 = 0 غالبا ما تكون خطرة.

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

يمكنك تغيير واحد نريد ان نجعل في الشفره هو انه اذا كان هو تأكيد فحص مدخلات المستخدم ، وتغيير التالية من

ويؤكد (لين <max_path) ؛

الى

اذا كان (لين> = max_path)
(
تأكيد (كاذبة) ؛
عودة كاذبة ؛
)

وعليك دائما اختبار الشفره وفقا لشكل معين من الذاكرة اداة اكتشاف الخطأ ، مثل appverifier على ويندوز

مثلا ذنوب

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

Cve - 1999 - 0042

من cve الوصف : "عازلة الفائض في جامعة واشنطن في تنفيذ ترحيل وخدمة البوب".

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

شبكة ضعف الضوابط تهدف الى ايجاد الصيغ الضعيفه من هذا الخادم وجدت عيوب مماثلة في سياتل المعامل 2.5 slmail كما ورد في www.winnetmag.com/article/articleid/9223/9223.html.

Cve - 2000 - 0389 - cve - 2000 - 0392

من cve - 2000 - 0389 : "عازلة الفائض في krb_rd_req وظيفة في kerberos 4 و 5 تسمح الناءيه المهاجمين الى كسب امتيازات الجذريه".

من cve - 2000 - 0390 : "عازلة الفائض في krb425_conv_principal وظيفة في 5 kerberos تسمح الناءيه المهاجمين الى كسب امتيازات الجذريه".

من cve - 2000 - 0391 : "عازلة الفائض في krshd في kerberos 5 تسمح الناءيه المهاجمين الى كسب امتيازات الجذريه".

من cve - 2000 - 0392 : "عازلة الفائض في جامعة في kerberos 5 يتيح المستخدمين المحليين للحصول على امتيازات الجذريه".

هذه سلسلة من المشاكل في جامعة ماساتشوستس تنفيذ kerberos كما هو موثق CERT الاستشاريه كاليفورنيا - 06 - 2000 ، وجدت في www.cert.org/advisories/ca-2000-06.html. على الرغم من الشفره المصدريه كانت متاحة امام الجمهور لل عدة سنوات ، والمشكلة تنبع من استخدام الخيط الذين يضطلعون بمهام خطرة (strcat) ، الا انها أفادت في 2000.

Cve - 2002 - 0842 ، cve - 2003 - 0095 ، يمكن - 2003 - 0096

من cve - 2002 - 0842 :

شكل سلسلة الضعف في بعض التعديلات من طرف ثالث لmod_dav لقطع الاشجار السيءه بوابة الرسائل (سياسي ، oracle9i تطبيق خادم 9.0.2) تسمح الناءيه المهاجمين لتنفيذ قانون تعسفي عبر المقصد يوري ان قوات "502 سيئة بوابة "وردا على ذلك ، وهو ما يجعل شكل سلسلة specifiers الى ان عاد من dav_lookup_uri () في mod_dav.c ، وهي تستخدم بعد ذلك في الدعوة الى ap_log_rerror ().

من cve - 2003 - 0095 :

Oracle.exe الفائض في المخزون الاحتياطى للخادم قاعدة البيانات أوراكل كنظام ، ط ، 8-1-7 ، و8.0.6 تسمح الناءيه المهاجمين لتنفيذ قانون تعسفي طريق طويل الى ان اسم المستخدم هو الذي قدم خلال تسجيل الدخول كما يمكن استغلالها من خلال تطبيقات العميل ان القيام بمسؤولياتهم التوثيق الخاصة بها ، كما تدل على استخدام loadpsp.

من يستطيع - 2003 - 0096 :

متعددة عازلة الفيضانات في معاملات قاعدة البيانات أوراكل الاصدار 2 ، الاصدار 1 ، ط ، 8-1-7 ، و8.0.6 تسمح الناءيه المهاجمين لتنفيذ قانون تعسفي عبر (1) تحويل سلسلة طويلة الحجه الى to_timestamp_tz وظيفة ، (2) وقتا طويلا منطقة الحجه الى tz_offset الوظيفة ، أو (3) طويل دليل بارامتر الى bfilename الوظيفة.

هذه هي مواطن الضعف الموثقه في CERT الاستشاريه كاليفورنيا - 05 - 2003 ، وتقع في www.cert.org/advisories/ca-2003-05.html. المشاكل هي مجموعة واحدة من عدة وجدت بها ديفيد litchfield وفريقه في الجيل القادم امن البرمجيات المحدوده بوصفها جانبا ، وهذا يدل على ان المرء تطبيق الاعلان بانه "خرق" قد لا يكون أفضل ما ينبغي عمله بينما السيد litchfield هو التحقيق في التطبيقات الخاصة بك.

يمكن - 2003 - 0352

من cve الوصف :

فاصله الفائض في بعض dcom بينية لجنة الحمايه من الاشعاع في مايكروسوفت ويندوز NT 4.0 ، 2000 ، اكس بي ، والخادم 2003 تسمح الناءيه المهاجمين لتنفيذ قانون تعسفي رسالة عبر مشوها ، كما تستغله الناسف / msblast / lovsan وnachi / welchia الديدان .

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

مزيد من المعلومات عن هذه المشكلة ويمكن الاطلاع على www.cert.org/advisories/ كاليفورنيا - 2003 - 23.html ، وwww.microsoft.com/technet/security/bulletin/ms03-039.asp

خطوات الخلاص

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

يستعاض عن الخيط الذين يضطلعون بمهام خطرة

يجب عليك ، في الحد الادنى ، ويستعاض عن وظائف غير آمنة مثل strcpy ، strcat ، وsprintf مع عد نسخ من كل من هذه المهام. لديك عدد من الخيارات ما تستعيض عنها. نضع في اعتبارنا أن عد الاكبر سنا وظائف التفاعل المشاكل ، واطلب منكم ان تفعل الحساب في كثير من الحالات لتحديد المعالم. الحواسيب ليست جيدة في الرياضيات كما انك قد الامل. احدث المكتبات مثل strsafe ، الامنه انبوب اشعه القطب السالب (ج - إدارة الوقت المكتبه) التي ستشحن في مايكروسوفت البصريه الاستوديو (وعلى مسار سريع لتصبح جزءا من ANSI ج / سي + + القياسيه) ، وstrlcat / strlcpy ل* لا شيء. لكم ايضا الحاجة الى اتخاذ الرعايه مع كل من كيفية التعامل مع هذه المهام وانهاء تقصير من الخيوط. بعض مهام ضمان انهاء اغيه ، ولكن الجزء الأكبر من كبار السن وظائف لا تحصى. مايكروسوفت مكتب المجموعة تجربة غير مامونه مع استبدال الخيط الذين يضطلعون بمهام المكتب لعام 2003 تم الافراج عن ان معدل الانحدار (البق الجديدة الناجمة لكل فيكس) يعتبر منخفضا للغاية ، بحيث لا تدع الخوف من الارتداد وقف لكم.

مراجعة مخصصات

وهناك مصدر آخر للتجاوزات عازلة يأتي من الاخطاء الحسابيه.

التحقق من الحلقات وطائفة المداخل

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

ج يحل محل سلسلة عازلة مع سي + + الخيوط

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

يستعاض عن صفوف ساكنة مع سجل حاويات

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

استخدام ادوات التحليل

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

في (سخيف) مثلا ان يلي ، وانت تعرف العلاقة بين البيانات والعد الحجج : بيانات العد بايت طويلة. ولكن المجمع لا يعلم ؛ انها مجرد يرى شار * وsize_t.

* باطلة dostuff (تشار * البيانات ، size_t العد) (
ساكنة تشار buf [32] ؛
العودة memcpy (buf ، بيانات ، الفرز) ؛
)

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

* باطلة dostuff (__in_ecount (تعداد (تشار * البيانات ، size_t العد) (
ساكنة تشار buf [32] ؛
العودة memcpy (buf ، بيانات ، الفرز) ؛
)
السبب في ذلك هو ان المطيع و / أو prefast الآن تعرف ان البيانات والعد بشكل محكم ذات الصلة.

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

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

Stack Protection

Stack protection was pioneered by Crispin Cowan in his Stackguard product, and was independently implemented by Microsoft as the /GS compiler switch. At its most basic, stack protection places a value known as a canary on the stack between the local variables and the return address. Newer implementations may also re-order variables for increased effectiveness. The advantage of this approach is that it is cheap, has minimal performance overhead, and has the additional benefit of making debugging stack corruption bugs easier. Another example is ProPolice, a Gnu Compiler Collection (GCC) extension created by IBM. Any current product should utilize stack protection.

You should be aware that stack protection can be overcome by a variety of techniques. If a virtual function pointer table is overwritten and the function is called prior to return from the function—virtual destructors are good candidates—then the exploit will occur before stack protection can come into play.

Non-executable Stack and Heap

This countermeasure offers considerable protection against an attacker, but it can have a significant application compatibility impact. Some applications legitimately compile and execute code on the fly, such as many applications written in Java and C#. It’s also important to note that if the attacker can cause your application to fall prey to a return into libc attack, where a legitimate function call is made to accomplish nefarious ends, then the execute protection on the memory page may be removed.

Unfortunately, most of the hardware currently available is unable to support this option, and support varies with CPU-type, operating system, and operating system version as well. As a result, you cannot count on this protection being present in the field, but you must test with it enabled to ensure that your application is compatible with a non-executable stack and heap, by running your application on hardware that supports hardware protection, and the target operating system set to use the protection. For example, if you are targeting Windows XP, then make sure you run all your tests on a Windows XP SP2 computer using an AMD Athlon 64 FX processor. On Windows, this technology is called Data Execution Protection (DEP); it was once known as No eXecute (NX).

Windows Server 2003 SP1 also supports this capability. PaX for Linux and OpenBSD also support non-executable memory

Other Resources

this is an article added by Hendra Fang
Disclaimer: Our website is not responsible for the information contained by this article. This article in no way reflects the views, opinions, thoughts or beliefs of the articles directory staff.

Translation notice: The article "Buffer Overruns" was translated using an automated translation service. We sincerely apologize for any translation errors that occured. Thank you for understanding.



  Online: 1442 users browsing the articles directory © 2005-2010 E-articles.info All Rights Reserved.  
The articles and tutorials in the directory are property of their respective owners and authors.