# Кейлоггер с сюрпризом: анализ клавиатурного шпиона и деанон его разработчика **habr.com/ru/company/group-ib/blog/477198/** EditorGIB В последние годы мобильные трояны активно вытесняют трояны для персональных компьютеров, поэтому появление новых вредоносных программ под старые добрые «тачки» и их активное использование киберпреступниками, хотя и неприятное, но все ----- таки событие. Недавно центр круглосуточного реагирования на инциденты информационной безопасности CERT Group-IB зафиксировал необычную фишинговую рассылку, за которой скрывалась новая вредоносная программа для ПК, сочетающая в себе функции Keylogger и PasswordStealer. Внимание аналитиков привлекло то, каким образом шпионская программа попадала на машину пользователя — с помощью популярного голосового мессенджера. Илья Померанцев, специалист по анализу вредоносного кода CERT Group-IB рассказал, как работает вредоносная программа, чем она опасна, и даже нашел ее создателя — в далеком Ираке. Итак, пойдем по порядку. Под видом вложения в таком вот письме содержалась картинка, при клике на которую пользователь попадал на сайт cdn.discordapp.com, и оттуда загружался вредоносный файл. Использование Discord, бесплатного голосового и текстового мессенджера, достаточно нестандартно. Обычно для этих целей используются другие мессенджеры или социальные сети. ----- В процессе более детального анализа было установлено семейство ВПО. Им оказался новичок на рынке вредоносных программ — 404 Keylogger. Первое объявление о продаже кейлоггера было размещено на hackforums пользователем под ником «404 Coder» 8 августа. Домен магазина был зарегистрирован совсем недавно — 7 сентября 2019 года. Как уверяют разработчики на сайте 404projects[.]xyz, 404 — это инструмент, созданный, чтобы помочь компаниям узнавать о действиях своих клиентов (с их разрешения) или он нужен тем, кто желает защитить свой бинарный файл от реверсинжиниринга. Забегая вперед, скажем, что с последней задачей 404 точно не справляется. ----- Мы решили разреверсить один из файлов и проверить, что из себя представляет «BEST SMART KEYLOGGER». ## Экосистема ВПО ### Загрузчик 1 (AtillaCrypter) Исходный файл защищен при помощи EaxObfuscator и осуществляет двухэтапную загрузку AtProtect из секции ресурсов. В ходе анализа других сэмплов, найденных на VirusTotal, стало понятно, что эта стадия не предусматривалась самим разработчиком, а была добавлена его клиентом. В дальнейшем было установлено, что этим загрузчиком является AtillaCrypter. ### Загрузчик 2 (AtProtect) По факту этот загрузчик является неотъемлемой частью ВПО и, по замыслу разработчика, должен брать на себя функционал по противодействию анализу. ----- Однако на практике механизмы защиты крайне примитивны, и наши системы успешно детектят это ВПО. Загрузка основного модуля осуществляется при помощи Franchy ShellCode различных версий. Однако мы не исключаем, что могли использоваться и другие варианты, например, RunPE. ## Конфигурационный файл ----- ## Закрепление в системе Закрепление в системе обеспечивается загрузчиком AtProtect, если установлен соответствующий флаг. Файл копируется по пути %AppData%\\GFqaak\\Zpzwm.exe. Создается файл %AppData%\\GFqaak\\WinDriv.url, запускающий Zpzwm.exe. ----- В ветке HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run создается ключ на запуск WinDriv.url. ## Взаимодействие с C&C ### Загрузчик AtProtect При наличии соответствующего флага ВПО может запустить скрытый процесс iexplorer и перейти по указанной ссылке, чтобы уведомить сервер об успешном заражении. ### DataStealer Вне зависимости от используемого метода сетевое взаимодействие начинается с получения внешнего IP жертвы с помощью ресурса [http]://checkip[.]dyndns[.]org/. **User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR1.0.3705;)** Одинакова и общая структура сообщения. Присутствует заголовок **|------- 404 Keylogger — {Type} -------|, где {type} соответствует типу передаваемой** информации. Далее следует информация о системе: _______ + VICTIM INFO + _______ ----- IP: {Внешний IP} Owner Name: {Имя компьютера} OS Name: {Название ОС} OS Version: {Версия ОС} OS PlatForm: {Платформа} RAM Size: {Размер ОЗУ} ______________________________ И, наконец, — передаваемые данные. ### SMTP Тема письма имеет следующий вид: 404 K | {Тип сообщения} | Client Name: {Имя **пользователя}.** Интересно, что для доставки писем клиенту 404 Keylogger используется SMTP-сервер разработчиков. Это позволило выявить некоторых клиентов, а также почту одного из разработчиков. ### FTP При использовании этого метода собираемая информация сохраняется в файл и сразу же оттуда читается. Логика этого действия не совсем понятна, однако это создает дополнительный артефакт для написания поведенческих правил. **%HOMEDRIVE%%HOMEPATH%\\Documents\\A{Произвольное число}.txt** ----- ### Pastebin На момент анализа этот метод применяется только для передачи украденных паролей. Причем он используется не как альтернатива первым двум, а параллельно. Условием является значение константы, равное «Vavaa». Предположительно, это имя клиента. Взаимодействие происходит по https-протоколу через API pastebin. Значение **api_paste_private равно PASTE_UNLISTED, что запрещает поиск таких страниц в** **pastebin.** ## Алгоритмы шифрования ### Извлечение файла из ресурсов Полезная нагрузка хранится в ресурсах загрузчика AtProtect в виде Bitmap-картинок. Извлечение осуществляется в несколько стадий: ----- Из картинки извлекается массив байтов. Каждый пиксель трактуется как последовательность из 3 байтов в порядке BGR. После извлечения первые 4 байта массива хранят длину сообщения, последующие — само сообщение. Вычисляется ключ. Для этого высчитывается MD5 от значения «ZpzwmjMJyfTNiRalKVrcSkxCN», указанного в качестве пароля. Полученный хеш записывается дважды. Выполняется расшифровка алгоритмом AES в режиме ECB. ## Вредоносный функционал ### Downloader Реализуется в загрузчике AtProtect. Обращением по [activelink-repalce] запрашивается статус сервера о готовности отдать файл. Сервер должен вернуть “ON”. По ссылке [downloadlink-replace] скачивается полезная нагрузка. С помощью FranchyShellcode осуществляется инжект полезной нагрузки в процесс [inj-replace]. В ходе анализа домена 404projects[.]xyz на VirusTotal были выявлены ----- дополнительные экземпляры 404 Keylogger, а также несколько видов загрузчиков. Условно они делятся на два типа: 1. Загрузка осуществляется с ресурса 404projects[.]xyz. Данные закодированы Base64 и зашифрованы AES. 2. Этот вариант состоит из нескольких этапов и, вероятнее всего, используется в связке с загрузчиком AtProtect. ----- На первой стадии данные загружаются с pastebin и декодируются при помощи функции HexToByte. На второй стадии источником загрузки служит сам 404projects[.]xyz. При этом функции декомпрессии и декодирования аналогичны найденным в DataStealer. Вероятно, изначально планировалось реализовать функционал загрузчика в основном модуле. На этом этапе полезная нагрузка уже находится в ресурс-манифесте в сжатом виде. Аналогичные функции извлечения также были найдены в основном модуле. Среди проанализированных файлов были найдены загрузчики njRat, SpyGate и других RAT. ### Keylogger Период отправки лога: 30 минут. ----- Поддерживаются все символы. Спецсимволы экранируются. Есть обработка клавиш BackSpace и Delete. Учитывается регистр. ### ClipboardLogger Период отправки лога: 30 минут. Период опроса буфера: 0,1 секунды. Реализовано экранирование ссылок. ### ScreenLogger Период отправки лога: 60 минут. Скриншоты сохраняются в **%HOMEDRIVE%%HOMEPATH%\\Documents\\404k\\404pic.png.** После отправки папка 404k удаляется. ### PasswordStealer **Браузеры** **Почтовые клиенты** **FTP-клиенты** Chrome Outlook FileZilla Firefox Thunderbird SeaMonkey Foxmail IceDragon PaleMoon Cyberfox Chrome BraveBrowser QQBrowser ----- IridiumBrowser XvastBrowser Chedot 360Browser ComodoDragon 360Chrome SuperBird CentBrowser GhostBrowser IronBrowser Chromium Vivaldi SlimjetBrowser Orbitum CocCoc Torch UCBrowser EpicBrowser BliskBrowser Opera ----- ## Противодействие динамическому анализу Проверка нахождения процесса под анализом Осуществляется с помощью поиска процессов taskmgr, ProcessHacker, **procexp64, procexp, procmon. Если найден хотя бы один, ВПО завершает** работу. Проверка нахождения в виртуальной среде Осуществляется с помощью поиска процессов vmtoolsd, VGAuthService, **vmacthlp, VBoxService, VBoxTray. Если найден хотя бы один, ВПО завершает** работу. Засыпание на 5 секунд Демонстрация диалоговых окон различных типов Может быть использовано для обхода некоторых песочниц. ----- Обход UAC Выполняется через редактирование ключа реестра EnableLUA в настройках групповой политики. Применение атрибута «Скрытный» для текущего файла. Возможность выполнить удаление текущего файла. ## Неактивные возможности В ходе анализа загрузчика и основного модуля были найдены функции, отвечающие за дополнительный функционал, однако они нигде не используются. Вероятно, это связано с тем, что ВПО все еще в разработке, и вскоре функциональность будет расширена. ### Загрузчик AtProtect Была найдена функция, отвечающая за подгрузку и инжект в процесс msiexec.exe произвольного модуля. ### DataStealer ----- Закрепление в системе Функции декомпрессии и дешифровки Вероятно, скоро будет реализовано шифрование данных при сетевом взаимодействии. Завершение процессов антивирусов zlclient Dvp95_0 Pavsched avgserv9 egui Ecengine Pavw avgserv9schedapp bdagent Esafe PCCIOMON avgemc npfmsg Espwatch PCCMAIN ashwebsv ----- olydbg F-Agnt95 Pccwin98 ashdisp anubis Findviru Pcfwallicon ashmaisv wireshark Fprot Persfw ashserv avastui F-Prot POP3TRAP aswUpdSv _Avp32 F-Prot95 PVIEW95 symwsc vsmon Fp-Win Rav7 norton mbam Frw Rav7win Norton Auto-Protect keyscrambler F-Stopw Rescue norton_av _Avpcc Iamapp Safeweb nortonav _Avpm Iamserv Scan32 ccsetmgr Ackwin32 Ibmasn Scan95 ccevtmgr Outpost Ibmavsp Scanpm avadmin Anti-Trojan Icload95 Scrscan avcenter ANTIVIR Icloadnt Serv95 avgnt Apvxdwin Icmon Smc avguard ATRACK Icsupp95 SMCSERVICE avnotify Autodown Icsuppnt Snort avscan Avconsol Iface Sphinx guardgui Ave32 Iomon98 Sweep95 nod32krn Avgctrl Jedi SYMPROXYSVC nod32kui Avkserv Lockdown2000 Tbscan clamscan Avnt Lookout Tca clamTray Avp Luall Tds2-98 clamWin Avp32 MCAFEE Tds2-Nt freshclam Avpcc Moolive TermiNET oladdin Avpdos32 Mpftray Vet95 sigtool ----- Avpm N32scanw Vettray w9xpopen Avptc32 NAVAPSVC Vscan40 Wclose Avpupd NAVAPW32 Vsecomr cmgrdian Avsched32 NAVLU32 Vshwin32 alogserv AVSYNMGR Navnt Vsstat mcshield Avwin95 NAVRUNR Webscanx vshwin32 Avwupd32 Navw32 WEBTRAP avconsol Blackd Navwnt Wfindv32 vsstat Blackice NeoWatch Zonealarm avsynmgr Cfiadmin NISSERV LOCKDOWN2000 avcmd Cfiaudit Nisum RESCUE32 avconfig Cfinet Nmain LUCOMSERVER licmgr Cfinet32 Normist avgcc sched Claw95 NORTON avgcc preupd Claw95cf Nupgrade avgamsvr MsMpEng Cleaner Nvc95 avgupsvc MSASCui Cleaner3 Outpost avgw Avira.Systray Defwatch Padmin avgcc32 Dvp95 Pavcl avgserv Самоуничтожение ----- Загрузка данных из указанного ресурс-манифеста Копирование файла по пути %Temp%\\tmpG\\[Текущая дата и время в **миллисекундах].tmp** Интересно, что идентичная функция присутствует в ВПО AgentTesla. Функционал червя ВПО получает список съемных носителей. В корне файловой системы носителя создается копия ВПО с именем Sys.exe. Автозапуск реализован при помощи файла autorun.inf. ----- ## Профиль злоумышленника В ходе анализа командного центра удалось установить почту и ник разработчика — Razer, он же Brwa, Brwa65, HiDDen PerSOn, 404 Coder. Далее было найдено любопытное видео на YouTube, где демонстрируется работа с билдером. ----- ----- Это позволило найти оригинальный канал разработчика. ----- Стало ясно, что опыт в написании крипторов у него имеется. Там же есть ссылки на страницы в социальных сетях, а также настоящее имя автора. Им оказался житель Ирака. Вот так, предположительно, выглядит разработчик 404 Keylogger. Фото из его личного профиля в Facebook. ----- ----- CERT Group-IB оповестил о новой угрозе — 404 Keylogger — круглосуточный центр мониторинга и реагирования на киберугрозы (SOC) в Бахрейне. -----