چگونه مهندسی آشوب میتواند به تیمهای DevSecOps در یافتن آسیبپذیریها کمک کند؟

با توجه به تلاش مهندسین در راستای کاهش هرج و مرج، شاید تصور کنید که کلمات «مهندسی» و «آشوب» (هرج و مرج) در کنار یکدیگر قرار نمیگیرند ولی امروزه رویکرد «مهندسی آشوب» از محبوبیت بسیار زیادی در بین سازمانها و تیمهای امنیتی برای شناسایی و رفع نواقص سیستمها برخوردار است. در روش مهندسی آشوب میزان مقاومت سیستمها و قابلیتهای آنها برای مقابله با شرایط حملات سایبری و نفوذهای ناگهانی مورد ارزیابی قرار میگیرد. به تازگی توسعهدهندگان نرمافزار نیز در حال پیادهسازی «آشوب» در مقیاس صحیح و با هدف افشای نقایص مخفی سیستمهای رایانهای و رفع آنها هستند. اگرچه خروجی مربوط به هیچ رویدادی که همراه با آشوب است عالی و بینقص نیست ولی یکسری از این رویکردها کارایی شگفتانگیزی دارند.
این فرایند دارای مزایای مثبت بسیار زیادی برای تحلیلگران و کارشناسان امنیتی است که مسئولیت پیدا کردن درهای پشتی پیشبینی نشده و همچنین ثبت نشده را بر عهده دارند. اگرچه تست هرج و مرج قابلیت شناسایی همه حفرههای امنیتی را ندارد ولی میتواند آسیبپذیریهای مخاطرهآمیز و کشف نشده را بیابد. با توجه به ارتباط مشکلات عملکردی به نقاط ضعف امنیتی موجود در سیستم و همچنین وجود خطاهای کدنویسی که موجب از کار افتادن سیستم یا نفوذ به آن میشوند، مهندسی آشوب کمک قابل توجهی نیز به تیمهای DevSecOps و DevOps میکند.
مهندسی آشوب چیست؟
مهندسی آشوب شامل مجموعهای از رویکردهای مختلف است. این راهکارها با هدف ایجاد مشکلات فنی در سیستم یا از کار انداختن آن، تغییراتی را در شیوه عملکرد سیستمهای رایانهای اعمال میکنند. در مهندسی آشوب یکسری رفتارهای تصادفی که میتوانند نرمافزار را تحت فشار قرار دهند به آن تزریق میشوند. سپس عملکرد نرمافزار با دقت مورد بررسی قرار گرفته و مشکلات یا نقصهای عملکردی آن شناسایی میگردند. در حالی که ممکن است تشخیص و نمایان شدن چنین مشکلاتی در حالت عادی در طی چندین سال صورت گیرد.
John Gilmore یکی از بنیانگذاران بنیاد آزادی الکترونیک یا EFF (مخفف Electronic Freedom Foundation) و عضو تیم طراحی چندین پروژه متن باز مهم میگوید: «کدنویسی فرایندی متشکل از اصلاح پیوسته بوده و مهندسی آشوب از جمله روشهای استاندارد برای جستجو و ارزیابی همه مسیرهای اجرای احتمالی در کدها است». او میگوید: «ارزش واقعی کدنویسیهایی که در زمان طولانی صورت میگیرند در گرو شناسایی خطاهای آنها توسط 20 کامپایلری که آنها را کامپایل نموده و 5 سیستمعاملی که در ابتدا و همچنین میلیونها کاربری که آنها را اجرا میکنند، است. همچنین در صورت ارزیابی کدهای برنامهنویسی شده توسط روشهای هرج و مرج و نفوذ (مثل طرح Project Zero شرکت گوگل) تعداد مسیرهای بررسی نشده در کد بسیار کمتر میشود».
Gilmore با اشاره به همکاریهای خودش با شرکت Data General که جزو اولین تولیدکنندگان مینی کامپیوترها است میگوید: «متوجه شدم که گاهی اوقات فشار دکمه برق منجر به ایجاد مشکلاتی در عملکرد سیستمعامل میشود. با این وجود مهندسین سیستمعامل پس از اطلاع از مشکل، به جای حل و رفع آن صحت تست و ادعای صورت گرفته را رد کردند». امروزه این شرکت منهدم شده و وجود ندارد.
ایده مهندسی آشوب در عرصه تولید کامپیوتر و سایر عرصههای مهندسی جدید نیست. برای مثال تولیدکنندگان خودرو، مدلهای جدید را در فصلهای تابستان و زمستان به ترتیب در صحرا و مناطق شمالی ارزیابی میکنند. معماران نیز سازههای آزمایشی طراحی کرده و با ایجاد بار سنگین بر روی این سازهها، مقاومت آنها را محک میزنند.
در عرصه مهندسی کامپیوتر رویکرد متفاوتی برای مهندسی آشوب در نظر گرفته شده است. بسیاری از محققان امنیتی اثباتهای منطقی دقیقی را که دلالت بر صحت محاسبات و قطعی بودنشان دارد ارایه میکنند. از طرفی دیگر پیچیدگی نرمافزارهای امروزی بسیار فراتر از مواردی هستند که ابزارهای منطقی موجود قادر به مدلسازی آنها باشند. از طرفی دیگر حوزههای امنیت رایانه نیز از حوزه درک ما خارج بوده و امکان شناسایی دقیق آنها وجود ندارد بنابراین به راحتی مورد سوءاستفاده قرار میگیرند.
در عبارت «هرج و مرج» به صورت کاملاً عمدی از واژههایی همچون «علم» و روشهای ساخت، تست و درک جهان از طریق مدلهایی که با دقت طراحی و ساخته شدهاند استفاده نمیگردد. حتی از آنجا که کلمه «مهندسی» اشاره به روشهای برنامهریزی شده و دقیقی (مشابه آنچه در آزمایشگاهها صورت میگیرد) دارد بنابراین بکارگیری کلمه «مهندسی» نیز در این عبارت انتخاب چندان صحیح و سنجیدهای نیست. عبارت «مهندسی آشوب» مشابه رها کردن یک گاو در یک فروشگاه پر از ظروف چینی است!
رویکردهای مهندسی آشوب
فنون مورد استفاده در مهندسی آشوب ظاهراً ساده اما بسیار فریبنده هستند. در این تکنیکها سعی میشود تا در سرویسهای مورد اعتماد نرمافزار اختلال ایجاد شده و عملکرد نرمافزار با مشکل مواجه گردد. برای مثال در یک تست ساده نیمی از بستههای دادهای که از طریق اینترنت به سیستم ورود مییابند، حذف میشوند. در رویکردی دیگر تقریباً کل فضای آزاد حافظه اشغال شده و نرمافزار مربوطه برای ذخیره دادهها دچار کمبود فضا میشود.
این تستها معمولاً در سطح بالا انجام میشوند. تیمهای DevSecOps در راستای اجرای این تستها عموماً یکسری از سرورها را خاموش میکنند تا مطمئن شوند که بستههای نرمافزاری که در حال اجرا هستند توانایی مقاومت در برابر چنین خطاهایی را دارند. ایجاد تأخیر در سیستم جهت بررسی این موضوع که آیا وقوع تأخیر میتواند تأثیر دومینووار بر روی سیستم داشته و منجر به از کار افتادگی کل سیستم شود یا خیر از جمله رویکردهایی است که برای تست ارزیابی نرمافزارها مورد استفاده قرار میگیرند.
همه منابع سیستم مثل رم، فضای ذخیره اطلاعات یا ارتباطات پایگاه داده قابل بررسی هستند. در یکسری از تستها دسترسی به منابع کاملاً قطع شده و در بعضی از آنها نیز دسترسی به منابع را به شدت محدود و رفتار نرمافزاری را که زیر بار سنگین قرار دارد بررسی میکنند.
نقایص نرمافزاری معمولاً به صورت غیرمستقیم آشکار میشوند. برای مثال ابزارهای هرج و مرج به راحتی و با تزریق تعداد بایتهای زیاد به یک کانال میتوانند مشکلات مربوط به سرریز بافر را نشان دهند. اگرچه ممکن است چنین ابزارهایی به نرمافزار مقصد نفوذ نکنند ولی میتوانند نحوه اجرای حملات سرریز بافر برای تزریق کدهای مخرب را نشان دهند.
فرایند اجرای آزمون فاز (Fuzz Test) یا فازینگ (Fuzzing) نیز که شامل ایجاد ورودیهای غیرمنتظره به برنامه جهت شناسایی خطاهای آن است قابلیت بسیار زیادی در آشکارسازی نقایص نرمافزاری دارد. البته ممکن است برنامهنویسها همه روشهای تنظیم پارامترها را در نظر نگرفته و در نتیجه یک در پشتی در محصول ایجاد شود. بمباران کردن نرمافزار با ورودیهای نیمه ساختیافته و تصادفی میتواند چنین خطاهایی را پیش از سوءاستفاده توسط هکرها آشکار کند.
به مرور زمان حوزه مربوط به فرایند فازینگ رشد چشمگیری داشته است. برای مثال بعضی از محققان تزریق تصادفی را کنار گذاشته و ابزارهای آزمون فاز پیشرفتهای طراحی کردهاند. به این ترتیب آنها با بکارگیری دانشی که درباره نرمافزار دارند جهت اجرای این فرایند به صورت کارآمد، از تحلیلی موسوم به «تست جعبه سفید[1] یا White-Box Testing» استفاده میکنند. در رویکردی تحت عنوان «آزمون فاز گرامری» ابتدا تعریفی از ساختار دادههای مورد انتظار تهیه شده، سپس از این تعریف برای تولید دادههای آزمون که با هدف شناسایی نقایص نرمافزاری در زمینه تجزیه و تحلیل ورودیها استفاده میشود. برای مثال از ابزار SAGE شرکت مایکروسافت قابلیت بررسی همه انشعابات کد و ایجاد ورودیهای آزمون را دارد.
چالش اصلی مهندسین هرج و مرج شناسایی نقایصی میباشد که ممکن است تحت بار سنگین آشکار شوند. تشخیص از کار افتادگی کامل سیستم کار چندان دشواری نیست ولی یافتن نقایص ظریفتری که منجر به ایجاد مشکلات امنیتی بسیار جزئی وبی مهم میشوند به هیچ وجه آسان نیست. اگرچه بسیاری از مشکلات معمولاً تهدیدی برای دسترسیها و دادهها ایجاد نمیکنند ولی ممکن است منجر به ایجاد مشکلات جدی شوند که باید در اسرع وقت رفع گردند.
ابزارهای مهندسی آشوب
این حوزه در کمترین زمان ممکن از یک ابزار اختصاصی طراحی شده توسط تیمهای DevSecOps به بخش ثابتی ازچرخه توسعه نرمافزار تبدیل شده است. ابزارهایی که پیش از این به عنوان یک پروژه جانبی و برای محک مهندسان استفاده میشدند، در حال حاضر تبدیل به بخش قابل اطمینانی از خط لوله CI/CD شدهاند. بسیاری از ابزارهای طراحی شده توسط متخصصان DevSecOps همچنان متن باز بوده و به صورت آزادانه در اختیار دیگران قرار میگیرند. یکسری از این ابزارها هم توجه شرکتها را به خود جلب کردهاند. یکسری شرکت خاص هم وجود دارند که ابزارهای اختصاصی روانه بازار میکنند.
بعضی از ابزارها بهگونهای طراحی شدهاند که در بخشهای عمیقتری از پشتههای نرمافزاری مورد استفاده قرار میگیرند. برای مثال ChaosMachine یک ابزار تحقیقاتی است که توسط مؤسسه فناوری KTH در سوئد طراحی شده و یکسری استثنای کاذب به کدهایی که بر روی ماشینهای مجازی جاوا اجرا میشوند تزریق میکند. این رویکرد سازوکارهای مدیریت استثنائی را که پیش از این در کد طراحی شدهاند تحت بار سنگین قرار میدهد.
ابزارهای مهندسی آشوب به خوبی طراحی شده و معمولاً بر روی یک زبان یا پلتفرم خاص متمرکز هستند. برای مثال Pythonfuzz به صورت پیوسته توابعی را با دادههای تصادفی فراخوانی میکند و رویدادهایی مثل نشت حافظه، بن بست یا شکستهای دیگر را مدنظر قرار میدهد. ابزار OSS-Fuzz شرکت گوگل نیز با چندین زبان و پروژه کار میکند. گوگل از این ابزار جهت ارزیابی کدهای متن بازی مثل افزونههای کروم استفاده میکند.
سایر ابزارها متمرکز بر روی پلتفرمهای خاص هستند. نت فلیکس از جمله پیشگامان در این عرصه بوده و با استفاده از وب سرویسهای آمازون، مجموعه ابزارهایی برای محک زدن زیرساخت خودش طراحی کرده است. Chaos Monkey یکی از ابزارهایی است که به صورت تصادفی با کلاسترهای ابر ارتباط برقرار نموده و بعضی از آنها را متوقف و سپس پیامدهای این مسئله را بررسی و تحلیل میکند. نت فلیکس ابزارهای مشابهی موسوم به ارتش Simian که شامل اجزایی تحت عناوین «میمون تأخیر»، «گوریل هرج و مرج» و «کنگ هرج و مرج» هستند طراحی کرده است. این ابزارها قابلیت کند کردن شبکه و خاموش نمودن کل سیستمهای یک شبکه را دارند.
سایر پلتفرمها معمولاً متمرکز بر روی تزریق مشکل هستند. برای مثال پلتفرم هرج و مرج Proofdock آژور را مورد هدف قرار میدهد. میمون هرج و مرج ابر گوگل نسخهای بازنویسی شده از مدلی است که برای API GCP طراحی شده بود.
بعضی از پروژهها بهگونهای طراحی شدهاند که ایدهها و کدها را در پلتفرمهای مختلف به اشتراک میگذارند. یک پروژه متن باز تحت عنوان Litmus طراحی شده که همه ماشینهای درون سازمانی و ابری را مورد هدف قرار میدهد. پلتفرم Litmus از ChaosExperiments پشتیبانی نموده و توانایی مورد هدف قرار دادن نرمافزارهای در حال اجرا بر روی ابرهای مختلف را دارد. بخش ChaosEngine این پلتفرم، آزمونهای مختلفی را پیادهسازی نموده و نتایج را پیگیری میکند.
ابزارهای مختلفی نیز جهت استفاده توسط تیمهای مختلف طراحی شده و توسعهدهندگانی که کدها را در مراحل اولیه تست میکنند با تیمهای مدیریت کننده خط لولههای CI/CD هماهنگ کرده و بر روی نرمافزارهای در حال اجرا در محیط تولید نظارت دارند. برای مثال ChaosToolkit یک پروژه متن باز است که جهت ادغام با همه خط لولههای توسعه نرمافزار طراحی شده و شامل چالشهای پیچیدهای برای کدهای جدید است. این ابزار متکی بر روی مجموعهای عظیم از درایورها و افزونهها بوده و قابلیت کار با انواع محیطهای درون سازمانی و ابر را دارد.
شرکت Cavisson فروشنده ابزارهای توسعه نرمافزار نیز محصولی تحت عنوان NetHavoc دارد که خطاهایی موسوم به havoc را در کدها تزریق میکنند. این خطاها توانایی افشای شکستهای نرمافزاری در صورت وجود آسیبپذیری امنیتی را دارند. یکی از این خطاها، بستهها و خروجیهای DNS را تحریف نموده و دیگری منجر به مصرف شدید و کمبود فضای دیسک یا حافظه میشود.
Mrigank Mishra یکی از مدیران محصول Cavisson میگوید: «میتوانید یک سرور را از کار انداخته یا پیامهای موجود در صف را تغییر دهید. در نهایت همه چیز بستگی به کاربرد مدنظر در سازمانی دارد که از این ابزار استفاده میکند».
یکسری از ابزارها تحلیلهای عمیقتری انجام میدهند چون مشکلات درون کد و زمانی که ورودی بسیار دور از انتظار باشد رخ میدهند. برای مثال Cryptofuzz به صورت مستقیم با یکسری کتابخانههای رمزنگاری که ارتباطات SSL را رمزگذاری مینمایند کار میکند. این ابزار مشکلات امنیتی از جمله نقص نرمافزار، نشت حافظه، سرریز بافر و عدم مقداردهی اولیه متغیرها را بررسی میکند.
توسعه مهندسی آشوب
این حوزه همچنان رشد و پیشرفت داشته و محصولات متن باز رو به افزایش و پیشرفت هستند. بعضی از شرکتها ابزارهای ایجاد هرج و مرج را در بین ابزارهای توسعه، تست و بررسی امنیت خودشان جا دادهاند. این حوزه شامل مجموعهای از رویکردها برای انجام عملیات اشتباه در زمانهای اشتباه بوده و تعاریف و دستورالعملهای دقیقی برای آن وجود ندارد. بنابراین پیشرفت در این حوزه همچنان ادامه خواهد داشت.
شاید از نظر سطحی مهندسی آشوب ساده به نظر برسد. کافیست یکسری داده و کلید را تغییر دهید تا بالاخره مشکلی در سیستم ایجاد شود ولی هنر اصلی پیدا کردن محل مناسب برای دستکاری و ایجاد اختلال است. مهندسان هرج و مرج میتوانند نقش مهمی در پیدا کردن نقطه ضعفهای سازمان داشته باشند. اگر کمی بد رفتاری بتواند به تشخیص نقایص نرمافزار پیش از ورود به مرحله تولید کمک کند، همه از این شرایط سود خواهند برد.
[1] در این فرایند کلیه عملیات و اقدامات صورت گرفته در سیستم نرمافزاری و ساختار کد منبع آن مورد بررسی قرار میگیرند.
منبع: csoonline