Матрешка из Base64 и ROT13: как устроен вредоносный скрипт под видом FreePBX
Вредоносные shell-скрипты нередко маскируются под служебные файлы для настройки телефонии. На первый взгляд такой `.sh` может выглядеть безобидно: часть команд читается, а затем начинается последовательность из Base64, ROT13 и новых слоёв кодирования. В результате получается своеобразная "матрешка", где каждая расшифрованная часть содержит следующий фрагмент.
При статическом анализе важно не запускать подобный файл даже в тестовой системе без изоляции. Скрипт способен загружать содержимое с удалённого сервера и сразу передавать его в `bash`. Это означает, что полезная нагрузка может измениться в любой момент, а исследователь не получит фиксированную версию образца. Безопаснее сохранить ответ сервера в отдельный файл и разбирать его исключительно как текст.
После удаления обфускации и лишнего вывода в рассматриваемом образце проявился полноценный сценарий постэксплуатации. Он включает создание веб-шеллов, добавление пользователей с идентификатором `UID 0`, изменение SSH, закрепление через `cron`, удаление существующих аккаунтов, кражу конфигурации Asterisk и FreePBX, а также загрузку дополнительных payload'ов.
Для специалистов, которые планируют FreePBX установка и настройка, этот пример особенно показателен: недостаточно просто развернуть систему и включить SIP-транки. Необходимо контролировать состав пакетов, права веб-каталогов, состояние SSH, задания планировщика и изменения в системных файлах.
Веб-шеллы и несколько точек входа
Одним из первых действий скрипта становится запись PHP-кода в веб-директорию. Основной файл затем копируется в несколько каталогов под разными именами, включая `ajax.php`. Такая схема рассчитана на переживание частичного удаления: если администратор найдёт и сотрёт один backdoor, остальные продолжат работать.
Дополнительно создаётся `.htaccess`, который должен упростить обработку HTTP-запросов и обеспечить доступ к вредоносным PHP-файлам через веб-сервер. Сочетание `.htaccess` и большого количества копий одного скрипта говорит о том, что злоумышленник стремится не просто сохранить файл, а сделать его максимально доступным из внешней сети.
Отдельного внимания заслуживает попытка установить атрибут immutable:
```bash
chattr +i /путь/к/файлу
```
Если операция проходит успешно, файл нельзя будет изменить или удалить обычными средствами, даже при наличии соответствующих прав. Если `chattr +i` не сработал, это тоже полезный признак: команда остаётся в истории действий и показывает намерения атакующего. При проверке сервера стоит искать подозрительные PHP-файлы, `.htaccess` в неожиданных каталогах и объекты с атрибутом `i`.
Пользователи с UID 0 и зачистка системы
В скрипте несколько раз встречается создание учётных записей с `UID 0`. Такой идентификатор соответствует root, поэтому новый пользователь фактически получает максимальные привилегии системы. Это один из наиболее серьёзных признаков компрометации.
Проверить подобные записи можно командой:
```bash
awk -F: '$3 == 0 {print}' /etc/passwd
```
В штатной конфигурации обычно присутствует только `root`, хотя конкретный набор системных записей зависит от дистрибутива. Любые неизвестные аккаунты с нулевым UID требуют немедленного расследования.
Дальше вредоносный код пытается удалить других пользователей с `UID 0`, а затем аккаунты, связанные с домашними каталогами. Отдельные команды вручную редактируют `/etc/passwd`, `/etc/shadow`, `/etc/group` и `/etc/gshadow`. Подобная зачистка может лишить доступа администраторов и затруднить восстановление контроля над сервером.
Пароли также могут быть заменены. Поэтому простого удаления найденного пользователя недостаточно: следует проверить все привилегированные записи, сменить ключи SSH, пароли локальных аккаунтов и учётные данные FreePBX, а при наличии сомнений - полностью перевыпустить секреты.
Изменение SSH и закрепление через cron
SSH часто становится одной из главных целей. Злоумышленник может добавлять ключи в `authorized_keys`, менять параметры `sshd_config`, разрешать вход для новых пользователей или ослаблять ограничения. После очистки сервера нужно проверить конфигурацию SSH, список разрешённых ключей и журналы авторизации.
Для persistence скрипт создаёт задания `cron`. Иногда в заражённой системе появляются сразу несколько одинаковых записей с разными интервалами или путями. Это делается ради отказоустойчивости: если одно задание будет удалено, другое снова запустит backdoor.
Проверять нужно не только пользовательские crontab:
```bash
crontab -l
```
Следует изучить `/etc/crontab`, каталоги `/etc/cron.d`, `/etc/cron.hourly`, `/etc/cron.daily`, а также задания каждого локального пользователя. Дополнительными механизмами закрепления могут быть systemd-сервисы, таймеры, профили оболочки и скрипты запуска веб-приложений.
Кража конфигурации Asterisk и FreePBX
Конфигурационные файлы телефонии могут содержать SIP-пароли, параметры транков, сведения о маршрутизации звонков, базы данных и реквизиты интеграций. Их компрометация позволяет не только прослушивать или перенаправлять трафик, но и использовать PBX для дорогостоящих международных вызовов.
Практика защиты FreePBX от вредоносных скриптов должна включать ограничение доступа к административной панели, фильтрацию сетей, регулярное обновление модулей и контроль целостности файлов. Полезно отдельно организовать аудит каталогов веб-приложения и исключить возможность записи туда от имени лишних процессов.
При выборе решений для бизнеса запрос FreePBX купить лицензию и поддержку сам по себе не решает проблему безопасности. Коммерческая поддержка может упростить обновления и сопровождение, но ответственность за сегментацию сети, резервное копирование, MFA и мониторинг остаётся на владельце инфраструктуры.
Также стоит учитывать, что обычный антивирус для Linux серверов FreePBX не всегда обнаруживает обфусцированные shell-команды или неизвестный веб-шелл. Поэтому антивирусную проверку необходимо дополнять анализом IOC, контролем процессов, аудитом файлов и мониторингом исходящих соединений.
Удалённые payload'ы и сокрытие следов
После выполнения основной части скрипт может обращаться к внешним IP-адресам и URI, скачивая дополнительные компоненты. Такие payload'ы способны выполнять команды, собирать данные, устанавливать новые механизмы доступа или удалять артефакты после завершения работы.
При расследовании полезно зафиксировать:
- IP-адреса и домены, к которым обращался сервер;
- URI и параметры HTTP-запросов;
- имена подозрительных PHP- и shell-файлов;
- записи в `cron` и systemd;
- неизвестных пользователей;
- изменения в `/etc/passwd`, `/etc/shadow` и SSH-конфигурации;
- исходящие соединения и процессы, запущенные веб-сервером;
- атрибуты `immutable` у файлов.
Комплексный аудит безопасности FreePBX и Asterisk должен проводиться не только после инцидента, но и регулярно. Важно сопоставлять журналы веб-сервера, Asterisk, SSH и системы мониторинга, поскольку отдельная запись редко показывает всю цепочку атаки.
Что делать при обнаружении заражения
Если вредоносный скрипт уже запускался, безопаснее считать сервер полностью скомпрометированным. Удаление отдельных PHP-файлов или пользователей не гарантирует устранение всех механизмов закрепления. Оптимальный вариант - изолировать машину, сохранить копию диска и журналов для анализа, затем развернуть систему заново из проверенного образа.
До восстановления необходимо сменить пароли, SIP-учётные данные, SSH-ключи, токены API и доступы к базам данных. После переустановки следует ограничить права веб-процессов, запретить ненужные исходящие соединения, включить централизованный сбор логов и настроить оповещения об изменениях критичных файлов.
Подробное рассмотрение подобных цепочек обфускации и поведения вредоносного `.sh` можно найти в материале о [разборе вредоносного скрипта для FreePBX](https://habr.com/ru/articles/1080190/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1080190). Главный вывод прост: файл, который выглядит как обычный установщик или служебный помощник, может одновременно создавать root-аккаунты, открывать веб-доступ, красть конфигурацию телефонии и закрепляться несколькими независимыми способами.


