در واقع سرریز بافر و سرریز صف از یک خانواده ی آسیب پذیری بحساب می آیند اما در فرآیند تشخیص دارای تفاوت های بنیادی هستند .
هنگامی که شما بخشی از حافظه را به یک صف اختصاص می دهید؛اختصاص دهنده ی حافظه، هدری را قبل یا بعد ( یا هر دو مورد ) بخش محاسباتی حافظه ی شما قرار می دهد.
این هدر می تواند برخی از اطلاعات مانند : اندازه ، استفاده شده یا نشده و موارد دیگر را (بسته به نوع تخصیص و نسخه ی آن) را شامل شود.
در واقع، اگر شما تخصیص خود را مانیتور کنید، شما می توانید آدرس پایه و اندازه ی مناطق مورد تخصیص خود را معین کنید. سپس، اگر شما تمام دسترسی های STORE و LOAD در حافظه را بررسی کنید، متوجه خواهید شد که یکی در خارج از ناحیه ی تعیین شده اتفاق افتاده است . نمودار زیر، نشان دهنده حافظه و دسترسی STORE / LOAD به آن است ، رنگ قرمز یک دسترسی نامعتبر است که به آسانی از طریق تجزیه و تحلیل STORE / LOAD قابل شناسایی است.
در این کد c دو بافر به اندازه ی یکسان اختصاص داده شده اند و با مقداردهی بیش از یک بایت پر خواهد شد.
#define BUFF_MAX 128 int main(int ac, const char *av[]) { char *buff1, *buff2; int i; buff1 = malloc(BUFF_MAX); buff2 = malloc(BUFF_MAX); if (!buff1 || !buff2) return -1; for (i = 0; i <= BUFF_MAX; i++) /* off-by-one */ buff1[i] = 'A'; for (i = 0; i <= BUFF_MAX; i++) /* off-by-one */ buff2[i] = 'B'; return 0; }
در اینجا ما با فراخوانی تابع malloc نظارت و بررسی را از طریق ذخیره ی آدرس های پایه و اندازه ی بافر برروی کد انجام میدهیم .
زمانیکه یک STORE یا LOAD رخ می دهد ، ما فقط نیاز داریم تا چک کنیم آیا آدرس مقصد در لیست ما هست یا نه . در صورتیکه این آدرس خارج از محدوده ی تعیین شده باشد ؛ احتمال وقوع سرریز زیاد است .
$ ../../../pin -t ./obj-intel64/OverflowDetection.so -- ./test [INFO] malloc(128) = 1270010 [INFO] malloc(128) = 12700a0 400636: mov byte ptr [rax], 0x41 -- Overflow in 1270090 400658: mov byte ptr [rax], 0x42 -- Overflow in 1270120 $
همانطور که مشاهده کردید تشخیص سرریز صف در زمان اجرا به یک مورد کوچک و ساده باز می گردد .
در واقع تشخیص سرریز صف و بافر کاملا با هم متفاوت هستند و در فرصتی مناسب به تشخیص سرریز بافر خواهیم پرداخت .
موفق باشید
نویسنده: علی یزدانی
اکنون ساعت 7:54 am به وقت تهران میباشد.
امروز: سه شنبه 19 آذر 1398
بارکد نخبگان جوان![]() |
کانال تلگرامی نخبگان![]() |
استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت com.نخبگان مجاز است
استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد
مسئولیت مطالب ارسالی کاربران بر عهده سایت علمی نخبگان جوان نمی باشد
تهیه و تنظیم مطالب: com.نخبگان
افزودن دیدگاه جدید