• Aucun résultat trouvé

Interfaces de programmation sous Android

7.5 Collecte active et passive

7.6.2 Interfaces de programmation sous Android

Dans cette partie, nous discuterons uniquement des API qui ont un lien avec un contexte de suivi de mobilité, c’est-à-dire l’activation de l’interface Bluetooth, la collecte des iden-tifiants ou encore la découverte des périphériques à portée.

7.6.2.1 Manipulation de l’interface Bluetooth :

La première étape est de pouvoir interagir avec le Bluetooth et voir si cet interface est active. Pour ce faire, l’objet BluetoothAdapter de l’interface de programmation est utilisé comme le démontre le code suivant :

# BluetoothAdapter mBluetoothAdapter BluetoothAdapter.getDefaultAdapter(); # if (mBluetoothAdapter == null) {

// Le smartphone ne prend pas en charge le Bluetooth }

De plus, si l’interface Bluetooth existe, l’objet BluetoothAdapter peut demander l’ac-tivation ou la désacl’ac-tivation de cette interface. Deux types de procédures existent. La

première conciste à alerter l’utilisateur. Le code suivant demande à l’utilisateur l’auto-risation d’activer l’interface Bluetooth par le biais d’une fenêtre de dialogue où il devra explicitement donner son accord en cliquant sur un bouton :

Si l’interface Bluetoot n’est pas active # if (!mBluetoothAdapter.isEnabled()) { // Une autorisation sera envoyée

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); // En créant une fenêtre de dialogue à l’utilisateur

startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); }

La seconde procédure s’exécute sans l’interaction de l’utilisateur et l’activation ou la désactivation du Bluetooth se fait directement au travers l’exécution du code suivant :

public void disableBT(View view){

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // S’il est actif,

if (mBluetoothAdapter.isEnabled()){ // On le désactive.

mBluetoothAdapter.disable(); }

}

La différence entre l’utilisation de ces deux méthodes est basée sur leurs permissions associées. La première requiert uniquement la permission BLUETOOTH et la seconde exige les permissions BLUETOOTH et BLUETOOTH_ADMIN.

7.6.2.2 Découverte des périphérique Bluetooth à portée

Pour exécuter le service de découverte active, l’interface de programmation propose une méthode simple appelé startDiscovery(). Ce processus est asynchrone et retourne une valeur booléenne (oui ou non) lorsque celui-ci aura démarré. Cette méthode essayera de détecter la présence des périphériques en utilisant la procédure d’investigation (inquiry scan process), durant environ douze secondes. S’en suit une procédure de pagination (paging process) pour récupérer le nom et l’adresse MAC associés aux périphériques détectés.

Annexes : Outils pour le Bluetooth Classic 130

Le code suivant va déclencher un service de découverte de périphérique et collecter les identifiants de ces appareils détectés :

protected void onCreate(Bundle savedInstanceState) { ...

// Cette méthode sera appelé à chaque fois qu’un périphérique sera détecté IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mReceiver, filter);

BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();

// On lance le service de découverte btAdapter.startDiscovery();

}

// Affichage les résultats

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (BluetoothDevice.ACTION_FOUND.equals(action)) { // Un périphérique a été détecté ...

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // On récupère son nom ...

String deviceName = device.getName(); // et son adresse MAC.

String deviceHardwareAddress = device.getAddress(); }

} };

7.6.2.3 Mode découvrable

Un dernier point est la possibilité de rendre découvrable le périphérique sur lequel s’exé-cute l’application i.e. détectable par les autres périphériques à portée, en utilisant direc-tement du code sans passer par les paramètres système du smartphone. Par défaut, le durée où il est détectable est de deux minutes mais celui peut être modifié.

Le code suivant va permettre de passer le smartphone en mode découvrable durant dix minutes (600 secondes). Il est aussi possible de rendre l’appareil détectable tout le temps en spécifiant la valeur 0.

Intent discoverableIntent =

new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 600); startActivity(discoverableIntent);

Dans ce cas présent, les récentes mises à jour d’android imposent d’avertir l’utilisateur et de lui demander son autorisation avant d’exécuter cette tâche. Il est évident que la possibilité de rendre un périphérique détectable à l’insu de l’utilisateur peut l’exposer à des risques sur ces informations privées (collecte de son identifiant, suivi de sa mobilité). De ce fait, lorsque le code ci-dessus sera exécuté, une fenêtre de dialogue sera présentée à l’utilisateur où il devra clicuer sur un bouton pour autoriser le processus.

7.6.2.4 Informations sur le périphérique local :

Certaines informations en lien avec le Bluetooth revêtent un caractère sensible et sont accessibles via les interfaces de programmation. En effet, il est possible de récupérer les identifiants de tous les périphériques qui se sont appairés sur un smartphone sur lequel est déployée une application comme l’illustre le code suivant :

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();

if (pairedDevices.size() > 0) {

// Il y a des périphériques appairés

for (BluetoothDevice device : pairedDevices) {

// Pour chacun d’eux, on récupère le nom et l’adresse MAC String deviceName = device.getName();

String deviceHardwareAddress = device.getAddress(); }

}

Le nom d’un périphérique peut apporter plus de connaissances sur un utilisateur. Par exemple, si le nom d’un périphérique appairé à son smartphone a comme nom "Cas-queAudioBeats", on peut aisément en déduire qu’il possède un casque audio de la marque Beats by Dre. L’adresse MAC est une information beaucoup plus sensible car elle donne accès à un attaquant de pouvoir identifier et suivre la mobilité du smartphone mais aussi

Annexes : Outils pour le Bluetooth Classic 132

de tous les périphériques qui se sont appairés à celui-ci. L’utilisateur expose plusieurs identifiants et augmente le risque sur ces informations privées. On peut imaginer un scénario où un attaquant déploie une application qu’il fait passer pour légitime qui va être installée par plusieurs utilisateurs et qui collectera les résultats des scans Bluetooth et la liste des périphériques appairés à chaque smartphone. Ces dernières seront remon-tées vers une entité centrale où l’utilisateur pourra suivre la mobilité des utilisateurs de smartphones infectés.