Обзор.
В течение 2019–2021 годов я был сосредоточен на анализе кампаний, организованных группой APT-C-36, и RAT, используемых этой же группой и другими киберпреступными группами, такими как RemcosRAT, AsyncRAT, Imminent Monitor RAT и т. д. За последние несколько месяцев я видел некоторые модификации TTP во многих из этих семейсв, которые привлекли мое внимание, и я хотел проанализировать их, чтобы увидеть, что нового.
Поэтому в этой статье мы проведем анализ образца AsyncRAT, распространенного в Колумбии за последний месяц.
Информация
Цель анализа — предоставить информацию о выполнении бинарника, генеалогии и прочего, а не вдаваться в подробности статической части.
Анализ
Основная статическая информация об анализируемом образце показана в таблице ниже.
Убедившись, что бинарный файл написан на языке C#, я решил провести небольшой анализ кода, чтобы проверить некоторые действия, которые вредоносные программы должны выполнять после запуска, прежде чем запускать их в моих системах.
Если мы перейдем к функции Main, которая определена в точке входа, мы увидим, что она содержит структуру, показанную на следующем изображении.
Бинарный файл проверит ряд условий, чтобы проверить, выполняется ли он среди прочего в виртуальной среде или нет, и в зависимости от результатов он продолжит свой обычный поток или завершит процесс.
Первая проверка заключается в том, чтобы убедиться, что ряд настроек, установленных в коде, среди которых ключ, пастебит URL, версия и т. д.
Во-вторых, он пытается создать мьютекс и остановить похожие процессы того же образца, которые могут быть запущены.
Затем он выполняет несколько проверок, чтобы определить контекст, в котором он работает (главным образом, чтобы определить, является ли он виртуальной машиной или песочницей). Применяются различные методы антианализа.
Прежде всего, это связано с методом DetectManufacturer, целью которого является определение того, связана ли система с Vmware, VirtualBox или вообще с виртуализацией.
Следующее, что нужно сделать, это проверить, существует ли отладчик в контексте AsyncRAT. Для этого используется API isDebuggerPresent.
Затем проверка фокусируется на том, чтобы увидеть, является ли система, в которой она была выполнена, известной песочницей (https://github.com/sandboxie-plus/Sandboxie), чтобы проверить ее, пытается определить, работает ли DLL SbieDll.dll.
Следующая проверка, которую он выполняет, касается емкости системного диска. В этом случае он проверяет, меньше ли размер диска 61000000000L (56,8 ГБ). Если это так, он возвращает false.
Последнее, что он выполняет в этом наборе проверок, — это простым методом определяет, является ли операционная система Windows XP.
Он также направлен на создание постоянства в системе. Для этого троян проверяет, запущен ли контекст процесса с привилегиями, и если да, то использует schtasks.exe для создания задачи. В противном случае, если контекст не найден с разрешениями администратора, он попытается изменить раздел реестра Software\Microsoft\Windows\CurrentVersion\Run, чтобы выполнить собственную копию create в пути %appdata.
После этого образец копирует себя в каталог %appdata% и создает файл .bat, чтобы сначала запустить тайм-аут, запустить образец из %appdata% и удалить файл .bat.
Последнее интересное действие — установить связь с C2 через методы ClientSocket.Reconnect() и ClientSocket.InitializeClient().
После развертывания в среде образец может выполнять множество других действий. Например, класс Client.Helper.IdSender имеет метод sendInfo, который отвечает за отправку информации из операционной системы на C2.
Детальное рассмотрение каждого класса может занять много времени, и в этом случае цель состоит в том, чтобы проанализировать поведение после выполнения, поэтому я оставлю небольшое изображение части классов и методов, которые включают образец, и мы выполним анализ поведения.
Динамический анализ
События процессов высокого уровня
Теперь пришло время взорвать вредоносное ПО в контролируемой среде, чтобы проверить поведение вредоносного ПО. В этом случае я выполнял разные действия с правами администратора и без них, чтобы посмотреть, как поведет себя образец. Я сделал это, потому что в статической части мы видели, что поведение может варьироваться в зависимости от того, выполняется ли оно в контексте администратора.
Привилегированное выполнение
Непривилегированное выполнение
Как видно, есть некоторые различия, когда образец выполнялся с привилегиями, а когда нет. Например, в первом изображении, которое соответствует выполнению с привилегиями, есть 3 дополнительных процесса, которые являются следующими.
Это связано с тем, что выполнение процесса 7380 cmd.exe связано с установкой запланированной задачи. Однако если образец запускается без прав администратора, запланированное задание не может быть создано.
Мы собираемся подробно остановиться на процессах, чтобы увидеть основные действия, которые они выполняли и которые могут представлять интерес для создания какого-либо обнаружения или идентификации шаблонов. Для этого мы сосредоточимся на выполнении с правами администратора, и в случае, если в другом исполнении будет что-то другое, оно будет названо.
Стаб.exe - 2740
Это образец AsyncRAT. Выполнение было выполнено с правами администратора.
Этот процесс, как мы видели ранее, будет отвечать за создание определенных файлов в системе. Прежде всего, он создает в каталоге %appdata% свою копию.
Затем он также создает пакетный файл в %appdata%, который будет выполняться позже для выполнения различных действий в операционной системе.
Что касается разделов реестра, то особой активности нет.
Информация
Различное поведение в примере запуска без привилегий.
Однако в случае непривилегированного выполнения в ключах реестра будет модификация для сохраняемости с использованием ключа HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Runtime Broker.
cmd.exe – 7380
"C:\Windows\System32\cmd.exe" /c schtasks /create /f /sc onlogon /rl highest /tn "Runtime Broker" /tr '"C:\Users\lab\AppData\Roaming\Runtime Broker.exe"' & exit
Этот процесс в основном отвечает за запуск двоичного файла schtasks.exe. Важно отметить, как мы видим и увидим в ходе анализа, что, поскольку это 32-битный сэмпл, выполнение будет связано с каталогом C:\Windows\SysWOW64\.
Этот процесс не будет существовать при запуске AsyncRAT без прав администратора.
schtasks.exe — 4152
schtasks /create /f /sc onlogon /rl highest /tn "Runtime Broker" /tr '"C:\Users\lab\AppData\Roaming\Runtime Broker.exe"'
Задача генерируется в системе для выполнения при каждом входе в систему любого пользователя с правами администратора.
/f -> A value that forcefully creates the task and suppresses warnings if the specified task already exists.
/sc onlogon -> In each login
/rl highest -> Max privileges
/tn "Runtime Broker" -> Task name
/tr "C:\Users\lab\AppData\Roaming\Runtime Broker.exe" -> Task run to execute
cmd.exe – 8840
C:\Windows\system32\cmd.exe /c ""C:\Users\lab\AppData\Local\Temp\tmp3959.tmp.bat""
Этот процесс отвечает за выполнение bat-файла, созданного во время выполнения двоичного файла Stub.exe. Важно отметить, что имя пакетного файла зависит от выполнения, однако шаблон всегда один и тот же. Следующее RegEx будет работать, чтобы обнаружить это.
.*tmp[a-zA-Z1-9]{4}.tmp.bat
timeout.exe - 6272
timeout 3
Вредоносная программа использует тайм-аут в 3 секунды, прежде чем начнет выполнять остальные действия.
"C:\Users\lab\AppData\Roaming\Runtime Broker.exe"
Как видно из названия процесса, вредоносная программа пытается выдать себя за легитимный бинарный файл Microsoft Windows runtimebroker.exe. Однако в этом случае можно заметить, что между двумя словами есть пробел.
Здесь устанавливается связь с сервером C2. В данном случае используются порты 8808, 7707 и 6606. IP-адрес назначения — 217.195.197.70.
С другой стороны, другим индикатором, который может помочь нам идентифицировать выборку и семейство во время анализа, является используемый мьютекс, в данном случае это AsyncMutex_6SI8OkPnk.
Во время выполнения Runtime Broker.exe я приступил к извлечению сборки .NET из памяти, чтобы проверить, был ли это тот же двоичный файл Stub.exe, который был проанализирован позже, или он представлял некоторую разницу при запуске. В ходе этого извлечения из памяти были получены следующие сборки.
aB.exe
Сборка aB.exe — это тот же файл Stub.exe, который в свою очередь также является Runtime Broker.exe.
MessagePackLib.dll
Эта DLL не содержит никаких упаковщиков или средств защиты кода. 41 из 68 движков VT (https://www.virustotal.com/gui/file/cd89c8c9bb614fac779491b98ed425f90b01412381e02392fb27b36db3568b0f) определяют эту DLL как вредоносную.
Взглянув на сборку, вы можете увидеть, что структура класса не кажется очень сложной, и, проявив немного терпения, вы сможете определить его функциональность (если вам интересен пример, спросите меня в частном порядке).
Recovery.dll
В этом случае удалось проверить существование Reactor, который сам по себе называется защитой кода .NET( https://www.eziriz.com/) , что можно увидеть на его веб-сайте.
Что касается сборки, то можно убедиться, что есть защита кода, так как многие строки и классы рандомизируются в момент наблюдения за их возможной логикой.
В процессе попытки снять защиту кода можно увидеть в более читаемом виде часть кода, идентифицирующую сообщения о действиях, которые может попытаться выполнить сборка, в данном случае, как видно на изображении, связанных с получением файла куки Firefox.
Граф потока выполнения
Чтобы иметь графическое представление наиболее важных событий, происходящих во время выполнения AsyncRAT, был разработан граф поведения, на котором можно увидеть события, генерируемые в системе во время его выполнения.
Алмазная модель
IOCs
Правила для сигмы
Созданные сигма-правила специфичны для этой полезной нагрузки. AsyncRAT будет использовать разные полезные нагрузки с одинаковыми или разными именами. Важно отметить, что исходное имя встроенного файла в этом случае — Stub.exe. Это интересно, потому что, если злоумышленники создадут новые полезные нагрузки, возможно, исходное имя файла останется прежним.
В оригинальном репозитории Sigma (https://github.com/SigmaHQ/sigma/tree/master/rules/windows) есть большое количество общих правил, которые могут помочь в обнаружении этой вредоносной программы.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://jstnk9.github.io/jstnk9/research/AsyncRAT-Analysis/
В течение 2019–2021 годов я был сосредоточен на анализе кампаний, организованных группой APT-C-36, и RAT, используемых этой же группой и другими киберпреступными группами, такими как RemcosRAT, AsyncRAT, Imminent Monitor RAT и т. д. За последние несколько месяцев я видел некоторые модификации TTP во многих из этих семейсв, которые привлекли мое внимание, и я хотел проанализировать их, чтобы увидеть, что нового.
Поэтому в этой статье мы проведем анализ образца AsyncRAT, распространенного в Колумбии за последний месяц.
Информация
Цель анализа — предоставить информацию о выполнении бинарника, генеалогии и прочего, а не вдаваться в подробности статической части.
Анализ
Основная статическая информация об анализируемом образце показана в таблице ниже.
| Field | Value |
|---|---|
| File name | Stub.exe |
| Type | PE32 executable for MS Windows (GUI) Intel 80386 32-bit Mono/.Net assembly |
| MD5 | c0b9838ff7d2ddecbfe296eae947e5d6 |
| SHA1 | 76af794b85e4a4ba75c5703df1207b7a6798bf2e |
| SHA256 | 79068b82bcf0786b6af1b7cc96de1bf4e1a66b0d95e7e72ed1b1054443f6c5e3 |
| File size | 45.00 KB (46080 bytes) |
Убедившись, что бинарный файл написан на языке C#, я решил провести небольшой анализ кода, чтобы проверить некоторые действия, которые вредоносные программы должны выполнять после запуска, прежде чем запускать их в моих системах.
Если мы перейдем к функции Main, которая определена в точке входа, мы увидим, что она содержит структуру, показанную на следующем изображении.
Бинарный файл проверит ряд условий, чтобы проверить, выполняется ли он среди прочего в виртуальной среде или нет, и в зависимости от результатов он продолжит свой обычный поток или завершит процесс.
Первая проверка заключается в том, чтобы убедиться, что ряд настроек, установленных в коде, среди которых ключ, пастебит URL, версия и т. д.
Во-вторых, он пытается создать мьютекс и остановить похожие процессы того же образца, которые могут быть запущены.
Затем он выполняет несколько проверок, чтобы определить контекст, в котором он работает (главным образом, чтобы определить, является ли он виртуальной машиной или песочницей). Применяются различные методы антианализа.
Прежде всего, это связано с методом DetectManufacturer, целью которого является определение того, связана ли система с Vmware, VirtualBox или вообще с виртуализацией.
Следующее, что нужно сделать, это проверить, существует ли отладчик в контексте AsyncRAT. Для этого используется API isDebuggerPresent.
Затем проверка фокусируется на том, чтобы увидеть, является ли система, в которой она была выполнена, известной песочницей (https://github.com/sandboxie-plus/Sandboxie), чтобы проверить ее, пытается определить, работает ли DLL SbieDll.dll.
Следующая проверка, которую он выполняет, касается емкости системного диска. В этом случае он проверяет, меньше ли размер диска 61000000000L (56,8 ГБ). Если это так, он возвращает false.
Последнее, что он выполняет в этом наборе проверок, — это простым методом определяет, является ли операционная система Windows XP.
Он также направлен на создание постоянства в системе. Для этого троян проверяет, запущен ли контекст процесса с привилегиями, и если да, то использует schtasks.exe для создания задачи. В противном случае, если контекст не найден с разрешениями администратора, он попытается изменить раздел реестра Software\Microsoft\Windows\CurrentVersion\Run, чтобы выполнить собственную копию create в пути %appdata.
После этого образец копирует себя в каталог %appdata% и создает файл .bat, чтобы сначала запустить тайм-аут, запустить образец из %appdata% и удалить файл .bat.
Последнее интересное действие — установить связь с C2 через методы ClientSocket.Reconnect() и ClientSocket.InitializeClient().
После развертывания в среде образец может выполнять множество других действий. Например, класс Client.Helper.IdSender имеет метод sendInfo, который отвечает за отправку информации из операционной системы на C2.
Детальное рассмотрение каждого класса может занять много времени, и в этом случае цель состоит в том, чтобы проанализировать поведение после выполнения, поэтому я оставлю небольшое изображение части классов и методов, которые включают образец, и мы выполним анализ поведения.
Динамический анализ
События процессов высокого уровня
Теперь пришло время взорвать вредоносное ПО в контролируемой среде, чтобы проверить поведение вредоносного ПО. В этом случае я выполнял разные действия с правами администратора и без них, чтобы посмотреть, как поведет себя образец. Я сделал это, потому что в статической части мы видели, что поведение может варьироваться в зависимости от того, выполняется ли оно в контексте администратора.
Привилегированное выполнение
Непривилегированное выполнение
Как видно, есть некоторые различия, когда образец выполнялся с привилегиями, а когда нет. Например, в первом изображении, которое соответствует выполнению с привилегиями, есть 3 дополнительных процесса, которые являются следующими.
Это связано с тем, что выполнение процесса 7380 cmd.exe связано с установкой запланированной задачи. Однако если образец запускается без прав администратора, запланированное задание не может быть создано.
Мы собираемся подробно остановиться на процессах, чтобы увидеть основные действия, которые они выполняли и которые могут представлять интерес для создания какого-либо обнаружения или идентификации шаблонов. Для этого мы сосредоточимся на выполнении с правами администратора, и в случае, если в другом исполнении будет что-то другое, оно будет названо.
Стаб.exe - 2740
Это образец AsyncRAT. Выполнение было выполнено с правами администратора.
Этот процесс, как мы видели ранее, будет отвечать за создание определенных файлов в системе. Прежде всего, он создает в каталоге %appdata% свою копию.
Затем он также создает пакетный файл в %appdata%, который будет выполняться позже для выполнения различных действий в операционной системе.
Что касается разделов реестра, то особой активности нет.
Информация
Различное поведение в примере запуска без привилегий.
Однако в случае непривилегированного выполнения в ключах реестра будет модификация для сохраняемости с использованием ключа HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Runtime Broker.
cmd.exe – 7380
"C:\Windows\System32\cmd.exe" /c schtasks /create /f /sc onlogon /rl highest /tn "Runtime Broker" /tr '"C:\Users\lab\AppData\Roaming\Runtime Broker.exe"' & exit
Этот процесс в основном отвечает за запуск двоичного файла schtasks.exe. Важно отметить, как мы видим и увидим в ходе анализа, что, поскольку это 32-битный сэмпл, выполнение будет связано с каталогом C:\Windows\SysWOW64\.
Этот процесс не будет существовать при запуске AsyncRAT без прав администратора.
schtasks.exe — 4152
schtasks /create /f /sc onlogon /rl highest /tn "Runtime Broker" /tr '"C:\Users\lab\AppData\Roaming\Runtime Broker.exe"'
Задача генерируется в системе для выполнения при каждом входе в систему любого пользователя с правами администратора.
/f -> A value that forcefully creates the task and suppresses warnings if the specified task already exists.
/sc onlogon -> In each login
/rl highest -> Max privileges
/tn "Runtime Broker" -> Task name
/tr "C:\Users\lab\AppData\Roaming\Runtime Broker.exe" -> Task run to execute
cmd.exe – 8840
C:\Windows\system32\cmd.exe /c ""C:\Users\lab\AppData\Local\Temp\tmp3959.tmp.bat""
Этот процесс отвечает за выполнение bat-файла, созданного во время выполнения двоичного файла Stub.exe. Важно отметить, что имя пакетного файла зависит от выполнения, однако шаблон всегда один и тот же. Следующее RegEx будет работать, чтобы обнаружить это.
.*tmp[a-zA-Z1-9]{4}.tmp.bat
timeout.exe - 6272
timeout 3
Вредоносная программа использует тайм-аут в 3 секунды, прежде чем начнет выполнять остальные действия.
Runtime Broker.exe — 4080
"C:\Users\lab\AppData\Roaming\Runtime Broker.exe"
Как видно из названия процесса, вредоносная программа пытается выдать себя за легитимный бинарный файл Microsoft Windows runtimebroker.exe. Однако в этом случае можно заметить, что между двумя словами есть пробел.
Здесь устанавливается связь с сервером C2. В данном случае используются порты 8808, 7707 и 6606. IP-адрес назначения — 217.195.197.70.
С другой стороны, другим индикатором, который может помочь нам идентифицировать выборку и семейство во время анализа, является используемый мьютекс, в данном случае это AsyncMutex_6SI8OkPnk.
Во время выполнения Runtime Broker.exe я приступил к извлечению сборки .NET из памяти, чтобы проверить, был ли это тот же двоичный файл Stub.exe, который был проанализирован позже, или он представлял некоторую разницу при запуске. В ходе этого извлечения из памяти были получены следующие сборки.
aB.exe
Сборка aB.exe — это тот же файл Stub.exe, который в свою очередь также является Runtime Broker.exe.
MessagePackLib.dll
Эта DLL не содержит никаких упаковщиков или средств защиты кода. 41 из 68 движков VT (https://www.virustotal.com/gui/file/cd89c8c9bb614fac779491b98ed425f90b01412381e02392fb27b36db3568b0f) определяют эту DLL как вредоносную.
Взглянув на сборку, вы можете увидеть, что структура класса не кажется очень сложной, и, проявив немного терпения, вы сможете определить его функциональность (если вам интересен пример, спросите меня в частном порядке).
Recovery.dll
В этом случае удалось проверить существование Reactor, который сам по себе называется защитой кода .NET( https://www.eziriz.com/) , что можно увидеть на его веб-сайте.
Что касается сборки, то можно убедиться, что есть защита кода, так как многие строки и классы рандомизируются в момент наблюдения за их возможной логикой.
В процессе попытки снять защиту кода можно увидеть в более читаемом виде часть кода, идентифицирующую сообщения о действиях, которые может попытаться выполнить сборка, в данном случае, как видно на изображении, связанных с получением файла куки Firefox.
Граф потока выполнения
Чтобы иметь графическое представление наиболее важных событий, происходящих во время выполнения AsyncRAT, был разработан граф поведения, на котором можно увидеть события, генерируемые в системе во время его выполнения.
Алмазная модель
IOCs
- 217.195.197.70 through 6606, 7707, 8808 ports
- 76AF794B85E4A4BA75C5703DF1207B7A6798BF2E
- 16CC8C3A461A6CE5A7ED1FF569EA61B8D9BA143E
- 93E9469789A4ECD28E30006D1CE10DBFFBD36D7C
- Mutex AsyncMutex_6SI8OkPnk
Правила для сигмы
Созданные сигма-правила специфичны для этой полезной нагрузки. AsyncRAT будет использовать разные полезные нагрузки с одинаковыми или разными именами. Важно отметить, что исходное имя встроенного файла в этом случае — Stub.exe. Это интересно, потому что, если злоумышленники создадут новые полезные нагрузки, возможно, исходное имя файла останется прежним.
В оригинальном репозитории Sigma (https://github.com/SigmaHQ/sigma/tree/master/rules/windows) есть большое количество общих правил, которые могут помочь в обнаружении этой вредоносной программы.
ATT&CK
| Technique | Kill chain phase | Diamond vertex | Comments |
|---|---|---|---|
| T1566.001 - Phishing: Spearphishing Attachment | Delivery | Capability | Email with ZIP file attached |
| T1547.001 - Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | Installation | Capability | Set registry key if non-privileged user executes the payload |
| T1053.005 - Scheduled Task/Job: Scheduled Task | Installation | Capability | Creates new scheduled task if privileged user executes the payload |
| T1036.005 - Masquerading: Match Legitimate Name or Location | Execution | Capability | Writes itself as a file named Runtime Broker.exe saved in %APPDATA% |
| T1571 - Non-Standard Port | C2 | Infrastructure | Use the ports 8808, 7707 and 6606 for communication |
| T1059.003 - Command and Scripting Interpreter: Windows Command Shell | Execution | Capability | Executes batch file created previously |
| T1027 - Obfuscated Files or Information | Exploitation | Capability | .NET Reactor is used for code protection |
| T1095 - Non-Application Layer Protocol | C2 | Infrastructure | TCP is used for C2 communications |
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://jstnk9.github.io/jstnk9/research/AsyncRAT-Analysis/