Анализируем трояны в популярных SSH-клиентах
Весной 2022 года северокорейская хакерская группировка Lazarus начала распространение троянизированных SSH клиентов с открытым исходным кодом для создания бэкдоров в сферах развлечения, обороны и медицины. Жертвами первой волны этой атаки стали инженеры и специалисты технической поддержки, работающие в IT-компаниях Великобритании, Индии, России и США.
Согласно отчету Microsoft, пострадало около 20 тысяч простых работяг.
Под заражение попали следующие популярные клиенты:
Putty (абсолютно все версии)
Kitty (telnet, ssh)
TightVNC (RDP Client)
Sumatra PDF Reader
Именно эти приложения использовались для атак с последующим развертыванием бэкдора Blindingcan с начала апреля 2022 года и до конца сентября. Если анализировать отчет Майкрософт, то основной метод распространения был основан на социальной инженерии. Злоумышленник представлялся потенциальным работодателем и переводил диалог в Whatsapp, где предлагал пройти анкетирование в одну из нескольких законных компаний, а после давал жертве якобы данные для подключения к удаленной машине.
Также существуют сведения об атаках, связанных конкретно с клиентом Putty. Распространение проходило через почтовый сервис. Жертва получала письмо с содержанием о вакансии в Amazon и ISO-файлом, в котором была зараженная версия программы и текстовый документ с данными для входа. В подобном векторе атак засветился дроппер DaveShell, речь о котором пойдет немного позже.
Что же, а теперь давайте возьмем зараженный файл и разберемся с чем же его едят. Проведем динамический и статистический анализы, выделим основные приметы и разберемся с тем, как не стать очередной жертвой злоумышленников.
Итак, у нас имеется тот самый amazon_assessment.iso. Так как начиная с Windows 10 двойной клик на файлы с расширением iso, img запускает немедленное монтирование образа как диска и делает содержимое очень легкодоступным для манипуляций, что знатно упрощает жизнь злоумышленникам. Именно из-за простоты этот способ получил невиданную популярность и стал полноценным вектором новых атак. Полезные нагрузки в содержимом таких файлов варьируются от обычных бэкдоров до вредоносов, способных перезаписать BIOS.
В «amazon_assessment.iso» находятся два файла: readme.txt и тот самый putty.exе.
Иногда для защиты своих данных достаточно иметь лишь какой-то простенький антивирус или же воспользоваться Вирустоталом. Сработает это лишь тогда, когда злоумышленник не шибко хитер, ведь если сигнатуры вредоносного файла нет в антивирусных базах, то и все антималвари — просто приложения, расходующие ресурс вашего устройства.
Поэтому лучше пользуйтесь проверенными приложениями и их официальными источниками. Сомнительные файлы, над которыми кто-то поколдовал, будут иметь наглядную разницу уже при поверхностном сравнении, что я, собственно, и покажу далее.
Вирус «под микроскопом»: начало анализа
Иметь запредельные интеллектуальные способности и сверхчеловеческие аналитические умения вовсе не обязательно. В случае если вы видите хоть какую-то разницу в следующих критериях — перед вашими глазами точно зловред:
Размер файла и контрольные суммы должны совпадать. Если официальный файл той же версии весит 500 КБ, то и тот самый сомнительный должен иметь такой же размер.
Подробная информация о файле отсутствует или не совпадает с оригиналом.
Цифровые подписи.
Приступим. Первым делом нужно просмотреть подробную информацию о файле, для этого не требуются никакие дополнительные приложения. Правая кнопка мыши — Подробно.
На первый взгляд, вся информация идентична, если сравнивать с оригинальным Putty. Но если перейти в раздел цифровых подписей, то увидим, что у вирусной версии она отсутствует. Это первый звоночек того, что файл был модифицирован кем-то. Но иногда злоумышленники могут проявить щепоточку смекалки и её подделать, инструментов для этого в сети пруд пруди, хотя ребята из Lazarus об этом явно не слышали.
Альтернативным методом проверки цифровой подписи является приложение DCertUnti. Эта утилита позволяет увидеть детальное описание и заметить малейшее различие между подписями, является бесплатной и общедоступной.
При просмотре оригинального образа, скачанного из официального ресурса, видим следующее:
Но если попытаемся посмотреть ту же информацию для исполняемого файла из .ISO. Наблюдаем это:
Цифровая подпись отсутствует, а это означает, что в приложение была внесена какая-то правка.
Второй шаг. От банального статистического анализа идем к более фундаментальному.
Инструментарий у нас будет достаточно прозаичный, состоящий из бесплатных приложений с открытым исходным кодом:
Detect it Easy (DIE) — незаменимая утилита для статистического анализа. Имеет просто огромный арсенал. Позволит нам опередить тип компилятора, язык, библиотеки и таблицы импорта/экспорта с последующим дизассемблированием.
PEStudio — небольшая портативная программа, которая предназначена для поиска артефактов в исполняемых файлах. Используется криминалистическими лабораториями и группами экстренного реагирования на чрезвычайные ситуации по всему миру.
PETools — самая эффективная и простая утилита для просмотра и сравнения секций.
Reko — худший и самый неудобный декомпилятор в мире, но работу свою делает.
Воспользуемся первым инструментом и проверим, что же не так с файлом из ISO, сравним его с оригинальным. Для удобства будем называть троянизированную версию «NePutty», а обычную — «Putty».
Рассмотрим базовую информацию о файле «NePutty »: размер 3 956 килобайт, архитектура I386 и упакован он с помощью обычного UPX«а (Это упаковщик для С++ такой. Собственно, если файл упакован таким образом, практически в 100% случаев будет означать, что кто-то посторонний приложил к коду руку. Ведь UPX очень прост в использовании и практически не требует никаких дополнительных познаний).
И в общей информации больше ничего интересного не сыскать.
Для наглядного примера Putty должен содержать следующую информацию: размер 1 076 килобайт, архитектура AMD64 и официальный компилятор Microsoft Visual C++.
Движемся дальше, отложим DIE в сторону, воспользуемся PEStudio, просмотрим сигнатурную таблицу NePutty, простыми словами — заголовки PE файла. Здесь происходит что-то мистическое, что явно дает нам возможность осознать внесение модификаций третьей стороной:
Значительная разница размеров секции .data и её энтропии, сверху Putty, снизу — NePutty. Также PEStudio отмечает, что в секции 105А050 присутствует исполняемая часть, предположительно сам дроппер или же его полезная нагрузка.
Дропперы — семейство вредоносных программ, предназначенных для несанкционированной и скрытой от пользователя установки на компьютер жертвы других вредоносных программ.
Воспользовавшись PETools, можно провести более глубокое сравнение:
На приложенном скрине четко видно, в чем заключается разница между оригиналом и вредоносной копией: размер файла, количество байт на последней странице, количество страниц и т. д.
Как отмечают зарубежные эксперты, процесс исполнения вредоносного кода не наступает сразу же после открытия инфицированного приложения. Каждая версия NePutty имеет свои характерные особенности, но самый частый вариант был связан с функцией connect_to_host. То есть жертва сперва должна была нажать клавишу «Подключиться», и только после этого происходило инфицирование. В случае нашей версии все происходит аналогично.
Минутка Reverse Engineering: о том, как вскрываются вирусные файлы
Попытаюсь говорить на максимально понятном и простом языке. Для того, чтобы определить, в какую именно функцию был внедрен вредоносный код с возможностью последующего его анализа, нам понадобится мощный инструмент для RE.
Reverse Engineering — это исследование уже готового образца, в нашем случае NePutty, на предмет наличия каких-либо недокументированных функций (вредоносных, если речь идет именно о потенциально опасном образце).
Лично я использую для такой работы инструмент с открытым исходным кодом — Ghidra. Раз речь идет о модификации официального файла, то метод сравнений будет и здесь самым оптимальным вариантом.
В Гидре как раз есть инструмент, который отображает различия. Поэтому немедля создаем проект, переносим туда два наших образца и запускаем сравнение.
Ни в одном разделе, кроме .data, различий нет. А раз мы уже знаем, что именно там находится полезная нагрузка, значит, просматривать остальные смысла особо нет.
Payload (полезная нагрузка) — в нашем случае является тем самым вредоносным кодом, который устанавливает вирус на компьютер жертвы.
Что же, давайте смотреть. Основные различия находятся на начале заголовка. Воспользовавшись дизассемблером, мы можем просмотреть исходный код.
Видите пустое место в центре? Это оригинальный Putty, а справа видим изобилие текста, которого быть там не должно.
Не особо вникаем в суть кода, но справа видим некий «param2», на который ссылается функция. Перейдем в Symbol Tree и задействуем поиск по этой функции, аналогичные действия проделаем и в окошке с анализом обычного Putty. В NePutty такое есть, а в оригинале — нет. Умозаключение одно — дело рук некоего злодея.
Таких ветвей там минимум сотня
На этом скрине мы можем лицезреть прекрасную картину того, как он пытался спрятать эти самые параметры. Кстати, нашел ещё в коде некую отсылку к автору вредоносного кода. Корейские иероглифы (на скрине ниже) переводятся как «Суп туалет сидеть». Естественно, это кривой перевод от Google, но если среди читателей найдутся знатоки корейского, то поправьте.
Так как же это в итоге работает? Вкратце, чтобы не затягивать. Допустим, мы нажали на «Connect», далее происходит перенаправление потока выполнения и срабатывает так именуемый «Param1», который запускает множественные обработки последующих, ведь каждый из них ссылается на другой. И так происходит, пока не дойдет до функции «FUN_1400c6340:1400c639f», которая копирует легальный виндосовский colorcpl.exe в папку ProgramFiles, куда переносится уже зараженный colorui.dll. Затем происходит перехват выполнения поиска библиотеки таким образом:
C:\Windows\System32\cmd.exe /c start /b C:\ProgramData\PackageColor\colorcpl.exe 0CE1241A44557AA438F27BC6D4ACA246
Далее происходит создание задания в Планировщике Windows на ежедневный запуск colorcpl.exe.
Что там по .dll? Анализируем основную вирусную составляющую плана
Итак, библиотека была получена путем запуска вредоносного NePutty на виртуальной машине. О динамическом анализе поговорим немного позже, тогда и разберем характерные черты вредоноса, что уже попал на компьютер.
Как определить, что на вашем устройстве валяется именно инфицированный .dll?
Легко. Конкретно этот не имеет никакой информации о себе, а тем более цифровых подписей. Просмотр информации о файле — основной способ, если вам не хочется лезть в декомпиляцию, где не всегда все ясно. Так же можно воспользоваться Вирустоталом или аналогами, кстати, на нем выглядит это так:
Для вскрытия этого файла нам уже понадобится не очень удачный декомпилятор Reko. Закидываем туда файлик и получаем вывод в виде составляющих библиотеки.
Очень прозаично, но в коде находится полезная нагрузка от дроппера DaveShell (sDRI), который является общедоступным.
В принципе, это инструмент пятилетней давности, который способен преобразовывать любой .DLL, вставляя в него Shell Code. Является ли это открытием? Нет.
Более интересным является то, что этот дроппер после загружает бэкдор BLINDINGCAN, который имеет обширный функционал — от удаленного управления устройством до передачи файлов.
Признаю, что мне не хватит навыков для написания полного разбора этого бэкдора, поэтому оставлю ссылку на англоязычную статью, где все уже подробно расписано.
Динамический анализ: как ведет себя вредонос, развернувшись на вашей машине
Представляю новый сетап утилит (все они есть в открытом доступе), которые будем использовать:
ProcessHacker — простенько и со вкусом, понаблюдаем за тем, как вирус взаимодействует с другими .dll и системой.
TCPView — утилита, которая прослеживает исходящие TCP соединения.
Regshot — очень простое приложение с открытым исходным кодом, которое позволит просмотреть изменения в реестре после запуска вредоноса.
Сразу после попытки подключения к удаленному рабочему столу в процессах начинает маячить colorui.exe, который, используя порт 443, устанавливает соединение с машиной злоумышленника. Подробную информацию об этом мы можем лицезреть в утилите TCPView:
colorcpl.exe,1072, TCP, Established,50.192.28.29,443
IP-адрес нам ничего не дает, локализован он во Флориде, а, значит, это или адрес VPN-а, или выделенный сервер. Но к нему вернемся чуточку позже.
Изменения в реестре колоссальны:
Вредонос добавляет себя в реестр практически в 400 путей, и это действительно впечатляет, ведь из каждого з них он сможет восстановить свою работоспособность.
Используя ProcessHacker, мы можем перейти к расположению вредоносного файла.
Кстати, если процесс закрыть, то заново он не откроется вплоть до момента повторного запуска. Поэтому теперь можно со спокойной душой удалить тот самый зараженный colori.exe. Эксперимента ради перезапускаем нашу виртуальную машину и наблюдаем в процессах тот самый удаленный вирусный файл, который опять установил соединение с тем самым сервером.
Как же с этим бороться, если вы обнаружили у себя на устройстве активность именно этого вредоноса?
Простенько, достаточно воспользоваться каким-либо антивирусом и бэкапом реестра, лично я советую вам Malwarebytes. Вручную удалять и исправлять все — это долго, муторно и не факт, что все получится.
Kitty SSH: анализ, разбор и сравнения с Putty
Опишу лишь в общих чертах. Инфицированный NeKitty не имеет никаких функциональных различий с оригинальной версией: это все такой же работающий клиент, он все так же выглядит, но лишь на первый взгляд. Распространялся он аналогичным способом.
Основной метод распространения был основан на социальной инженерии. Диалог переводился в Whatsapp, где злоумышленник убеждал жертву подключиться к его виртуальной машине.
Рассмотрим базовую информацию об имеющемся вредоносе:
Размер: 2 300 килобайт.
Архитектура: I386.
И упакован он с помощью того же обычного UPX«а.
И для наглядного сравнения смотрим на официальный клиент Kitty:
Размер: 730 килобайт.
Архитектура: x64.
Официальный компилятор от Microsoft Visual 2022.
По традиции заглянем в цифровые подписи, и тут-то вся соль, ведь в отличие от NePutty в NeKitty она есть, правда, абсолютно не похожа на цифровую подпись оригинала, что сразу для пользователя должно выступать в качестве красного флажка.
Теперь давайте посмотрим таблицу заглавий PE файла, дабы узнать, в какой именно раздел был помещен зловредный код.
Мне немного непонятна логика злоумышленников, они внедряют слишком огромный код, и разницу можно заметить даже, не запуская никакой анализ и не будучи гуру в вирусной теме. Не эффективнее ли было написать что-то попроще, что давало бы практически те же возможности… И это не было бы так очевидно.
В таблице заглавий все аналогично NePutty, такой же громадный код был помещен в том же разделе.
Вскрытие с помощью Гидры показало аналогичный результат: множество фейковых параметров и функций, ведущих к основной, которая спрятана где-то далеко-далеко. Но в итоге выполнение вирусных функций основано на вызове функции connect_to_host, как и в случае с NePutty:
После нажатия на «Connect», происходит перенаправление потока выполнения и срабатывает так именуемый «Param1», запускающий множественные обработки. И так происходит, пока не дойдет до функции «FUN_1400c6340:1400c639f», которая копирует легальный виндосовский colorcpl.exe в папку ProgramFiles, куда переносится уже зараженный colorui.dll. Затем происходит перехват выполнения поиска библиотеки таким образом:
C:\Windows\System32\cmd.exe /c start /b C:\ProgramData\PackageColor\colorcpl.exe 0CE1241A44557AA438F27BC6D4ACA246
Ловля на живца: оставляем приманку для Корейских Хакеров
Мы владеем информацией, которая подтверждает, что все вот эти действия, обманки и попытки быть умными ведут к банальному установлению Reverse Shell«a, то есть обратного подключения через консоль или терминал.
И вот мне стало интересно, что же злоумышленник будет делать, когда-таки получит эту оболочку? Может, он начнет создание какого-то ботнета или загрузит что-то еще? Давайте смотреть.
Так как соединение устанавливается, есть у меня предположение, что вредонос до сих пор активен и вредитель сидит где-то в запотевших очках и проводит какие-то манипуляции.
Для создания образа активной системы я установил на виртуальную машину несколько популярных приложений: Google Chrome, в котором выполнил вход в актуальные сервисы, Steam и самый сок — Amazon EC2.
Запускаем вредонос на нашей машине и терпеливо ожидаем. И это было чертовски долго, ничего не происходило на протяжении двух суток, но потом…
Мне на почту приходит вот это:
Попытка восстановления доступа к моему аккаунту в Steam, и тут меня просто дрожь пробирает. Неужели все это было написано лишь для того, чтобы своровать аккаунт с играми?
Через несколько минут злоумышленник уже играл в CSGO, наслаждаясь инвентарем аккаунта с биржи.
Самый сок в том, что этот парень без упреков совести спалил свой реальный айпи адрес и как ни в чем не бывало продолжил играть.
Я решил просканировать это устройство и обнаружил там целую тучу открытых портов, но, наверное, для Хабра такая тематика не подойдет, скажу лишь, что мне удалось его разоблачить и преподать урок.
Выводы
Сегодня нам удалось разобраться с устройством вирусов, распространяемых северокорейской группировкой Lazarus, и определить основные метки для обнаружения, ведь девиз этой статьи «Истина познается в сравнении».
Если у вас имеются подозрения касательно какого-то файла, то лучше просто проведите поверхностное сравнение с оригиналом по следующим критериям:
Сравните размер, контрольную сумму.
Проверьте цифровые подписи.
Воспользуйтесь VirusTotal.
Лучшим способом защиты все-таки остается антивирусное ПО, мой фаворит в этом плане — MalwareBytes: актуальные базы, малая нагрузка на систему и превосходная защита.
Ещё одним советом будет использование точек восстановления системы и реестра, так как некоторые изменения в реестре, которые делают зловреды вручную исправить невозможно.
И самое пугающее в том, что они могли создать лишь плохой пример для подражания. В скором времени я рассчитываю увидеть появление троянизированных версий клиентов по всему интернету. Поэтому будьте бдительны.
А с вами был какой-то парнишка под ником DeathDay, северокорейская группировка Lazarus (обычные воры игровых аккаунтов) и анализ их творений — NePutty & NeKitty. Свидимся.
Автор статьи @DeathDay
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.