.Net アセンブリを使用したランサムウェア手法の謎を解く: 5 つの主な手法
ランサムウェア攻撃は、検出を回避し、システム上のデータを暗号化することで繁栄します。ランサムウェア攻撃後の分析では、攻撃がさまざまな種類のファイルとさまざまな手法を組み合わせて使用した方法についてよく読みます。
では、それは実際には何を意味するのでしょうか?このシリーズでは、 .Net ソフトウェアフレームワークを使用してすべてを分解し、ランサムウェアのこれらの機能がどのように可能になるかを示します。
マルウェアペイロードとビーコンに関する以前の3部構成のシリーズでは、 Metasploit ペネトレーションテストフレームワークに焦点を当てました。既製の meterpreter マルウェア ペイロードを使用して、さまざまな攻撃者の手法を示しました。最初の記事では、悪意のある通信がどのように開始されるか、攻撃者のインフラストラクチャ、および攻撃のフォレンジック分析を調査しました。2番目の記事では、ペイロードのカテゴリとタイプ、およびいくつかのメモリ内操作手法について説明しました。そのシリーズの 最後の部分 では、回避と軽減のテクニックに焦点を当てました。
このシリーズでは、 .Net ソフトウェア フレームワークを活用しながら、ランサムウェアに焦点を当てて、独自の個別のペイロード ファイル (アセンブリとも呼ばれます) を作成します。まず、ランサムウェアとマルウェアの機能を個々の手法例に分解して、それらがどのように単独で機能するかを理解します。これらの個々の手法のいくつかは、最終的に単一の悪意のあるランサムウェアペイロードに組み合わされ、しばしば壊滅的な影響を及ぼします。
テクニック 1: ダウンローダー、ドロッパー、ローダー
まず、ランサムウェアやマルウェアが感染したネットワークからどのように接続できるかを調べます。これは、リモートシステムに接続し、追加のペイロードをダウンロードし、侵害されたシステムにドロップして実行する(つまり、メモリにロードする)機能です。
以下は、 次のような .Net コマンドライン (コンソール) アプリケーションの例です。
- 別のリモート実行可能アプリケーション(putty.exe)をダウンロードしてダウンローダーとして機能します。インターネットから
- ダウンロードしたアプリケーションをコンピュータのディスク上の 一時 フォルダにドロップします。
- アプリケーションの名前を putty_new.exe に変更します。
- ダウンロードしたアプリケーションをコンピュータ上で自動的に実行し、メモリにロードします。

ペイロードステージングが使用されている場合、つまり複数の悪意のあるファイルが異なることを実行することを意味する場合、Stager(最初の小さなペイロード)はダウン ローダー になるだけでなく、大まかに言えばステージの ドロッパー (メインの大きなペイロード)になる可能性があります。ステージのローダーである可能性もあります。採用される手法は、脅威アクターによる検出リスクの評価(運用セキュリティの考慮事項とも呼ばれます)によって異なります。
ダウンローダーは、Web サーバーや FTP サーバーなどのリモート ソースからペイロードをプルダウンする役割を果たします。これは通常、インターネット経由で行われます。したがって、ダウンローダーは、リモートソースに到達するために何らかのネットワーク接続を試みる必要があります。
一方、 dropper は主に、被害者のシステムにペイロードを配信またはドロップする役割を果たします。したがって、ダウンローダーもドロッパーになる可能性がありますが、ドロッパーにはすでにポータブル実行可能ファイル(PE)ファイルまたはDLLとして悪意のあるペイロードが埋め込まれている可能性があるため、ドロッパーは必ずしもダウンローダーであるとは限りません。これらのファイルの種類については後で説明します。ドロッパーは攻撃で一般的に使用されます。一般的な例は、SolarwindsとKaseyaのサプライチェーン攻撃です。どちらも、悪意のあるペイロードのドロッパーとして使用される侵害されたサプライヤー エージェント ソフトウェアの使用に関係していました。後者は REvil ランサムウェア グループによって使用されています。
ローダーは、特にメモリのみのペイロードの場合、別の悪意のあるペイロードを実行するように被害者システムをセットアップする役割を果たします。ここでの設定とは、多くの場合、DLLを別のプロセスのメモリ空間に挿入し、適切なメモリ権限を設定することによって、必要なメモリ空間の割り当てを確保することを意味します。次に、ローダーはペイロードを起動するか、必要なスレッドを実行します。
テクニック 2: DLL ファイルを EXE で読み込む
ランサムウェアのペイロードは、EXE ファイルまたは DLL ファイルの形式にすることができます。次に、EXE ファイルとも呼ばれる Windows 実行可能ファイルが、ダイナミック リンク ライブラリ (DLL) ファイルと呼ばれるものをロードして、そこに含まれるコードを活用する方法を見ていきます。

EXE と DLL は、コンピューター プログラミング コード命令と関連情報 (メタデータ) を含む 2 種類の .Net アセンブリです。これらの命令とメタデータは、1 つの結果ファイル (EXE または DLL .Net アセンブリ) にまとめられます。これら 2 種類のファイルを使用すると、コンピューター プログラミング コードを Windows システム上で実行 (EXE) したり、ライブラリ ファイル (DLL) として保存したりして、他のファイルで「借用」して読み取ることができます。DLL の場合、このプロセスは、複数の人が図書館から同じ本を異なる時間に借りてその内容を読む方法とよく似ています。このシリーズの第 2 部では、これら 2 つのアセンブリを .Net に関連して詳しく説明します。ソフトウェアフレームワーク。
ここでは、これら 2 種類の .Net アセンブリ (独自のコードを実行し、DLL ファイルから外部コードを読み込んで読み取る実行可能ファイル (EXE) ) の使用を示す非常に簡単な例を示します。次に、実行可能ファイルは、ロードされた DLL コードに入力を渡します。最後に、DLL は EXE から受信した入力を使用して、アプリケーションを実行するユーザーにメッセージを表示します。以下は実際のコードです。

この単純なアプリケーションでは、EXE と DLL .Net アセンブリの関係も示します。この種類の関係は、Windows オペレーティング システム自体を含む多くのアプリケーションやオペレーティング システム (共有ライブラリ) で正当に使用されます。Windows は、さまざまなアプリケーションで共有できるように、多くの独自のコードを DLL としてパッケージ化します。
次の図は、前の例の EXE と DLL の両方のプログラミング コードを示しています。コードは、 .Netでサポートされている言語の1つであるC#プログラミング言語を使用して記述されています。この図では、強調するために DLL コード参照が強調表示されています。

DLL は、コードを一度記述し、その後、さまざまな実行可能ファイルで共有ライブラリまたは動的ライブラリとして何度も使用できる効果的な手段です。この結果、多くのマルウェアやランサムウェア ファミリによっても頻繁に使用されています。DLL サイド ローディングや DLL ハイジャックなどの手法は、これらの .Net アセンブリ間の関係を利用する一般的な悪意のある手法です。
テクニック3:陸地バイナリの偵察と立ち上げ
ターゲットシステムに関する有用な情報を収集する機能(検出)と同時に、そのシステム上で他のバイナリや実行可能ファイルを起動する機能(スポーン)という重要な手法の組み合わせを続けます。この画像では、最初のカスタム実行可能ファイルがターゲットのWindowsシステム上でネイティブ実行可能ファイルまたはバイナリを起動し、Living off the Land(LotL)攻撃を示しています。

この例では、最初の C# アプリケーションが実行され、出力の緑色のテキストで示されるターゲット システムに関する有用な情報の収集に進むことを示しています。収集されるドライブ情報に注目してください。この情報は、ランサムウェアによってこれらのドライブ上のファイルを標的にするために利用され、暗号化の前に盗み出され、通常は高額な身代金を要求する可能性があります。
アプリケーションは、外部システム実行可能ファイルであるWindowsコマンドプロンプト(cmd.exe)を起動して続行します実行可能。次に、カスタム アプリケーションは、いくつかの Windows コマンドを Windows cmd.exe プロセスに渡して表示します (赤いテキストで表示)、この場合は Windows システムのバージョン情報。この記事の目的のために、カスタム C# アプリケーションには、実行するアクションの出力と、起動されたプロセスに関する情報が表示されます。他の外部アプリケーションを起動するこの機能は、最終的に悪意のあるコードを挿入する被害者のプロセスを開始するのにも役立ちます。
テクニック 4: データ エンコーディング
もう 1 つの便利な手法は、データ エンコードです。これは、アルゴリズムを使用してデータを別の形式で表現するプロセスです。たとえば、1 種類のエンコーディングである base64 は、HTTP 承認や API 呼び出しでの基本認証など、データをやり取りするために一部の Web リクエストで正当に使用されます。ただし、同じ base64 エンコーディングの例は、悪意のあるプログラムやペイロードによって使用される特定のテキストやコマンドを隠すのにも役立ちます。コールバック URL やファイルなどのコードの一部を難読化するために使用できます。このような手法は、スタンドアロンの C# プログラムに以下に示されています。

この特定のアプリの例では、コードはいくつかのテキスト(この場合はURL "https://listener.malware.bad")を受け取ります。コンピュータバイトの配列に変換し、バイトに対して base64 エンコードアルゴリズムを実行して、上記のアプリケーション表示のエンコーダセクションの下に表示されている「aHR0cHM6Ly9saXN0ZW5lci5tYWx3YXJlLmJhZA==」の英数字 ASCII テキストに変換します。このプロセスは、デコーダー セクションに示すように、プログラムで元のテキストを元に戻すことができます。そうすることで、URLは目に見えないところに隠され、それが何であるか、つまり悪意のあるURLであることをすぐに判断することはできません。
テクニック 5: 暗号化
最後に、暗号化について見ていきます。侵害されたシステム上のファイルを暗号化することは、ランサムウェアの代名詞となっています。これもまた、保存データを保護するための正当な機能であり、他のほとんどの手法と同様に、ランサムウェアの悪意のある目的に使用されるようになりました。
以下の例では、C# 暗号化アプリケーションがあります。最初に暗号化用のファイルのコピーを作成し、次にコピーを暗号化して、元のファイルをそのまま残します。

ここでは、元のファイル Data1.txt の元の内容が別のファイルにコピーされ、 Data1-Encrypted.txt、そして、この新しいファイルが暗号化されます。

暗号化はランサムウェアで使用される主要な手法の 1 つであり、侵害されたシステムを身代金のために保持するための基礎を形成します。また、転送中または保存中のマルウェアペイロードやローダーを隠して検出を回避するのにも役立ちます。
5月22日にシリーズのパート2を読む
次の記事では、ここで示すいくつかの戦術と手法の参考として、Microsoft の .Net ソフトウェア フレームワークと関連する C# プログラミング言語と、それらが最終的にどのように促進されるかについて説明します。
イルミオゼロトラストセグメンテーションがランサムウェア侵害の封じ込めにどのように役立つかについて詳しく学びましょう。