سرريز بافر و مشكلات ناشی از آن

سرريز بافر و مشكلات ناشی از آن

تاریخ ایجاد

IRCAR200903012
بافر معمولا به بخشي از حافظه كامپيوتر گفته مي­شود كه موقتا براي ذخيره داده هاي يك برنامه مورد استفاده قرار مي­گيرد. معمولا داده ها پس از ورود از دستگاه ورودي و قبل از ارسال به دستگاه خروجي داخل بافر قرار مي­گيرند. CPU در داخل بافر تغييرات لازم را روي داده ها اعمال كرده و آنها را به دستگاه مقصد هدايت مي­كند. سرريز بافر همواره به عنوان يك مشكل در سيستمها و برنامه هاي نرم افزاري مطرح بوده است. يكي از اولين نفوذهاي كامپيوتري كه با استفاده از سرريز بافر انجام شد كرم Morris بود كه در نوامبر سال 1988 منتشر شد. اين كرم با استفاده از يك سرريز بافر در سرويس finger كه سرويسي براي توزيع اطلاعات ميان كاربران متصل به يك سيستم يونيكس است كار خود را انجام مي­داد. امروزه نيز سرريز بافر يكي از عوامل مطرح در نفوذها مي­باشد.
اما سرريز بافر چيست و اگر مساله سرريز بافر به خوبي فهميده شده و راه حلهاي آن مشخص است، چرا هنوز به عنوان يكي از اصلي­ترين منشاءهاي آسيب­پذيريها به شمار مي­رود؟ و در نهايت كاربران براي جلوگيري از سوء استفاده افراد مهاجم از سرريز بافر چه كاري مي­توانند انجام دهند؟ اينها سوالاتي است كه سعي مي­كنيم در اين مقاله به آن پاسخ دهيم.

1- سرريز بافر چيست؟
اجازه بدهيد با يك مثال شروع كنيم. سرريز بافر مانند اين است كه 10 كيلو شكر را در ظرفي بريزيم كه گنجايش 5 كيلو شكر داشته باشد! زماني كه ظرف پر مي­شود، طبيعتا بقيه شكرها از ظرف بيرون مي­ريزد و مجبوريد آن را جمع كنيد.
سرريز بافر ممكن است در اثر اين رخ دهد كه نويسنده يك برنامه كامپيوتري در خطوطي از برنامه اندازه حافظه مقصد را به درستي چك نكرده باشد. اگر داده ها بزرگتر از حافظه اي باشند كه برنامه به آنها تخصيص داده است، سرريزي رخ مي­دهد كه نيازمند توجه كاربر كامپيوتر يا administrator سيستم است. تا اينجا به نظر مي­رسد كه سرريز بافر مشكل بي ضرري است.
زماني كه شكر از ظرف سرريز مي­كند مي­توان با تميز كردن ميز آن را به حالت اول برگرداند. اما زماني كه داده ها در بافر سرريز مي­كنند، داده هاي اضافي روي محتويات قبلي بخشهايي از حافظه كامپيوتر نوشته مي­شوند. اگر اين محتويات قبلي جايي ذخيره نشده باشند يا دوباره قادر به ايجاد آنها نباشيم، براي هميشه از دست رفته اند.
در ميان اطلاعات از دست رفته، بافرهاي برنامه هاي ديگر، متغيرها و داده هاي برنامه و فهرست منظم شده زيرروالهايي قرار دارد كه تا زمان رخ دادن سرريز توسط برنامه فراخواني شده اند. علاوه بر اين، اطلاعات ارسال شده به اين زيرروالها نيز از دست رفته اند. اين بدان معناست كه برنامه راهي براي برگشت به زيرروالهايي كه براي تكميل كار خود به آنها نياز دارد پيدا نمي­كند. اين موضوع درست مانند وقتي است كه شما در يك بيابان راه مي­رويد و براي برگشت به ردپاي خود تكيه مي كنيد. اگر طوفان شن رخ دهد، شما مسير برگشت را از دست داده و گم خواهيد شد. به همين دليل معمولا برنامه ها يك آدرس بازگشت براي خودشان در نظر مي گيرند كه در صورت بروز چنين مشكلي جايي براي برگشت داشته باشند.
اما در حقيقت مساله بدتر از اين است كه يك برنامه راه خود را گم كرده باشد. سرريز بافر هدف مورد علاقه هكرهاست. بسياري از اصلاحيه هايي كه براي نرم افزارهاي مختلف ارائه مي­شود مربوط به همين مساله است. سرريز بافر مي­تواند براي اجراي كدهاي خرابكار مورد استفاده قرار گيرد. يك فرد نفوذگر، با استفاده از يك اسكريپت خرابكار بافر را سرريز مي­كند و سپس به برنامه اي كه دنبال راه بازگشت مي گردد مي­گويد كه دستور مورد نظر وي را انجام دهد. در نتيجه برنامه كاري را كه نفوذگر مي­خواهد انجام مي­دهد نه كاري را كه برنامه نويس خواسته است. درست مانند اينكه زماني كه شما در يك بيابان قدم مي­زنيد، نه تنها يك طوفان شن ردپاي شما را محو كند، بلكه يك نفر با ايجاد ردپاي جعلي شما را به جايي كه خود مي­خواهد راهنمايي كند.
به همين دليل سرريز بافر عامل بسياري از آسيب پذيريهاست و منشاء بسياري از سوء استفاده ها به شمار مي­رود. معمولا افراد نفوذگر يك نرم افزار را طوري دوباره برنامه ريزي مي­كنند كه برنامه جديدي را اجرا كند. براي مثال يك فرد نفوذگر مي­تواند يك برنامه جديد را شروع كند كه فايلهاي محرمانه مانند فايلهاي كلمات عبور را از طريق ايميل براي وي ارسال كند. حملات مربوط به سرريز بافر معمولا از برنامه اي كه منتظر ورود داده توسط كاربر است سوء استفاده مي­كنند.
فرض كنيد كه برنامه اي منتظر باشد تا كاربر نام خود را وارد نمايد. ولي به جاي اينكه كاربر نامش را وارد كند، هكر يك دستور اجرايي را وارد مي­كند كه باعث سرريز بافر مي­شود. در نتيجه برنامه نمي­تواند كار خود را ادامه دهد. حالا برنامه به دنبال يك راه بازگشت مي­گردد. زمانيكه برنامه براي دريافت داده از ورودي آماده مي­شود آدرسي براي بازگشت خود ذخيره مي­كند. اينجاست كه هكر وارد عمل شده و آدرس بازگشت برنامه را با آدرس يك دستور خرابكار جا به جا مي­كند. در نتيجه پس از وقوع سرريز، برنامه به سراغ دستور خرابكار رفته و آن را اجرا مي­كند. از طرفي از آنجايي كه اين دستور توسط اين برنامه اجرا مي­شود، اغلب با اولويت همان برنامه نيز اجرا مي­گردد و در نتيجه فرد هكر كنترل سيستم عامل را به دست مي­گيرد.

2- به عنوان يك كاربر خانگي چه كاري در مورد سرريز بافر مي­توانيم انجام دهيم؟
از آنجاييكه سرريز بافر يك مشكل برنامه نويسي است، حل قطعي آنها فقط با تغيير كد برنامه ممكن است. به احتمال قريب به يقين شما كد نرم افزاري را كه اجرا مي­كنيد در اختيار نداريد و علاوه بر آن علاقه اي هم به بر عهده گرفتن مسووليت رفع هر مشكل سرريز بافر نداريد.
بهترين كاري كه مي­توانيد انجام دهيد اين است كه وب سايتهاي مربوط به سيستم عامل و نرم افزارهاي خود را كنترل كنيد و هر زمان كه اصلاحيه جديدي ارائه شد، آن را دريافت و نصب كنيد. البته اين كار ممكن است كمي خطر داشته باشد. چرا كه نصب اصلاحيه يك نرم افزار مي­تواند باعث ايجاد اخلال در كار يك نرم افزار ديگر شود و تا زماني كه اصلاحيه را نصب نكرده ايد اين موضوع روشن نمي­شود. بنابراين قبل از نصب اصلاحيه يك نرم افزار، راه از كار انداختن اصلاحيه را نيز بدانيد تا در صورت لزوم راه بازگشت داشته باشيد.
اما تا زمانيكه توليد كننده نرم افزار اصلاحيه آن را ارائه دهد شما بايد راهي براي رهايي از سرريز بافر پيدا كنيد. اگر مي­توانيد موقتا استفاده از اين نرم افزار را كنار را بگذاريد، حتما اين گزينه را انتخاب كرده و نرم افزار را از روي سيستم خود پاك كنيد. بديهي است كه هرچه راه كمتري براي نفوذ وجود داشته باشد احتمال نفوذ نيز كمتر مي­شود.
اگر نمي­توانيد نرم افزار را پاك كنيد و افراد ديگري نيز به صورت اشتراكي از آن استفاده مي­كنند، بايد استفاده از آن را از طريق كنترل دسترسي محدود نماييد. با استفاده از خصوصيات سيستم عامل خود، كاربراني را كه اجازه دسترسي به اين برنامه و استفاده از آن را دارا هستند مشخص كنيد. گروهي از كاربران مورد اعتماد ايجاد كنيد و مجوزهاي لازم و مناسب را به افراد گروه بدهيد. هر نوع سيستم ثبت كردن (logging) و نظارتي را در كامپيوتر خود فعال كنيد تا در صورت لزوم امكان بررسي و رديابي استفاده از نرم افزارها و سوء استفاده احتمالي را داشته باشيد.
اگر يك نرم افزار سرويسي مانند سرويس وب را براي شبكه ارائه دهد، ممكن است قادر به محدود كردن دسترسي به آن نباشيد. ممكن است مجبور باشيد تا زمان رسيدن اصلاحيه با اين مشكل بسازيد. در اين صورت بايد بين خطر نفوذ به سيستم خود و ضرري كه در نتيجه از كار انداختن برنامه ايجاد مي شود تصميم گيري كنيد و كاري را كه به نفع شماست انجام دهيد.
بنابراين مي­توان گفت كه سرريز بافر مي­تواند باعث شود كه نرم افزاري كه در حال اجراست قدرت تصميم گيري خود را از دست بدهد و توسط مهاجمين مورد سوء استفاده قرار گيرد. اين مساله قابل اصلاح است و تا زماني كه اصلاح شود، مي­توان نرم افزار مزبور را از روي كامپيوتر پاك كرد و يا اينكه خطر نفوذ را پذيرفت و به كار با آن ادامه داد.

منبع: http://www.cert.org

برچسب‌ها