Vidéo: CE CHEVAL DE TROIE EST INDÉTECTABLE DES ANTIVIRUS ?! (Novembre 2024)
La signature numérique n'est pas brisée
La signature numérique d’un document ou d’un fichier a pour objectif de prouver que le fichier n’a pas été modifié. Le processus utilise une forme de cryptographie à clé publique. Vous signez numériquement un fichier en le cryptant avec votre clé privée. Le fait que le fichier crypté puisse être déchiffré à l'aide de votre clé publique prouve qu'il n'y a pas eu de falsification. Si BlueBox avait trouvé un moyen de modifier réellement un fichier sans changer sa signature numérique, cela aurait été un coup dur pour l’ensemble du secteur de la cryptographie. Mais ils ne l'ont pas fait.
BlueBox communiquera tous les détails de leurs recherches lors de la conférence Black Hat dans quelques semaines. Cependant, Pau Oliva Fora, chercheur à ViaForensics, a publié un code de preuve de concept qui illustre l'approche adoptée.
En vérité, c'est très, très simple. Les fichiers APK sont compressés à l'aide d'une version de l'algorithme d'archivage ZIP répandu. La plupart des implémentations ZIP ne permettent pas deux fichiers portant le même nom dans une archive, mais l'algorithme lui-même n'interdit pas cette possibilité. Lors de la vérification de la signature numérique d'une application, le système d'exploitation Android examine le premier fichier correspondant, mais lors de son exécution et de son lancement, il récupère le dernier . Pour convertir une application en Trojan, vous n'avez plus qu'à y insérer votre code malveillant en utilisant un nom qui existe déjà dans l'application. La démonstration de Fora consiste en quelques dizaines de lignes de code Java.
Une autre attaque structurelle
Un chercheur chinois bloguant sous le nom d'Android Security Squad a trouvé la démonstration intrigante et a cherché d'autres moyens de contourner le processus de vérification. Lire le message traduit par Google est un peu difficile, mais il semble que l'attaque repose sur un concept de niveau informatique 101.
Les programmes informatiques stockent les numéros de comptage dans des ensembles de bits de taille fixe. Par exemple, avec huit bits, vous pouvez représenter des nombres de 0 à 255. S'il est nécessaire de représenter des nombres négatifs, la convention la plus ancienne est que le bit le plus à gauche indique un nombre négatif. Avec huit bits, vous pouvez également représenter des nombres de -128 à 127. Le nombre binaire 11111111 représente soit 255, soit -1, selon qu’il s’agit d’un nombre non signé ou signé.
Android Security Squad a examiné le format de l'en-tête de fichier APK et a trouvé un champ de données supposé être un décalage positif, mais stocké sous forme d'entier signé. Le fait de forcer ce champ à une valeur négative spécifique force le chargeur APK à exécuter le code malveillant plutôt que le code signé numériquement déjà vérifié. OK, c'est un peu plus complexe, mais c'est à peu près comme ça que ça marche.
S'en tenir à Google Play
Aucune de ces hacks ne modifie réellement le mécanisme de signature numérique Android. Au lieu de cela, ils tirent tous deux parti des bizarreries de la structure APK pour rendre la signature numérique non pertinente. En outre, aucune d’elles ne permettra à une application Trojanarisée de se faufiler devant les analyses de Google. Google a spécialement mis à jour Google Play pour filtrer les applications truquées en utilisant l'attaque "clé principale"; même sans cette étape, la sécurité standard bloquerait presque certainement l'un ou l'autre type d'application Trojanized.
La leçon est claire. Obtenez toujours vos applications à partir de sources légitimes, vérifiez toujours que le nom du développeur est valide et configurez votre téléphone afin qu'il ne permette pas l'installation d'applications à partir de "sources inconnues". Faites attention aux autorisations demandées par une application et soyez prêt à abandonner une installation suspecte. Si votre opérateur propose une mise à jour Android, installez-la toujours. C'est juste du bon sens!