0

25 خطای خطرناک در برنامه نویسی- قسمت دوم

 
mosadegh
mosadegh
کاربر طلایی3
تاریخ عضویت : بهمن 1388 
تعداد پست ها : 1778
محل سکونت : ایران

25 خطای خطرناک در برنامه نویسی- قسمت دوم

در بخش اول گزارش اشاره کردیم که متخصصان 30 شرکت فعال در زمینه امنیت رایانه با هم همکاری کرده اند تا لیستی از مهم ترین، شایع ترین و خطرناک ترین خطاهای برنامه نویسی را تهیه کنند.

آنها 25 خطای رایج و خطرناک را به سه گروه تقسیم کرده اند:
  1. تعامل نا امن بین اجزای برنامه (9 خطا)
    کاستی های این قسمت مربوط به روش های ناامن ارسال و دریافت داده ها بین اجزا، ماژول ها، برنامه ها، پردازه ها و رشته های در تعامل با سیستم یا درون یک نرم افزار است.
  2. مدیریت پر خطر منابع (9 خطا)
    کاستی های این قسمت مربوط به مدیریت نامناسب ایجاد، استفاده، انتقال و آزادسازی منابع مهم سیستمی است.
  3. دفاع پرخلل (7 خطا)
    کاستی های این قسمت مربوط به استراتژی های دفاعی است که اغلب بد استفاده می شوند و یا به راحتی نادیده انگاشته می شوند.
در قسمت اول به خطاهای بخش اول یعنی تعامل ناامن بین اجزای برنامه پرداختیم و در این قسمت بخش مدیریت پرخطر منابع را بررسی خواهیم کرد.

مدیریت پرخطر منابع

  • عدم رعایت ظرفیت حافظه بافر
    خطای سرریز بافر، خطای رایجی است که منجر به اجرای کد، انکار سرویس و گم شدن داده ها می شود. خطای مذکور، مدتهاست که مانند شلاقی بالای سر برنامه نویسان C قرار دارد و همچنان در مقابل روشهایی که برای حذفش به کار می برند، مقاومت نشان می دهد. سادگی است اگر فکر کنیم مشکل فقط استفاده نادرست از strcpy()، یا چک نکردن اندازه ورودی ها بوده و با مراقبت از این موارد، مشکل سرریز بافر را حل کرده ایم. همچنان که روشهای تشخیص سرریز بافر پیشرفته تر می شوند، روشهای حمله از این طریق نیز پیشرفته تر می شوند و امروزه حمله های سرریز بافر در نگاه اول و حتی در دومین نگاه هم قابل تشخیص نیستند! از طرفی، شاید تصور کنید از آنجا که برنامه های خود را با استفاده از زبانهای سطح بالا و نه C می نویسید، کاملاً در امان هستید. اما مفسر زبان "امن" شما به چه زبانی نوشته شده است؟ API های سیستم عامل به چه زبانی نوشته شده اند؟ کدهای محلی که فراخوانی می کنید به چه زبانی نوشته شده اند؟ در مورد نرم افزارهایی که زیرساخت های اینترنت را اجرا می کنند، چه می گویید؟ بهتر است کمی در این مورد بیشتر فکر کنید. برای مقابله با مشکل سرریز بافر روشهای متعددی مانند استفاده از زبانهای مطمئن تر برنامه نویسی ، وارسی مجدد اندازه بافرها در مبدأ و مقصد و دقت در استفاده از strcpy()، استفاده از ابزارهای اتوماتیک تحلیل کد، استفاده از روش ASLR (Address Space Layout Randomization) و غیره وجود دارند که با تحقیق، مطالعه و به کارگیری آنها می توانید نرم افزار امن تری تولید کنید.
  • کنترل داده های مهم از بیرون برنامه
    راه های بسیاری برای ذخیره داده های کاربران، بدون ایجاد سربار برای بانک اطلاعات وجود دارد. اما متأسفانه اگر این داده ها را در مکانی ذخیره کنید که مهاجمان قادر به دستکاری آن باشند، سربار یک سوءاستفاده موفق را نیز کاهش داده اید. برای مثال داده ها می توانند در فایلهای پیکربندی، پروفایل ها، کوکی ها، فیلدهای نهان فرم، متغیرهای محیطی، کلیدهای رجیستری و هر مکان دیگری که برای مهاجمان قابل دستیابی باشد، ذخیره گردند. در پروتکل هایی مانند HTTP، در هر درخواست برخی از اطلاعات وضعیت کاربر گرفته می شود و به این ترتیب در دسترس مهاجمان نیز قرار می گیرد. اگر شما برخی از کنترل های امنیتی مهم، مانند اینکه آیا کاربر فعلی مدیر است، را از این طریق انجام دهید، می توانید مطمئن باشید که کسی با دستکاری داده ها، برنامه شما را فریب خواهد داد و آن را وادار به انجام کاری خواهد کرد که شما مایل به انجامش نبوده اید.
  • کنترل مسیر یا نام فایل از بیرون برنامه
    اگر زمانی که انتقال داده ها از طریق فایل صورت می گیرد، از ورودی های بیرون برنامه برای ساختن نام فایل استفاده کنید، مسیر ایجاد شده می تواند جایی خارج از فولدر مورد نظر برنامه شما باشد. مهاجمان می توانند با استفاده از چندین ".." یا توالی های های مشابه، مرورگر سیستم عامل را به خارج از محدوده برنامه شما هدایت کنند. در ضمن با کنترل بیرونی نام و مسیر فایل، راه را برای حمله های فایلی دیگر هموار می کنید. یکی از این حمله ها Symbolic link following است که باعث می شود برنامه شما فایلهایی را بخواند یا دستکاری کند که مهاجم دسترسی مستقیم به آنها ندارد. اگر برنامه شما نام فایل را به عنوان وروردی گرفته و با اولویت بالابرده اجرا شود، همین اتفاق تکرار خواهد شد. هم چنین اگر به کاربر بیرونی اجازه دهید URL دلخواه خود را تعیین کرده تا برنامه شما کدی را از آن دریافت کرده و اجرا کند، در واقع از کرمها برای نفوذ به سیستمتان دعوت به عمل آورده اید.
  • مسیر جستجوی غیر قابل اعتماد
    گاهی اوقات نرم افزار شما نیاز به یک مسیر جستجو برای پیدا کردن منابع مهمی مانند کتابخانه ها یا فایل های پیکربندی دارد. اگر کنترل مسیر جستجو در دستان یک مهاجم قرار گیرد، آنگاه آن را به سمت منابعی که خود می خواهد هدایت کرده و باعث می شود برنامه شما به منابع نادرستی در زمان نامناسبی دسترسی پیدا کند. خطر فوق، حتی زمانی که تنها یک قسمت از مسیر جستجو مانند دایرکتوری جاری، به دست مهاجم بیفتد، نیز وجود دارد.
  • شکست در کنترل تولید کد (تزریق کد) گاهی اوقات نمی توانید با استفاده از چندین خط برنامه کارایی مورد لزوم نرم افزار خود را ایجاد کنید. از طرفی مدیریت و ایجاد کد به صورت پویا جذاب تر است، ولی باید بدانید این مسئله به همان اندازه که برای شما دلپذیر است، به کام مهاجمان نیز خوش می آید. یکی از آسیب پذیری های جدی زمانی رخ می دهد که کد شما قابلیت فراخوانی توسط افراد متفرقه و تأیید نشده را دارا باشد، به خصوص زمانی که ورودی ها بر روی انتخاب کد اجرایی مؤثر باشند و بدتر از این زمانی رخ می دهد که ورودی ها مستقیماً وارد کد برنامه شوند. نتیجه این وضعیت مشخص است: کد شما متعلق به مهاجمان است.
  • بارکردن کد بدون وارسی جامع
    زمانی که کدی را بارگذاری کرده و اجرا می کنید، در واقع به بدخواه نبودن منبع کد اعتماد کرده اید. ممکن است بگویید تنها از وب سایتهایی که به آنها اعتماد دارید، کدها را بار می کنید، ولی مهاجمان قادرند کد مورد نظر را با استفاده از انواع فریبها قبل از اینکه به دست شما برسد، تغییر دهند. ممکن است سایت مورد نظر شما را هک کنند و یا با جعل هویت و استفاده از انواع روشها، سیستم را برای هدایت به سایت دیگری متقاعد کنند یا حتی قادرند کد را در حین انتقال از شبکه مورد دستکاری قرار دهند. سناریوی فوق، حتی زمانی که شما به روزرسانی های محصول خود را بارگذاری و نصب می کنید ، قابل اجرا خواهد بود. اگر یکی از اتفاقات ذکر شده رخ دهد، نرم افزار شما کدی را که انتظار ندارید اجرا خواهد کرد که برای شما بسیار بد و برای مهاجمان بسیار خوشایند است.
  • آزادسازی نامناسب منابع
    زمانی که استفاده شما از منابع سیستم به پایان می رسد، لازم است که آنها را به درستی آزاد سازید. در غیر اینصورت محیط برنامه شما بسیار متراکم و آلوده خواهد شد. آزاد سازی در مورد حافظه، فایلها، کوکی ها، ساختارهای داده، Sessionها، پایپ های ارتباطی و دیگر منابع مشابه صدق می کند. مهاجمان می توانند از آزادسازی نامناسب منابع سوءاستفاده کرده و از منابعی که شما به ظاهر استفاده ای از آن نمی کنید، بهره برداری کنند. این مسئله منجربه مصرف جدی منابع می شود زیرا در واقع هر منبعی که گرفته می شود به سیستم برنمی گردد. هم چنین اگر زباله های برنامه یا Garbage را پاکسازی نکنید، مهاجمان با دست یافتن به آن قادرند بعضی اطلاعات ارزشمند را بازیابی کنند.
  • راه اندازی اولیه نامناسب
    همان طور که یک صبحانه خوب به کارایی شما در طول روز کمک شایانی می کند، یک راه اندازی اولیه صحیح نیز، تضمین می کند برنامه شما وسط یک رویداد مهم متوقف نخواهد شد. اگر شما داده ها و متغیرهای خود را مقداردهی اولیه نکنید، مهاجمان این کار را برای شما انجام خواهند داد. آنها همچنین می توانند اطلاعات به جا مانده از اجرای بخش های قبلی را نیز مورد استفاده قرار دهند. امکان دستکاری شدن متغیرهایی که مقداردهی اولیه نشده اند و در عملیات های مهم امنیتی، مانند تصمیم تأیید هویت مورد استفاده قرار می گیرند، وجود دارد و منجر به تغییر سیاستهای امنیتی برنامه می شود. امکان مقدار دهی اولیه نادرست در هرجایی وجود دارد، ولی شایعترین مورد، شرایط استثنائی برنامه است که سهواً ازآن پرش می کنید و منجر به خطاهای مبهم و ناپیدا می شود. بنابراین بیشتر مراقب شرایطی که احتمال وقوع آن به ندرت برای برنامه شما وجود دارد باشید، زیرا مهاجمان از این شرایط به خوبی بهره برداری می کنند.
  • محاسبات نادرست
    رایانه ها قادرند محاسباتی را انجام دهند که نتایج آن با منطق ریاضی جور در نمی آید. برای مثال اگر دو عدد مثبت و بزرگ را در هم ضرب کنید، ممکن است نتیجه به علت سرریز عدد صحیح، یک عدد کوچک شود. در بعضی موارد انجام محاسبات برای رایانه غیرممکن است مانند مورد تقسیم بر صفر. زمانی که مهاجمان، کنترلی هرچند محدود بر ورودیهای استفاده شده در محاسبات عددی برنامه دارند، این ضعفها می توانند منجر به مشکلات امنیتی مهمی شوند. ممکن است برنامه شما بسیار بیشتر یا بسیار کمتر از حد لزوم منابع را مورد استفاده قرار دهد. ممکن است منطق تجاری برنامه را به خطر اندازد، مانند زمانی که نتیجه محاسبات، یک مبلغ منفی را ارائه می دهد و بالاخره ممکن است دچار انکار سرویس شوید، مانند زمانی که تقسیم بر صفر منجر به از کار افتادن سیستم می شود.

در مطلب بعدی به خطاهای رایج در بخش دفاع پر خلل خواهیم پرداخت.

 

فسا-پسا

.تفکر از تخصص مهمتر است📌

سه شنبه 1 دی 1394  6:38 PM
تشکرات از این پست
1332214
دسترسی سریع به انجمن ها