/
サイバー・レジリエンス

マルウェアペイロードとビーコン:悪質なペイロードのタイプ

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

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

マルウェア 構成と実行がより高度になりました。特に、次のような単純なウイルスの時代とは対照的です クリーパー 70年代初頭のプログラム。主に秘密の狙いを動機とする脅威アクターにとって、通常は、検出されないまま長期間ネットワーク内に留まるという監視下にとどまることが最優先課題です。そのため、デコイ、エンコーディング、難読化、暗号化、模倣などの対応する手法を採用して、望ましいレベルの運用セキュリティを実現することになります。

脅威アクターが利用できる実行形式はいくつかあります。攻撃者がどの方法を選択するかは、最初の攻撃ベクトルとその後の攻撃方法によって異なります。その一部を以下に示します。 メタスプロイト フレームワークの実行形式と変換形式。

Metasploit executable

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

実際の大まかな分類となると、ペイロードは「ステージング」でも「ステージレス」でもかまいません。脅威アクターはいくつかの要因によってどちらか一方を選択することがありますが、その主な要因は運用上のセキュリティ上の考慮事項かもしれません。

ステージペイロードとは

段階的ペイロードは攻撃の個別のフェーズを分割します。多くの場合、1 つのペイロードで実行されていたであろう複数のペイロードフェーズが使用されます。これらのペイロードは通常、「ステージ」(初期ペイロードまたはビーコン) 実行ファイルと「ステージ」(メインペイロード) 実行ファイルに分けられます。

Stagerは、初期ペイロードである小さな実行ファイルです。これは比較的小さなコードで、ステージペイロードと呼ばれる、はるかに大きく、より高性能なペイロードを準備するために実行されます。つまり、「ステーガーがステージを設定する」ということです。通常、最初のエントリで脆弱性が悪用された場合、Stagerが何らかのエクスプロイトコードの一部になります。この場合、エクスプロイトコードはターゲットの脆弱性を悪用することに成功し、Stagerコード (ペイロード) を実行します。その後、Stagerはアクションを開始します。

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

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

stager pattern

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

staged payload Windows executable

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

ステージレスペイロードとは

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

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

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

stageless Meterpreter reverse tcp payload

悪意のあるキャンペーンの一環としてどのタイプのペイロードを使用するかの決定は、その脅威アクターにとって「運用上のセキュリティ上の考慮事項」として知られています。これらの考慮事項の影響を一部受けているのは、悪意のある攻撃者による攻撃者インフラストラクチャのタイプです。

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

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

Windows staged Meterpreter payloads

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

Windows Meterpreter stageless payloads

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

Windows Meterpreter payloads

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

Meterpreter remote shell session

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

Sending stage

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

Stageless payload size

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

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

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

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

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

Powershell shellcode

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

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

シェルコードの特徴

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

コードは次の条件を満たす必要があります。

  • 比較的小さいサイズでありながら、目的のシェルを実行するために必要なすべての指示を用意してください。
  • メモリ内で「位置に依存しない」こと。これは、対象となる脆弱プロセスのメモリのどこに読み込まれるかを事前に知ることができない場合が多いため、非常に重要です。
  • ヌル文字 (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 サイドバイサイドの略です) に保存されます。

DLL files Windows

DLL の機能は、脅威アクターにとっても非常に有用です。基本レベルでのコードインジェクションとは、あるプロセス (悪意のある) がリモートプロセス (被害者プロセス) に接続 (またはハンドルを取得) しようとする行為です。その後、被害者プロセスに DLL などの新しいコードを実行するのに十分なメモリを割り当てたり、ページ権限を変更したりします。その後、DLL の悪質なコードを、新しいまたは既に実行中の被害者プロセスのメモリ空間にコピー (注入) します。

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

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

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

  • オープンプロセス プロセスにハンドルを組み込むのに使います
  • バーチャルアロセックス そうすれば、そのリモートプロセスに十分なメモリを割り当てやすくなります。または、
  • バーチャルプロテクテックス メモリ (ページ) 権限をオーバーライドするために使用できます。そして
  • 書き込みプロセスメモリ DLL などの悪質なコードを被害者プロセスに書き込みます。
  • [リモートスレッドの作成]、[RTL] [ユーザースレッドの作成]、または [NT スレッドの作成] は、新しいスレッド(プロセスが特定のタスクを実行する方法)を作成し、認証情報の盗用やランサムウェアの実行などの悪意のある機能を実行するために使用されます。

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

ただし、リフレクティブ DLL インジェクション技術を使用すると、DLL をメモリから直接ロードできます。この機能は、現在 LoadLibrary では提供されていません。脅威アクターは、リフレクティブ DLL インジェクションを使用して、ディスク上のネイティブ Windows ローダーを起動しなくても、悪意のあるコード全体をメモリに自己ロードできます。ここでは、Windows ロードライブラリの代わりにカスタムローダーを利用します。

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

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

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

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

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

notepad.exe victim process

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

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

結論

から続く パート 1 無差別版、水牛大会、水明大会、、、、、、、、その種類別別別別というか。

みずほら、第一、新月日、取っ払い、聴きごろごろごし。踏みつけ記、、、、水法、、 と定 ファースト・サーフィ・ダイブで。

太刀魚大人、さらにと輪、、酒、酒と

関連トピック

関連記事

ゼロトラストの運用 — ステップ 2 と 3: 重点的に取り組むべきゼロトラストの柱の決定と正確な統制の指定
サイバー・レジリエンス

ゼロトラストの運用 — ステップ 2 と 3: 重点的に取り組むべきゼロトラストの柱の決定と正確な統制の指定

ワークロード保護には、OSとインストールされているアプリケーションの効果的な保護とパッチ適用、ウイルス対策、EDR、ファイル整合性監視、ホストベースのファイアウォールなどのホストベースの脅威保護制御など、多くのセキュリティ機能が含まれますが、これらに限定されません。

ハイブリッドクラウド環境をどのように保護するか?
サイバー・レジリエンス

ハイブリッドクラウド環境をどのように保護するか?

Illumioのシニア・プロダクト・マーケティング・マネージャーであるErika Bagbyが、ハイブリッドクラウド環境のセキュリティについて語ります。

マイクロソフトエクスチェンジ、SolarWinds、Verkadaによる情報漏えい:セキュリティ衛生がこれまで以上に重要になっている理由
サイバー・レジリエンス

マイクロソフトエクスチェンジ、SolarWinds、Verkadaによる情報漏えい:セキュリティ衛生がこれまで以上に重要になっている理由

セキュリティ衛生とは、サポートプロセスと技術的統制の導入によって強化される健全なセキュリティ行動です。

アイテムが見つかりません。

Assume Breach.
影響を最小限に抑えます。
レジリエンスを高めます。

Ready to learn more about Zero Trust Segmentation?