This post is also available in: English (英語)

概要

SolarWindsのOrionソフトウェアに対するサプライチェーン攻撃の背後にいるアクターは、高度な技術的洗練やオペレーションセキュリティへの配慮にくわえ、およそ18,000人のSolarWindsの顧客への潜在的侵害における斬新なテクニックの組み合わせを示してきました。もとの情報源からの公開内容でも示されているように、この攻撃者は、より正当な永続化方法を得た後は、最初のバックドアを削除することが観測されています。

トロイの木馬化されたOrionアーティファクトの分析で .NET .dll app_web_logoimagehandler.ashx.b6031896.dll は SUPERNOVA と呼ばれていましたが、そのオペレーションの詳細はほとんど公開されていません。

注意: SUPERNOVA WebシェルとSolarStormアクターとの関係はSUNBURSTの.dllとは異なり、前述の.dllが電子署名されていないことから疑義が生じています。これは、同Webシェルが、SUNBURSTのように、SolarWindsのソフトウェア開発パイプラインの初期段階でインプラントされたわけではなく、サードパーティによってドロップされたかもしれないことを示唆しています。Guidepoint Securityも独自にSUPERNOVAの調査を行い同様の結論を得ています。

本稿では、そのオペレーション、機能概要、高度な持続的脅威(APT)の仮説をサポートする戦術と手法、弊社がトロイの木馬化されたSolarWindsインスタンスに対して提供する保護について説明します。

  • 攻撃者は、Orionコードに組み込みの洗練されたインメモリWebシェルを作成していました。これは、インタラクティブな.NETランタイムAPIとして機能します。
  • Webシェル ペイロードはオンザフライでコンパイルされ、動的に実行されるため、エンドポイントとデジタルフォレンジック、インシデントレスポンス(DFIR)分析はより複雑になります。
  • SUPERNOVAトラフィックを防ぐため、アンチスパイウェア用シグネチャ83225を追加しました。

技術概要

従来のWebシェル攻撃では、これらのサーバースクリプトページは、バックエンドの副作用の処理に使える、ある種の対話型フロントエンド文書であることが多く、そのほとんどが何らかの形のリモートコード実行(RCE)です。基盤となるサーバーの設定ミスや脆弱性を標的にすることで、Webシェルをアップロード・ダウンロード・展開するか、2次的な永続性確保の手段としてエクスプロイト後にドロップすることがありました。Webシェル自体は通常、スクリプトページに埋め込まれたマルウェアロジックであり、そのほとんどが、インタープリタ型プログラミング言語かコンテキスト(最も一般的には PHP、Java JSP、VBScript/JScript ASP、C# ASP.NET)で実装されています。Webシェルは、リモートサーバーからコマンドを受信し、Webサーバーの基盤となるランタイム環境のコンテキストで実行されます。

SUPERNOVAのWebシェルも永続性のために設計されているようですが、その斬新さは、Unit42チームがリサーチで日常的に遭遇する従来のWebシェルマルウェアをはるかにしのぐものです。

.NETのWebシェルは割合に一般的ですが、公的に研究されているほとんどのサンプルは、コマンド&コントロール(C2)パラメータを取り込み、比較的表層レベルでのエクスプロイトを実行します。たとえば、攻撃者がインプラントにディレクトリ構造やオペレーティングシステム情報をダンプするように命じたり、ネットワークへコールバックしてより多くのエクスプロイトツールをロードしたりするのがそうしたサンプルの一例です。

SUPERNOVAは、有効な.NETプログラムをパラメータとして受け取るという点で劇的に異なります。.NETクラス、メソッド、引数、コードデータは、インメモリでコンパイルされ、実行されます。低レベルのWebシェルステージャと異なり、ディスクに書き込まれる追加のフォレンジック アーティファクトは存在せず、最初のC2リクエスト以外に追加のネットワークコールバックは必要ありません。

言い換えると、攻撃者は、Orionバイナリに埋め込みの、ステルス性が高く本格的な.NET APIを構築したということです。そしてこのOrionバイナリのユーザーは通常、高度な特権と組織ネットワーク内への高い可視性を備えています。攻撃者は、悪意のあるC#コードを使い、SolarWinds(および.NET SDKで公開されているWindows上のローカルオペレーティングシステム機能)を任意に設定することができます。このコードは、良性のSolarWindsの動作中にオンザフライでコンパイルされ、動的に実行されます。

つまり攻撃者は偵察や横展開などの攻撃段階で完全な機能を備え (おそらくは高度に洗練された) .NET プログラムを展開できるということであり、このことは非常に重要な意味をもちます。

インプラントフェーズ

インプラント自体は、HTTP APIを公開しているプロプライエタリなSolarWinds .NETライブラリであるapp_web_logoimagimehandler.ashx.b6031896.dllのトロイの木馬化されたコピーです。このエンドポイントの機能は、Orion ソフトウェアスタックの他のコンポーネントからの特定 .gif 画像へのクエリに応答することです。良性の.dllに実装された比較的高品質なコードは無害なため、防御側の自動処理、さらには手動でのレビューによってすら容易に見落とされてしまう可能性があります。

攻撃者は、API に 4 つの新しいパラメータを追加し、Orion ホスト上の .NET ランタイムのコンテキストでパラメータを実行する悪意のあるメソッドを追加することで、この良性のファイルを利用しています。下の図 1 は、Orion コンポーネントの正常または良性の内容を示しています。

このコードは、Orion コンポーネントの正常または良性の内容を示しています。42 行目は、HTTP エンドポイントに供給されるパラメータのコレクションを定義しており、その中で id のみが有効で処理されます。
図1 HTTPリクエストとそのレスポンスを処理するための良性のSolarWindsコード

42行目は、HTTPエンドポイントに供給されるパラメータのコレクションを定義しており、その中で id のみが有効で処理されます。ただし、このスニペットの前に、同じメソッドProcessRequest()内でC2パラメータが追加されていて、これと同じファイルに実行メソッドが追記されています。図2は、悪意のあるコードの一部(27~41行目)を示しています。

上の図の4つのパラメータ(code, clazz, method, args)は、トロイの木馬化されたロゴ ハンドラのエンドポイントにGETクエリ文字列を介して渡されます。
図2 4つのC2パラメータが処理され、悪意のあるメソッドDynamicRun()に渡される

上に描かれた4つのパラメータ、codes、clazz、methodおよびargsは、トロイの木馬化されたロゴ ハンドラ コンポーネントにGETクエリ文字列を介して渡されます。これらのパラメータはその後カスタムメソッド内で実行されますが、これは、単に基盤となるオペレーティングシステムやプログラミング言語の関数を呼び出すだけの典型的なWebシェルの振る舞いとは異なるものです。

C2パラメータ 目的
clazz インスタンスを生成するC#クラスオブジェクト名
method 呼び出しを行うクラスclazzのメソッド
args 引数を改行で分割し、位置パラメータとしてメソッドに渡す
codes コンパイル用の.NETアセンブリと名前空間

表1 コマンド&コントロールパラメータ

防御担当者への注意:

クエリ文字列に任意の順序でこれらの4つのパラメータの組み合わせがあるlogoimagehandler.ashx へのインバウンド方向へのトラフィックは、侵害の強力な指標(IOC)です。どのような順序であれこの組み合わせで検出が発生した場合は、直ちにOrionインスタンスを隔離してイメージングしてください。リクエストがネットワークの内部から来ている場合、リクエストを開始したユーザーも侵害されている可能性が高いです。

実行

攻撃者は、インターネット経由または内部的に侵害されたシステムを介して、埋め込まれたWebシェルにリクエストを送信する可能性があります。このコードは、有効な .NET プログラムのコンポーネントとしてパラメータを受け入れるように作られており、その後、インメモリでコンパイルされます。実行可能ファイルがドロップされることはなく(したがって、Webシェルの実行はほとんどの防御側のエンドポイントの検出を回避する)、コンパイルされたアセンブリは指定されたクラスメソッドを直ちに呼び出します。

37行目の実行を包含するかたちで27行目から始まる try/catch ブロックが追加されているのは、おそらく、オペレータエラーによりOrionでの未処理例外が発生するのを防ぐことで、不要な精査を招かないようにしているのでしょう。これは、アクターが技術上、またオペレーション上、セキュリティに注意を払っていることをしめすささやかな一例です。

このコードサンプルは、SUPERNOVAがDynamicRun()を使用してC2パラメータをメモリ内の.NETアセンブリにコンパイルする方法を示しています。106 行目と 107 行目で、無害なコンパイラ API フラグを防御側の妨害に転用している様子が観測できます。115 行目で攻撃者が指定したクラスオブジェクトのインスタンスを生成し、116 行目で攻撃者のコードを実行しています。
図3 DynamicRun() がインメモリで C2 パラメータを .NET アセンブリにコンパイル

106 行目と 107 行目で、無害なコンパイラ API フラグを防御側の妨害に転用している様子が観測できます。115 行目で攻撃者が指定したクラスオブジェクトのインスタンスを生成し、116 行目で攻撃者のコードを実行しています。

このデザインパターンは、動的コード実行として知られているものです。ソフトウェア工学の文脈では、これによりプログラムを柔軟かつ拡張可能にすることができますが、サイバー攻撃の文脈でも攻撃者のコードやツールについて同じことが言えます。

戦術、技術、および手順

多くの点で、この Webシェルは、ほかの種類の Webシェルと共通する属性も示しています。このマルウェアはサーバーに密かに埋め込まれ、リモートでC2信号を受信し、それらの信号をサーバーのユーザーのコンテキストで実行します。

しかし、SUPERNOVAは、インメモリ実行、パラメータや実行における洗練度、.NETランタイムへの完全なプログラムAPI実装による柔軟性により、斬新で強力なものとなっています。

悪意のあるバイナリのインメモリ実行は、マルウェアの振る舞いにおいて、とくに目新しい技術ではありません。この手法は通常、エンドポイントや DFIR の検出を無効にしようとする敵対者の試みを示すものです。

しかし、典型的な Webシェルでは、実行時環境のコンテキストか、サブシェルやプロセス(cmd.exePowerShell.exe、または/bin/bash)を呼び出すことでペイロードを実行しており、Webシェルでこのような振る舞いを見かけることはほとんどありません。

SUPERNOVAはオンラザフライでパラメータをコンパイルし、結果として得られたアセンブリをインメモリで実行します。このことは、検出回避とはべつに、SolarStormの攻撃者が、意図的に周囲に溶け込ませ、目に見えるかたちでトラフィックや振る舞いを隠し、痕跡証拠を残さないようにする十分な能力を備えていたことを示しています。

保護

パロアルトネットワークス製品スイートの提供する 数々の保護に加え、アンチスパイウェア用シグネチャ83225が、影響をうけるネットワークに残存する C2 インフラストラクチャの検出用に作成されました。

結論

脆弱なサーバーにWebシェルを埋め込む戦略は、悪意のあるアクターにとってとくに目新しい戦術ではありません。しかし、通常のWebシェルマルウェアと比較すると、そのコードの相対的に見た巧妙さには驚かされます。SolarWindsに対する攻撃の騒動は、SUPERNOVAで使用されているような新しい技術への関心をさらに高めてもいます。

高度な侵入を捉える唯一の方法が多層防御戦略です。複数のセキュリティアプライアンスやアプリケーションを単一のペインにまとめることによってのみ防御側はこれらの攻撃を検知することができます。

パロアルトネットワークスのお客様は、次の方法でこの脅威から保護されています。

  • Cortex XDRの提供するエンドポイント保護
  • WildFire (次世代ファイアウォールのセキュリティサブスクリプション) を介したマルウェアのサンドボックス検知
  • 脅威防御(次世代ファイアウォールのセキュリティ サブスクリプション)における IPS や App-ID などの多彩な防御
  • Cortex Data Lakeによる脅威インテリジェンス
  • Cortex XSOARによるネットワーク防御オーケストレーション

謝辞

筆者は、本リサーチに飽くことなき努力と多大な貢献をしてくださった以下のチームメンバーに感謝の意を表します。

Durgesh Sangvikarさん、Chris Navarreteさん、Hui Gaoさん、Rongbo Shaoさん、Kyle Wilhoitさん、Derrick Changさん、Alex Krepelkaさん、Byron Alvarezさん、KMAP Penaさん

IoC

SolarWinds Orion app_web_logoimagehandler.ashx.b6031896.dll

c15abaf51e78ca56c0376522d699c978217bf041a3bd3c71d09193efa5717c71

URI

logoimagehandler[.]ashx

HTTPクエリ文字列パラメータ

clazz
method
args
codes

更新履歴

  • 2020-12-25 SolaStorm脅威グループとSUPERNOVA Webシェルとの関係性について疑義が生じたことから変更された原文の変更を反映し、修正しました。
Enlarged Image