آخرین اخبار و مقالات و مطالب پیرامون stack در ایران آی سی تی نیوز ، پایگاه فناوری اطلاعات و ارتباطات ایران
بر روی این دامنه اینترنتی سیستم مدیریت محتوا
پارس سی ام اس
نصب شده است که نرم افزاری قوی جهت طراحی سایت
می باشد. طراحی وب
با استفاده از پرتال
( پورتال
) پارس منجر به طراحی وب سایت
شما می شود. طراحی وب سایت
کپی رایت پورتال
پارس
یکی از مشکلات امنیتی که در بعضی از نرم افزارها مشاهده می شود، سرریزی بافر یا buffer overflow است. سرریزی بافر عموما در زمان اجرا و بسته به ورودی های مختلف برنامه رخ می دهد و حتی می تواند به هکرها کمک کند تا برنامه را تغییر داده و کدهای مخرب در آن وارد کنند. در این مقاله قصد داریم این موضوع را بررسی کنیم و ببینیم سرریزی بافر چیست و چه زمانی اتفاق می افتد.
بافر چیست؟ بافر، حافظه موقتی است که به صورت نرم افزاری و سخت افزاری پیاده سازی می شود، در روش سخت افزاری مثل بافر کیبورد، اطلاعات کلیدهایی که شما روی صفحه کلید فشار داده اید در جایی ذخیره می شود و سیستم عامل آنها را می خواند و پردازش می کند. بافر نرم افزاری به دو صورت قابل پیاده سازی است. 1 در سطح سیستم عامل: سیستم عامل مقداری از حافظه را جهت بافرکردن به خود اختصاص می دهد. این حافظه برای یکسان سازی سرعت دیسک سخت و پردازشگر استفاده می شود. 2 در سطح نرم افزار کاربردی: این حافظه را ما به عنوان برنامه نویس تعریف می کنیم تا امور مختلفی را انجام دهیم. قطعه کد زیر را در نظر بگیرید: void overflow_function (char *str){ char buffer[10]; strcpy(buffer, str); } int main(){ char big_string[14]; strcpy(big_string,"bufferoverflow"); overflow_function(big_string); return 0; } از لحاظ قواعد گرامری این قطعه کد درست است و باید بدون اشکال کار کند اما در زمان اجرا، خطای در حال اجرا صادر خواهد شد با این مضمون: stack around the variable ‘buffer’ was corrupted بسیار خب، این خطا به ما می گوید که متغیر بافر خراب شده است. بیایید ببینیم این کد دقیقا چه کار می کند: ابتدا یک متغیر از نوع رشته به طول 14کاراکتر تعریف کرده و مقدار bufferoverflow را با استفاده از دستور strcpy در آن کپی می کنیم. تا اینجا مشکل خاصی نیست و کد درست است. حال مقدار big_string به تابع overflow_function پاس داده می شود. این تابع سعی دارد مقدار big_string که به آن داده شده است را درbuffer کپی کند اما این عمل ناموفق می ماند و در نتیجه برنامه خطا می دهد. چرا خطا می دهد؟ این تابع می خواهد مقدار 14کاراکتر را در یک رشته 10کاراکتری کپی کند، طبیعی است که این کار را نمی تواند درست انجام دهد، برای همین خطا صادر می شود. کمی دقیق تر به مساله نگاه می کنیم: وقتی تابع overflow_function فراخوانی می شود آدرس برگشت به تابع فراخواننده در ثبات sp قرار می گیرد. سپس این تابع سعی می کند مقدار 14کاراکتر را در 10کاراکتر کپی کند و این عمل با موفقیت انجام می شود. فرض کنید بافر در 10خانه اول بعد از آدرس 100h قرار داد و ثبات sp مقدار خانه 10dh را به عنوان آدرس برگشتی تابع overflow_function در خود دارد. حال مقدار 14کاراکتر در متغیر بافر، کپی می شود و در نتیجه خانه های 100h تا 10eh بازنویسی می شوند و سپس کار تابع به پایان می رسد و سیستم عامل قصد دارد با استفاده از آدرس ذخیره شده در sp به فراخواننده تابع overflow_function بر گردد اما از آن جایی که آدرس 10dh بازنویسی شده است، پردازشگر نمی تواند دستوری را اجرا کند و خطای bufferoverflow صادر می شود. خب، هکرها با استفاده از همین خطا به سیستم های دیگران حمله می کنند. آنها یکسری دستورات به زبان اسمبلی می نویسند که در اصطلاح به آنها shellcode یا exploit گفته می شود. به مثال بالا برمی گردیم، فرض کنید به جای مقدار “bufferoverflow” یک شل کد به تابع overflow_function داده شود. وقتی کار تابع تمام شد، پردازشگر به آدرس 10dh می رود. مقدار این آدرس دیگر یک مقدار نامعتبر نیست بلکه به یک قطعه کد اشاره دارد و پردازشگر، آن قطعه کد را اجرا می کند و سبب می شود برنامه اصلی، کار خودش را درست انجام ندهد . این یک روش برای سوءاستفاده از سرریزی است. روش دیگر دسترسی به بخش های محرمانه حافظه است که اطلاعات اساسی سیستم در آن قرار دارد. هکر با تزریق کد خود به برنامه می تواند به بخش های محرمانه حافظه دسترسی پیدا کند و اطلاعات حیاتی سیستم را مورد سو ءاستفاده قرار دهد.
چگونه جلوی سرریزی را بگیریم؟ تنها کاری که لازم است انجام دهیم، بررسی مقادیر ورودی برنامه است تا دقیقا مطابق با اندازه متغیر داده ها درون آن ریخته شوند. به طور مثال؛ کد بالا را با تغییر کوچکی اصلاح می کنیم و از سرریزی بافر جلوگیری می کنیم. کد بازنویسی شده به صورت زیر خواهد بود: void overflow_function (char *str){ char buffer[10]; strncpy(buffer, str,10); } int main(){ char big_string[14]; strncpy(big_string,"bufferoverflow",14); overflow_function(big_string); return 0; }
امیربهاالدین سبط الشیخ
... حال چگونه یک عبارت میانوندی را به یک عبارت پسوندی تبدیل کنیم؟برای این کار از ساختار داده ای به نام پشته (stack) استفاده می کنیم ...
... از آنجا که در توابع بازگشتی از stack پشته استفاده می شود و فضای پشته محدود است با زیاد شدن no دچار خطایstack overflow خواهیم شد! پس در محاسبه اعداد بزرگ بهتر است از روش بازگشتی استفاده نکنیم ...
... معماری سیستم عامل اندروئید از نظر معماری یک پشته نرم افزاری (software stack) به حساب می آید، به این معنی که مجموعه ای از برنامه های کوچک متصل به هم است که همگی به صورت یک سیستم عامل واحد کار می کنند ...
... (bits) (bump-in-the-stack) روش سوم استفاده از وسیله مجزا واتصال آن به یکhost یا دروازه امنیتی است به طور مثال این وسیله می تواند یک پردازشگری باشد که توسط ارتش استفاده می شود به این یافته«ضربه به سیستم»می گویند ...
... به تمامی اینها باید تکنولوژی stack cool 3+ را نیز در مادربرد p7p55d premium اضافه کرد که موجب شده است تا این مادربرد، اولین در نوع خود دردنیا باشد که از چهارلایه مس 2oz در 8 لایه برد مدار چاپی آن استفاده شده است ...
... در زیر به بیان دو نوع رایج سرریز به نام های «سرریزی پشته» و «سرریزی هیپ» می پردازیم: stack overflow پشته، بخشی از حافظه است ...
... یکی از ویژگی های طراحی xtremeبکارگیری امکان stack cool3+ به منظورافزایش طول عمر قطعات مادربرد می باشد ...
... نهایت اطمینان پذیری با هدف افزایش طول عمر قطعات یکی از ویژگی های طراحی xtremeبکارگیری امکان stack cool3+ به منظورافزایش طول عمر قطعات مادربرد می باشد ... امکان stack cool3+ با استفاده از لایه ارتقاء یافته برد مدار چاپی (pcb) به شکل کاملا موثری مادربرد را خنک کرده و حرارت تولید شده را به منظورتبادل بهتر اطلاعات ،درحد پایین و ثابتی نگه می دارد ...
... همچنین اگر از اتصال بلوتوث برای این کار استفاده می کنید باید در قسمت bluetooth stack، کانکشن بلوتوث خود را انتخاب کنید ...
|
صفحه 1
|
2 | 3 |
|