SSTIC 2022 J2

SSTIC 2022 J2

Timing attack minerva sur OpenSSL

L’attaque Minerva/TPM.FAIL consiste à mesurer les délais d’exécution des algos pour déduire de l’information sur la clef. La lib openssl contient des contre-mesures pour éviter ces fuites d’information. ECDSA par exemple est résistante à ce type d’attaques. Quand on regarde de près certaines fonctions souffrent de ces raccourcis sur les temps d’exécution permettant d’inférer des secrets.

Le comportement de cette fonction vulnérable dépend aussi des paramètre de la courbe elliptique en entrée. Vu que les courbes choisies dans ces librairies crypto sont standardisées, on peut mettre en oeuvre l’attaque.

Side channel attack sur Elephant-160 aka Dumbo

Side channel attack par consomation sur dumbo, un participant au concour du NIST sur la crypto légère. Certains devices sont très contraints sur leur consommation comme les capteurs lora ou les tag RFID. Du coup on essaye d’économiser l’énergie.

Ces contraintes sont antagonistes: sécurité, performance et cout énergétique. L’enjeu c’est bien de conscillier au mieux les 3 dans les algo crypto « légers ».

Dumbo est une variante d’elephant-160. C’est un algo de chiffrement symétrique par blocs de 20 octets et d’authentification. L’algo trimbale un masque qui dépend d’un nombre magique et un bloc spongent de permutation.

L’attaque par consomation va viser le masque et la s-box de spongent.

Attaque et sécurisation d’un schéma d’attestation à distance vérifié formellement.

L’objectif est de détecter la compro d’un algo à distance avec un modèle de menace fort: ring0 sur un CPU Intel. On part du principe que l’attaquant n’a pas d’accès physique à la machine. La vérification formelle ne repose pas sur des instructions propriétaires spécialisées.

L’attestation à distance est un protocole cryptographique associé à un mécanisme de preuve dans un composant de confiance (genre TPM). L’adversaire va chercher à masquer l’altération du système authentifié.

L’archi choisie pour mener ces attaques est un xilinx zynq avec un FPGA sur lequel est créé l’architecture de confiance. Le moniteur va surveiller l’exécution de l’algo d’attestation, via des traces de debug et la latence d’exécution. En cas de doute, le système cible est réinitialisé pour empêcher l’exécution de l’algo de confiance. ( tl;dr: c’est balèze, matez la vidéo et les actes…)

Oasis: système de détection d’intrusion au sein des composants BLE

Le BLE est un protocole bluetooth à faible consommation, mais la pile protocolaire est très simple et il a souffert de beaucoup de vulnérabilités.

Les mécanismes de sauts de fréquence rendent difficile le monitoring du protocole, d’ou l’idée de l’intégrer au device. Le mécanisme fonctionne sur de nombreuses familles de puces BLE. Les firmwares des IoT BLE ne sont pas conçus initialement pour être modifiés et embarquer des fonctions de sécurité, on doit donc reverser le firmware pour injecter les fonctions de sécurité aux bons endroits.

La détection se concentre sur les attaques visant le protocole, et pas les défauts d’implem.

Gattacker consiste à s’associer au périphérique en lieu et place de l’utilisateur légitime. Lorsque cette attaque à lieu, un délai entre les advertisement est observable, c’est en mesurant ce délai que la détection de l’attaque est possible.

Pour mettre en oeuvre la détection, la rétroconception s’est concentrée sur la localisation des données significatives permettant d’observer l’attaque. Une fois ces données localisées, le framework oasis va poser des hooks dans les firmwares modifiés pour intercepter les données et alimenter la détection.

Pour les 6 attaques les orateurs ont mené des jeux d’attaques et des jeux d’utilisation normale afin d’évaluer la qualité de leur détection. Les résultats sont très bon et leur taux de détection est supérieur à 94%.

Ghost in the wireless, iwlwifi edition.

Après avoir voulu transférer des données entre un smartphone et un pc linux sous ubuntu, la connexion a freezé, et en regardant dmesg, ils ont vu des reset de la carte wifi.

Les orateurs ont analysé le firmware intel à l’aide du code d’iwlwifi. Certainees puces wifi disposent de un ou plusieurs processeurs qui partagent une ram où est chargé le firmware. En utiliant cpu_rec on trouve du arc_compact. Les orateurs ont dev un décompilateur ghidra pour ce cpu afin de reverser le firmware.

On ne peut pas modifier le firmware wifi à cause d’un mécanisme de secureboot. Par contre en regardant le code d’iwlifi on constate que l’on peut observer l’exec des cpu de la carte wifi du fait d’un mapping pcie des registres dans la mémoire noyau. Les orateurs ont trouvé des comandes non documentés permettant de communiquer et d’obtenir un stack overflow sur la carte.

Sur une carte intel plus récente, le stack overflow est patché, mais il est possible de jouer sur une vuln toctou pour remplacer le firmware en cours de boot une fois les vérifications de signature effectuées.

Une fois les véifications contournées, les orateurs on pu charger un stub de debug sur la carte wifi et émuler le firmware sur l’host avec qemu. Ils ont pu se servir de ce mécanisme pour étudier le fonctionnement du firmware et de la carte. En étudiant le firmware ils ont découvert que la carte dispose d’une mmu et d’un accès dma permettant d’altérer les données du kernel depuis la carte.

Conf invitée

SSTIC: le bon la brute et le truand. SSTIC s’est créé après Misc en 2001. a l’époque il n’y avait pas de confs en sécurité informatique. Le SSTIC s’est construit sur un seul track, avec des actes papier pour ceux qui ont raté la conf, et un social event. Au final c’est toujours la même recette.

Safetynet est une solution de google pour vérifier l’intgrité d’un terminal android. Téléphone rooté, firmware cstom, etc… c’est pas les raisons qui manquent pour les dev de vouloir éviter d’exécuter une application sur un terminal non maitrisé: jeux vidéos, applications bancaires, etc…

Magisk est une solution pour rooter simplement un téléphone android, il disposait d’une fonction pour cacher le root du téléphone mais cette dernière a disparu suite a l’embauche du dev de magisk par Google.

Droidguard est un composant de safetynet qui est mis à jour toutes les 2 semaines, avec une 60aine de classes et une partie naive obfusquée contenant une vm. Le bytecode exécuté par la vm est exécuté à chaque attestation.

La vm est codée en c++ et l’obfuscation facilite pas la rétroconception. Une fois le bytecode et le fonctionnement de la vm compris, on peut comprendre le bytecode chargé dynamiquement et reverser les vérifications faites par droidguard.

Par exemple droidguard vérifie que frida nest pas chargé dans le téléphone sur la base des nom des libs chargés où le nom des apk.

An apple a day keeps the exploiter away

Mécanismes de sécurité iphone – en 2019 il fallait une rce sur le nav, sortir de la sandbox, trouver un bypass aprr, une vuln kernel ou une chaine de vulnsa pp, signer un truc daté bref… facile (;) )

L’exploitation dans le brower en jis repose sur des primitives de récupération d’adresse mémoire des objets, et la capacité à lire/écrire de la mémoire arbitrairement. Pour compliquer le travail de la création de faux objets js, apple a rajouté de l’aléa dans les structureID des objets js. Autre mitigation c’est la signature des instructions du JIT. Il faut donc une primitive de signature arbitraire de jit. Il n’existe pas de contournements connu. L’autre solution c’est de contourner PAC qui signe les pointeurs d’instruction ou de données. Le navigateur dispose d’une clefs de signature spécifique empêchant de calculer des signatures valides pour les autres process.

Bref c’est pas les mitigations qui manquent dans iOS niveau navigateur. La sortie de sandbox nécessite de pouvoir exécuter du code avec des signatures invalides. La sandbox a vue le nombre de services accessible passer de 120 à 4. Les pointeurs objective-c sont signés maintenant, et du coup il faut bypasser pac. On ne peut plus non plus manipuler un autre process depuis celui contrôlé par l’attaquant. A chaque jailbreak sorti, apple signe le pointeur de data associé pour tuer la chaîne d’exploitation.

Le tas du kernel a lui aussi été durci. Les zones mémoires sont alloués par type d’objet pour restreindre l’intéret d’un use after free. Les données maitrisées par l’utilisateur sont séparées des pointeurs kernels.

Bref l’exploitation iphone c’est très très très difficile.

Solution du challenge SSTIC

Rumps

1/ un outil d’absraction du backend sql pour metasploit qui permet d’améliorer le module d’injection sql dans metasploit. En gros il a refait sqlmap dans metasploit.

2/ format de mot de passe de la base SAP. il est constitué de deux usernames et un timestamp, un admin, un user, le mdp fait 16 caractères avec un tableau de bit du binaire, du coup ça se retourne bien. Les mdp sont dans la cli et s’ils sont trop courts il va lire les variables d’environement, etc…

3/ Dtrace c’est un outil de sun microsystem pour le debug et la trace de programme, ça marche out of the box sans reconfiguration du système en tapant dans le kernel et en user. Dtrace est capable de s’attacher a launchd ce qu’on ne peut pas faire normalement. C’est orienté analyse de perf en une ligne de commande, ou d’obtenir des stack-traces. DTrace peut service a tracer python ! Il embarque des infos de types et peut afficher les structures associés donc c’est trop bien.

4/ Collision md5 dans office. Une collision md5 c’est deux fichiers qui ont le même md5. Office cest des zip qui contiennent du xml. On peut pas faire des collision sur zip, mais on peut avoir une structure docx qui permet d’y adjoindre les octets pour produire la collision.

5/ Comment ne pas concevoir son portefeuille matériel. Un wallet hardware permet de se prémunir d’un attaquant qui a un accès physique au portefeuille. c’est bien de faire une chaine de boot trusté, mais si vous placez le code dans une flash à côté, rien ne permettra d’empecher un attaquant de démonter votre sécurité.

6/TTD-bindings: le time travel debugging permet de voyager sur une trace d’exécution. L’API est privée, et le format des traces est propriétaire. L’orateur a fait un outil pour y accéder et faire des diff de traces plus des bindings python.

7/Comment voyager dans le temps avec IDA: Les orateurs sur labase du précédent on créé un nouveau debugger ida pour charger les traces TTD. Exemple avec la cve rpc récente.

8/ Faryuk: automatisation de taches répétitives sur de larges surfaces d’attaques. L’appli fait du portsca, du screenshot et du gobuster sur un grand nombre de sites. Il peut appeller des conteneurs docker en plus.

9/ Shatter + ipfs: ipfs c’est du bittorrent avec une dht pour du partage de fichiers / stockage distribué. Le contenu est lié avec un hash donné. On peut donc choisir d’ajouter un fichier avec sha1, et shatter permetant de faire de la collision sha1. Bonus: ya une xss dans la gateway ipfs quand on utilise le mode identité.

10/Sandboxing: le principe c’est de limiter la casse si une app pourrie se fait poncer. La plupart des app ont besoin d’accès fichier, d’accès gpu, d’accès réseau etc… du coup ya plus grand chose a restreindre. On fait de la séparation de processus ce qui produit une putain d’usine à gaz. Il faut donc diminuer le cout d’entrée du sandboxing

11/Hexacon: 14 et 15 octobre

12/ Onyphe: un utilisateur pas bien intentionné. Un utilisateur cherche des wordpress pas complètement installés. Onyphe le bloque, il change ses recherches puis fini par contacter le support. Le support lui demande c’est quoi la requête, il confirme son identité. Le support lui demande en suite ce qu’il compte en faire et la plus de réponses.

13/Airgap-os: une distribution linux basé sur debian +MATE live et amnésique hors réseau avec des outils de sécurité.

14/Poetry: gestion de dépendances simplifiés. ça permet de regrouper les dépendances n co ainsi que les dépendances transitives. On peut aussi aller direct dans un shell avec les env gérés comme il faut. La conf peut aussi être embarquée dedans poetry. Le souci c’est que requirements.txt n’est pas un lockfile (???).

15/Et couic la smb. MS a écrit un papier pour expliquer comment exposer smb over quic… et du coup coment scanner internet avant SSTIC? Aioquick en python fait le job, on le combine avec impacket et asyncio et plein de threads pour la perf. Résultat 463 quick over http3 sur le net.

16/ Dumping firmwares for fun and learning: les spi sont partout , ça permet de récupérer plein de truc yen a dans les ddurs, les iot, les box adsl et du coup on peut s’en servir pour dumper les firmwares. Comment trouver des binaires à partire du spi ? la première c’est d’utiliser une pince magique achetée sur amazon. L’autre c’est de souder le spi sur un pcb custom. On dump en suite avec un raspi.

17/ Cybersecure dans le metaverse: Un event en virtuel avec un binaire à télécharger et installer sur votre pc. C’est codé avec unity, avec une api rest avec une IDOR. Après report de la vuln, ils ont mis un ratelimit sur l’api. La nouvelle vuln doit être rapportée par la plateforme de bugbounty. Tous les clients sont compilé en dur dans l’app.

18/Suricata: c’est pas qu’un ids, c’est aussi un langage de signatures peu expressif et limité. Du coup l’orateur a créé Suricata Language Server qui fourni de la coloration syntaxique et du checking dans la plupart des éditeurs de code.

19/Fuzzing 5G-nr sans radiologicielle. On peut tout injecter depuis un téléphone. La couche NAS présente dans le coeur de réseau des opérateurs est accessible depuis le téléphone. En 5G ya le high-level split qui permet de séparer les antennes des controleurs. On peut simuler un DU et taper direct dans le CU ce qui permet d’attaquer le protocole NAS.

20/Coffre fort IOT attaqué a l’analyseur logique. Le coffre dispose d’une commande de reset de mot de passe en uart qui permet de claquer un nouveau mot de passe et d’ouvrir le coffre. L’orateur a fait un fix avec une version OTP du coffre.

Fin des rump streamés et donc du liveblogging, à demain !