SecurityInsider
Le blog des experts sécurité Wavestone

Introduction à la sécurité des Mainframes – Partie 3 : outils opérationnels d’audit



Ce focus fait suite à la série d’articles qui s’intéresse aux tests d’intrusion sur z/OS. Nous aborderons cette fois-ci l’aspect opérationnel du sujet : par où commencer ? quels outils utiliser ? quelle démarche suivre ?

Une maquette d’entraînement

Comme l’on peut s’en douter, une licence Mainframe coûte cher, très cher et contrairement à un serveur acheté à DELL, IBM garde la propriété de leur Mainframe et ne fait que le louer au client. Disposer d’une maquette à des fins de PoC ou de test peut alors être assez compliqué pour un consultant souhaitant monter en compétence sur le sujet.
Néanmoins, certaines solutions peuvent être envisagées afin d’adresser cette problématique :
  • La plateforme d’échange d’outils www.efglobe.com :
    Le projet DEZHI met gratuitement à disposition des développeurs des systèmes propriétaires - dont z/OS- afin de les aider à monter en compétence sur plusieurs sujets. Il est ainsi possible de créer un compte RACF et de se connecter à distance sur le mainframe via un émulateur 3270 (Quick3270 sous Windows ou x3270 sous UNIX)
    Le compte récupéré ne dispose pas de privilèges élevés et permet donc une manipulation limitée des paramètres systèmes, mais permet d’avoir une première prise en main.
    Note : L’utilisation de cette plateforme est soumise à des règles très strictes que nous vous invitons à consulter en amont de toute utilisation.
  • IBM System Z Remote Program
    IBM offre la possibilité d’accéder à un Mainframe à des fins de validation ou test de produits moyennant un abonnement mensuel d’environ 500€ (plus d’informations).
    L’avantage est que l’utilisateur dispose des plus hauts privilèges sur la maquette et peut explorer les tréfonds du système. L’inconvénient est que la procédure d’inscription est lourde et chronophage.
  • Un mainframe personnel :
    Hercules est un émulateur Open source System370, System390 et z/OS et permet ainsi de virtualiser l’architecture matérielle Mainframe sur un poste personnel classique Windows ou Unix.
    La procédure d’installation est simple à suivre et est détaillée dans le lien suivant.
    Note : Il est nécessaire de disposer d’une licence Mainframe valide avant de recourir à cette solution


Reconnaissance 

L’outil classique de reconnaissance Nmap demeure l’outil de choix pour identifier les services en écoute sur un système. À partir de la version 7, Nmap incorpore un jeu de signatures adéquat permettant d’identifier correctement le système d’exploitation z/OS.
Outre les ports TCP/UDP, un Mainframe peut publier des applications via une interface VTAM : il s’agit du pilote logiciel du protocole réseau SNA utilisé pour communiquer entre périphériques Mainframes. Un utilisateur peut ainsi accéder via TCP/IP à VTAM afin de se connecter par la suite sur une application présente sur un autre Mainframe accessible uniquement en SNA.
Afin d’identifier de telles applications, il est nécessaire de prendre une capture d’écran de l’interface visuelle VTAM, souvent accessible en Telnet (TN3270 plus précisément) sur les ports 23, 1023, 5023, 992, etc.


À titre d’exemple l’interface VTAM ci-contre expose les applications TSO, CICS, etc.
Le script Nmap tn3270-screen.nse permet de prendre une capture de l’interface d’accueil renvoyée par les services communiquant en TN3270. Ceci permet de compléter la vue TCP/UDP par les éventuels services exposés uniquement sur SNA.

Certaines interfaces VTAM sont moins friendly et ne divulguent pas la liste des services accessibles. L’outil mainframe_brute.py de Dominic White (@singe) permet d’effectuer une attaque par force brute sur les ID des applications.
Par ailleurs, plusieurs scripts Nmap permettant d’énumérer les APPLID de multiples composants (VTAM, CICS, etc.) sont présents sur Github.

TSO 

TSO est la console interactive qui permet d’exécuter des commandes sur z/OS. Pour cela, il est nécessaire de disposer d’un couple login/mot de passe. Le login peut être énuméré à cause de la verbosité du message d’erreur renvoyé si le compte est invalide.
Les outils Psikotic et Phatso par Phill Young (@mainframed767), permettent de mener ce type d’attaques.


Le mot de passe quant à lui est à tester plus prudemment car souvent une politique de blocage de compte peut être en place. Un bruteforce horizontal (login=mot de passe) peut donc être l’approche la plus adaptée.
 

Interception TN3270 

Outre le bruteforce, il est possible d’effectuer une interception réseau afin de récupérer le contenu du trafic TSO. Celui-ci se base en effet sur le protocole TN3270 (Telnet à la sauce IBM) qui transite en clair sur le réseau.
L’outil Ettercap prend en charge ce protocole ainsi que l’encodage EBCDIC employé.
Dans le cas d’une communication chiffrée (SSL/TLS), l’outil Set’N’3270 permet d’effectuer une attaque Man-in-The-Middle en présentant un certificat auto-signé.

FTP


Le service FTP permet d’exécuter du JCL (langage de développement sur Mainframe) sur z/OS et fournit ainsi une porte d’entrée intéressante dans le cas d’un filtrage réseau très strict au niveau de TN3270.
L’idée est donc de :
  • déposer un script Netcat sur l’environnement USS (Unix) via FTP
  • déposer ensuite du code JCL et l’exécuter via la commande site filetype=JLC sur FTP
  • Le script JCL exécute Netcat sur USS (Unix) qui initie un reverse-shell vers l’attaquant
Afin d’épargner à nombre de personnes d’apprendre les langages JCL et REXX, Phill Young a développé un outil qui automatise toute cette procédure : MainTP
Bonus : le code JCL déposé contient l’exploit de la CVE-2012-5955 qui permet d’élever localement ses privilèges. Cet exploit a été utilisé lors de la compromission du Mainframe de Logica en Suède. 
 

Application sur TN3270

Contrairement aux applications Web (que l’on retrouve également sur Mainframe), une application green terminal peut sembler plus complexe à tester au premier abord. Pourtant ce type d’application peut être sujet aux mêmes vulnérabilités classiques référencées par l’OWASP:
  • Vulnérabilités de type Injection :
    • SQLi si l’application communique avec une base de données DB2 sans traiter correctement les paramètres;
    • BufferOverflow si l’application est codée en C/C++ et utilise des fonctions « dangereuses » ;
    • Injection de commandes : TSO, Bash, etc.
  • Vulnérabilités au niveau de l’authentification :
    • Contournement de l’authentification
    • Accès anonyme aux ressources
  • Cloisonnement inter-utilisateurs :
    • Accès aux données d’un utilisateur B en modifiant un identifiant dans un paramètre
    • Rejeu de requêtes d’exécution de virement
    • Etc.
Afin de contourner les limitations côté client qui peuvent par exemple empêcher l’utilisateur d’injecter des caractères spéciaux, il est nécessaire d’utiliser un proxy TN3270 : BIRP.
Cet outil permet ainsi de manipuler les attributs des champs TN3270 et contourner les protections côté client, à la manière d’un proxy Web qui désactive les attributs HTML et CSS.
L’enjeu pour un consultant est donc de vérifier la présence de contrôles adéquats côté serveur en « jouant » avec les différents paramètres présents, à l’exemple d’un test d’intrusion Web classique.

Cassage de mots de passe

Les mots de passe des comptes z/OS sont stockés dans la base RACF. Le chemin d’accès à la base peut être récupéré via la commande RVARY LIST sur TSO.
L’extraction des hashs des mots de passe s’effectue via du « carving » avec les outils :
  • racf2john : utilitaire intégré à John Bleeding Jumbo ;
  • racfsnow : utilitaire complet d’extraction de mots de passe RACF.
Il est à noter que cette technique renvoie également l’historique des mots de passe et peut conduire à des faux positifs au niveau du cassage. Il est alors nécessaire de compléter cette procédure par l’obtention du résultat de l’outil IRRDBU00 sur TSO.
Les mots de passe sont stockés sous forme hashée à l’aide de l’algorithme DES de la manière suivante :


Le login de l’utilisateur fait office de sel dans cette configuration. Il est donc possible de construire une rainbow table des comptes par défaut et souvent présents (IBMUSER, SYSOPR, etc.) afin de faciliter le cassage.
Les hashs RACF sont pris en charge par hashcat et JohnTheRipper Bleeding Jumbo entre autres.



Ayoub ELAASSAL

Aucun commentaire:

Enregistrer un commentaire