** 本記事は、Intervention halts a ProxyLogon-enabled attack の翻訳です。最新の情報は英語記事をご覧ください。**
最近終了した案件で、Sophos Rapid Response チームが Exchange Server を標的とした攻撃の調査を任されました。この調査の最中に対応担当者は、攻撃者が依然として標的のネットワーク内で活動していたことを発見し、手動制御によってゆっくりと進行していたその攻撃を、甚大な被害が発生する前に防ぎました。
標的となったのは、北米中に 1 万 5,000 件のエンドポイントを抱える大企業です。ソフォスが発見したその攻撃は、この会社の Exchange Server に対する ProxyLogon エクスプロイトの使用から始まっていました。
この攻撃で際立っていたのは、初期段階ではあまり使用されない市販のリモート管理ツールを組み合わせて使用していたこと、また、この種の攻撃でよく見られる (フォレンジック分析で検出されやすい) 攻撃手法、たとえばネットワーク内のマシンを制御するために RDP を広く使用することなどを慎重に避けていたという点です。ただし、攻撃者はマシンからマシンへ移動する際にはネットワークをスキャンした上で、Cobalt Strike を展開していました。
2 週間余りの期間に発生したこのインシデントにおいて、攻撃者は保存されていた認証情報を Exchange Server からダンプし、ネットワーク内の他のマシンに移動するためにその一部を利用していました。また、この攻撃では Remote Utilities と呼ばれる市販のリモートアクセスソフトウェアツールを利用していましたが、ネットワーク内での RDP の利用は、1 つのマシンにつき 1 セッションに限定していました。おそらく目立つことを避けるためでしょう。
攻撃の初期段階と使用ツール
3 月 16 日に当該の脆弱なサーバーは侵害を受けており、ログエントリーによれば、攻撃者は 2 つの脆弱性 (CVE-2021-26855 と CVE-2021-27065) を利用して、サーバー上で悪意のある PowerShell コマンドを実行していました。
その後 90 分以内に、攻撃者は侵入したコンピューターからドメイン管理者のアカウントを列挙し、オフラインでパスワードをクラッキングできるように認証情報をメモリからダンプし、コンピューターのレジストリキーを変更して、保存されている認証情報をメモリから削除しました。この最後の操作によって、ユーザーは次回マシンを使用した際に、現在のパスワードによって強制的にログインされる仕組みでした。
パスワードのダンプファイルは、攻撃者が Outlook Web Access のパブリックな Web インターフェースから直接回収できる場所に残されていましたが、電子メールを確認するためだけにサーバーを使っていた従業員にとっては気付きにくい場所でした。
攻撃者は、それから 1 日 おいて 3 月 18 日に戻ってきて、標的ネットワーク内を水平移動 (ラテラルムーブメント) することで、複数のマシンに新しい拠点を確立しようとしました。認証情報をメモリから再びダンプし、WMI と PowerShell を利用して、ネットワークの他のマシンにコマンドを発行しました。
これは明らかに、情報収集を行った上で「多くのマシンに対する制御を確立する」段階です。攻撃者は ADRecon というツールでネットワークをマッピングし、のちのピボット先となる多くのマシンを特定しました。リモートから PowerShell コマンドを使って、他の社内マシンの LSASS からメモリをダンプし、そのダンプファイルを最初の拠点である Exchange Server に戻して、さらに多くの認証情報をオフラインで抽出していました。
またこの時、最初の悪意のあるペイロードを Exchange Server 上で実行し、ネットワークへのバックドアをセットアップしました。そのペイロードは Chisel と呼ばれるオープンソースのユーティリティで、Github ページでは「SSH で保護されて HTTP で転送される、高速の TCP/UDP トンネル」と紹介されています。Chisel は ADRecon と同様、元々は悪意があるものではありませんが、今回のように攻撃に利用される場合があります。
また攻撃者は、PowerShell バックドア「bot.ps1」をリモートでインストールするコマンドや、Cobalt Strike ペイロード「cobalt.ps1」を引き出して実行するスクリプトをネットワーク上の複数のマシンで実行していました。
攻撃者は、この攻撃で使用したツールの大規模なコレクションを自ら構築しています。詳細は以下で解説します。
攻撃者はセキュリティよりも利便性を重視
このような努力にもかかわらず、攻撃者が採用したセキュリティは、特段優れたものではありませんでした。複数のマシンに admin というアカウント (パスワードは「P@ssw0rd」) を作成し、Administrators (管理者) グループに追加しました。
しかし攻撃者はこれらのアカウントでログオンしていません。順次、LSASS のメモリダンプから抽出したネットワーク管理者の認証情報を使って、あるマシンから別のマシンにリモートデスクトップで 1 度だけ接続し、そのリモートマシン上で bot.ps1 ツールを実行していました。
さらにこのアクセスの際、Remote Utilities という市販の IT ヘルプデスク向けアクセスツールをインストールし、その 3 日後には Cobalt Strike ビーコン (当記事執筆時点では有効な盗難デジタル証明書で署名済み) を一部のマシンにインストールしました。
Cobalt Strike ビーコンはランダムな名前が付けられた DLL で、C:\Windows\Temp ディレクトリから、bot.ps1 バックドアを介して発行されたコマンドによって実行されました。これらのペイロードはすべて、OASIS COURT LIMITED に割り当てられた、2021 年末まで有効期限のある Sectigo 発行の証明書によって署名されており、yahoo.com の電子メールアドレスに関連付けられていました。
攻撃者はその後 1 週間、沈黙していました。そして 3 月 27 日に別の Cobalt Strike ビーコンをメモリ内で実行しようとしましたが、ソフォスのエンドポイントプロテクションツールによって阻止されました。3 月 29 日、攻撃者は (窃取した管理者の認証情報を使用して) Active Directory サーバーの偵察を行い、その結果を一連の CSV ファイルにエクスポートし、1 つの Windows .cab アーカイブファイルに圧縮しました。
攻撃者はその後数日間、限られた数の行動を起こすだけのゆっくりとしたアプローチを続けました。ソフォスは、3 月 30 日に別の Cobalt Strike ビーコンの実行を検知、停止し、攻撃者が特定した 4 台のサーバーに対して bot.ps1 バックドアを展開しようとしていた PowerShell コマンドもブロックしました。攻撃者はその後、Cobalt Strike ビーコンを再コンパイルしソフォスの検知を回避しようとし、3 月 31 日に再び試行しました。
4 月 1 日までの段階で、攻撃者は市販の Remote Utilities ツールを使用し、パリにあるコンピューターから、標的となる社内サーバーへの接続を開始しました。この接続の最中、Mimikatz のコピーや p.ps1 という名前の新しい PowerShell スクリプトなど多数のマルウェアファイルを配信し、さらに追加で別のマシンに管理者権限を持つ新しいユーザーを作成しました。また、Chisel の実行ペイロードの 1 つを Sophos.exe と名付けた上で Windows のディレクトリにドロップし、実行しようとしていました。
4 月 2 日、標的となった企業は拡大する問題に対処するため、Sophos Rapid Response を利用することを決定しました。ソフォスは数時間のうちに、ネットワーク上に配信された多数の悪意あるプログラムを特定しました。この攻撃は社内の IT インフラストラクチャ全体にランサムウェアを配信する前段階のようでしたが、ソフォスはそれ以上の被害を未然に防ぐことに成功しました。
攻撃に使用するために作成されたツール
攻撃者は、PowerShell リモートアクセスツールの bot.ps1 の他にも一連の PowerShell スクリプトを作成し、bot.ps1 のコア機能を強化するためのモジュールとして展開していました。このスクリプトは標的のネットワーク上で偵察を行い、攻撃を完了するために必要な権限を獲得することを目的として実行されます。
- Module_AMSIBypassMaybe_regthrgrwfgterw.ps1: このドロッパーは 32 ビットまたは 64 ビットの DLL をペイロードとして配信し、AMSI ベースのマルウェア検出を回避する目的でペイロードのエントリーコードにパッチを適用します。
- Module_RunPsExecMaybe.ps1: 名前とは裏腹に、このモジュールと Windows PSExec ユーティリティとの関連はありません。「RemoteBulletFile」として参照される、PowerShell バックドアを実行するサービスエントリーを作成します。
- Module_ADRecon.ps1: 文字通り ADRecon のための PowerShell スクリプトを Github ページから直接呼び出すオンラインスクリプトです。
- Module_RunByWMI.ps1: PowerShell バックドアをリモートコンピューターにコピーするスクリプトです。Module_RunPsExecMaybe.ps1 との唯一の違いは、こちらは C&C アドレスを定義するための $urlConsole という変数を含んでいる点です。
- Module_GetAllServers.ps1: 現在のドメイン、およびドメインにホストされている物理マシンや仮想マシンに関する情報を収集します。
- Module_GetDomainControllers.ps1: ドメインコントローラーについての情報 (ホスト名、OS のバージョン、稼働状況など) を収集します。
- Module_EnumerateAdmins.ps1: ドメインの管理者、エンタープライズ管理者、ドメインユーザーの情報を収集します。
- Module_Mod-EnumerateHyperV.ps1: ドメイン内の HyperV 仮想マシンに関する情報を列挙、収集します。
攻撃から得た教訓
今回の攻撃者は狡猾に回避を行っていました。RDP の使用を極力避け、市販の IT 管理ツールを使うことで行為の真意を隠し、目立たないようにしていました。最初のアクセスこそ取り掛かりやすい Exchange Server を介して行われましたが、最終的なペイロードの投下に必要なレベルのアクセスを得るための経路が限定的であることは理解していました。
幸運にもこのケースでは、標的はこの破壊的なペイロードの被害は受けませんでした。SophosLabs と MTR が迅速に攻撃者のアクションに対抗したおかげで、被害の拡大を防ぐことができました。最大の被害は、全従業員がパスワードの変更を余儀なくされたこと、といった程度で済みました。
ソフォスが調査を行ったこの種の攻撃では、最終的に届けられるのはランサムウェアのペイロードです。攻撃者が、自分たちでカスタマイズしたツールがセキュリティ製品によってブロックされ始めたことに気が付いた場合、ネットワークへのアクセスをすべて失う前にランサムウェアの展開へと直ちに移行することが多くあります。それに対しソフォスが展開した措置によって、攻撃の最終段階は阻止されました。
標的となった企業がソフォスのチームに述べたところでは、同社は Exchange Server には正しくパッチを適用したと思っており、Microsoft から提供されたスクリプトを使って、サーバーが侵害を受けているかどうかをテストしていました。しかし、残念ながらこの企業は、後に Microsoft が修正を施すことになるスクリプトを信用しすぎていました。後日 Microsoft が修正を行なった最初のテストではサーバーが侵害されていないことが確認されましたが、修正したスクリプトを使用して追跡テストを行ったところ、実際にはサーバーが乗っ取られていたことが判明しました。侵入の有無を確認するスクリプトを実行したのは確かに有益な行動でしたが、逆にテストスクリプトだけに依存して安心してはいけない、という教訓でもあります。
ソフォスもこの攻撃に対応する中で教訓を得ました。たとえ攻撃者が見慣れないツールを使っていても、攻撃の特徴を捉えることが大事だということです。メモリ上で Cobalt Strike の起動を検出したことはそのような特徴の 1 つで、一般的に攻撃の指標とされる事象の多く (ログエントリーに表示される長期にわたる RDP の広範な使用など) が観察されなかったにもかかわらず、深刻な (大きな損失をもたらしうる) 攻撃が進行中であることをお客様に説明することができました。
検出と IoC (セキュリティ侵害の痕跡)
ソフォスでは、この攻撃に関連するペイロードを Mem/Meter-A、Troj/PSDrop-CV、AMSI/Cobalt-E、Troj/PS-FX として検出しています。SophosLabs は、この攻撃に関連する IoC (セキュリティ侵害の痕跡) を Github ページで公開しています。
謝辞
SophosLabs は、Peter Mackenzie、Vikas Singh、Gabor Szappanos と、このお客様を保護し、このレポートの下地となるような研究を行なった Rapid Response チームに謝意を表します。