2026年2月にMicrosoftがリリースしたLiteBoxは、アタックサーフェスが小さなサンドボックス型ライブラリOSです。
LiteBoxのReadMeに列挙されているユースケースのうち、ふたつだけ試してみました。
- Linux上のサンドボックスでLinuxのバイナリを動かす
- WSLもDockerも使わずにWindows上でLinuxのバイナリを動かす
ソースコード配布されているLiteBoxのビルド方法やその結果得られる成果物の利用方法等の情報があまりないので、それらをスクリプトに含めてしまうことで誰にでも簡単に試すことができるようにしました。スクリプトを読めば実際に何が行われているかは理解できるでしょう。
前提条件
- Dockerが動いているIntel PCが必要です。ARMでは
--platform linux/amd64を指定しても一部の機能を使おうとするとsegmentation faultを起こしてしまいます(2026/3/15現在)。
まずはサクッと試してみる
LiteBoxを試すためのスクリプトをダウンロードします。
LiteBoxはRustで記述されています。Rustコンパイラによるビルド成果物を取り込んだDockerイメージを作るDockerfileを準備しました。
$ git clone https://github.com/wataniguchi/LiteBox_playground.git
$ cd LiteBox_playground
$ ls
Dockerfile helloworld README.md
gen_package.sh play_with_LiteBox.sh run_package.sh
最初にサンドボックスで利用するためのLinuxバイナリと依存ライブラリを含むパッケージをDockerコンテナで生成します。
gen_package.shにより、ここでは一例として/usr/bin/lsを実行するためのパッケージであるlitebox-_usr_bin_ls.tarを生成し、幾つかのファイルと共にホストへ複写します。このtarファイルの内容が、目的プラットフォーム上のサンドボックスで読み取り専用仮想ファイルシステムとして利用されます。
$ ./gen_package.sh /usr/bin/ls
$ ls
_common.sh litebox README.md
Dockerfile litebox_runner_linux_userland run_package.sh
gen_package.sh litebox-_usr_bin_ls.tar tun-setup.sh
helloworld play_with_LiteBox.sh
スクリプトrun_package.shを使って、Linux上のサンドボックスで/usr/bin/lsを実行します。
$ ./run_package.sh /usr/bin/ls -la /
...
[+] Running /usr/bin/ls using litebox_runner_linux_userland with package litebox-_usr_bin_ls.tar...
/usr/bin/ls: .: Function not implemented
total 0
drwxr-xr-x 1 0 0 4096 Jan 1 1970 .
drwxr-xr-x 1 0 0 4096 Jan 1 1970 ..
drwxr-xr-x 1 0 0 4096 Jan 1 1970 lib
drwxrwxrwx 1 1000 1000 4096 Jan 1 1970 lib64
drwxrwxrwx 1 0 0 4096 Jan 1 1970 tmp
drwxrwxrwx 1 1000 1000 4096 Jan 1 1970 usr
...
lsをサブディレクトリへも順次実行していくと、/usr/bin/lsに加えて依存ライブラリが/lib /lib64以下に配置されていることがわかるでしょう。
これと同様のことがWindows上でも出来ますが、幾つかのステップが必要です。
- WindowsでRust用の開発環境を設定する
- WindowsでGitを導入する
- LiteBoxの
litebox_runner_linux_on_windows_userland.exeをビルドするWindows> git clone https://github.com/microsoft/litebox.git > cd litebox > cargo build --release --package litebox_runner_linux_on_windows_userland - 前のステップで作成した
litebox-_usr_bin_ls.tarを(scp等により)LinuxからWindowsへ複写する -
litebox_runner_linux_on_windows_userland.exeを使って、Windows上でLinuxのバイナリを動かすWindows> .\litebox\target\release\litebox_runner_linux_on_windows_userland.exe --initial-files .\litebox-_usr_bin_ls.tar /usr/bin/ls -la total 0 drwxr-xr-x 1 0 0 4096 Jan 1 1970 . drwxr-xr-x 1 0 0 4096 Jan 1 1970 .. drwxrwxrwx 1 1000 1000 4096 Jan 1 1970 lib drwxrwxrwx 1 1000 1000 4096 Jan 1 1970 lib64 drwxrwxrwx 1 1000 1000 4096 Jan 1 1970 tmp drwxrwxrwx 1 1000 1000 4096 Jan 1 1970 usr
WSLもDockerも導入されていない状態で実行可能です。
Webアプリケーションを試してみる
「まずはサクッと試してみる」で使ったDockerコンテナでは、Rustで記述されたweb版helloworldアプリケーションを同時にビルドしています。
helloworldアプリケーションを含むパッケージを取り出して、Linux上のサンドボックスで実行してみましょう。
$ ./gen_package.sh /app/helloworld
$ ./run_package.sh /app/helloworld
...
[+] Running /app/helloworld using litebox_runner_linux_userland with package litebox-_app_helloworld.tar...
Server is running on http://10.0.0.2:3000
この状態で、別のターミナルから接続してみます(ブラウザを使っても大丈夫です)。
$ curl -s 'http://10.0.0.2:3000/'
Hello, World! Your IP: 10.0.0.1
サンドボックスとの通信はトンネルデバイス経由で行います。ここでは、ホストで10.0.0.1/24をトンネルデバイスへ割り振っています。
Windowsでもやってみようと思ったのですが、litebox_platform_windows_userland/src/lib.rsでsend_ip_packet()とreceive_ip_packet()が未実装でした。
もっと遊んでみる
play_with_LiteBox.shでコンテナにログイン出来ます。
litebox_packagerやlitebox_syscall_rewriter等は/app/litebox/target/release/にありますので使ってみましょう。
サンドボックスからはホストのファイルシステムやネットワークへ直接アクセスできない作りになっており、アタックサーフェスが小さいことを実感できます。
LiteBoxのリポジトリへは頻繁にコミットがされています。play_with_LiteBox.shとgen_package.shではコミットIDを指定してリポジトリの状態を固定していますが、その部分をコメントアウトすれば最新のリポジトリを使ったテストが出来ます。未実装部分がこれから実装されていくのが楽しみです。