
ScareCrow - EDRバイパスを中心に設計されたペイロード作成フレームワーク。
最新バージョンのScareCrowを表示するか、問題を報告するには、https://github.com/Tylous/ScareCrow を参照してください。
このフレームワークで使用されている技術について詳しく知りたい場合は、Part 1 と Part 2 をご覧ください。
ScareCrowは、正当なWindowsプロセスにサイドローディング(インジェクションではなく)を行い(アプリケーションホワイトリスト制御をバイパスする)ペイロード作成フレームワークです。DLLローダーがメモリに読み込まれると、プロセスのメモリ内で実行中のシステムDLLからEDRのフックを除去する技術を利用します。これは、EDRのフックがプロセス生成時に配置されることを利用しています。
ScareCrowは、VirtualProtect API関数を使用して、プロセスのメモリ領域のアクセス許可を別の値、具体的にはExecute-ReadからRead-Write-Executeに変更することで、これらのDLLをメモリ上で操作できます。
ScareCrowは、フックを解除するために2つの方法のうち1つを使用します。
実行されると、ScareCrowは C:\Windows\System32\ にあるシステムDLLのディスク上のバイトをコピーします。これらのDLLは、新しいプロセスが生成されるときに変更されていないコピーをロードするためにシステムによって使用されるため、EDRのフックがかかっていない「クリーンな」状態でディスクに保存されています。EDRはこれらのプロセスをメモリ上でのみフックするため、それらは変更されていません。ScareCrowはDLLファイル全体をコピーするのではなく、DLLの.textセクションのみに焦点を当てます。DLLのこのセクションには実行可能なアセンブリが含まれており、これにより、ファイル全体を再読み取りするとEDRがシステムリソースの変更を検出する可能性があるため、ScareCrowは検出の可能性を低減します。データは、各関数のオフセットを使用して適切なメモリ領域にコピーされます。各関数には、ベースアドレスからの正確なバイト数を示すオフセットがあり、スタック上での関数の位置を提供します。
これを行うために、ScareCrowはVirtualProtectを使用して.textメモリ領域のアクセス許可を変更します。これはシステムDLLですが、制御可能なプロセスにロードされているため、昇格された特権を必要とせずにメモリ許可を変更できます。
ScareCrowは、まずシェルコードを復号化してメモリにロードします。このシェルコードは、以下で説明する3つの暗号化方法のいずれかで暗号化されています。復号化されてロードされると、シェルコードが実行されます。指定されたローダーオプションに応じて、ScareCrowはDLLに対して異なるエクスポート関数を設定します。ロードされたDLLには、すべてのDLLが通常動作するために必要とされる標準のDLLMain関数も含まれていません。ただし、DLLは問題なく実行されます。これは、ロード先のプロセスがこれらのエクスポート関数を探し、DLLMainが存在するかどうかを気にしないためです。
After
KnownDLLsは、Windowsのシステム起動プロセス中にロードされるDLLのリストです。これらのDLLはオペレーティングシステムの機能に不可欠であると見なされるため、キャッシュされてロード時間を短縮し、アプリケーション起動時のパフォーマンスを向上させます。KnownDLLsには、kernel32.dll、kernelbase.dll、ntdll.dllなどのDLLが含まれます。
これらのKnownDllsを利用して、ScareCrowは NtOpenSection と NtMapViewOfSection の組み合わせを使用して \KnownDlls\<dllname> からDLLのコピーをマッピングし、プロセスのメモリにロードします。ScareCrowはDLL全体をロードするのではなく、DLLの.textセクションのみをロードします(このセクションにはすべてのシステムコールが含まれているため)。そこから、ScareCrowは間接システムコールを使用して NtProtectVirtualMemory を呼び出し、DLLの.textメモリセクションのアクセス許可を変更して、ScarecrowがEDRのフックを上書きできるようにしてから、権限を復元します。
詳細については、modexpの詳細な記事をお読みください。
これらのフックが削除されると、ScareCrowはカスタムシステムコールを使用してメモリ内のシェルコードをロードおよび実行します。ScareCrowは、EDRのフックが削除された後でも、Event Tracing for Windows(ETW)やその他のイベントログメカニズムなどの非ユーザーランドでフックベースのテレメトリ収集ツールによる検出を回避するためにこれを行います。これらのカスタムシステムコールは、前述のEDRによって配置されたフックを削除するためのVirtualProtect呼び出しを実行するためにも使用され、EDRの改ざん防止制御による検出を回避します。これは、VirtualProtectシステムコールのカスタムバージョンである NtProtectVirtualMemory を呼び出すことによって行われます。ScareCrowは、これらのローダーを生成するためにGolangを使用し、これらのカスタムシステムコール関数にはアセンブリを使用します。
ローダーの作成プロセス中に、ScareCrowはビーコンがコールバックした後にバックグラウンドに溶け込むためのライブラリを利用します。このライブラリは2つのことを行います。
コード署名証明書で署名されたファイルは、通常、監視が緩やかであり、実行が妨げられにくくなります。信頼できる名前で署名されたファイルは、他のファイルよりも疑われにくいためです。ほとんどのマルウェア対策製品は、これらの証明書を検証および確認する時間がありません(現在は一部の製品が行っていますが、一般的なベンダー名は通常ホワイトリストに含まれています)。ScareCrowは、ツール limelighter のGoパッケージバージョンを使用してpfx12ファイルを作成し、これらの証明書を生成します。このパッケージは、ユーザーが指定したドメイン名を入力として受け取り、そのドメインのコード署名証明書を作成します。必要に応じて、valid コマンドラインオプションを使用して、既存のコード署名証明書を使用することもできます。
clone コマンドラインオプションと、証明書をコピーするファイルへのパスを使用して、DLLまたは.exeファイルを対象に使用できます。 ローダーをmicrosoft.comで署名する場合、WINDOWS DEFENDER ATP製品に対しては、それらが証明書を検証して自分たちのものであると確認できるため、効果が薄い可能性があります。Windows製品に対してローダーを使用する場合は、別のドメインを使用することをお勧めします。
これらのファイルとGoコードを使用して、ScareCrowはc-sharedライブラリオプションを使用してそれらをDLLにクロスコンパイルします。DLLがコンパイルされると、壊れたbase64文字列に難読化され、ファイルに埋め込まれます。これにより、ファイルをリモートで取得、アクセス、およびプログラム的に実行できるようになります。
ScareCrowには広範なファイル属性リストがありますが、カスタム(環境固有の場合もある)属性のセットが必要な状況もあります。これに対応するために、ScareCrowは属性を含むJSONファイルの入力を許可します。-configfile コマンドラインオプションを使用すると、ScareCrowはScareCrowに既存の属性の代わりにこれらの属性とファイル名を使用します。ファイル main.json には、JSON構造が正しく機能するためのサンプルテンプレートが含まれています。"InternalName" として使用するものは、ファイル名になることに注意してください。
ScareCrowは、ローダーをコンパイルするためにgolang 1.19.1以降が必要になりました。古いバージョンを実行している場合は、バージョン1.19.1以降を使用してください。
新しいバージョンについては、https://golang.org/dl/ を参照してください。
最初のステップは、いつものようにリポジトリをクローンすることです。ScareCrowをコンパイルする前に、依存関係をインストールする必要があります。
インストールするには、次のコマンドを実行します。``` go get github.com/fatih/color go get github.com/yeka/zip go get github.com/josephspurrier/goversioninfo go get github.com/Binject/debug/pe go get github.com/awgh/rawreader
以下のものがお使いのOSにインストールされていることを確認してください。```
openssl
osslsigncode
mingw-w64
次にビルドします``` go build ScareCrow.go
さらに、ScareCrowはすべてのloadersを難読化するために[Garble](https://github.com/burrowers/garble)を利用しています。
注意: いくつかの依存関係はWindows上でのコンパイルに適していません。そのため、loadersのコンパイルはOSXまたはLinux上で行うことを推奨します。
## ヘルプ```
./ScareCrow -h
_________ _________
/ _____/ ____ _____ _______ ____ \_ ___ \_______ ______ _ __
\_____ \_/ ___\\__ \\_ __ \_/ __ \/ \ \/\_ __ \/ _ \ \/ \/ /
/ \ \___ / __ \| | \/\ ___/\ \____| | \( <_> ) /
/_______ /\___ >____ /__| \___ >\______ /|__| \____/ \/\_/
\/ \/ \/ \/ \/
(@Tyl0us)
“Fear, you must understand is more than a mere obstacle.
Fear is a TEACHER. the first one you ever had.”