. .

شما اینجا هستید

مطالب تصادفی در سایت علمی نخبگان جوان | com.نخبگان

تشخیص سرریز صف

PDF version
کل آرا: 791
دسته بندی: 
در واقع سرریز بافر و سرریز صف از یک خانواده ی آسیب پذیری بحساب می آیند اما در فرآیند تشخیص دارای تفاوت های بنیادی هستند . هنگامی که شما بخشی از حافظه را به یک صف اختصاص می دهید؛اختصاص دهنده ی حافظه، هدری را قبل یا بعد ( یا هر دو مورد ) بخش محاسباتی حافظه ی شما قرار می دهد. این هدر می تواند برخی از اطلاعات مانند : اندازه ، استفاده شده یا نشده و موارد دیگر را (بسته به نوع تخصیص و نسخه ی آن) را شامل شود.

در واقع سرریز بافر و سرریز صف از یک خانواده ی آسیب پذیری بحساب می آیند اما در فرآیند تشخیص دارای تفاوت های بنیادی هستند .

هنگامی که شما بخشی از حافظه را به یک صف اختصاص می دهید؛اختصاص دهنده ی حافظه، هدری را قبل یا بعد ( یا هر دو مورد ) بخش محاسباتی حافظه ی شما قرار می دهد.
این هدر می تواند برخی از اطلاعات مانند : اندازه ، استفاده شده یا نشده و موارد دیگر را (بسته به نوع تخصیص و نسخه ی آن) را شامل شود.

 

در واقع، اگر شما تخصیص خود را مانیتور کنید، شما می توانید آدرس پایه و اندازه ی مناطق مورد تخصیص خود را معین کنید. سپس، اگر شما تمام دسترسی های 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
$

 

همانطور که مشاهده کردید تشخیص سرریز صف در زمان اجرا به یک مورد کوچک و ساده باز می گردد .
در واقع تشخیص سرریز صف و بافر کاملا با هم متفاوت هستند و در فرصتی مناسب به تشخیص سرریز بافر خواهیم پرداخت .
موفق باشید

نویسنده: علی یزدانی

کلمات کلیدی: 

افزودن دیدگاه جدید

ویژه های سایت

دعوت از متخصصین حوزه نرم افزار ( جذب برنامه نویس )

شرکت تسهیلگران رشد نوابغ جوان از تمامی متخصصین حوزه نرم افزار که آشنایی با زبان های برنامه نویسی...

دعوت از متخصصین حوزه نرم افزار ( جذب برنامه نویس )

نظر سنجی

  • با چه روشی می توان سریعتر اقتصاد مقاومتی را محقق نمود و کشور را از وابستگی به دیگران رهانید ؟

  • تعداد مقالات: 3,060
  • بازدید امروز : 31853
  • بازدید دیروز: 37967

افراد آنلاین:

277

اکنون ساعت   9:53 pm به وقت تهران میباشد.

امروز: يكشنبه 29 مهر 1397

بارکد نخبگان جوان کانال تلگرامی
 
 

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت com.نخبگان مجاز است
استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد
مسئولیت مطالب ارسالی کاربران بر عهده سایت علمی نخبگان جوان نمی باشد

تهیه و تنظیم مطالب: com.نخبگان