maldev-for-dummies - マルウェア開発に関するワークショップ

(A workshop about Malware Development)

Created at: 2022-05-09 19:37:56
Language: C#
License: NOASSERTION

ダミーのためのマルウェア開発

EDRの時代には、レッドチームのオペレーターはコンパイル済みのペイロードの使用をやめることができなくなりました。そのため、マルウェアの開発は、あらゆるオペレーターにとって不可欠なスキルになりつつあります。maldevの使用を開始するのは困難に思えるかもしれませんが、実際には非常に簡単です。このワークショップでは、始めるために必要なすべてを紹介します。

このリポジトリには、2022年パリのハックで開催される「MalDevforDummies」ワークショップのスライドとそれに伴う演習が含まれています(追加の会議TBA👀)。演習はここで引き続き利用でき、自分のペースで完了することができます。学習プロセスを急ぐことはできません。質問や提案を含むこのリポジトリへの問題やプルリクエストを歓迎します。

免責事項:マルウェア開発は、(攻撃的な)セキュリティの分野を促進し、防御を鋭く保つために、有効に使用できるスキルであり、使用する必要があります。このスキルセットを使用して、許可されていないアクティビティを実行する場合は、このワークショップの目的よりも大きなダミーであるため、ここから抜け出す必要があります。

ワークショップの説明

ウイルス対策(AV)およびエンタープライズ検出および応答(EDR)ツールが分単位で成熟するにつれ、レッドチームは時代の先を行くことを余儀なくされています。変更されていないペイロードをディスクにドロップする時代は

execute-assembly
終わりました。エンゲージメントを1週間以上持続させたい場合は、ペイロードの作成とマルウェア開発ゲームを強化する必要があります。ただし、この分野から始めるのは困難な場合があり、適切なリソースを見つけるのは必ずしも簡単ではありません。

このワークショップは、この分野の初心者を対象としており、マルウェア開発者としての最初のステップをガイドします。これは主に攻撃的な施術者を対象としていますが、防御的な施術者も参加してスキルセットを広げることを歓迎します。

ワークショップでは、いくつかの理論を検討し、その後、ラボ環境を設定します。現在のスキルセットと対象に対する快適さのレベルに応じて、さまざまな演習を完了することができます。ただし、ワークショップの目的は学習することであり、すべての演習を完了することではありません。マルウェア開発に使用するプログラミング言語は自由に選択できますが、ワークショップ中のサポートは主にC#およびNimプログラミング言語に対して提供されます。

ワークショップでは、独自のマルウェアの作成を開始するために必要な主要なトピックについて説明します。これには以下が含まれます(ただし、これらに限定されません)。

  • Windows API
  • ファイルタイプと実行方法
  • シェルコードの実行と注入
  • AVおよびEDR回避方法

入門

マルウェアの開発を開始するには、ホストマシンで実行される可能性のある防御ツールに煩わされないように、開発マシンが必要になります。私は開発にWindowsを好みますが、LinuxでもMacOSでも同じようにうまくいきます。選択したIDEをインストールします(Visual Studioを使用するC#を除くほとんどすべてにVS Codeを使用してから、選択したMalDev言語に必要なツールチェーンをインストールします。

  • C#:Visual Studioには、C#の開発に必要な.NETパッケージを含めるオプションがあります。Visual Studioなしで開発する場合は、 .NETFrameworkを個別にダウンロードできます。
  • Nim langダウンロード手順に従ってください。Choosenimは、インストールプロセスを自動化するために使用できる便利なユーティリティです。
  • Golang(ワークショップ中はサポートされていません):ダウンロード手順に従ってください。
  • Rust(ワークショップではサポートされていません):Rustupを使用して、必要なツールチェーンとともにRustをインストールできます。

Windows Defenderを無効にするか、適切な除外を追加することを忘れないでください。そうすれば、ハードワークが隔離されません。

注:多くの場合、aptなどのパッケージマネージャーやChocolateyなどのソフトウェア管理ツールを使用して、依存関係のインストールと管理を便利で繰り返し可能な方法で自動化できます。ただし、パッケージマネージャーのバージョンは、実際のものよりも遅れていることが多いことに注意してください。以下は、前述のツールを一度にインストールするためのChocolateyコマンドの例です。

 choco install -y nim choosenim go rust vscode visualstudio2019community dotnetfx

プログラムのコンパイル

C#とNimはどちらもコンパイル型言語です。つまり、コンパイラを使用して、ソースコードを選択した形式のバイナリ実行可能ファイルに変換します。コンパイルのプロセスは言語ごとに異なります。

C#

C#コード(

.cs
ファイル)は、直接(
csc
ユーティリティを使用して)コンパイルすることも、VisualStudio自体を介してコンパイルすることもできます。このリポジトリのほとんどのソースコード(ボーナス演習3のソリューションを除く)は、次のようにコンパイルできます。

注:以下のコマンドを「VisualStudio開発者コマンドプロンプト」で実行して、場所がわかるようにし

csc
てください。ご使用のバージョンのVisualStudioには「x64ネイティブツールコマンドプロンプト」を使用することをお勧めします。

csc filename.exe /unsafe

/optimize
フラグを使用して、コンパイル時の最適化を有効にできます。追加することでコンソールウィンドウを非表示にすること
/target:winexe
も、DLLとしてコンパイルすることもでき
/target:library
ます(ただし、コード構造がこれに適していることを確認してください)。

ニム

Nimコード(

.nim
ファイル)は
nim c
コマンドでコンパイルされます。このリポジトリのソースコードは、次のようにコンパイルできます。

nim c filename.nim

サイズとストリップのデバッグ情報についてビルドを最適化したい場合(opsecの場合ははるかに優れています!)、次のフラグを追加できます。

nim c -d:release -d:strip --opt:size filename.nim

オプションで、追加してコンソールウィンドウを非表示にすることもできます

--app:gui

依存関係

ニム

ほとんどのNimプログラムは、WindowsAPIとのインターフェイスを「Winim」と呼ばれるライブラリに依存しています。次のように、パッケージマネージャーを使用してライブラリをインストールでき

Nimble
ます(Nimのインストール後)。

nimble install winim

資力

ワークショップのスライドは、開始するために使用できるいくつかのリソースを参照しています。追加のリソースは

README.md
、すべての演習のファイルにリストされています。