Stack Clash

محققان امنیتی یک آسیب‌پذیری قدیمی با عمر ۱۰ سال را در سیستم‌عامل‌های بر پایه Unix شامل Linux ،OpenBSD ،NetBSD ،FreeBSD و Solaris کشف کردند که می‌تواند توسط مهاجمان مورد بهره‌برداری قرار گیرد و سطح دسترسی آن‌ها به ریشه را افزایش دهد و درنهایت منجر به این شود که کنترل کامل سیستم را در دست گیرند.

این آسیب‌پذیری که Stack Clash نام‌گذاری شده است و با کد CVE-2017-1000364 شناخته می‌شود[۱] در مسیری که حافظه در پشته(۱) برای باینری‌های فضای کاربر(۲) اختصاص داده شده، کشف شده است[۲].

بهره‌برداری از آسیب‌پذیری Stack Clash برای به دست آوردن سطح دسترسی ریشه

بهره‌برداری از این آسیب‌پذیری راحت است: هر برنامه‌ای از یک ناحیه حافظه ویژه به نام پشته استفاده می‌کند که برای ذخیره داده‌های کوتاه‌مدت استفاده می‌شود. این ناحیه در هنگام اجرای هر برنامه‌ای به‌طور خودکار گسترش‌یافته و سپس محدود می‌شود.

بر طبق گفته محققان در Qualys که این آسیب‌پذیری را کشف و گزارش کردند، یک برنامه مخرب می‌تواند تلاش کند تا از فضای بیشتری از حافظه که بر روی پشته در دسترس است، استفاده کند که می‌تواند منجر به سرریز حافظه شده و این امر منجر به برخورد این ناحیه با ناحیه‌های حافظه مجاور می‌شود و محتواهایشان مجدداً نوشته خواهد شد.

علاوه بر این، بهره‌بردار Stack Clash همچنین می‌تواند صفحه نگهبانِ پشته را دور بزند که نوعی سیستم حفاظت از مدیریت حافظه است که در سال ۲۰۱۰ بهره‌برداری شده است و بعدازاینکه این مشکل در سال‌های ۲۰۰۵ و ۲۰۱۰ مورد بهره‌برداری قرار گرفته بود[۳و۴].

در گزارشی که توسط Qualys چاپ شده آمده است[۵]: “متأسفانه، یک صفحه نگهبانِ پشته با حجم چندین کیلوبایت کافی نیست چراکه اگر نشانگر پشته از روی صفحه نگهبان بپرد (در حقیقت اگر از یک پشته به سمت یک ناحیه دیگر حافظه حرکت کرده بدون اینکه به صفحه نگهبان دسترسی داشته باشد)، یک خطا به وجود می‌آید و پشته تا یک ناحیه دیگر در حافظه گسترش می‌یابد.”

آسیب‌پذیری Stack Clash نیازمند دسترسی محلی به سیستم آسیب‌پذیر برای بهره‌برداری است، اما محققان می‌گویند این آسیب‌پذیری می‌تواند از راه دور و بسته به نوع برنامه مورد استفاده نیز مورد بهره‌برداری قرار گیرد.

برای مثال، یک مشتری خبیث با یک حساب کاربری با سطح دسترسی پایین و یک شرکت میزبانی وب که دارای سیستم آسیب‌پذیر است، می‌تواند از این آسیب‌پذیری بهره‌برداری کند تا کنترل تمام وب‌سایت‌هایی که از یک سرور یکسان استفاده می‌کنند را در دست گیرند و از راه دور دسترسی در سطح ریشه داشته و به‌طور مستقیم کدهای مخرب مربوطه را اجرا می‌کنند.

در تاریخ ۱۸ ژوئن ۲۰۱۷، گزارشی منتشر شد مبنی بر اینکه یک شرکت میزبانی وب قربانی یک حمله مشابه شده است و سرورهای لینوکس این شرکت توسط یک باج‌گیر افزار آلوده شده و این شرکت مجبور شده مبلغ ۱ میلیون دلار باج برای برگرداندن فایل‌های خود پرداخت کند[۶].

محققان Qualys  می‌گویند مهاجمان همچنین می‌توانند آسیب‌پذیری Stack Clash را با دیگر آسیب‌پذیری‌های حیاتی مانند آسیب‌پذیری Sudo که اخیراً وصله شد[۷] ترکیب کرده و سپس کد دلخواه خود را با بیشترین سطح دسترسی اجرا کنند.

۷ عدد اثبات ادعای بهره‌برداری

محققان می‌گویند آن‌ها می‌توانند ۷ بهره‌برداری و ۷ اثبات ادعای مربوط به آسیب‌پذیری Stack Clash را ارائه دهند که بر روی Linux، OpenBSD، NetBSD، FreeBSD و Solaris و پردازنده‌های ۳۲ و ۶۴ بیتی کار می‌کنند.

اگرچه این محققان هنوز این بهره‌بردارها و اثبات ادعاها را منتشر نکرده‌اند و زمان کافی به کاربران و مدیریان سیستم‌ها داده‌اند تا سیستم‌های خود را قبل از عمومی شدن بهره‌بردارهای آسیب‌پذیری Stack Clash، وصله کنند.

اثبات ادعاها چهار مرحله را دنبال می‌کنند که شامل این مراحل هستند: برخورد(۳) پشته با یک ناحیه دیگرِ حافظه، اجرا شدن شاخص پشته در شروع پشته، پریدن(۴) از روی صفحه محافظت و برخورد(۵) با یک پشته یا دیگر نواحی حافظه.

در میان نسخه‌ها و سیستم‌هایی که تحت تأثیر این آسیب‌پذیری قرار دارند می‌توان به موارد زیر اشاره کرد:

  • Sudo on Debian, Ubuntu, and CentOS
  • so and most SUID-root binaries on Debian, Ubuntu, Fedora, and CentOS
  • Exim on Debian rsh on Solaris 11 and so on
  • Red Hat Enterprise

این شرکت همچنین معتقد است که دیگر سیستم‌عامل‌ها شامل مایکروسافت ویندوز، سیستم‌عامل اپل و سیستم‌عامل‌های بر پایه اندروید نیز می‌توانند نسبت به Stack Clash آسیب‌پذیر باشند، گرچه این موضوع هنوز به‌طور کامل تأیید نشده است.

وصله موردنظر در دسترس است، هم‌اکنون به‌روزرسانی کنید.

بسیاری از صاحبان سیستم‌عامل‌های آلوده‌شده هم‌اکنون وصله‌های امنیتی را به‌منظور برطرف کردن این آسیب‌پذیری برای محصولات خود منتشر کرده‌اند، بنابراین به کاربران و مدیران سیستم‌ها شدیداً توصیه می‌شود تا هرچه زودتر وصله‌های مربوطه را نصب کنند.

اگر وصله‌های امنیتی مربوط به سیستم‌عامل شما هم‌اکنون منتشرشده است، شما می‌توانید سیستم خود را مجدداً راه‌اندازی کنید و یا اینکه به‌طور دستی محدودیت‌هایی بر روی پشته‌ها و برای کاربران محلی ایجاد کنید. برای این کار به‌راحتی مقادیر RLIMIT STACK و RLIMIT_AS را برای کاربران محلی و در بخش سرویس‌دهنده‌های از راه دور به Low تغییر دهید.

همچنین پیشنهاد می‌شود تمامی کدهای userland شامل Id.so، کتابخانه‌ها و باینری‌ها را مجدداً و توسط ویژگی –fstack-check کامپایل کنند. این امر منجر به جلوگیری از حرکت شاخص پشته بدون دسترسی به صفحه محافظت به دیگر نواحی حافظه می‌شود و آسیب‌پذیری Stack Clash را غیرفعال می‌کند.

منابع

[۱] https://access.redhat.com/security/cve/CVE-2017-1000364

[۲] https://blog.qualys.com/securitylabs/2017/06/19/the-stack-clash

[۳] https://cansecwest.com/core05/memory_vulns_delalleau.pdf

[۴]http://invisiblethingslab.com/resources/misc-2010/xorg-large-memory-attacks.pdf

[۵]https://www.qualys.com/2017/06/19/stack-clash/stack-clash.txt?_ga=2.21132280.2111220318.1497939003-1499227004.1497422555

[۶] http://thehackernews.com/2017/06/web-hosting-ransomware.html

[۷] http://thehackernews.com/2017/05/linux-sudo-root-hack.html

[۸] http://thehackernews.com/2017/06/linux-root-privilege-escalation.html


(۱) stack
(۲) user space binaries
(۳) Clashing
(۴) Jumping
(۵) Smashing