- 2023/06/14
- 脅威分析レポート
【脅威分析レポート】ショートカットファイルを使った手っ取り早い攻撃 – LNKファイルを使用して初期感染とパーシステンスを実現
Post by : Cybereason Global SOC Team
本脅威分析レポートは「パープルチームシリーズ」の一部です。このシリーズでは、Cybereason Global Security Operations Center(GSOC)のMDR(Managed Detection and Response)チームとThreat Intelligenceチームが、広く使われている攻撃手法を調査した上で、これらの手法を脅威アクターがどのように利用しているかを説明するほか、攻撃を再現する方法、さらには防御者がこれらの攻撃をどのように検知し防御できるかを紹介します。
パープルチームシリーズのレポートには、次の3つのセクションがあります。
- 「レッドチーム」セクションでは、既知の攻撃手法のバージョンを作成します。
- 「ブルーチーム」セクションでは、攻撃の詳細について説明した上で、実際の事例を紹介します。
- 「パープルチーム」セクションでは、攻撃の検知方法について説明します。
重要なポイント
- 初期感染とパーシステンスが理由で広く普及している:Microsoftがインターネットからダウンロードされるマクロ有効ファイルに関して行った最近の変更に伴い、Cybereason GSOCは、ショートカットファイルを通じて配信されるマルウェアの深刻な増加を観測しています。
- さまざまな攻撃手法と組み合わせることが容易:ファイル形式の柔軟性により、DLLサイドローディング型の攻撃や、PowerShellまたはLOLBinを使用した「ファイルレス」型の攻撃などと組み合わせて、ショートカットファイルを容易に利用できます。
- ブロックすることが困難:ショートカットファイルは、バイナリファイルタイプですが、それ自体は無害なものです。それは単に他のリソースへのポインタであるにすぎません。また、ショートカットファイルはWindowsオペレーティングシステムの重要な構成要素であるため、これを完全に禁止することはできません。
LNKファイル
「リンク」ファイルとしても知られるWindowsショートカットファイル(LNK)は、Windows独自のフォーマット仕様であり、ユーザーはこれを使うことで、ファイル、コマンド、ネットワーク共有などへのグラフィカルな「ポインタ」を作成できます。
LNKファイルは通常、Windowsエクスプローラーの「最近使用したファイル」または「クイックアクセス」セクションに自動的に作成されます。また、ファイルを右クリックして「ショートカットの作成」を選択することで作成することもできます。
▲ショートカットの作成例
ショートカットを編集するには、LNKファイルを右クリックして「プロパティ」を選択します。これにより、ユーザーは、リンク先、ディレクトリ、アイコンのような、ショートカットファイルが持つさまざまな属性を編集できます。
▲LNKファイルのプロパティ
レッドチーム:LNKファイルの武器化
このセクションでは、攻撃者の観点から、LNKファイルを使ってマルウェアを配信する方法について説明します。ここでは、悪意あるペイロード(リバースシェル)を実行するLNKファイルを作成する方法と、LNKプロパティを使用してそれをシステム上で永続化する方法を紹介します。
■LNKファイルを悪用する方法
前述したように、ショートカットファイルとは実際には別のリソースへのポインタであるに過ぎません。このため、LNKファイルを使うと以下を容易に行えます。
- 特定のcmd.exeコマンドを実行すること
- PowerShellの「ワンライナー(1行プログラム)」を実行すること
- ディレクトリ内の隠しファイルを実行すること
ショートカットファイルが持つもう1つの属性として、「既知のファイルの拡張子を隠す」を無効にした場合であっても、ショートカットファイルには「.lnk」という拡張子が表示されません。この属性により、悪意あるアクターによるフィッシング攻撃が容易になります。なぜなら、攻撃者はショートカットファイルと実際のファイルをほぼ同じ見かけにできるからです。
▲ショートカットファイルの拡張子「.lnk」が表示されない例
■セットアップ
下記に示すデモではすべて、私たちが作成した「マルウェア」と同じMeterpreterペイロード(すなわち、標準的なreverse_tcp_listener実行ファイル)を使用します。
▲Meterpreterペイロードの設定
私たちは、Meterpreterをそのまま使うとMalOpが発生することは重々承知しています。私たちがここで求めているのは、簡単に立ち上げて作業できるプラットフォーム上で、さまざまな手法の実際の動作を見極める方法なのです。
■ユースケース1:ダウンローダーとしてのショートカットファイル
最初の例では、Meterpreterペイロード(N0T_Malware.exeというファイル)を取り上げ、それをシンプルなpythonのWebサーバー上でホスティングします。
▲PythonのWebサーバー上のMeterpreterペイロード
次に、LNKファイルを作成します。このファイルをクリックすると、被害者の端末がWebサーバーにアクセスし、Meterpreterペイロードを%TEMP%ディレクトリにダウンロードして、悪意あるペイロードであるN0T_Malware.exeを実行することになります。
▲悪意あるLNKファイルのプロパティ
▲LNKの起動時に実行されるコマンド
▲LNKファイルを実行した場合
▲TEMPディレクトリにMeterpreterファイルがドロップされる
▲セッションが作成されたことを確認できる
■ユースケース2:PowerShellによるパーシステンスの確立
▲パーシステンス確立のフロー図
この例では、私たちは被害者のホストに対するアクセス権をすでに保有しており、それを踏まえた上で、以下を実行するようなパーシステンスメカニズムを作成します。
- Meterpreterペイロードがまだホスト上にインストールされていることを確認する。
‒ インストールされていない場合は、新しい実行ファイルをダウンロードし、再実行します。
‒ インストールされている場合、実行ファイルを起動します。 - ユーザーが端末にログインするたびにパーシステンスメカニズムを実行する。
%TEMP&ディレクトリにペイロードが存在するかどうかをチェックして、存在しない場合は新しいコピーをダウンロードして実行するような、シンプルなPowerShellワンライナーを作成します。
▲パーシステンスの確立に使用されるPowershellのワンライナー
(見やすくするために改行を追加しています)
当初の考えでは、このワンライナーを1つのLNKファイルに詰め込むつもりでしたが、そうするとGUIにおける「260文字制限」に抵触することになります。この制限は、GUI環境にのみ適用されることに注意してください。LNKファイルは、実際にはコマンドライン引数で4096文字を扱うことができますが、この制限は、私たちの戦術を少々変更する機会を与えてくれました。
コマンド実行のためにバッチファイルを利用することは、攻撃者の間で非常によく使われる手法です。今回のシナリオでは、「p.bat」を作成し、PowerShellのワンライナーをその中にコピーすることにします。このファイルは、Meterpreterペイロードと同じWebサーバー上でホスティングされます。続いて、このバッチファイルをダウンロードして実行するための簡単なコマンドをLNKファイルに追加します。
▲リモートサーバーから「p.bat」をダウンロードするために使用されるPowershellのワンライナー
これは、基本的に「ダウンローダとしてのショートカットファイル」のセクションで紹介したものと全く同じコマンドです。このバッチファイルは、オリジナルのPowerShellワンライナーを実行します。
最後に、LNKファイルに当たり障りのない名前を付け、それをパーシステンスメカニズムとしてWindowsのスタートアップフォルダに配置します。これにより、ユーザーがログインするたびにLNKファイルが実行され、Meterpreterペイロードを処理する「p.bat」がダウンロードされ実行されることになります。
▲悪意あるLNKファイルを「eula」と名付け、それをスタートアップフォルダに配置する
■ユースケース3:ショートカットを使って「隠された悪意あるファイル」を実行
3つ目の例では、QbotとIcedIDを使ったキャンペーンで観測された人気のある戦術を利用します。ここでは、以下を含む1つのアーカイブファイルを作成します。
- 独自のMeterpreterペイロード
- バッチファイル
- LNKファイル
LNKファイル以外はすべてユーザーから隠蔽されます。攻撃フローは、次のようになります。
- ユーザーがLNKファイルをクリックする
- LNKファイルがバッチファイルを起動する
- このバッチファイルは、xcopyを使用してMeterpreterの実行ファイルを%TEMP%ディレクトリにコピーする
- このバッチファイルは、Meterpreterの実行ファイルを実行する
▲攻撃フローの図
まず、バッチファイルを作成することから始めます。このバッチファイルは、xcopyを使ってペイロードを%TEMP%ディレクトリにコピーし、それを実行するという極めてシンプルなものです。なお、「/h」オプションが必須であることにご注意ください。この引数が設定されていない場合、xcopyは隠しファイルをコピーしません。
▲実行の一部として使用されるバッチファイル
前の例と同様に、LNKファイルを作成します。今回は、就職用の履歴書を装ったファイルを作成します。このファイルを実行すると隠しバッチファイルが呼び出されます。
▲隠しバッチファイルを実行するLNKファイル
続いて、このLNKファイル以外を「隠しファイル」に設定して、アーカイブをZIPで圧縮し、それを被害者へと配信します。
▲攻撃における操作順序
■悪意あるショートカットの作成を自動化するツール
この例では、GUIを使ってLNKファイルを「手動で」作成する方法を説明しましたが、これは主に簡略化のためと、利用可能なさまざまなオプションを示すためでした。この方法は、初回侵入のための非常に一般的な手法であるため、攻撃者は自らが利用するキャンペーンやツールの規模を拡大することを検討しています。そこで登場するのが「自動化」です。
■Lnk_Generator
最初の例であるLnk_Generatorは、Octoberfest7により作成されたシンプルなツールです。これは、まずWindowsホスト上でPowerShellスクリプトを実行し、「テンプレート」のLNKファイルを作成することから始めます。
▲“Template_generator.ps1”のソースコード
テンプレートファイルをPythonがインストールされているホストにコピーした後、genlnk.pyを実行することで、既に設定済みの実行したいコマンドを取得し、それをLNKテンプレートファイルに埋め込みます。
▲“genlnk.py”のソースコード
■Lnk2Pwn
lnk2pwnは、悪意あるLNKファイルを生成するために使用されるGUIツールです。lnk2pwnを使うと、グラフィカルインターフェイスを通じて、上記と同じことが行えます。
▲Lnk2PwnのGUIメニュー
▲作成されるLNKファイルの例
▲サンプルのLNKファイルのプロパティはGUIで設定された引数と一致
■EmbedExeLnk
最後の例であるEmbedExeLnkは、x86matthewが作成した興味深い概念実証(PoC)プロジェクトです。前述したように、LNKファイルはマルウェアのダウンローダーとして利用できます。
このプロジェクトでは、実行ファイルが実際にLNKファイルに埋め込まれます。これは、LNKファイルを作成し、XOR暗号化された実行可能データを同ファイルの末尾に付加することで実現されます。その後、PowerShellを使用して、データを復号して読み取り、それを%TEMP%ディレクトリにコピーして実行します。
ブルーチーム:LNKファイル攻撃の分析
本記事の「重要なポイント」で述べたように、初期感染に使用されるLNKファイルは、2015年以前から攻撃手法として使用されていたにもかかわらず、ある意味「新しいもの」として注目されています。この例では、Astaroth、IcedID、Qbotにおけるよく知られた広範な攻撃キャンペーンを分析するほか、Yellow Cockatooが採用したパーシステンス手法を取り上げます。
■攻撃キャンペーン
Astaroth – 選挙後のブラジルや欧州を標的とした攻撃(2018年)
▲Astaroth感染経路のフロー図
バンキング向けトロイの木馬であるAstarathは、選挙結果に関連した誘い文句を利用したフィッシングキャンペーンです。これは、当初、LNKファイルを含むアーカイブファイルを使用して配信されていました。LNKファイルをクリックすると、wmic.exeが「/format」オプションとリモートアドレス付きで実行されます。その結果、悪意あるJavaScriptを含むXSL(eXtensible Stylesheet Language)ファイルがダウンロードされ、実行されることになります。
▲wmicコマンドの例
■Qbot – Windows CalculatorのDLLハイジャックを利用したフィッシングによりデバイスを感染させる(2022)
2022年夏、研究者であるproxylifeという人物により、Qbotバンキング向けトロイの木馬の背後にいるグループが、下記を含むISOファイルを配信し始めたことを発見して報告しました。
- LNKファイル
- Windows 7に含まれているCalc.exeのコピー
- 悪意あるバージョンのWindowsCodecs.dll
- Qbotを含むランダムな番号のDLL
LNKファイル以外のファイルはすべて、ユーザーから隠されていました。
▲ISOファイルの内容
このLNKファイルがCalc.exeをロードすると、通常、System32に置かれている正規版のWindowsCodecs.dllがロードされるはずです。しかし、このケースでは、攻撃者はCalc.exeのWindows 7バージョンに存在するDLLハイジャックの欠陥を悪用していました。その結果、攻撃者は、Calc.exeと同じディレクトリに置かれているWindowsCodecs.dllの独自のバージョンをロードすることに成功します。このモジュールは、ランダムな番号のDLLをロードしQbotを実行します。
■IcedID – IcedID感染からドメインハッキングまで
https://bazaar.abuse.ch/sample/db7cd6d0f75ddf78e0e6e09119d9071df07b50ef3f5289d474921adba4f35047/
2022年秋、Cybereason GSOCは、上述のQbotと同様に、下記を含むISOファイルを通じて配信されるIcedIDキャンペーンを追跡しました。
- LNKファイル
- 隠しディレクトリ
- ランダムな名前のDLL(IcedID Loader)
- バッチファイル
隠しディレクトリ内には以下が含まれていました。
このLNKファイルは、隠しディレクトリ内にあるバッチファイルを呼び出します。このバッチファイルはxcopyを実行することで、DLL(IcedID Loader)を%TEMP%ディレクトリにコピーした後、それをrundll32.exeを通じて実行します。
▲IcedIDのインジェクションフロー
■Yellow Cockatoo – LNKのパーシステンス
LNKファイルは、初期感染と実行に最もよく使われますが、レッドチームの例にあるように、パーシステンスの確立にもよく使われます。Jupyter InfostealerやSolarmarkerとしても知られるYellow Cockatooは、2020年5月に初めて発見されたリモートアクセス型トロイの木馬です。Red Canaryのレポートにもあるように、Yellow Cockatooが使用するパーシステンスメカニズムの1つは、スタートアップディレクトリにLNKをドロップすることでした。このメカニズムでは、ユーザーが端末にログインすると、cmd.exeが呼び出され、マルウェアを反射的に実行するPowerShellワンライナーが実行されることになります。
▲Red Canaryから得られたテレメトリ例
レッドチームユースケースの分析
このセクションでは、残された「デジタル指紋」をより深く理解するために、レッドチームのユースケースに関するアナリストの見解を取り上げます。
■攻撃における共通点
LNKファイルの仕組みが理由で、LNKタイプの攻撃では、プロセスツリーの最初のプロセスがexplorer.exeになることが予想されます。これは、ユーザーがショートカットを作成するたびにポインタが作成され、Windowsのファイルエクスプローラーはそのポインタを使って、ユーザーがショートカットを設定したファイルを実行することになるからです。
LNKタイプの攻撃を調査する際の課題の1つとして、プロセスツリーでは下記のようなものしか表示されないことが挙げられます。
▲LNK実行のプロセスツリー
プロセスツリー自体が実際のLNKファイルへとコールバックしないため、例に示したように不完全な修正が発生し、攻撃者は環境に留まり続けることができます。explorer.exeを検知のための親プロセスとして使用することには注意が必要です。なぜなら、explorer.exeは、設計上、Windowsユーザーのセッションから多くの異なる子プロセスを生成するように意図されているためです。
ブルーチーム:ダウンローダーとしてのショートカットファイル
まず、最も基本的な例として、マルウェアのダウンローダーとして使用されるLNKファイルを、分析者側の観点から見てみましょう。この攻撃を簡単にまとめると、次のようになります。
- cmd.exeを呼び出す
- PowerShellを呼び出す
- リモートロケーションから%TEMP%ディレクトリへと「マルウェア」をダウンロードする
- %TEMP%ディレクトリ内にある「マルウェア」を実行する
プロセスツリーを見ると、cmd.exeがPowerShellを生成し、PowerShellが「マルウェア」の子プロセスを生成してることが分かります。
▲プロセスツリー
プロセスデータを見ると、攻撃者の視点から見て、リモートホストにアクセスし、%TEMP%ディレクトリから「マルウェア」をダウンロードして実行するというコマンドラインが、これに一致していることが分かります。
▲コマンドラインの例
その後の「whoami」や「ping」などの子プロセスは、この例の「n0t_malware.exe」の子プロセスと同様に、プロセスツリー内に記録されます。
▲プロセスツリー
ブルーチーム:PowerShellによりパーシステンスを確立
この攻撃では、ユーザーのスタートアップディレクトリにLNKファイルを配置することで、ユーザーが端末にログオンするたびに攻撃が実行されるようにします。このLNKファイルはPowerShellを呼び出してバッチファイルをダウンロードして実行し、PowerShellを使って再び「マルウェア」が存在するかどうかをチェックします。「マルウェア」が見つからない場合は、新しいコピーがダウンロードされ実行されることになります。
ここでもプロセスツリーを見ることで、この攻撃シナリオのさまざまな断片に関する多くの情報を得ることができます。今回は、さらに多くの情報を見ることができます。
▲プロセスツリー
最初のcmd.exe実行のコマンドラインを見ると、PowerShellがリモートホストに「p.bat」ファイルのダウンロードと実行を要求していることが分かります。
▲Cmd.exeのコマンドライン
別のcmd.exeのコマンドラインを見ると、「p.bat」ファイルが実際に実行されていることが分かります。
▲‘p.bat’を実行するコマンドラインの例
結果として生成されるPowerShellの子プロセスを見ると、私たちが期待するコマンドラインが実行されることが分かります。このコマンドラインは、「マルウェア」が存在するかどうかをチェックし、存在しない場合は新しいコピーをダウンロードして実行します。
▲‘p.bat’のPowershell子プロセス
ブルーチーム:ショートカットを使って「隠された悪意あるファイル」を実行
最後の例では、履歴書を装ったLNKファイルと2つの隠しファイル(バッチファイルとマルウェア)を含むアーカイブファイルを使用しました。このLNKファイルを実行すると、バッチファイルが起動され、その結果、「マルウェア」が%TEMP%ディレクトリにコピーされた後、実行されます。
ここでも、プロセスツリーを見ることで、プロセスの遺産や、さらに調査が必要となるさまざまな部分に関する明確な全体像を得ることができます。
▲プロセスツリー
cmd.exeの最初のインスタンスから始めることで、コマンドラインとアーカイブ内の疑わしいバッチファイルの実行を確認します。
▲‘cereal_K.bat’を実行するコマンドライン
xcopy.exeのコマンドラインを見ると、「マルウェア」が%TEMP%ディレクトリにコピーされていることが分かります。隠しファイルを扱っていることを示す「/h」パラメータがあることにご注目ください。
▲xcopy.exeのコマンドライン
プロセスツリーの残りの部分は、「マルウェア」の実行と、Meterpreterセッションで作成された子プロセスを示しています。
▲プロセスツリー
前述の例と同様に、[File event](ファイルイベント)エレメントを通じて追加のクエリを実行すると、アーカイブが最初にホストにダウンロードされた日時や、実行された可能性のある追加ファイル(例:最初のLNKファイル)を確認できます。
▲‘totally_legit_archive.zip’のファイル作成イベント
▲悪意あるLNKのファイル作成イベント
▲アーカイブ内の悪意あるバッチファイルのファイル作成イベント
■LNKファイルフォーマットの静的ファイル分析
このセクションでは、LNKファイルの静的解析のためのさまざまなツールやテクニックを紹介します。
まずは、文書ファイルを装ったIcedID LNKのサンプルから始めます。
▲マウントされたISOフォルダ内にあるIcedIDサンプル
このセクションでは、以下が必要です。
- 優れた16進数エディタであるHxD
- ハッシュ化ツール(HashMyFilesやPowerShellなど)
- strings
- ExifTool
- LECmd
■LNKファイルのハッシュ化
LNKファイルのハッシュを計算しようとすると、興味深い結果が得られます。それは、サンプルによっては役立つこともあれば、問題となることもあります。私たちが使用したIcedIDのサンプルでは、実際にファイルのハッシュ化を試みると、当該LNKファイルが起動するように設定されているターゲットファイルのハッシュが生成されました。
▲IcedIDサンプルのHashMyFiles出力
▲LNKファイルのプロパティ
■Hexエディタとstringsコマンドによる分析
このサンプルをHxDにドロップすると、当該ファイルの最初の数バイトが「4C」で始まることが分かります。
▲IcedID LNKサンプルの16進数出力
これをファイル署名データベースで検索すると、Windowsのショートカットファイル(LNK)のファイル署名として「4C 00 00 00 01 14 02 00」が見つかり、これが当該サンプルの最初の数バイトの残りと一致することがわかります:
▲LNKファイルタイプにおけるファイル署名の確認
また、このサンプルに対してstringsコマンドを実行すると、ターゲットのファイル名とパスにつながる可能性のあるその他の参照先が表示されます。
▲サンプルのIcedIDに対するstringsコマンドの出力
■ExifToolによる分析
ExifToolは、ファイルサンプルのメタデータを解析し、さまざまなフィールドを抽出するためのツールです。このツールでサンプルを開くと、ファイルの変更時間、アクセス時間、作成時間、ターゲットファイル名、ターゲットファイルへの相対パスなど、いくつかの有用な情報が表示されます。
▲サンプルのIcedIDに対するExifTool出力
■LECmd
LECmd(別名LNK Explorer)はEric Zimmermanにより開発されたコマンドラインツールであり、LNKファイルフォーマットから利用可能なすべてのデータを解析してデコードするものです。このツールを偽の履歴書ファイルに対して実行すると、Modified、Accessed、Createdのタイムスタンプ、ターゲットファイル名と引数、さらにはLNKファイルが作成された端末のホスト名(ヘッダー値により異なる)などが表示されます。
▲MACタイムスタンプ
▲ターゲットファイル、引数、コメント、アイコンなどの情報
▲発信元ホストに関する情報
【ホワイトペーパー】有事を見据えたセキュリティ運用とは?〜攻撃事例から学ぶサイバー脅威対策〜
サイバー攻撃は進化を止めず、その被害は組織の存続さえ揺るがす時代。
昨今、特に注意しなければならないのが、サプライチェーン攻撃の新たな手法です。標的となる組織のセキュリティが堅固となってきたため、セキュリティが手薄な別の組織を踏み台にして標的組織を攻撃するというように、サプライチェーン攻撃はますます巧妙化しています。
このガイドは、重大なセキュリティインシデントに直面した時、慌てず騒がず対応するために。
セキュリティ担当者はもちろん、経営課題として平時から取り組むべきサイバー脅威対策について、最新の攻撃事情とともに紹介します。
https://www.cybereason.co.jp/product-documents/brochure/6938/