Некоторые действия, предпринятые на этапе первоначального доступа к атаке, приписываемой Lazarus, а также анализ вредоносного ПО, которое использовалось на этом этапе.
Lazarus APT
Методы, используемые для получения доступа к сети жертвы, широко известны, однако нюансы, возникающие после эксплуатации, предоставляют богатую информацию о путях атаки и материалы по поиску угроз, которые тесно связаны с TTP группы Lazarus.
- Lazarus использовал профили LinkedIn для выдачи себя за сотрудников других легальных компаний.
- Lazarus общался с целевыми сотрудниками через такие каналы связи, как WhatsApp.
- Lazarus заманивал жертв скачать объявления о вакансиях (zip-файлы), содержащие вредоносные документы, которые приводили к выполнению вредоносного ПО
- Идентифицированный вредоносный загрузчик является вариантом LCPDOT.
- Запланированные задачи используются в качестве формы сохранения (выполнение rundll32 из запланированной задачи)
Первоначальный вход в систему в значительной степени связан с социальной инженерией, а недавние попытки включали выдачу себя за сотрудников компании Lockheed Martin с профилями LinkedIn, чтобы убедить жертв откликнуться на предложение о работе, что привело к доставке вредоносного документа.
В данном случае доменом, на котором размещался документ, был global-job.org, вероятно, пытавшийся выдать себя за globaljobs.org, американский сайт по подбору персонала для правительственных/оборонных организаций. Для того чтобы обойти средства контроля безопасности, предусмотренные недавними изменениями, внесенными Microsoft в макросы Office, на сайте размещался ZIP-файл, содержащий вредоносный документ.
Документ имел ряд характеристик, сопоставимых с другими образцами Lazarus, однако по неизвестным обстоятельствам "формы", содержащие полезную нагрузку, были недоступны и не могли быть проанализированы.
После выполнения макродокумента вызывается rundll32.exe для выполнения DLL C:\programdata\packages.mdb, что приводило к первоначальному вызову сервера команд и управления. К сожалению, сам двоичный файл уже недоступен для анализа, однако считается, что именно этот компонент привел к размещению вредоносной программы LCPDot на хосте жертвы.
Вредоносный загрузчик, который выполнялся как запланированная задача. Обнаруженный образец является вариантом LCPDot и приписывается APT Larazus.
Рассматриваемый файл попытался слиться с окружающей средой, используя каталог ProgramData, в очередной раз C:\ProgramData\Oracle\Java\JavaPackage.dll. Однако файл имел характеристики, которые выделялись при поиске угроз:
- Большой размер файла (60мб+) - вероятно, обойдет антивирусное сканирование
- Копирование времени - временные метки копировались из CMD.exe
- DLL принадлежит пользователю в каталоге ProgramData (не SYSTEM или Administrator).
Для выполнения LCPDot была создана запланированная задача с именем "Windows Java Vpn Interface", пытающаяся слиться с системой с помощью темы Java. Задание по расписанию выполняло двоичный файл.
Задача по расписанию была настроена на ежедневный запуск со следующим параметром, переданным для выполнения:
1 2 3 4 | <Exec> <Command>c:\windows\system32\rundll32.exe</Command> <Arguments>C:\ProgramData\Oracle\Java\JavaPackage.dll,VpnUserInterface</Arguments> </Exec> |
Вредоносное ядро загрузчика запускается в отдельном потоке, а поток выполнения определяется на основе идентификаторов сообщений Windows (отправляемых функцией Windows API SendMessage).
Фаза инициализации происходит в новом потоке, при этом выполняются следующие задачи:
- Инициализация класса MoscowTownList. Этот класс обладает функциональностью для чтения/записи конфигурации.
- Создание файла конфигурации на диске. Файл конфигурации хранится под именем VirtualStore.cab в папке %APPDATA%\Local. Конфигурация включает в себя различные метаданные, а также URL-адреса командных и управляющих серверов.
Конфигурация шифруется путем хэширования (SHA-1) случайного массива байтов (16 байтов), а затем используется выход хэша для получения (CryptDeriveKey) ключа RC4 (16 байтов). Наконец, в файл конфигурации записывается массив случайных байтов, а затем зашифрованные данные конфигурации.
Перечисление логических дисков и активных сеансов входа в систему происходит только в том случае, если это указано в конфигурации. По умолчанию эта опция выключена. Более того, даже если она включена, она не оказывает никакого эффекта (например, отправляет их на командно-контрольный сервер).
После завершения этой фазы загрузчик начинает сетевое взаимодействие со своими серверами команд и управления.
На этом этапе загрузчик регистрирует скомпрометированный узел на командно-контрольном сервере, а затем запрашивает полезную нагрузку для выполнения. В целом, выполняются следующие шаги:
Инициализация классов Taxiroad и WashingtonRoad.
Создается массив байтов (16 байт), который затем кодируется (base64), и идентификатор сессии. Оба идентификатора отправляются на сервер. Закодированный массив байтов используется позже для расшифровки полученной полезной нагрузки и добавляется к содержимому тела запроса:
redirect=Yes&idx=%d&num=%s, где idx содержит значение времени загрузки скомпрометированного хоста, а num - закодированный (BASE64) массив байтов.
Кроме того, идентификатор сессии кодируется (BASE64) и добавляется к следующей строке:
SESSIONID-%d-202110, где 202110 - идентификатор сетевой команды.
Вышеуказанная строка снова кодируется (BASE64) и затем добавляется к заголовку SESSIONID POST-запроса.
После регистрации скомпрометированного узла сервер отвечает одним из следующих сообщений:
Validation Success - Бот зарегистрирован без проблем.
Validation Error - Произошла ошибка.
После завершения процесса регистрации загрузчик отправляет GET-запрос для загрузки полезной нагрузки второго этапа. Полученная полезная нагрузка расшифровывается путем хэширования (SHA-1) ранее созданного массива байтов, а затем полученный хэш используется для получения (CryptDeriveKey) ключа RC4.
Наконец, расшифрованная полезная нагрузка загружается непосредственно в память и выполняется в новом потоке.
Одним из интересных наблюдений является наличие функций и сетевых команд, которые загрузчик, похоже, не использует. Скорее всего следующие сетевые команды не используются загрузчиком (по крайней мере, в этом варианте), но операторы могут использовать их на стороне сервера (например, в PHP-скриптах, которым загрузчик отправляет данные) или загруженная полезная нагрузка использует их (Примечание: Команды 789020, 789021 и 789022 по умолчанию отключены):
- 202112 - Отправляет зашифрованные данные в POST-запросе. Контекст данных неизвестен.
- 202114 - Отправляет POST-запрос с содержимым тела 'Cookie=Enable'.
- 789020 - Та же функциональность, что и у команды ID 202111.
- 789021 - Та же функциональность, что и у команды с идентификатором 202112.
- 789022 - Отправляет POST-запрос с содержимым тела 'Cookie=Enable'.
Indicators of Compromise
IPv4
- 13.88.245.250
Domains
- ats.apvit.com
- bugs-hpsm.mobitechnologies.com
- global-job.org
- shoppingbagsdirect.com
- thefrostery.co.uk
MD5
- 49c2821a940846bdacb8a3457be4663c
- afbcb626b770b1f87ff9b5721d2f3235
SHA1
- 0a6f762a47557e369db8655a0d14ab088926e05b
- d25a4f20c0b9d982d63fc0135798384c17226b55
SHA256
- f4e314e8007104974681d92267673ac22721f756d8e1925142d9c26dc8a0ffb4
- fd02e0f5fcf97022ac266a3e54888080f66760d731903fc32df2e17e6e1e4c64