Positive Technologies
PT Expert Security Center

История одного расследования: целевая атака по ошибке и несостоявшиеся деструктивные действия

История одного расследования: целевая атака по ошибке и несостоявшиеся деструктивные действия

В конце апреля 2020 года нашу команду по реагированию на инциденты из экспертного центра безопасности Positive Technologies (CSIRT PT ESC) пригласили расследовать компрометацию сети в одной организации (СМИ) с последующим шифрованием файлов на рабочих станциях сотрудников и серверах.

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

Мы решили с вами поделиться результатами нашего расследования целенаправленной атаки с компрометацией филиала, в результате которого удалось не только восстановить безопасное состояние инфраструктуры, но и обратить причиненный ущерб.

Хронология событий

Как мы уже сказали, отправной точкой расследования послужило массовое шифрование файлов в инфраструктуре клиента и требование выкупа за расшифровку. Фактически множество поврежденных файлов — это хорошо заметный, визуальный эффект от состоявшейся атаки, который и позволил обнаружить вторжение. Ретроспективный анализ показал, что инфраструктура клиента была скомпрометирована не три-четыре дня назад (и не несколько часов, как часто бывает при заражении от массовых атак), а в начале 2018 года. Причем изначально была заражена инфраструктура филиала в другой стране. Далее состоялось проникновение в головную организацию.

Точкой проникновения в сеть филиала был, предположительно, уязвимый сервер на внешнем сетевом периметре. В результате эксплуатации ресурса в феврале 2018 года был получен первичный доступ с закреплением в системе с помощью веб-шеллов ChinaChopper и TwoFace.

Для разведки внутри сети злоумышленники использовали утилиту NBTScan. Для перемещения между узлами использовался инструмент PsExec. Учетные данные для распространения по сети добывались с применением утилиты Mimikatz. В некоторых случаях мы обнаружили получение дампа процесса lsass с последующей архивацией и выгрузкой. Вероятно, использование Mimikatz блокировалось защитным ПО на рабочей станции, что приводило к необходимости поиска авторизационных данных в офлайн-режиме. Еще один способ распространения: сканирование узлов с применением SMBTouch на предмет SMB-уязвимостей класса Eternal* с дальнейшим запуском эксплойта EternalBlue и заражением компьютера. На некоторых узлах, которые, вероятно, представляли наибольший интерес, устанавливались бэкдоры SysUpdate и HyperBro для более надежного закрепления и обеспечения доступа.

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

В завершение 29 апреля 2020 года от имени учетной запись скомпрометированного доменного администратора на компьютеры в инфраструктуре был разослан и запущен вымогатель Polar, который шифровал пользовательские файлы и требовал выкуп. Во время работ наших специалистов у клиента в мае 2020 года злоумышленники предпринимали попытки вернуть контроль над инфраструктурой, пользуясь еще не устраненными веб-шеллами в сети головной организации и филиала, но на этот раз уже безуспешно.

Ниже мы приводим временную шкалу с последовательностью событий для большей наглядности.

Одна из задач, которые были поставлены перед нашими специалистами, — попытаться восстановить испорченные данные клиента, среди которых была ценная информация различных департаментов. Мы провели анализ упомянутого шифровальщика и смогли восстановить утраченные файлы.

Шифровальщик Polar

Способ запуска шифровальщика можно назвать классическим, характерным признаком азиатских кибергруппировок. На компьютер жертвы передаются три файла:

  • GDFInstall.exe (MD5: 13435101240f78367123ef01a938c560) — легитимный компонент компьютерных игр, подписанный компанией Ubisoft.
  • GameuxInstallHelper.dll (MD5: 1fd8402275d42e7389f0d28b9537db0f) — вспомогательная DLL-библиотека на платформе .NET (скомпилирована 29 апреля 2020 года), которая импортируется при запуске GDFInstall.exe.

На самом деле, это не оригинальный компонент: при экспорте символа GameExplorerInstallW будет выполнен код злоумышленников. Эта часто используемая техника загрузки вредоносного кода в контексте легитимного приложения называется DLL hijacking.

Выполняется чтение файла c:\programdata\Sysurl.Hex (предварительно копируется из c:\windows\system32\Sysurl.Hex в случае отсутствия), затем данные расшифровываются линейным XOR с ключом ABCSCDFRWFFSDJJHGYUOIj. Результат декодируется с помощью Base64, а полученный PE-файл загружается и выполняется в памяти средствами .NET-среды. Также отметим, что перед завершением работы полезная нагрузка и промежуточная библиотека удаляются. Удаление происходит стандартным ненадежным способом, что позволяет восстановить данные, если работа с диском была оперативно остановлена и информация не перезатерлась.

  • Sysurl.Hex — зашифрованный шифровальщик Polar.

Описанная последовательность вызова полезной нагрузки (легитимное приложение загружает вредоносную библиотеку, которая, в свою очередь, расшифровывает третий компонент и передает на него управление) очень часто используется для запуска бэкдора PlugX, который широко применяется различными азиатскими APT-группами, например APT10, APT41, TA459 и Bronze Union.

Рассмотрим подробнее расшифрованную декодированную версию шифровальщика (MD5: 841980b4ae02a4e6520ab834deee241b).

По способу запуска библиотекой GameuxInstallHelper.dll несложно догадаться, что это также исполняемый файл, скомпилированный в среде разработки .NET. Дата сборки: 9 апреля 2020 года. Точкой входа выполнения кода является метод Actions класса Encode пространства имен Polar (которое было использовано нами в качестве названия семейства образца).

Вредонос удаляет журналы событий системы и скрытые копии файлов, выполняя последовательность следующих команд:

dism /online /enable-feature /featurename:NetFx3 vssadmin.exe Delete Shadows /All /Quiet bcdedit /set {default} recoveryenabled no wmic shadowcopy delete wbadmin delete backup wbadmin delete systemstatebackup -keepversions:0 bcdedit /set {default} bootstatuspolicy ignoreallfailures bcdedit /set {default} recoveryenabled no wevtutil.exe clear-log Application wevtutil.exe clear-log Security wevtutil.exe clear-log System wbadmin delete catalog -quiet wbadmin delete catalog -quiet wbadmin delete systemstatebackup

После этого ищет и завершает следующие процессы:

agntsvc.exe
agntsvc.exe
agntsvc.exe
agntsvc.exe
dbeng50.exe
dbsnmp.exe
encsvc.exe
excel.exe
firefoxconfig.exe
infopath.exe
isqlplussvc.exe
msaccess.exe
msftesql.exe
mspub.exe
mydesktopqos.exe
mydesktopservice.exe
mysqld-nt.exe
mysqld-opt.exe
mysqld.exe
notepad++.exe
notepad.exe
ocautoupds.exe
ocomm.exe
ocssd.exe
onenote.exe
oracle.exe
outlook.exe
powerpnt.exe
sqbcoreservice.exe
sqlagent.exe
sqlbrowser.exe
sqlservr.exe
sqlwriter.exe
steam.exe
synctime.exe
tbirdconfig.exe
thebat.exe
thebat64.exe
thunderbird.exe
visio.exe
winword.exe
wordpad.exe
xfssvccon.exe

Затем получает список дисков, подключенных к системе, и начинает рекурсивный обход каталогов, пропуская некоторые из них:

  • C:\Windows
  • C:\Program Files
  • C:\Program Files (x86)
  • C:\ProgramData
  • C:\Python
  • $SysReset
  • $Recycle.Bin
  • $RECYCLE.BIN

Вредонос интересуют только файлы следующих расширений:

.3dm
.3ds
.3g2
.3gp
.7z
.accdb
.ai
.aif
.asf
.asp
.aspx
.avi
.bak
.bin
.bmp
.c
.cbr
.cer
.cfm
.class
.cpp
.crdownload
.cs
.csr
.css
.csv
.cue
.dat
.db
.dbf
.dds
.deb
.dmg
.dmp
.doc
.docx
.dtd
.dwg
.dxf
.eps
.fla
.flv
.ged
.gif
.gz
.h
.html
.ics
.iff
.indd
.ini
.iso
.java
.jpg
.js
.jsp
.key
.keychain
.log
.lua
.m
.m3u
.m4a
.m4v
.max
.mdb
.mdf
.mid
.mov
.mp3
.mp4
.mpa
.mpg
.msg
.msi
.obj
.odt
.pages
.part
.pct
.pdb
.pdf
.php
.pkg
.pl
.png
.pps
.ppt
.pptx
.ps
.psd
.py
.rar
.rm
.rpm
.rss
.rtf
.sdf
.sh
.sitx
.sln
.sql
.srt
.svg
.swf
.swift
.tar
.tar.gz
.tax2014
.tax2015
.tex
.tga
.thm
.tif
.tiff
.tmp
.toast
.torrent
.txt
.vb
.vcd
.vcf
.vcxproj
.vob
.wav
.wma
.wmv
.wpd
.wps
.xcodeproj
.xhtml
.xlr
.xls
.xlsx
.xml
.yuv
.zip
.zipx

Перед началом шифрования файлов троян формирует, назовем его, базовый ключ шифрования, который состоит из восьми случайно выбранных символов из алфавита abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890*!=&?&/

В зависимости от размера файла используется два подхода к шифрованию. В частности, отличаются используемые ключи шифрования, которые тем не менее построены на основе базового ключа.

Сначала рассмотрим шифрование файлов с размером менее чем 64 052 000 байт (приблизительно 61 МБ). Промежуточный пароль представляет собой SHA-256-хеш-сумму от базового ключа, одинаков для всех файлов и используется с заданной в коде солью и 1000 итераций для генерации ключа шифрования и вектора инициализации. Каждый файл шифруется алгоритмом AES в режиме CBC. К зашифрованным файлам добавляется расширение .locked.

Файлы большего размера шифруются по-другому. Ключ шифрования имеет размер в 16 байт и формируется следующим образом: первые 8 байт берутся из базового ключа, а оставшиеся из дополнительного заданного в коде массива. Далее используется кастомная реализация AES в режиме ECB. Шифруются блоки по 16 байт, но с пропуском следующих 12 800. Таким образом, файл будет шифрован не весь, а небольшими порциями. Вероятнее всего, такой способ был выбран для ускорения работы вредоноса. Зашифрованные файлы принимают расширение .cryptd.

Стоит отметить, что при этом создается новый файл, в который записывается шифрованный поток, а оригинальный файл небезопасно удаляется. В этом случае оригинальные файлы также могут быть восстановлены из неразмеченной области диска, если не будут перезаписаны свежей информацией.

В каждом каталоге, где произошло шифрование файлов, создается файл readme_contact_alex.dali@iran.ir.htm со следующим содержимым:

Your companies cyber defense systems have been weighed, measured and have been found wanting!!! The breach is a result of grave neglect of security protocols All of your computers have been corrupted with Polar malware that has encrypted your files. We ensure that the only way to retrieve your data swiftly and securely is with our software. Restoration of your data requires a private key which only we possess Don't waste your time and money purchasing third party software, without the private key they are useless. It is critical that you don't restart or shutdown your computer. This may lead to irreversible damage to your data and you may not be able to turn your computer back on. To confirm that our software works email to us 2 files from random computers you will get them decrypted. readme_contact_alex.dali@iran.ir.htm contain encrypted session keys we need in order to be able to decrypt your files. The softwares price will include a guarantee that your company will never be inconvenienced by us. You will also receive a consultation on how to improve your companies cyber security If you want to purchase our software to restore your data contact us at: Pt34Jarmys@protonmail.com alex.dali@iran.ir We can only show you the door. You're the one who has to walk through it. Your personal installation key:*REDACTED*

Добавим, что текст записки имеет сходства с формулировкой, используемой шифровальщиком MegaCortex.

Заметка, оставляемая жертве, содержит зашифрованный базовый ключ шифрования. Для этого базовый ключ шифруется алгоритмом RSA с заданным в коде публичным ключом в 1024 байт и кодируется Base64.

После завершения этапа шифрования файлов троян записывает изображение, содержащееся в ресурсах исполняемого файла, на диск по пути c:\programdata\Rs.bmp и назначает его в качестве фона рабочего стола.

Затем повторяет процедуру удаления журналов событий системы и скрытых копий файлов, с которой начинал свою работу. После этого отправляет HTTP-запрос POST с именем компьютера жертвы на сервер злоумышленников по адресу hxxp://www.therockbrazil.com.br/assinaturas/logs.php.

Как нам удалось расшифровать файлы

Читатель, следивший за цепочкой шифрования файлов, наверняка заметил, что безопасность криптосистемы зависит от значения базового ключа шифрования — по тексту мы назвали его так. Его значение шифруется RSA-1024 и записывается в шантажирующую заметку. На сегодняшний день не существует одновременно дешевых и быстрых подходов к факторизации ключа такого размера. Поэтому мы выбрали другой путь.

Вспомним, что базовый ключ формируется путем произвольного выбора восьми символов из заданного алфавита. Вот как это реализовано:

Обращаем внимание, что функция Random вызывается единожды и без параметра. Этот вызов возвращает случайное число, используя в качестве seed генератора псевдослучайных чисел значение переменной Environment.TickCount. Она, в свою очередь, имеет размер 4 байта и хранит количество миллисекунд, прошедших с момента старта операционной системы.

Получается, что для расшифровки файлов нам достаточно знать, сколько времени прошло с момента включения компьютера жертвы (uptime) в момент запуска шифровальщика. Достаточно, да — но насколько это просто?

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

К счастью, в инфраструктуре клиента использовался SCCM, клиентские агенты которого работали на всех зашифрованных машинах. Необходимая нам информация сохранялась в централизованном хранилище и не подверглась вмешательству: оставалось только методом проб и ошибок выбрать правильное значение.

Получив с достаточной точностью uptime системы, мы должны были теперь определить время запуска шифровальщика. Вспомним, что после завершения работы удаляются промежуточная DLL-библиотека и зашифрованный вымогатель, но не легитимный исполняемый файл, в рамках процесса которого происходят вредоносные действия. Это значит, что по времени появления этого файла в системе определить приблизительное время запуска шифровальщика с точностью до нескольких секунд не составляет труда. С помощью bruteforce за пару десятков тысяч итераций (около минуты на обычной рабочей станции) мы подбирали точное значение базового ключа шифрования, а затем благополучно расшифровывали остальные файлы. Нельзя упустить тот факт, что в некоторых случаях нам не удавалось быстро подобрать ключ. Причиной тому были неправильно выставленные часовые пояса. Разобравшись, мы обошли и это препятствие.

Атрибуция

Среди инструментов, которые использовались киберпреступниками, мы упоминали бэкдоры SysUpdate и HyperBro. Это специфичные, не широко используемые трояны удаленного доступа, которые применяются группой злоумышленников APT27 (они же BRONZE UNION, LuckyMouse, Emissary Panda, Iron Tiger). Группировка, предположительно, имеет азиатские корни, существует и активна по крайней мере с 2010 года. Деятельность злоумышленников сфокусирована на государственных учреждениях в сфере обороны и энергетики, аэрокосмических предприятиях, а также индустриальном комплексе. Чаще всего исходным вектором атаки является компрометация веб-серверов жертвы путем эксплуатации уязвимостей, взлома учетных записей путем перебора или использования недочетов в конфигурации веб-сервера. Несмотря на совпадения в технико-тактических действиях (TTP) и использование характерного инструментария, несколько исследователей в команде усомнились в принадлежности атак к группе APT27.

1. Выбор цели

СМИ до сих пор не входили в область интересов злоумышленников из APT27. Это и подтверждается результатами расследования данного инцидента: злоумышленники не стремились получить доступ к приватной информации целевой инфраструктуры, а ограничились запуском ПО для получения финансовой выгоды.

2. Использование майнеров криптовалюты и шифровальщика

Нетипичное, и даже неподходящее ПО, которое может быстро привлечь внимание и нарушить планы по долговременному кибершпионажу. URL-адрес, куда отправляет «отстук» шифровальщик по завершении своей работы, не имеет ничего общего с сетевой инфраструктурой группы. Конечно, существуют группировки (например, Lazarus, Winnti), которые совмещают кибершпионскую деятельность и финансовую мотивированность, и APT27 также меняет свой узкий профиль. А может быть, имеет место некая договоренность с другими злоумышленниками, которые предлагают к распространению свое ПО, отдавая часть прибыли исполнителям. В пользу атрибуции шифровальщика Polar к группе APT27 может свидетельствовать характерный сценарий запуска полезной нагрузки, исполнения в памяти и именования: так, зашифрованный бэкдор SysUpdate часто именуется как sys.bin.url, в свою очередь шифровальщик Polar был заименован как Sysurl.Hex — в достаточно схожей манере. Впрочем, это может быть и ложный флаг.

3. Автоматизация в 2018 и 2020 годах

Ниже пример скрипта, который обеспечивал автоматическую установку майнера криптовалюты по списку машин в 2018 году:

@echo off for /f %%i in (c:\programdata\list.txt) do ( net use \\%%i\c$ "*" /u:*\administrator copy c:\programdata\vmnat.exe \\%%i\c$\windows\system32\vmnat.exe SCHTASKS /Create /S %%i /u *\administrator /p "*" /tn * /tr "cmd.exe /c start c:\windows\system32\vmnat.exe" /sc onstart /RU SYSTEM schtasks /run /S %%i /u *\administrator /p "*" /tn * net use \\%%i\c$ /del net use * /del /Y ) del vmnat.exe del list.txt del work.bat

А это скрипт автоматического удаления шифровальщика по списку машин в 2020 году:

@echo off for /f %%i in (c:\programdata\list.txt) do ( net use \\%%i\c$ "*" /u:*\* if not errorlevel 1 ( del \\%%i\c$\programdata\GameuxInstallHelper.dll del \\%%i\c$\programdata\GDFInstall.exe del \\%%i\c$\programdata\Sysurl.Hex net use \\%%i\c$ /del )ELSE ( echo not access %%i >> c:\programdata\no_access.txt ) )

(Мы заменили чувствительную информацию символами '*')

С одной стороны, нельзя не отметить структурную похожесть скриптов, идентичный цикл по строкам файла по одному и тому же пути. С другой стороны, форматирование отступов, задачи скриптов, подход к именованию файлов отличаются. Какие-то команды слишком общие: разные люди могут найти их в поисковике и переиспользовать.

4. Тела бэкдоров SysUpdate и HyperBro

Не во всех случаях нам удалось подтвердить наличие того или иного бэкдора непосредственно по телу трояна. Так мы определили бэкдор HyperBro, использованный в 2018 году, по характерному именованию файла в совокупности с подтвержденными другими инструментами, а бэкдор SysUpdate, использованный в 2020 году, по адресу C&C и телу бэкдора в памяти дампа процесса, загруженного на VirusTotal в процессе расследования из организации, не связанной с нашим клиентом.

Критерии сходств, которые позволяют говорить о причастности к атакам кибергруппы APT27, достаточно сильны в совокупности, но неоднозначны. Мы оставляем читателю выбрать, согласиться или нет с нашей точкой зрения о причастности APT27.

Заключение

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

Авторы: Денис Гойденко и Алексей Вишняков, Positive Technologies

MITRE TTPs

Tactic ID Name
Initial Access T1190 Exploit Public-Facing Application
T1199 Trusted Relationship
Execution T1059 Command and Scripting Interpreter: Windows Command Shell
T1053 Scheduled Task/Job: Scheduled Task
T1047 Windows Management Instrumentation
Persistence T1547 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder
T1574 Hijack Execution Flow: DLL Search Order Hijacking
T1053 Scheduled Task/Job: Scheduled Task
T1078 Valid Accounts: Domain Accounts
T1078 Valid Accounts: Default Accounts
Privilege Escalation T1068 Exploitation for Privilege Escalation
Defense Evasion T1140 Deobfuscate/Decode Files or Information
T1070 Indicator Removal on Host: Clear Windows Event Logs
T1070 Indicator Removal on Host: File Deletion
T1070 Indicator Removal on Host: Timestomp
Credential Access T1003 OS Credential Dumping: LSASS Memory
Discovery T1087 Account Discovery: Domain Account
T1082 System Information Discovery
T1049 System Network Connections Discovery
Lateral Movement T1210 Exploitation of Remote Services
T1570 Lateral Tool Transfer
T1021 Remote Services: SMB/Windows Admin Shares
Collection T1560 Archive Collected Data: Archive via Utility
T1005 Data from Local System
T1119 Automated Collection
T1039 Data from Network Shared Drive
Command and Control T1071 Application Layer Protocol: Web Protocols
T1132 Data Encoding: Standard Encoding
T1573 Encrypted Channel: Symmetric Cryptography
Exfiltration T1020 Automated Exfiltration
T1041 Exfiltration Over C2 Channel
Impact T1486 Data Encrypted for Impact

IOCs

ChinaChopper:
2ce60073c09887f9e3a482097294e17d
5bc0d6918e03a92f04b3dfc21b619c7f
73717a2f9bfe19ccdad541bec1fa2b69
82a8470534d74c9c5c0d84071eb0a703
b89e96e2ea8dd6fdb438f7d5b8ecf60c

TwoFace:
581c331d41ef5f5df99ae0d16b2cebf0
ff2693903a1049984745e79381e9ed7e

SysUpdate:
3c1981991cce3b329902288bb2354728
43a2c2fb8d52dc1835ac18516b13aff1
4b5484e3de5c5a2e60fcee50d04183d6

SysUpdate C&C:
103.59.144[.]183
95.179.189[.]33

NBTScan:
f01a9a2d1e31332ed36c1a4d2839f412

SMBTouch:
b50fff074764b3a29a00b245e4d0c863

PsExec:
aeee996fd3484f28e5cd85fe26b6bdcd

Termite:
dc92496358b8e67568a35b861ba1804e39e3d36b

Dsquery:
3583d7c971de148a1ffb3302d1510ef1

EternalBlue:
8c80dd97c37525927c1e549cb59bcbf3

frsocks:
da0c13d834cafc010bec1afa2d76196ced71e661

Mimikatz:
449da3d7405c2c79fa55bd7973096e28
0078ff05c20689f40ea9cb8c47fcfb2e52cdc3a9

BitMiner:
5430039162e58c44f9a5941295b55fba

Polar:
841980b4ae02a4e6520ab834deee241b