بخشی از مقاله
ارزیابی امنیت نرم افزار و ارائه مدلهای امنیت براساس شبکه پتری تصادفی
چکیده - در فرآیند توسعه نرم افزار از فاز شناسایی و استخراج نیازمندی ها به عنوان مهمترین و شاخص ترین گام توسعه نام برده می شود؛ چرا که عدم برخورداری از درک کامل و دقیق از خواسته های مشتری ضمن افزایش هزینه های توسعه نرم افزار تیم توسعه را در نیل به محصولی مطابق با انتظار کاربر غافل خواهد ساخت. در این بین دسته ای از نیازمندی ها به نیازمندی ها غیر عملیاتی موسوم هستند که به چگونگی تحقق نیازمندی های عملیاتی در سطح سیستم می پردازند. در حوزه نیازمندی ها غیر عملیاتی دسته ای از نیازمندی ها به نیازمندی ها امنیتی یاد می شود که به موضوعاتی چون چگونگی تحقق یک محصول نرم افزاری با کمترین آسیب پذیری های امنیتی می پردازند. از این رو در این مقاله ، روش های مختلف استخراج و تأیید نیازمندی های امنیتی پرداخته و بررسی خواهیم کرد که بکارگیری و پیروی از این روش ها چگونه می تواند منجر به نیل به یک محصول نرم افزاری امن مطابق با نیاز کارفرما گردد. همچنین لیستی جامعی از متریک های امنیتی در حوزه امنیت نرم افزار ، الگوهای امنیتی و نیز ارائه برخی از مدلهای ارزیابی امنیت نرم افزار با استفاده از پتری نت تصادفی، می پردازیم.
کلید واژه : آسیب پذیری ، الگوهای امنیتی ، پتری نت تصادفی ، متریک های امنیتی ، نیازمندی های امنیتی، petri net
-1 مقدمه
امنیت در کاربرد های امروزی از جایگـاه ویـژه ای برخـوردار بــوده و لازم اســت ســازمان هــا و بــه خصــوص تولیـد کننــدگان محصولات نرم افزاری توجه به آن را در محصـولات خـود مـدنظر قرار دهند. سیستم های تحت شبکه به دلیل ماهیت خاص خـود و دسترسی بدون محـدودیت انـواع کـاربران از حیـث امنیـت، از اهمیت فوق العاده ای برخوردار می باشند. وجود تنها یک آسـیب پذیری در این سیستم ها کافی است کـه امنیـت کـل سیسـتم و داده های سیستم را به مخاطره اندازد. بر اساس مطالعات صـورت گرفته توسط گروه گارتنر و گزارش منتشره از سوی این موسسه، امروزه عمده حملات موفق به سیسـتم هـای اطلاعـاتی از ناحیـه لایه کاربرد و آسیب پذیری های موجود در این لایه صـورت مـی گیرد؛ به گونه ای که حدود هفتاد درصد از حملات صورت گرفته به سیستم های تحت وب متمرکز بر لایه کاربرد به دلیـل وجـود آسیب پذیری های امنیتی بوده و نقـش ابزارهـای امنیتـی نظیـر سیستم های تشخیص نفوذ یا نرم افزارهای ویـروس یـاب بسـیار کم رنگ بوده است. [1]
امن سازی یک سیستم، فرآینـدی اسـت کـه آغـاز آن آغـاز پروژه نرم افزاری و پایان آن پایان توسعه محصول و تحویل آن به کارفرماست. مقوله امنیت سیستم های اطلاعاتی و امن سازی آن در دو حوزه متفاوت قابـل بحـث و بررسـی اسـت: دیـدگاه اول از حیث متدهای مختلف و دیدگاه دوم از حیث موضوعات مبتنی بر فن آوری.[2] دیدگاه اول به طرح اقدامات و فعالیت لازم در رونـد توسعه نرم افزار به منظـور کـاهش آسـیب پـذیری سـامانه هـای اطلاعاتی اسـت ایـن در حـالی اسـت کـه در دیـدگاه دوم هـدف بکارگیری ابزارها و فن آوری هـای موجـود بـه منظـور شناسـایی آسیبپذیریهای امنیتی موجود در سـطح محصـول نـرمافـزاری و تلاش برای رفع آنان به روش های مختلف نظیر وصـله گـذاری و امنسازی می باشد.
در این مقاله ابتدا بـه بررسـی امنیـت نـرم افـزار و روشـهای استخراج نیازهای امنیتی می پردازدیم ، سـپس راهکارهـای امـن سازی نرم افزار ، متریک ها و الگوهای امنیتی مورد بررسی قـرار می دهیم و در نهایت به ارائه مدلهای امنیتی با استفاده از شـبکه پتری تصادفی به منظور ارزیابی امنیت نرم افزار ارائه می دهیم.
-2 امنیت نرم افزار
دسته ای از نیازمنـدی هـا بـه نیازمنـدی هـا غیـر عملیـاتی موسوم هستند که به چگونگی تحقق نیازمندی های عملیـاتی در سطح سیستم می پردازند. در حوزه نیازمندی هـا غیـر عملیـاتی دسته ای از نیازمندی ها به نیازمندی ها امنیتی یاد می شود کـه به موضوعاتی چون چگونگی تحقق یک محصـول نـرم افـزاری بـا کمترین آسیب پذیری های امنیتی می پردازند. امنیت ویژگـی از سیســتم اســت کــه توانــایی یـک سیســتم در مقاومــت در برابــر دسترسی های غیرمجاز و همچنـین امتنـاع از ارائـه سـرویس در زمانی که در حال ارائه سرویس به کاربران مشـروع مـی باشـد را نشان می دهد. تعریف عمومی از امنیـت بـه چنـد صـورت آورده شده است:
1. عاری از خطر (ایمنی)
2. حفاظت از اطلاعـات در برابـر افشـا، دسـتکاری و خرابکـاری. (حفاظتها می تواند بصورت تکنیکی و اجرایی باشد.)
3. خصیصهای است که منجر می شود سیاست امنیت با درجهای از تضمین محقق شود.
4معمولاً. در جهت محرمانهسازی با هدف ایجاد اعتماد، بخصوص در شرایطی که لایههایی چندگانه امنیتی نیاز می باشد.
پارامترهای کلیدی و سه گانه امنیت (C-I-A) عبارتند از:
1. محرمــانگی : (Confidentiality) کســب اطمینــان از اینکــه اطلاعات بر اساس طبقه بندی محرمـانگی تنهـا در اختیـار افراد مجاز باشد
2. صحت و یکپارچگی((Integrity تـامین دقـت لازم و کامـل بودن داده ها و روش های پردازش و یکپارچگی بـه منظـور حفظ اطلاعات از گزند تغییر و یا آلوده شدن
3. دسترسی افـراد مجـاز (Availability) :کسـب اطمینـان از اینکه افراد مجاز در زمان هـای لازم بـه داده هـا و سـرمایه های موجود دسترسی داشته باشند.
وجود آسیب پذیریهای امنیتی در این حوزه می تواند پایـه گذار حملات موفق امنیتی از سوی کاربران متخاصم باشد
در مبحث امنیت ، به طور مکرر اصطلاح آسیب پذیری بکـار گرفته میشود؛ آسیب پذیری که از آن به حفره یا روزنـه امنیتـی نیز یاد می شود به قطعه کدی از کد منبع نرم افـزار گفتـه مـی-شود که به دلیل پیاده سازی خاص امکان تدارک حمله موفقیـت آمیز از آن برای حمله کننده فراهم می شود.[3]
-3 استخراج نیازمندی های امنیتی
استخراج لیست کامل نیازمندی های امنیتی در سطح یـک سامانه نرم افزاری مستلزم شناخت دقیق اهداف امنیتـی سـازمان اســت.اهداف امنیتــی ســازمان از مســتند اهــداف تجاری/کــاری سازمان قابل استخراج است. شـکل2 ایـن موضـوع را بـه تصـویر کشیده است.
از آنجایی که اهداف امنیتی در سطح سازمان متنوع، مبهم وگاهاً متضاد تعریف می شوند لذا تحقق لیست کامل این اهداف مستلزم شناسایی حامیان اصلی پروژه می باشد. محیط استفاده نرم افزار در تحقق و اعمال اهداف امنیتی بسیار تأثیرگذار می باشد؛ همچنین باید در نظر داشت که با توجه به وجود تضادها بین خواسته ها و اهداف کلان سازمانی تقریب این اهداف به یکدیگر و حذف اهداف متضاد گامی است که بایستی توسط تیم مهندسی نیازمندیهای امنیتی صورت گیرد.
روشهای مختلفی به منظور استخراج نیازمندیهای امنیتی وجود دارد که نمونههایی از این روشها در جدول 1 اشاره شده است.[4] در این جدول، 9 روش استخراج نیازهای امنیتی با یکدیگر مقایسه شده اند که آن 9 روش عبارت است از :
misuse cases 1.
Soft Systems Methodology (SSM) 2.
Quality Function Deployment (QFD) 3.
Controlled Requirements Expression (CORE) 4.
Issue Based Information Systems (IBIS) 5.
6. .Joint Application Development (JAD)
Feature -Oriented Domain Analysis (FODA) 7.
Critical Discourse Analysis (CDA) 8.
the Accelerated Requirements Method (ARM) × 9.
به طور کلی می توان فرآیند استخراج نیازهای امنیتی را در 9 گام - که در شکل 3 نشان داده شده است- نمایش داد.[5] این 9 گام عبارت است از :
گام: 1 توافق در تعاریف؛ پس از تشکیل تیم تحلیل امنیت به منظور اتفاق نظر بین اعضای تیم امنیتی و ذینفعان در واژه ها و مسائل مختلف یک واژه نامه یا Glossary ایجاد می کنند.
گام: 2 تحلیل مشخصههای سیستم؛ به منظور درک کامل سیستم باید مولفه ها و روابط بینشان را شناسائی کرده و سناریوهای کاربردی را توصیف و فرضیات و وابستگی ها تعیین کنند.
گام:3 شناسایی سرمایه و فرآیندهای بحرانی؛ دارایی ها و فرایندها منابعی واقعی و مطلق هستند که یک سیستم بایدآنها را از تهدیدها محافظت کند.
گام:4 شناسایی آسیب پذیری های سیستم؛ در فرایند مهندسی نیازهای امنیتی، آنالیز و تحلیل آسیب پذیری ها بصورت مداوم عنصری ضروری برای تضمین امنیت کامل یک سیستم سازمانی خواهد بود، که لازم است در فازهای متفاوتی از قبیل طراحی، پیادهسازی و اجرا انجام شود
گام: 5 شناسایی عوامل و منابع تهدید؛ هدف این مرحله، استفاده از اطلاعات جمع آوری شده از مراحل قبلی و تعیین تهدیدهای سیستم می باشد. تشخیص تهدیدها فرایندی است که مبدا ایجاد تهدید را نشان می دهد گام:6 شناسایی اهداف امنیتی؛ براساس لیست تهدیدهای تعیین
شده از مراحل قبلی، اهداف امنیتی تعیین می شود .
گام: 7 تولید مدل تهدید؛ به منظور درک بهتری از تهدیدات درونی و بیرونی لازم است از مدلسازی امنیتی مانند attack tree model و diagram misuse case استفاده نمائیم.
گام: 8 ارزیابی ریسک؛ هدف این مرحله، ارزیابی و تعیین احتمال وقوع ریسک های ناشی از تهدیدها می باشد. ارزیابی ریسک در سه نوع -1 ارزیابی کیفی -2 ارزیابی کمی -3 ارزیابی تلفیقی به عنوان ترکیب دو ارزیابی قبلی صورت می گیرد.
گام:9 استخراج نیازمندیهای امنیتی؛ این مرحله هسته فرایند مهندسی نیازهای امنیتی است. نیازهای امنیتی از طریق تحلیل هر هدف امنیتی و توصیف تهدیدهای مربوطه بدست می آید و می تواند خطرات را تا سطح قابل قبولی کاهش دهد.
-4 رویکردهای افزایش امنیت
نیل به یک محصول نرم افزاری امن مستلزم اتخـاذ سیاسـت ها و پیروی از رویه های مختلفی است تا متولیان توسعه نرم افزار را از توسعه یک محصول نرم افزاری با حداقل آسیب پذیری های امنیتی مطمئن سازد. برای این منظـور راهبردهـای مختلفـی در دستور کار قرار گرفته است که در این بخش از مقاله به ارائه ایـن راهبردها پرداخته می شود
-1-4 بهره گیری از تست نفوذ
تست نفوذ که نام دیگر هک اخلاقی است از جمله تکنیک-هایی است که در مرحله تست و توسـط تیمـی مجـرب آشـنا بـا آخرین تکنیکهای بکار رفته از سوی هکرها برای نفوذ و شکسـت روال های امنیتی در سطح نرم افزار بکار گرفته می شود. در ایـن روش تست، لزومی برای دسترسی به کد منبـع نـرم افـزار وجـود نداشته و صرفاً با تزریق خطا به رابـط نـرم افـزار در تـلاش بـرای ایجــاد انحــراف در رفتــار نــرم افــزار هســتیم. نتــایج مطالعــه
رفتارشناسی از نگاه یک هکر در اختیار اعضای تـیم توسـعه قـرار گرفته تا با اصلاح رویه های موجود و یا افزودن رویه هـای مـورد نیاز ارتقای امنیت سیستم تحقق یابد.[6]
-2-4 بهره گیری تست امنیت در سراسر چرخه حیات
تست امنیت بررسی کارایی مکانیزم های دفاعی سیسـتم در مقابل دسترسیهای نامطلوب کاربران بدون مجـوز و حفـظ منـابع سیستم در مقابل کاربران ناشایست، و همچنین اجـازه دسترسـی به کاربران دارای مجوز ، میباشد. از این رو ابتدا بایـد نیازمنـدی - های امنیتی ذینفعان تولید نرم افزار بـه دقـت شناسـایی شـود و پس از آن با توجه به ماموریت برنامهی کـاربردی بـه یـک سـطح توافق شده از امنیت دست یافت ، سپس با تعریـف فعالیـت هـای امنیتی در یک پروژه تولید نرم افزار و نگاشت این فعالیـتهـا بـه نقشهای درگیر در فعالیت تولید نرم افزار نیازمندیهـای امنیتـی ذینفعــان را بــرآورده و از آســیبپــذیریهای پــیش روی برنامــه کاربردی جلوگیری نمود.[7]
-3-4 بهرگیری از تست فشار
تست فشار فرآیندی است که به منظور ارزیابی عملکرد و رفتار نرم افزار، بستر ارتباطی ، ابزار و ... در شرایط خاص و بحرانی سیستم مورد استفاده قرار می گیرد. زمانی که حجم بالای درخواست ها جهت برخورداری از سرویسهای ارائه شده به سمت نرم افزار گسیل میگردد ، مهم است رفتار نرم افزار به دقت مورد بررسی و مطالعه قرار گرفته تا مشخص گردد که در چنین شرایطی رفتار و عکس العمل آن به این حجم درخواستها چگونه است. بسیاری از سیستم های نرم افزاری در چنین شرایطی دسترس پذیری خود را از دست داده و عملا امکان سرویس دهی به سایر کاربران مقدور نمیگردد. بسیاری از سیستمهای نرمافزاری حتی از نظر امنیتی بسیار آسیب پذیر گشته و شرایط مناسبتری را برای حمله نفوذگر و سوء استفاده احتمالی سایر کاربران فراهم می کنند، از این رو باید مورد توجه متولیان امنیت قرار گیرد.
-4-4 استفاده از الگوهای امنیتی در معماری نرم افزار
یکی دیگر از راهبردهای طراحی نرم افزار مطمئن ارائـه یـک معماری امنیتی برای سیسـتم پیشـنهادی اسـت. از آنجـایی کـه معماری امنیتی سیستم پیشـنهادی مبتنـی بـر تحلیـل سیسـتم پیشنهادی انجام مـیشـود و از آنجـایی کـه در تحلیـل سیسـتم پیشنهادی نیازهای امنیتی و بالطبع سیسـتمی، بایسـتی در نظـر گرفته شود لذا نیل به یک معماری امنیتی تا حد زیادی می تواند اطمینان در لحاظ نمودن مشخصه های امنیتی را افـزایش دهـد. میزان موفقیت یک معمـاری پیشـنهادی در گـرو بهـرهگیـری از راهکارهای پذیرفته شده برای چالش های مختلف است؛ الگوهای امنیتی به عنوان بخشـی از راه کارهـای پذیرفتـه شـده در حـوزه امنیت سیستم نرم افزاری محسوب مـیشـود کـه بکـارگیری آن کیفیت معماری پیشنهادی نرم افزار را تحـت الشـعاع قـرار مـی-دهد.[3,8] در بخش چهار راجع به الگوهای امنیتی نرمافزار اشاره شده است.
-5-4 بازبینی کد و پیاده سازی امن