استک سایه‌ای (Shadow Stack)

این عملکرد یک مکانیزم امنیتی در پردازنده‌ها است که برای مقابله با حملات کنترل جریان کد (مثل حملات ROP - Return Oriented Programming) طراحی شده است.
چطور کار می‌کند؟
در یک برنامه معمولی، وقتی یک تابع اجرا می‌شود، آدرس بازگشت (Return Address) آن در استک اصلی ذخیره می‌شود تا بعد از اجرای تابع، پردازنده بتواند به آدرس مناسب برگردد. اما در حملات ROP، مهاجم می‌تواند این آدرس را تغییر دهد و برنامه را مجبور کند تا به کد دلخواهی بپرد.
استک سایه‌ای این مشکل را با ذخیره یک نسخه‌ی محافظت‌شده از آدرس‌های بازگشت در یک استک جداگانه که فقط پردازنده می‌تواند آن را تغییر دهد، حل می‌کند.
فرایند کلی:
وقتی یک تابع فراخوانی می‌شود، آدرس بازگشت هم در استک اصلی و هم در استک سایه‌ای ذخیره می‌شود.
وقتی تابع تمام شد، پردازنده آدرس بازگشت را از استک سایه‌ای و استک اصلی مقایسه می‌کند.
اگر این دو مقدار متفاوت باشند (یعنی اگر استک اصلی دستکاری شده باشد)، پردازنده برنامه را متوقف کرده و حمله را خنثی می‌کند.
مزایا:
✅ مقابله با حملات ROP و مشابه آن
✅ جلوگیری از تغییرات غیرمجاز در آدرس بازگشت
✅ بهبود امنیت بدون نیاز به تغییر در کد برنامه‌ها
محدودیت‌ها:
❌ به پشتیبانی سخت‌افزاری نیاز دارد (مثلاً Intel CET و AMD Shadow Stack)
❌ فقط از حملات مبتنی بر آدرس بازگشت محافظت می‌کند و روی حملات دیگر (مثل Jump-Oriented Programming) بی‌تأثیر است
این تکنیک در سیستم‌عامل‌های مدرن مثل Windows 11 و Linux Kernel (در برخی توزیع‌ها) به عنوان بخشی از کنترل جریان اجرا (CFI - Control Flow Integrity) استفاده می‌شود.


#آکادمی_روزبه

Comments

Be the first to add a comment