Aller au contenu

Debian sur Android et les commandes ADB sans PC

·1120 mots·6 mins
Android Tech Network Android ADB AVF SSH

Les machines virtuelles sur Android
#

L’Android Virtualisation Framework (AVF) a été introduit avec Android 13 sur les Pixels de Google. Cet AVF, est une technologie qui va permettre d’héberger des machines virtuelles pour exécuter du code de façon isolé du reste du système.

Sur Android 15, Google a intégré l’application Terminal qui se base sur ce framework AVF. Activable via les menus développeur, cette application télécharge une VM Debian et s’y connecte une fois lancée. Avec cette application nous allons donc pourvoir faire tourner un environnement Linux sur nos téléphone ! Terminal est encore expérimental sur cette version d’Android mais déjà bien fonctionnel. Et bonne nouvelle, la VM est reliée au réseau du téléphone !

Ce qui me donne quelques idées:

  • Peut on connecter un client ADB depuis la VM et ainsi lancer des commandes sans passer par un autre appareil.
  • Peut on se créer une liaison SSH avec la VM ?

Démonstration
#

Dans cet article nous allons dans un premier temps voir comment activer l’application Terminal et sa VM Debian.
Puis pour ne pas dépendre d’une liaison USB ou d’un hotspot WiFi, nous allons activer la connection ADB par le réseau IP. En plus de la méthode via USB, qui requière un pc, je détaillerai une méthode alternative par WiFi, qui ne demande aucun autre appareil à part une connexion WiFi.
Et enfin, avec cette liaison ADB local enfin établie, je présenterai un petit cas d’usage en exposant le server SSH de la VM Debian au monde extérieur.

Attention

Tout le long de cette démarche assurez vous que le réseau WiFi auquel votre appareil est connecté soit safe. Les manipulations qui suivent expose votre téléphone et vos données à des attaques. Quand vous n’aurai plus besoin de ces fonctions assurer vous de les désactiver.

Voir Reset

Accéder à l’application Terminal
#

Pour pouvoir utiliser l’application Terminal vous devez activer l’option dans les paramètres développeur (je vous laisse le soin de chercher sur internet si vous ne savez pas comment y accéder).

Ainsi une nouvelle application sera accessible. A son lancement elle prendra un certain temps pour s’initialiser, elle doit télécharger la VM.
Il arrive parfois que l’application tombe sur une erreur. Avant de passer par le recovery je vous conseille de relancer l’application.

Activer ADB réseau
#

Nous allons activer la connection ADB sur le réseau IP. Par default cette méthode est désactivée pour des raisons de sécurité. Pour y parvenir il a 2 façons. La classique par USB, mais nécessite un pc. Ou celle par WiFi, celle ci à l’avantage de ne pas demander de pc. Par contre elle demande une connexion WiFi pour activer l’option dans les menus développeur et de télécharger un binaire récent d’ADB pour pouvoir utiliser la fonction de paring. En effet le binaire des repo Debian est trop daté (29.0.6) et la fonction de pairing n’est incluse qu’a partir de 30.0.0

Méthode WiFi
#

ᐅ Télécharger un binaire adb récent :

Pour arm64 :

wget https://github.com/rendiix/termux-adb-fastboot/raw/refs/heads/master/binary/arm64-v8a/bin/adb

Pour x86_64 :

1wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
2unzip platform-tools-latest-linux.zip

ᐅ Connecter le téléphone à un hotspot WiFi de confiance

ᐅ Aller dans les paramètres développeurs et activer le wireless debugging

ᐅ Pour garder la fenêtre de pairing active, splitter l’écran avec l’app terminal en 2/3 de l’écran

ᐅ Lancer le pairing sur l’app Settings et exécuter la commande avec les informations donnée sur l’app Terminal

// Usage                                                                       
adb: usage: adb pair HOST[:PORT] [PAIRING CODE]

ᐅ Une fois appairé, se connecter avec adb connect et les informations données par l’application Settings. La fonction copy paste est utile ici

ᐅ Android communique avec la VM via une interface TAP, on va avoir besoin de récupérer son IP avant de redémarrer adb en tcpip. adbd sera donc accessible sur cette IP. Lancer la commande adb shell ip a
Ici l’ip est 192.168.0.1

ᐅ Via notre connection adb WiFi, activer adb réseau sur le port 5555 (ou autre) et s’y connecter via l’ip récupérée à l’étape précédente

ᐅ Vous pouvez maintenant désactiver la connection WiFi et ainsi que le debugging WiFi

Méthode classique par USB
#

Plus facile mais nécessite un PC

  • Connection USB à un PC avec un client adb
  • Sur le PC : adb tcpip 5555
  • Sur la VM : adb connect 192.168.0.1:5555

Vous avez maintenant un liaison ADB active entre la VM et le système Android. Vous la perdez si vous fermer l’application Terminal. En effet la vm s’éteint et client ADB avec. Il suffira de relancer adb connect sur l’IP de l’interface TAP. Par contre sachez que l’option adb tcpip est perdue au redémarrage de l’appareil. Il faudra recommencer toute la procédure.

Exposer SSH server
#

Maintenant que les commandes ADB sont actives depuis la VM, on va pouvoir s’amuser un peu. On va utiliser les capacités de port forwarding d’ADB et présenter la VM au monde extérieur ! En effet, je ne connais pas d’outil propre au système Android qui permette ce forwarding. Une autre possibilité est d’installer la superbe application Port Forwarder de Gorilla Software.

Nous allons ouvrir un port sur notre Pixel et y relier le server ssh de la VM (qui est déjà configuré et fonctionnel avec l’image Debian) via son port 22. N’ayant pas la permission d’ouvrir n’importe quel port sur le device, je choisi d’ouvrir le port 5000.

Les ports inférieurs à 1024 sont considérés comme des ports “privilégiés” et nécessitent généralement des droits d’administrateur pour être utilisés

VM+SSH port 22 <— Android port 5000

adb reverse tcp:5000 tcp:22

Ainsi le server SSH est accessible via le port 5000 depuis un appareil sur le même réseau que le téléphone.

ssh droid@192.168.1.136 -p 5000

Voilà vous avez maintenant accès à la VM Debian depuis l’extérieur !

Reset
#

C’est bien marrant tout ça mais il y a un moment où il va falloir ranger tout notre désordre. Et oui, comme je l’ai précisé plus haut ces manip rends notre téléphone vulnérable aux attaques via le réseau. Par exemple on pourra installer une application malveillante via adb install.
Il y a plusieurs façons de faire. Le plus sûr est de remettre adb en USB seulement :

  • Via la commande adb usb
  • Avec un redémarrage

Aussi vous pouvez garder le tcpip mais désactiver adb via le menu développeur et ainsi le retrouver plus tard en le réactivant.

Et après
#

Dans cet article j’explore quelques nouvelles possibilités que nous offre AVF. Au delà de l’isolation de workload, ce framework nous ouvre quelques portes jusqu’à maintenant fermées.

Il y a des pistes que j’aimerai explorer pour améliorer la sécurité de cette manipulation. Ouvrir le port uniquement entre la vm et adbd ou utiliser la libusb par exemple. Et pourquoi pas développer une app avec ce framework AVF.

Merci d’avoir lu cet article jusqu’au bout ​😁

Faradj Saadana
Auteur
Faradj Saadana
Passionné par la platforme Android et ses mutiples champs d’application