تیم امنیت سایبری حامیان ولایت

اللهم إیّاک نعبد و إیّاک نستعین

تیم امنیت سایبری حامیان ولایت

اللهم إیّاک نعبد و إیّاک نستعین

تیم  امنیت سایبری حامیان ولایت

تیم امنیت سایبری حامیان ولایت در سال 1392 فعالیت خود را در زمینه های هک و امنیت آغاز کرد و به زودی به کمک کاربران فعال و مدیران لایق یکی از بزرگ ترین انجمن های هک و امنیت ایران خواهد شد . تیم امنیت سایبری ولایت فقط جهت اشنایی و بالا بردن سطح اطلاعات هم وطنان عزیزمان در زمینه ی هک و امنیت و طبق قوانین جمهوری اسلامی ایران فعالیت میکند. گروه ما از همین جا اعلام می دارد که هدف ما ارتقای امنیت سایت های ایرانی است وبه هیچ عنوان به سایت های ایرانی حمله نخواهیم کرد و هرگونه حمله ای بنام تیم ما، مورد تایید گروه ما نیست.

پیوندهای روزانه

عنصر اصلی در کدنویسی امن با زبان های مختلف برنامه نویسی، مستند سازی خوب و استفاده از استانداردهای قابل اجرا است. استانداردهای کدنویسی، برنامه نویسان را ترغیب به پیروی از مجموعه ای واحد از قوانین و راهنماییها می کند که بر اساس نیازمندی های پروژه و سازمان تعیین شده است، نه بر اساس سلایق و مهارت های مختلف برنامه نویسان. به محض تعیین استانداردهای مذکور، می توان از آن به عنوان معیاری برای ارزیابی کدهای منبع، چه به صورت دستی و چه به صورت اتوماتیک استفاده کرد. از استانداردهای معروف در این زمینه می توان به استانداردCERT برای کدنویسی امن اشاره کرد که یک سری از قوانین و پیشنهادات را برای کد نویسی امن با زبان های برنامه نویسی C، C++ و جاوا ارائه می دهد. هدف از این قوانین و پیشنهادات، حذف عادت های کدنویسی ناامن و رفتارهای تعریف نشده است که منجر به آسیب پذیری های قابل سوءاستفاده می شود. به کارگیری استانداردهای مذکور منجر به تولید سیستم هایی با کیفیت بالاتر می شود که در برابر حملات بالقوه، پایدارتر و مقاوم تر هستند. در مقاله "آشنایی با استاندارد CERT برای برنامه نویسی امن"، کلیات استاندارد CERT در زمینه مزبور را توضیح دادیم و در این مقاله به صورت تخصصی تر شیوه برنامه نویسی امن با زبان C را مورد بررسی قرار می دهیم. قابل ذکر است که در این استاندارد 89 قانون و 132 پیشنهاد برای برنامه نویسی امن با زبان C ارائه شده است که در سری مقالات کدنویسی امن با زبان C، مهمترین آنها را که در سطح یک قرار دارند، شرح خواهیم داد. برای کسب اطلاعات بیشتر در مورد سطح بندی قوانین و پیشنهادات به مقاله "آشنایی با استاندارد CERT برای برنامه نویسی امن" مراجعه فرمایید.

 
حوزه استاندارد CERT برای کدنویسی امن با C

استاندارد CERT برای کد نویسی امن با زبان برنامه نویسی C، به طور اختصاصی برای نسخه هایی که توسط موسسات زیر تعریف شده اند، تهیه شده است:

  • ISO/IEC 9899:1999 ویرایش دوم برای زبان C
  • Technical corrigenda TC1, TC2 and TC3
  • گسترش ISO/IEC TR 24731-1 برای کتابخانه C، قسمت اول: رابط های کاربر Bounds-checking
  • گسترش ISO/IEC PDTR 24731-2 برای کتابخانه C، قسمت دوم: Dynamic Allocation Functions

البته بسیاری از موارد مطرح شده در این استاندارد، قابلیت اعمال بر نسخه های قدیمی تر C را نیز دارد. همچنین هر چند که بهترین راه حل ها برای مشکلات کدنویسی امن غالباً وابسته به سکو هستند، اما استاندارد مذکور مستقل از سیستم عامل و سکو است. البته در بسیاری از موارد، استاندارد CERTبرای کدنویسی امن با C با سیستم های ویندوز و POSIX سازگاری دارد و همچنین در برخی از موارد دارای راه حل های اختصاصی برای سکوهایی همچون لینوکس و OpenBSD است.

 
دسته بندی قوانین و پیشنهادات


قوانین و پیشنهادات برنامه نویسی امن با زبان C به 14 زیرگروه تقسیم می شوند. در زیر دسته بندی مذکور و تعداد قوانین و پیشنهادات ارائه شده در هر زیرگروه آورده شده است.

ردیف دسته بندی قوانین پیشنهادات
1 Preprocessor)PRE) 2 11
2 Declarations and Initialization)DCL) 7 16
3 Expressions)EXP) 9 13
4 Integers)INT) 6 16
5 Floating Point)FLP) 5 4
6 Arrays)ARR) 9 3
7 Characters and Strings 8 9
8 Memory Management)MEM) 6 11
9 Input Output)FIO) 15 17
10 Environment)ENV) 3 5
11 Signals)SIG) 5 3
12 Error Handling)ERR) 3 7
13 Miscellaneous)MSC) 2 16
14 POSIX)POS) 8 3
مجموع 88 134


در ادامه قوانین و پیشنهادات سطح یک (L1) از هر بخش را توضیح می دهیم.


Preprocessor)PRE)

  1. پیشنهاد PRE01-C
    درون ماکروها، پرانتز به دور نام پارامترها قرار دهید. برای مثال کد زیر با این پیشنهاد همخوانی ندارد:
    #define CUBE(I) (I * I * I)

    برای همخوانی با پیشنهاد مذکور باید آن را به شکل زیر تغییر داد:
    #define CUBE(I) ( (I) * (I) * (I) )

  2. پیشنهاد PRE02-C
    لیست های جایگزینی ماکروها باید دارای پرانتز باشند. در زیر نمونه ای را که از پیشنهاد مذکور پیروی نکرده است مشاهده می کنید:
    #define CUBE(X) (X) * (X) * (X)

    برای همخوانی با پیشنهاد مذکور باید آن را به شکل زیر تغییر داد:
    #define CUBE(X) ((X) * (X) * (X))

  3. پیشنهاد PRE09-C
    نام توابع امن را با نام توابع قدیمی (deprecated) مانند gets() و یا از پیش ذخیره شده (obsolescent) مانند strcpy() جایگزین نکنید. یکی از کاربردهای ماکروها، اصلاح یک کد موجود جهت جایگزینی یک شناسه با شناسه دیگر است. برای مثال برای تغییر API های موجود می توان از ماکروها استفاده کرد. با وجودی که همواره خطراتی همراه با این کار وجود دارد، اما این روش زمانی واقعاً خطرناک می شود که نام یک تابع با نام توابعی که در زیر آمده است، جایگزین شود.
  4. پیشنهاد PRE10-C
    در صورتی که بیش از یک دستور در ماکرو وجود دارد، آن را درون حلقه do-while قرار دهید. به این ترتیب ماکروها می توانند به صورت امن در درون دستورات شرطی ( if clauses ) یا دیگر مکان هایی که باید دستورات درون ماکرو به صورت یک کل دیده شود، قرار گیرند.
    #define SWAP(x, y)
    do {
    tmp = x;
    x = y;
    y = tmp; }
    while (0)
  5. پیشنهاد PRE11-C
    در انتهای ماکروها علامت ";" را قرار ندهید. ماکروها معمولاً برای بالا بردن قابلیت خوانایی کد منبع مورد استفاده قرار می گیرند. دقت داشته باشید که ماکروها صرف نظر از اینکه دارای تنها یک دستور و یا بیشتر باشند نباید با علامت "; " تمام شوند. اضافه کردن ";" در انتهای ماکروها به صورت غیرمنتظره روند اجرای برنامه را تغییر می دهد. برای مثال، در کد زیر در حالی که برنامه نویس انتظار سه بار چاپ "inside for loop" را دارد ولی به علت وجود ";" روند اجرای برنامه تغییر کرده و متن مزبور تنها یک بار در خروجی چاپ می شود.
    #define FOR_LOOP(n) for(i=0; i<(n); i++);>
    int i;
    FOR_LOOP(3)
    {
    puts("Inside for loopn"); }
    برای اصلاح کد مزبور کافی است که علامت ";" از انتهای تعریف ماکرو برداشته شود.

    در قسمت بعدی سری مقالات "برنامه نویسی امن با زبان C"، پیشنهادات و قوانین سطح 1 زیر گروه های Expressions(EXP) و Integers(INT) را بررسی خواهیم کرد.
  • مدیرکل

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی