Botconf 2018 - J3

WebAssembly Reverse Engineering and Analysis

WebAssembly est un standard d’assembleur pour une machine virtuelle stack-based conçue pour être facilement transformé en langage natif (assembleur). C’est l’équivalent du binaire pour le web. La compilation vers WASM peut se faire avec LLVM 6.0. L’implémentation de référence est disponible sur github. WASM est disponible sur tous les navigateurs majeurs du marché.

Le minneur de bitcoin Coinhive dispose d’un shell en JS, mais le code du coeur est écrit en WASM. De plus les interpréteurs WASM souffre de nombreuses vulnérabilités. d’après les orateurs, WASM pourrais servir dans du bypass de WAF, ou pour du malvertising. WASM à des capacités d’obfuscation de code non-négligeable, et est assez désagréable à reverser. Pour désassembler WASM dans IDA, on peut utiliser le plugin IdaWasm.  WASM est parfois stocké dans un format intermédiaire le .WAT, un équivalent du PYC pour python.

Red Teamer 2.0: Automating the C&C Setup process

Comme l’a dit Eric en introduction, les red-teamer ressemble beaucoup à des attaquants type APT (avec moins de budget ?). Lors des prestations de red-team, l’opsec pour assurer la réussite de la misson est importante. Le problème c’est qu’il y a de nombreux outils de pentest à déployer et qu’ils ne sont pas tous simples à configurer sans faires d’erreurs.

Pour l’architecture, l’orateur utilise AWS et utilise du domain fronting pour échapper aux protections côté client de type DLP. Utiliser des serveurs de mail sur une plateforme de cloud réputé facilite le passage au travers des filtres de réputation pour les campagnes de phishing.

Le RAT est compilé dans une VM à la volée, et intègre le domaine de C&C qui pointera vers le reverse-proxy qui protège l’infrastructure de la red-team. Le déploiement des bucket S3 pour récupérer les résultats du phishing via Gophish simplifie la création d’une campagne de phishing.

Côté OPSEC, il faut que le domaine de phishing ne pointe pas sur une IP qui appartiens à la red-team, au risque de la leaker dans la configuration TLS. L’entreprise doit être prête à répondre aux questions d’AWS lorsque la blue-team va déclancher des demandes de fermeture de service sur l’infra de phishing.

Mirai: beyond the aftermath

Mirai a généré de gros DDoS en s’appuyant sur des IoT vulnérables. Cela a permis de mettre la lumière sur un dette de sécurité conséquente. Après le leak du code source, on à observé des botnet qui protégeaient les IoT des intrusions, et des variantes du botnets. Le nombre de Botnets IoT est en constante augmentation en terme de nombre d’échantillons uniques. en 2016 Mirai représentais 3% des samples.

L’orateur détaille en suite l’architecture et le fonctionnement de Mirai, et comment le botnet était rentabilisé en le louant par morceaux aux clients. A la release du code source de Mirai, les listes de login/pass ont été réutilisés dans  Aidra.  Hajime est un botnet qui viens sécuriser les IoT et qui laisse un message bienveillant sur les devices. Pour mesurer la ré-utilisation de code entre Mirai et les nouveaux samples, on peut utiliser BinDiff (ou minhash comme on l’a vu dans la prez malpedia). IoTReaper par exemple est composer d’une majorité du code de mirai, avec en plus de l’exploitation de vulnérabilités pour la propagation.

Persirai/Http81 réutilise le mécanisme de scan de port de Mirai. Bashlite/gafgyt/qbot  recycle certaines fonctions de scan. HideNSeek recycle le mécanisme de configuration et les fonctions de gestion des connexions telnet. ADB.miner réutilise le portscan de Mirai pour trouver des ports de debug ADB ouverts, puis déploie un mineur monero.

Les variantes mirai sont souvent packé par UPX avec un changement du magic pour empêcher l’unpacking automatique, il faut donc modifier ce magic sur le header du programme avant de le passer à l’unpacking.  OMG est une variante qui a transformé Mirai en service de proxy pour l’anonymisation des cybercriminels.

HTTP Malware distinguishing features

L’orateur explique les nombreuses différences entre une requête HTTP générée par un navigateur web, et celles généré par des bots qui viennent joindre leur serveur de C&C.  Il existe des papiers dans la littérature mais leurs travaux repose sur des jeux de donnés très petits. Du coup les orateurs ont mis en place un système de collecte et d’analyse des headers HTTP pour distinguer les navigateurs des bots.

Pour générer le Dataset, ils ont crawler le top 500 Alexa avec des navigateurs pilotés par Selenium, et exécuté des malwares dans des sandbox et monitoré les requêtes HTTP à l’aide de StratosphereIPS. L’idée c’était de rechercher des erreurs faites par les cybercriminels dans la génération de leurs requêtes.

Les éléments différentiants sont souvent des retours chariots absent, des virgules qui apparaissent à des endroits innapropriés, l’emploi de tabulation au lieu d’espaces, ou des espaces en trop. Ces petits détails ne sautent pas forcément aux yeux mais permettent de distinguer les bots des browsers. La version du protocole HTTP chez des malwares est souvent à 1.0, alors que les navigateurs déclarent du 1.1 sauf pour IE. Un grand nombre de malwares ont des caractères non-ascii dans le corps de la requête POST, et souvent le referer est manquant. La mesure d’entropie est aussi un bon indicateur d’obfuscation ou de chiffrement. Les bots ont tendance à requêter plus fréquement des IP+port là ou les navigateurs requêtent à 99,8% des noms de domaines (dans le dataset collecté ! ). Les bots ont aussi beaucoup moins de lignes dans les Headers, ils dépassent rarement les 6 headers, et la majorité tourne autour de 3 header.

Parfois IE envoie un user-agent Firefox quant il rentre dans un mode de compatibilité particulier déclanché par le contenu de la page. Beaucoup de bots oublient le User-Agent dans les Headers. Bon parfois les navigateurs ne mettent pas de User-Agent dans des requêtes initiant des websocket.  Souvent le User-Agent des bots reprend le nom de la librairie, voir des informations sur le système infecté.

Tracking actors with their WebInjects

Les WebInjects sont des scrips injectés dans les navigateur de victimes infectés par des malwares bancaires et qui viennent modifier le comportement de l’application web pour cacher aux utilisateurs certaines informations de transferts ou bien récupérer des informations d’authentification. Les donnés volés par les WebInjects sont souvent gérés dans un panel à part.

Certains cybercriminels se sont spécialisé dans les WebInjects et vendent des systèmes complets de gestion associé. Ils peuvent se vendre jusqu’a 800$. Yummba est un revendeur de WebInjects aisément identifiable avec un grand nombre de banques ciblés.  Tables est un WebInject au format Zeus et utilisé par pas mal de malwares bancaires dérivés de ce dernier.  inj_inj est en circulation depuis 2015 et se retrouve dans Gootkit, ISFB, ZeusPanda, Dridex, etc.. on retrouve souvent inj_inj comme variable dans l’injection.  LOB_ATS à été nommé d’après l’url du panel « /lob.php ».

Pour analyser de façon automatique les acteurs derrière les WebInjects, l’orateur à automatisé l’extraction des configurations & urls de C&C des WebInjects, puis est allé extraire les webinjects sur les C&C en émulant les clients, puis les a aggrégé par similarité & graphé dans graphDB.

Triada: the past, the present and the (hopefully not existing) future

Triada était un vieux trojan qui rootais les téléphones android, puis c’est devenu une backdoor au niveau système. Découvert en 2016 par Kaspersky, il utilisait de vieux exploits pour devenir root sur le système, et il droppais un binaire su protégé par mot de passe.

Pour faire de la place, le malware gère un système de pondération pour virer les appli qui ne servent à rien et qui sont isolés, tout en laissant les applis systèmes ou importantes pour l’utilisateur. Le malware dans sa première version faisait de l’injection dans les navigateurs mobiles en utilisant ptrace et en chargeant un .so pour hooker certaines fonctions du navigateur.

Bon comme Android est de plus en plus sécurisé, les cybercriminels derrière Triada n’ont plus eu de moyens de rooter le téléphone, et on donc changé de stratégie pour devenir une backdoor au niveau système en modifiant la fonction de log pour s’exécuter dans le contexte de l’application à chaque fois qu’elle y faisait appel.

Une fois le reverse de Triada fait, les équipes de Google Play Protect sont passé à la protection des utilisateurs. Pour chaque constructeur, ils ont demandé une mise à jour système pour dégager la backdoor Triada.

The snake keep reinventing itself.

Turla est un groupe d’attaquant qui vise les diplomates et les militaires. Lors de l’opération Mosquito Turla, ils utilisait des faux installeurs téléchargés depuis admdownload.adobe.com, et ce malgrès que adobe n’ai pas été compromis. Lorsque la victime télécharge l’installeur, elle contiens un trojan, et des donnés de fingerprinting de l’utilisateur sont envoyés sur adobe.com. Il est probable qu’il s’agisse soit d’un Mitm ou alors d’un hijack BGP. A l’installation, la backdoor exfiltre les identifiants wifi.  Il est peu probable qu’il s’agisse d’un Mitm sur le réseau local. Il s’agirais plutôt d’un Mitm au niveau du fournisseur d’accès Internet.

Turla utilise souvent du « string stacking » et XOR ses log. Ils utilisent aussi des outils open-source comme le dumper de mots de passe Quarks, Lazagne, Nirsoft et Mimikatz. Lorsqu’ils ont fini d’exploiter la machine infectée, ils font le ménage avec la backdoor Gazer. Ils préfèrent nettoyer tout plutôt que de risquer de voir leur dernière backdoor récupérée par une analyse forensic.

En 2013, Turla à commencé à utiliser des commandes transmisses au format XML par e-mail. en 2016, les commandes sont chiffrés dans des pdf envoyé en pièce jointe aux victimes. L’installation se fait par le détournement d’objet COM. C’est assez vieux et bien documenté. Ils détournent aussi le protocole de gestion d’Outlook. Il n’est pas nécessaire d’être admin pour détourner un objet COM, et donc ils ont besoin de peu de privilèges pour s’installer. MAPI est un objet COM qui permet aux logiciels d’interragir avec les e-mails. La backdoor remplace olmapi32.dll qui sert à gérer ces fonctions. La backdoor rajoute des callback sur la boite de réception et la boite d’envoie pour intercepter l’ensemble des e-mails et les forwarder à l’attaquant. Les e-mails contenant les résultats des commandes sont envoyés en même temps que l’utilisateur envoie des e-mails. Les e-mails sont envoyés dans des boites e-mails gratuites. Toutes les métadonnés des e-mails en réception sont loggué par l’attaquant, et si l’e-mail contiens un PDF, la backdoor le récupère pour y rechercher une commande à exécuter.  Tous les messages liés à l’activité de la backdoor sont supprimés. La backdoor hook la fonction qui fait popper une fenêtre de notification pour les nouveaux e-mails et bloquer son affichage s’il s’agit d’un e-mail de l’attaquant. La backdoor est indifférente quand à l’origine de l’e-mail. Pour stopper l’infection il faut supprimer le malware, un takedown de l’e-mail de l’attaquant ne sert à rien. Turla est connu pour utiliser des algo exotiques. Toutes les valeurs significatives des algo ont été changés, et ils customisent les algo de chiffrement. Le problème c’est qu’en customisant MISTY1, ils ont introduit un bug qui fait qu’en mettant une valeur nulle pour l’IV, la clef dérivée est nulle. On peut donc crafter un pdf pour contrôler n’importe quelle backdoor.

On peut bloquer le chargement de la backdoor à l’aide des mécanismes de sécurité de microsoft en venant bloquer le chargement d’une dll non signée par microsoft dans outlook.

Actuellement, la backdoor 32bit n’est plus droppé, elle a été remplacé par le script de vol d’identifiants wifi, ou l’installation d’une backdoor jscript. Carbon est une backdoor de 2ème niveau avec des capacités avancés qui utilise des WordPress compromis comme C&C. Mosquito migre d’outils maison vers des outils sur étagère comme metasploit shellcode + meterpreter.

How many mirai variants are there

il y a plus de 116 branches de Mirail avec 21k samples dans la nature. Certaines branches de Mirai ont des noms qui proviennent du message d’install réussi renvoyé lors de son exécution. Certaines branches ont été nommés en utilisant le nom de familles de malwares célèbres. Pour classifier les variantes, les orateurs ont extrait les configurations et les  méthodes d’attaques des samples pour les corréler. L’analyse statique c’est faite avec IDA, et l’analyse dynamique avec Unicorn.