IRCAR200903012
بافر معمولا به بخشي از حافظه كامپيوتر گفته ميشود كه موقتا براي ذخيره داده هاي يك برنامه مورد استفاده قرار ميگيرد. معمولا داده ها پس از ورود از دستگاه ورودي و قبل از ارسال به دستگاه خروجي داخل بافر قرار ميگيرند. CPU در داخل بافر تغييرات لازم را روي داده ها اعمال كرده و آنها را به دستگاه مقصد هدايت ميكند. سرريز بافر همواره به عنوان يك مشكل در سيستمها و برنامه هاي نرم افزاري مطرح بوده است. يكي از اولين نفوذهاي كامپيوتري كه با استفاده از سرريز بافر انجام شد كرم Morris بود كه در نوامبر سال 1988 منتشر شد. اين كرم با استفاده از يك سرريز بافر در سرويس finger كه سرويسي براي توزيع اطلاعات ميان كاربران متصل به يك سيستم يونيكس است كار خود را انجام ميداد. امروزه نيز سرريز بافر يكي از عوامل مطرح در نفوذها ميباشد.
اما سرريز بافر چيست و اگر مساله سرريز بافر به خوبي فهميده شده و راه حلهاي آن مشخص است، چرا هنوز به عنوان يكي از اصليترين منشاءهاي آسيبپذيريها به شمار ميرود؟ و در نهايت كاربران براي جلوگيري از سوء استفاده افراد مهاجم از سرريز بافر چه كاري ميتوانند انجام دهند؟ اينها سوالاتي است كه سعي ميكنيم در اين مقاله به آن پاسخ دهيم.
1- سرريز بافر چيست؟
اجازه بدهيد با يك مثال شروع كنيم. سرريز بافر مانند اين است كه 10 كيلو شكر را در ظرفي بريزيم كه گنجايش 5 كيلو شكر داشته باشد! زماني كه ظرف پر ميشود، طبيعتا بقيه شكرها از ظرف بيرون ميريزد و مجبوريد آن را جمع كنيد.
سرريز بافر ممكن است در اثر اين رخ دهد كه نويسنده يك برنامه كامپيوتري در خطوطي از برنامه اندازه حافظه مقصد را به درستي چك نكرده باشد. اگر داده ها بزرگتر از حافظه اي باشند كه برنامه به آنها تخصيص داده است، سرريزي رخ ميدهد كه نيازمند توجه كاربر كامپيوتر يا administrator سيستم است. تا اينجا به نظر ميرسد كه سرريز بافر مشكل بي ضرري است.
زماني كه شكر از ظرف سرريز ميكند ميتوان با تميز كردن ميز آن را به حالت اول برگرداند. اما زماني كه داده ها در بافر سرريز ميكنند، داده هاي اضافي روي محتويات قبلي بخشهايي از حافظه كامپيوتر نوشته ميشوند. اگر اين محتويات قبلي جايي ذخيره نشده باشند يا دوباره قادر به ايجاد آنها نباشيم، براي هميشه از دست رفته اند.
در ميان اطلاعات از دست رفته، بافرهاي برنامه هاي ديگر، متغيرها و داده هاي برنامه و فهرست منظم شده زيرروالهايي قرار دارد كه تا زمان رخ دادن سرريز توسط برنامه فراخواني شده اند. علاوه بر اين، اطلاعات ارسال شده به اين زيرروالها نيز از دست رفته اند. اين بدان معناست كه برنامه راهي براي برگشت به زيرروالهايي كه براي تكميل كار خود به آنها نياز دارد پيدا نميكند. اين موضوع درست مانند وقتي است كه شما در يك بيابان راه ميرويد و براي برگشت به ردپاي خود تكيه مي كنيد. اگر طوفان شن رخ دهد، شما مسير برگشت را از دست داده و گم خواهيد شد. به همين دليل معمولا برنامه ها يك آدرس بازگشت براي خودشان در نظر مي گيرند كه در صورت بروز چنين مشكلي جايي براي برگشت داشته باشند.
اما در حقيقت مساله بدتر از اين است كه يك برنامه راه خود را گم كرده باشد. سرريز بافر هدف مورد علاقه هكرهاست. بسياري از اصلاحيه هايي كه براي نرم افزارهاي مختلف ارائه ميشود مربوط به همين مساله است. سرريز بافر ميتواند براي اجراي كدهاي خرابكار مورد استفاده قرار گيرد. يك فرد نفوذگر، با استفاده از يك اسكريپت خرابكار بافر را سرريز ميكند و سپس به برنامه اي كه دنبال راه بازگشت مي گردد ميگويد كه دستور مورد نظر وي را انجام دهد. در نتيجه برنامه كاري را كه نفوذگر ميخواهد انجام ميدهد نه كاري را كه برنامه نويس خواسته است. درست مانند اينكه زماني كه شما در يك بيابان قدم ميزنيد، نه تنها يك طوفان شن ردپاي شما را محو كند، بلكه يك نفر با ايجاد ردپاي جعلي شما را به جايي كه خود ميخواهد راهنمايي كند.
به همين دليل سرريز بافر عامل بسياري از آسيب پذيريهاست و منشاء بسياري از سوء استفاده ها به شمار ميرود. معمولا افراد نفوذگر يك نرم افزار را طوري دوباره برنامه ريزي ميكنند كه برنامه جديدي را اجرا كند. براي مثال يك فرد نفوذگر ميتواند يك برنامه جديد را شروع كند كه فايلهاي محرمانه مانند فايلهاي كلمات عبور را از طريق ايميل براي وي ارسال كند. حملات مربوط به سرريز بافر معمولا از برنامه اي كه منتظر ورود داده توسط كاربر است سوء استفاده ميكنند.
فرض كنيد كه برنامه اي منتظر باشد تا كاربر نام خود را وارد نمايد. ولي به جاي اينكه كاربر نامش را وارد كند، هكر يك دستور اجرايي را وارد ميكند كه باعث سرريز بافر ميشود. در نتيجه برنامه نميتواند كار خود را ادامه دهد. حالا برنامه به دنبال يك راه بازگشت ميگردد. زمانيكه برنامه براي دريافت داده از ورودي آماده ميشود آدرسي براي بازگشت خود ذخيره ميكند. اينجاست كه هكر وارد عمل شده و آدرس بازگشت برنامه را با آدرس يك دستور خرابكار جا به جا ميكند. در نتيجه پس از وقوع سرريز، برنامه به سراغ دستور خرابكار رفته و آن را اجرا ميكند. از طرفي از آنجايي كه اين دستور توسط اين برنامه اجرا ميشود، اغلب با اولويت همان برنامه نيز اجرا ميگردد و در نتيجه فرد هكر كنترل سيستم عامل را به دست ميگيرد.
2- به عنوان يك كاربر خانگي چه كاري در مورد سرريز بافر ميتوانيم انجام دهيم؟
از آنجاييكه سرريز بافر يك مشكل برنامه نويسي است، حل قطعي آنها فقط با تغيير كد برنامه ممكن است. به احتمال قريب به يقين شما كد نرم افزاري را كه اجرا ميكنيد در اختيار نداريد و علاوه بر آن علاقه اي هم به بر عهده گرفتن مسووليت رفع هر مشكل سرريز بافر نداريد.
بهترين كاري كه ميتوانيد انجام دهيد اين است كه وب سايتهاي مربوط به سيستم عامل و نرم افزارهاي خود را كنترل كنيد و هر زمان كه اصلاحيه جديدي ارائه شد، آن را دريافت و نصب كنيد. البته اين كار ممكن است كمي خطر داشته باشد. چرا كه نصب اصلاحيه يك نرم افزار ميتواند باعث ايجاد اخلال در كار يك نرم افزار ديگر شود و تا زماني كه اصلاحيه را نصب نكرده ايد اين موضوع روشن نميشود. بنابراين قبل از نصب اصلاحيه يك نرم افزار، راه از كار انداختن اصلاحيه را نيز بدانيد تا در صورت لزوم راه بازگشت داشته باشيد.
اما تا زمانيكه توليد كننده نرم افزار اصلاحيه آن را ارائه دهد شما بايد راهي براي رهايي از سرريز بافر پيدا كنيد. اگر ميتوانيد موقتا استفاده از اين نرم افزار را كنار را بگذاريد، حتما اين گزينه را انتخاب كرده و نرم افزار را از روي سيستم خود پاك كنيد. بديهي است كه هرچه راه كمتري براي نفوذ وجود داشته باشد احتمال نفوذ نيز كمتر ميشود.
اگر نميتوانيد نرم افزار را پاك كنيد و افراد ديگري نيز به صورت اشتراكي از آن استفاده ميكنند، بايد استفاده از آن را از طريق كنترل دسترسي محدود نماييد. با استفاده از خصوصيات سيستم عامل خود، كاربراني را كه اجازه دسترسي به اين برنامه و استفاده از آن را دارا هستند مشخص كنيد. گروهي از كاربران مورد اعتماد ايجاد كنيد و مجوزهاي لازم و مناسب را به افراد گروه بدهيد. هر نوع سيستم ثبت كردن (logging) و نظارتي را در كامپيوتر خود فعال كنيد تا در صورت لزوم امكان بررسي و رديابي استفاده از نرم افزارها و سوء استفاده احتمالي را داشته باشيد.
اگر يك نرم افزار سرويسي مانند سرويس وب را براي شبكه ارائه دهد، ممكن است قادر به محدود كردن دسترسي به آن نباشيد. ممكن است مجبور باشيد تا زمان رسيدن اصلاحيه با اين مشكل بسازيد. در اين صورت بايد بين خطر نفوذ به سيستم خود و ضرري كه در نتيجه از كار انداختن برنامه ايجاد مي شود تصميم گيري كنيد و كاري را كه به نفع شماست انجام دهيد.
بنابراين ميتوان گفت كه سرريز بافر ميتواند باعث شود كه نرم افزاري كه در حال اجراست قدرت تصميم گيري خود را از دست بدهد و توسط مهاجمين مورد سوء استفاده قرار گيرد. اين مساله قابل اصلاح است و تا زماني كه اصلاح شود، ميتوان نرم افزار مزبور را از روي كامپيوتر پاك كرد و يا اينكه خطر نفوذ را پذيرفت و به كار با آن ادامه داد.
منبع: http://www.cert.org
- 2