Windows Sandboxで安全にアプリ検証してみた!

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約15分で読めます。

Sandboxは簡単に言えば、「一時的なWindows環境で安全に何でも試せる機能」です。使い終わったら閉じるだけで、すべての変更が元に戻ります。アプリを試しにインストールして後で削除しようと思っても、どこをどう消せばいいか分からず悩むことがありますが、そんなときにSandboxを使えば簡単に試せて、すぐに消去できます。

今回は、npmの安全チェーンツール「safe-chain」の検証を通じて、Sandboxの活用方法を紹介します。

使用しているパソコンはWindows11 Pro、メモリ16Gこちら↓↓↓↓

広告
MINISFORUM日本公式ストア

🪟 Windows Sandboxの始め方

Windows Sandboxとは?

Windows Sandbox(ウィンドウズ・サンドボックス)は、
Windows 10 Pro / Enterprise、または Windows 11 Pro / Enterprise に標準搭載されている軽量な仮想環境です。

たとえば次のような使い方ができます:

  • ダウンロードしたアプリを安全に試す
  • 不審なファイルを開いてみる
  • 本番環境を汚さずに検証が可能

事前準備

✅ 対応エディションを確認しよう

まず、あなたのWindowsが Windows Sandbox に対応しているかを確認します。

Sandboxは「Pro版」以上のエディションでしか使えません。
✅ Homeエディションでは標準で使えません(ただし改造方法はありますが、公式には非推奨です。この記事では触れません。)

🔍 確認方法

  1. 「スタート」ボタンをクリック
  2. 「設定」 → 「システム」 → 「バージョン情報」を開く
  3. 「Windowsの仕様」欄にある エディション を確認

たとえば以下のように表示されていればOKです:

  • ✅ Windows 11 Pro
  • ✅ Windows 10 Pro
  • ✅ Windows 11 Enterprise

⚙️ BIOSで仮想化を有効にする

Sandboxを使うには、CPUの仮想化支援機能をオンにしておく必要があります。
(Intelなら「Intel VT-x」、AMDなら「AMD-V」)

🔍 仮想化が有効か確認する方法
  1. Ctrl + Shift + Esc で「タスクマネージャー」を開く
  2. 「パフォーマンス」タブ → 「CPU」をクリック
  3. 右下の「仮想化」が
    • ✅「有効」になっていればそのままでOK
    • ❌「無効」の場合は、次の手順でBIOS設定を変更します

🔧 BIOSでの設定方法は、パソコンによりそれぞれ違うので、お調べください。

🧩 Windowsの機能でSandboxを有効化

BIOSの設定が完了したら、次はWindows側の設定です。

手順:
  1. スタートメニューで「Windowsの機能」と入力し、
    「Windowsの機能の有効化または無効化」 をクリック
  2. 一覧の中から
    → ✅ Windows Sandbox にチェックを入れる
  3. 「OK」を押すと、必要なコンポーネントがインストールされます
  4. 最後に「今すぐ再起動」をクリックして設定を反映させます

Sandboxの起動手順

再起動が完了したら、いよいよSandboxを起動します。

手順:

  1. スタートボタンをクリック
  2. 検索ボックスに 「Windows Sandbox」 と入力
  3. 出てきたアプリをクリックして起動

数十秒で、まっさらなWindowsが新しいウィンドウとして開きます。

💡 この中は完全に独立した環境です。
ファイルをコピーして試したり、アプリをインストールしても、
ウィンドウを閉じれば すべてリセット されます。


🔎 起動後に確認できること

起動直後に以下のような状態になっていれば成功です:

  • デスクトップに「ゴミ箱」と「Microsoft Edge」だけがある
  • タスクバーにスタートボタンとエクスプローラーが表示されている
  • ネットにも接続できる

📁 エクスプローラーの初期状態

  • 「PC」ビューを開くと表示される項目:
    • ローカルディスク(C:) → 通常のWindowsと同様に見えますが、Sandbox専用の一時的な仮想ディスクです。
    • ネットワークドライブや外部ドライブは表示されません(共有されていない限り)
  • ユーザーフォルダ(C:\Users\WDAGUtilityAccount)
    • 「WDAGUtilityAccount」はSandbox専用の仮想ユーザー名です。
    • 「ドキュメント」「ダウンロード」「デスクトップ」などのフォルダはありますが、中身は空です。

🧼 まさに「何も入っていないクリーンなWindows」です。


💬 補足:起動できないときの対処法

もし「Windows Sandboxは有効化できません」などのエラーが出た場合:

原因対処
Homeエディションを使用Pro以上にアップグレードが必要
BIOSの仮想化が無効BIOSで有効にする
Hyper-Vが無効「Windowsの機能」でHyper-Vにもチェックを入れる(私の場合、チェックしてなくてもSandboxは動いています。

実用例:インストール実験(safe-chain)

safe-chain(npm install前に挙動を監視する安全チェーンツール)をSandbox内にインストールしてみる。
このツールを選んだ理由は、以下のようにインストールができなかったため再度検証したかった。

2025/9/21 Shai-Hulud対策としてsafe-chainをWindows11でインストール失敗!簡易検査スクリプトを作った!

こういうツールやアプリが、うまくインストールできなかったとき、いろいろWindowsの設定などをいじってしまうと、元に戻すのが大変になる。そういうときにSandboxを使って、いろいろ設定を変えて試しても、Sandboxを閉じればすべて元に戻るので便利です。
Sandboxがあれば、まずは、Sandboxで事前に試せば、これはうまくインストールできないということが分かって、本体の環境を汚さずに済みます。

Sandboxを立ち上げた状態だと何も入っていないので必要なものNode.jsとGitを入れます。
Node.jsインストール方法:https://kikuichige.com/16201/#toc2
gitインストール方法:https://kikuichige.com/16201/#toc2

Windows Sandbox ではユーザーは常に「管理者 (Administrator) 権限」で動作しています
そのため、通常のWindowsのように「管理者として実行しますか?」というUAC(ユーザーアカウント制御)ポップアップは表示されません

実行の様子

ツールをインストールします。
PS C:\Windows\system32> npm install -g @aikidosec/safe-chain
npm : File C:\Program Files\nodejs\npm.ps1 cannot be loaded because running scripts is disabled on this system. For mor
e information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ npm install -g @aikidosec/safe-chain
+ ~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

エラーが出た。
原因:PowerShellのスクリプト実行ポリシーが制限されているため、npm.ps1 が実行できない。
対策:以下実行
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

safe-chainのセットアップ→成功した。
PS C:\Windows\system32> safe-chain setup
Setting up shell aliases. This will wrap safe-chain around npm, npx, yarn, pnpm, pnpx, bun, and bunx commands.

Detected 1 supported shell(s): Windows PowerShell.
- Windows PowerShell: Setup successful

ターミナルを閉じて再び立ち上げ
実行ポリシーで、また制限のエラーがでたので再び以下実行
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

検出テスト用safe-chain-testという無害なパッケージをnpmとaikido-npm(後述)でインストール
結果;こちらは検出できなかった
npm install safe-chain-test
added 1 package, and audited 2 packages in 618ms
found 0 vulnerabilities

結果:こちらは検出できた(aikido-npmの場合はsafe-chain setupは実行しなくいい。)
aikido-npm install safe-chain-test
× Safe-chain: Malicious changes detected:
 - safe-chain-test@0.0.1-security

Safe-chain: Exiting without installing malicious packages.

検出が成功したときに「WindowsファイアウォールがNode.jsのネットワークアクセスを検出した際に表示される標準的な警告」がポップアップする。

警告が出る理由(Copilot回答)
aikido-npm は内部的に Node.jsベースのスクリプトとして動作しています。safe-chain は、パッケージの安全性を検証するために、外部リポジトリ(npm registryなど)にアクセスします。このとき、Windowsファイアウォールが「Node.jsがネットワークを使おうとしている」と判断し、アクセス許可を求めるポップアップを表示します。

検出成功の結果がでているので「キャンセル」にしても大丈夫です。aikido-npmの動作にたいするものではなくマルウェアの動作に対して出している警告の可能性もあるので・・・

safe-chainについてSandboxを使うことで分かったこと

✅ aikido-npm install を使うだけで十分です!

aikido-npm コマンドは、safe-chainのマルウェアスキャン機能を直接呼び出すラッパーなので、safe-chain setup を実行しなくても問題ありません

🔍 補足:safe-chain setup の役割とは?
  • safe-chain setup は、既存の npmyarn コマンドを aikido-npm に置き換えるための設定スクリプトです。
  • 具体的には、PowerShellやbashのプロファイルに関数やエイリアスを追加して、npm を実質的に aikido-npm にリダイレクトします。
  • しかし、Windows Sandboxのような制限環境ではこの自動設定が反映されないことが多く、npm は元のままになります。

safe-chainに対する個人的使用法

aikido-npm install 本番環境で、試していません。本番環境ではnpm install -g @aikidosec/safe-chainも実行しないでおこうと思います。
本番環境へはsafe-chainは入れるのをやめ、Sandboxで上記方法でaikido-npmを使ってチェックして問題なければ本番環境に今まで通りnpmでインストールする手法を取ろうと思います。(safe-chain自体も信頼していいのかわからないので一応)

wsbファイルで環境構築

wsbファイルは同じ環境でSandboxを立ち上げたい場合、便利なファイルです。ダブルクリックするだけでSandboxが立ち上がり自動的にコマンドを実行してくれます。
例えば、毎回Node.jsをSandboxを立ち上げた後にダウンロードしてインストールするような場合、wsbを作っておけばインストールが終わった状態で使えます。(インストール完了までの時間はかかる)
今回はSandboxを立ち上げた後に毎回ダウンロードするのは無駄なので、あらかじめダウンロードしたものを本体のWindows11で手動で実行して保存しておき、そのファイルを使うように設定します。

AI(Claude他)に聞いていろいろ試して、この方法に落ち着きました。難点はインストール中の進捗状況が分かりません。PowerShellを画面上に表示した状態で実行するwsbがうまくいきませんでした。なので、インストール完了したかどうかは、エクスプローラーで5分後とかに”C:\Program Files\nodejs”が出てきたらインストール完了と判断するしかないです。

コード

以下のコードを任意の名前.wsbで保存してダブルクリックすればSandboxが立ち上がり、C:\Sandbox\downloadsにあらかじめ手動でダウンロードしておいたnode-*.msiを実行してくれます。

<Configuration>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\Sandbox\downloads</HostFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>powershell -ExecutionPolicy Bypass -Command "Start-Process -FilePath (Get-ChildItem 'C:\Users\WDAGUtilityAccount\Desktop\downloads\node-*.msi' | Select-Object -First 1).FullName -ArgumentList '/quiet' -Wait"</Command>
  </LogonCommand>
</Configuration>

コード解説

🗂 <MappedFolders> セクション

Sandbox内からホストPCのフォルダを読み取り専用で参照できるようにします。

<MappedFolder>
  <HostFolder>C:\Sandbox\downloads</HostFolder>
  <ReadOnly>true</ReadOnly>
</MappedFolder>
  • HostFolder: ホストPC上のフォルダパス。ここでは C:\Sandbox\downloads。(任意のディレクトリ)
  • ReadOnly: true に設定することで、Sandbox内からこのフォルダを「読み取り専用」でアクセス可能にします。ファイルの編集や削除はできません。

📌 目的: 事前にホスト側でダウンロードしておいたインストーラーなどを、Sandbox内で安全に使えるようにする。


⚙️ <LogonCommand> セクション

Sandbox起動時に自動実行するコマンドを指定します。

<Command>
  powershell -ExecutionPolicy Bypass -Command "Start-Process -FilePath (Get-ChildItem 'C:\Users\WDAGUtilityAccount\Desktop\downloads\node-*.msi' | Select-Object -First 1).FullName -ArgumentList '/quiet' -Wait"
</Command>
🧠 解説:

このコマンドは、Sandbox内の PowerShell を使って Node.js のインストーラー(.msi)を自動実行するものです。

  • ExecutionPolicy Bypass: PowerShellの実行ポリシーを一時的に「バイパス(無視)」します。通常、Windowsは安全でないスクリプトが実行されるのを防ぐためにセキュリティポリシーを設定していますが、Bypass を指定すると、その制限が解除され、署名されていないスクリプトでも警告なしで実行できてしまいます。これを実行しないとnpmでエラーになる。
  • Get-ChildItem 'C:\Users\WDAGUtilityAccount\Desktop\downloads\node-*.msi': 指定フォルダ内の node-*.msi という名前のインストーラーを検索。
  • Select-Object -First 1: 最初に見つかったファイルを選択。
  • .FullName: フルパスを取得。
  • Start-Process: インストーラーを/quiet起動(MSIインストーラーに対する一般的な引数で、「サイレントインストール」を実行するよう指示します。これにより、インストール中の進捗バーや「次へ」ボタンなどのダイアログが一切表示されず、バックグラウンドで静かにインストールが実行されます。)、完了まで待機(-Wait)。

✅ 全体の動作まとめ

この .wsb ファイルを使って Sandbox を起動すると:

  1. ホストPCの C:\Sandbox\downloads フォルダが読み取り専用でマウントされる。(デスクトップにdownloads フォルダが表示される。)
  2. Sandbox内の PowerShell が自動で Node.js インストーラーを実行する。
  3. インストール完了後、クリーンな仮想環境で Node.js を使った検証がすぐに可能。

所感

Sandboxの最大の利点はアプリをインストールして試して完全削除が簡単に行えることだと思う。
wsbはAIに書いてもらうと結構うまくいかないことが多い。
プログラミングをやっているとサプライチェーン(npmやpipでライブラリを供給するところ)が本当に信頼していいものなのか常に心配になる。今回は、Sandboxでsafe-chainを使うことで限定された事象に対してだが、安心できる手法を得た。といってもセキュリティに対する不安は、まったく払しょくされていない。

今後はHyper-vで何ができるのか調べようと思います。

この記事を書いたイチゲを応援する(質問でもokです)
Vプリカでのお支払いがおすすめです。

タイトルとURLをコピーしました