tgoop.com/linuxkalii/1489
Last Update:
🧩 Задача для Linux-администраторов: "Исчезающий процесс"
📖 Описание задачи
В системе неожиданно появилась служба, которая запускается автоматически через 10 минут после удаления её бинарного файла и убийства процесса.
Особенности:
- Бинарный файл процесса каждый раз появляется в разной директории внутри /tmp
.
- Имя процесса каждый раз разное (например, a1b2c3
, `d4e5f6`).
- При запуске процесс слушает TCP-порт на случайном высоком порту (>=1024).
- Порт каждый раз динамически выбирается и кодируется в base64, чтобы затруднить прямую идентификацию.
- Бинарный файл зашифрован и расшифровывается процессом в оперативной памяти перед запуском.
- После удаления файла и убийства процесса через 10 минут процесс появляется снова.
📝 Ваша задача:
1. Определить источник "реинкарнации" процесса.
2. Найти механизм автозапуска и зашифрованного хранения бинарника.
3. Остановить автоматический запуск навсегда без перезагрузки системы.
4. Задокументировать шаги поиска и устранения проблемы.
🕵️ Решение (разбор шаг за шагом)
1️⃣ Найти процесс и порт
Поскольку порт зашифрован (base64), стандартный ss
или netstat
покажут только открытый порт, но не под каким именем он должен быть:
ss -tulpn | grep LISTEN
Запоминаем PID и порт. Чтобы проверить порт в base64:
echo <порт> | base64
(найденный зашифрованный порт в коде процесса может совпадать)
2️⃣ Посмотреть открытые файлы и дескрипторы
Чтобы понять, где запускается исполняемый файл:
lsof -p <pid>
Смотрим дескрипторы
/tmp/
, /dev/shm/
, /proc/self/fd/
.Если исполняемый файл удалён, но процесс его держит открытым, можно восстановить его через
/proc/<pid>/exe
:
cp /proc/<pid>/exe ./restored_binary
3️⃣ Отследить родителя процесса
Проверим родительский процесс:
ps -o pid,ppid,cmd -p <pid>
pstree -p <ppid>
➡️ Нужно понять, кто создаёт зашифрованный бинарник и запускает процесс.
4️⃣ Отследить создание файла в /tmp
Используем
auditd
или inotifywait
, чтобы зафиксировать момент создания:
auditctl -w /tmp -p wa
ausearch -f /tmp
или
inotifywait -m /tmp
Когда файл создастся → смотрим, какой процесс его записал:
lsof | grep /tmp/<имя_файла>
5️⃣ Проверить автозагрузку
Проверяем cron:
crontab -l
cat /etc/crontab
ls -l /etc/cron.*
Проверяем systemd:
systemctl list-timers --all
systemctl list-units --type=service
systemctl list-units --type=timer
Проверяем init.d, rc.local, profile.d:
ls -l /etc/init.d/
cat /etc/rc.local
ls -l /etc/profile.d/
6️⃣ Проанализировать процесс запуска
Раз шифрование происходит в памяти:
- Проверяем аргументы запуска процесса через
ps aux
- Используем
strace
для перехвата системных вызовов:
strace -f -p <pid>
- Проверяем, не использует ли процесс
memfd_create
, shm_open
, mmap
(бинарник в памяти):
lsof -p <pid> | grep memfd
📝 Возможное объяснение
- Основной процесс шифрует бинарник и хранит его (например, в `/etc/.hidden/enc.bin`).
- Через cron job или systemd timer каждые 10 минут запускается дешифровщик, который:
- Расшифровывает бинарник в
/tmp
- Запускает процесс
- Запущенный процесс открывает порт, шифрует его номер (base64) и выводит только в своих аргументах/переменных окружения.
- Процесс удаляет бинарник сразу после запуска, оставляя только дескриптор в памяти.
✅ Как остановить навсегда (без перезагрузки):
1. Найти и остановить родительский процесс (watchdog/дешифровщик):
kill -9 <pid>
2. Удалить механизм автозапуска:
- Удалить запись из cron.
-
systemctl disable <название_сервиса>
- Удалить файлы-инициаторы из
/etc/systemd/system/
, /etc/init.d/
, /etc/rc.d/
.3. Найти и удалить зашифрованный бинарник:
find / -type f -name '*.bin' -exec file {} \; | grep 'data'
или поиск по дате изменения:
find / -type f -mtime -1
4. Очистить /tmp, /dev/shm, /run от временных файлов.
BY Kali Linux
Share with your friend now:
tgoop.com/linuxkalii/1489