آسیب پذیری روز صفر یا Zero-day چیست؟ و چه ویژگی هایی دارد؟

0 84

فهرست

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

پول و تقاضا در مقابل امنیت!

اساسا تولید نرم افزار، مخصوصا نرم افزارهایی در مقیاس بالا مثل نرم افزارهای سیستمی و سیستم عامل ها یک عمل بسیاز زمان بر می باشد و هزینه سنگینی بر دوش تولید کننده می گذارد. از طرفی ممکن است تضمینی برای فروش موفق نرم افزار وجود نداشته باشد. جابجایی بین شرکتی اعضای تیم های نرم افزاری نیز مساله ی دیگری است که تولید کننده را با چالش مواجه می کند. عوامل این چنینی باعث می شود تولید کننده بعضی از المان های مهم در تولید و انتشار یک نرم افزار را نادیده بگیرد و یک رویکرد بهبود تاخیری برای نرم افزار در نظر بگیرد.
قبلا در مورد DevSecOps صحبت شد و بررسی کردیم که برای تولید یک نرم افزار خوب باید امنیت در چرخه تولید نرم افزار وارد شود اما طبیعی است که این کار زمان ارائه نرم افزار و همچنین هزینه تولید آن را افزایش می دهد. بسیاری از تولید کنندگان مثل مایکروسافت (Microsoft) این هزینه را بر دوش مشتریان می گذارند! رویکرد اینگونه شرکت ها به این صورت است که محصول با سطح امنیت پایه وارد بازار شده و پس کشف آسیب پذیری در محصول اقدام به ارائه وصله برای نرم افزار می کنند. طبیعتا این روش برای تولید کننده به لحاظ هزینه قابل قبول تر است اما این مقبولیت برای تولید کننده گاها باعث ایجاد هزینه های سنگینی برای مصرف کنندگان می شود.
از طرف دیگر قرار نگرفتن امنیت در کنار توسعه باعث برخی سوءتفاهمات می شود. برای مثال یک توسعه دهنده که با امنیت آشنا نیست برخی عملکردهای سیستم را به عنوان ویژگی و قابلیت در نظر می گیرد در حالیکه این قابلیت می تواند منجر به ایجاد خسارات زیادی برای سازمان شود. برای مثال در تستی که چند سال پیش توسط یکی از اعضای فعلی ترجنس در یک سازمان صورت گرفت، آسیب پذیری ای کشف شد که از نظر توسعه دهنده یک قابلیت فوق العاده بود.این آسیب پذیری منجر به فاش شدن اطلاعات مهم سیستم و دسترسی به یکی از سرورهای اصلی سازمان شد. توسعه دهندگان که از قابلیت XML External Entity برای ایجاد فرم ها و صفحات مختلف وب سایت با حداقل دقت به امنیت استفاده کرده بودند موقعیت را برای SSRF، XXE و در نهایت DoS سرور فراهم کرده بودند. این موضوع منجر به قطع قرارداد سازمان به تولید کننده نرم افزار شد که البته این عمل احتمالا تنها در جهان سوم رخ می دهد چون درک اینکه تیم تست نفوذ و ارزیابی آسیب پذیری در کنار تیم توسعه هستند و نه مقابل آن ها فعلا برای جهان سوم سخت است!

آسیب پذیری روز صفر یا Zero-day چیست؟

آسیب پذیری روز صفر یک آسیب پذیری در یک محصول نرم افزاری است که یا هنوز کشف نشده و اگر کشف شده هنوز وصله ای (Patch) برای آن ارائه نشده است. هکرها و کمپین های APT (Advanced Persistent Threat) از این آسیب پذیری ها استفاده می کنند و حملات هدفمندی را علیه سیستم ها و شبکه های سازمان هایی که دارای چنین آسیب پذیری هایی هستند طراحی می کنند. الب است بدانید کار بعضی از پژوهشگران امنیتی کشف این آسیب پذیری ها می باشد که برخی از آن ها گزارش را در اختیار تولید کننده می گذارند و جایزه دریافت می کنند و برخی دیگر آن ها را اکسپلویت کرده و در مارکت های زیرزمینی مثل مارکت های موجود در دارک وب به فروش می گذارند. به اکسپلویت این نوع آسیب پذیری ها Zero-day Exploit و به حمله ای که با استفاده از آن ها انجام می شود Zero-day Attack می گویند. معمولا کمپین های APT با حمایت دولت ها اقدام به خرید این اکسپلویت ها می کنند و حملاتی را علیه دولت ها وملت های دیگر، در قالب APT و تروریسم سایبری اجرا می کنند.

کشف آسیب پذیری روز صفر یا Zero-day چگونه است؟

پژوهشگران امنیتی با استفاده از تکنیک های مختلف اقدام به کشف آسیب پذیری در محصولات مختلف می کنند. یکی از رایج ترین تکنیک ها برای کشف این نوع آسیب پذیری ها فازینگ (Fuzzing) یا تست فاز (فاز تست – Fuzz Test) می‌باشد. این تکنیک خود دارای روش ها و تکنیک های وسیعی می باشد که در مقالات آینده مفصلا در مورد آن ها صحبت خواهیم کرد. به طور نادقیق و کوتاه، تست فاز عبارتند از تولید ورودی های مختلف و تزریق آن ها به نرم افزار به منظور کشف یک باگ در یک نرم افزار. یک نمونه ساده از آن را می توانید در این آموزش مشاهده کنید.
روش دیگری که پژوهشگران برای کشف این نوع آسیب پذیری ها استفاده می کنند استفاده از تست ایستا (Static Test) نرم افزار است. این روش بیشتر برای نرم افزارهای متن باز مورد استفاده قرار می گیرد چرا که این تست نیاز به اطلاع از کد برنامه دارد. لازم به ذکر است این تست بسیار زمان بر است اما پژوهشگران و هکرهای حرفه ای با روش هایی می توانند فضای مساله رو کاهش داده و در زمان کوتاهتری به بلاک آسیب پذیر برسند.
روش های دیگری نیز در کشف این نوع آسیب پذیری مثل Symbolic Execution و Concolic Execution (Concolic Testing) وجود دارد که دارای محدودیت های مخصوص به خود هستند. معمولا پژوهشگران سعی می کنند از روش های ترکیبی مثل Concolic Fuzzing استفاده کنند که بتوانند محدودیت ها را کاهش دهند.

فلج شدن بروزرسانی و پنجره آسیب پذیری

تولید کنندگان هنگامی که متوجه یک آسیب پذیری در محصول خود می شوند سریعا اقدام به وصله آن آسیب پذیری می کنند و آن را تحت یک بروزرسانی برای محصول ارائه می دهند اما در این بین مشکلاتی پیش می آید. اولا برخی از آسیب پذیری ها نیاز به تغییر یک بلاک بزرگ از کد دارند که این موضوع باعث می شود عملکرد عمومی محصول دچار اختلال شود. به همین دلیل تولید کننده باید تست های نرم افزاری مربوط به نیازمندی های عملکردی (Functional) و غیر عملکردی (Non-Functional) را دوباره اجرا کند و این عمل بسیار وقت گیر است. بنابراین ارائه وصله برای یک آسیب پذیری در قالب بروزرسانی ممکن است به زمان قابل توجهی نیاز داشته باشد که در این زمان حملات زیادی صورت می گیرد. از طرف دیگر احتمال استفاده از وصله های غیر رسمی توسط کاربران که به عنوان یک مُسکن برای محصول عمل می کنند تا وقتی وصله رسمی منتشر شود تقریبا صفر است. در ادامه به معرفی پنجره آسیب پذیری یا Window of Vulnerability می پردازیم.

پنجره آسیب پذیری چیست؟

به بازه زمانی که اولین اکسپلویت علیه آسیب پذیری فعال می شود تا زمانی که تعداد سیستم های آسیب پذیر به تعداد ناچیزی کاهش یابند (وصله را دریافت کرده باشند) پنجره آسیب پذیری می گویند. حال به بررسی بازه های زمانی در آسیب پذیری های مختلف می پردازیم. در ابتدا تعدادی پارامتر معرفی می کنیم:

  • t۰: زمان کشف آسیب پذیری (توجه شود این عدد زمان برابر زمان روز صفر یا day zero نیست).
  • t۱a: زمانی که یک وصله امنیتی برای آسیب پذیری کشف شده منتشر می شود.
  • t۱b: زمانی که اکسپلویت آسیب پذیری فعال می شود.
  • t۲: زمانی که بسیاری از مصرف کنندگان وصله رو دریافت و نصب می کنند.

طبیعی است که

    \[ t_0 \leq t_{1a} \]

و

    \[ t_0 \leq t_{1b} \]

برای آسیب پذیری های معمولی می توان نوشت:

    \[ t_{1b} > t_{1a} \]

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

    \[ t_{1b} \leq t_{1a} \]

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

محافظت در مقابل حملات روز صفر یا Zero-day Attack

به دلیل اینکه این نوع آسیب پذیری ها تا زمان قابل توجهی شناخته شده نیستند دفاع در مقابل آن ها کار ساده ای نیست. حملات روز صفر عموما سازمان ها و مراکزی را هدف قرار می دهند که دارای مکانیزم های امنیتی مناسبی هستند و حمله به آن ها کار سختی است. اکسپلویت های روز صفر بعد از فعالیت هم می توانند غیر قابل تشخیص باقی بمانند (برای مثال اکسپلویت استفاده شده در Stuxnet که حدود ۵ سال در سازمان انرژی اتمی ایران فعال بود) چرا که سیستم های تشخیص نفوذ سنتی قادر به تشخیص آن ها نیستند (امضائی از آن ها وجود ندارد و احتمالا از پلی مورفیسم استفاده می کنند) و همچنین معمولا اکسپلویت این آسیب پذیری ها طوری طراحی می شود که رفتار آن ها در راستای رفتار مدل پایه سیستم باشد (مثلا از طریق برنامه دیگر مثل PowerShell) اجرا می شوند. به این ترتیب تشخیص آن ها حتی توسط سیستم های تشخیص نفوذ بر پایه ناهنجاری یا Anomaly Based Intrusion Detection بسیار سخت است و منجر به خطاهای زیادی می شوند.
در مورد دفاع در مقابل این آسیب پذیری ها می توان گفت دانش و اطلاعات در مورد حملات گذشته و تکنیک های مهندسی اجتماعی و حملات مربوط به آن ها مثل فیشینگ و مخصوصا فیشینگ نیزه ای بسیار حائز اهمیت است چرا که هر اکسپلویت در قابل بد افزار اول باید بتواند وارد شبکه یا سیستم شود.
پس از آن، هنگامی که وصله محصول منتشر شد باید سریعا بروزرسانی را انجام داد.

سخن پایانی

در این مقاله در مورد آسیب پذیری روز صفر یا Zero-day Vulnerability و ویژگی های آن صحبت کردیم. دیدیم که این آسیب پذیری ها را می توان به عنوان خطرناک ترین تهدید برای سیستم ها و شبکه ها به شمار آورد. از طرف دیگر بررسی کردیم که تولید کننده چطور می تواند با عدم رعایت امنیت قابل قبول در چرخه تولید نرم افزار، هزینه های خود را بر مصرف کنند تحمیل کند. در مقالات آینده در مورد تکنیک های کشف این نوع آسیب پذیری ها صحبت خواهیم کرد.

درباره ما

ترجنس | thregence.ir
آکادمی ترجنس | edu.thregence.ir
دوره‌های آکادمی ترجنس | courses.thregence.ir
اینستاگرام | instagram.com/thregence
تلگرام | t.me/thregence
یوتوب | https://bit.ly/30mGowo
آپارات | aparat.com/thregence

ارسال یک پاسخ