توسعه امن نرم افزار
بسمه تعالی
1
عناوین
مرور تکـ صفحه ای جلسه قبلـ
مباحثــ تــسـت نــفـــوذ
معرفـی تست نفــوذ
مراحلـ تست استاندارد
ابزارهایـــ تستـــ
نــتیجه گــــیریـ
2
تست نفوذ
هرگزپختن املت بدون شکستن تخم مرغ ها ممکن نیست
3
تعریف
تست نفوذ چیست؟
رویه ارزیابی امنیت برنامه از طریق شبیه سازی حملات از طرف حمله کنندگان بیرونی یا درونی (با سطوح دسترسی متفاوت انتسابی یا اکتسابی آنان)*
به تعریف توجه کنید! بیشتر منابع موجود در زمینه تست نفوذ، تنها به جنبه های امنیت شبکه ای و تست برنامه های تحت وب توجه می کنند.
*http://www.isaca.org/Pages/Glossary.aspx?tid=651&char=P
4
تفاوت تست نفوذ با تست کارکردی برنامه
تست کارکردی معمولا به دنبال ویژگی های عملکرد صحیح برنامه بر اساس کارکردهای تعیین شده است
ولی، امنیت نرم افزار یک یا چند کارکرد یا ویژگی نیست
حتی اگر در برنامه کارکردهای امنیتی مثل رمزنگاری و … داشته باشیم<<<< اغلب آسیب پذیری ها مستقیما به این کارکرد ها مربوط نیستند<<< به سوء استفاده حمله کننده از کارکردها باز می گردند.
تست کارکردی<<<< تست مثبت ها (وجود کارکردها)
تست نفوذ <<<< تست منفی ها (عدم وجود حفره هایی که الزاما در کارکرد خاصی نمی گنجند)
5
در هر زمینه ای تست منفی ها چالش بزرگ تری از تست مثبت هاست
چند تست لازم است تا بتوان گفت که این سیستم به حد کافی تحت حمله امن است؟!
اگر تست منفی ها هیچ خطایی را نشان دهد تنها به معنای نبود خطا تحت یک تست خاص است و به هیچ وجه به معنای نبود کلی خطا نیست
6
آسیب پذیری های هدف
7
تولد آسیب پذیری در 3 مرحله کلی حیات نرم افزار :
تعریف ویژگی ها و طراحی
کشف عیوب طراحی دشوار بوده و در جلسه گذشته و آینده بدان پرداخته شده و می شود
توسعه
به دلیل پیاده سازی نادرست و یا نامطلوب رخ داده است
به کارگیری در محیط عملیاتی
به دلیل تنظیمات پیش فرض و یا مستندسازی نادرست برای به کارگیری امن نرم افزار رخ داده است .
تست نفوذ نیازمند هر دو کلاه :
کلاه سفید برای اطمینان از عملکرد درست کارکردهای امنیتی برنامه
کلاه سیاه برای اطمینان از عدم نفوذ حمله کننده به کل برنامه یا سیستم
8
وضعیت فعلی
9
در توسعه های فعلی نرم افزار به ندرت نیازمندی های امنیتی، سناریو های سوء کاربرد، دانش ریسک های امنیتی و نیز الگوهای حملات در طراحی مورد توجه قرار می گیرد.
تست نیز همین وضعیت را دارد.
در نتیجه :
یافته های امنیتی قائم به شخص بوده و در میان تیم های مختلف و در طول زمان قابل تکرار نیستند…
با این وضع در عمل تست نفوذ تنها بخش کوچکی از ریسک های امنیتی موجود را می یابد.
نتیجه نهایی<<< القای امنیت دروغین به نرم افزارهایی که امنیت نداشته اند….
10
مراحل تست نفوذ
بر اساس استاندارد PTES
Penetration Testing Execution Standard
اقدامات پیش از درگیری اولیه
جمع آوری اطلاعات
مد سازی تهدید
تحلیل آسیب پذیری
اکسپلویت نمودن آسیب پذیری
انجام عملیات بعد از اکسپلویت
گزارش دهی
11
اقدامات پیش از درگیری
فراهم سازی ابزارهای عمومی نفوذ
ابزارهای خاص بسته به نوع و عمق نفوذ
در بخش بعد به تفصیل به ابزارها خواهیم پرداخت
12
جمع آوری اطلاعات
یک حمله کننده به چه اطلاعاتی نیاز دارد و آن ها را از چه منابعی خواهد یافت؟
مکان یابی فیزیکی
مکان یابی مراکز داده
جمع آوری اطلاعات درباره کارکنان سازمان از منابع باز
ایمیل ها و ارتباطات درون سازمانی
اسکن پورت های باز
اطلاعات DNS
شنود فیزیکی بی سیم و با سیم در جست وجوی کلید ها و ..
جست وجوی اطلاعات SNMP
VoIP mapping
شناسایی سیستم ها، سیستم عامل ها، نسخه برنامه های کاربردی و سرور ها
انبوه ابزارهای غیرقابل باور در
هر حوزه!
قابل بحث در Mailing list درس در صورت تمایل به اطلاعات بیشتر
13
تحلیل آسیب پذیری
تست آسیب پذیری
فعالانه : سریع تر و مطمئن تر اما با ریسک بیشتر باقی گذاشتن نشانه
ابزارهای پویش آسیب پذیری و Fuzzing
منفعلانه: ریسک و نتیجه کمتر
ابزارهای شناسایی نوع سیستم مثل P0f، ابزارهای ثبت ترافیک مثل Wireshark
تایید آسیب پذیری
پیداکردن کد یا منابع لازم و تایید انجام پذیری اکسپلویت
تعیین راه های حمله
تهیه درخت حمله
شناسایی مکانیزم های حفاظتی (در سطح شبکه و سیستم)
14
گزارش دهی
گزارش در سطح مدیران اجرایی
اثرات تجاری
به همراه گزارش اولویت دهی ریسک
گزارش فنی
شناسایی موارد سیستماتیک و تحلیل فنی ریشه آسیب پذیری
یافته های فنی
توضیحات
صفحه تصویرها(Screenshot)!
ارسال و دریافت های صورت گرفته
مثال هایی برای اثبات مفهموم (PoC)
نتایج قابل تکرار
موارد آزمون
ماشه های خطا
قابلیت های رصد و پاسخگویی به واقعه (Incident Response)
اطلاعات جمع آوری شده
تحلیل آْسیب پذیری و اکسپلویت ها
معیارهای تست نفوذ
اثرات باقی مانده
موارد متداول
متدولوژی
اهداف
حوزه
خلاصه یافته ها
پیوستی از اولویت بندی ریسک
یک فرمت نمونه گزارش دهی(خلاصه گزارش)
15
لوگوی سازمان تست کننده
یادآوری محرمانگی و حفظ مسائل حریم خصوصی (در متن گزارش اصلی نیز بایست اشاره شود)
نیاز به خلاصه برای مدیران اجرایی که احتمالا قدم به قدم اعمال تست برایشان چندان جالب توجه نیست
مهم ترین بخش گزارش که باید به دقت نگاشته شود
16
انجام عملیات بعد از اکسپلویت
اقداماتی که بعد از اکسپلویت بایست انجام شود
جمع آوری اطلاعات احتمالی مورد نیاز (فایل ها، پیکربندی ها و …)
پاک کردن اطلاعات ممیزی(log)
غیر فعال کردن نرم افزار های حفاظتی
جمع آوری درهم شده (hash) کلمات عبور یا خود آنها
اجرای برنامه های مورد نظر
…
17
مرور ابزارها ی تست نفوذ
هدف از این بخش تنها آشنایی با رویکرد های مختلف موجود در ابزارهاست و نه آموزش نحوه کارکرد آن ها
کیفیت ابزارهای استفاده شده در تست نفوذ تا حد زیادی می تواند کیفیت تست را هم تحت تاثیر قرار دهد.
وجود ابزار برای مراحل مختلف و انواع تست علیه حملات گوناگون
هرچند در اکثر منابع<<< معرفی ابزارهای تست نرم افزار تحت وب
18
محل بروز حملات مختلف علیه سیستم نرم افزاری
19
فوائد استفاده از ابزار:
خودکار کردن اکثر رویه های مورد نیاز در تست
تولید خروجی قابل استفاده برای محاسبه معیارهای کنترلی
توجه! ابزار هیچ گاه جایگزین مرور یک تحلیل گر امنیتی ماهر نمی شود.
مخصوصا اینکه ابزارهای موجود ذاتا به سطح طراحی قابل اعمال نیستند.
20
ابزار های تست برنامه تحت وب
غالبا نام این ابزارها را به عنوان ابزار تست نفوذ خواهید شنید<<<لازمـــ ولی ناکافـــی
ابزار های شناسایی شبکه به صورت برون خط و ابزارهای نگاشت توپولوژی شبکه
ابزارهای پویش آسیب پذیری acunetix
ابزارهای اخذ ترافیک وب مثل ieinspector
رویکرد Continuous Dynamic Application Security Testing محصول Cenzic برای تست Cloud, Mobile و برنامه های تحت وب
21
ابزارهای تست نفوذ نرم افزار
ابزارهای تزریق خطا
دیباگر ها، دیس اسمبلر ها و دیکامپایلر
ابزارهای بررسی فراخوانی ها و Dll ها مثل DLLSPY
ابزارهای بررسی پیمانه ها و وابستگی های مابین مثل dependencywalker
Fuzzing
مکانیزم تزریق خطا
تزریق کد به برنامه یا پیمانه های محیطی در جست و جو برای یافتن خطاهای مربوط به کد اداره خطا (که در انواع دیگر تست ممکن است یافته نشوند).
انتقال برنامه به حالات تعریف نشده یا اداره نشده (آیا برنامه همه خطاهای احتمالی را اداره می کند؟)
دارای انواعی کلی تر(در مباحث تحمل پذیری خطا) :
تزریق خطای سخت افزار
تزریق خطای نرم افزار
زمان کامپایل
زمان اجرا
تزریق خطای پروتکل
تزریق خطای نرم افزاری قابل انجام در محیط های کاملا مجازی شده تا محیط عادی برنامه
22
Holodeck
یک ابزار تزریق خطای قوی
استفاده در توسعه دهندگان سرشناسی چون Adobe, McAfee و مایکروسافت
محیط شبیه سازی شده برای تست
شبیه سازی شکست در فراخوانی سیستم عامل ( برای شبیه سازی شرایطی مثل در حال استفاده بودن فایل انحصارا قابل دسترسی، پر بودن حافظه، یا پایین بودن شبکه و … )
امکان تعریف خطاهای خاص توسط توسعه دهنده
دارای دیباگر تجمیعی برای اشکال یابی همزمان
و ….
23
شمای محیط Holodeck
24
مکانیزم fuzzing
25
مکانیزم کشف آسیب پذیری های نرم افزار با فراهم کردن ورودی های غیر منتظره و رصد عکس العمل برنامه
تصویر از blog.rootshell.be
26
فازر های ایستا و قالب-مبنا: اینگونه فازر ها تنها پروتکل های شامل درخواست و پاسخ و یا فایل فرمت های ثابتی را تست می کنند . هیچ ویژگی پویایی در آن ها نیست و نیز هیچ آگاهی از پروتکل مورد تست ندارند.
فازرهای بلوک -مبنا : این فازر ها ساختار پایه برای یک پروتکل درخواست و پاسخ را پیاده سازی کرده اند و می توانند کارکرد های پویای ثابتی مثل محاسبه CHECKSUM و .. داشته باشند.
فازر های تکاملی یا نسل پویای فازر ها: این ها الزاما پروتکل یا فایل فرمت مورد تست را نمی فهمند اما بر اساس بازخورد از سیستم آن را یاد می گیرند
فازر های مدل-مبنا یا شبیه ساز: این فازر ها با پیاده سازی همه پروتکل یا مدلی از آن و یا شبیه سازی آن نه تنها ساختار پیام ها را fuzz می کنند بلکه توسط آن ها پیام های غیر منتظره نیز در ترتیب پیام ها قابل تولید خواهد بود .
دسته بندی کلی fuzzerها
ابزارهای fuzzing
ابزارهای fuzzing به صورت محلی
مثل iFuzz برای تشخیصformat string و سرریز در برنامه های سیستم محلی و یا رفتار در برابر بازگرداندن متغیرهای محیطی نادرست
فازر های فایل فرمت که انواع فایل های مشکل دار را برای برنامه هایی با وروی فایل تولید می کنند.
ابزارهای fuzzing از راه دور
فازر های تشخیص آسیب پذیری ها در پروتکل های شبکه همچون ابزارهای فریم کاری SPRIKE
فازر های برنامه های تحت وب مثل web Scarab متعلق به owasp
فازر های مرورگر
ابزارهای fuzzing درون حافظه
27
محدودیت های تست نفوذ
28
با اینکه تست نفوذ از جمله متداول ترین مراحل توسعه امن نرم افزار است اما :
توسط افراد امنیتی بر تیم نرم افزار اعمال می شود<<< همه تیم عصبانی هستند!
رویکرد از بیرون به درون <<<<دید لازم ولی ناکافی
تلاش خیلی ناچیز-خیلی دیر برای پیگیری مشکلات امنیتی در پایان چرخه توسعه!
رفع مشکلات در این برهه هزینه بر است<<< اغلب بجای درمان تنها پانسمان می شوند!
اغلب اقدامات در نتیجه تست نفوذ ذاتا واکنشی و منفعلانه هستند.
در عمل تست نفوذ استاندارد مورد قبولی که در حال استفاده باشد ندارد!
29
جمع بندی
تست نفوذ نرم افزار بایست تمرکز بر سطح سیستم داشته باشد و ویژگی های سیستم های نرم افزاری تجمیعی را نیز در نظر بگیرد.
دانش ریسک های نرم افزاری، نیازمندی اصلی تست نفوذ
بیشتر مشکلات تست نفوذ به دلیل درس نگرفتن از تجربیات گذشته و باقی نماندن آن ها در سازمان است.
تست نفوذ یک بار انجام نمی شود، تست های پشت سر هم می توانند نقص های به ترتیب جزئی تری را افشا سازند .
از تست نفوذ به عنوان « آخرین چک» استفاده کنید نه اولین ژست امنیتی فرآیند توسعه!
منابعــ
Allen, Lee. Advanced Penetration Testing for Highly-Secured Environments. Packt Pub Limited, 2012.
Takanen, Ari, Jared D. Demott, and Charles Miller. Fuzzing for software security testing and quality assurance. Artech House on Demand, 2008.
Sutton, Michael, Adam Greene, and Pedram Amini. Fuzzing: Brute force vulnerability discovery. Addison-Wesley Professional, 2007.
McGraw, Gary. Software security: building security in. Vol. 1. Addison-Wesley Professional, 2006.
30
31
پایان