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.

checksignBien 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

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.sending_info

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.

SCRT at EUSecWest 2012 : iOS applications auditing

Later this month I will be presenting a talk on iOS applications auditing at EUSecWest in Amsterdam. Here is an overview of this talk.

Mobile applications security is becoming a bigger concern every day and it is not only an idea taken out of some Gartner’s quadrant, this is something we see every day as penetrations testers.

This presentation aims at sharing experience and knowledge in iOS applications pentesting. The first step will be to quickly review the iOS environment, including the ARM platform, the simulator and how applications could be distributed. Before explaining how to find bugs, people have, obviously, to know what to look for. This is why the most common flaws impacting third-party iOS applications will be presented.

After this introduction, we will dig into the main subject. The first thing an auditor should do is set-up his working environment, ie. “should we use the simulator, a jailbroken device or is Apple providing useful tools?” Then we will present how to do a recon on an application using its companion files, including configuration files, bundles, etc. As some applications are using the KeyChain to store information, we will also explain how to recover those. The next part related to more or less the passive analysis of applications will be the communication channel between the application and a possible web-service.

The passive analysis part will be followed by some reverse engineering technics to dig deeper into an application’s internals. The first part will be dealing with static analysis, answering questions like “how to extract class definitions?” and “where are all the xrefs!?”. The last part will be dealing with dynamic analysis which can be pretty useful for let’s say you want to manipulate the messages sent to a web-services but they are encrypted the data with an additional layer and not just SSL. We will view how to do that using GDB and bundles injection.