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

Статья Анализ рансома AtomSilo

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Обзор

Это мой анализ для AtomSilo Ransomware.

AtomSilo использует стандартную схему гибридной криптографии RSA-512 и AES для шифрования файлов и защиты своих ключей.

Поскольку он не использует многопоточность и использует алгоритм DFS для обхода каталогов, шифрование AtomSilo довольно медленное.

Вредоносное ПО относительно короткое и простое для анализа, поэтому это определенно удобный выбор для тех, кто хочет заняться анализом программ-вымогателей!

1642870935564.png


IOCS

Этот образец представляет собой 64-разрядный исполняемый файл Windows.

MD5: 81f01a9c29bae0cfa1ab015738adc5cc

SHA256: 7a5999c54f4588ff1581d03938b7dcbd874ee871254e2018b98ef911ae6c8dee

Сэмпл: https://bazaar.abuse.ch/sample/7a5999c54f4588ff1581d03938b7dcbd874ee871254e2018b98ef911ae6c8dee/

Записка с требованием выкупа

Содержимое записки о выкупе хранится в виде открытого текста в исполняемом файле AtomSilo. Зашифрованный открытый ключ RSA жертвы добавляется в конец заметки перед тем, как файлы будут сброшены в систему.

Имя файла с примечанием о выкупе имеет вид README-FILE-[Имя компьютера]-[Отметка времени начала].hta или index.html.

1642870968065.png


Статический анализ кода

Настройка криптографических ключей


AtomSilo использует простой гибридный криптографический подход с использованием RSA и AES из библиотеки CryptoPP (https://github.com/weidai11/cryptopp) для шифрования файлов. Вредоносное ПО сначала случайным образом генерирует пару открытого и закрытого ключей для жертвы и сохраняет их в глобальных переменных.

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

1642870989491.png


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

Ниже приведен жестко запрограммированный открытый ключ RSA AtomSilo.

1642871002356.png


Однократный мьютекс

AtomSilo вызывает CreateMutexA, чтобы проверить, существует ли уже мьютекс с именем "8d5e957f297893487bd98fa830fa6413", и если это так, вредоносное ПО немедленно завершает работу. Это делается для того, чтобы избежать одновременного запуска нескольких экземпляров вредоносного ПО.

1642871039644.png


Запуск потоков шифрования


AtomSilo пытается использовать многопоточность для ускорения обхода и шифрования файлов в системе. Он перебирает список имен дисков от "a: " до "z: " и создает новый поток для шифрования каждого.

1642871051119.png


1642871059668.png


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

Потоки шифрования

Помещение записки о выкупе


Для каждого обнаруженного каталога AtomSilo оставляет в нем записку с требованием выкупа.

Сначала вредоносное ПО расшифровывает следующую строку стека и форматирует ее, как показано ниже.

1642871071861.png


1642871085314.png


Имена файлов записки с требованием выкупа используются в зависимости от её места. Когда AtomSilo встречает какой-либо файл с расширениями .php, .asp, .jsp или .html, он использует [Имя каталога]\index.html в качестве имени файла с запиской о выкупе. Для любого другого каталога используется [Имя каталога]\README-FILE-[Имя компьютера]-[Отметка времени начала].hta.

Наконец, AtomSilo записывает содержимое записки о выкупе в следующем формате.

[Ransom Note Content]<asf>[Victim Encrypted RSA Public Key]</asf><csf>3</csf><bsf>[Computer Name]</bsf></span></body></html>

1642871118135.png


Обход DFS


Каждый поток использует DFS для обхода переданного ему каталога. Во-первых, для поиска всех файлов и подкаталогов он использует стандартные вызовы API FindFirstFileA и FindNextFileA.

AtomSilo хранит список имен, чтобы избежать шифрования в памяти для повторения и проверки каждого обнаруженного файла/каталога. Если имя файла/каталога есть в списке, оно пропускается и не шифруется.

1642871134111.png


Список имен файлов/каталогов, которых следует избегать, показан ниже.

1642871146827.png


Если AtomSilo встречает подкаталог, вредоносное ПО добавляет свое имя к текущему пути к каталогу, помещает внутрь записку с требованием выкупа и передает путь своей функции обхода для рекурсивного обхода. Мне нет нужды обсуждать, какой прирост скорости получит программа-вымогатель.

1642871155533.png


Если AtomSilo встречает файл, вредоносная программа проверяет, содержит ли имя файла следующие расширения.

1642871164055.png


Если это так, файл пропускается и не шифруется.

1642871173613.png


Как обсуждалось выше, когда AtomSilo встречает любой файл с расширениями .php, .asp, .jsp или .html, он помещает примечание о выкупе по пути [Имя каталога]\index.html.Наконец, он передает путь к файлу функции для его шифрования.

1642871187294.png


Шифрование файлов

Для каждого файла, подлежащего шифрованию, AtomSilo случайным образом генерирует 32-байтовый ключ AES. Во-первых, он получает текущее системное время и использует его как начальное значение для генератора псевдослучайных чисел C++ через srand. Используя это, вредоносная программа генерирует случайную строку из 32 символов, и каждый символ случайным образом выбирается как строчная буква, заглавная буква или число от 0 до 9.

1642871204255.png


Затем ключ AES шифруется с помощью закрытого ключа RSA жертвы.

1642871213402.png


Затем AtomSilo открывает файл с помощью CreateFileA и сопоставляет его с адресным пространством текущего процесса для прямого чтения и записи с помощью CreateFileMappingA и MapViewOfFile.

1642871223075.png


Перед шифрованием файла вредоносное ПО записывает зашифрованный ключ AES в последние 0x210 байт в конце файла.

1642871235955.png


Наконец, AtomSilo шифрует файл с помощью ключа AES с реализацией AES от CryptoPP, закрывает дескриптор сопоставления файлов и добавляет ".ATOMSILO" в конец имени файла.

1642871247274.png


Как расшифровать

Зашифрованный открытый ключ RSA жертвы добавляется в конец записки о выкупе, которая зашифрована с помощью открытого ключа RSA AtomSilo. Следовательно, для расшифровки открытого ключа RSA жертвы требуется закрытый ключ RSA AtomSilo.

Чтобы расшифровать файл, зашифрованный AtomSilo, зашифрованный ключ AES можно извлечь из конца файла. Поскольку ключ AES зашифрован с использованием закрытого ключа RSA жертвы, его можно расшифровать с помощью открытого ключа RSA жертвы.

Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://chuongdong.com/reverse engineering/2021/10/13/AtomSiloRansomware/
 


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