Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
droidground — Android CTFチャレンジのための柔軟なプレイグラウンド。 | Kitploit
ツール/GitHubGitHub/secforce/droidground
Androidセキュリティ動的分析 (サンドボックス)エクスプロイトモバイルアプリペンテストCTFペネトレーションテスト学習と教育ラボと実践
GitHubsecforce/droidground

droidground

Android CTFチャレンジのための柔軟なプレイグラウンド。

リポジトリを見る
11772日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト


droidground

DroidGround


ウェブサイト | デモ

従来のCTFチャレンジでは、システム上のファイルにフラグを隠し、攻撃者が脆弱性を悪用してフラグを取得するのが一般的です。しかし、Androidの世界ではこのアプローチはうまく機能しません。APKファイルは簡単にダウンロードでき、リバースエンジニアリングも可能なため、デバイス上にフラグを置くと、静的解析やエミュレータのトリックで抽出するのが通常は簡単になってしまいます。これにより、現実的でランタイムに焦点を当てたチャレンジを作成する能力が大幅に制限されます。

DroidGround はこの問題を解決するために設計されました。

これは、制御されたかつ現実的な環境でAndroidモバイルハッキングチャレンジを開催するためのカスタム構築プラットフォームであり、攻撃者が意図した方法でチャレンジを解決する必要がある程度に制約されます。

重要なのは、参加者がアプリ環境内に隔離される可能性があることです。このツールのモジュール性により、ユーザーがシェルを起動できるか、任意のファイルを読み取れるか、ツールをサイドロードできるかを設定できます。フラグを取得する唯一の方法がアプリ自体を理解して悪用することになるように、すべてをセットアップできます。

📋 目次

  • 🧭 概要
  • ✨ 特徴
  • 📸 スクリーンショット
  • ⚙️ 設定
  • 🧩 ユースケース
  • ⚙️ 使い方
  • 💡 ヒント
  • 🛠 開発
  • 🤝 コントリビューション
  • 📚 クレジット
  • 🪪 ライセンス

🧭 概要

DroidGround は、従来のCTF環境では実装が難しい多種多様な Android チャレンジを可能にします。例えば、リモートコード実行(RCE)チャレンジでは、プレイヤーはローカル解析用のAPKを受け取るかもしれません。脆弱性を発見した後、Fridaスクリプトを作成し、DroidGroundを通じて実際のターゲットデバイス上で実行し、内部ストレージからフラグを抽出できます。他のチャレンジタイプには、隠しアクティビティ、カスタムブロードキャストインテント、サービス悪用、プリロードされたツールを使った動的解析などがあります。

リアルタイムのデバイスストリーミング、機能の細かい制御、Frida統合、カスタマイズ可能なセットアップおよびリセットスクリプトにより、DroidGroundはCTF主催者が通常可能な範囲をはるかに超えた、安全で柔軟かつ現実的なAndroidチャレンジを構築できるようにします。

✨ 特徴

DroidGroundは、サーバー制御の豊富な機能セットを提供します。

  • リアルタイムデバイス画面(scrcpy 経由)
  • チャレンジ状態のリセット
  • アプリの再起動 / アクティビティの起動 / サービスの起動
  • ブロードキャストインテントの送信
  • デバイスのシャットダウン / 再起動
  • バグレポートのダウンロード(bugreportz)
  • Fridaスクリプティング
    • プリロードされたライブラリから実行(隔離モード)
    • 任意のスクリプトを実行(フルモード)
  • ファイルブラウザ
  • ターミナルアクセス
  • APK管理
  • Logcatビューア
  • エクスプロイトサーバー(チームモードが有効な場合)

ほとんどすべての機能はモジュール式であり、環境変数で定義されるため、チャレンジの範囲を正確に制御できます。

📸 スクリーンショット

⚙️ 設定

ルートディレクトリの .env.sample ファイルが良い出発点です。以下は現在サポートされているすべての環境変数の完全なリストです:

DROIDGROUND_IP_IFACE は、最初に完全一致を探し、次に指定された値で_始まる_最初のインターフェースにフォールバックします。Dockerはコンテナ内でネットワークインターフェースのプレフィックスのみを指定できるためです。

DROIDGROUND_NUM_TEAMS 変数を使用すると、アプリケーションの内部動作が若干変わります。このオプションが設定されている場合:

  1. エクスプロイトサーバー機能が有効になり、各チームが自分のチームトークンを介して独自の(非常にシンプルな)エクスプロイトサーバーを使用できます。
  2. エクスプロイトアプリをインストールおよび実行するには、チームトークンが必要になります。インストールされた各アプリはチームに紐付けられ、他のチームはそれを実行できません。

これにより、フラグがネットワークリクエスト経由で外部に持ち出される可能性があるチャレンジで、複数のチームが同じDroidGroundインスタンスを共有できます。これはCTF競技におけるDroidGroundのデプロイコストを大幅に削減します。

さらに、この値を -1 に設定すると、いわゆる無制限チームモードが有効になります。このモードでは、Overview ページに新しいチームトークンを生成するボタンが表示されます。このモードが有効な場合、すべての DROIDGROUND_TEAM_TOKEN_<N> 変数は無視されます。

🧩 ユースケース

DroidGroundの使用例をいくつか示します:

  1. 隠しアクティビティ: 非公開のアクティビティを見つけて起動し、フラグを表示します(プレイヤーのアプリにはダミーのフラグが含まれています)。
  2. RCE: アプリがRCEに対して脆弱で、フラグがデバイス上に保存されています。
  3. Fridaインストルメンテーション: メソッドをオーバーロードし、スクリプトを使用してプライベートメモリからフラグを抽出します。

⚙️ 使い方

examples フォルダには、いくつかのサンプル Docker Compose ファイルが用意されています。これらは DroidGround samples repo のアプリを使用しており、すべての主要機能を紹介するために段階的に拡張される予定です。また、独自のCTFをセットアップする方法を理解するための良い出発点でもあります。

DroidGround は起動時に次のことを行います:

  1. adb との接続を設定する
  2. DROIDGROUND_INIT_SCRIPTS_FOLDER で指定されたフォルダの setup.sh が存在する場合は実行する。このスクリプトは、ターゲットアプリのインストールやCTFの初期化に必要なその他すべての処理(例: フラグを既知の場所に配置する)に使用できます。
  3. (Frida が有効な場合)インストールされているバージョンとデバイスのアーキテクチャに基づいて正しい frida-server をダウンロードし、起動する。
  4. ターゲットアプリ(DROIDGROUND_APP_PACKAGE_NAME で指定されたもの)を実行する。アプリがインストールされていない場合、DroidGround は終了します。
  5. REST API、WebSocket サーバー、ディスプレイストリーミングをセットアップする。

以下は setup.sh スクリプトのサンプルです:

root@kitploit:~
#!/usr/bin/env bash

adb shell pm uninstall com.example.app # To do some cleanup
echo "Sleep for 2 seconds before installing app"
sleep 2
echo "Installing app..."
adb install ./flag.apk # The cwd is set to the "init.d" folder, so the apk file can be accessed with the relative path
echo "Install command executed"

本番デプロイ(実際のCTF)では、事前に定義された数のDroidGroundインスタンスをプロビジョニングするか、ユーザーがインスタンスをスポーンできるようにする(制限付きで、または各チーム/ユーザーを特定のインスタンスに関連付ける)ことをお勧めします。そのため、シンプルな spawnerの例 も追加しました。

あるいは、前述のとおり、フラグをネットワークリクエスト経由で外部に持ち出せるチャレンジを作成し、DROIDGROUND_NUM_TEAMS 環境変数を利用して複数のインスタンスのスポーン(コストがかかる可能性があります)を回避できます。net-multi-step フォルダは、このタイプのチャレンジを提供する方法の良い例を示しています。

💡 ヒント

Android CTFをセットアップするための提案をいくつか紹介します:

  • Fridaフルモードを有効にする際は注意してください。プレイヤーはデバイスを完全に制御できるようになります(そのため、Fridaライブラリ に詳述されているFrida隔離モードを作成しました)。
  • ターミナルを有効にする際は注意してください。プレイヤーはデバイスを完全に制御できるようになります。
  • シャットダウン機能を有効にする際は注意してください。
  • フラグをUIに直接表示する予定がある場合は、異なるインスタンス(チーム/プレイヤーごとに1つ)をスポーンする方法を見つけることをお勧めします。

本番環境に移行する前にセットアップをテストする際、ターゲットアプリの攻撃対象領域を取得すると便利な場合があります。これはプレイヤーが見るべきものではありません。攻撃対象領域を発見して分析することはプレイヤーの仕事の一部だからです!

そのため、/attackSurface でアクセス可能な GET エンドポイントが提供されており、起動時にランダムに生成されログに出力されるトークン(Authorization ヘッダーの値として使用する必要があります)で保護されています(そのため、システム管理者のみがアクセスできます)。

隔離モードで独自のFridaスクリプトを使用したい場合は、それらを含むフォルダをDockerコンテナにバインドマウントするだけです:

root@kitploit:~
volumes:
  - <Frida library folder>:/droidground/library

利用可能なスクリプトのリストをアプリケーションに指示するには、library.json ファイル(library にあるものなど)が必要です。

🛠 開発

起動して実行するのはそれほど難しくないはずですが、開始する前に以下のツールがインストールされている必要があります:

  • frida(Frida を有効にする場合のみ)
  • node(Nodeアプリなので必要です!)
  • adb(デバイスとの通信に依存しています)
  • JDK(コンパニオンアプリをビルドするために必要です)

その後、次のコマンドを実行するだけです:

root@kitploit:~
git clone https://github.com/SECFORCE/droidground.git
cd droidground

# Install without running scripts
npm install --ignore-scripts
# Rebuild frida to get the bindings
npm rebuild frida
# Build companion app
npm run companion
# Get scrcpy
npm run scrcpy

その後、環境変数を設定して npm run dev を実行するだけで準備完了です。開発モードをお楽しみください!

🤝 コントリビューション

プルリクエストを歓迎します!大きな変更については、まずissueを開いて話し合ってください。新しいCTFワークフローやチャレンジタイプのアイデアを特に歓迎します。

📚 クレジット

Angelo Delicato @SECFORCE によって開発されました。

server セクションは @yume-chan による素晴らしい作業に大きく依存しています。彼の素晴らしい作業がなければ、このアプリは存在しなかったでしょう。

companion アプリは、scrcpy server と同じように動作する aya server に大きく基づいています。詳細は専用の README にあります。

🪪 ライセンス

DroidGround は GPL-3.0 LICENSE の下でリリースされています。

ツールをダウンロード
スクリーンショット概要スクリーンショット: アクティビティ起動
概要アクティビティ起動
スクリーンショット: Frida隔離モードスクリーンショット: Fridaフルモード
Frida隔離モードFridaフルモード
スクリーンショット: ファイルブラウザスクリーンショット: アプリマネージャー
ファイルブラウザアプリマネージャー
スクリーンショット: ターミナルスクリーンショット: ログ
ターミナルログ
変数説明デフォルト
DROIDGROUND_BASE_PATHウェブアプリのパス(サブパスでのホスティングに便利)-
DROIDGROUND_APP_PACKAGE_NAMEターゲットアプリのパッケージ名-
DROIDGROUND_ADB_HOSTADBホストlocalhost
DROIDGROUND_ADB_PORTADBポート5037
DROIDGROUND_ADB_SERIAL接続するADBデバイスシリアル(オプション)-
DROIDGROUND_DEVICE_TYPEusb または networkusb
DROIDGROUND_DEVICE_HOSTAndroidデバイスのIP(adb)(ネットワークモードのみ)-
DROIDGROUND_DEVICE_PORTAndroidデバイスのポート(adb)(ネットワークモードのみ)-
DROIDGROUND_INIT_SCRIPTS_FOLDERsetup.sh と reset.sh を含むフォルダ/init.d
DROIDGROUND_HOSTバインドアドレス0.0.0.0
DROIDGROUND_PORTバインドポート4242
DROIDGROUND_RESTART_APP_DISABLEDアプリの再起動を無効にするfalse
DROIDGROUND_APP_MANAGER_DISABLEDアプリマネージャーを無効にするfalse
DROIDGROUND_BUG_REPORT_DISABLEDバグレポートを無効にするfalse
DROIDGROUND_FILE_BROWSER_DISABLEDファイルブラウザを無効にするfalse
DROIDGROUND_FRIDA_DISABLEDFridaサポートを無効にするfalse
DROIDGROUND_FRIDA_TYPEjail または fulljail
DROIDGROUND_FRIDA_INJECTIONserver または gadgetserver
DROIDGROUND_LOGCAT_DISABLEDlogcatを無効にするfalse
DROIDGROUND_REBOOT_ENABLED再起動を有効にするfalse
DROIDGROUND_SHUTDOWN_ENABLEDシャットダウンを有効にするfalse
DROIDGROUND_START_ACTIVITY_DISABLEDstartActivityを無効にするfalse
DROIDGROUND_START_RECEIVER_DISABLEDブロードキャストを無効にするfalse
DROIDGROUND_START_SERVICE_DISABLEDstartServiceを無効にするfalse
DROIDGROUND_TERMINAL_DISABLEDターミナルを無効にするfalse
DROIDGROUND_RESET_DISABLEDリセットを無効にするfalse
DROIDGROUND_EXPLOIT_APP_DURATIONエクスプロイトアプリがアクティブになる時間(秒)10
DROIDGROUND_EXPLOIT_APP_MAX_SIZEエクスプロイトアプリの最大サイズ(MB)50
DROIDGROUND_NUM_TEAMS同時にプレイするチームの数-
DROIDGROUND_TEAM_TOKEN_<N>n番目のチームのトークン。存在しない場合は自動生成されます-
DROIDGROUND_IP_STATIC表示する静的IPアドレス。DROIDGROUND_IP_IFACE より優先されます-
DROIDGROUND_IP_IFACE表示されるIPアドレスのネットワークインターフェース-
DROIDGROUND_LOGO_LINKロゴのクリック時のリンクを任意で設定(例: CTFメインページ)-