Как вредоносы распространялись через поддельный менеджер паролей KeePass: AsyncRAT, BATLoader
Приветствую, и снова я начну с вопроса. И достаточно непростого. Пользуетесь ли вы менеджерами паролей и считаете ли вы их полностью безопасными? Скорее всего, мнения читателей на этом моменте разделятся. Кто-то ответит, мол, пользуется блокнотом и ручкой, а кто-то ответит утвердительным »да». А к чему этот вопрос? Во-первых, замечу, что абсолютно ничто в нашем мире не может быть полностью безопасным: будь то программное обеспечение, какой-то ресурс или вовсе ваш телефон с тысячей защитных приложений. А во-вторых, менеджеры паролей в последнее время очень и очень часто стали подводить своих клиентов. Об одном таком инциденте и пойдет сегодня речь.
Так совсем недавно специалистами из MalwareBytes была обнаружена целая схема фейковых ресурсов, через которые распространялись инфицированные версии приложения KeePass. И совсем не удивительным является тот факт, что эта кампания продвигалась посредством использования GoogleAds (да, это та самая надоедливая реклама, которая появляется при посещении различных сайтов) и SEO Poisoning.
Казалось бы, удивительного здесь ничего нет, ведь это далеко не первый случай, когда вредонос распространяется подобным образом. Google, естественно, с этим борется, исправляет уязвимости, но пока что все без толку. Чего, кстати, не скажешь о человеческом факторе, ведь за последние несколько лет большинство пользователей сообразили, что поисковые системы не всегда выдают безопасные результаты из-за чего эффективность подобного метода атаки заметно поубавилась. Но в случае с KeePass произошло кое-что другое. Злоумышленники прибегли к использованию метода Punycode, чтобы сделать вредоносный домен практически идентичным оригинальному. В данном случае хакеры использовали Punycode «xn—eepass-vbb.info», что транслируется в адресной строке, как «ķeepass.info».
К моему огромному сожалению, и к счастью для большинства, этот ресурс уже недоступен, но вот как он выглядел:
Не знаю почему, но я бы больше поверил фейковому сайту, так как он выглядит более красочно и интуитивно понятно. По счастливой случайности, мне удалось раздобыть образец содержимого там вредоноса, анализом которого мы сегодня и займемся.
SEO poisoning (или отравление поисковой выдачи) — это техника атаки, целью которой является манипуляция результатами поиска в поисковых системах, таких как Google, Bing или Яндекс. Атаки SEO poisoning обычно проводятся злоумышленниками с целью привлечь пользователей на веб-сайты или страницы, содержащие вредоносные программы. Основная идея атаки SEO poisoning заключается в том, что злоумышленники пытаются оптимизировать вредоносные или фишинговые веб-сайты таким образом, чтобы они появлялись в верхних результатах поиска при запросах, связанных с актуальными событиями, популярными темами или популярными ключевыми словами.
Punycode — это стандартизированный метод кодирования символов Unicode в ASCII (символы, которые могут быть использованы в доменных именах и URL-адресах). Он был разработан, чтобы позволить представить доменные имена, содержащие символы, не являющиеся ASCII-символами (например, символы из разных языков, эмодзи и др.), в виде строк, которые могут быть безопасно использованы в интернет-адресах.
KeePass — это бесплатное и открытое программное обеспечение для управления паролями и хранения конфиденциальных данных. С его помощью пользователи могут создавать и хранить сложные пароли, а также организовывать их в защищенной базе данных. KeePass предоставляет возможность шифрования данных с использованием сильных алгоритмов, таких как AES или Twofish, чтобы гарантировать безопасное хранение и доступ к вашим паролям и другим секретным данным.
KeePass — что за вредонос внутри?
Итак, прежде чем начать представляю вам набор инструментов, которые мы будем сегодня использовать:
DIE — Detect It Easy: многофункциональный инструмент, имеющий просто огромный арсенал. Позволит нам опередить тип компилятора вредоноса, язык, библиотеки и таблицы импорта/экспорта с последующим дизассемблированием.
PE Bear — неплохой инструмент для просмотра и редактирования составляющих PE-файла.
Tiny Tracer — утилита для динамического отслеживания исполнения бинарных элементов. Так называемый трейсер.
IDA PRO — инструмент для реверс-инжиниринга.
Reko — декомпилятор, также знаком нам с прошлых статей.
HollowHunter — утилита, распознает и сбрасывает множество потенциально вредоносных имплантов (замененные/имплантированные PE, шелл-коды, перехватчики, патчи в памяти).
И прежде чем начать, нужно уточнить, что в большинстве вариантов инфицированный KeePass представлял собой коллаборацию с дроппером BatLoader, анализ которого мы уже проводили. Однако иногда можно было встретить образцы с встроенным AsyncRAT. И сегодня мы разберем цепочку именно с участием этого вредоноса.
AsyncRat — это некий мультитул, который помимо стандартных функций RAT может выполнять функции дроппера, стиллера и даже инжектора.
Дропперы — это инструменты, которые используются для внедрения или распространения вредоносных программ, вирусов или файлов через сети или веб-сайты.
RAT — это вредоносное программное обеспечение, которое позволяет удаленным злоумышленникам получить несанкционированный доступ к компьютеру или устройству, управлять им и собирать информацию. Эти инструменты могут использоваться для различных целей, включая шпионаж, кражу личных данных, вымогательство и другие виды киберпреступности.
Переходим непосредственно к анализу. Сперва воспользуемся DIE для получения дополнительных сведений о файле и для полноты картины проведем сравнение с официальной версией KeePass. И уже на этом моменте можно увидеть, насколько же маскировка злоумышленников в этом аспекте несовершенна. Снизу на скриншоте находится оригинальный установщик, а сверху — то, что распространялось через фейковый сайт.
При просмотре через DIE мы получаем следующие дополнительные сведения: вредонос представлен в виде 32-битного исполняемого PE-файла и является библиотекой .NET. Больше всего в этом смущает дата компиляции, так как, скорее всего, она была намеренно подменена. Это так называемый TimeStomping.
TimeStomping — это термин в области компьютерной безопасности, который описывает попытку злоумышленников изменить или скрыть даты и временные метки файлов и каталогов на компьютере с целью замедлить или затруднить обнаружение своих действий. Это может быть частью атаки на систему или попыткой скрыть следы взлома. Злоумышленники могут использовать TimeStomping для того, чтобы сделать файлы и каталоги на компьютере менее подозрительными или скрыть информацию о том, когда их действия были выполнены. Это может затруднить анализ инцидента и определение, когда и каким образом произошло нарушение безопасности.
Библиотеки .NET по сути своей являются конечным результатом компиляции кода на C#. К нашему счастью, мы с легкостью можем декомпилировать данный образец с помощью утилиты DNspy и провести анализ чистого исходного кода, или, по крайней мере, чего-то близкого к нему.
Сравнивать с оригинальным KeePass необходимости нет, они кардинально отличаются. Также давайте загрузим наш образец на VirusTotal, чтобы посмотреть процент обнаружения антивирусным ПО. И мы получаем действительно неплохие результаты, ведь на момент написания этой статьи прошел всего лишь день после обнаружения схемы с инфицированным KeePass.
А сейчас переходим непосредственно в DNSpy. Здесь важно отметить, что Async RAT является, как и большинство современных троянов, модульным. Но в отличие от других своих коллег, порядок задействования модулей не зависит от конфигурационного файла или от указаний командного сервера. Вредонос будет автономно использовать все имеющиеся модули с интервальной задержкой в 3, 5, 10 секунд.
Прежде чем начать, представляю примерный алгоритм работы вредоноса:
Инициализация настроек и связь с C&C-сервером, первичная расшифровка всех функций.
Задействование всех возможных методов антианализа.
Закрепление в системе.
Выполнение обязательных модулей: кейлоггер, стиллер, дроппер, модули мониторинга, модули менеджмента файлов и процессов.
Переход вредоноса в режим ожидания получения указаний от командного сервера.
Инициализация настроек и связь с C&C-сервером, первичная расшифровка всех функций
Точка входа в приложение нас встречает весьма неприветливо. Как видите, большинство функций просто-напросто обфусцированы. Отследив несколько функций, я установил, что мы имеем дело с обфускатором .NET. KoiVM. Является ли это проблемой? Только в случае, если злоумышленники использовали пользовательский алгоритм шифрования. Если он был стандартный, то нам поможет утилита под названием OLDROD.
KoiVM — это виртуальная машина (VM) для обфускации и защиты программного кода, разработанная специально для языка программирования .NET. KoiVM используется для усложнения процесса обратной разработки и анализа программ, защиты от нежелательного доступа к исходному коду и уменьшения риска кражи интеллектуальной собственности.
И как оказалось, здесь используется как раз-таки кастомный тип шифрования, поэтому я потратил достаточно большое количество времени на ответную кастомизацию скрипта расшифровки. Описывать этот процесс в статье не стану, так как он предельно скучный и длинный. Переходим к разбору модулей из первой части.
Сразу после запуска вредонос проверит наличие мьютекса c именем »AsyncMutex_6SI6OdPlk», чтобы избежать повторного выполнения себя же на уже зараженной машине.
Mutex — это средство синхронизации в компьютерных науках и программировании, используемое для координации доступа нескольких потоков (или процессов) к общим ресурсам. Но вредоносы используют его слегка иначе, если вредоносное приложение замечает мьютекс, в большинстве случаев оно тут же прекращает своё выполнение.
Так происходит и с этим образцом. Затем вредонос загружает конфигурацию для дальнейшей работы методов антианализа и соединения с командным сервером. Примечательно, что все указания присутствуют в самом коде.
Сами настройки хранятся в виде обычного Base64, это можно понять не только по их внешнему виду, но и при более детальном рассмотрении функции, отвечающей за их импорт:
Также из этого всего мы можем узнать адрес C&C-сервера и директорию, в которую будет перенесен вредонос, а именно %AppData%.
Далее происходит подключение к серверу управления с помощью функции ClientSocket. Справедливости ради стоит сказать, что эта часть трояна Async практически ничем не отличается от других.
Воспользовавшись любым дешифратором Base64, мы можем получить примерное содержимое конфигурации конкретно этого образца:
Порт для выполнения удаленного подключения: 8000.
Версия: 2.5.5.
Антианализ: Да.
Название мьютекса: AsyncMutex_6SI6OdPl
Командный сервер: [https://] rr5—[sn-4g5ednd7/layback? expire=1698274276&ei=hEc5ZfLtK-SSv_IP]
Директория установки вредоноса: %appdata%
Задействование всех возможных методов антианализа
И вот здесь создатели вредоноса действительно постарались. В попытках обезопасить своё детище они внедрили множество плюшек, затрудняющих анализ и обнаружение. Давайте разбираться в порядке от самого безобидного до того, что действительно мешает.
Сравнивание хэшей
Сразу после подключения к командному серверу вредонос начнет сравнивать хэши своей конфигурации и контрольную сумму приложения для того, чтобы определить их подлинность и обезопасить как себя, так и сам сервер, таким образом исключая возможности вмешательства извне. Забавно, что даже если будет найдено несоответствие, то ничего не произойдет, троян не прекратит свою работу.
Шифрование получаемых команд, отправляемых и получаемых файлов
После этого будет произведена установка клиентской части вредоноса в папку %appData%. И здесь уже начинаются действительно сложные вещи. Любая команда, которая будет передана вредоносу, проходит специальное шифрование с помощью вызова API Rfc2898DeriveBytes Class. Подробнее можете почитать вот здесь, а я объясню кратко. Этот вызов используется для создания ключей безопасности формата AES-256, конкретно в нашем случае они будут созданы в формате PBKDF2.
Ключ AES (Advanced Encryption Standard) — это секретная строка битов, которая используется для шифрования и дешифрования данных с использованием алгоритма AES. AES — это симметричный блочный алгоритм шифрования, который широко используется для обеспечения конфиденциальности данных. Ключ AES может быть длиной 128 бит, 192 бита или 256 бит в зависимости от уровня безопасности, который требуется для конкретной задачи.
В контексте AES-256 в режиме PBKDF2 используется алгоритм PBKDF2 для производства ключа, который затем используется для шифрования и дешифрования данных с использованием AES с ключом длиной 256 бит. Это помогает обеспечить дополнительный уровень безопасности особенно при использовании паролей или других секретных данных в качестве исходного материала для создания ключа для AES.
Реализация этого алгоритма в нашем образце выглядит следующим образом:
Мьютекс
Далее в качестве дополнительной меры безопасности будет создан мьютекс, а для чего он нужен, я уже писал выше.
Проверка наличия антивирусов, песочниц и отладчиков
В отличие от первой функции, эта действительно работает и при обнаружении чего-то, что может угрожать безопасности трояна, программа прекратит своё выполнение или попытается уничтожить неугодный ей процесс.
Для этого вредонос задействует класс RunAntianalis и функции содержащиеся в нем:
DetectManufacturer (отвечает за определение названия системы и её состояния и поиск соответствующих слов: VirtualBox, VMware, Cosmo и так далее).
DetectDebugger (отвечает за обнаружение отладчика).
DetectSunboxie (отвечает за обнаружение виртуальной среды выполнения).
IsSmallDisk (в случае, если дискового пространства меньше, чем 50 ГБ, то троян предположит, что это виртуальная машина).
IsXP (обнаружение Windows XP, не знаю, чем ему не угодила эта операционка, на своё время она была крутой).
DetectManufacturer
Здесь все относительно просто. С помощью вызова ManageObjectSearcher вредонос обратится к файлу Win32_ComputerSystem и начнет искать в нем вышеупомянутые слова и фразы. В коде это выглядит так:
DetectDebugger
Реализация происходит посредством поиска API CheckRemoteDebuggerPresent, о ней можете почитать вот здесь. Говоря простым языком, именно этот API задействуется при отладке процесса, а вредонос его ищет.
DetectSunboxie
В отличие от обычного поиска названий, имеющихся в конфигурации, теперь вредонос будет использовать сторонний .dll, который загрузит с помощью вызова GetModuleHandle.
Закрепление в системе
Абсолютно ничего необычного, вредонос создает свою копию в папке автозагрузки и доставляет соответствующий ключ в реестр по следующему пути:
Software\\Microsoft\\Windows\\CurrentVersion\\Run\12.exe
Выполнение обязательных модулей: кейлоггер, стиллер, дроппер, модули мониторинга, модули менеджмента файлов и процессов
К слову, только во время написания этой части я заметил, что вредонос на протяжении всего выполнения будет проверять, имеет ли его процесс права администратора, постоянно запуская CMD со следующими строчками:
/f /rl highest /tn
Большинство возможностей этого трояна выполнены с помощью дефолтных системных вызовов, например, функция дроппера и менеджмента файлами выполнена с помощью вызова GetModuleHandle.
Кейлоггер же и вовсе взят с GitHub, код практически идентичен тому, что представлен в инструменте LimeLogger, в котором для фиксации нажатий задействуются API GetKeyStat и GetKeyboardLayout.
А переход в вредоноса в режим ожидания не стоит особого внимания, происходит простое циклическое выполнение функции Thread.Sleep (1000) до момента получения команды от командного сервера.
Способы обнаружения вредоноса на вашем устройстве
Что хотелось бы заметить в первую очередь, так это огромную нагрузку на зараженную систему, и в случае с AsyncRat — это самый важный фактор, по которому можно обнаружить этот троян. Хотя это можно отнести к большинству бэкдоров, как и произвольное включение веб-камеры. Также в статье были представлены основные факторы компрометации вашей системы, но они далеко не универсальны, так как директории, которые использует этот вредонос широко распространены среди других вирусов.
Да, и не стоит забывать, что все представленные образцы имеют хороший процент обнаружения популярными антивирусными приложениями, поэтому беспокоиться об этом не стоит.
Выводы
Схема атаки, которая была представлена в этой статье — лишь верхушка айсберга. Честно говоря, поддельные сайты с помощью метода Punycode очень сложно обнаружить обычному пользователю, но все же возможно. Зачастую это будет едва заметное различие, как в случае с KeePass, отличалось лишь конечное доменное имя —Info. Но радует, что при копировании ссылки в адресной строке, будет скопирован как раз-таки PunyCode.
Поисковым системам на данный момент в полной мере доверять нельзя, поэтому при скачивании чего-то всегда проверяйте, действительно ли это оригинальный веб-сайт.
Касательно AsyncRAT добавить особо нечего. Это достаточно старый вредонос, который плотно закрепился в вирусной индустрии. Все известные образцы могут быть обнаружены и удалены современными антивирусами. А на этом у меня все, бывайте.
Автор статьи @DeathDay
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.