Статья является переводом. Оригинал вотСсылка скрыта от гостей
В этой части мы рассмотрим обфусцированный javascript-код, который активно используется в кампании нелегального контента, по крайней мере, с 2018 года, и весь процесс распространения, который также обфусцирован ненастоящими легальными файлами.
В качестве примера, я представлю очень краткий анализ известных вредоносных программ coinminer, нацеленных на серверы Redis.
Если вы пропустили первую часть, о подготовке и мониторинге Bluekeep, вы все еще можете прочитать её здесь.
В прошлую субботу состоялся турнир Missing Persons CTF от TraceLabs, наша команда из 3-х человек финишировала на 10-м месте. Это очень достойный результат, зная, что это был наш первый подобный CTF. Я очень рекомендую всем принять участие, это очень интересно.
Деобфускация и OSINT
Чтение и понимание кода является частью процесса сбора разведданных, и ни один курс OSINT не охватывает деобфускацию и анализ кода, поэтому мы рассмотрим в этой статье, и копнем немного глубже. С точки зрения Offensive OSINT, владение исходным кодом инструментов и понимать, как он работает и на что способен - бесценно. Blue Team также анализируют и перепроверяют вредоносный код, чтобы найти возможный ущерб и угрозу, стоящую за кампанией. Вот почему навыки анализа исходного кода и реверса необходимы для получения полного отчета разведки.
Обфускация - действие, делающее что-то непонятным, запутанным или неразборчивым.
Практически в каждом техническом расследовании вы столкнетесь с различными типами обфускации или шифрования кода, так авторы угрозы скрывают свой пейлоад или весь процесс заражения/распространения. Эти методы используются для затруднения работы исследователей, предотвращения перехвата и сокрытия от правоохранительных органов или антивирусных компаний. В мире вредоносного ПО шифрование, упаковка или обфускация широко используются для того, чтобы создать вредоносные файлы или пейлоады незаметными для различных антивирусных механизмамов.
Некоторые из методов обфускации легко обратимы и основаны на кодировании строк и замене переменных, однако, когда у вас есть сотни строк кода, в них легко потеряться.
Шутка про обфускацию
Malwarebytes привели интересный пример деобфускации сложного VB-скрипта:
Ссылка скрыта от гостей
Некоторые записи, или иными словами врайт-апы, хоть и могут показаться вам простыми и понятными, но автор потратил много времени на расшифровку и понимание кода. В следующей главе мы поговорим о сети дистрибуции нелегального контента и о том, как один из обфусцированных javascript участвовал в этой вредоносной деятельности.
Глубокое погружение в распространение нелегального контента по сети
Я знаю, что это не очень обсуждаемая тема, и немногие люди вообще сталкивались с этим, но в любом случае, я хочу поделиться своими выводами и одним методом, как этой сетью можно управлять. Чтобы понять корни этого расследования, нам нужно вернуться в прошлое, в сентябрю 2018 года и моему инструменту "Danger Zone".
Ссылка скрыта от гостей
С помощью одного действия (перечисленной в статье) я собрал адрес электронной почты и пару доменов. Достаточно было лишь найти больше информации, и войти в кроличью нору нелегальной сети. С тех пор я следил за некоторыми сайтами и людьми, большинство форумов уже не работают, но один метод распространения выжил, и я хочу описать, как он работает.
Обмен любыми незаконными материалами должен включать в себя:
- Анонимность
- Охватат
- Скрытность
- Продолжительность, насколько это возможно
- Временный
Вы можете спросить, почему последние два пункта являются взаимоисключающими. Это зависит от типа материала, если это Pastebin ссылка на фактические данные, и вы хотите поделиться ею с кем-то, то она должна быть временной и рассматриваться как частная беседа, а затем просто удалена. С другой стороны, если кто-то распространяет материал в больших масштабах, он должен позаботиться о сроке службы ссылок и обеспечить их надежность.
Вы можете прочитать отличную статью о расследовании одного из сайтов российского хостинга нелегального контента.
Ссылка на статью можно найти в
Ссылка скрыта от гостей
Итак, вернемся к нашей главной теме, начальный вектор - [УДАЛЕНО]. Эта кампания длится уже пару лет, и каждый день размещаются сотни новых ссылок. Это легко нагуглить, если вы знаете ключевые слова, используемые в сообщениях, dork или адреса электронной почты, связанные с самими сообщениями.
Все ссылки укорачиваются различными сервисами, такими как bit.ly, gg.gg, sflk.in, qps.ru и другими похожими, иногда широко известными людям. Стоит отметить, что эти сервисы позволяют пользователям получать оплату за клик, поэтому это также один из их доходов.
Это было размещено 23 марта 2019 года, и на сегодняшний день существует 4108 страниц. В год создается около 1100 страниц, что составляет 3 страницы в день, и каждая страница содержит 10 сообщений. Вы можете легко подсчитать, что 30 сообщений в день делятся с парой разных ссылок только на этой одной доске.
Ссылки перенаправляют вас на страницу Pastebins, а затем снова на bit.ly. Все сложнее и сложнее собирать и извлекать все ссылки, но очень легко найти свой путь среди этого и скачать материал финального этапа.
Ссылки на bit.ly перенаправляют к различным облачным провайдерам для предоставления доступа к первому этапу, т.е. к html файлу.
Что касается диапазонов, про которые вы можете спросить, то некоторые ссылки не были должным образом защищены, т.е. вы можете перехватить количество кликов, если добавите знак "+" в конце ссылки bit.ly. Как Вы помните, в день загружается в среднем 30 сообщений со среднем количеством ссылок: 3, то есть 90 ссылок в день. Некоторые из них, конечно, повторяются, но это всё ещё много, также за эти годы ссылки были удалены, что усложняет расследование.
Количество посещений измеряются тысячами в течение месяца, но это только три ссылки и около 90 размещенных ссылок в день. Довольно выгодно добавлять много перенаправлений и зарабатывать деньги на кликах и облачных сервисах, которые также платят за каждый файл, загруженный другими пользователями.
Перейдём к файлу, скачанному с dl4free.com (перенаправление с bit.ly).
Файл представляет собой zip-архив с паролем, которым поделились, разделен в одном из файлов. После распаковки у нас пока нет видео, а есть только один html-файл. Конечно, каждый умный исследователь не сразу откроет файл, а изучит его содержимое в текстовом редакторе. Я использую sublime text - в нем есть все необходимые функции, такие как разноцветный синтаксис, разделение экрана или замена строк.
alt + shift + 2 - делит окно Sublime на 2 части
ctrl + H - найти и заменить
HTML-файл весит 5Кб и содержит немного css, ссылку на javscript-код (sflk.in) (строка 8) и большое base64 изображение (отображается в правой части скриншота), которое показывается в виде спинера во время загрузки.
Скачан HTML-файл первого этапа
Sflk.in является еще одним сервисом сокращения url и в этом случае перенаправляет на pastebin.com/[УДАЛЕНО], где размещен реальный javascript-код. Именно здесь в игру вступает технический аспект деобфускации. На первый взгляд это выглядит довольно грязно, но именно такова была задумка автора, сделать вывод на первый взгляд трудным.
Запутанный код JavaScript (Цензура строк)
Первое, что я всегда делаю, это чищу код, т.е. ставлю enter, tab, просто делаю так, чтобы он выглядел красиво. Есть много онлайн-инструментов, которые могут сделать это за вас, но я хочу показать вам шаг за шагом, как выполняется этот процесс. После внесения изменений в код, рекомендуется заменить имена переменных удобочитаемыми именами. В скрипте мы видим большой массив "_0x764d", содержащий закодированные строки. Для большей наглядности мы переименовываем его в "main_array" или аналогичный, который говорит о том, какие данные он хранит. Вот так выглядит код после очистки и переименования переменных:
Первый этап деобфускации
Следующим шагом является декодирование строк и замена действительного значения массива вместо его ссылки. Строки закодированы в шестнадцатеричной кодировке, поэтому, что нам не нужны никакие специальные инструменты помимо python, он автоматически выведет ASCI код закодированного значения. Просто импортируйте "main_array" в python и выведите его обычным способом:
Python:
for i in main_array:
print main_array[i]
Возвращаемые строки:
Код:
innerHTML
head
createElement
script
src
link
rel
stylesheet
href
appendChild
Added!
DOMContentLoaded
html
body
<h1 class="animated infinite bounce container" id="Loading" style="font-size:3em;">Please wait for a while...</h1>
append
ready
log
reload
location
http://sflk.in/[REDACTED]
then
http://sflk.in//[REDACTED]
http://sflk.in//[REDACTED]
http://sflk.in//[REDACTED]
http://sflk.in//[REDACTED]
https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js
https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css
all
addEventListener
Кроме обычных вещей, таких как jquery, анимация css и функции, связанные с javascript, мы нашли 5 внешних ссылок на sflk.in, которые, вероятно, служат другим скриптам, но нам все равно нужно деобфусцировать остальную часть первого скрипта.
Я рекомендую, особенно для небольшого скрипта, заменить ссылки на строки вручную. Это даст представление и позволит познакомиться с кодом в различных форматах. Если кто-то хочет сделать это вручную, то он должен прочитать весь код как строку, написать regex для извлечения переменной "main_list", а также индекса, затем заменить его на нужное значение из расшифрованного массива строк.
После деобфускации
Мы остались не с таким и сложным кодом - сначала он создает документ и выводит сообщение "Пожалуйста, подождите немного...", пока не будут загружены остальные скрипты. Функция "addTag" по имени подразумевает добавление тегов в html на основе скрипта или ссылки (строка 4,7), этот метод позволяет незаметно распространять ссылки sflk.in, они обфусцируются, используются один раз и перенаправляются только на конкретную приватную вставку.
Копая глубже, мы должны исследовать другие внешние ссылки, которые, как оказалось, перенаправляются на другой код, размещенный на Pastebin. Этот код относится к переменным из строк 47-50 в основном коде javascript
Переменная Dataname_1
Переменная Dataname представляет собой длинный массив, состоящий из словарей с ключами "rname" и "fname". Второй ключ хранит заголовки разных книг (действительно книг), а "rname" - это закодированное в base64... "fname"? Нет, значение "rname" - это кодированное base64 реальное название видео, поэтому у книги "Ash Lo Novel" есть следующий кодированный base64 ключ "Baby J) 5 yo kleuterk***e 1 (and f**k a**l 1 shot).mp4 ". (много голландских ссылок) На более позднем этапе, значение "rname" расшифровывается и отображается в браузере, а "fname" используется ниже в качестве ссылки на ссылку из переменной.
В основном, это ссылки на последний этап, т.е. на видео. Ссылки притворяются книгами разных жанров, поэтому выглядит невинно, однако в конце можно увидеть расширение .rar, указывающее на истинный тип файла. Файлы защищены паролем, поэтому трудно доказать, что эти ссылки на самом деле вредоносны и принимают участие в нелегальном контенте.
Последнее время редактирования указывает на то, что кампания продолжается, и новые ссылки появляются еженедельно/ежемесячно. До сих пор его просматривали 163k человек с 15 августа 2018 года, что дает около 270 просмотров в день.
На данный момент мы определили 4 переменные в 4 разных внешних javascript-кодах - Video_1, Video_2, Dataname_1, Dataname_2, которые отвечают за сохранение ссылок на видео и показ настоящих названий видео для конечных пользователей.
Последний файл включает в себя достаточно много скриптов, связанных с отображением исходного кода, VUE и т.д., однако здесь также скрыт небольшой кусок кода, который создает ссылки и «показывает выход» для пользователей. После базовой деобфускации я смог увидеть следующий код, из последней ссылки в sflk.in, которая также размещена в Pastebin.
Мы нашли еще одну ссылку katfile.com, которая перенаправляет на регистрацию премиум-аккаунта для доступа к нелегальному контенту. Ссылка выглядит точно так же, как регистрация на katfile.com по умолчанию, но размещена по абсолютно другому адресу.
Последняя функция, создающая актуальные ссылки, называется "makeFnN" (строка 31), и туда передаются большие переменные "Video_1" и "Video_2", с актуальными ссылками на сервера katfile.com.
Последняя функция, создающая ссылки
Этот код также не сложно понять, сначала берется http-ссылка (из Видео), удаляются все url-строки (8-9 строка), после чего сравнивается с именами данных и в конце демонстрируется соответствующая расшифрованная base64 строка, относящаяся к предыдущему названию книги (12 строка).
Даже если вы думаете, что знаете, как это работает, вам все равно стоит перехватывать весь трафик. Я не смогу представить доказательства для расследования и могу вам дать лишь представление о внешних ссылках в случае, если вы что-то пропустили.
Содержимое HTML-файла, размещенного на облачном хранилище.
Нажав на любую ссылку, вы перенаправитесь на другую ссылку, связанную с книгой, как уже упоминалось ранее.
В данном случае "Гарри и его ведро, полное динозавров" - это серия детских книг, написанных и нарисованных Яном Уайброу и Эдрианом Рейнольдсом. Серия посвящена 5-летнему мальчику по имени Гарри, у которого есть ведро, полное динозавров. (Очевидно!) Но настоящий архив содержит нелегальный контент. Я не специалист и не слежу за этим активно, однако думаю, что некоторые видео могут прийти из старого архива Playpen.
И все, мы знаем, как это работает, как это пытаются скрыть и какие сервисы используют. Последнее – создать диаграмму методов, которая точно показывает шаги, сделанные пользователем, и которой можно поделиться с участниками, чтобы они знали тактические методы и приемы, используемые в атаке.
Это диаграмма, используемая в этой кампании, и мы можем четко видеть поток доставки.
Подводя итог, можно сказать, что она начинается со ссылок в разных вставных сервисах, которые перенаправляются на другую платформу, которая далее создает ссылку на html-файл, размещенный на облачном хранилище. Файл включает в себя ссылки sflk.in, которые используют Pastebin и обслуживают обфусцированный javascript код. С этого момента мы получили 5 различных внешних ссылок на sflk с переадресацией на Pastebin. Четыре из них содержат ссылки и одновременно обфусцированные заголовки фильмов, олицетворяющие легальный контент. В одном из скриптов существует функция MakeFnF, которая отвечает за объединение всего вместе для получения конечного нелегального контента.
Знание точного процесса и методов, используемых противником, дает невообразимое преимущество. В данном случае, 3 вещи приходят мне на ум, как можно злоупотреблять этим процессом.
- Перехват доходов - они зарабатывают деньги за счет кликов на сервисы сокращающие url и за скачивания с облачного хранилища. Кто-то может разместить свои ссылки и отправить пользователей, которые ищут такой контент, в цикл переадресации и в конце выдать другой контент.
- Отслеживание - Чтобы определить людей, которые распространяют и делятся этим контентом, кто-то может разместить небольшой скрипт внутри HTML-файла, на втором этапе, который будет отслеживать определённые действия, и разместить фальшивые ссылки.
- Полностью удалить - Я изучил пару доставленных HTML-файлов, и все они имели ссылки на один и тот же встроенный javascript код. Это означает, что поток доставки в одной точке централизовался. Отключение доступа к скриптам сделают всю операцию недоступной.
После моего доклада, Katfile удалил около 6000 видео нелегального контента, и Pastebin удалил все ссылки, что сделало всю двухгодичную дистрибьюторскую сеть полностью недоступной.
Все видео были удалены
Очередное исследование исходного кода, которое доставило мне столько удовольствия, почитать можно вот здесь.
Ссылка скрыта от гостей
OSINT и анализ исходного кода малваря
Каждый исследователь в области кибербезопасности - охотник за угрозами или аналитик разведки - имеет дело с исходным кодом неизвестного происхождения, поэтому во второй части этой части мы рассмотрим на высоком уровне вредоносную программу Redis, которая уже заразила более 3600 серверов по всему миру.
Как и в предыдущей статье о решении любой проблемы - подход "сверху вниз" работает лучше всего. Сначала собираем общую информацию о методах работы, внешних ссылках и т.д., а затем вдаемся в подробности, если это необходимо для анализа.
Базы данных Redis всегда были легкой добычейдля киберпреступников, и одна из кампаний включала в себя что-то похожее на червей.
Ссылка скрыта от гостей
В зараженной базе данных 4 субъекта угроз добавили 4 keyspaces.
Скрипт идентичен из обоих источников, вторые записи используются в качестве резервной копии на случай, если первая команда и сервер управления будут отключены. Он содержит следующие функции:
- kill_miner_proc
- kill_sus_proc
- downloads
- unlock_cron
- lock_cron
но сначала нужно проверить и выполнить основные действия.
Любой человек, знакомый с linux, не должен испытывать проблем с пониманием кода на высоком уровне. В основном, он выключает SE Linux, устанавливает пути, пользователей и атрибуты.
Также, он проверяет наличие строки "[a]liyun" в процессах (32 строка) и, если она существует, загружает другие скрипты, чтобы удалить все, что связано с Aliyun. Вы можете проверить код здесь
Ссылка скрыта от гостей
Первое упоминание об этом файле было около 5 лет назад.
Ссылка скрыта от гостей
Он просто удаляет все, что связано с aegis, но трудно найти что-нибудь об этом. Aliyun - это название облака, которое принадлежит китайской компании Alibaba, а в документации на их сайте упоминается агент Server Guard и процесс aegis, который находится в "/usr/local/aegis/ /etc/init.d/aegis". Поэтому, кажется разумным отключить любые продукты безопасности, которые работают на компьютере.
Ссылка скрыта от гостей
Если вы присмотритесь к ссылке "uninstall.sh", вы можете подумать, что если путь к "uninstall.sh" существует, то "install.sh" тоже должен быть указан. Конечно, так и есть. Вы можете проверить код на Pastebin
Ссылка скрыта от гостей
Это относится к следующим внешним ссылкам, однако ни одна из них сейчас не активена.
Bash:
AEGIS_UPDATE_SITE="http://aegis.alicdn.com/download"
AEGIS_UPDATE_SITE2="http://update.aegis.aliyun.com/download"
AEGIS_UPDATE_SITE3="http://update2.aegis.aliyun.com/download"
AEGIS_UPDATE_SITE4="http://update4.aegis.aliyun.com/download"
AEGIS_UPDATE_SITE5="http://update5.aegis.aliyun.com/download"
AEGIS_UPDATE_SITE6=http://update6.aegis.aliyun.com/download
Основные проверки заканчиваются закодированными ссылками к конфигурационным и исполняемым файлам, а также скриптам. Ссылки не содержат никаких файлов, однако остальная часть C2 активна. Я предполагаю, что существует некоторые дополнительные проверки на стороне сервера.
Kill_miner_proc, как следует из названия, приостанавливает любой майнер-процесс, который в настоящее время запущен на компьютере. По сути, это просто куча объединенных netstat, grep, ps и kill, команд для поиска любой релевантной строки. Также процесс проверяет, не был ли компьютер заражен ранее любым другим типом майнера.
netstat -anp | grep 185.71.65.238 | awk '{print $7}' | awk -F'[/]' '{print $1}' | xargs -I % kill -9 %
ps aux | grep -v grep | grep ':3333' | awk '{print $2}' | xargs -I % kill -9 %
Некоторые из строк были довольно интригующими, такие как адреса электронной почты, IP-адреса или команды в кодировке base64.
Функция kill_sus_proc приостанавливает все процессы, связанные с ранее загруженными файлами, т.е. sysguerd, updata.sh, sysupdata, networkervics.
downloads является функцией загрузки файлов, функция использует wget и curl
Lock_cron и unclock_cron устанавливают соответствующие разрешения etc/crontab и /var/spool/cron.
На следующем этапе, малварь придает устойчивости майнеру, добавляя новый ssh-ключ в авторизованные ключи
Он также имеет механизм самообновления, при каждом запуске сравнивает размер файла hardcoded (53 строка) с ранее загруженным конфигурационным файлом. Этот метод позволяет оператору предлагать использовать новую версию малваря, как только будет готова.
В конце он загружает и запускает другой скрипт is.sh из hxxp://178[.]157.91.26/ec8ce6ab/is.sh. Скрипт также содержит проверки на упомянутые ранее "adiyun" и имеет функцию "download" для удаленного извлечения файлов - Massscan и pnscan.
Но перед загрузкой, все зависимости и права доступа установлены.
Как вы видите, он не останавливается и не загружает другой скрипт
Ссылка скрыта от гостей
с того же IP-адреса (154 строка), но на момент написания статьи это был недоступно. Я пробовал разными способами и разные ссылки, что бы получить этот пейлоад, но по неизвестным мне причинам, я не смог, так что, к сожалению, все обрывается на этом моменте.Статьи Imperva датируются мартом 2018 года, но я надеюсь, что вы увидите некоторое сходство с этим примером. В статье также устанавливают множества зависимостей от компьютера жертвы, добавлению входа ssh ключа в авторизованные ключи, сбросу майнера и massscan на более позднем этапе. Похоже, что это может быть все та же кампания, но обновленная и, наверное, с новыми возможностями для дальнейшего распространения .
Подводя итог, можно сказать, что малварь обладает следующими возможностями:
- Загрузка из внешних источников
- Backdoor в виде ssh-ключей
- Настраиваемый
- Выпуск обновлений
- Самодостаточный
- Проверяет и может останавливать процессы
Как вы можете заметить, анализировать вредоносный код не так уж и тяжело, с точки зрения OSINT, используемый в реальной кампании по созданию малваря. Я взял простой пример текущей кампании только для того, чтобы представить свой способ быстрого знакомства с кодом, настоящие вредоносные программы, используемые государственными структурами, анализируются лучшими исследователями, и на это уходят недели и даже месяцы. Я представил анализ высокого уровня (и, к сожалению, не закончил его), но все уже знают о том что находится под капотом кода, а также о слабых и сильных сторонах самой вредоносной программы. Этого также достаточно, чтобы определить инверсию управления.
До этого анализа я понятия не имел о паре команд, процессах и их использовании, но я гуглил, читал руководства и многому научился. Я до сих пор не знаю многих подробностей в этом коде, но низкоуровневый анализ занимает очень много времени, и мне пришлось бы анализировать множество строк кода по пути.
init.sh
Ссылка скрыта от гостей
is.sh
Ссылка скрыта от гостей
В прошлом я анализировал многоступенчатую упаковку Betabot, этот анализ доступен ниже
Ссылка скрыта от гостей
Заключение
Я не могу представить каждый случай деобфускации, это просто невозможно, но могу дать несколько советов, как определить особенности кода из неизвестного источника. Реверсирование приложения и исходного кода просто необходимо в каждом техническом расследовании и должно быть в ассортименте всех аналитиков по безопасности. Кроме того, анализ исходного кода дает внутреннее представление о технике, тактике и методах противника и позволяет защитить ваши обьекты от подобных атак.