Analyse d’un malware iOS : Unflod.dylib

Suite à la parution de commentaires sur /r/jailbreak concernant un malware ciblant iOS, je me suis dis qu’une analyse serait intéressante vu que cette plateforme est encore peu ciblée par ce type de menaces du à son architecture.

La première étape fut de récupérer des informations sur le binaire, ie. Entitlements et signature du code. Le premier point n’apporte pas grand chose sur le binaire, à part qu’il peut être débuggé et accéder au Keychain.

checksign

Bien que n’ayant été trouvée que sur des terminaux jailbreakés, cette bibliothèque est signée avec le compte iPhone Developer de Wang Xin. Ce procédé est étrange vu que le jailbreak désactive la validation de code signé sur iOS.

L’EntryPoint de la bibliothèque est assez simple et ne réalise qu’une seule action: remplacer la fonction SSLWrite du système par une fonction implémentée dans la bibliothèque: replace_SSLWrite. Le hooking de la fonction est réalisée à l’aide de la fonction libsubstrate.dylib!MSHookFunction. La bibliothèque MobileSubstrate est utilisée par  beaucoup d’applications provenant d’AppStore tierce afin de réaliser du Swizzling/hooking, il n’est donc pas étonnant de la voir utilisée ici.

call_mshookfunction

La fonctionnalité de la fonction remplaçant SSLWrite est elle aussi très simple: détecter une tentative d’authentification sur les serveurs d’Apple et intercepter les authentifiants de l’utilisateur. Pour ce faire, la chaine /WebObjects/MZFinance.woa/wa/authenticate est recherchée dans les données envoyées via SSL. Cette chaine fait en général partie des URLs pointants sur *.itunes.apple.com.

searching_iTunes_login
sending_info

Une fois identifiés, les authentifiants sont envoyés à un serveur en écoute sur le port 7878 soit à l’IP 23.88.10.4, soit à l’IP 23.228.204.55.

Pour le moment, aucune information n’est disponible quant-à la source de l’infection. Il est toutefois intéressant de voir que les terminaux iOS jailbreakés commencent à être la cible de malware grand-public.