• XSS.stack #1 – первый литературный журнал от юзеров форума

Анализ малвари Robbinhood при помощи Radare2

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
В этой статье будет представлен обзор того, как мы можем извлечь имена функций из двоичных файлов Windows GoLang, чтобы упростить реверс, а также кратко проанализировать Robbinhood Ransomware, который недавно атаковал Балтимор. GoLang - это язык программирования, разработанный для многопоточных приложений. Сложность обращения двоичных файлов GoLang состоит в том, что все библиотеки статически связаны, что означает, что в приложении будет большое количество функций, большинство из которых даже не используются во время выполнения. Например, в обычном скомпилированном двоичном файле GoLang Hello World, radare2 обнаруживает 1800 функций.

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

Gopclntab
Кажется, что раздел gopclntab всегда начинается с байтов 0xfbffffff, и после этого содержит размер таблицы. Следующие 8 байтов содержат местоположение первой функции, а затем смещение этой функции от начала таблицы. Если вы перейдете к этому смещению от начала таблицы, вы получите смещение для имени функции.

Используя эту таблицу, мы можем получить всю информацию о функции для двоичного файла. Я создал небольшой скрипт на python, который использует r2pipe для разбора этой таблицы и переименования / создания необходимых функций. Вы можете получить скрипт на моем gitHub . Также вот вам ссылка на полную статью о gopclntab, вдруг кому-то будет интересно - http://lekstu.ga/posts/pclntab-function-recovery/

Robbinhood
В мае город Балтимор оказался заражен локером под названием Robbinhood. Сам ransomware был написан на GoLang, так что я подумал, что это хорошая возможность познакомиться с реверсом GoLang и проанализировать образец.

При обращении двоичного файла GoLang основная функция будет расположена в main.main . Обращаясь к этой функции в radare2, мы видим, что двоичный файл пытается открыть файл C:\Windows\Temp\pub.key. Строки в двоичном коде GoLang не заканчиваются нулем, как большинство языков программирования C-типа. Вместо этого у них есть переменная, которая содержит длину строки.

golang1.png


Если файл pub.key не существует, программа выдает ошибку и завершает работу. Если он существует, программа получит список дисков, к которым у компьютера есть доступ, и запустит функцию main.CoolMaker. Функция CoolMaker порождает несколько процессов cmd.exe для запуска диспетчера управления службами, чтобы отключить все антивирусы на зараженном хосте.

golang2.png


После вызова функции CoolMaker Robbinhood создаст 4 процесса функции main.main.func1, в которых, по-видимому, и происходит фактическое шифрование. Функция вызывает другую функцию, main.doit, которая создает ключ шифрования на основе файла pub.key, найденного в начале. Затем эти процессы будут рекурсивно проходить через файловую систему и шифровать любые найденные файлы.

Программа также записывает в лог имена зашифрованных файлов: rf_l, rf_s, ro_l, ro_s . Оба файла rf_* записывают в логи имена файлов, которые малваря считает «интересными». Журналы ro_* содержат все остальные имена файлов. Оба набора логов разделены на файлы большого размера (rf_l, ro_l) и файлы малого размера (rf_s, ro_s). Эти логи удаляются, как только завершается выполнение малвари.

golang3.png


golang4.png


Выдаваемое сообщение с требованием о выкупе содержится в двоичном виде, в виде закодированной строки в base64. Примечания (сумма платежа и ID пользователя), определяются другими переменными, чтобы сделать их легко заменяемыми в зависимости от того, кто является жертвой. Например, ID кошелька определяется как #WALLAD# и заменяется строкой 14yos7dpe4bx3imnoGVUcMsNBwU1hLutfj. Я проверил, были ли сделаны какие-либо платежи на этот bitcoin кошелек, оказалось, что нет; город не заплатил выкуп.

golang5.png


golang6.png


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


Автор: Jacob Pimental
перевод tabac, специально для xss.pro
 
Пожалуйста, обратите внимание, что пользователь заблокирован
На моё мнение, GoLang не самый удачный язык для малварей. Но, это прикольно что на этом языке пишут малвари, так можно сказать элитная малварь).
 
На моё мнение, GoLang не самый удачный язык для малварей. Но, это прикольно что на этом языке пишут малвари, так можно сказать элитная малварь).
Самое элитное на r2 все делать, IDA же нет у нас ))
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх