Chercher sans se lasser, croire avoir trouver et in fine démonter les ficelles de la société Google en les utilisant. Blog aussi sur Web 2.0, interoperabilité, Sciences & langages & neurosciences). En 1943, Valentin, le chef de la Légion des combattants nommé par Pétain, rejoint Londres et fait diffuser un message d'autocritique et dénonce la faute toujours présente: "On ne reconstruit pas sa maison pendant qu’elle flambe!". SAPERE AUDE!

dimanche 10 mai 2009

Des spywares dans les cartes Sim ? (par Pirates Magazine)

Des spywares dans les cartes Sim ? (par Pirates Magazine): "Une aiguille dans une botte de foin ?
Le dispositif d’espionnage étant mis en place, transportons sur le M3188 une carte USIM ayant préalablement été utilisée dans un téléphone plus récent. Des milliers d’octets vont s’enregistrer dans un fichier log, du simple fait de l’initialisation du mobile. Patientons au moins quelques minutes, puis arrêtons tout. Il va maintenant s’agir de repérer l’échange spontané de SMS entre la carte SIM et le réseau, en commençant l’analyse du fichier par la fin.
On devrait normalement trouver là un certain nombre de commandes dont les octets CLA et INS sont respectivement A0h et F2h. Il s’agit de commandes Status, que le mobile envoie à intervalles réguliers (de l’ordre de 2 mn) pour s’enquérir de l’état de la carte SIM, et auxquelles celle-ci répond à chaque fois par une bonne vingtaine d’octets. C’est donc un peu en amont qu’il faut chercher les commandes SIM Application Toolkit (voir spécification GSM 11.14) qui contiennent la clef du mystère : commandes en A0 12 (Fetch) lorsque le mobile vient prendre des ordres auprès de la carte, et commandes en A0 14 (Terminal Response) ou en A0 C2 (Envelope) quand le téléphone envoie des données à la SIM.
Dans le cas particulier de la carte USIM d’Orange qui nous a servi de cobaye, c’est une commande A0 12 00 00 88 qui ordonne au mobile d’envoyer un SMS, puisque son bloc de données (longueur 88h soit 136 octets) contient une commande proactive Send short message (code opération 13h). Cela étant, le découpage judicieux de cette suite de valeurs hexadécimales est riche d’enseignements. Dans le champ de données qui suit le libellé de l’instruction (D0 81 85 81 03 01 13 00 82 02 81 83 05 00 06), on isole ainsi successivement :

- L’en-tête du SMS où l’on retrouve, moyennant une classique permutation de quartets, le numéro du SMSC (+33689004000), le numéro du destinataire (20782), et un PID-DCS (00 F6) indiquant que le corps du message est codé en mode 8 bits :

07 91 33 86 09 40 00 F0
0B 6F 51 01 05 81 02 87 F2
00 F6 01 64

- Un groupe d’octets dont la signification semble « propriétaire », mais où l’on découvre, en ASCII, le mot « IME » (certainement pas par hasard, comme nous le verrons) :

02 70 00 00 5F 0D 00 00 00 00 49 4D 45 00
00 00 00 01 00

- Huit champs numérotés de 1 à 8, avec indication de longueur (structure TLV ou Tag, Length, Value).

Dans le bloc n°1, long de neuf octets, se trouve l’IMSI de la carte SIM, autrement dit son numéro de compte, réputé confidentiel (ici, xx yy zz masquent sa partie la plus personnelle) :

01 09
08 29 80 10 66 10 xx yy zz

Le bloc n°2 contient, sur dix octets (L = 0Ah) l’ICCID de la carte, autrement dit le numéro de série qui est imprimé dessus (quatre derniers octets masqués par nos soins) :

02 0A
98 33 10 65 64 00 aa bb cc dd

Dans les huit octets du bloc n°3, on lit l’IMEI du téléphone (Motorola) dans lequel se trouve la carte (6 derniers chiffres occultés) :

83 08
4A 84 38 06 a8 cb ed 0f

Le bloc n°4, pour sa part, révèle l’IMEI du précédent téléphone (Nokia) dans lequel la carte a été utilisée !

04 08
4A 39 00 17 a0 cb ed 0f

Le bloc n°5 contient le Terminal Profile du téléphone courant, autrement dit une liste de fonctionnalités qu’il supporte (bits à 1) ou non (bits à 0) :

85 14
0F 07 FF F7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Les deux octets du bloc n°6 s’incrémentant lors de chaque tentative (réussie ou non) d’envoi d’un SMS, il s’agit manifestement d’un compteur, probablement destiné à maintenir la synchronisation entre la carte SIM et la plate-forme OTA avec laquelle elle dialogue :

06 02
00 0E

Les deux derniers champs, pour leur part, hébergent des données dont la signification reste encore à élucider :

07 02
20 01

08 06
01 01 00 01 03 00

Quelles conclusions tirer de cette analyse ? Tout d’abord que le SMS véhicule des données (ICCID, IMSI) que l’opérateur connaît déjà, par définition. Peut-être pour vérifier simplement leur cohérence, mais dans quel but ? Ou alors, le SMS serait-il destiné à un prestataire tiers, qui ne les connaît pas, et à qui on les divulgue malgré leur caractère confidentiel ? De même, l’opérateur dispose d’autres moyens pour aller lire l’IMEI du téléphone, duquel il peut normalement déduire le Terminal Profile pour peu qu’il dispose d’une base de données constructeurs à jour. Clairement, ces informations peuvent lui être utiles pour optimiser, avec un temps de réaction minimum, certains services étroitement liés aux caractéristiques techniques du mobile (par exemple le #123#, qui doit être adapté au « niveau USSD » du téléphone utilisé).
Cependant, à quoi bon mémoriser dans la SIM, puis retransmettre, l’IMEI du précédent téléphone utilisé ? Il pouvait très bien s’agir d’un appareil emprunté, brièvement essayé avant de décider de l’acheter ou non, et pas nécessairement volé ! A l’évidence, cette information est fort indiscrète, et ne présente pas d’utilité technique flagrante. Il est curieux de remarquer que c’est à peu près au moment où les autorités policières et judiciaires améliorent leurs moyens d’interception de SMS, que l’on loge dans de tels messages des données largement redondantes pour leur destinataire supposé. Curieuse coïncidence...

Remontons encore un peu dans notre fichier log, et nous découvrirons des commandes de la forme A0 14 00 00 LEN, par lesquelles le mobile fournit à la carte certaines des données qu’elle va incorporer dans le SMS :

A0 14 00 00 16 14
81 03 01 26 01 82 02 82 81 83 01 00 94 08 4A 84 38 06 a8 cb ed 0f

retourne l’IMEI du téléphone, en réponse à une commande Provide local information (code opératoire 26h), émise par la carte SIM avec un « qualifier » égal à 01h (IMEI) :

A0 12 00 00 0B 12
D0 09 81 03 01 26 01 82 02 81 82

Auparavant, une autre commande réclamait, du fait de son qualifier 00h (LOCI), des informations sur la localisation du mobile :

A0 12 00 00 0B 12
D0 09 81 03 01 26 00 82 02 81 82

Dans la réponse du téléphone, on voit ainsi le code MCC-MNC du réseau sur lequel est inscrit le mobile (ici 208-01 pour Orange France), la zone locale dans laquelle il se trouve (la la), et même l’identifiant de la cellule qui le dessert (ci ci) : de quoi le localiser à quelques kilomètres près !

A0 14 00 00 15 14
81 03 01 26 00 82 02 82 81 83 01 00 93 07 02 F8 10 la la ci ci

On ne trouve pourtant aucune trace évidente de ces informations, bien indiscrètes et déjà connues de l’opérateur, dans le SMS envoyé par la SIM. Elles servent donc vraisemblablement à celle-ci (ou plutôt à l’application qu’elle exécute en tâche de fond) pour décider si elle doit ou non envoyer un SMS. Elle pourra ainsi s’assurer que le mobile est convenablement inscrit sur un réseau (faute de quoi l’envoi échouerait), voire même réagir différemment si le mobile est en roaming à l’étranger.


Et le réseau répond !
Pour peu que l’on n’interrompe pas prématurément l’enregistrement du dialogue entre la carte et le mobile, on verra que le réseau répond au SMS qui lui est envoyé. C’est une commande « Envelope » (CLA-INS = A0 C2) qui sert à rapatrier le SMS reçu vers la SIM, sans enregistrement dans le dossier des messages reçus puisque PID-DCS (7F F6) indique qu’il doit être interprété au vol :

A0 C2 00 00 39 C2
D1 37 82 02 83 81 86
07 91 33 86 09 40 00 F0 8B 28 44 05 85 02 87 F2
7F F6 60 01 32 80 13 91 80 18 02 70 00 00 13 0D
00 00 00 00 49 4D 45 00 00 00 00 00 00 09 06 02
00 0E

Bien plus court, ce message qui fait penser à un accusé de réception reprend le bloc de données contenant le texte « IME », et surtout la valeur du compteur de tentatives d’envoi de SMS, assurant ainsi le maintien d’une certaine forme de synchronisation. Autant dire qu’il faudra prendre des précautions si l’on souhaite composer soi-même, avec des données librement choisies, un SMS que l’on voudrait essayer de soumettre au réseau, « juste pour voir »...

Manipuler hors ligne
Au lieu de s’introduire ainsi malicieusement dans le système, il est possible d’expérimenter sans être inscrit sur aucun réseau, et même sans insérer la carte dans un téléphone ! Un simple lecteur PC/SC suffit, en effet, pour soumettre des commandes à la SIM et pour examiner ce qu’elle répond. Cela pourrait se faire, selon une habitude bien établie, en écrivant un programme ZCBasic implémentant les commandes voulues, mais il est ici plus approprié de se servir d’un outil travaillant en langage script. Faute d’avoir accès au remarquable logiciel Smart Access qu’Atmel fournit à ses clients professionnels, le Script Commander qu’ACS livre avec le SDK de son lecteur ACR38 peut suffire.
Le texte de ce programme, très concis, n’est rien d’autre qu’une suite de commandes que l’on pourrait tout aussi bien enchaîner manuellement, respectant par-là même les temps d’attente prévus ici sous la forme de commandes A0 F2 ou Pause.

Reader 1
power_on
A0 10 00 00 04 7F FF FF FF
A0 12 00 00 67
A0 14 00 00 0C 81 03 01 25 00 82 02 82 81 83 01 00
A0 12 00 00 0F
A0 F2 00 00 1A
A0 14 00 00 10 81 03 01 03 00 82 02 82 81 83 01 00 84 02 01 78
A0 F2 00 00 1A
A0 F2 00 00 1A
A0 F2 00 00 1A
A0 F2 00 00 1A
A0 F2 00 00 1A
A0 12 00 00 0B
A0 14 00 00 15 81 03 01 26 00 82 02 82 81 83 01 00 93 07 02 F8 10 la la ci ci
A0 12 00 00 0B
A0 14 00 00 16 81 03 01 26 01 82 02 82 81 83 01 00 94 08 4A 84 38 06 a8 cb ed 0f
Pause
Pause
A0 12 00 00 88
power_off

Il ne restera plus qu’à étudier les réactions de la carte à des variantes de tel ou tel champ de données, et à simuler éventuellement la réception du SMS retourné par le réseau. Cela, de préférence, sur une carte périmée, afin de ne pas prendre le risque de l’invalider par un trop grand nombre de manœuvres hasardeuses !"

Aucun commentaire:

Enregistrer un commentaire