MITRE Evaluations の Turla(2023)の個人的な分析(その2) | reverse-eg-mal-memoのブログ

reverse-eg-mal-memoのブログ

サイバーセキュリティに関して、あれこれとメモするという、チラシの裏的存在。
medium(英語):https://sachiel-archangel.medium.com/

Mitre Engenuity Att&ck Evaluations Turlaのシナリオ

今回のシナリオは、「Turla」による水飲み場攻撃の拠点構築、および水平展開による情報窃盗環境の確立が主なシナリオです。

シナリオについては、公式が解説しています。「Result」でそれぞれのシナリオを参照し、参加したいずれかのベンダーを参照すると、それぞれの項目の最初に項目の概要が書かれています。

 

https://attackevals.mitre-engenuity.org/results/enterprise?evaluation=turla&scenario=1

https://attackevals.mitre-engenuity.org/results/enterprise?evaluation=turla&scenario=2

 

項目ごとにばらけてしまっていてざっくり見るのに多少手間なのと、私自身英語でぱっと読めないこともあるので、今回はそれを日本語でざっくりまとめてみます。

 

 

 

一般の人でも分かりそうなレベルの超ざっくり解説

シナリオについて、可能な限りざっくりと意味が分かるように説明しています。分かりやすくするため多少デフォルメしていることもありますので、正確性を重視するならMITREのサイトを観に行くことをおススメします。

間違っていたら指摘してクレメンス)

 

シナリオ1 Carbon

  1. ユーザがスピアフィッシングに引っかかり、ソフトウェアアップデートを偽装したマルウェアに感染していまう。
  2. マルウェアはexplorer.exeの内部で実行(インジェクション)され、感染端末内で調査できるプロセスやマシンの情報を収集し、HTTPS通信を確立する。
  3. コマンドを実行し、結果をAES暗号化します。さらに、ViperVPNSvcに関する端末内の情報を調べ、権限昇格のために一部の情報を書き換えます。
  4. 攻撃の永続性を維持するために、CARBON-DLLマルウェアに感染させます。マルウェアは攻撃者のコマンド&コントロールサーバにHTTPで接続して暗号化されたコマンドを受け取り、それを実行して結果を暗号化します。
  5. ドメイン管理者のアカウントに対し、弱いパスワードを探すためのパスワードスプレー攻撃を実行します。また、新たなマルウェアをダウンロード、システムフォルダに移動し、タスクスケジューラを操作してマルウェアをインストールさせます。
  6. Mimikatz(認証情報を収集するために使うマルウェア)を別の名前でダウンロードし、実行して認証情報の窃盗を行います。
  7. Mimikatzによって発見された認証情報を用いて他の端末に侵入し、マルウェアの感染を行います。
  8. キー入力による認証情報入力を盗むためにキーロガを実行し、キーボード入力を記録します。
  9. 盗んだ認証情報により、被害組織内にあるApacheサーバが稼働しているLinuxに侵入します。Linux上で実行するマルウェアをコピーして実行し、cronに偽装したマルウェアを展開、実行します。この偽装されたcronは、通信情報を監視・窃盗します。
  10. 侵入した被害組織のLinux上に、閲覧したユーザが不正なJavaScriptをダウンロードして実行したり、不正なサイトにリダイレクトするような、「水飲み場攻撃」にWebサイト環境を改造します。

 

シナリオ2 Snake

  1. 「水飲み場攻撃」に改造されたWebサイトにアクセスしたユーザは、偽のサイトにリダイレクトされ、正規ソフトウェアに偽装されたマルウェアをダウンロードします。このマルウェアを実行すると、攻撃者のコマンド&コントロールサーバにHTTPSで接続します。
  2. 新たなマルウェアをダウンロードして実行します。マルウェアは脆弱性を利用して権限昇格し、脆弱なドライバを利用してドライバ署名の強制を無効化し、ルートキットドライバーをインストールします。ルートキットドライバーは、最終的に別のマルウェアをブラウザプロセス内で動作するようにインジェクションし、そのマルウェアは攻撃者のコマンド&コントロールサーバにHTTPで接続します。
  3. 感染した端末内で、端末に関する様々な情報を収集します。結果は名前付きパイプに書き込まれます。
  4. 更なるマルウェアをダウンロードし、リモートアクセスした端末にそのファイルを書き込んで実行します。リモートアクセスされた端末はマルウェアに感染し、攻撃者のコマンド&コントロールサーバにHTTPで接続します。
  5. 被害端末上でpowershellを実行し、Active Directoryに関する情報を収集します。
  6. 管理者の端末に侵入するために、ファイルサーバなどの被害端末から認証情報を取得します。手法として、Mimikatzなどのマルウェアを名前を変えてダウンロードし、実行します。
  7. 管理者の端末に水平展開し、同様にルートキット等マルウェアをインストールして攻撃者のコマンド&コントロールサーバにHTTPで接続します。端末内でトークンを偽装できる管理者アカウントを発見し、そのアカウントのアクセストークンを使って新たなドメイン管理者アカウントを作成します。
  8. Exchangeサーバへ水平展開し、LightNeuron(マルウェア)をインストールします。
  9. Exchangeサーバ上のマルウェアと攻撃者のコマンド&コントロールサーバは、メールを使って通信します。コマンドやデータの受け渡しは、偽装した画像の添付ファイル(ステガノグラフィー)を利用します。また、Exchangeサーバ上のマルウェアは被害組織内に届いた電子メールの情報を収集します。

 

公式に書いてある内容をかなりデフォルメしています(意訳っぽくしている部分もある)が、概ねこんなことをしていると思ってください。

今回のシナリオでは、様々なマルウェアを追加でダウンロードし、色々な方法で感染させていることが特徴の一つです。

また、攻撃の拡大にはやはり水平展開(Lateral Movement)が頻繁に利用されており、このあたりのテクニックは割と昔と変わらないことをやっている印象です。

 

 

もうちょっと専門的な用語も含めた解説

ある程度以上知識があり、専門用語がわかる人向けに、もうちょっと詳しくシナリオを見てみましょう。

 

シナリオ1 Carbon

  1. 初期侵入
    • ユーザは、メールのリンクをクリックし、「NTFVersion.exe」をダウンロードして実行する。
    • NTFVersion.exeのリソースセクションには、mxs_installer.exeが埋め込まれており、%TEMP%環境変数のフォルダに出力される。
    • NTFVersion.exeは、ログオンユーザのWinlogonレジストリキーにシェルキーを追加し、Windowsの認証時にインジェクターが実行されるよう仕向ける。
  2. 初期アクセスの確立
    • 再度のログオンにより、インジェクターが実行される。EPIC Guard DLLがmxs_installer.exeのリソースセクションに埋め込まれており、CreateRemoteThread APIを介してexplorer.exeにインジェクションする。
    • EPIC Worker DLLがEPIC Guard DLLのリソースセクションに埋め込まれており、インターネットに関するプロセス(iexplore.exe、msedge.exe、firefox.exe など) を検索した上でそれらにEPIC Worker DLLをインジェクションする。
    • EPIC Worker DLLは、端末内の情報を列挙するAPI等を利用してローカルの情報を収集してファイルに出力する。
    • 収集されたデータはbzip2で圧縮され、Base64で符号化された後、攻撃者によって侵害されているproxyサーバにHTTP通信で送信する。
    • 以後は、bzip圧縮、AES暗号化、Base64符号化されたデータでC2サーバと通信する。
  3. 情報収集および権限昇格
    • ホスト内の情報(デバイス、ローカル グループ、ドメイン グループ、ネットワーク構成)等を収集する。出力されたデータはAES暗号化され、その鍵も暗号化される。
    • ViperVPNのレジストリを変更し、権限昇格できるようにする。
  4. 永続化
    • マルウェアのインストーラ(WinResSvc.exe)は、マルウェア等のsetuplst.xml、mressvc.dll、MSSVCCFG.dll、msxhlp.dllをダウンロードし、ディスク上に保存する。
    • マルウェアのインストーラはWinSys Restore Service サービス(表示名:WinResSvc)を作成する。
    • マルウェアのインストーラは、レジストリの値を書き変える。
      HKLM:\SYSTEM\CurrentControlSet\services\WinResSvc\Parameters
      HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
    • インストーラは、自身の終了前にサービスを起動する。サービス起動時、svchostによりmressvc.dllが実行され、さらにオーケストレータDLLのMSSVCCFG.dllを実行する。
    • オーケストレータDLLは、通信ライブラリDLLのmsxhlp.dllをHTTPを使用するプロセス(iexplore.exe、msedge.exe、firefox.exe など)にインジェクションする。
    • 通信ライブラリDLLはHTTPでC2サーバに接続する。C2サーバから暗号鍵やタスクを受信し、コマンド実行した後暗号化、Base64に符号化してC2サーバへ送信する。
  5. ドメインコントローラへの水平展開
    • インジェクションされたマルウェアはパスワードスプレーするバッチファイルをダウンロードして実行し、ドメイン管理者アカウントに対しパスワードスプレーを事項する。その後、バッチファイルを削除する。
    • 新たなマルウェアインストーラをダウンロードし、System32フォルダに移動する。
    • スケジュール済みのカスタマー エクスペリエンス向上プログラムを変更する(\Microsoft\Windows\Customer Experience Improvement Program\Consolidator)。
    • 変更されたスケジュールされたタスクを実行することでドメイン コントローラーへの水平展開と実行をする。
    • このとき、新たな被害端末はC2サーバと直接通信するのではなく、名前付きパイプを介した通信を利用している。
    • 情報収集コマンドを実行し、他のサーバや管理者の端末を探す。
  6. 2番目のホストへの水平展開準備
    • Mimikatz を terabox.exe という名でダウンロード、System32 フォルダーに移動し、管理者アカウント(Adalwolfa)の NTLM ハッシュを取得する。
  7. 2番目のホストへの水平展開
    • ドメイン コントローラー上の CARBON-DLL は、 PsExec と 3つめのCARBON-DLL インストーラーのコピーをダウンロード(wsqsp.exe、wsqmanager.exe)する。ファイルは一度C:\Windows\Temp にダウンロードし、System32 フォルダーに移動する。
    • ドメインコントローラ上の CARBON-DLL は前段階で収集されていた管理者アカウント(Adalwolfa)の NTLM ハッシュを用いて pass-the-hash で Adalwolfa のワークステーションに CARBON-DLL インストーラをコピーし、PsExecのリモート実行でAdalwolfa のワークステーションへ CARBON-DLL をインストールする。
    • eunewswire[.]eu にHTTPで接続すると共に、terabox.exe、wsqsp.exe、 wsqmanager.exe を削除する。
  8. 管理ホスト上の認証情報へのアクセス
    • Adalwolfa のワークステーションにキーロガー(wingtsvcupdt.exe)をダウンロードして実行する。ログは %temp%\~DFA512.tmp に出力される。これにより、SSH接続の認証情報が奪われる。
    • ユーザはEdge ブラウザ を用いてApache サーバーがホストする Web サイトにアクセスし、ページの1つをチェックする。その後、Powershellを用いてSSH 経由で Apache サーバーに接続する。このときの認証情報がログに記録され、結果的に認証情報が奪われる。
    • ある段階で、キーロガー(wingtsvcupdt.exe)とログファイル(~DFA512.tmp)を削除する。
  9. Linuxサーバへの水平展開
    • Adalwolfaワークステーション上の CARBON-DLL は、Penquin(tmp504e.tmp) と pscp.exe を Adalwolfa のワークステーションにダウンロードする。前段階で盗まれたSSH認証情報を用いて pscp.exe によりApacheサーバに Penquin をコピー (/tmp/tmp514f524f)する。
    • さらに、Adalwolfaワークステーションに plink.exe をダウンロードし、前段階で盗まれたSSH認証情報を用いて Penquin を実行する。
    • Penquinは以下の処理を実行する。
      • "cron"という名前でマルウェアを解凍して実行権限を付与し、/usr/bin/にコピーすることで cron を偽装する。
      • 本物の cron サービスを停止する。
      • systemd が偽装された cron を実行するための cron サービスファイルを作成する。(注:/etc/systemd/system/ にあるファイルが /usr/sbin/cron 内のファイルよりも前に実行されるため、本物の cron よりも前に偽装された cron が実行される。)
      • 本物の cron サービスのリロードと起動。
      • 偽装された cronサービス はスニファをインストールし、本物の cron サービスを子プロセスとして実行する。
    • これらの結果、偽装された cron サービスは eth0 上のネットワーク トラフィックをスニッフィングし、特定のパケットを探す。
  10. 水飲み場のインストール
    • 偽装された cron は、 C2 サーバよりマジックパケットを受信し、176.59.15.33:8081 へのリバースシェルを実行する。この時のペイロードデータは Base64 でエンコードされている。
    • リバースシェルが確立していくつかの調査コマンドが実行された後、HTMLファイルが C2サーバよりダウンロードされる。これには、攻撃者の悪意のあるサイト anto-int[.]com がホストする、シンプルな JavaScript ファイルをロードするスクリプトタグが含まれている。これにより、 http://kagarov/index.html を閲覧するユーザー が攻撃者の悪意あるサイトにリダイレクトされる。これによって水飲み場の構築が完了する。

 

シナリオ2 Snake

  1. 初期侵入と足場の確立
    • ユーザ(Egle)は、侵害されている正規Web サイトにアクセスする。ユーザは複製され、改造された悪意あるサイトにリダイレクトされる。リダイレクト先は、フィンガープリントを収集し、ブラウザに Evercookie をインストールする JavaScript を含むWebサイトをホストしている。
    • このサイトはユーザ(Egle)に NotFlash をアップデートするよう促し、ユーザはEPIC (別名 Tavdig/Wipbot)を含んだ NFVersion_5e.exe をダウンロードする。
    • ユーザ(Egle)が NFVersion_5e.exe を実行すると、シナリオ1「Carbon」と同様の EPIC の感染が始まり、インターネットに関するプロセス(iexplore.exe、msedge.exe、firefox.exe など)にインジェクションされて svobodaukrayin[.]ua へ通信が始まる。なお、この時のシナリオではHTTPS通信が開始される。
    • C2サーバとクライアントの間で接続が確立されると、情報収集コマンド(systeminfo等)が実行される。
  2. ルートキットのインストール
    • EPIC は Snake インストーラー(gupsys.exe)をダウンロードする。
    • Snake インストーラーは、Windows 10 の脆弱性を悪用してSYSTEM権限に昇格し、脆弱なドライバー(gigabit.sys)をインストールして実行し、ドライバー署名強制 (DSE) を無効にする。
    • Snake インストーラーは Snake ルートキットドライバ(gup.sys)をインストールし、ドライバー署名強制 (DSE) を再度有効化する。
    • ルートキットドライバは、自身に埋め込まれている、タスクを実行するためのDLLマルウェアを XOR で復号化し、ファイル(msnrcv64t.dll)に出力する。
    • ルートキットドライバは、実行中さまざまなSYSCALL関数をフックしている。
    • ルートキットドライバは、タスクを実行するためのDLLマルウェア Snake (msnrcv64t.dll)をシステムプロセスの taskhostw.exe にインジェクションする。この後、マルウェアがブラウザプロセスを介して C2サーバと通信するために、ブラウザにユーザモードDLLのマルウェアをインジェクションする機会を待つ。
    • ユーザ(Egle)がブラウザでWebサイトを参照すると、ルートキットドライバにトリガされ、ルートキットドライバはユーザモードDLLのマルウェアをブラウザプロセスにインジェクションする。このDLLは、HTTPで C2サーバ(bestcafenews[.]com)に接続する。
    • このときの C2サーバとの通信は XOR で暗号化されている。
  3. 1台目のワークステーションの調査
    • taskhostw.exe にインジェクションされた Snake マルウェアは、プロセス情報などの収集を行う。このとき、ブラウザプロセスにインジェクションされたマルウェアが読み取れるよう、結果を名前付きパイプに出力する。この結果、EgleAdmin ユーザがプロセスを実行していることを発見する。
    • EgleAdmin ユーザを列挙すると、それが File Server Admins グループのメンバーであることが判明する。
    • Snake はトークンを複製することでユーザ(Egle)になりすまし、ローカルマシンにマップされたドライブを列挙する。この結果、ユーザ(Egle)のホームドライブがファイルサーバにアクティブにマップされていることを発見する。
  4. ファイルサーバへの水平展開
    • ブラウザプロセスにインジェクションされたマルウェアはマルウェア(fs_cmu_v2.exe、file_svc_mgr.exe)をダウンロードし、taskhostw.exe にインジェクションされた Snake マルウェアが読み取る名前付きパイプに出力する。Snake マルウェアは、受信したファイルをSystem32フォルダに出力する。
    • Snake は EgleAdminアカウントを偽装し、ファイルサーバにマルウェア(新たな Snake のインストーラ)をコピーして実行する。この結果、同様の方法でファイルサーバにも Snake マルウェアがインストールされる。
    • ファイルサーバの msedge.exe にインジェクションしたマルウェアは medicalinfo[.]net と HTTP で通信する。
  5. ドメインの調査
    • Snake マルウェアは、C2サーバから、Powershell の ActiveDirectory モジュールを使用してドメイン ユーザー、管理者グループ、およびコンピューターを列挙するタスクを受信する。
    • タスクの実行の結果、通常アカウント Zilvinas およびドメイン管理者アカウント ZilvinasAdmin を発見する。これらアカウントについて、さらに詳細を列挙する。この結果、Zilvinas のワークステーションが見つかる。
    • ドメインコンピュータの情報も列挙する。
  6. 管理者のワークステーションへの水平展開の準備
    • ファイルサーバ上の Snakeマルウェアは、loadperf.exe (mimikatz)、fs_mgr.exe (psexec)、および fs_cmu.exe (Snake インストーラー) をダウンロードし、System32 フォルダに書き込む。
    • Mimikatz を実行し、資格情報をダンプする。ターゲット上のすべての NTLM ハッシュはファイルに出力され、C2サーバに流出する。
  7. 管理者ワークステーションへの水平展開と永続化
    • PsExec を用いて管理者のワークステーションに Snake マルウェアをインストールする。このとき、前段階で取得したNTLMハッシュを利用し、Pass-the-Hashで Snake インストーラを実行する。Snake のインストールは前回と同様。
    • Snake マルウェアは、msedge.exe にインジェクションしたプロセスを通じて C2サーバ(worldcup2023aus[.]org)とHTTPで接続する。
    • Snake マルウェアは管理者のワークステーションのプロセスを列挙し、トークンを偽装可能な ZilvinasAdmin プロセスを発見する。
    • Snake マルウェアは、永続化のために ZilvinasAdmin アクセストークンを利用してドメイン管理者アカウント(Leshy)を作成する。
  8. Exchangeサーバへの水平展開
    • Snake マルウェアは、mtxconf.dll、mtxcli.dll、msiex.ps1、perfe009.dat、wdr.rules.xml をダウンロードし、System32 フォルダに書き込む。
    • 以上のファイルを Exchangeサーバにリモートコピーする。
    • Snake マルウェアは、ZilvinasAdmin のトークンのコピーを利用し、WMIC を介して Exchangeサーバ上で Powershell にて msiex.ps1 を実行する。この結果、 LightNeuron マルウェアが Microsoft.Exchange.Transport.Agent.ConnectionFiltering.dll としてインストールされる。
    • LightNeuron マルウェアは、正規の接続フィルタリングエージェントを装っている。実際には、C2サーバからの指示の受け取りや情報の収集を行う。
  9. 調査およびEメール収集
    • ステガノグラフィーを利用した、メール内のJPEG添付ファイル内のAES暗号化された C2サーバからの通信を受信し、 C2サーバからのコマンドを受け取る。
    • コマンドを実行した後、結果をAES暗号化し、ステガノグラフィーを利用してJPEG添付ファイルに埋め込み、メールに添付できるよう Base64 符号化して、メールとして noreply@innovationmail.net へ送信して C2サーバに送る。
    • C2サーバから受け取ったメールは、組織内ユーザへの配信をブロックする。
    • LightNeuronは、受信者が "nk.local" と一致するすべてのメールを収集し、ファイルに記録する。収集されたデータは、最終的にC2サーバへ漏洩する。

 

 

次の記事では、これらのシナリオのイベントの項目およびID、それらのアクションの分類を記載します。