یکی از دوستان سوال پرسیدند که این اکسپلویت میتیگیشن Stack Cookie به چه شکل می‏تواند از عمل اکسپلویت شدن یک آسیب‏پذیری جلوگیری کند؟ در حالت کلی، در سیستم ‏های کامپیوتری اکسپلویت میتیگیشن‏ هایی که وجود دارند، از قبیل CFI-CFG، Stack Cookie، Relro، ASLR و ... عمل به کنترل در آوردن ثبات اشاره‏ گر دستورعمل پردازنده (ثبات فرماندهی) در پردازنده‏های اینتل IP در پردازنده‏های آرم و میپس PC را سخت می‏کنند.


اکسپلویت میتیگشن Stack Cookie یا Stack Canaries یا Stack Flag کاری که انجام می‏دهد یک عمل نسبتا ساده (از نظر مفهومی) است. وقتی به دلیل عدم بررسی ورودی ‏های درون برنامه به شکل صحیح، یک آسیب ‏پذیری مانند سرریزبافر رخ می‏ دهد، فریم پشته تخریب خواهد شد و ثبات‏ های EIP و EBP با یک مقدار غیرمعتبر (Unvalidated) بازنویسی می‏ شوند. 


در نتیجه این اتفاق ثبات‏ های فرماندهی پردازنده به مکانی اشاره خواهند کرد که آن مکان ‏ها یا به عبارت دیگر آدرس‏ های مجازی (VA) وجود خارجی ندارند و در نتیجه برنامه کرش می ‏کند، چون به جایی درون حافظه (Memory) رفته است که هیچ کد یا ساختار معبری وجود ندارد.


حال یک هکر هوشمند از این مسئله می‏تواند سوء استفاده کند و با یک سری داده مشخص ثبات EIP یا PC را با آدرس شلکد/پیلود خود بازنویسی کند و بنگ! کنترل سیستم را به دست بگیرد. حال ما به عنوان یک متخصص امنیت یا یک پژوهشگر امنیت چطور می‏توانیم این عمل را مقداری دشوارتر کنیم که هکرها هل هله کنان کنترل EIP را به سادگی به دست نگیرند؟

در طرح اکسپلویت میتیگشن Stack Canaries که برای سخت کردن اکسپلویتینگ ارائه شده است، اتفاقی که در عمل رخ می‏ دهد،‏ این است که بین مقادیر محلی درون پشته (Local Stack Data) و ریورتر پشته (Stack Reverter) که شامل مقادیر (EIP+EBP) می‏ شود، یک مقدار رندوم (Integer Random Value) به عنوان فلگ قرار خواهد گرفت.


وقتی پشته به حالت اول خود بخواهد بازگردد و ما با برداشتن (POP) آدرس بازگشتی درون پشته، مقدار EIP را به آدرس Caller بازنویسی و بازگشت کنیم، بررسی می‏شود که آیا مقدار Stack Canaries یا همان فلگ درون پشته دستکاری شده است یا خیر؟ 


اگر دستکاری شده باشد، گواه این است که فریم پشته تخریب شده است و این می‏تواند گواه یک سوء استفاده از یک آسیب‏پذیری یا همان عمل اکسپلویتنگ باشد. در حقیقت مسئله Stack Canaries از لحاظ تئوری این کار را انجام می‏دهد. 


به کانال تلگرام بنده جوین شوید: @miladkahsarialhadi