I. Введение
Одной из ежедневных задач pentester'ов и красных команд является получение и сохранение постоянного доступа к скомпрометированной системе даже после перезагрузки компьютера, выхода пользователей из системы или изменения паролей учетных записей.
Также за этим постоянно следят EDR, антивирусное ПО и команды защиты ("blueteam").
Поэтому создание скрытого и надежного механизма сохранения доступа всегда является критически важным вопросом для атакующих.
В данной статье я продемонстрирую интересную технику сохранения доступа, через указание несуществующих исполняемых файлов.
II. Основная часть
1. Распространённые механизмы сохранения доступа, используемые в процессе тестирования на проникновение и Red Team проектах.
Если вы работали в области информационной безопасности, занимались анализом вредоносных программ, тестированием на проникновение или участвовали в Red Team проектах, вам наверняка знакомы разные механизмы сохранения доступа, верно?
Вот некоторые распространенные методы:
Registry Run Keys: изменение ключей реестра Windows для автоматического исполнения программ при загрузке операционной системы.
Scheduled Tasks: создание заданий, выполняющих исполняемые файлы в заданные интервалы времени или при наступлении определенных событий.
Startup Folder: размещение ярлыков исполняемых файлов в папке автозапуска для автоматического выполнения.
Services: установка вредоносных программ в качестве служб Windows, автоматически стартующих при загрузке ОС.
В рамках данной статьи мы рассмотрим эксперимент с сохранением доступа посредством запланированных заданий Windows и служб.
2. Любопытный случай с API-функцией CreateProcess
При работе с функцией Start-Process в PowerShell (которая фактически вызывает ShellExecute, а затем CreateProcess), я обнаружил любопытную особенность, случайно указав несуществующий файл:

Когда функция CreateProcess не находит указанный исполняемый файл, она использует функцию QueryDirectory для его поиска.
Исходя из фильтра функции QueryDirectory, приведенного выше, если в той же директории имеются файлы с расширением .exe.*, они тоже будут соответствовать условиям поиска.
Что произойдет, если вызвать функцию CreateProcess для файла "test.exe" (который отсутствует), при наличии в той же директории файла "test.exe.exe"?

Как видно на изображении выше, если исполняемый файл не найден, PowerShell автоматически ищет соответствующие фильтру файлы, что приводит к выполнению файла "test.exe.exe".
Предполагаю, это связано с особенностями обработки исполняемых файлов системой Windows. Можно увидеть, что при вызове функции CreateProcess для файла без расширения система последовательно добавляет расширения вроде .COM, .EXE и так далее, пытаясь запустить файл, пока не найдет подходящий исполняемый файл.
3. Использование особенности автоматического поиска файлов для скрытого сохранения доступа.
Создадим задачу или службу с указанием несуществующего исполняемого файла "C:\\TMP\\test.exe" и разместим файл "test.exe.exe" в папке "TMP". Тогда при срабатывании запланированной задачи или службы выполнится именно файл "test.exe.exe". Однако при проверке инструментами наподобие "Autorun" информация о самом исполняемом файле задачи или службы отображаться не будет.
schtasks /create /tn "RUN-TEST" /tr "C:\\TMP\\test.jpg" /sc onstart /f
Использование файла с другим расширением, отличным от .exe, приведет к аналогичному эффекту. Например, вызов функции CreateProcess для файла "test.jpg", при наличии в директории файла "test.jpg.exe", даст тот же результат.

Посмотрите на вывод утилиты Autorun от SysInternals: как можно заметить, созданная задача имеет ссылку на несуществующий исполняемый файл. Отсутствие указанного файла позволяет избежать обнаружения средствами антивирусной защиты.

Не используйте расширение .jpg для закрепления, поскольку наличие исполняемого файла с таким расширением вызывает больше подозрений, чем файл с традиционным расширением .exe.
Продолжайте экспериментировать со службами Windows:
sc create TestService binPath= "C:\TMP\test.exe" start= auto


Хотя утилита Autorun показывает, что исполняемый файл службы не найден, на практике, когда эта служба активируется, выполняется наш файл, обеспечивающий сохранение доступа.
III. Заключение
Сохранение доступа — важнейший этап, позволяющий специалистам по тестированию на проникновение поддерживать связь с целевой сетью и обеспечивать стабильную работу без перерывов.
Для вредоносных программ это тоже важно, ведь постоянный доступ позволяет выжить на целевом устройстве. Поэтому разработчики вредоносных программ постоянно ищут новые способы оставаться незамеченными и избегать обнаружения защитными решениями. В свою очередь, инструменты защиты регулярно обновляются, стремясь выявлять самые современные методы сохранения доступа.
Злоупотребляя механизмом автоматического поиска исполняемых файлов, срабатывающим, когда запрашиваемый файл не обнаружен, мы можем добиться скрытного сохранения доступа с несуществующими исполняемыми файлами. Данная особенность помогает нам обойти контроль и обнаружение со стороны антивирусных решений и средств сканирования, что значительно повышает безопасность полезной нагрузки на скомпрометированном компьютере.
Еще больше познавательного контента в Telegram-канале — Life-Hack - Хакер
olegtsss
Спасибо за перевод. В статье не хватает информации от автора, касательно почему продолжается поиск файла по маскам .exe, .exe.exe, .com и т.д. Такое исследование мат части может привести к более углубленному подниманию материала и обнаружением новых возможностей для закрепления.