Digium IP電話への攻撃: Webシェル埋め込みの考察

A conceptual image representing attacks on mobile, such as the recent malicious activity targeting Digium phone software.

This post is also available in: English (英語)

概要

一般にマルウェア開発者は、リモートからのエクスプロイト実行やコマンド実行の足掛かりとして、まずWebサーバーにWebシェルをインストールします。2020年11月、INJ3CTOR3のオペレーションは、幅広く利用されているVoIP PBXシステムであるSangoma PBXを標的とし、そのWebサーバーにWebシェルをインストールしました。最近では、DigiumのIP電話に使用されているElastixシステムが別のオペレーションの標的となったことをUnit 42は確認しています。この攻撃者は、Webシェルを埋め込み、標的のDigium電話ソフトウェア(PHPで記述されたFreePBXモジュール)内部の追加ペイロードをダウンロード・実行することで、データを流出させていました。タイムラインから考えると、そのWebシェルは、Rest Phone Apps (restapps)モジュールにあるリモートコード実行(RCE)脆弱性CVE-2021-45461と相関があるようです。

本稿執筆時点で、2021年12月下旬から2022年3月末までの期間に、このファミリの固有のマルウェアサンプルが50万以上も確認されています。このマルウェアは、複数レイヤの難読化されたPHPバックドアをWebサーバーのファイルシステムにインストールし、新しいペイロードをダウンロードして実行し、ホストシステムを再感染させるための反復タスクをスケジュールします。さらに、このマルウェアは、セキュリティ侵害インジケータ(IoC)に基づいた、シグネチャベースの防御を回避するために、マルウェアの各ダウンロードにランダムなジャンク文字列を埋め込みます。

パロアルトネットワークスの次世代ファイアウォールをご利用のお客様はクラウド型脅威解析サービスWildFire脅威防御セキュリティサブスクリプションにより同マルウェアから保護されています。

本稿で解説するCVE CVE-2021-45461

目次

DigiumのAsteriskを標的とした悪意ある活動の背景
攻撃ベクトル
初期ドロッパー
Webシェル
設定ファイル
永続化メカニズム
結論
IoC
追加のリソース

DigiumのAsteriskを標的とした悪意ある活動の背景

最近、WildFireチームは、同一のサンプルファミリから送信されていると思われる大量の悪意あるトラフィックを確認しました。具体的には、2021年12月中旬から2022年3月末までの期間に、固有のサンプルを50万以上確認しました。この異常な活動は、VoIP電話用に幅広く採用されているDigiumのオープンソースAsterisk通信ソフトウェアを標的としています。

IP PBXのSIPトランキング: VoIPプロバイダ > インターネット > オンプレミスのIP-PBX > 机上の電話
図1 IP PBX電話システムは電話の接続でSIPトランクに依存している 出典: https://www.nextiva.com/blog/what-is-ip-pbx.html

Elastixは、統合通信サーバーソフトウェア用の最大のオープン ソースソフトウェア ソリューションで、インターネットプロトコル(IP)、構内交換機(PBX)、電子メール、IM、ファックス、コラボレーション機能をすべて搭載しています。Elastixには、Webインターフェイスや予測ダイヤルを備えたコール センター ソフトウェア機能なども含まれます。Elastixの機能は、Asterisk、FreePBX、HylaFAX、Openfire、Postfixなどのオープン ソース プロジェクトをベースにしています。

FreePBXは、世界で最も幅広く使用されているオープンソースIP PBXソフトウェアで、組織にオールインワンのソリューションを提供しています。FreePBXは、無料でダウンロード、インストールでき、電話システムの構築に必要な基本的要素すべてを備えています。これはSangomaと強固なグローバルコミュニティの出資により開発されています。直感的なモジュール式グラフィカル ユーザー インターフェイス(GUI)を特長とし、Asteriskの活用により導入や利用が容易です。digium_phonesは、PHPで記述されたFreePBXモジュールです。

Unit 42が最近確認した悪意のある活動は、2年前にCheck Point ResearchによってリリースされたINJ3CTOR3レポートで説明されている特徴と類似性があり、この攻撃キャンペーンの復活である可能性があります。2021年12月にFreePBXコミュニティフォーラムに1つのレポートが投稿された後、2022年1月に別のレポートが投稿されました。これらのレポートは、これはまさに以前のキャンペーンの復活であるという判断で一致しています。たとえば、INJ3CTOR3レポート(2020年11月5日付け)の図12「The attacker's web panel(攻撃者のWebパネル)」には、以下のようなデフォルトで使用可能な8つのコマンドが示されています。これらのコマンドは、Denis SoloviovらによるFreePBXコミュニティ フォーラム スレッド「K.php - a RestApps malicious script(K.php - 悪意あるRestAppsスクリプト)」投稿 21/74 (2022年1月12日付け)にリストされているものとまったく同じです。

  1. ls -la
  2. ps -aux --forest
  3. asterisk -rx 'core show channels'
  4. asterisk -rx 'sip show peers'
  5. cat /etc/elastix.conf
  6. cat /etc/asterisk/sip_additional.conf
  7. cat /etc/asterisk/extensions_custom.conf
  8. cat /etc/amportal.conf

さらに詳細な調査で、Unit 42が確認した活動は、公式発表されている既知のセキュリティ問題CVE-2021-45461 Potential Rest Phone Apps RCE (潜在的なRest Phone Apps RCE)が引き起こした可能性があることが明らかになっています。この脆弱性は、Rest Phone Apps (restapps)モジュールに存在し、URL変数の通過を可能にしてしまうため、リモートコード実行(RCE)のシナリオにつながります。

本稿はPHP Webシェルバックドアをインストールして標的環境内で足がかりを築こうとする初期ドロッパー シェル スクリプトの内部機構を説明します。

攻撃ベクトル

最初のサンプルセットを大きく2つのグループ(グループ1とグループ2)に分類できました。そのグループの1つ(グループ2)は、さらに2つのサブグループ(AとB)に分類されます。グループ1とグループ2は異なるバージョンの攻撃スクリプト(グループ2が後発バージョン)を表すと考えられます。
図2 サンプルセットを2つの主なグループ(グループ1とグループ2)に分類し、その割合を示した円グラフ。グループ2が大勢を占めている

最初のサンプルセットを大きく2つのグループ(グループ1とグループ2)に分類できました。そのグループの1つ(グループ2)は、さらに2つのサブグループ(AとB)に分類されます。グループ1とグループ2は異なるバージョンの攻撃スクリプト(グループ2が後発バージョン)を表すと考えられます。サブグループAおよびBは、2つの標的の異なるクラスタを表します。

グループ
1 2
ヘッダー ZenharPanel Ask Master
「Submit (送信)」ボタンラベル ZenharR Ask

表1.2つの主なグループ(グループ1とグループ2)のヘッダーと「Submit (送信)」ボタンラベルにおける特徴を示した表。

初期ドロッパースクリプト(亜種1)のコード概要。
図3a 初期ドロッパースクリプト(亜種1)のコード概要
初期ドロッパースクリプト(亜種2)のコード概要。
図3b 初期ドロッパースクリプト(亜種2)のコード概要

通常、初期ドロッパースクリプトのファイルサイズは小さいです。

  • 12,750バイトのペイロード(hxxp[://]37[.]49[.]230[.]74/z/wr[.]phpからフェッチ)
  • 17,215バイトのペイロード(hxxp[://]37[.]49[.]230[.]74/k[.]phpからフェッチ)

これは、PHP Webシェルペイロードを埋め込むシェルスクリプトではよくあることです。常に、コードは14行で、特定の重点領域を隠すために複数レイヤーのBase64エンコーディングにラップされます。Base64でエンコードされたペイロードの1つは複製されていました。

SH > ajax.php (Webシェル)、.htaccess (設定)、永続スクリプト
図4 初期ドロッパースクリプトの概要

初期ドロッパー

初期ドロッパーはシェルスクリプトで、次の2つの目的を持っています。

  1. ファイルシステム内の複数の場所に、難読化されたPHPバックドアをインストールする
  2. 次の方法でアクセスを維持する
    1. 複数のルート ユーザー アカウントを作成
    2. ホストシステムを再感染させるためにスケジュールされたタスクを設定

また、このドロッパーは、インストールしたPHPバックドアファイルのタイムスタンプをシステムにすでに存在する既知のファイルのタイムスタンプに偽装することで、既存の環境に紛れ込もうとしていました。さらに、亜種1に属するドロッパーは、図3aで示しているように、攻撃者のIPv4アドレス37[.]49[.]230[.]74のインフラストラクチャからリモートスクリプトをフェッチして実行します。

このIPv4アドレスの地理的位置はオランダ国内です。このアドレスの過去のDNSレコードを取り出すと、以下のような、ほとんどが成人向けのロシアのドメインとの関連付けが明らかになりました。

  1. campusteen[.]ru
  2. caramelgirl[.]ru
  3. cumixface[.]ru
  4. cutiebooty[.]ru
  5. gentlepus[.]ru
  6. lopornix[.]ru
  7. megabobox[.]ru
  8. sledporn[.]ru
  9. Super-teen[.]ru
  10. sweetassma[.]ru

本稿執筆時点では攻撃者のインフラストラクチャの一部がオンラインに残っており、とくに以下のような悪意のあるペイロードを活発に提供していることが確認されました。

  • hxxp[://]37[.]49[.]230[.]74/k[.]php
  • hxxp[://]37[.]49[.]230[.]74/z/wr[.]php

その時点で以下のペイロードはアクティブではありませんでした。

  • hxxp[://]37[.]49[.]230[.]74/z/post/noroot[.]php
  • hxxp[://]37[.]49[.]230[.]74/z/post/root[.]php

Webシェル

PHP Webシェルには、シグネチャベースの防御を回避するために、ランダムなジャンクコメントが含まれます。また、PHP Webシェルは、本当の意図を隠すために、複数レイヤのBase64エンコーディングにラップされています。このWebシェルは、受信Web要求内の以下のパラメータを処理できます。

  • md5
  • admin
  • cmd
  • call

このWebシェルは、ハードコードされた「MD5認証ハッシュ」によって保護されています。この認証ハッシュは、被害者のパブリックIPv4アドレスに一意にマッピングされるようです。

受信Web要求にユーザーが指定したmd5パラメータは、そのユーザーがWebシェルとやり取りできるように、ログインが成功してセッションが確立される前にこの認証ハッシュと照合されることを必要とします。

また、このWebシェルは、値としてElasticまたはFreepbxを指定できるadminパラメータを受け入れることができます。これにより、それぞれの管理者セッションが作成されることになります。

cmd要求パラメータを通して利用される任意のコマンドのほか、以下の組み込みのデフォルトのコマンドが利用されます。

  1. ls -la
  2. ps -aux --forest
  3. asterisk -rx 'core show channels'
  4. asterisk -rx 'sip show peers'
  5. cat /etc/elastix.conf
  6. cat /etc/asterisk/sip_additional.conf
  7. cat /etc/asterisk/extensions_custom.conf
  8. cat /etc/amportal.conf

最後に、call HTTP要求パラメータは、asterisk -rx "channel originate Local/'<prs><num>@<context> application wait <time>'" というAsteriskコマンド ライン インターフェイス(CLI)からの呼び出しを開始します。

設定ファイル

Base64でエンコードされた別のペイロードが、「シンボリックリンクをたどる」動作を有効にするため、およびconfig.phpをデフォルトページとしてレンダリングするために、.htaccess設定ファイルを置き換えます。.htaccessは、Apache Webサーバーで、ディレクトリ単位で設定オプションを指定するために使用される設定ファイルです。この設定ファイルには、特定のディレクトリとそのすべてのサブディレクトリに適用される1つ以上の設定ディレクティブが含まれます。

永続化メカニズム

このサンプルは、以下の方法で永続性の確立を試みます。

  • ルート ユーザー アカウントの作成
    • アカウント名: sugarmaint、パスワード: uenQjcP3Il/zE
    • アカウント名: supports、パスワード: uenQjcP3Il/zE
  • スケジュールされたタスクエントリの追加
    • 1分ごとに実行する
    • hxxp[://]37[.]49[.]230[.]74/k[.]phpからスクリプトのリモートコピーをフェッチする
    • タスクをシェル内で実行する

結論

脆弱なサーバーにWebシェルを埋め込む戦略は、悪意ある攻撃者にとって新しい戦術というわけではありません。高度な侵入を捕捉する唯一の方法は、多層防御戦略です。複数のセキュリティアプライアンスとアプリケーションを単一画面にまとめて調整することによってのみ、防御側はこういった攻撃を検出できます。

パロアルトネットワークス製品スイートで提供されているさまざまな保護機能のほか、WildFire、Advanced URL Filtering、脅威防御がこのサンプルのファミリに対応します。とくに、パロアルトネットワークスのお客様は以下の方法で保護されています。

  • WildFire (次世代ファイアウォール セキュリティ サブスクリプション)を通したマルウェアサンドボックスによる検出
  • Advanced URL Filteringによって、悪意あるペイロードを提供しているソースURLを分類し、アクセス試行をブロック
  • 脅威防御 (次世代ファイアウォール セキュリティ サブスクリプション)を通した、IPSおよびAppIDなど一連の防御機能

IoC

リモートの公開URL

  • hxxp[://]37[.]49[.]230[.]74/k[.]php
  • hxxp[://]37[.]49[.]230[.]74/z/wr[.]php
  • hxxp[://]37[.]49[.]230[.]74/z/post/noroot[.]php
  • hxxp[://]37[.]49[.]230[.]74/z/post/root[.]php

元のシェルスクリプト - SHA256ハッシュ

  • 000a3688455edacc1dac17539797dc98f055091898a65cd520fb8459c1bc2a2a
  • 0012342749e3bae85a9269a93661e2eb00437c71b2bca2eaca458147f9fe8471
  • 001305bd3be538e50014d42f02dee55056b73a1df770e2605aded8a970091f2f
  • 0050232e04880fbe1d0c670b711b66bb46c32febdc9513074612c90f1f24631b
  • 0059d7b736dc1e61bd5b22fff601579fbc8a12b00981fdd34fd13f0fb44688b0
  • 0088cba19eec78daee0310854c4bf8f7efc64b89bdc7517f0a1c7ebbba673f72

ローカルファイルパス

  • /var/www/html/admin/assets/ajax.php
  • /var/www/html/admin/assets/config.php
  • /var/www/html/admin/assets/js/config.php
  • /var/www/html/admin/modules/core/ajax.php
  • /var/www/html/digium_phones/ajax.php
  • /var/www/html/rest_phones/ajax.php

固有の文字列

  • ZenharPanel
  • ZenharR
  • Ask Master

追加のリソース