/
Cyber Resilience

マルウェアペイロードとビーコン:悪意のあるペイロードの種類

前回のブログ投稿では、ペイロードがどのように悪意のある通信を促進するか、そしてペイロードとビーコンの実行に成功した後、攻撃者がシステムを制御する方法について説明しました。Meterpreterペイロード(Metasploitフレームワークから)によって促進されるreverse_tcp通信チャネルを使用しました。

この投稿では、ペイロードの異なるタイプと、それらが採用する可能性のあるメモリ操作技術の例についてさらに理解することに焦点を当てます。

マルウェアは 、特に70年代初頭の Creeper プログラムのような単純なウイルスの時代とは対照的に、構成と実行においてより洗練されています。主に秘密の目的を動機とする脅威アクターにとって、通常、レーダーの下にとどまり、検出されずにネットワークに長期間存続することが最優先事項です。したがって、おとり、エンコード、難読化、暗号化、模倣などの対応する技術を採用して、望ましいレベルの運用セキュリティを実現します。

脅威アクターが利用できる実行可能形式はいくつかあります。攻撃者の選択は、最初の攻撃ベクトルとその後のエクスプロイト後のアクションによって異なります。Metasploit Framework の実行可能形式と変換形式の一部を次に示します。

Metasploit 実行可能ファイル

パート 1 で示したように、ビーコンまたはペイロードは、攻撃者に侵入と足がかりを与える、被害者のマシンまたはネットワーク上のインプラントです。これはマルウェアの武器庫と攻撃ライフサイクル全体の重要な部分であり、脅威アクターが実際にアクセスしてさらなる悪意のある活動を追求できるようにします。

実際の大まかな分類に関しては、ペイロードは「ステージング」または「ステージレス」のいずれかになります。脅威アクターは、いくつかの要因に応じてどちらかを選択する場合がありますが、その主な要因は運用上のセキュリティに関する考慮事項である可能性があります。

ステージングペイロードとは何ですか?

段階的なペイロードは、攻撃の個別のフェーズを分解し、多くの場合、単一のペイロードが実行する複数のペイロード フェーズを使用します。これらのペイロードは通常、「ステージャー」(初期ペイロードまたはビーコン)実行可能ファイルと「ステージ」(メインペイロード)実行可能ファイルに分類されます。

ステージャーは、初期ペイロードである小さな実行可能ファイルです。これは、ステージ ペイロードと呼ばれる、はるかに大きく、より高性能なペイロードに備えるために実行される比較的小さなコードです。これは「ステージが舞台を整える」ことを意味します。通常、最初のエントリが脆弱性を利用する場合、ステージャーはエクスプロイト コードの一部になります。ここでは、エクスプロイトコードがターゲットの脆弱性を悪用し、ステージャーコード(ペイロード)を実行します。その後、ステージャーが行動を開始します。

ステージャーの主なタスクは、検出されることなく正常に実行し、攻撃者のインフラストラクチャに連絡して目的のメイン ペイロードをダウンロードし、そのペイロードを実行するようにシステムをセットアップすることです。ダウンロードされたステージまたはより大きなメインペイロードは、攻撃者が必要とする機能に応じて、1 つ以上のペイロードにすることができます。ステージがダウンロードされると、ステージャーは実行制御を渡して悪意のあるアクティビティを続行します。

脆弱性エクスプロイトの場合、最初のエクスプロイトプログラムは、侵害されたシステムでのリソース割り当てに関して、ステージャーがメインステージペイロードに対して行うのと同様のことをステージャーに対して実行します。次のようなパターンに従います。

ステージャーパターン

次の例は、ステージングされたペイロードを Windows 実行可能ファイルとして示しています。

ステージングペイロード Windows 実行可能ファイル

ステージングされたペイロードは、バッファオーバーフローの脆弱性を悪用するために使用されるシェルコードの場合のように、ペイロードの配信と実行に関して、ディスクやメモリスペースなどのシステム関連の制約がある可能性があるシナリオに対応します。

ステージレスペイロードとは何ですか?

ステージングペイロードの反対は、ステージレスペイロードです。ステージレス ペイロードは自己完結型であり、通常はステージング ペイロードよりもはるかに大きくなります。通常、攻撃者に必要なすべての機能を 1 つの実行可能ファイルに結合します。

ここでは、通常、メインペイロード(ステージャー)をダウンロードする初期ペイロード(ステージャー)は必要ありません。ステージレスペイロードが実行されると、メモリインジェクション、攻撃者のインフラストラクチャへのコールバック、攻撃者へのシェルの配信など、悪意のあるアクションを実行するために必要なすべての機能が備わります。

以下の例は、ステージレスの Meterpreter リバース tcp ペイロードを Windows 実行可能ファイルとして示しています。

ステージレスMeterpreterリバースTCPペイロード

悪意のあるキャンペーンの一部として使用するペイロードの種類の決定は、その脅威アクターの「運用上のセキュリティに関する考慮事項」として知られています。悪意のあるキャンペーンをサポートする対応する攻撃者インフラストラクチャの種類は、これらの考慮事項に部分的に影響されます。

ステージングペイロードとステージレスペイロード

Metasploitステージングペイロードには、Meterpreterという単語の後にスラッシュ記号(/ )が付きます。次のスクリーンショットは、Windows でステージングされた Meterpreter ペイロードの例を示しています。

Windows ステージングされた Meterpreter ペイロード

ステージレスペイロードでは、Meterpreterという単語の後にアンダースコア記号(_ )が使用されます。次のスクリーンショットは、Windows Meterpreter ステージレス ペイロードの例を示しています。

Windows Meterpreter ステージレス ペイロード

次の例は、ペイロードの両方のカテゴリを示しています。

Windows Meterpreter ペイロード

ステージレスペイロードは自己完結型であり、マルウェアが攻撃者のインフラストラクチャにコールバックした後に、被害者のマシンにステージ(メインペイロード)を送信するという追加の手順を必要としません。以下のスクリーンショットでは、リバースTCPハンドラーが起動した後、次のステップは、ステージなどのペイロードをそれ以上送信することなく、被害者のマシンへのハンズオンMeterpreterリモートシェルセッションをすぐに開くことです。

Meterpreter リモートシェルセッション

以下のスクリーンショットから、ステージャーが攻撃者のインフラストラクチャにコールバックした後にステージを送信する追加のステップ「ステージ(175174)を203.0.113.1に送信する」ことがわかります。

送信ステージ

ステージングとステージレスのもう 1 つの違いは、ペイロードのサイズです。以下のスクリーンショットでは、ステージレス ペイロード (meeting_update_stageless.exe) は 245 KB で、ステージングされた初期ペイロード (web1_meeting_update.exe) は 73 KB ではるかに大きくなっています。

ステージレスペイロードサイズ

シェルコードとは何ですか?

シェルコードは、コンピューターのメモリ内で実行中のプログラムの通常のフローを乗っ取ろうとする悪意のあるコードです。次に、通常のプログラムではなく悪意のあるコードが実行されるようにフローをリダイレクトし、攻撃者にシェルまたはハンズオンアクセスを提供します。これらは多くの場合、低レベルのプログラミング コードまたはエクスプロイトと組み合わされたマシン コードの形式のビーコンまたはペイロードです。エクスプロイトは、脆弱性をうまく利用する低レベルまたはネイティブコードの一部です。

悪用された脆弱性には、多くの場合、攻撃者が割り当てられたメモリをオーバーランして通常のプログラム フローをリダイレクトするアプリケーションのメモリ内のバッファ オーバーフローが含まれます。エクスプロイトに成功すると、マルウェアであるペイロードが実行されます。

最も純粋な形では、シェルコードは、メモリ関連のエクスプロイトで一般的に使用されるネイティブまたはアセンブリコードになります。

以下の例は、Powershell(ps1)シェルコードを示しています。

Powershellシェルコード

この特定の例では、リフレクティブ ローダーを介してメモリに挿入された Windows ダイナミック リンク ライブラリ (DLL) を使用します。シェルコードは英数字形式で生成されます。正常に実行されると、Metasploit フレームワークから生成されたリバース DNS TCP セッションを介して攻撃者に接続できます。

配信メカニズムの選択、エクスプロイトの種類、脆弱なターゲット システムはすべて、攻撃に関連するビーコンまたはペイロードの選択を決定します。このエクスプロイトは、基盤となるオペレーティング システムにアクセスする前に、脆弱なアプリケーションを利用するために使用されます。このような場合、対応するアプリケーション用の特定のコードが使用される場合があります (たとえば、Web サーバー フロントエンド アプリケーションの場合は PHP または ASP)。

シェルコードの特徴

シェルコードの実行を成功させ、高い運用セキュリティを維持するために、いくつかの重要な考慮事項と特性があります。

コードは、次のことを行う必要があります。

  • 目的のシェルを実行するために必要なすべての命令を、サイズが比較的小さくして用意してください。
  • メモリ内で「位置に依存しない」こと — ターゲットの脆弱なプロセスのメモリのどこにロードされるかを事前に把握できないことが多いため、これは非常に重要です。
  • 潜在的なエラーを引き起こしたり、プロセス全体をクラッシュさせたりする可能性のあるものは含まれていません。たとえば、null 文字 (0x00) が原因です。
  • コードまたはリフレクションインジェクションなどのインジェクション手法を使用して、既存のメモリ割り当てに便乗できる。

この時点から、攻撃者は、Windows の場合は EXE または DLL、Linux の場合は ELF、Android の場合は APK など、ターゲット システム上で実行する適切なエクスプロイト後の実行可能ファイル タイプを選択する必要があります。繰り返しになりますが、運用上のセキュリティを強化するには、メモリのみのエクスプロイト後の手法が好まれます。

コードインジェクションとDLLインジェクションとは何ですか?

DLL インジェクションは、別のプロセスのコンテキストでコード (DLL) を実行するプロセスです。Meterpreter ペイロードは、ステルスおよび回避メカニズムに DLL インジェクション技術を使用します。

Windows では、ダイナミック リンク ライブラリまたは DLL (Linux では「共有ライブラリ」) は、共有ライブラリ ファイルとして格納されるコードです。これは、必要なときにさまざまなコンピューター プログラムで使用できることを意味します。オペレーティング システム (この場合は Windows) は、実行時に行われるライブラリの書き込みと読み込みを処理します。プログラムは、必要な DLL ファイルを呼び出したり参照したりするだけで、そのファイルに含まれるコードを使用できます。

これは、プログラマーがコードを一度だけ記述し、それをコンパイルして共有ライブラリまたはDLLとして保存し、必要なときにいつでも複数のプログラムで使用するため、プログラマーにとって便利です。

DLL と EXE ファイルの主な違いは、DLL を独立して実行できないことです。EXE のようなプログラムを呼び出したり参照したりして実行する必要があります。次の例は、Windows オペレーティング システム内の DLL ファイルを示しており、通常は C:\Windows\ WinSxS フォルダー (WinSxS は Windows Side-by-Side の略) に格納されます。

DLLファイル Windows

DLL の機能は、脅威アクターにとっても非常に役立ちます。基本レベルでのコードインジェクションには、1つのプロセス(悪意のある)がリモートプロセス(被害者プロセス)にアタッチ(またはハンドルを取得する)ことを試みることが含まれます。次に、DLL などの新しいコードを実行するのに十分なメモリを割り当てたり、被害者のプロセスにページ権限を変更したりした後、DLL の悪意のあるコードを新しいまたはすでに実行されている被害者のプロセスのメモリ空間にコピー (挿入) します。

次に、プロセスが特定のタスクを実行する方法である新しいスレッドが被害者のプロセスで開始され、挿入されたコードまたはDLLに含まれる命令が実行されます。

スレッドは、スレッドを開始したプロセスと同じメモリ空間を共有しますが、異なるプロセスには、特に変数を共有していない場合に、異なるメモリ空間が割り当てられます。これはオペレーティングシステムによって強制されます。ただし、オペレーティング システムには、パイプ (名前付きまたは匿名)、ソケット、セマフォ、共有メモリ、メッセージ キューなど、プロセス間通信 (IPC) を使用して必要に応じてプロセスが通信するためのメカニズムが用意されています。

Windows オペレーティング システムでは、コード インジェクションには、悪意のある目的のために正規の Windows API と関数を使用することが含まれます。例えば:

  • OpenProcess は、プロセスへのハンドルを取得するために使用されます。
  • VirtualAllocEx は、そのリモート プロセスに十分なメモリを割り当てるのを容易にします。
  • VirtualProtectEx を使用してメモリ (ページ) のアクセス許可をオーバーライドし、
  • WriteProcessMemory は、DLL などの悪意のあるコードを被害者のプロセスに書き込みます。
  • CreateRemoteThread、RtlCreateUserThread、または NtCreateThreadEx は、新しいスレッド (プロセスが特定のタスクを実行する方法) を作成し、資格情報の盗難やランサムウェアの実行などの悪意のある機能を実行するために使用されます。

Windows で DLL を読み込むには、libloaderapi.h の一部である LoadLibraryA または LoadLibraryExA 関数を呼び出す必要があります。これらの関数は、Microsoft が言うように、「指定されたモジュールを呼び出し元プロセスのアドレス空間にロードする」ものです。LoadLibrary を使用して DLL を読み込むには、DLL をディスクから読み込む必要があります。

ただし、リフレクティブ DLL インジェクション技術を使用すると、DLL をメモリから直接読み込むことができますが、これは現在 LoadLibrary では提供されていない機能です。脅威アクターは、リフレクティブ DLL インジェクションを使用して、ディスク上のネイティブ Windows ローダーを呼び出すことなく、悪意のあるコードを完全にメモリにセルフロードできます。ここでは、Windows LoadLibrary の代わりにカスタム ローダーを利用します。

攻撃者は、次のような他のインジェクションおよびプロセス操作手法を使用することもできます。

  • プロセスハロウ化 — マルウェアが一時停止状態で被害者のプロセスを開始する場所。次に、メモリを空洞化して新しいコード用のスペースを作り、ページ権限を変更し、悪意のあるコードを挿入し、挿入された悪意のあるコードを実行するプロセスを再開します。
  • DLL サイドローディング — 正当で古い脆弱性のある Windows プログラム (被害者プロセス) が、被害者が予期する正規の DLL と同じ名前が意図的に付けられ、脆弱なプログラムと同じディレクトリ (並べて) に配置される悪意のある DLL を強制的にロードします。被害者のプログラムのプロセスは、最初にその直接のフォルダーを調べて、名前が変更された (なりすましされた) 悪意のある DLL を見つけます。この手法は、Windows ローダーが成功させるために使用する DLL 検索順序を利用します。

これらの手法は、悪意のあるアクティビティを正当なものに見せかけ、検出を回避して侵害されたシステムに存続させようとします。

このシリーズのパート 1 で説明したプロセス操作手法から、元の悪意のあるweb1_meeting_update.exeの移行にはコード インジェクションが含まれていたことがわかります。

この例では、悪意のあるペイロードは、コードを挿入する目的の被害者プロセスとして、まったく新しいnotepad.exeプロセスを開始(生成)しました。その後、元の悪意のあるプロセス(PID 2472)が、新しいnotepad.exe被害者プロセス(PID 1768)に挿入または移行されます。

notepad.exe被害者プロセス

Notepad.exeは信頼できるMicrosoftプロセスであるため、攻撃者は元の悪意のあるプロセスをより信頼できるプロセスに偽装することができます。Notepad.exeは基本的なWindowsテキストエディタであり、ネットワーク接続に必要なWindows API、関数、またはDLLを呼び出し(参照)する必要はありません(この例では、悪意のあるプロセスが実行されました)。

メモリ内で発生しているインジェクションを検出するには、動的解析が必要です。アプリケーション依存関係マッピング は、テキストエディタの疑わしいネットワーク通信 (この場合はnotepad.exeプロセス) を検出するためにも必要です。

Conclusion

このブログシリーズの パート1 に続いて、脅威アクターが使用する可能性のあるペイロードのカテゴリとタイプ、および脅威アクターが別のタイプよりも1つのタイプを使用することを決定する理由を見てきました。

ほとんどの脅威攻撃者は、最初の侵入を成功させ、永続性を維持し、検出を回避するために多大な努力を払います。これまで、ツール、技術、手順の組み合わせは、攻撃の成功を防ぐために、または 侵害を想定 して最初のサイバーインシデントが大規模な侵害になるのを防ぐために、セキュリティツールと手順の同等の能力の組み合わせが必要であることを意味することをこれまで見てきました。

このシリーズの最後の部分では、さらにいくつかの手法と機能について説明し、最も重要なのは、分析と軽減策について検討することです。

関連トピック

関連記事

ゼロトラストセキュリティ、「侵害を想定する」考え方、英国のデータ改革法案
Cyber Resilience

ゼロトラストセキュリティ、「侵害を想定する」考え方、英国のデータ改革法案

90%の組織が2022年にゼロトラストセキュリティ戦略を優先する予定ですが、侵害が発生すると考えている組織は驚くほど少ないです。

クラウンジュエル資産の保護:あなたの行動計画は何ですか?
Cyber Resilience

クラウンジュエル資産の保護:あなたの行動計画は何ですか?

「王冠の宝石」を確保し、考えられない事態を回避するために、堅実なビジネスケースと実践的な行動計画をどのように構築すればよいでしょうか?

不必要なリスクを生み出すクラウドセキュリティの誤った仮定
Cyber Resilience

不必要なリスクを生み出すクラウドセキュリティの誤った仮定

アマゾン・ウェブ・サービスが最初のクラウド・インフラストラクチャ・プラットフォームを立ち上げてから15年が経ちました。

No items found.

違反を想定します。
影響を最小限に抑えます。
レジリエンスを高めます。

ゼロトラストセグメンテーションについて詳しく知る準備はできていますか?