脅威リサーチ

ProxyShellの新手法? WebシェルによるZerologon悪用とアプリケーション偽装攻撃

投稿者 John Simmons | 2021年9月29日

FortiGuard LabsThreat Research Report

影響を受けるプラットフォーム: Microsoft Exchange
脅威を受ける対象:       Exchangeメールボックス
影響:             権限のないユーザーによる組織内の任意のユーザーのEメールへのアクセスと送信が可能になります。
深刻度:            クリティカル

この記事はAngelo Cris Deveraturda、Wilson Agad、Llallum Victoria、Wil Vidal、Jared Betts、KenEvansの協力により作成されました。

ProxyShellについて

FortiGuard Labsは最近、これまでにない手法でProxyShellを悪用する未知の脅威アクターを発見しました。そのため、ProxyShellを悪用された企業に詳細を確認し、FortiEDRを使用してメモリ内の不正なDLLを検知して攻撃の新しい手法を特定しました。また、脅威ハンティングによって、他の組織も被害に遭っていたことも確認しました。

これらのDLLは以前知られていなかったSHA256ハッシュ値を持っており、積極的に偵察を行い、Zerologonを悪用してハッシュ化されたパスワードを取得し、不正に取得したハッシュ情報で認証を受け、ExchangeのApplication Impersonationに潜伏していました。FortiGuard Labsではラボ環境でインシデントを再現し、これらのDLLに関連する不正なアクティビティを記録しました。このブログではその分析結果について説明します。ユーザーと将来のお客様がそれぞれの環境で類似のアクティビティの有無を判断し、適切に対応する上でお役に立てれば幸いです。

ProxyShellエクスプロイトの概要

このProxyShellのエクスプロイトは最初の発生後、すぐにサイバーニュースのヘッドラインに取り上げられました。当初は、すでに多くの組織によって報告された攻撃と同じものと思われました。ディレクトリから使用されたWebシェルの種類まで、その特徴は既存の攻撃とほぼ一致していました。しかし、FortiEDRによって相違が検知されました。メモリにロードしたDLLを使用してWebシェルでエクスプロイト後のアクティビティを実行していたのです。

DLLのロード先がvbc.exe(.NETアプリケーションのVisual Basicコンパイラ)に割り当てられたメモリ空間であり、Microsoft ExchangeのOutlook Webアプリケーションを実行するw3wp.exeプロセスからロードされていたことからFortiEDRで検知されました。このような事実とFortiEDRの機械学習アルゴリズムによって、これらは不正なファイルの可能性があると判断されたのです。

以下の図は、w3wp.exeによってvbc.exeプロセスにスレッドを挿入し、Exchangeサーバーのサービスにアクセスする方法を示しています。

図1:w3wp.exeによるスレッドの挿入とExchangeサーバーのサービスへのアクセス

Webシェルは環境内のさまざまなドメインコントローラへの接続にも使用されていましたが、メモリ内でThor.dllファイルが検知されました。このDLLはドメインの認証、セキュリティ権限の変更、ドメインアカウントの作成、Exchangeのロールへのアカウントの追加に使用されます。Thor.dllについては後で詳しく説明します。

図2:w3wp.exeによるメモリへのThor.dllのロード

図2に示すイベントは、HTTP POSTがWebシェルの1つに送信された直後に発生し、その数秒前、環境内にドメインアカウントが作成されました。そのアカウントを作成したのは正規のドメインサービスアカウントです。FortiEDRを保護モードにすると、これらのアクティビティはすべてブロックされます。その場合、ドメインアカウントの作成などのアクティビティは一切行われません。

実際のエクスプロイトでは、対話型の認証には他の環境のドメインアカウントは使用されていませんでした。攻撃者はこのキャンペーンの後半でそれらのアカウントを使用することを計画していたものと推測されます。また、ドメインユーザーアクセスのみで権限を昇格していなかったため、アカウントを使用して管理者レベルのタスクを実行することは考えていなかったようです。

これらのDLLをメモリにロードした目的を理解するために、それらの機能と振る舞いを分析しました。次のセクションではその詳細を説明します。

DLLの分析

イベントの発生時、FortiEDRによってメモリ内で検知されたDLLは合計22個ありました。それらすべてが不正なDLLとは限らず、不正なイベントに関連するDLLとして検知されました。これらのDLLはすべて.NETでコンパイルされていたため、逆コンパイルは比較的簡単でした。

最初にDLLの元の名前を取得しました。

図3:逆コンパイルで取得したDLLの元の名前

一部の名前は無作為に命名されたと思われますが、明らかに機能を示す名前もありました。さらに分析を進めると、無作為に命名されたDLLは機能を示す名前のDLLのローダーであることがわかりました。ローダーであることは、コードを逆コンパイルして「xml()」メソッドを見るとわかります。

図4:ローダーであることを示すxml()の最初の部分

「xml()」メソッドによってbase64バージョンのDLLをロードし、DLL内のメソッドを呼び出します。この例では「Axiomatic」クラスの「Elite」メソッドです。

ローダーのDLLの役割はメソッドを呼び出して出力を取得し、それを呼び出し元のWebシェルのHTTPセッションに返送し、脅威アクターにDLLの出力を提供することです。それによって、脅威アクターはWebシェルとのHTTPセッションの結果を入手できます。

図5:HTTPの応答を求めるメソッド呼び出し

これらのメソッド呼び出しをDLLにリンクさせて、PowerShellを悪用したアクティビティを再現しました。結果は以下の通りです。各DLLの説明とともにWebシェルのHTTPセッションで返された出力のスクリーンショットもご覧ください。

GetEcpWebConfigModule.dll

このDLLはExchangeサーバーからExchangeコントロールパネル(ECP)のWeb.configファイルを取得するのに使用します。それによって、脅威アクターは内部のECPの設定の一部にアクセスできるようになります。web.configファイルの詳細については、こちらをご覧ください。

図6:GetEcpWebConfigModule.dllの出力

DomainGroups.dll

このDLLはActive Directoryのすべてのドメイングループを取得するのに使用します。それによって、脅威アクターは標的の環境の階層に関する情報を入手します。

図7:DomainGroups.dllの出力

DnsDump.dll

このDLLはDNSタイプAのエントリを取得するのに使用します。それによって、脅威アクターは環境内の他のマシンも標的にすることができます。また、ホスト名をIP(またはその逆)に変換する場合、正引きと順引きのデータベースも提供されます。

図8:DnsDump.dllの出力

OrganizationManagement.dll

このDLLはユーザーグループ「Organizational Management」のユーザーのリストを取得するのに使用します。このグループのメンバーにはExchangeサーバーでの役割とアクセス許可の作成や変更に必要なアクセス権があります。

図9:OrganizationManagement.dllの出力

ExchangeServers.dll

このDLLはドメイン内のExchangeサーバーのリストを取得するために使用します。それによって、攻撃者は必要に応じて他のExchangeサーバーも標的できます。一部の環境は階層を構成し、役割によって異なるExchangeサーバーが割り当てられるため、脅威アクターはこの情報を使用して標的にするサーバーを判断します。

図10:ExchangeServers.dllの出力

DiskInfo.dll

このDLLはローカルホストのドライブに関する情報を取得するのに使用します。脅威アクターはこの情報を使用してExchangeデータベースを格納したハードドライブを特定します。

図11:DiskInfo.dllの出力

Computers.dll

このDLLはドメイン内のワークステーションのリストを取得するのに使用します。それによって、脅威アクターは環境の規模を把握し、追加の攻撃を開始するのに最適な場所を判断します。

図12:Computers.dllの出力

SystemInfoModule.dll

このDLLはビルド名、ハードウェア情報、OSなど、システムに関する情報を取得するのに使用します。それによって、脅威アクターはさらに攻撃を仕掛けたり、潜伏してアクセスを維持するのに必要な情報を入手したりします。

図13:SystemInfoModule.dllの出力

SystemService.dll

このDLLはローカルシステムで実行しているサービスのリストを送信するのに使用します。それによって、脅威アクターはシステムにインストールされたセキュリティソフトウェアのリストを取得します。この情報は特定のセキュリティ製品を回避する場合などに使用します。

図14:SystemService.dllの出力

Machine.Modules.ZerologonInterface.dll

このDLLは指定された(パラメータとして渡された)ドメインコントローラがZerologonに脆弱であるかを確認するのに使用します。脆弱である場合はユーザー名とハッシュ化されたパスワードが返されます。その後、ドメインコントローラのコンピュータハッシュは元の状態に復元されます。このZerologonを悪用したメソッドの詳細を説明した文書があります。こちらの「Case 2 – DC Password Reset with Original Password Reestablished」のセクションをご覧ください。

図15:Machine.Modules.ZerologonInterface.dllの出力

Thor.dll

このDLLはZerologonでダンプした認証情報を使用して認証を試行し、healthmailboxアカウントになりすますためのドメインアカウントを作成するのに使用します。また、Exchangeの役割ベースのアクセス制御(RBAC)で役割を作成して、Microsoft Exchangeに組み込まれているApplicationImpersonationの役割に割り当てるのにも使用します。それによって、脅威アクターは環境内の任意のメールボックスにアクセスしてEメールを送信できます。それらのオブジェクトのアクセス許可を制限することもできます。

図16:Thor.dllの出力とその説明

Exchangeで作成した役割の割り当てと「ApplicationImpersonation」の役割も確認できます。

図17:Exchangeの役割ポリシーの出力と脅威アクターが作成した役割
図18:役割に追加されたApplicationImpersonationの役割

ApplicationImpersonationは複数のメールボックスにアクセスする必要がある場合、各メールボックスの所有者に「偽装」することができる機能です。そのため、この攻撃でもこの機能を悪用してドメインのメールボックスにアクセスしています。EWSを使用したアプリケーションの偽装の詳細については、Microsoftのドキュメントを参照してください(https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/impersonation-and-ews-in-exchange)。このEメールの攻撃手法は非常に珍しい上に、脅威アクターは作成したアカウントを標的のメールボックスの偽装に使用していなかったため、その目的は現在もわかりません。

ProxyShellのまとめ

FortiGuard LabsはFortiEDRを使用して、ProxyShellの脆弱性を悪用したWebシェルによってメモリで実行されたDLLを検知しました。シミュレーションではブロックできましたが、DLLをブロックしていなかった環境では、その後、アクティビティは一切行われず、その目的も特定されませんでした。ただし、その脅威アクターはこれまでにない希少な手法を使用して、組織のメールボックスへのアクセスを維持しようとしていたことだけは明らかになっています。

フォーティネットのソリューション

FortiEDRではメモリ内の不正なDLLが検知されてブロックされます(有効にした場合)。

FortiGuard AntiVirusサービスはこのブログに記載されたすべてのペイロードの検知とブロックに対応しています。 

IOC(Indicators of Compromise:侵害指標)

SHA256のハッシュとDLL

Computers.dll

EB4EF1B588AD5027409B4D6B5643E25E456B14A5175EFFCF866B31C2CCD35FC3

DiskInfo.dll

2AF411EA82384F7C41954E5CE4755709E80DA75C57357D62208018137111DDD3

DnsDump.dll

F1E4E139EA33385E672A7EB35BF5B33570709FB004B5C6884D12610D28C94797

DomainGroups.dll

3112BE27CB28AEDD9334567A0E24569EC3D5F75414539E17433E4B4F27AA9470

ExchangeServers.dll

5E0FE024A39D0AF4F045DC6770A00F4E9FFBAB1D71C68360331CF8A8BB16BC18

GetEcpWebConfigModule.dll

CDD79F442519B0F48DDC7A1A699DFCE8E597445975F84BFAC51A2F0BA80F1237

Machine.Modules.ZerologonInterface.dll

A46B18A07B1509B15EB7FC6CF876888DC780962A3F850DC3B3EE5C7FBBEE723C

OrganizationManagement.dll

28D983C235F2C5420AE596CDC3AAEF65D953E76F935B73708DA8E47072ED66B8

SystemInfoModule.dll

FC73324432E7BB3FAAF08527E462D26D0E4B3D1095BF7CA09BA04DD5B4E71664

SystemService.dll

4E8EA9B3261B49597EF6D37DD252B37CA2BD162713B900EA25A65CCDB9B98DE5

Thor.dll

AFD7E5431E86BAA55A6FDCB8CE81F1E7EEA158BA388D08C59678789AF6FE7C0E

表1:DLLの名前とSHA256のハッシュ

アカウント名

Healthmailbox<任意の英数字7文字>