
wsb-detect は、Windows Sandbox(WSB)で実行されているかどうかを検出するためのツールです。このサンドボックスは、Windows Defender が動的解析に使用し、セキュリティアナリストなどが手動で使用することも一般的です。2019年末、Microsoft は Windows Sandbox(略称 WSB)という新機能を導入しました。WSB を識別するために使用される手法は、以下の「手法」セクションにまとめられています。識別のアイデアがあれば、プルリクエストを送信してください🎉。私は時々これをいじっていますが、近いうちに Windows Sandbox に関するさらなる情報を公開する予定です。
Windows Sandbox を使用すると、15秒以内に、使い捨ての Hyper-V ベースの仮想マシンを迅速に作成できます。この仮想マシンは、クリップボード共有やディレクトリマッピングなど、おなじみの VM が備えるすべての機能を備えています。このサンドボックスは、Microsoft Defender Application Guard(WDAG)の基盤でもあり、Hyper-V が有効なホストでの動的解析に使用され、Windows 10 Pro または Enterprise の任意のマシンで有効にできます。特に興味深いわけではありませんが、それでもインプラント開発に役立つ可能性があります。サンドボックスの内部を調査する際にガイダンスを提供してくれた友人 Jonas L に感謝します(これについては後日さらに詳しく説明します)。
detect.h ヘッダーは、検出のために組み合わせることができるすべての関数をエクスポートします。
#include <stdio.h>
#include "detect.h"
int main(int argc, char** argv)
{
// example vmsmb & username check
if (wsb_detect_dev() || wsb_detect_username())
{
puts("We're in Windows Sandbox!");
return 0;
}
return 1;
}
wsb_detect_procCExecSvc.exe の存在を確認します。これはコンテナ実行サービスであり、内部の多くの重労働を処理します。
wsb_detect_timeサンドボックスのイメージは 2019年12月7日土曜日 9:14:52 AM にビルドされたようです。これは、Windows Sandbox が一般公開された頃のタイムスタンプです。このチェックでは、mountmgr ドライバの作成タイムスタンプを相互参照します。
wsb_detect_username現在のユーザー名が、サンドボックスでデフォルトで使用されるアカウント WDAGUtilityUserAccount であるかどうかを確認します。
wsb_detect_suffixGetAdaptersAddresses を使用してアダプターのリストを走査し、DNS サフィックスがサンドボックスでデフォルトで使用される mshome.net と一致するかどうかを比較します。
wsb_detect_dev生デバイス \\.\GLOBALROOT\device\vmsmb を開くことができるかどうかを確認します。これは、SMB を介したホストとの通信に使用されます。
wsb_detect_cmd起動時に、HKEY_LOCAL_MACHINE の RunOnce キーの下で、パスワードを無期限に設定するコマンドを検索します。
wsb_detect_genuineサンドボックス検出に関するより汎用的な方法ですが、テストから、VM 内の Windows は正規のものとして検証されていないようです。
より迅速に連絡を取りたい場合は、Twitter またはメール でお気軽にご連絡ください。また、ホスト側では、WindowsSandboxMutex という名前のミューテックスを作成できるかどうかを確認することで、サンドボックスが実行中かどうかを検出できます。これにより、サンドボックスはホストごとに1つの仮想マシンに制限されますが、ハンドルを複製して ReleaseMutex を呼び出すだけで、このミューテックスを解放できます。これで複数のインスタンスを実行できるようになります。
