‫ آشنايي با استاندارد CERT براي برنامه نويسي امن

IRCAR201006064

عنصر اصلي در كدنويسي امن با زبان هاي مختلف برنامه نويسي، مستند سازي خوب و استفاده از استانداردهاي قابل اجرا است. استانداردهاي كدنويسي، برنامه نويسان را ترغيب به پيروي از مجموعه اي متحدالشكل از قوانين و راهنماييها مي كند كه بر اساس نيازمندي هاي پروژه و سازمان تعيين شده است، نه بر اساس سلايق و مهارت هاي مختلف برنامه نويسان. به محض تعيين استانداردهاي مذكور، مي توان از آن به عنوان معياري براي ارزيابي كدهاي منبع، چه به صورت دستي و چه به صورت اتوماتيك استفاده كرد.

از استانداردهاي معروف در اين زمينه مي توان به استانداردCERT براي كدنويسي امن اشاره كرد كه يك سري از قوانين و پيشنهادات را براي كد نويسي امن با زبان هاي برنامه نويسي C، C++ و جاوا ارائه مي دهد. هدف از اين قوانين و پيشنهادات، حذف عادت هاي كدنويسي ناامن و رفتارهاي تعريف نشده است كه منجر به آسيب پذيري هاي قابل سوءاستفاده مي شود. به كارگيري استانداردهاي مذكور منجر به توليد سيستم هاي با كيفيت بالاتر مي شود كه در برابر حملات بالقوه، پايدارتر و مقاوم تر هستند.


قوانين در برابر پيشنهادات


استانداردهاي CERT براي كدنويسي امن شامل يك سري قوانين و پيشنهادات مي شوند. در زير تعريف هر كدام از آنها آورده شده است.

قوانين


يك روش برنامه نويسي زماني به عنوان قانون تعريف مي شود كه داراي خصوصيات زير باشد:
سرپيچي از روش فوق احتمالاً منجر به يك نقص امنيتي شده و ممكن است به يك آسيب پذيري قابل سوءاستفاده تبديل شود.
پيروي از روش فوق را بتوان توسط تحليل اتوماتيك، راهكارهاي رسمي يا تكنيك هاي بازرسي دستي تشخيص داد.
پياده ‌سازي قوانيني كه در استاندارد CERT براي برنامه نويسي امن آورده شده، براي اطمينان از امنيت سيستم هايي كه با زبان برنامه نويسي مربوطه ايجاد شده اند، شرط لازم است ولي كافي نيست. در اين استانداردها قوانين با برچسب rule مشخص مي شوند.


پيشنهادات


پيشنهادات در حقيقت يك سري از راهنمايي ها و توصيه ها است. يك روش كدنويسي زماني به عنوان يك پيشنهاد در نظر گرفته مي شود كه شرايط زير را دارا باشد:

  1. به كارگيري روش كدنويسي مذكور، باعث ارتقاي امنيت سيستم شود.
  2. شرايطي كه براي در نظر گرفتن روش مذكور به عنوان يك قانون لازم است، در مورد اين روش كدنويسي صدق نكند.

در هر تجربه كدنويسي، مجموعه اي از پيشنهادات با توجه به نيازمندي هاي امنيتي محصول نهايي مورد استفاده قرار مي گيرد. پروژه هايي كه نيازمند سطح امنيتي بالايي هستند، مي توانند منابع بيشتري را به امنيت اختصاص دهند و در نتيجه مجموعه بيشتري از پيشنهادات را نيز به كار گيرند.
در استانداردهاي CERT براي كدنويسي امن، از برچسب recommendation براي نشان دادن پيشنهادات استفاده مي شود.


استثناءها


هر قانون يا پيشنهادي ممكن است حاوي مجموعه كوچكي از استثناءها باشد كه نشان مي دهد تحت چه شرايطي به كار بردن قانون يا پيشنهاد مذكور براي بالا بردن سطح امنيتي محصول ضروري نيست. استثناءها فقط براي اطلاع كاربر عنوان مي شوند و پيروي از آنها لازم نيست. استثناء ها در استاندارد CERT براي برنامه نويسي امن با برچسب exceptions مشخص مي شوند.

شناسه ها


در استانداردهاي مذكور، هر قانون يا پيشنهاد، داراي يك شناسه يكتا است.(براي مثال PRE30-C ) اين شناسه ها از سه قسمت تشكيل شده اند:

  1. يك بخش سه حرفي كه نشان دهنده بخش استاندارد است براي مثال PRE كه نشان دهنده preprocessor است. اين بخش نشان دهنده روش هاي كدنويسي مشابه در يك گروه است.
  2. يك عدد دو رقمي بين 00 تا 99 كه براي يكتا سازي شناسه به كار مي رود. شماره هاي 00 تا 29 براي پيشنهادات و شماره هاي 30 تا 99 براي قانون ها ذخيره شده اند.
  3. قسمت سوم مربوط به نام زبان است براي مثال C.

به كارگيري استاندارد


قوانين استانداردهاي مذكور مي توانند با قوانين استانداردهاي داخل سازمان تركيب شوند. البته واضح است كه استانداردهاي داخل سازمان بايد با استانداردهاي CERT سازگاري داشته باشند.
بهتر است يك سري برنامه هاي آموزشي براي برنامه نويسان ترتيب داد و در طي آن شيوه به كارگيري صحيح استانداردهاي مذكور را در برنامه نويسي آموزش داد.
زماني كه يك استاندارد كدنويسي در توليد محصول پياده سازي مي شود، لازم است با استفاده از ابزارهايي، ميزان تطابق محصول توليد شده با استاندارد به كار گرفته شده را سنجيد. همان طور كه قبلاً نيز گفته شد يكي از شرايط تبديل شدن يك روش برنامه نويسي به قانون، امكان بررسي به كار گيري آن در نرم افزار است. بررسي مي تواند به صورت دستي و يا به صورت اتوماتيك انجام شود. طبيعي است كه بررسي دستي زحمت زيادي را مي طلبد و همچنين احتمال خطا در آن بالا است. بررسي اتوماتيك نيز عاري از خطا نيست، زيرا برخي خطاها حالت دنباله دار داشته و ابزار اتوماتيك بايد بتواند هر گونه تخطي از قانون را تشخيص داده و دنباله آن را نيز اصلاح كند. حتي با وجود چالش هاي مذكور نيز، روش اتوماتيك براي بررسي همخواني محصول با استانداردها مقرون به صرفه تر است.
ابزارهاي تحليل نرم افزار مي توانند گواهي همخواني با يك استاندارد را دريافت كنند. سپس شركت هاي گواهي دهنده مجاز قادرند يك نرم افزار را با استفاده از ابزارهاي تحليل نرم افزار تأييد شده مورد بازرسي قرار داده و در صورت همخواني با استاندارد، گواهي مربوطه را مبني بر رعايت استانداردهاي كدنويسي امن ابه آن نرم افزار عطا كنند.


معيار سنجش آسيب پذيري


معيار آسيب پذيري CERT، عددي بين 0 و 180 است كه ميزان اهميت يك آسيب پذيري را نشان مي دهد. در نگاشت يك عدد به آسيب پذيري، معيارهاي متفاوتي همچون ميزان شناخته شده بودن آن، وجود كد سوءاستفاده موفق از آن، در خطر قرار گرفتن زيرساخت هاي شبكه، تعداد رايانه هايي كه در خطر آسيب پذيري مذكور قرار دارند و غيره دخيل هستند. البته معيار مذكور خطي نبوده و به اين معني نيست كه يك آسيب پذيري با درجه 40 دو برابر يك آسيب پذيري با درجه 20 خطرناك است.

ارزيابي خطر


در استانداردهاي كدنويسي امن CERT، هر راهنما داراي بخشي به نام ارزيابي خطر يا Risk Assessment است كه به برنامه نويسان نشان مي دهد در صورت رسيدگي نكردن به يك آسيب پذيري خاص در كد برنامه، ممكن است چه نتايج بالقوه اي به بار آيد. اين اطلاعات در اولويت بندي آسيب پذيري هايي كه بايد رسيدگي شوند، توسط تيم برطرف كننده آسيب پذيري ها به كار گرفته مي شود.
ناديده انگاشتن هر قانون منجر به ايجاد آسيب پذيري هايي مي شود كه هر كدام از آنها از لحاظ جديت خطر (severity)، احتمال سوءاستفاده (likelihood) و هزينه ترميم (Remediation Cost) متفاوت هستند. در بخش ارزيابي خطر هر راهنما، موارد مذكور نشان داده مي شود. در جداول زير دسته بندي هاي مذكور نشان داده شده اند.

جديت يا Severity



احتمال سوءاستفاده يا likelihood



هزينه ترميم



سه مقدار مذكور در يكديگر ضرب خواهند شد تا ميزان اهميت به كارگيري هر قانون را نشان دهند. عدد به دست آمده مقداري بين 1 تا 27 خواهد بود كه تنها ده رقم 1، 2، 3، 4، 6، 8، 9، 12، 18 و 27 مجاز هستند. قوانين و پيشنهاداتي كه داراي اولويت بين 1 تا 4 باشند سطح 3، 6 تا 9 سطح 2 و 12 تا 27 سطح 1 در نظر گرفته مي شوند. در جدول زير اين سه سطح نشان داده شده اند.



به دليل ميزان جديت حملات ايجاد شده و احتمال بالاي سوءاستفاده در صورت رعايت نكردن قوانين سطح 1 ، اين قوانين از اهميت بيشتري برخوردار است. لذا در سري مقالات مرتبط با استاندارد كدنويسي امن، تنها به قوانين و پيشنهادات سطح اول خواهيم پرداخت.

در مقاله هاي بعدي در مورد كد نويسي امن در C، C++ و جاوا با توجه به استاندارد برنامه نويسي امن CERT صحبت خواهيم كرد.


نظرات

بدون نظر
شما برای نظر دادن باید وارد شوید

نوشته

 
تاریخ ایجاد: 18 مرداد 1393

دسته‌ها

امتیاز

امتیاز شما
تعداد امتیازها:0