- Le Samsung WB850F est le premier modèle à utiliser à la fois le SoC DRIMeIII et le Wi-Fi ; grâce à partialImage.o.map inclus dans le ZIP du firmware, il est devenu possible d’analyser le firmware du SoC principal et de contourner la détection de hotspot
WB850F_FW_210086.zipcontientWB850-FW-SR-210086.bin, qui renferme 6 partitions, ainsi qu’un dump de l’éditeur de liens de plus de 300 000 lignes, ce qui a permis de confirmer queMain_Imageest bien le véritable firmware ARM- Dans l’analyse avec Ghidra, les étapes clés ont été de trouver l’adresse de base 0xc0004000 de
Main_Imageà partir des écarts entre adresses de chaînes, puis de convertir les noms de fonctions.textpour les importer comme symboles - La fonction de décision de hotspot
DevHTTPResponseStartdétermine si l’AP est authentifié à partir d’un cookie de domaine Yahoo dans une réponse HTTP 200, ou de la chaîneyahoo.au début de l’URL de redirection 301/302/307 - Comme Yahoo redirige désormais vers HTTPS, la position de
yahoo.est sortie de la plage autorisée par le code ; après le patch desamsung-nx-emailservice, l’envoi de photos depuis le WB850F a réussi
Structure du ZIP du firmware WB850F
- Le Samsung WB850F est l’un des rares modèles pour lesquels Samsung publie encore le firmware et les fichiers de support, même après l’abandon de l’application iLauncher
WB850F_FW_210086.zipcontient les fichiers suivantsGPS_FW/BASEBAND_FW_Flash.mbinGPS_FW/BASEBAND_FW_Ram.mbinGPS_FW/Config.BINGPS_FW/flashBurner.mbinFWUPpartialImage.o.mapWB850-FW-SR-210086.binwb850f_adj.txt
FWUPne contient que la chaîneupgrade all, qui ressemble à un script pour un module de test/automatisation du firmwarewb850f_adj.txtest un script plus complexe qui met à jour le firmware GPS et supprime les fichiers associés- Les scripts liés au GPS et le dossier
GPS_FWsont exclus de cette analyse
partialImage.o.map : la carte d’un dump de l’éditeur de liens
partialImage.o.mapest un fichier texte de plus de 300 000 lignes ; il contient la sortie de l’éditeur de liens pourpartialImage.oet la carte mémoire complète du fichier lié- La section
.textcontient des noms de fonctions commesysInit,archPwrDown,DevHTTPResponseStart,DevHTTPResponseDataetDevHTTPResponseEnd - La section
.datacontient des symboles de données commesysBus,sysCpuetsysBootLine - Ce fichier sert de carte des symboles pour faire correspondre le code du firmware avec les noms de fonctions
En-tête et table de partitions de WB850-FW-SR-210086.bin
- Avec
binwalksurWB850-FW-SR-210086.bin, on voit des en-têtes HTML, PNG, JPEG et VxWorks, ainsi que plusieurs chemins Unix, mais aucune partition ni aucun système de fichiers clair n’apparaît - Un dump hexadécimal du premier kilo-octet montre, après la version de firmware
210086,0x00 0x06, puis des noms de fichiers commeFW_UP/ONBL1.bin - Chaque enregistrement semble avoir une structure de 60 octets, composée d’une chaîne sur 32 octets complétée par des zéros, de deux entiers little-endian et d’un nom de partition sur 20 octets complété par des zéros
- Les deux entiers sont interprétés respectivement comme la longueur et l’offset dans le fichier
- Il y a au total 6 enregistrements ;
0x00 0x06est donc interprété comme l’octet de fin ou de padding de la chaîne de version du firmware, suivi d’un compteur de partitions sur 1 octet -
Partitions reconstituées
FW_UP/ONBL1.bin- Taille : 196 octets, offset :
0x0000800, nom de partition :ONBL1
- Taille : 196 octets, offset :
FW_UP/ONBL2.bin- Taille : 46 Ko, offset :
0x00008c4, nom de partition :ONBL2
- Taille : 46 Ko, offset :
[WB850]DSC_5KEY_WB850- Taille : 30 Mo, offset :
0x000bef4, nom de partition :Main_Image
- Taille : 30 Mo, offset :
RomFS/SPID.Rom- Taille : 48 Mo, offset :
0x1d2b32c, nom de partition :Resource
- Taille : 48 Mo, offset :
FW_UP/WB850.HEX- Taille : 19 Ko, offset :
0x4c75f2c, nom de partition :OIS
- Taille : 19 Ko, offset :
FW_UP/skin.bin- Taille : 36 Mo, offset :
0x4c7acb2, nom de partition :SKIN
- Taille : 36 Mo, offset :
- L’extraction des partitions a été réalisée avec un outil d’extraction de partitions de firmware DRIMeIII écrit pour l’occasion
Distinguer les partitions de code et de données
- L’outil d’extraction extrait les fichiers selon le nom de partition et ajoute
.bin - Les résultats de
filesont d’une utilité limitée :Main_Image.binest par exemple identifié à tort comme une clé secrète OpenPGP ONBL1etONBL2sont supposés être les bootloaders de première et deuxième étapes, d’après la chaîne"BootLoader(ONBL1, ONBL2) Update Done"présente dansMain_ImageMain_Imageest le véritable firmware, etbinwalk -Ay signale de nombreux prologues de fonctions ARMResourceetSKINsont de grands conteneurs ; ils pourraient correspondre à une configuration fournie par le fabricant du SoC et liée au skin de l’interface de l’appareil photoOIS, malgré son nom de fichier, n’est pas réellement un HEX ; il pourrait s’agir du firmware du dispositif dédié de stabilisation optique de l’image- Le cœur de l’analyse est
Main_Image
Mapper Main_Image dans Ghidra
- Les trois partitions
ONBL1,ONBL2etMain_Imagecontiennent du vrai code ARM - Un firmware ARM classique place une table de vecteurs de reset à l’adresse
0x0000000, mais les trois binaires commencent par du code linéaire et doivent donc être remappés à une adresse encore inconnue - Pour analyser la fausse détection de hotspot, il fallait effectuer les tâches suivantes
- trouver la bonne adresse mémoire où mapper
Main_Image - charger dans Ghidra les noms de symboles de
partialImage.o.map - analyser la fonction qui déclenche à tort la décision de connexion au hotspot
- trouver la bonne adresse mémoire où mapper
- Dans l’onglet Defined Strings de Ghidra, une recherche de
"yahoo"a fait apparaître des éléments qui semblent être des chaînes de debug deDevHTTPResponseStart()DevHTTPResponseStart: url=%s, handle=%x, status=%dDevHTTPResponseStart: This is YAHOO check !!!DevHTTPResponseStart: THIS IS GOOGLE/YAHOO/SAMSUNG PAGE!!!! 111301/302/307! cannot find yahoo!
- Dans
partialImage.o.map,DevHTTPResponseStartse trouve à0x321a84, et Ghidra trouve aussi une fonction au même offset - L’écart entre la valeur du pointeur de chaîne de debug et l’offset réel de la chaîne correspond à
0xc0004000, ce qui permet de conclure que l’adresse de base deMain_Imageest0xc0004000 - Comme Ghidra ne permet pas de modifier l’adresse de base après coup, il a fallu retirer le binaire du projet, le réimporter et définir l’adresse de base
Importer les noms de fonctions et analyser DevHTTPResponseStart
- ImportSymbolScript.py de Ghidra permet d’importer en masse des symboles depuis un tableau texte
- Le script attend, sur chaque ligne, un nom de symbole, une adresse hexadécimale et
fpour indiquer une fonction oulpour indiquer un label - Dans
partialImage.o.map, seuls les fonctions de la section.textcourante étaient nécessaires ; il fallait donc exclure les éléments suivants- lignes vides
- offsets de fichiers objets
- labels de section comme
.text - labels avec le préfixe
L$_ - symboles locaux avec le préfixe
$
- Pour faire correspondre les adresses avec l’adresse de base de Ghidra,
0xc0004000est ajouté aux adresses - Le résultat converti, sous une forme comme
sysInit c0004000 fouarchPwrDown c0004094 f, a été chargé depuis le Script Manager de Ghidra - Une fois les noms de fonctions présents, plusieurs champs
DAT_ont été définis comme pointeurs et les noms de paramètres ont été changés en fonction des chaînes de debug, ce qui rend le résultat de décompilation deDevHTTPResponseStartlisible
Conditions de détection du hotspot
DevHTTPResponseStartdétermine, à partir du statut de la réponse HTTP, de l’URL et des en-têtes, si l’AP Wi-Fi est authentifié- Pour une réponse HTTP 200 OK, l’en-tête de réponse doit contenir un cookie de domaine Yahoo pour être traité comme une authentification réussie
- Les valeurs testées sont
domain=.yahoo,Domain=.yahoo,domain=kr.yahooetDomain=kr.yahoo - Si la condition est satisfaite,
p_request_ongoingpasse à 0 et, si le navigateur n’est pas authentifié,safnotify_auth_ap(0)est appelé
- Les valeurs testées sont
- Pour une redirection HTTP 301/302/307, la chaîne
yahoo.est recherchée dans l’URL- Si
yahoo.est absent ou se trouve aprèsurl + 11, Yahoo est considéré comme introuvable - Si le framebuffer du navigateur n’est pas activé et que l’authentification n’est pas non plus faite,
safnotify_auth_ap(1)est appelé - Si
yahoo.se trouve au début,safnotify_auth_ap(0)traite l’authentification comme réussie
- Si
- Un statut négatif renvoie
false, comme pour une requête interrompue - Pour un statut positif qui n’est ni 200 ni une redirection, le résultat dépend de l’état du framebuffer du navigateur
Le test Yahoo cassé après TLS et son contournement
- L’URL interrogée par l’appareil photo est
http://www.yahoo.co.kr/ - Lorsqu’on l’interroge directement, le serveur répond
HTTP/1.1 301 Moved PermanentlyavecLocation: https://www.yahoo.com/ - Dans
https://www.yahoo.com/, la sous-chaîneyahoo.se trouve à la position 12 - Le code exige que
yahoo.se trouve dans les 11 premières positions, ce qui casse ce test après le passage à HTTPS - Pour réussir le test de hotspot, il faut faire pointer l’enregistrement DNS vers un autre serveur, et que ce serveur redirige en HTTP vers un nom qui ressemble davantage à Yahoo, ou définisse un cookie de domaine Yahoo
- Après le patch de samsung-nx-emailservice, l’appareil photo se connecte réellement et envoie les photos
Autres appareils photo auxquels le même contournement a été appliqué
- Cette analyse a permis de comprendre et de contourner la détection de hotspot de l’appareil photo Wi-Fi Samsung WB850F à partir d’une seule fonction rétro-ingéniérée
- Le patch final était petit, mais en raison de la méthode de détection mise en œuvre par les ingénieurs de Samsung, il aurait été difficile de deviner le contournement à partir de la seule trace des paquets
- Une fois le bon élément à chercher identifié, le même contournement a aussi été appliqué à des appareils photo qui interrogent MSN.com
- En conséquence, les EX2F, ST200F, WB3xF et WB1100F ont été ajoutés à la liste des appareils photo pris en charge
Main_Imagecontient plus de 77 000 fonctions, ce qui laisse encore beaucoup de matière à analyser pour mieux comprendre le fonctionnement des appareils photo numériques
1 commentaires
Commentaires sur Hacker News
J’ai davantage apprécié https://op-co.de/blog/posts/samsung_nx_cryptofail/#index3h3
C’est un cas vraiment stupéfiant d’échec du chiffrement du firmware
Travail impressionnant. Je me demande s’il est prévu d’en faire un tutoriel sur la méthode de reverse engineering
J’ai seulement omis les parties faciles à retrouver via Google
Tout ce que je veux, c’est prendre des photos de dSLR avec le bouton de l’appareil, puis retrouver l’image peu après dans Apple Photos
Les smartphones ont pratiquement détruit le marché des appareils photo grand public, donc la demande semble insuffisante. Comme idée de projet, on peut chercher un moyen de faire entrer un ESP32 dans une carte SD
Ils peuvent aussi se connecter à un téléphone, une tablette ou un site web, mais cela nécessite une application ou un service. Documentation pour l’envoi direct en FTP depuis l’appareil : https://gdlp01.c-wss.com/gds/5/0300024975/01/eos5d-mk4-wff-i... page 113. Le lien renvoie au manuel EOS 5D Mark IV (WG) Wi-Fi (Wireless Communication) Function Instruction Manual
Malheureusement, ce sont des modèles vieux de 10 ans et ils sont aussi rares sur le marché de l’occasion
L’appairage se fait en Wi-Fi ou en Bluetooth, et on peut, si on le souhaite, piloter l’appareil à distance depuis un iPad et voir l’écran