
セキュリティトレーニングプラットフォームへのモバイルコンポーネントの統合を可能にするコンテナベースのフレームワーク
Dockerized Android は、Docker 内で Android エミュレータを実行し、ブラウザを通じて制御できるコンテナベースのフレームワークです。このプロジェクトは、モバイルセキュリティコンポーネントを Cyber Range に統合するための出発点を提供するために開発されましたが、あらゆる目的に使用できます。ただし、開発およびテスト目的では、docker-android プロジェクトを推奨します。
上記の簡単な説明にあるように、このプロジェクトは Cyber Range にモバイルセキュリティコンポーネントを導入するための出発点を提供するために作成されました。そのため、すでに開発されている機能および今後追加される予定の機能は、現実的なシミュレーション(セキュリティトレーニングなど)のセットアップを容易にするのに役立ちます。この README はかなり長いので、「実行方法」の部分に飛ばしてしまっても構いません。
現在利用可能な機能は以下の通りです。
| 初期設定 | インスタンスマネージャ設定 | 手動設定 |
|---|---|---|
| initial-setup | instance-manager-setup | manual-setup |
| ツールボックスの機能 | インスタンス切り替え |
|---|---|
| toolbox | instance-switch |
このプロジェクトは、以下の 3 つの主要なコンポーネントで構成されています。
コアコンポーネントは、Docker コンテナ内で Android コンポーネント(エミュレートまたは実デバイス)を実行するために必要なすべてのプロセスを実行し、さらにいくつかの機能を外部に公開するコンポーネントです。一連の機能を提供するために複数のプロセスを管理する必要があるため、間違いなく最も複雑な部分です。上の図では、長時間実行プロセス、起動プロセス、ユーティリティスクリプトの明確な区別が示されています。さらに、この図は 6 つの長時間実行プロセスがあることを示していますが、これはコアコンポーネントの一般的な概要を提供するために追加されたわずかな不正確さであり、実際にはコアコンポーネントには 2 つの異なるフレーバーがあります。
主なアーキテクチャ上の違いは、長時間実行プロセスに関するものです。エミュレータ用コアは長時間実行の emulator プロセスを実行し、実デバイス用コアは物理デバイスの表示と制御のために長時間実行の scrcpy プロセスを実行します。他の部分はかなり類似しており、コアコンポーネントのタイプに基づいて異なる動作を実現するためのロジックが一部異なるのみです。
UI コンポーネントは、バックエンドが公開するすべての機能を簡単に使用できるようにし、さらにデバイスの表示と制御機能も追加します。ユーザーは手動でコアコンポーネントのアドレスと対応するポート(バックエンドが公開するポートと websockify が公開するポート)を入力する必要があります。この手動セットアップにより、デフォルトのポート(バックエンドは 4242、websockify は 6080)を変更できます。
インスタンスマネージャコンポーネントの役割は、単一の REST API を通じて実行中のすべてのコアに関する情報(アドレスとポート)を提供することです。これは、docker-compose に存在するすべてのコアに関する情報を含むシンプルな JSON 設定ファイルを作成することで行われ、手作業で 1 つずつ追加する面倒な作業を回避します。JSON 設定ファイルの構造は以下のとおりです。
{
"instances": [
{
"name": [デバイスを識別する任意の文字列],
"address": [コンポーネントのアドレス],
"core_port": [バックエンドのポート],
"vnc_port": [VNC のポート]
}
]
}
secsi/dockerized-android-core-bare はシステムイメージをダウンロードせず、すべての SDK フォルダがあるホストマシン上のフォルダをマウントできます。
プラットフォームの実行方法の完全な例については、examples ディレクトリにある docker-compose を参照してください。このディレクトリには 3 つの異なる設定が含まれています。
動作を理解したら、必要に応じて変更できます。
マシンに Docker および Docker Compose がインストールされている必要があります。
このプラットフォームはホスト OS によって動作が異なります。以下に現在の互換性をまとめた表を示します。
| Linux | Windows | OS X | |
|---|---|---|---|
| エミュレータ用コア | 完全互換 | 未サポート(近日対応予定) | 未サポート |
| 実デバイス用コア | 完全互換 | 完全互換 | 回避策あり |
Windows および OS X では、ネストされた仮想化を備えた Linux VM を使用する必要があります。
Linux マシンがネストされた仮想化をサポートしているかどうかを確認するには、次のコマンドを実行します。
sudo apt install cpu-checker
kvm-ok
OS X で実デバイス用コアを使用するには、以下の方法があります。
ワイヤレス接続については、Google が簡単な チュートリアル を提供しています。コンテナ内からホストの adb に接続するには、手動でコンテナ内に入り、以下を実行します。
adb -H host.docker.internal devices
フレームワークの使用を開始するためのコマンドは次のとおりです。
cp ./examples/docker-compose-core.yml docker-compose.yml
docker-compose up
より簡単に、次のコマンドを使用することもできます。
docker-compose -f ./examples/docker-compose-core.yml up
あとはブラウザで http://127.0.0.1:8080 にアクセスし、現在の設定を行います。
インスタンスマネージャ を使用しない場合は、Manual Setup(手動設定)をクリックし、以下の情報を入力します。
インスタンスマネージャ を使用する場合は、"Instance Manager" をクリックし、IP アドレス とその ポート番号(例: 193.21.1.100:7373)を入力するだけです。
以上です。ブラウザ内でフレームワークを使用できます。
utils フォルダ内のスクリプトを使用して、イメージを自分でビルドすることもできます。
ENV 変数を使用してセットアップをカスタマイズするためのいくつかの機能を設定できます。以下の表にその一覧を示します。
REAL_DEVICE_SERIAL 変数は、複数の物理デバイスが接続されている場合に必須です。設定されていないと何も動作しません。 最後に、各コンポーネントが公開するポートの一覧を示します。
Dockerized Android は、MIT ライセンス の下でリリースされたオープンソースのフリーソフトウェアです。
このコードが研究に役立つ場合は、以下の論文を引用することをご検討ください。
@inproceedings{Capone2022,
doi = {10.1109/icecet55527.2022.9872834},
url = {https://doi.org/10.1109/icecet55527.2022.9872834},
year = {2022},
month = jul,
publisher = {{IEEE}},
author = {Daniele Capone and Francesco Caturano and Angelo Delicato and Gaetano Perrone and Simon Pietro Romano},
title = {Dockerized Android: a container-based platform to build mobile Android scenarios for Cyber Ranges},
booktitle = {2022 International Conference on Electrical, Computer and Energy Technologies ({ICECET})}
}
このプロジェクトは、ナポリ大学フェデリコ2世 におけるコンピュータ工学の修士論文を基にしています。この研究の着想の源となった Simon Pietro Romano 教授(プロフィール)および Francesco Caturano エンジニア(GitHub)に特に感謝します。
| Android バージョン | API | イメージ |
|---|
| 5.0.1 | 21 | secsi/dockerized-android-core-emulator-5.0.1 |
| 5.1.1 | 22 | secsi/dockerized-android-core-emulator-5.1.1 |
| 6.0 | 23 | secsi/dockerized-android-core-emulator-6.0 |
| 7.0 | 24 | secsi/dockerized-android-core-emulator-7.0 |
| 7.1.1 | 25 | secsi/dockerized-android-core-emulator-7.1.1 |
| 8.0 | 26 | secsi/dockerized-android-core-emulator-8.0 |
| 8.1 | 27 | secsi/dockerized-android-core-emulator-8.1 |
| 9.0 | 28 | secsi/dockerized-android-core-emulator-9.0 |
| 10.0 | 29 | secsi/dockerized-android-core-emulator-10.0 |
| 11.0 | 30 | secsi/dockerized-android-core-emulator-11.0 |
| - | - | secsi/dockerized-android-core-bare |
| - | - | secsi/docker-android-core-real-device |
| コンポーネント | ENV 名 | デフォルト値 | 説明 |
|---|
| Core | TARGET_PORT | 6080 | Websockify ポート |
| Core | CUSTOM_APP_DEFAULT_PORT | 4242 | Node.js バックエンドポート |
| Core | DEVICEINFO | 未設定だが true として動作 | デバイス情報機能の有効/無効 |
| Core | TERMINAL | 未設定だが true として動作 | ターミナル機能の有効/無効 |
| Core | APK | 未設定だが true として動作 | APK インストール機能の有効/無効 |
| Core | FORWARD | 未設定だが true として動作 | ポートフォワーディング機能の有効/無効 |
| Core | SMS | 未設定だが true として動作 | SMS エミュレーション機能の有効/無効 |
| Core | REBOOT | 未設定だが true として動作 | 再起動機能の有効/無効 |
| Core | INSTALL_ON_STARTUP | false | /root/dockerized-android/apk フォルダに配置されたすべての apk をインストールする機能の有効/無効 |
| Core | ENABLE_UNKNOWN_SOURCES | false | 未知のソースからのインストールを有効にする |
| Core | REAL_DEVICE_SERIAL | 未設定 | 接続されている物理デバイスが複数ある場合、この値を制御するデバイスのシリアル番号に設定する必要があります。設定しないと他のすべての機能が動作しません。 |
| Instance Manager | DEFAULT_PORT | 7373 | REST API のポート |
| コンポーネント | ポート番号 | 説明 |
|---|
| Core | 5555 | ADB ポート |
| Core | 4242 | Node.js バックエンド |
| Core | 6080 | Websockify(noVNC 用) |
| UI | 80 | フロントエンド |
| Instance Manager | 7373 | REST API |