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

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

تاریخ ایجاد

IRCRE200903005
در بخش اول گزارش اشاره كرديم كه متخصصان 30 شركت فعال در زمينه امنيت رايانه با يكديگر همكاري كرده اند تا ليستي از مهم ترين و خطرناك ترين خطاهاي برنامه نويسي را تهيه كنند.
25 خطاي خطرناك به سه گروه تقسيم شده اند:

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

در قسمت اول به خطاهاي بخش اول يعني تعامل ناامن بين اجزاي برنامه پرداختيم و در قسمت دوم گزارش بخش مديريت پرخطر منابع را بررسي كرديم. در اين قسمت به بررسي خطاهاي بخش سوم يعني دفاع پرخلل خواهيم پرداخت.

دفاع پرخلل

  • كنترل دسترسي نامناسب (تأييد كردن)
    در صورتي كه مطمئن نشويد كاربران شما دقيقاً توانايي همان كاري را دارند كه براي آنها در نظر گرفته شده است و نه بيشتر، آنگاه مهاجمان از كنترل دسترسي نامناسب شما سوء استفاده كرده و به كارهايي دست مي زنند كه شما تنها به كاربران محدودي اجازه اجراي آنها را داده ايد.
  • استفاده از الگوريتمهاي رمزگذاري پرخطر يا شكسته شده
    در صورتي كه كار شما با داده هاي حساس است و يا لازم است از يك كانال ارتباطي محافظت به عمل آوريد، نياز به رمز گذاري پيدا مي كنيد تا دست مهاجمان را از برنامه تان كوتاه كنيد. شما هم مانند بسياري از نرم افزار نويسان علاقه داريد خودتان يك الگوي رمزگذاري را اختراع كنيد تا احتمال حدس زدن آن توسط مهاجمان را كاهش دهيد. اين كار شما يك جور خوشامدگويي به مهاجمان محسوب مي شود. رمزگذاري كار بسيار سختي است و جايي كه نابغه هاي رياضي و دانشمندان كامپيوتر در اين كار صددرصد موفق نمي شوند، مطمئن باشيد شما هم موفق نخواهيد شد. ممكن است فكر كنيد يك الگوريتم كاملاً جديد كشف كرده ايد كه هيچ كس آن را حدس نمي زند، ولي در واقع شما دوباره چرخي را اختراع كرده ايد كه قبلاً سقوط كرده است. بنابراين همواره هوشيار بوده و از مجموعه اي از الگوهاي رمزگذاري كه فعلاً شكسته نشده اند استفاده كنيد.
  • آوردن رمز در كد برنامه
    آوردن نام كاربري ورمز عبور محرمانه در كد برنامه و در ماژول تأييد هويت نرم افزارتان كار بسيار راحتي است و شما را از نوشتن كدهاي بيشتر و اعمال بررسي ها خلاصي مي دهد، ولي اين كار امنيت كاربران شما را تا حد صفر كاهش مي دهد و در صورتي كه اين رمز به طريقي لو رود ديگر مفهومي به نام امنيت براي نرم افزار شما بي معني خواهد بود. در ضمن كشف و اصلاح اين خطا براي مديران سيستم كار راحتي نيست و مشتريان هم با اين موضوع به هيچ وجه كنار نمي آيند. بنابراين اگر قادريد عصبانيت مدير سيستم در ساعت 2 نيمه شب، زماني كه سيستمش هك شده و يا بد و بيراه مشتريان پشت خط تلفن را تحمل كنيد بازهم به قرار دادن رمز عبور در كد برنامه ادامه دهيد.
  • مديريت دسترسي نا امن براي منابع مهم
    درست است كه برداشتن بي اجازه وسايل ديگران گستاخانه است ولي در صورتي كه خود شما فايلهاي تنظيمات، داده ها و برنامه هاي مهم را بدون محافظ رها كنيد و هركسي بتواند آنها را بخواند يا تغيير دهد، مطمئن باشيد كه بدون اجازه و يا حتي آگاهي شما خوانده خواهند شد و تغيير خواهند كرد. اين مسئله معمولاً در زمان طراحي و پياده سازي ناديده انگاشته مي شود در حالي كه برخي از اوقات تنها راه حل مشكلات ايجاد شده است. در ضمن گذاشتن مسؤوليت اين امر به عهده مدير سيستم و توقع اينكه وي تنظيمات لازم را براي حقوق دسترسي انجام دهد, كاري غير عملي است و نتايج خوبي ندارد.
  • استفاده ناقص از مقادير تصادفي
    در صورتي كه بتوان مقدار تصادفي بعدي را به درستي حدس زد، مقدار تصادفي مفهوم و كارايي خود را از دست خواهد داد. اگر شما از الگوهاي امنيتي استفاده كنيد كه نياز به مقادير تصادفي دارند ولي شما آنها را به خوبي تأمين نكنيد، راه مهاجمان را هموار ساخته ايد. بعضي اوقات ممكن است بدون اينكه متوجه باشيد از مقادير تصادفي استفاده كنيد، براي مثال زماني كه Session ID يا نام يك فايل موقتي را توليد مي كنيد. غالب برنامه نويسان از PRNGها يا Pseudo-Random Number Generator استفاده مي كنند ولي اگر مهاجم متوجه شود شما از چه الگوريتمي استفاده كرده ايد، قادر است مقدار تصادفي بعدي را حدس بزند و يك حمله موفق را با آزمايش كردن مقاديري محدود سازماندهي كند.
  • اجرا با اولويتهاي غير ضروري
    شعار مرد عنكبوتي را به خاطر آوريد: "قدرت بيشتر مسؤليت بيشتر مي آورد"، اين مسئله در مورد برنامه هاي شما نيز صادق است. ممكن است نرم افزار شما براي انجام كار خاصي نياز به حق دسترسي بالايي داشته باشد، ولي نگهداري اين حق دسترسي بيشتر از حد لزوم خطراتي را متوجه كاربرانتان خواهد كرد. زماني كه شما با حق دسترسي بالا كار مي كنيد، برنامه شما اجازه دسترسي به منابعي را دارد كه يك كاربر معمولي ندارد و مهاجم با استفاده از اين امكان به منابع غيرمجاز دسترسي پيدا مي كند. براي مثال اگر برنامه شما يك برنامه ديگر را بالا مي آورد كه در آن كاربر فايلي را باز مي كند، با استفاده از حق دسترسي برنامه شما مي توان به فايلهاي حفاظت شده دسترسي پيدا كرد، همچنين امكان اجراي دستورات به همين ترتيب وجود دارد. حتي اگر برنامه ديگري را اجرا نكنيد، آسيب­پذيري هاي ديگري كه در نرم افزار شما وجود دارند با حق دسترسي بالا عواقب ناگوارتري به بار خواهند آورد.
  • اجراي امنيت طرف سرور توسط طرف كاربر
    زماني كه به طرف كاربر نرم افزار اجازه اجراي وارسي هاي امنيتي طرف سرور را مي دهيد، در واقع مهاجمان را قويتر و مشتريانتان را ضعيف تر مي كنيد. به ياد داشته باشيد كه در زير ظاهر زيباي واسط كاربر، فقط مقداري كد قرار دارد. مهاجمان مي توانند بخش كاربر برنامه شما را مهندسي معكوس كرده و برنامه خود را به جاي آن قرار دهند، به طوري كه ظواهر امر حفظ شود به خصوص قسمتهايي كه مربوط به كنترلهاي امنيتي است. نتايج اين امر بسته به اينكه چه مقدار كنترل امنيتي را در طرف كاربر انجام مي دهيد، متفاوت است. اما هدف مهاجمان معمولاً بخشهاي تأييد هويت، اجازه دادن ها و اعتبار سنجي ورودي است. از طرفي اگر بخشهاي امنيتي را در طرف سرور پياده سازي كرده ايد، بايد مطمئن شويد اجراي آنها فقط از طرف كاربر انجام نمي شود.
برچسب‌ها