آسیب‌پذیری گاو کثیف

سه‌شنبه ۰۴ آبان ۱۳۹۵
Sharif-Cert, آپا, بدافزار, گاو کثیف، آسیب‌پذیری
مرکز آپا شریف
SUT-APA-LOGO
چکیده:
در اکتبر ۲۰۱۶ آسیب‌پذیری‌ای در هسته‌ی سیستم‌عامل لینوکس شناخته شد که حق دسترسی‌ها را افزایش می‌داد. این آسیب‌پذیری به دلیل عملکردش گاو کثیف نام‌گذاری و با شماره‌ی شناسه‌ی CVE-2016-5195 شناخته شد. نقص گاو کثیف در قسمتی از هسته‌ی لینوکس قرار دارد که برای یک دهه قسمتی از هسته‌ی تقریبا همه‌ی توزیع‌های سیستم‌عامل متن‌باز مانند RedHat، Ubuntu و دبیان بوده است.

مقدمه

به‌تازگی آسیب‌پذیری جدیدی در سیستم‌عامل لینوکس کشف شده است که از ۹ سال پیش در تقریبا همه‌ی نسخه‌های لینوکس وجود داشته است. این آسیب‌پذیری که یک نقص در امنیت هسته‌ی لینوکس به شمار می‌رود با شناسه‌ی CVE-2016-5195 و بیش‌تر با نام گاو کثیف معروف شده است.

آسیب‌پذیری گاو کثیف

آسیب‌پذیری گاو کثیف در شرایط رقابت و زمانی که هسته (copy-on-write (COW را مدیریت می‌کند، حق دسترسی‌ها را دست‌کاری کرده و افزایش می‌دهد و به همین دلیل است که این‌گونه نام‌گذاری شده است. گاو کثیف برای مدت زمان زیادی و تقریبا از سال ۲۰۰۷ در هسته‌ی نسخه‌ی ۲٫۶٫۲۲ فعال بوده است. بنابراین تعداد زیادی از کارگزارها در خطر این آسیب‌پذیری هستند.
copy-on-write یک ویژگی در برنامه‌نویسی است که در همه‌ی چارچوب‌ها برای مدیریت منابع در حافظه استفاده می‌شود. به این صورت که چندین پردازش ممکن است یک صفحه که کاربر نیاز دارد در آن چیزی بنویسد را به اشتراک گذارند، در این حالت این صفحه برچسب کثیف می‌خورد. مشکل زمانی اتفاق می‌افتد که مهاجم با بهره‌گیری از شرایط رقابت قبل از آن‌که هسته، صفحاتی که برچسب کثیف خورده‌اند را جدا کند، در صفحات اصلی می‌نویسد. به عبارت دیگر به مهاجم اجازه‌ی تغییر فایل روی دیسک داده شده است بدون این‌که او مجاز به این کار باشد.
بنابراین هدف این نقص این است که یک کاربر معمولی و بدون حق دسترسی بتواند دسترسی به هر فایلی که می‌تواند بخواند را در کارگزار کسب کند و حق دسترسی خود را افزایش دهد. این حق دسترسی ممکن است تا سطح دسترسی ریشه نیز پیش برود. در حال حاضر روش‌هایی برای مقابله با این آسیب‌پذیری بیان شده و بیش‌تر توزیع‌ها نیز آن را برطرف کرده‌اند.
تاثیراتی که این نقص بر روی سیستم ایجاد می‌کند:
  • یک کاربر می‌تواند با سواستفاده از این نقص اجازه‌ی دسترسی به نگاشت حافظه‌های خواندنی دیگر را پیدا کند و حق دسترسی خود را افزایش دهد.
  • این نقص به یک مهاجم با حساب کاربری محلی اجازه می‌دهد که فایل‌های باینری روی دیسک را تغییر دهد و مکانیزم استاندارد سطح دسترسی را دور بزند بدون آن‌که اجازه‌ی این کار را داشته باشد.
مرکز امنیت Red Hat اعلام کرده است که گاو کثیف یک آسیب‌پذیری جدی است. اما خطرش از نقص‌های دیگر به دلیل این‌که از راه‌دور قابل بهره‌برداری و سواستفاده نیست کم‌تر است.

بررسی آسیب‌پذیری

در این قسمت روش‌هایی ارایه می‌شود تا قادر به تشخیص این آسیب‌پذیری در توزیع‌های مختلف باشیم.
  • توزیع Ubuntu/Debian
  • نسخه‌ی هسته‌ی سیستم‌عامل خود را بررسی کنید. اگر این نسخه از مقادیر لیست شده در زیر پایین‌تر باشد، سیستم شما این آسیب‌پذیری را دارد.
    • نسخه 4.8.0-26.28 برای Ubuntu 16.10
    • نسخه 4.4.0-45.66 برای Ubuntu 16.04 LTS
    • نسخه 3.13.0-100.147 برای Ubuntu 14.04 LTS
    • نسخه 3.2.0-113.155 برای Ubuntu 12.04 LTS
    • نسخه 3.16.36-1+deb8u2 برای Debian 8
    • نسخه 3.2.82-1 برای Debian 7
    • نسخه 4.7.8-1 برای Debian unstable
    برای دسترسی به نسخه‌ی هسته‌ی سیستم‌عامل خود می‌توانید از فرمان زیر استفاده کنید.
    uname -rv
  • توزیع CentOS
  • در این توزیع یکی از راه‌های تشخیص استفاده از اسکریپتی است که در ادامه معرفی شده است. ابتدا این اسکریپت را که توسط RedHat تهیه شده است، از نشانی زیر دریافت کنید. فرمان دانلود اسکریپت در کادر زیر آورده شده است.
    wget https://access.redhat.com/sites/default/files/rh-cve-2016-5195_1.sh
    با اجرای این اسکریپت با دستور زیر، خروجی آن را بررسی کنید.
    bash rh-cve-2016-5195_1.sh
    اگر سیستم شما خروجی مشابه با کادر زیر را نمایش دهد به این معنی است که شما این آسیب‌پذیری را دارید.
    Your kernel is 3.10.0-327.36.1.el7.x86_64 which IS vulnerable.
    Red Hat recommends that you update your kernel. Alternatively, you can apply partial
    mitigation described at https://access.redhat.com/security/vulnerabilities/2706661.

برطرف کردن آسیب‌پذیری

خوشبختانه برطرف کردن این آسیب‌پذیری کاری راحت است. کافی است سیستم خود را به‌روزرسانی کرده و آن را دوباره راه‌اندازی کنید. برای این کار می‌توانید به ترتیب فرمان‌های زیر را اجرا کنید.
sudo apt-get update && sudo apt-get dist-upgrade
sudo reboot