Telegram / Boosty / Видео и материалы

Подпишись на канал t.me/kiberdruzhinnik, чтобы не пропускать контент.

Смотри на t.me/kiberdruzhinnik/182.

Также на https://boosty.to/kiberdruzhinnik/posts/44767c21-077b-4041-89ec-774dc3c91186 я опубликовал видео разбор этой задачи и дополнительные материалы - разревершенные базы для IDA Free по малварным файлам в этом задании с моими комментариями и ключевыми точками. Это может быть полезно для обучения, если вы делаете первые шаги в реверсе. Поддержать меня на Boosty.

Расследование

Нам предоставили дамп памяти машины, некоторое количество логов и некоторые файлы из системы.

Беглый осмотр файлов показывает, что расширение зашифрованных файлов .31337 (вопрос 17). Из любого файла .note узнаем биткоин кошелек 16ftSEQ4ctQFDtVZiUBusQUjRrGhM3JYwe (вопрос 18).

Забегая вперед, ответим на вопрос 3 о количестве зашифрованных файлов - их было 33.

По логам узнаем, что первоначальный доступ к системе был получен с помощью пользователя contractor01 (вопрос 1).

alt text

В файле WinServer-Collection\uploads\auto\C%3A\Users\contractor01\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt видим команду, с помощью которой был получен административный шелл (вопрос 2):

.\PsExec64.exe -s -i cmd.exe

alt text

PsExec создает в журнале System.evtx запись с идентификатором 7045 и названием сервиса PSEXESVC, отсюда узнаем время инцидента.

alt text

Помимо этого злоумышленник проверяет, что ему доступна WSL.

Обнаруживаем файл WinServer-Collection\uploads\auto\C%3A\Users\Administrator\Downloads\MsMpEng.exe и проверяем его с помощью Detect it Easy.

alt text

Это ELF файл, скомпилированный с помощью GCC (вопрос 14).

Реверс загрузчика

Пробуем дебажить под Linux. Во время реверса придется следить, чтобы не провалиться в функцию raise.

По строкам в пакере можно предположить, что использовался алгоритм zlib (вопрос 10).

alt text

Регион memfd, в который будет записан расшифрованный файл (вопрос 8).

alt text

Расшифрованный ELF будет запущен с под именем процесса PROGRAM (вопрос 4):

alt text

В переменной buf находится адрес расшифрованного ELF.

alt text

Дампнем память (Shift+F2):

auto fname = "/home/kiberdruzhinnik/memory_dump";
auto address = 0x7F1F151A0010;
auto size = 0x7F1F1550E000-0x7F1F151A0010;
auto file = fopen(fname, "wb");

savefile(file, 0, address, size);
fclose(file);

Реверс рансомвари

Откроем новый файл в IDA и посмотрим на main:

alt text

В 6 строке находим ключ шифрования строк (вопрос 5), а в 16 строке видим, на какую директорию нацелен шифровальщик (вопрос 9).

Найдем функцию определения отладки. Здесь же в строке 17 видим ответ на вопрос 19.

alt text

В 11 строке находим файл, с помощью которого шифровальщик определяет, что он находится под отладкой (вопрос 11).

С помощью таблицы определяем номер посылаемого сигнала в функции-обертке над определением отладчика (вопрос 12) - нужно смотреть на строку 21, а также строку, которую пишет программа (строка 9, вопрос 15).

alt text

Декриптуем строки:

alt text

alt text

По расшифрованной ссылке получаем ключ шифрования и инициализационный вектор (вопрос 7).

alt text

По этому ключу предполагаем, что шифроваться данные будут алгоритмом AES-256-CBC (вопрос 6).

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

http://google.com
http://icanhazip.com
http://something.com
http://ifconfig.me
https://reddit.com
https://wikipedia.org

Для исследования функции сканирования файлов надо предварительно выполнить такие действия:

sudo mkdir -p /mnt/c/Users/t
sudo chown kiberdruzhinnik:kiberdruzhinnik -R /mnt/c
echo 1 > /mnt/c/Users/1.zip

В функции проверки расширения файлов нашлись такие (вопрос 13):

.pdf
.docx
.ppt
.pptx
.doc
.zip
.jpg
.png
.gif
.mp
.mp4
.mov
.tar.
.tar

alt text

Системный вызов для чтения файлов (вопрос 21):

alt text

Удаление происходит с помощью системного вызова, который подсвечен на картинке (вопрос 22):

alt text

Поищем секции в ELF файле:

$ readelf -S memory_dump
...
[26] .bss              NOBITS           000000000036e0c0  0036d0ae
       0000000000005458  0000000000000000  WA       0     0     32
  [27] .comment          PROGBITS         0000000000000000  0036d0ae
       0000000000000027  0000000000000001  MS       0     0     1
  [28] .shstrtab         STRTAB           0000000000000000  0036d0d5
       0000000000000104  0000000000000000           0     0     1
...

Выведем секцию .comment (вопрос 16):

$ readelf -p .comment memory_dump

String dump of section '.comment':
  [     0]  GCC: (Debian 10.2.1-6) 10.2.1 20210110

По строкам видим ответ на вопрос 20 о том, кто изначальный создатель малвари:

alt text