本ブログ記事は、2021年11月10日に米国で公開されたBlackBerryのブログ記事の抄訳版です。原文はこちらからご覧頂けます。
概要
2021年11 月第 2 週、米国および欧州の法執行機関が REvil ランサムウェアグループに関する新たな差し押えと逮捕を発表しました。そこでは、このような悪意のあるキャンペーンに対する強い関心と怒りが明確に示されていました。また、こうした動きは、セキュリティの専門家がこのグループとそれに関連するマルウェアファミリーの内情を十分に理解し、組織と利害関係者をより適切に保護する必要性が差し迫っていることを浮き彫りにしています。この記事では BlackBerry のインシデント対応チームによる最近のインシデント対応から得られた洞察を紹介しながら、REvil の最新の戦術、技法、手順(TTP)を詳しく解説します。
Gootkit
REvil はネットワークへの初期アクセスを獲得するために「水飲み場攻撃」を行うことで知られています。この攻撃は、標的とするユーザーがアクセスする可能性が高いと考えられるサイトを侵害することによって行われます。今回の事例では、REvil のグループは Gootkit ローダーを含んだ ZIP アーカイブを侵害されたサイトに掲載していました。このサイトは、狙われた被害者がよく検索する用語について説明する情報ページを装っています。ユーザーが侵害されたサイトにアクセスした際には、ページが hxxps://fibarokrakow[.]com/about[.]php にリダイレクトされ、Gootkit ローダーの ZIP ファイルがダウンロードされていました。そして ZIP ファイルが開かれると、wscript.exe 経由で JavaScript のペイロードが実行されていました。
Gootkit ローダーの実行後は、難読化が解除された最終的なコードスニペットが以下の処理を実行します。
- 3 つのドメインを格納した配列を繰り返し処理する。
- 各ドメインに対し、ダウンロード URL の一部として使用する乱数を生成する。
- 各ドメインに対し、エンドポイント「search.php」、ある固定の値(詳細略)、および生成した乱数を含むフォーマット文字列を使用して HTTP GET リクエストを実行する。
- GET リクエストに対する応答が値 200(「OK」)かどうかを確認する。
- GET リクエストに成功した場合、ダウンロードしたコンテンツを追加のコードとして実行する。
ではここから、Gootkit ローダーの詳細な解析と、その実行後に続けて行われる活動について説明していきます。
初期状態の JavaScript ファイルには、「knew」という変数の中に難読化されたコードが埋め込まれていました。
注目すべきは electric[4438089] = third です。これにより、呼び出し元の while ループに戻ってから次に実行する関数がセットされています。このようにして、複数の関数が配列 electric[] の異なる配列位置に代入される仕組みとなっています。sleep() 関数(上図ではコメントアウト済み)をもう一度実行した後、indicate() 関数は後にデコードされる文字列を変数 knew に代入しています。
while ループの繰り返しを省略して解析を加速するために、関数を直接呼び出すように round() 関数を修正することができます。こうすれば、ループが変数 race の値を 1 ずつ加算し続けるのを待つ必要はありません。
上図では、ローダーがホスト上に残す重要な侵入の痕跡(IOC)である以下のレジストリキーが確認できます。
- HKCU\\Oifmb
また、キーの存在が確認され、なければ新規作成されています。その次にあるのは別の難読化されたコードで、multiply() 関数を呼び出してデコードされています。multiply() 関数が戻る地点にブレークポイントを設定すると、難読化が解除された最終的なコードが確認できます。
ローダーの全体的な構成は解析できたものの、この事例の最終段階でダウンロードされていたと思われる JavaScript の完全なコピーは取得できませんでした。脅威インテリジェンスの活用により類似のコードは見つかっていますが、完全には一致していません。
BloodHound と Kerberoasting 攻撃
Gootkit のインストールを終えた REvil は、システムへの永続的アクセスをすぐには利用せず、システムに接続して攻撃経路の列挙を開始するまでに 3 日間待機していました。脅威アクターによる最初の「ハンズオンキーボード」活動の痕跡は、感染したユーザーのプロファイルディレクトリ内に残された _BloodHound[.]zip という BloodHound の出力ファイルでした。なお、 はデータが取得された時刻です。
BlackBerry がこの BloodHound 出力ファイルのコピーを取得し、脅威アクターが悪用していた可能性のある攻撃経路を列挙したところ、「Kerberoastable」が可能な 3 つのアカウント経由でドメイン管理者(Domain Admins)に至る経路が見つかりました。この攻撃経路は以下のようなものでした。
横展開と列挙
複数の高特権アカウントへのアクセスを獲得した後、脅威アクターはリモートデスクトッププロトコル(RDP)経由でネットワーク内の他のホストへのピボットを開始していました。さらにそこから、他のホストで動作する Windows Defender のサービスを停止するために PsExec ツールも使用していました。
コマンドアンドコントロール
脅威アクターは、Cobalt Strike のコマンドアンドコントロール(C2)機能をメモリ上にインストールする手法を 2 種類用いていました。1 つ目の単純な手法では、簡易にエンコードされた PowerShell コマンドによって Cobalt Strike ステージャが実行されていました。確認された Cobalt Strike ステージャの抜粋を以下に示します。
この 2 つの実行可能ファイルを抽出すると、これらは Cobalt Strike Beacon であり、以下の 2 つの IP アドレスに到達するように構成されていることが判明しました。
- 139.180.172[.]42
- 155.138.216[.]60
コマンドアンドコントロール – レジストリへの PowerShell 格納
BlackBerry のインシデント対応チームは、Cobalt Strike をステージングするための PowerShell コマンドがレジストリキー「HKLM:\SOFTWARE\Microsoft\PowerShell\info」に格納されていることも発見しました。これが C2 機能をインストールする 2 つ目の手法です。脅威アクターは、以下の処理を実行するリモートサービス経由でこの PowerShell を実行していました。
さらなる解析のためにレジストリキーの内容を抽出しましたが、残念ながらシステム上で実行した PowerShell コードでは変数 pdqnas などが未定義となっており、そのままではデコードできないようでした。
しかし、REvil のグループによる別の VBScript や JavaScript の実装で、同様の手法と実行手段を用いているものが入手可能でした。同等の機能を持つ以下の JavaScript ローダーを用いたところ、このレジストリキーをデコードすることができました。
上記の JavaScript ローダーでレジストリキーをデコードすると、Cobalt Strike Beacon の詳細がわかりました。この Beacon はコードインジェクション済みの正規 Windows コマンド gpupdate.exe のバイナリを実行時に生成するように構成されており、またその注入コードはポート 443 を介して以下の IP アドレスに到達するように構成されていました。
- 216.128.128[.]98
データの持ち出し
REvil のグループはランサムウェアの展開前にデータを持ち出すことで知られています。潜在的な持ち出し活動を特定するため、BlackBerry のインシデント対応チームは複数のフォレンジックアーティファクトを調査し、よく使われる持ち出しツールの使用や、機密性の高いフォルダーまたはファイル共有の列挙を特定しようと試みました。脅威アクターは PowerSploit の PowerShell モジュールを使用してネットワークを探索し、持ち出し対象となる機密データを含んでいる可能性のあるファイルサーバーを探していました。
そのようなファイルサーバーが見つかると、脅威アクターは通常、利用可能な共有リソースを列挙し始めます。機密性の高いファイル共有またはフォルダーの列挙を特定するためには、UsrClass.dat のレジストリハイブ内にある Windows ShellBag のアーティファクトが最も役に立ちます。今回の事例では、脅威アクターはプライマリファイルサーバー上で多くのフォルダーにアクセスしており、組織の最重要資産(いわゆる「Crown Jewel」)を特定しようとしていたものと思われます。
こうした列挙活動に加えて、ShellBag に対する列挙が行われた直後に同じシステムから FreeFileSync ユーティリティが実行されていました。残念ながら、脅威アクターが FreeFileSync に関連するログを含むフォルダーを削除していたため、システム上でこのユーティリティが実行された時点からの Windows イベントログは取得できませんでした。しかし、ファイルカービングとメモリ解析を行うことで、インシデント期間中の Windows イベントログを(すべてではないにせよ)数多く抽出することができました。そして、Windows フィルタリングプラットフォームによって許可された接続を追跡するための Windows イベント ID 5156 から、FreeFileSync が Google 社所有の IP アドレスに接続していたことがわかりました。この様子を以下の図に示します。
また、システムから Google 社所有の IP アドレスに向かう方向のファイアウォールアクティビティを解析したところ、数ギガバイト相当のネットワークトラフィックが FreeFileSync から送信されていたことが判明しました。BlackBerry では、REvil のグループが FreeFileSync を用いて Google Drive™ にデータを持ち出していた可能性が高いと判断しています。
ランサムウェアのインストール
環境にランサムウェアを展開する前に、脅威アクターは PowerShell とスケジュールタスク経由で再び Windows Defender の機能を無効化しようとしていました。グループはランサムウェアを環境全体に展開するのではなく的を絞っており、Hyper-V のホスト、より具体的には仮想マシン(VM)を含んだクラスタ共有ボリューム(CSV:Cluster Shared Volume)を標的としていました。CSV にランサムウェアが展開される直前には、PowerShell 経由で VM と Hyper-V のサービスが停止されていました。
REvil/Sodinokibi ランサムウェアには各種パラメータを決める構成が含まれており、暗号化の対象とするファイル拡張子や、暗号化ルーチンの開始前に強制終了するプロセス、標的となる OS へのダメージを避けるために除外するディレクトリや拡張子などが決定されます。Sodinokibi ランサムウェアについては、BlackBerry の脅威リサーチチームによる以下の記事で詳しく解説しています。
ハンティング
今回のような侵入を検知して未然に防御するためには、徹底した防御策を適用することが重要です。BlackBerry では、攻撃チェーンの初期段階で脅威グループを検知して根絶できていたであろうタイミングをいくつか特定しています。侵入防止は重要な防御策ですが、この種のランサムウェアイベントの蔓延を未然に防ぐためには、堅牢な侵入検知体制も同様に、あるいはそれ以上に欠かせないものです。アンチウイルス/EDR ツール、エンドポイントのイベントログ、ネットワークアプライアンスを 24 時間 365 日体制で監視していれば、大規模侵害に至る前にこのイベントを検知し、未然に防ぐことができたはずです。
BlackBerry は今回のインシデントで複数の TTP を特定しました。これらを以下のように監視することで、脅威検知に役立てることが可能です。
- エンコードされた PowerShell コマンドや潜在的な Web リクエストの監視
- BloodHound が生成する出力ファイルの監視
- FreeFileSync や PsExec といったデータ転送ツールとリモート管理ツールのベースライン策定、および基準外ソフトウェアの監視
- Mimikatz、ProcDump、comsvcs.dll といった一般的なパスワードダンプ手法の使用状況の監視
- Advanced IP Scanner や PowerSploit コマンドといった列挙ツールの使用状況の監視
・お問い合わせ:https://www.blackberry.com/ja/jp/forms/enterprise/contact-us
・イベント/セミナー情報:https://www.blackberry.com/ja/jp/events/jp-events-tradeshows
・BlackBerry Japan:https://www.blackberry.com/ja/jp