Telegram / Boosty / Видео и материалы
Подпишись на канал t.me/kiberdruzhinnik, чтобы не пропускать контент.
Также на https://boosty.to/kiberdruzhinnik/posts/44767c21-077b-4041-89ec-774dc3c91186 я опубликовал видео разбор этой задачи и дополнительные материалы - разревершенные базы для IDA Free по малварным файлам в этом задании с моими комментариями и ключевыми точками. Это может быть полезно для обучения, если вы делаете первые шаги в реверсе. Поддержать меня на Boosty.
Расследование
Нам предоставили дамп памяти машины, некоторое количество логов и некоторые файлы из системы.
Беглый осмотр файлов показывает, что расширение зашифрованных файлов .31337
(вопрос 17). Из любого файла .note
узнаем биткоин кошелек 16ftSEQ4ctQFDtVZiUBusQUjRrGhM3JYwe
(вопрос 18).
Забегая вперед, ответим на вопрос 3 о количестве зашифрованных файлов - их было 33.
По логам узнаем, что первоначальный доступ к системе был получен с помощью пользователя contractor01
(вопрос 1).
В файле WinServer-Collection\uploads\auto\C%3A\Users\contractor01\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
видим команду, с помощью которой был получен административный шелл (вопрос 2):
.\PsExec64.exe -s -i cmd.exe
PsExec
создает в журнале System.evtx
запись с идентификатором 7045
и названием сервиса PSEXESVC
, отсюда узнаем время инцидента.
Помимо этого злоумышленник проверяет, что ему доступна WSL.
Обнаруживаем файл WinServer-Collection\uploads\auto\C%3A\Users\Administrator\Downloads\MsMpEng.exe
и проверяем его с помощью Detect it Easy.
Это ELF файл, скомпилированный с помощью GCC
(вопрос 14).
Реверс загрузчика
Пробуем дебажить под Linux. Во время реверса придется следить, чтобы не провалиться в функцию raise
.
По строкам в пакере можно предположить, что использовался алгоритм zlib
(вопрос 10).
Регион memfd
, в который будет записан расшифрованный файл (вопрос 8).
Расшифрованный ELF будет запущен с под именем процесса PROGRAM
(вопрос 4):
В переменной buf
находится адрес расшифрованного ELF.
Дампнем память (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
:
В 6 строке находим ключ шифрования строк (вопрос 5), а в 16 строке видим, на какую директорию нацелен шифровальщик (вопрос 9).
Найдем функцию определения отладки. Здесь же в строке 17 видим ответ на вопрос 19.
В 11 строке находим файл, с помощью которого шифровальщик определяет, что он находится под отладкой (вопрос 11).
С помощью таблицы определяем номер посылаемого сигнала в функции-обертке над определением отладчика (вопрос 12) - нужно смотреть на строку 21, а также строку, которую пишет программа (строка 9, вопрос 15).
Декриптуем строки:
По расшифрованной ссылке получаем ключ шифрования и инициализационный вектор (вопрос 7).
По этому ключу предполагаем, что шифроваться данные будут алгоритмом 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
Системный вызов для чтения файлов (вопрос 21):
Удаление происходит с помощью системного вызова, который подсвечен на картинке (вопрос 22):
Поищем секции в 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 о том, кто изначальный создатель малвари: