برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

اصول امنیت برنامه های وب ( بخش اول )

اینترنت و به دنبال آن وب ، دنیای نرم افزار را دستخوش تحولات فراوانی نموده است . ظهور نسل جدیدی از برنامه های کامپیوتری موسوم به "برنامه های وب " از جمله این تحولات عظیم است . پس از ارائه سرویس وب در سال 1991، وب سایت های متعددی ایجاد گردید .  اینگونه سایت ها به منظور ارائه اطلاعات به مخاطبان خود از صفحات وب ایستا استفاده می کردند . در چنین وب سایت هائی ، امکان تعامل کاربر با برنامه وجود نداشت .
با توجه به این که رویکرد فوق با ماهیت و یا روح  نرم افزار چندان سازگار نمی باشد ، تلاش های گسترده ای در جهت ایجاد محتویات پویا انجام و متعاقب آن ، فن آوری های متعددی ایجاد گردید . به عنوان نمونه ، با پیاده سازی فن آوری CGI ( برگرفته از Common Gateway Interface  ) ، امکان استفاده از برنامه های خارجی به منظور تولید محتویات پویا فراهم گردید . بدین ترتیب ، کاربران قادر به درج اطلاعات و ارسال آنها برای یک برنامه خارجی و یا اسکریپت سمت سرویس دهنده شدند . برنامه موجود در سمت سرویس دهنده پس از دریافت اطلاعات و انجام پردازش های تعریف شده ، نتایج را تولید و آنها را برای کاربر ارسال می نمود .
رویکرد فوق ،‌ به عنوان نقطه عطفی در برنامه های وب تلقی می گردد چراکه برای اولین مرتبه امکان تولید محتویات پویا در وب سایت ها فراهم گردید . از آن زمان تاکنون فن آوری های متعددی به منظور تولید برنامه های وب ایجاد شده است .  PHP و ASP.NET نمونه هائی در این زمینه می باشند .  صرفنظر از این که از کدام فن آوری به منظور ایجاد برنامه های وب استفاده می گردد ، ایمن سازی آنان از جمله اهداف مشترک تمامی پیاده کنندگان است .

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

امنیت برنامه های وب را می بایست با توجه به
نوع معماری و رفتار آنان بررسی نمود .

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

  • ما ایمن هستیم چون از یک فایروال استفاده می نمائیم . این تصور کاملا" اشتباه است و به نوع تهدید بستگی خواهد داشت . مثلا" یک فایروال قادر به تشخیص داده ورودی مخرب جهت ارسال به یک برنامه وب نمی باشد .  فایروال ها دارای عملکردی قابل قبول در رابطه با اعمال محدودیت بر روی پورت ها می باشند  و برخی از آنان می توانند همزمان با بررسی اطلاعات مبادله شده ،‌ امکانات برجسته حفاظتی را ارائه نمایند . فایروال ها جزء لاینفک در یک فریمورک امنیتی می باشند ولی نمی توان آنان را به عنوان یک راهکار جامع به منظور ایجاد و برپائی یک محیط ایمن در نظر گرفت .

  • ما ایمن هستیم چون از  SSL ( برگرفته ازSecure Sokets Layer ) استفاده می نمائیم SSL برای رمزنگاری ترافیک موجود بر روی شبکه یک گزینه ایده آل است ولی قادر به بررسی داده ورودی یک برنامه نمی باشد .

  • ما ایمن هستیم چون از سیستم عاملی استفاده می نمائیم که نسبت به سایر سیستم های عامل دارای امنیت بیشتری است . استدلال فوق با فرض درست بودن اصل قضیه ، نادرست و غیرمنطقی است چراکه امنیت یک فرآیند است نه یک محصول . بنابراین با بکارگیری یک محصول خاص ( به عنوان نمونه یک سیستم عامل ) نمی توان این ادعا را داشت که ما به یک محیط ایمن به منظور ایجاد برنامه های وب دست یافته ایم .

 با رد امنیت یک سیستم عامل نمی توان امنیت یک سیستم عامل دیگر را تائید نمود.
 ( من خوبم چون شما بد هستید ! )

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

  • Authentication ،  فرآیندی است که به کمک آن به صورت منحصربفرد سرویس گیرندگان یک برنامه شناسائی می گردند . کاربران ،  سرویس ها ، فرآیندها و کامپیوترها ،  نمونه هائی از سرویس گیرندگان یک برنامه می باشند . در واقع ، authentication هویت استفاده کنندگان یک برنامه را بررسی می نماید .

  • Authorization ، فرآیندی است که به کمک آن دستیابی سرویس گیرندگان تائید شده به منابع و عملیاتی که قصد انجام آن را دارند بررسی و مجوز لازم صادر می گردد. فایل ها ، بانک های اطلاعاتی ، جداول ، سطرها ، منابع موجود در سطح سیستم نظیر کلیدهای ریجتسری و داده پیکربندی ، نمونه هائی از منابع مورد درخواست سرویس گیرندگان می باشند . انجام تراکنش هائی خاص نظیر خرید یک محصول ، واریز و انتقال پول از یک حساب به حساب دیگر و یا افزایش اعتبار یک کارت اعتباری از جمله عملیاتی می باشند که می بایست مجوز استفاده از آنان برای سرویس گیرندگان صادر گردد . در واقع ، authorization محدوده مجاز عملیاتی را که یک سرویس گیرنده می تواند انجام دهد را مشخص می نماید .

  • Auditing :  ممیزی موثر و ثبت عملیات انجام شده یکی از اصول مهم در جلوگیری از انجام اعمال خلاف قانون است . بدین ترتیب این اطمینان ایجاد خواهد شد که یک کاربر نمی تواند باعث عدم انحام یک کار و یا فعالیت در سیستم گردد و یا یک تراکنش را مقداردهی اولیه نماید . مثلا" در یک سیستم e-commerce  می بایست از مکانیزم هائی استفاده گردد تا این اطمینان حاصل گردد که یک مصرف کننده نمی تواند سفارش انجام شده برای خرید یکصد نسخه از یک کتاب را انکار نماید .

  • Confidentiality ، که از آن با نام privacy نیز نام برده می شود ، فرآیندی است که به کمک آن این اطمینان ایجاد می گردد که حریم خصوصی داده رعایت و امکان مشاهده آن توسط کاربران غیرمجاز و یا سایر افرادی که  قادر به ردیابی ترافیک یک شبکه می باشند ، وجود نخواهد داشت . 

  •  Integrity ، فرآیندی است که به کمک آن این اطمینان ایجاد می گردد که داده در مقابل تغییرات تصادفی و یا تعمدی حفاظت خواهد شد . همانند privacy ، یکپارچگی اطلاعات یک فاکتور اساسی در خصوص امنیت داده محسوب می گردد ، خصوصا" در مواردی که داده در طول شبکه مبادله خواهد شد . یکپارچگی داده در حال حمل ،‌عموما" با استفاده از روش هائی نظیر hashing و یا کدهای تائید پیام انجام می شود .

  • Availability ، فرآیندی است که به کمک آن این اطمینان ایجاد خواهد شد که همواره داده برای کاربران مجاز در دسترس و قابل استفاده خواهد بود . در اغلب حملات از نوع DoS ، مهاجمان این هدف را دنبال می نمایند که بتوانند امکان استفاده و در دسترس بودن برنامه برای کاربران مجاز را غیرممکن و عملا" آن را از کار بیندازند .

تعاریف اولیه برخی از  اصطلاحات امنیتی : تهدیدات ، نقاط آسیب پذیر و حملات

  • تهدید ( threat ) : به هرگونه پتانسیل بروز یک رویداد مخرب و یا سایر موارد دیگر که می تواند به سرمایه های یک سازمان آسیب برساند ، تهدید  گفته می شود . به عبارت دیگر، هر رویدادی که بتواند به سرمایه های یک سازمان آسیب برساند ، در زمره تهدیدات محسوب می گردد . 

  • نقاط آسیب پذیر (vulnerability) : ضعف های موجود در یک سیستم می باشند که پتانسیل اولیه بروز یک رویداد مخرب را فراهم می نمایند . ضعف در طراحی ، پیکربندی اشتباه ، استفاده از روش های کدینگ غیرایمن مهمترین دلایل ایجاد یک ضعف در سیستم می باشند . ضعف در بررسی صحت داده ورودی توسط کاربر ، نمونه ای از یک لایه آسیب پذیر در یک برنامه است که می تواند زمینه بروز یک تهاجم را فراهم نماید .

  • تهاجم (attack) : عملیاتی است که محوریت آن سوء استفاده از نقاط آسیب پذیر و پتانسیل های بروز یک رویداد مخرب می باشد .  ارسال ورودی مخرب به یک برنامه و یا flooding یک شبکه به منظور از کار انداختن یک سرویس ، نمونه هائی در این زمینه می باشد .

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

چگونه می توان یک برنامه وب ایمن را ایجاد نمود ؟
تا زمانی که شناخت مناسبی نسبت به تهدیدات وجود نداشته باشد ، امکان ایجاد یک برنامه وب ایمن وجود نخواهد داشت . بنابراین قبل از هر چیز لازم است که با "مدل تهدیدات " موجود آشنا شویم . هدف مدل فوق، آنالیز معماری و نحوه طراحی برنامه به منظور شناسائی نقاط آسیب پذیری است که ممکن است به صورت تصادفی توسط یک کاربر ناآگاه و یا مهاجمان با اهداف مخرب مورد سوء استفاده قرار گرفته تا با استناد به آنان بتوانند موجودیت و امنیت  سیستم را با خطر مواجه نمایند  .
پس از آسنائی با تهدیدات ، می بایست با بکارگیری مجموعه ای از اصول امنیتی اقدام به طراحی سیستم نمود . در ادامه ، پیاده کنندگان می بایست از روش های ایمن به منظور نوشتن کدهای مطمئن ، مستحکم و قابل اعتماد استفاده نمایند . پس از طراحی و پیاده سازی برنامه ، می بایست از یک شبکه ایمن ، یک host مطمئن و یک پیکربندی مناسب بر روی سرویس دهنده ،‌ استفاده گردد .
ایجاد یک برنامه وب ایمن ، مستلزم اقدامات امنیتی چند جانبه ای است  که موفقیت در تمامی آنان ، ایمن بودن برنامه های‌ وب را تضمین خواهد کرد . ایمن سازی شبکه ، host و برنامه ، رئوس مثلث امنیتی ایجاد برنامه های وب ایمن را تشکیل می دهند .

ایمن سازی شبکه ، host و برنامه
به منظور  ایجاد برنامه های وب ایمن ، تبعیت از یک رویکرد جامع امری است الزامی . بنابراین ، می بایست امنیت برنامه های‌ وب را در سه لایه متفاوت بررسی و اقدامات لازم را در هر لایه با توجه به جایگاه آن انجام داد . شکل زیر سه لایه مهم به منظور ایجاد برنامه های وب ایمن را نشان می دهد .

 وجود یک نقطه آسیب پذیر در شبکه به یک مهاجم اجازه می دهد تا کنترل یک host  و یا برنامه را بدست بگیرد .

وجود یک نقطه آسیب پذیر در host  به یک مهاجم اجازه می دهد تا بتواند کنترل یک شبکه و یا برنامه را بدست بگیرد .

وجود یک نقطه آسیب پذیر در برنامه به یک مهاجم اجازه می دهد تا کنترل یک host  و یا شبکه را بدست بگیرد .

 در بخش دوم به بررسی هر یک از لایه های فوق خواهیم پرداخت .

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد