Боевой OSINT s01e02 - Деобфускация & анализ исходников + разоблачение крупной компании по распространению ЦП

Боевой OSINT s01e02 - Деобфускация & анализ исходников + разоблачение крупной компании по распространению ЦП

Moody

В этом эпизоде мы проследим процесс распространения детской порнографии при помощи обфусцированного Javascript-файла, который активно использовался, как минимум, с 2018 года, притворяясь легальным скриптом.

Вдобавок к этому, я проведу небольшой экскурс в анализ известного вредоноса, направленного на сервера, использующие известную NoSQL СУБД Redis.

Если вы еще не читали первую статью из цикла боевого осинта о мониторинге уязвимых к Bluekeep машин, то не медлите - обязательно прочтите - эта информация когда - нибудь вам, как специалисту OSINT, очень пригодится.

Небольшое отступление

В минувшую субботу состоялся турнир Missing Persons CTF от TraceLabs, наша команда из 3 человек заняла 10 место. Очень достойный результат, учитывая, что это был наш первый опыт в подобном роде CTF. Советую всем принять участие - очень весело!

Мы были очень рады тому, что наше глобальное сообщество собралось на 6 часов в #MissingCTF, и использовало всю мощь #OSINTForGood для генерации важных решений! Команда TL сейчас работает над созданием ценных разведывательных отчетов для правоохранительных органов, используя ваши #OSINT находки!
— Trace Labs (@TraceLabs) 12 апреля 2020 г.

Как связана разведка и реверс

Чтение и понимание исходного кода является неотъемлемой частью процесса сбора информации. К сожалению, ни один OSINT курс не включает в себя сведения о деобфускации и анализе кода, поэтому мы сломаем стереотип и углубимся в эту тему. Иметь исходный код инструментов противника и знать, как он работает, и на что способен - по-настоящему, бесценно. Blue Team реверсят вредоносный код, чтобы суметь прочесть его, сообщить о возможном ущербе и найти исполнителя за периметром кампании. Вот почему для предоставления полного аналитического отчета необходимы навыки отладки и анализа исходного кода.

Обфускация (сбивание с толку, замутнение) - действия, направленные на затруднение анализа исходного кода путем его запутывания

Практически в каждом техническом расследовании вы сталкиваетесь с различными типами обфускации или шифрованием кода, именно так возможные угрозы скрывают свою полезную нагрузку и весь процесс доставки и заражения. Эти методы используются, чтобы замедлить работу исследователей, укрывшись от анализа правоохранительными органами или антивирусными компаниями. В дикой природе, как правило, шифрование, упаковка или обфускация часто свидетельствуют о том, что перед вами, с высокой долей вероятности, лежит вредоносный файл, использующий названные техники как защиту от статического анализа.

Некоторые из методов обфускации основаны на кодировании строк и небольшими манипуляциями с переменными - они легко обратимы, однако, когда у вас на руках тысячи строк кода, легко заблудиться.

Красная заметка с номером 300: переименование Mimikatz в Mimidogz поможет обойти какой - нибудь абстрактный антивирус со случайным название 360 Total Security. :)
- Винсент Иу (@vysecurity) 23 февраля 2018 г.

Malwarebytes в далеком 2016 году опубликовала отличный пример с деобфускацией сложного скрипта, написанного на Visual Basic.

Подобные исследования с бодрым повествованием и указанием всех аспектов от автора, на первый взгляд, могут оказаться довольно простыми, - однако это заблуждение - зачастую, люди тратят достаточно много времени для того, чтобы деобфусцировать и понять исходный код. В задачах по разведке, получив вредонос, считайте его своим пациентом - прооперировав его, вы сделаете интернет более здоровым и получите ценный опыт (вместе с искомой информацией). Сейчас я расскажу вам об одном скрипте, который использовался для распостранения детской порнографии.

Глубокое погружение в мир с лолями

Я знаю, что эту деликатную тему, как правило, предпочитают обходить стороной и зачастую молчать о ней, но в любом случае, я поделюсь с вами наблюдениями на тему того, как умело можно управлять сетью распостранения детской порнографии. Чтобы понять "откуда растут ноги", вернемся в сентябрь 2018 года и моему инструменту «Danger Zone».

Из одной пасты (которая была упомянута в той статье) я схоронил адрес электронной почты и пару доменов. Изучив их, я буквально "упал" в кроличью нору с детским порно. Я искал и вел слежку за сайтами-распостранителями ЦП, чтобы затем сообщить об их владельцах. Большинство форумов на данный момент уже закрыты, но один изощренный способ доставки все еще активно используется.

Обмен любыми незаконными материалами предполагает:

  • Анонимность
  • Охват большой аудитории
  • Скрытость от третьих лиц
  • Долгое нахождение на "плаву"
  • Непостоянность

Вы можете спросить, почему последние два пункта являются взаимоисключающими. Это зависит от типа материала: если это ссылка на пасту с Pastebin, которой вы хотите поделиться с небольшим кругом частных лиц, она рассматривается как сообщение в приватной беседе и должна быть удалена после прочтения. С другой стороны, если кто-то распространяет материал в больших масштабах, этот "кто-то" должен позаботиться о времени жизни ссылок и обеспечить их надежность.

Вы можете прочитать отличную статью о разоблачении одной сети распространения детской порнографии с корнями из России.

Итак, вернемся к нашей основной теме, начальный вектор - [УДАЛЕНО]. Эта кампания длится уже пару лет, и каждый день публикуются сотни новых ссылок. Их достаточно просто отыскать, если вы знаете ключевые слова, используемые в сообщениях, дорки или адреса электронной почты.

Все ссылки сокращаются различными сервисами сокращения URL-адресов, такими как bit.ly, gg.gg, sflk.in, qps.ru и их альтернативами. Стоит отметить, что некоторые из сервисов позволяют дополнительно монетизировать свою деятельность за счет рекламных переходов.

Итак, тред с 4108 страницами, с заинтересовавшим меня постом на 3000 странице от 23 марта 2019 года. Как можно посчитать, в среднем создается около 1100 страниц в год, что около 3 страниц в день, и каждая страница содержит 10 сообщений. 30 сообщений со ссылками в день только в этом треде.

Переходя по ссылке, нас редиректит на Pastebin, затем на bit.ly, после - снова на Pastebin, далее какие - то аналогичные сайты и так по кругу несколько раз. Собирать и извлекать все ссылки действительно сложно, поэтому я сразу показываю вам то, к чему я пришел в итоге:

Эта ссылка раскроет нам заключительную ссылку, теперь уже на облачное хранилище с единственным HTML-файлом.

Что касается переходов по этим ссылкам, то они открыты для каждого обывателя, - достаточно добавить знак «+» в конце ссылки bit.ly и вы получите страницу с количеством кликов. Как вы помните, на той борде публикуется по 30 сообщений, в среднем по 3 разных ссылки в каждом, - то есть 90 ссылок в день. Некоторые из них, конечно, повторяются, но это все равно очень много. Причем, некоторые из них уже недействительны - что усложняло расследование.

Охват указан в тысячах кликов/месяц, помните, что это все 3 ссылки из тех 90/день. Как вы понимаете, заработок на кликах и скачиваниях с тех файлообменников и сокращателей, учитывая такую конверсию, действительно очень высок.

Перейдем к файлу, загруженному с dl4free.com (редирект с bit.ly).

Этот файл представляет собой zip-архив с паролем, который был найден в одной из паст. После его распаковки, вместо ожидаемого видео, мы получаем лишь один HTML-файл. Конечно, умный исследователь не сразу откроет его, а сначала изучит содержимое в текстовом редакторе. Я использую Sublime Text - в нем есть все необходимые функции для работы, вроде подсветки синтаксиса, разделения экрана или замены строк.

Alt + Shift + 2 - разбить рабочую область на две части
Ctrl + H - найти и заменить текст

HTML-файл весит 5 КБ и содержит немного CSS, ссылку на подключаемый javscript-код (sflk.in) (8-я строка) и большое изображение, закодированное в base64 (посмотрите на правую часть скриншота - это оно).

Sflk.in - это еще один сервис сокращения URL-адресов, который, в данном случае, вновь редиректит нас на pastebin.com/[REDACTED], где размещается JavaScript-код. Настало время деобфускации только что полученного кода. На первый взгляд, он выглядит очень запутанным, кажется, что автор очень постарался затруднить наш анализ.

Первое, что я всегда делаю, - это форматирую код, делая отступы и удаляя лишние проблемы, - чтобы он просто выглядел красиво. Есть много онлайн-инструментов, которые могут сделать это для вас, но я хочу показать вам как этот процесс выполняется шаг за шагом. После того, мы внесли первичные изменения в код, рекомендуется заменить имена переменных на более читабельные. В скрипте мы видим большой массив «_0x764d», содержащий закодированные строки. Чтобы сделать его более понятным, мы переименуем его в более говорящее название, к примеру «main_array» или аналогичное, прочитав которое, будет понятно, что он хранит какие - то важные данные. Так выглядит код после чистки от мусора и переименования переменных.

Следующим шагом является декодирование и вставка реальных строк на те места, где используются ссылки на значения массива. Строки закодированы в шестнадцатеричном формате, что означает, что нам не нужны никакие специальные инструменты, кроме Python'а, - он автоматически преобразует ссылки на ASCI-символы. Просто импортируйте main_array в 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 файлов с CDN, мы нашли 5 внешних ссылок на sflk.in, которые, вероятно, обслуживают другие сценарии. Но давайте сначала доразберем первый.

Я рекомендую, особенно для небольших сценариев, заменить ссылки на строки вручную. Это даст понимание того, как работает скрипт, и позволит познакомиться с кодом в разных форматах. Когда вы будете это делать, сначала прочитайте весь код в виде строки, напишите регулярное выражение для извлечения ссылок на «main_list», вместе с индексами, а затем заменить их соответствующими значениями из массива декодированных строк.

В итоге мы получаем совсем не сложный код - сначала он создает документ и отображает сообщение «Пожалуйста, подождите немного ...» до тех пор, пока не подгрузятся остальные сценарии. Функция «addTag» в качестве имени подразумевает добавление тегов в html на основе сценария или ссылки (строка 4,7), при помощи данного метода можно скрытно распространять ссылки sflk.in, - они обфусцируются, используются один раз и перенаправляют только на определенную пасту.

Углубляемся. Как я уже сказал, каждая ссылка ведет на новую пасту. Которые, как оказываются, хранят еще кучу строк кода на Javascript. Этот код ссылается на переменные из строк 47-50 в главном скрипте

Переменная 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, которое указывает на истинный тип файла. Файлы защищены паролем, поэтому трудно доказать, что они на самом деле несут вред и предполагают жестоком обращении с детьми.

Время последнего редактирования указывает, что кампания все еще "на плаву", и новые ссылки появляются еженедельно / ежемесячно. Начиная от с 15 августа 2018 года, на сегодняшний день эту пасту увидели 153 тысяч человек, что ежедневно состовляет около 270 просмотров.

На данный момент мы определили 4 переменные в 4 различных внешних Javascript-сценариях - Video_1, Video_2, Dataname_1, Dataname_2, которые отвечают за сохранение ссылок на видео и отображение реальных заголовков для конечных пользователей.

Последний файл включает в себя множество сценариев, связанных с сопоставлением исходного кода, VUE'м и т. д., Однако здесь тоже есть "пасхалка" в виде небольшого фрагмента кода, который создает ссылки и выводит их пользователям. После базовой деобфускации, я смог увидеть получить следующий код

Сразу же можно заметить ссылку katfile.com, которая перенаправляет на страницу регистрации для доступа к премиум-контенту, - она выглядит точно так же, как стандартная страница регистрации на katfile.com, но работает по совершенно иначе.

Последняя функция, которая создает фактические ссылки, называется «makeFnN» (строка 31), и большие переменные «Video_1» и «Video_2», с реальными ссылками на katfile-сервера, передаются туда.

Этот код также не сложен для понимания. Сначала он берет http-ссылку (из видео), убирает все строки, относящиеся к URL (расширение, URI) (строка 8-9), так что остается только имя файла (название книги), которое, в свою очередь, сравнивается с ключами из массива и в конце отображает соответствующую base64 декодированную строку, относящуюся к предыдущему названию книги (строка 12).

В процессе работы, даже если вы предполагаете, как это работает, рекомендую все-равно снифать весь трафик. В исследовании я не могу указать полные ссылки, но давайте я покажу вам, куда вы попадете при клике по ним.

Нажатие на любую ссылку перенаправит вас на katfile с файлом "книги".

В данном случае «Гарри и его ведро, полное динозавров» - это серия детских книг, написанных Яном Уайброу и Адрианом Рейнольдсом. На страницах идет повествование о 5-летнем мальчике по имени Гарри, у которого в ведре полно динозавров (Внезапно !). Однако, на самом деле, архив содержит ЦП. Я не специалист из мира детского порно, но думаю, что некоторые видео могут быть из старого архива Playpen.

И это все. Теперь мы точно знаем, как работает этот скрипт, как он пытается замаскироваться и какие сервисы он использует. Последнее, что нужно сделать, это нарисовать схему, которая наглядно позволит увидеть тактические приемы и процедуры, используемые в атаке.

Подводя итог, я еще раз опишу, как работает эта схема. Будущий зритель находит сокращенную ссылку на форуме, которая несколькими кругами редиректов приводит его на Pastbin. В пасте он находит еще одну ссылку, которая ведет на скачивание HTML-файла из облачного хранилища. Файл содержит ссылки на sflk.in (еще один сервис сокращения ссылок), перенаправляющий на очередную пасту с Pastbin с обфусцированным Javascript-кодом. Из которого были извлечены еще 5 ссылок на sflk, который в свою очередь, снова ведет нас на Pastebin. В четырех этих записях с Pastbin содержатся закодированные заголовки порно фильмов (выдающие себя за легальные книги) и ссылки на их скачивание. В 5-м сценарии существует функция MakeFnF, которая отвечает за объединение всех предыдущих 4-х файлов, чтобы получить изначально искомый контент.

Знание точного процесса и методов, используемых противником, дает невообразимое преимущество. В данном случае мне приходит в голову 3 вещи, как можно злоупотреблять этим процессом:

  • Ограбление - они зарабатывают деньги за клики на сервисах сокращения URL-адресов и загрузках из облачного хранилища. Аноним может публиковать свои ссылки под видом ссылок настоящих распостранителей ЦП и отправлять их пользователям, которые ищут этот вид контента. Далее следует безумно огромный цикл редиректов с дикпиком в конце или разделом фуги на два си эйч.
  • Отслеживание - чтобы идентифицировать людей, которые распространяют или ищут этот контент, можно поместить небольшой скрипт в скачиваемом HTML-файле из второго этапа, а остальное оставить по-умолчанию.
  • Диверсия - я изучил несколько скачиваемых HTML-файлов, и все они имели ссылки на один и тот же подключаемый JavaScript. Это означает, что поток доставки централизован в одной точке. Уничтожение этой точки ведет к уничтожению цепи поставок.

После отправки отчета, Katfile удалил около 6000 ЦП-видео, а Pastebin удалил все замешанные в этом деле пасты, сделав 2-летнюю дистрибьюторскую сеть полностью недоступной.

Еще одно исследование исходиков, которое доставило мне не меньше удовольствия тут.

Предоставляя учебные пособия и делясь знаниями, я надеюсь частично покрыть свои медицинские счета. Если вам нравится моя работа и вы используете мои инструменты, пожалуйста, помогите мне, сделав пожертвование на Paypal.

Реверс вредоносов и OSINT

Каждый исследователь кибербезопасности - охотник за угрозами (threat hunter) или аналитик имеет дело с исходным кодом неизвестного происхождения, поэтому во второй части этого эпизода мы подробно рассмотрим вредоносное ПО, предназначенное для серверов с Redis, заразившее, на данный момент, уже более 3600 серверов по всему миру.

Точно так же, как и в прошлый раз, в данном случае, для осуществления анализа, нам вновь отлично подойдет нисходящий подход. Во-первых, сперва необходимо будет собрать общую информацию о методах работы вредноса, внешних ссылках и прочем, а затем сконцентрироваться на деталях, если это будет необходимо для анализа более высокого уровня.

Базы данных Redis всегда были легкой целью для киберпреступников, чтобы развернуть на них свои майнеры, и одна из этих кампаний включала червеобразные возможности (статья).

В зараженной базе данных 4 субъекта угроз добавили 4 хранилища ключей.

Сценарий из 2-4 ссылок идентичен первой, разные адреса используются в качестве резервных копий на случай, если первый сервер командования и управления будет отключен. Он содержит следующие функции:

  • kill_miner_proc
  • kill_sus_proc
  • downloads
  • unlock_cron
  • lock_cron

Но перед тем, как начать свою деятельность, он осуществяет некоторые проверки.

У любого, кто знаком с Linux, не должно быть проблем с пониманием высокоуровневого кода. По сути, он отключает SE Linux, устанавливает пути, пользователей и атрибуты.

Он также проверяет наличие строки «[a]liyun» в процессах (строка 32) и, если она существует, загружает другую пару сценариев для удаления всего, что связано с Aliyun. Его код можно посмотреть здесь.

Первое упоминание Aliyun было около 5 лет назад.

Этот скрипт просто удаляет все, что связано с aegis, однако найти, что такое Aliyun, в самом деле, проблематично. Aliyun - это имя облака, принадлежащего китайской компании Alibaba, и в документации на их сайте упоминается агент Server Guard с процессом aegis, который находится в директории «/usr/local/aegis/ /etc/init.d/aegis». Это логично - отключить любые продукты, обеспечивающие безопасность, на атакуемом компьютере.

Если вы внимательно посмотрите на фрагмент кода с удалением, то будет разумно предположить, что если «uninstall.sh» существует, то и «install.sh» также должен существовать. Конечно, это действительно так. Вы можете посмотреть весь сценарий на pastebin.

Он обращается к 6 различным адресам, но ни один из них не активен:

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

Базовые проверки заканчиваются захардкоженными URL-адресами с конфигурациями, скриптами и исполняемыми файлами. Они уже недоступны (я предполагаю, что на стороне сервера есть дополнительные проверки), однако остальная часть 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, networkservics.

downloads - это функция для скачивания файлов, она использует wget и curl

Lock_cron и unclock_cron устанавливают соответствующие права доступа к файлам etc / crontab и / var / spool / cron.

На следующем этапе вредоносные программы закрепляются в системе, добавляя новый ssh-ключ в authorized_keys

Майнер имеет механизм самообновления, при каждом запуске он сравнивает захардкоженный размер файла (строка 53) с ранее загруженным файлом конфигурации. Этот метод позволяет оператору отправить новую версию вредоносного ПО, как только оно будет готово.

В конце он загружает и запускает другой скрипт is.sh из hxxp://178[.]157.91.26/ec8ce6ab/is.sh. Как и прежде, есть проверки для упомянутого ранее «adiyun», а еще функция “download” для скачивания таких файлов, как Massscan и pnscan.

Перед их загрузкой, также устанавливаются все необходимые зависимости.

Как вы можете заметить, это еще не конец - он загружает другой скрипт rs.sh с того же IP-адреса (строка 154), но на момент написания статьи, он недоступент. Я перепробовал много способов, чтобы заполучить его, но по неизвестным мне причинам я не смог, поэтому, к сожалению, путешествие заканчивается здесь.

Impreva писала о подобных вредоносах в марте 2018 года, они имеют некоторые сходства с этим примером. Он такой же живучий, благодаря реализации запасных серверов и установке зависимостей, добавлении собственных ключей в authorized_keys и удалению прочих майнеров. Похоже, что это может быть все та же кампания, но обновленная и, возможно, с новыми функциями для дальнейшего заражения.

Подводя итог, вредонос имеет следующие особенности:

  • Скачивание из внешних источников
  • Бэкдор в виде ssh-ключей
  • Поддержка различных конфигураций
  • Удаленное обновление
  • Полная автоматизация
  • Проверка и уничтожение процессов

Как вы можете заметить, анализировать вредоносный код с точки зрения OSINT, используемого в реальной кампании по борьбе с вредоносным ПО, - не ракеты строить. Я взял простой пример действующей кампании только для того, чтобы показать то, как я работаю с кодом. Реальные вредоносные программы, используемые субъектами национального государства, анализируются лучшими исследователями, и это занимает недели и даже месяцы. Я показал анализ простого скрипта, написанного на высокоуровневом языке программирования (к сожалению, еще не законченный), но все уже знают о TTP, используемом киберпреступниками, а также о слабых и сильных особенностях самого вредоносного ПО.

До этого анализа я понятия не имел о парных командах, процессах и их использовании, но я гуглил, читал руководства и многому научился. Я до сих пор не знаю многих деталей в этом коде, но низкоуровневый анализ занимает очень много времени, мне пришлось бы анализировать много строк кода и проверять каждую кроличью нору на своем пути.

init.sh https://www.virustotal.com/gui/file/3c7faf7512565d86b1ec4fe2810b2006b75c3476b4a5b955f0141d9a1c237d38/detection

is.sh https://www.virustotal.com/gui/file/6faa026af253c784ef97ffec3a9953055d394061a9a1fbfdcc5b28445b73ffdc/detection

В прошлом я анализировал многоступенчатую упаковку Betabot, этот анализ доступен тут.

Заключение

Я не могу вам рассказать, как работать с любой обфускацией, это просто невозможно, но я могу дать несколько советов, как определить особенности кода неизвестного происхождения. Изменение приложения и исходного кода является необходимым навыком в каждом техническом исследовании и должно быть в ассортименте всех аналитиков безопасности. Кроме того, анализ исходного кода дает представление о методах, тактиках и процедурах противника и позволяет защитить ваши активы от подобных атак.


Прочитать оригинал этого материала на английском можно здесь.

Report Page