Найти в Дзене
ВсеАдминка

Автозапуск приложений через Userinit.exe

Сегодня хотел бы описать один из возможных вариантов нарушения безопасности системы, а точнее описать один из старых, но не менее актуальных и возможных вариантов запуска стороннего приложения под ОС Windows. Зная о подобной уязвимости, вы сможете лучше защитить себя. Я сейчас не буду описывать тонкости загрузки операционной системы. Скажу коротко, нам нужен процесс userinit.exe. Этот процесс отвечает за инициализацию пользователя системы и при запуске обращается к своей ветке реестра, которая находится по пути «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon» в ней нам нужен параметр «Userinit». Вот тут важно! Значение этого параметра должно быть «C:\Windows\system32\userinit.exe,» Все что находится после запятой будет запускаться при входе в систему независимо от того внесено ли приложение в автозапуск или нет. Что бы не мониторить подобное вручную я написал небольшой скрипт на PowerShell: [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp86

Сегодня хотел бы описать один из возможных вариантов нарушения безопасности системы, а точнее описать один из старых, но не менее актуальных и возможных вариантов запуска стороннего приложения под ОС Windows. Зная о подобной уязвимости, вы сможете лучше защитить себя. Я сейчас не буду описывать тонкости загрузки операционной системы. Скажу коротко, нам нужен процесс userinit.exe. Этот процесс отвечает за инициализацию пользователя системы и при запуске обращается к своей ветке реестра, которая находится по пути «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon» в ней нам нужен параметр «Userinit». Вот тут важно! Значение этого параметра должно быть «C:\Windows\system32\userinit.exe,» Все что находится после запятой будет запускаться при входе в систему независимо от того внесено ли приложение в автозапуск или нет. Что бы не мониторить подобное вручную я написал небольшой скрипт на PowerShell:

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

#Экспорт автозапуска Userinit РЕЕСТР

Write-Host "Вывод информации о автозапуске Userinit из реестра" -BackgroundColor Blue

Reg Export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" $env:tmp\UsrInt.reg /Y

Select-String -Path "$env:tmp\UsrInt.reg" -Pattern 'Shell' | Out-File $env:tmp\Log.txt -Append

Select-String -Path "$env:tmp\UsrInt.reg" -Pattern 'Userinit' | Out-File $env:tmp\Log.txt -Append

start $env:tmp\Log.txt

#Удаляет файлы Log.txt и UsrInt.reg

Start-Sleep -Seconds 5

Remove-Item $env:tmp\Log.txt, $env:tmp\UsrInt.reg

Все действия необходимо выполнять от имени Администратора.

Теперь приступим к удалению файла если таковой присутствует:

Вообще после запятой в значении Userinit будет либо прописан путь до файла в двойных кавычках, либо имя файла. Если программа, которая запускается через этот параметр не блокирует работу в системе можно выполнять все действия под локальной учетной записью пользователя. Если же возникают проблемы, например, запрет запуска редактора реестра, необходимо выполнить действия, описанные ниже.

Для начала необходимо загрузится с загрузочного носителя. Далее после загрузки самой системы мы запускаем программу редактирования реестра, в моем случае это Registry Workshop. В общем будем считать, что мы запустили редактор реестра. Теперь нам надо загрузить Куст больной системы. Делается это через файл/открыть. Системный реестр находится по пути %System%/System32/config/. Тут нам нужен файл software. Тот что без расширения. Присваиваем имя загружаемому кусту soft, выбираем место загрузки HKLM_USERS. Теперь нам надо узнать где сидит «зловред». Как правило всякая «фигня» сидит в папке Temp или в Temporary Internet Files. Вообще они могут скопировать себя и в любую другую папку. Этот способ лишь показательный.

Вот на этот Userinit и надо обратить внимание. Там должно быть прописано "C:\Windows\system32\userinit.exe,". Если там что то на подобии "Userinit"="C:\\WINDOWS\\system32\\userinit.exe,C:\\DOCUME~1\\John\\LOCALS~1\\Temp\\bldjad.exe" это и есть наш «зловред». Удаляем все что написано после «Userinit.exe,» и сохраняем изменения.

Не забываем выгрузить куст, а не просто закрыть редактор. Иначе изменения не вступят в силу. Вообще хорошо бы по имени файла провести поиск в системе где он может лежать и всё удалить. Так как вполне не сложно написать приложение или службу, которая будет мониторить работает ли «зловред» и втихаря его опять запускать, но на практике такой сложности я пока не встречал. Перезагружаемся в обычном режиме. И если вы все сделали правильно, то все будет в норме. Но оговорюсь, это один из примеров. «Зловреды» могут сидеть где угодно и это не обязательно могут быть exe файлы. Это могут быть и bat файлы и другие исполняемые. Так что я думаю примерно понятно.

Ссылка на скачивание скрипта:

Userinit.ps1