MFA sur IBM i 7.6



Authentification multi-facteurs (MFA) sur IBM i 7.6

Mise en place, administration et exploitation du MFA intégré IBM i

1. Pourquoi le MFA ?

1.1 Le problème du mot de passe seul

Un mot de passe peut être volé, deviné, ou contourné sans que l'utilisateur légitime ne s'en aperçoive. Les techniques d'attaque sont nombreuses et bien documentées :

Dans tous ces cas, si le MFA avait été activé, l'attaque aurait échoué même en possession du mot de passe valide.

1.2 Réglementations et cyber-assurances

L'activation du MFA est aujourd'hui requise ou fortement recommandée par de nombreux référentiels :

1.3 Historique des standards

Année RFC Algorithme Description Exemples
1997 RFC 2104 HMAC Hashed Message Authentication Code Base de tout
2000 RFC 2865 RADIUS Remote Authentication Dial-In User Service RSA, Entrust, Duo
2005 RFC 4226 HOTP HMAC-based one-time password (compteur) YubiKey, SafeNet
2011 RFC 6238 TOTP Time-based one-time password Google Auth, MS Auth, Authy
2012 RFC 6733 DIAMETER Successeur de RADIUS

IBM i 7.6 implémente RFC 6238 (TOTP). Tous ces algorithmes reposent sur un shared secret — aucune couverture réseau n'est nécessaire pour les tokens HOTP et TOTP.

1.4 Avant IBM i 7.6 : les solutions ISV

Avant IBM i 7.6, les solutions MFA disponibles sur IBM i étaient fournies par des éditeurs tiers : elles s'appuyaient principalement sur des exit points IBM i pour intercepter les authentifications.

Limites :

1.5 IBM i 7.6 : le MFA natif

IBM i 7.6 introduit un MFA intégré à l'OS, disponible sans achat de logiciel supplémentaire :


2. Architecture de la solution

2.1 Principe TOTP (RFC 6238)

L'utilisateur saisit ce code lors de sa connexion. IBM i calcule de son côté le même code et les compare.

2.2 Stockage et protection de la clé TOTP

La clé TOTP est stockée dans le profil utilisateur (*USRPRF), avec le même niveau de protection que le mot de passe.

Protection technique :

En pratique : même un profil avec *ALLOBJ ne peut pas lire directement la clé TOTP d'un autre utilisateur.

2.3 Principales applications d'authentification compatibles

Toute application implémentant RFC 6238 est compatible :

Application Plateforme
IBM Verify iOS, Android
Google Authenticator iOS, Android
Microsoft Authenticator iOS, Android
Okta Verify iOS, Android
Duo Mobile iOS, Android
Authy iOS, Android, Desktop
1Password Multi-plateforme
YubiKey (OATH) Token physique
Autres tokens OATH-TOTP Tokens physiques

2.4 Le Host Connection Server (HCS)

Un des défis du MFA sur IBM i est que certaines interfaces (ACS, Navigator, DCM) établissent plusieurs connexions successives pour une même session utilisateur. Sans HCS, chaque connexion demanderait un code TOTP.

Avant HCS : chaque connexion à un serveur hôte (Database Server, Print Server, File Server...) nécessite une authentification distincte → l'utilisateur devrait entrer son code TOTP à chaque fois.

Avec HCS : le client s'authentifie une seule fois (avec User + Password + TOTP) auprès du Host Connection Server. Ce serveur transmet ensuite les nouvelles connexions aux autres serveurs hôtes sans ré-authentification.

ACS, IBM Navigator for i et Digital Certificate Manager (DCM) ont été mis à jour pour utiliser HCS.


3. Concepts clés

3.1 Clé TOTP (secret partagé)

La clé TOTP est la valeur secrète commune au profil utilisateur IBM i et à l'application d'authentification.

Caractéristiques :

Exemple d'affichage après CHGTOTPKEY :

TOTP key . . . . . . . : PGWG KZ6T 7RRY AZLG PPDJ MHFN CRYQ MDAF Copy/paste version . . : PGWGKZ6T7RRYAZLGPPDJMHFNCRYQMDAF Recovery key . . . . . : 47BB3CD184DC10789972AD8B601E98ED 2520AD706D6D6697C905BD6EC6DA8BCA The TOTP key has been saved in your profile. It must also be entered into your TOTP generator client application, without the blanks. Save the recovery key for this TOTP key in a safe place. Enter=Continue F9=Check TOTP

3.2 Clé de récupération (Recovery Key)

La clé de récupération est générée en même temps que la clé TOTP. Elle permet de se connecter à la place d'un code TOTP généré, dans les cas où l'utilisateur n'a plus accès à son application d'authentification.

Comportement :

Situation Comportement
Première utilisation Démarre une fenêtre de 10 minutes
Pendant la fenêtre (10 min) Peut être utiliséeplusieurs fois (utile car ACS 5250 peut demander plusieurs authentifications pour atteindre la ligne de commande)
Après 10 minutes La clé de récupération estinvalidée
Si utilisée après 10 min La clé TOTP estsupprimée du profil

Procédure de secours si la fenêtre de 10 minutes est dépassée :

  1. L'utilisateur ne peut plus se connecter.
  2. L'administrateur supprime la méthode *TOTP du profil (CHGUSRPRF AUTHMTH(*NONE)).
  3. L'utilisateur se reconnecte et génère une nouvelle clé TOTP (CHGTOTPKEY).
  4. L'administrateur remet la méthode *TOTP sur le profil.

3.3 Intervalle optionnel TOTP (TOTPOPTITV)

L'intervalle optionnel est la durée (en minutes) pendant laquelle un code TOTP n'est pas redemandé après une première authentification réussie.

Mode absolu : *NONE

Mode intervalle : 1 à 720 minutes

Usage typique : configurer un intervalle pour les utilisateurs qui doivent utiliser des applications ne supportant pas le MFA (connexions SSH, ODBC, etc.) — ils s'authentifient une première fois via ACS ou Navigator, puis utilisent les autres interfaces durant l'intervalle sans saisir de code TOTP.

3.4 Attribut de sécurité "facteur de connexion additionnel"

Cet attribut est le commutateur système du MFA. Il contrôle le comportement de l'ensemble du système.

Ses 4 effets lorsqu'il est activé :

  1. Ajoute le champ "Facteur additionnel" sur les écrans de connexion.
  2. Active le parsing password:facteur_additionnel pour les profils ayant une méthode autre que *NONE.
  3. Active la vérification du TOTP pour les profils avec méthode *TOTP.
  4. Active la transmission du facteur à l'exit program QIBM_QSY_AUTH pour les profils avec méthode *REGFAC.

Important n°1 : activer cet attribut ne force pas les utilisateurs à utiliser le MFA. Seuls les profils configurés avec *TOTP ou *REGFAC seront contraints.

Important n°2 : cet attribut n'est pas sauvegardé ni restauré lors des sauvegardes système. Il doit être réactivé manuellement après une restauration complète du système. À intégrer dans la documentation de reprise d'activité.

Important n°3 : si l'attribut est désactivé ultérieurement, les profils ayant *TOTP ne seront plus contraints de saisir un TOTP. La clé TOTP et la méthode *TOTP restent sur les profils. La réactivation de l'attribut réactive immédiatement l'obligation.

3.5 Méthodes d'authentification

Chaque profil utilisateur dispose d'une liste de méthodes d'authentification. Les valeurs possibles sont :

Méthode Ce que l'utilisateur doit fournir Exit program appelé
*NONE User + Password seulement Non
*TOTP User + Password + Code TOTP Non
*REGFAC User + Password (+ facteur défini par le programme) Oui
*TOTP + *REGFAC User + Password + Code TOTP Oui (facteur transmis = vide)

*NONE est la valeur par défaut pour tous les profils, y compris ceux migrés depuis des releases antérieures.

3.6 Format password:facteur_additionnel

Pour les interfaces sans champ "facteur additionnel" (SSH, FTP, ODBC, certains clients tiers), l'utilisateur doit combiner son mot de passe et son code TOTP dans le champ mot de passe en utilisant : comme séparateur.

Exemple : Str0ngPassw#rd:358538

Règles importantes :


4. Prérequis système

4.1 Niveau de sécurité : QSECURITY

Le système doit être au niveau 40 ou supérieur.

DSPSECA /* Vérifier le niveau actuel */

Ou via Navigator

Si nécessaire :

CHGSYSVAL SYSVAL(QSECURITY) VALUE('40')

La plupart des systèmes en production sont déjà à 40 ou 50. Les systèmes encore à 20 ou 30 devront migrer avant d'activer le MFA. Voir la documentation IBM sur les impacts du changement de niveau de sécurité.

4.2 Niveau de mot de passe : QPWDLVL

Le système doit être au niveau de mot de passe 4.

DSPSYSVAL SYSVAL(QPWDLVL) /* Vérifier le niveau actuel */

Pour modifier :

CHGSYSVAL SYSVAL(QPWDLVL) VALUE('4')

Impacts à évaluer selon le niveau actuel :

Voir : Planning password level changes

Impacts détaillés du passage QPWDLVL 3 → 4

1. Nouvel algorithme de chiffrement des mots de passe

Le niveau 4 utilise un algorithme de chiffrement unidirectionnel différent des niveaux 2/3. C'est un changement de schéma cryptographique, pas seulement une règle de complexité.

2. Effet différé : IPL obligatoire

Le changement ne prend effet qu'au prochain IPL (redémarrage du système).

Pour voir les valeurs courante et en attente :

DSPSECA

3. Profils utilisateurs sans mot de passe niveau 4 → *NONE

Au passage en niveau 4, tous les mots de passe niveau 0/1/2/3 sont effacés. Si un profil n'a pas encore de mot de passe niveau 4 généré, son mot de passe devient *NONE (connexion impossible).

Avant l'IPL, identifier les profils concernés :

SELECT * FROM QSYS2.USER_INFO WHERE PASSWORD_LEVEL_4 <> 'YES'

ou via PRTUSRPRF TYPE(*PWDLVL) / DSPAUTUSR.

Par exemple sur notre machine en QPWDLVL3, la plupart des profils ont un mot de passe encodé en niveau 4, sauf les profils qui n'ont pas changé de mot de passe depuis longtemps (avant migration en 7.6 et la possibiité d'encoder les mots de passe en niveau 4):

Pour forcer la génération d'un mot de passe niveau 4 sur ces profils : utiliser CHGPWD CHGUSRPRF... PASSWORD(xxx) ou faire signer l'utilisateur en texte clair (sans substitution de mot de passe).

4. Clients utilisant la substitution de mot de passe (password substitution)

Tout client qui n'envoie pas le mot de passe en clair (il envoie un hash) doit supporter le nouveau schéma de substitution du niveau 4, sinon les connexions échoueront.

Clients IBM officiellement supportés pour QPWDLVL 4 :

⚠️ Les middlewares tiers (ex. IBM Toolbox for Java intégré dans une application tierce) doivent être vérifiés : s'ils embarquent une version ancienne du middleware, ils ne fonctionneront plus.

5. Sauvegarde préalable indispensable

SAVSECDTA /* ou SAVSYS */

Cela permettra de restaurer les mots de passe en cas de retour à un niveau inférieur.

6. Modification de QPWDLVL

CHGSYSVAL SYSVAL(QPWDLVL) VALUE(4)

Ou bien par Navigator :

Doit maintenant afficher :

Ou bien :

7. Synthèse : actions à mener avant l'IPL

Action Commande / méthode
Sauvegarder les données de sécurité SAVSECDTA
Identifier les profils sans mot de passe niveau 4 SELECT * FROM QSYS2.USER_INFO WHERE PASSWORD_LEVEL_4 <> 'YES'
Forcer la création du mot de passe niveau 4 CHGUSRPRF ou connexion en texte clair
Vérifier les clients tiers Audit des middlewares
Vérifier la valeur en attente DSPSECA

4.3 Écran de connexion personnalisé

Si votre organisation utilise un écran de connexion 5250 personnalisé, il doit être recréé à partir du format QDSIGNON3 pour inclure le champ "Facteur additionnel".

Cette modification doit être effectuée avant l'IPL qui active le MFA. Si l'IPL est effectué avant la mise à jour de l'écran, les utilisateurs verront le nouvel écran IBM par défaut (avec le champ facteur), mais pas votre écran personnalisé.

Voir : Signon screen display file

A ce stade, après IPL, la zone TOTP n'apparait pas encore à l'écran de connexion, tant que le facteur connexion additionnel n'est pas activé :

Le source est fourni ici QSYS/QAWTSSRC(QDSIGNON3). Vous pouvez le copier et l'éditer.

4.4 Synchronisation de l'heure : NTP

Le TOTP est basé sur l'heure UTC. L'heure du système IBM i et celle de l'application d'authentification doivent être synchronisées.

Une dérive mineure est tolérée par l'algorithme RFC 6238, mais l'activation du client NTP est fortement recommandée.

DSPSYSVAL QTIMADJ /* Vérifier la configuration de synchronisation */
Valeur QTIMADJ État
QIBM_OS400_NTP Client NTP actif ✓
QIBM_OS400_SNTP Client SNTP actif (moins précis)
*NONE Aucune synchronisation automatique ✗

NTP (Network Time Protocol) et SNTP (Simple Network Time Protocol) reposent sur le même protocole réseau (RFC 5905), mais diffèrent dans leur implémentation. NTP est capable de pondèrer des sources multiples, de calculer et corriger la dérive en ajustant progressivement l'horloge. SNTP fait des sauts dans la correction et est moins précis.

Configuration NTP via Navigator :

Réseau -> Serveurs -> Serveurs TCP/IP -> SNTP -> Propriétés

Démarrer avec TCP/IP :

Indiquer un ou plusieurs serveurs NTP :

Et les réglages de seuil :

Démarrer manuellement :

Vous retrouvez la configuration et les logs ici : /QIBM/UserData/OS400/TCPIP/NTP

Si vous avez plusieurs interfaces réseau, assurez vous que la communication se réalise sur une interface capable de communiquer avec le serveurNTP. Ajouter la directive suivante dans votre fichier /QIBM/USERDATA/OS400/TCPIP/NTP/ntp.conf :

interface listen 172.30.14.7

Puis arrêter et redéamrrer le client NTP.

4.5 TLS recommandé

Avant d'activer le MFA, il est fortement conseillé de s'assurer que les connexions aux host servers, Navigator for i et ACS sont chiffrées via TLS.

Sans TLS, le code TOTP (et le mot de passe) transitent en clair sur le réseau — ce qui réduit considérablement l'intérêt du MFA.

Via Access Client Solutions :

Ou Navigator

Pour remédier :

Installe l'autorité de certification das le "IBM i Magasin Web Trust" :

Que vous pouvez gèrer ensuite :

5. Déploiement — Actions administrateur système

5.1 Vue d'ensemble du processus

┌──────────────────────────────────────────────────────────────────┐ │ ÉTAPES ADMINISTRATEUR │ │ │ │ Étape 1 : Vérifier prérequis (QSECURITY, QPWDLVL) │ │ ↓ │ │ Étape 2 : Adapter l'écran de connexion si personnalisé │ │ ↓ │ │ Étape 3 : Activer l'attribut "facteur de connexion additionnel" │ │ ↓ │ │ Étape 4 : IPL du système │ │ ↓ │ │ Étape 5 (optionnel) : Configurer NTP │ │ ↓ │ │ Étape 6 (optionnel) : Enregistrer l'exit program *REGFAC │ └──────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────┐ │ ÉTAPES UTILISATEUR │ │ │ │ Étape 1 : Générer sa clé TOTP (CHGTOTPKEY) │ │ ↓ │ │ Étape 2 : Sauvegarder la clé de récupération │ │ ↓ │ │ Étape 3 : Configurer l'application + valider (CHKTOTP) │ │ Notifier l'administrateur │ └──────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────┐ │ ÉTAPES ADMINISTRATEUR / PROFILS │ │ │ │ Étape 1 : Vérifier que l'utilisateur a une clé TOTP │ │ Activer *TOTP / *REGFAC sur le profil │ │ Configurer l'intervalle optionnel │ └──────────────────────────────────────────────────────────────────┘

5.2 Vérifier l'état actuel

DSPSECA

Via IBM Navigator for i : Security > MFA Configuration > Security Configuration Information

5.3 Activer l'attribut de sécurité

CHGSECA ADLSGNFAC(*ENABLED)

Si la politique SST bloque la modification (message d'erreur) :

CHGSSTSECA CHGADLSGN(*YES)

Vous pouvez contrôler par DSPSSTSECA.

Puis relancer :

CHGSECA ADLSGNFAC(*ENABLED)

Via IBM Navigator for i :

  1. Security > MFA Configuration
  2. Cliquer sur Security Configuration Information
  3. Clic droit sur Additional Signon Factor → Change
  4. Sélectionner Enabled dans la liste déroulante
  5. Cliquer Save

Pour verrouiller l'attribut après configuration et empêcher toute modification ultérieure via OS (nécessite alors de passer par SST) :

CHGSSTSECA CHGADLSGN(*NO)

Avant IPL, vous devez avoir :

5.4 IPL obligatoire

Le passage de *DISABLED à *ENABLED nécessite un IPL pour prendre effet. Tant que l'IPL n'a pas eu lieu, la valeur est en attente (pending).

Après l'IPL, les écrans de connexion afficheront un champ "Facteur additionnel".

Après IPL, la saisie du facteur optionnel est disponible dans les différentes interfaces :

5.5 Enregistrer l'exit program *REGFAC (optionnel)

Si vous souhaitez utiliser la méthode *REGFAC pour appeler un programme de validation supplémentaire :

ADDEXITPGM EXITPNT(QIBM_QSY_AUTH) FORMAT(AUTH0100) PGMNBR(1) + PGM(ma_bib/mon_pgm_exit) REPLACE(*YES) CRTEXITPNT(*NO) + PGMDTA(*JOB *CALC 20)

Le délai d'attente par défaut de l'exit program est 10 secondes. Le paramètre PGMDTA(*JOB *CALC 20) le passe à 20 secondes dans l'exemple ci-dessus.

Via IBM Navigator for i :

  1. Security > MFA Configuration
  2. Cliquer sur Authentication Exit Point
  3. Clic droit sur QIBM_QSY_AUTH → Add Exit Program
  4. Renseigner le programme et la bibliothèque
  5. Cliquer OK

On en parle plus en détail ensuite.


6. Déploiement — Actions utilisateur

Rappel fondamental : l'administrateur ne peut pas générer la clé TOTP à la place de l'utilisateur. Chaque utilisateur doit générer la sienne en étant connecté avec son propre profil.

6.1 Génération de la clé TOTP via commande CL

L'utilisateur se connecte avec son profil, puis exécute :

CHGTOTPKEY TOTPKEY(*GEN)

L'écran affiche :

Avec F9 vous pouvez saisir le code TOTP renvoyé par votre application après configuration manuelle :

Une clé peut aussi être spécifiée manuellement (si elle provient d'un autre système) :

CHGTOTPKEY TOTPKEY('PGWGKZ6T7RRYAZLGPPDJMHFNCRYQMDAF')

6.2 Génération de la clé TOTP via IBM Navigator for i

Deux cas selon les droits de l'utilisateur :

Utilisateur sans accès à QIBM_NAV_ALL_FUNCTION :

Utilisateur avec QIBM_NAV_ALL_FUNCTION :

Procédure :

  1. Sélectionner Generate and save a MFA key and recovery key for this user profile
  2. Cliquer Next
  3. Sur le panneau Validate MFA Key and Save Recovery Key :
  4. Valider : saisir le mot de passe et le code généré par l'application → Validate
  5. Sauvegarder la clé de récupération dans un endroit sûr (coffre de mots de passe, document chiffré...)
  6. Notifier l'administrateur que la clé est configurée

Exemple pour un utilisateur avec QIBM_NAV_ALL_FUNCTION

L'affichage suivant présente votre clé à insérer dans votre application (ou via QRCode). N'oubliez pas la clé de récupèration à stocker dans un endroit sécurisé.

Une fois votre application configurée, saisissez votre mot de passe et code TOTP et valider pour confirmer la configuration.

Exemple pour un utilisateur sans QIBM_NAV_ALL_FUNCTION

6.3 Configuration de l'application d'authentification

L'application doit être configurée avec la clé TOTP :

Une fois configurée, l'application génère un nouveau code à 6 chiffres toutes les 30 secondes.

6.4 Validation de la configuration

CHKTOTP

L'utilisateur saisit le code généré par son application. Si la validation réussit, la configuration est correcte.

Depuis l'écran CHGTOTPKEY, appuyer sur F9=Check TOTP pour accéder directement à CHKTOTP.


7. Activation du MFA sur les profils utilisateur

7.1 Vérifier qu'un utilisateur a une clé TOTP

DSPUSRPRF USRPRF(NB)

Chercher le champ :

La clé TOTP existe . . . . . . . . . . . . : Oui Date de la dernière modification de la clé TOTP . . . . . . . . . . . . . . . . . . : 20/07/26 13:53:29 Méthodes d'authentification . . . . . . . : *NONE Intervalle facultatif du TOTP . . . . . . : *NONE

Pour voir tous les profils et leurs attributs MFA :

DSPAUTUSR

Appuyer F11 deux fois pour afficher la vue "Additional Authentication Info".

Exemple de sortie DSPAUTUSR :

Afficher les utilisateurs autorisés La Dernière Intervalle Minutes clé modif facultatif restantes Profil Profil Méth TOTP clé du TOTP utilisat groupe auth existe TOTP TOTP facultatif JL *NONE Non 0 0 JL2 *NONE Non 0 0 NB *NONE Oui 20/07/26 0 0 PLB *NONE Non 0 0

Via IBM Navigator for i :

7.2 Activer la méthode *TOTP

CHGUSRPRF USRPRF(NOM_PROFIL) AUTHMTH(*TOTP)

Via IBM Navigator for i :

Après quoi :

L'utilisateur doit désormais s'authentifier via mot de passe + TOTP (sinon CPF1120) :

7.3 Configurer l'intervalle optionnel

Si l'intervalle n'est pas configuré, vous pouvez obtenir ce genre de message :

Modifiez par :

CHGUSRPRF USRPRF(NOM_PROFIL) AUTHMTH(*TOTP) TOTPOPTITV(60)

Ou :

Valeur Comportement
*NONE Code TOTP requis à chaque authentification
1 à 720 Code TOTP requis uniquement après expiration de l'intervalle (minutes)

Via IBM Navigator for i :

Si l'utilisateur s'est déjà connecté avec TOTP et que le délai d'expiration n'est pas atteint : vous pouvez mettre n'importe quelle valeur dans le facteur optionnel, ce dernier ne semble pas testé.

7.4 Activer la méthode *REGFAC

CHGUSRPRF USRPRF(NOM_PROFIL) AUTHMTH(*REGFAC)

Via IBM Navigator for i :

7.5 Combiner *TOTP et *REGFAC

CHGUSRPRF USRPRF(NOM_PROFIL) AUTHMTH(*TOTP *REGFAC) TOTPOPTITV(*NONE)

7.6 Afficher les attributs MFA d'un profil

DSPUSRPRF USRPRF(NOM_PROFIL) DSPAUTUSR /* F11 deux fois pour la vue MFA */

Via Navigator for i :


8. Fonctions avancées

8.1 Exit point *REGFAC — QIBM_QSY_AUTH

Principe

La méthode *REGFAC permet d'appeler un programme exit personnalisé après chaque authentification réussie. Ce programme peut effectuer n'importe quelle vérification supplémentaire et retourner succès ou échec.

Cas d'usage typiques :

Note critique : si *REGFAC est la seule méthode et que le programme exit ne fait rien de particulier, cela ne constitue pas une protection MFA. Le programme est seul responsable de la vérification additionnelle.

Interfaces déclenchantes

L'exit program est appelé pour :

Pour les API Get Profile Handle : l'authentification a lieu lors de l'appel get. Si le programme exit valide la création du handle, les appels set ultérieurs avec ce handle sont autorisés.

Exemple de programme

Comportement

  1. Le programme doit être thread safe, il sera appelé dans des environnements multi-thread
  2. Si aucun programme n'est paramétré dans le point d'exit, le contrôle est ignoré (pas de blocage des authentifications)
  3. Le programme doit répondre dans un délai par défaut de 10 secondes. Vous pouvez modifier cette valeur :
ADDEXITPGM EXITPNT(QIBM_QSY_AUTH) FORMAT(AUTH0100) PGMNBR(1) PGM(USEREXIT/AUTHEXIT) REPLACE(*YES) CRTEXITPNT(*NO) PGMDTA(*JOB *CALC 20)
  1. Le programme doit respecter l'interface attendu par le point d'exit :
  2. le prgoramme peut s'éxecuter avec des profils différents en fonction de l'interface : profil utilisateur pour les interactifs, QUSER_NC pour QZBSCNNSRV (Host connection server), QSECOFR_NC pour QP0ZSPWT (PASE)...
  3. Vous ne maitrisez donc pas obligatoirement la liste de bibliothèque (dans ce genre de programme on peut se permettre de qualifier tous les éléments)

Notre programme est fait pour les tests, certains choix sont ici pour permettre de matérialiser des informations.

On voit que le programme est déclenché dans le travail :

Dans notre fichier de log :

Votre programme n'est appelé que si le profil est configuré pour *REGFAC.

Votre programme ne reçoit la valeur du facteur supplémentaire uniquement si *TOTP n'est pas configuré poru le profil.

Certains outils qui lancent plusieurs connexions (ie VSCode) : vous pouvez désactiver votre profil en 1 fois !

APIs avec paramètres d'information additionnelle

API originale API avec paramètres supplémentaires
QSYGETPH QSYGETPH avec tous les paramètres optionnels
QsyGetProfileHandle QsyGetProfileHandle2
QsyGetProfileHandleNoPwd QsyGetProfileHandleNoPwd2
QSYGENPT QSYGENPT avec tous les paramètres optionnels
QsyGenPrfTkn QsyGenPrfTkn2
QsyGenPrfTknE QsyGenPrfTknE2

8.2 QIBM_RUN_UNDER_USER_NO_AUTH — Protection contre l'usurpation de profil

Problème

Même avec le MFA activé, un utilisateur disposant de *ALLOBJ peut se substituer à un autre profil sans connaître son mot de passe, en utilisant des valeurs spéciales (*NOPWD, *NOPWDCHK) sur des APIs comme QSYGETPH ou la commande SBMJOB USER(xxx).

Cette possibilité contredit les principes du MFA : pourquoi forcer un utilisateur à s'authentifier avec TOTP si quelqu'un d'autre peut "devenir" cet utilisateur sans aucune authentification ?

Solution : QIBM_RUN_UNDER_USER_NO_AUTH

La fonction ID QIBM_RUN_UNDER_USER_NO_AUTH permet de protéger un profil contre cette usurpation.

Note importante : QIBM_RUN_UNDER_USER_NO_AUTH n'exige pas que le MFA soit activé sur le système. Tout profil interactif peut être protégé, indépendamment du MFA.

Configuration

Via commande CL :

CHGFCNUSG FCNID(QIBM_RUN_UNDER_USER_NO_AUTH) USER(NOM_PROFIL) USAGE(*DENIED)

Via IBM Navigator for i :

  1. Security > MFA Configuration > Users
  2. Effacer le filtre MFA Key Exists → Apply (pour voir tous les profils)
  3. Les profils déjà en *DENIED affichent DENIED dans la colonne Impersonation
  4. Clic droit sur le profil → Properties
  5. Cocher Restrict the ability to impersonate this user profile without first doing authentication
  6. Cliquer OK

Exemples

Exemple 1 — QSYGETPH avec NOPWD

Notre programme de test pour appel de l'API :

NB est en *ALLOWED sur QIBM_RUN_UNDER_USER_NO_AUTH. QSECOFR (avec *ALLOBJ) exécute :

CALL USURP Profile handle: █v¾%q█cNÃ ExceptionID: BytesAvailable: 0

→ OK

On passe maintenant NB en *DENIED sur QIBM_RUN_UNDER_USER_NO_AUTH.

CHGFCNUSG FCNID(QIBM_RUN_UNDER_USER_NO_AUTH) USER(NB) USAGE(*DENIED)

Puis :

CALL USURP Profile handle: ExceptionID: CPF4AF1 BytesAvailable: 26

→ Échec : CPF4AF1 — Opération non autorisée pour le profil utilisateur &1.

Le texte de 2nd niveau indique clairement :

Texte de message formaté Système: ITEST10 ID message . . . . . . . . . : CPF4AF1 Fichier de messages . . . . : QCPFMSG Bibliothèque . . . . . . . : QSYS Message . . . . : Opération non autorisée pour le profil utilisateur &1. Cause . . . . . : Le profil utilisateur &1 n'a pas accès à l'ID d'utilisation de fonction QIBM_RUN_UNDER_USER_NO_AUTH. Il ne peut pas être l'utilisateur cible pour l'opération demandée. Que faire . . . : Utilisez une autre opération qui ne nécessite pas d'accès à l'ID d'utilisation de fonction ou retirez le profil utilisateur de la liste d'utilisation de fonction QIBM_RUN_UNDER_USER_NO_AUTH, puis réessayez.

Exemple 2 — SBMJOB USER

NB est en *ALLOWED sur QIBM_RUN_UNDER_USER_NO_AUTH. QSECOFR exécute :

SBMJOB CMD(SNDMSG MSG('OK !') TOUSR(QSECOFR)) JOB(NOTIFNB) USER(NB)

→ OK

On passe maintenant NB en *DENIED sur QIBM_RUN_UNDER_USER_NO_AUTH.N

CHGFCNUSG FCNID(QIBM_RUN_UNDER_USER_NO_AUTH) USER(NB) USAGE(*DENIED)

QSECOFR exécute :

SBMJOB CMD(SNDMSG MSG('OK !') TOUSR(QSECOFR)) JOB(NOTIFNB) USER(NB) Opération non autorisée pour le profil utilisateur NB. Non autorisé au profil utilisateur NB. Erreurs dans la commande SBMJOB.

→ Échec : CPF4AF1 — Opération non autorisée pour le profil utilisateur &1.

Vrai également pour les tâches planifiées !

Profils IBM fournis _NC

IBM fournit des profils avec le suffixe _NC ("not changeable") : QSECOFR_NC, QPGMR_NC, QSYSOPR_NC, QUSER_NC.

Ces profils :

Les profils QSECOFR, QPGMR, QSYSOPR et QUSER sont désormais les vôtres.

8.3 Audit d'avertissement pour QIBM_RUN_UNDER_USER_NO_AUTH

Avant de mettre un profil en *DENIED, il est prudent d'activer l'audit d'avertissement pour vérifier quelles opérations seraient bloquées.

Étape 1 — Activer l'audit système

/* Vérifier que QAUDCTL contient *AUDLVL */ CHGSECAUD QAUDLVL(*AUTFAIL) /* ou via CHGSYSVAL SYSVAL(QAUDCTL) VALUE('*AUDLVL') */

Via Navigator : Security > Audit journal > Audit journal configuration → cocher Enable action auditing (*AUDLVL)

Étape 2 — Activer l'audit sur le profil cible

CHGUSRAUD USRPRF(NOM_PROFIL) AUDLVL(*AUTWARN)

Via Navigator : Users and Groups > Users → clic droit → Properties > Capabilities > Auditing → cocher Authorization failure warnings

Étape 3 — Analyser les enregistrements GR-F *USAGEWARN

Les enregistrements d'audit de type GR, sous-type F, avec *USAGEWARN dans le champ 1 sont générés lorsque le profil serait bloqué s'il était en *DENIED.

select * from table ( SYSTOOLS.AUDIT_JOURNAL_GR(STARTING_TIMESTAMP => current timestamp - 2 hours, USER_NAME => 'NB') ) gr where gr.entry_type = 'F'

Opérations journalisées dans le champ 3 :

Code Opération
SBMJOB Job soumis sous un autre profil utilisateur
GETPH API Get Profile Handle avec valeur spéciale de mot de passe
GENPT API Generate Profile Token avec valeur spéciale
SETUID API Set User ID avec le profil comme cible
NFS Accès Network File System mappé vers ce profil

Via Navigator avec la gestion des magasins de données (journal d'audit) :

Observer ces enregistrements pendant quelques jours/semaines avant de basculer en *DENIED. Si des opérations légitimes apparaissent, les corriger (utiliser les profils _NC, adapter les applications) avant d'activer la restriction.

8.4 Tokens de profil améliorés (Enhanced Profile Tokens)

Un token de profil peut être transmis à d'autres processus pour qu'ils exécutent des actions au nom de l'utilisateur authentifié. Les tokens améliorés ajoutent une couche de protection.

Paramètres additionnels

Ces valeurs ne peuvent pas être extraites du token, mais sont transmises à QIBM_QSY_AUTH avant la génération si le profil a *REGFAC.

Les tokens améliorés protègent contre les attaques de replay et pre-play.

APIs pour les tokens améliorés

API originale API avec paramètres améliorés
QSYGENPT QSYGENPT avec tous les paramètres optionnels
QsyGenPrfTkn QsyGenPrfTkn2
QsyGenPrfTknE QsyGenPrfTknE2
QSYGENFT QSYGENFT avec les mêmes valeurs que le token original
QsyGenPrfTknFromPrfTkn QsyGenPrfTknFromPrfTkn2
QSYSETPT QSYSETPT avec les mêmes valeurs que la génération
QsySetToPrfTkn QsySetToPrfTkn2

La génération d'un token de profil de type multiple-use, regenerable nécessite des valeurs de token amélioré dans certaines configurations. Voir l'API QSYGENPT pour les détails.

8.5 Mirroring de la clé TOTP entre systèmes

Dans les environnements multi-systèmes (HA, DR, développement/production), il peut être nécessaire de répliquer la clé TOTP d'un utilisateur d'un système à un autre pour qu'il puisse utiliser la même clé TOTP partout.

APIs disponibles

Retrieve TOTP Key (QSYRTVK)

/* Documentation : */ /* https://www.ibm.com/docs/api/v1/content/ssw_ibm_i_76/apis/qsyrtvk.htm */

Set TOTP Key (QSYSETK)

/* Documentation : */ /* https://www.ibm.com/docs/api/v1/content/ssw_ibm_i_76/apis/qsysetk.htm */

Check TOTP Key (QSYCHKK) — PTF 5770SS1 V7R6M0 SJ05455

/* Documentation : */ /* https://www.ibm.com/docs/api/v1/content/ssw_ibm_i_76/apis/qsychkk.htm */

9. Combinaisons de méthodes — niveaux de sécurité

Il existe 12 combinaisons courantes selon la méthode d'authentification, l'intervalle optionnel et l'accès à QIBM_RUN_UNDER_USER_NO_AUTH.

9.1 Accès et impacts de QIBM_RUN_UNDER_USER_NO_AUTH

QIBM_RUN_UNDER_USER_NO_AUTH *ALLOWED :Les tentatives d'exécution sous ces profils via une interface ne nécessitant pas de mot de passe (SBMJOB USER=xxx, QSYGETPH avec NOPWD...) sont autorisées.

QIBM_RUN_UNDER_USER_NO_AUTH *DENIED : Les tentatives d'exécution sous ces profils sans authentification préalable échouent avec CPF4AF1.

Profil Méthode Intervalle TOTP QIBM_RUN_UNDER_USER_NO_AUTH Description
Habib *NONE *NONE *ALLOWED Aucun TOTP requis. Configuration par défaut de tous les profils (migrés ou nouveaux).
David *NONE *NONE *DENIED Aucun TOTP. Toute tentative d'usurpation du profil (Kerberos, SSH key, SBMJOB USER=DAVID sans password, QSYGETPH avec *NOPWD) échoue.
Nicolas *TOTP *NONE *ALLOWED TOTP requis à chaque authentification par mot de passe.
Laurent *TOTP *NONE *DENIED TOTP requis à chaque authentification. Usurpation impossible.
Pierre-Louis *TOTP 10 min *ALLOWED TOTP requis lors de la première authentification. Pendant les 10 min suivantes, seul le mot de passe est requis. Un TOTP valide fourni pendant l'intervalle réinitialise le compteur à 10 min.
Habib *TOTP 10 min *DENIED TOTP requis initialement, puis intervalle de 10 min. Usurpation impossible.
Nathanael *REGFAC N/A *ALLOWED Aucun TOTP. L'exit program QIBM_QSY_AUTH est appelé après chaque authentification réussie. C'est le programme qui décide du facteur additionnel.
Julien *REGFAC N/A *DENIED Exit program appelé. Kerberos/SSH key échouent. Usurpation impossible.
Robert *TOTP + *REGFAC *NONE *ALLOWED TOTP requis à chaque authentification. L'exit program est également appelé. Le facteur transmis au programme est vide.
Fadhila ¹ *TOTP + *REGFAC *NONE *DENIED Configuration la plus sécurisée possible si le programme exit demande une authentification hors bande. TOTP + exit program + anti-usurpation.
Iliana *TOTP + *REGFAC 5 min *ALLOWED TOTP requis lors de la première authentification, puis intervalle de 20 min. L'exit program est appelé à chaque authentification.
Damien *TOTP + *REGFAC 5 min *DENIED TOTP + exit program + anti-usurpation, avec intervalle de 5 min.

¹ Fadhila représente le profil le plus sécurisé possible, sous réserve que l'exit program exige une authentification hors bande (push notification + biométrie par exemple).

9.2 Recommandations


10. Compatibilité applicative

10.1 Applications compatibles sans modification

Ces applications utilisent le Host Connection Server et gèrent nativement le MFA :

Application Comportement
IBM i Access Client Solutions (ACS) Champ "Additional factor" affiché. Connexion via HCS : une seule authentification TOTP.
IBM Navigator for i Idem ACS.
Digital Certificate Manager (DCM) Idem ACS.

Ces trois applications utilisent la substitution de mot de passe (hash unidirectionnel) : le format password:TOTP ne fonctionne pas. Il faut impérativement utiliser le champ "Additional factor".

10.2 Applications nécessitant des modifications

IBM Toolbox for Java

ACS en batch / commandes directes sur IBM i

Si ACS est exécuté directement sur IBM i (interactivement ou en batch) et que le job courant a *TOTP, une erreur d'authentification se produit dans ces conditions :

→ En job interactif : ACS invite l'utilisateur à saisir ses credentials + TOTP. → En job batch : le job reste en attente indéfiniment.

10.3 Applications avec mot de passe mis en cache

Ces applications stockent le mot de passe et s'authentifient silencieusement en arrière-plan. Elles échouent avec le MFA en mode absolu (TOTPOPTITV(*NONE)) car le code TOTP a expiré.

Stratégie recommandée : configurer un intervalle optionnel suffisant pour couvrir la durée d'utilisation de l'application.

CHGUSRPRF USRPRF(NOM_PROFIL) TOTPOPTITV(60)

L'utilisateur s'authentifie une première fois (via ACS ou Navigator), puis l'application peut fonctionner pendant 60 minutes.

10.4 Format password:TOTP — Interfaces sans champ dédié

Pour les interfaces qui n'ont pas de champ "Additional factor" :

Interface Méthode
SSH (Putty, OpenSSH...) Saisir monmotdepasse:123456 dans le champ passwordSi vous utilisez une connexion par fichier de clé : pas de TOTP demandé
FTP Idem
ODBC (si non géré via ACS) Idem
Clients 5250 sans champ facteur Idem

Éduquer les utilisateurs : l'invite SSH affiche simplement "password" sans indication du format attendu. Les utilisateurs doivent être informés qu'ils doivent ajouter : + code TOTP.

Pour FTP par exemple, voici un script .bat permettant de tester :

On obtient dans ftp.log :

Connect‚ … itest10.gaia.lan. 220-QTCP at ITEST10.GAIA.LAN. 220 Connection will close if idle more than 5 minutes. 501 OPTS unsuccessful; specified subcommand not recognized. 331 Enter password. 530 Log on attempt by user NB rejected. 221 QUIT subcommand received.

Avec l'ajout du TOTP :

Et la log indique :

Connect‚ … itest10.gaia.lan. 220-QTCP at ITEST10.GAIA.LAN. 220 Connection will close if idle more than 5 minutes. 501 OPTS unsuccessful; specified subcommand not recognized. 331 Enter password. 230 NB logged on. 200 Representation type is ASCII nonprint. 250-NAMEFMT set to 1. 250 "/home/NB" is current directory. 200 PORT subcommand request successful. 150 Retrieving file /home/NB/curl.log 226 File transfer completed successfully. ftp : 2756 octets reçus en 0. 00 secondes … 2756.00 Ko/s. 221 QUIT subcommand received.

Cas de Code for IBM i (Visual Studio Code)

Si vous activez MFA sur votre profil développeur, il est conseillé de se connecter avec une clé SSH.

Lors de nos tests, Code for IBM i a refusé notre clé au format PPK, fonctionnelle sur le même système avec d'autres outils.

La connexion a réussi avec un export de la clé privée au format openSSH vie PuttyGen :

Code for IBM i tente ensuite de se connecter à plusieurs services. Vous pouvez donc avoir ce genre de message :

C'est dû au règlage d'intervalle pour le profil :

Mettez une valeur raisonnable.

Avant de pouvoir se connecter à Code for IBM i : se connecter via une interface qui supporte le TOTP de façon explicite (telnet par exemple), afin que l'authentification soit mise en cache pour l'intervalle configuré.

10.5 Applications incompatibles ou nécessitant des ajustements

Ces applications ne fonctionnent pas si l'intervalle optionnel de l'utilisateur a expiré :

Interfaces définitivement incompatibles :

Fix Central :


11. MFA SST/DST

11.1 Présentation

System Service Tools (SST) et Dedicated Service Tools (DST) disposent d'une implémentation MFA indépendante du MFA OS.

Points clés :

Ne nécessite aucun accès internet.

L'horloge doit être synchronisée.

11.2 Différences avec le MFA OS

Caractéristique MFA OS MFA SST
Intervalle optionnel TOTP Configurable (1-720 min ou*NONE) Non disponible — toujours requis
Méthodes disponibles *TOTP, *REGFAC *TOTP uniquement
Exit program Oui (QIBM_QSY_AUTH) Non
Lien avec profil OS Non Non (indépendant)

11.3 Nouveaux attributs SST

Un profil SST dispose de ces nouveaux attributs :

11.4 Commandes SST

Commande Description
DSPSSTSECA Afficher les attributs de sécurité SST
CHGSSTSECA Modifier les attributs de sécurité SST
DSPSSTUSR Afficher les attributs d'un utilisateur SST
CRTSSTUSR Créer un utilisateur SST
CHGSSTUSR Modifier un utilisateur SST (dont la méthode d'authentification)
DLTSSTUSR Supprimer un utilisateur SST

11.5 Procédure d'activation SST

  1. L'administrateur SST active le TOTP sur la connexion SST. STRSST puis option 8. Work with Service Tools Server Security and Devices puis option 5. Work with service tools security options

    A partir de maintenant :

  2. L'utilisateur SST génère sa clé TOTP.

    1. Soit par la commande CHGSSTKEY

      Affiche :

    2. Soit depuis les menus SST

  3. Il configure son application d'authentification.

  4. Il sauvegarde la clé de récupération.

  5. SST force la vérification du facteur TOTP avant de sauvegarder la clé.

  6. L'administrateur SST active le TOTP sur le profil SST de l'utilisateur.

    Soit depuis les menus SST :

    Soit par la commande CHGSSTUSR :

  7. À partir de ce moment, le code TOTP est requis à chaque authentification SST.


12. Référence rapide

12.1 Commandes CL

Commande Paramètres clés Description
DSPSECA Afficher les attributs de sécurité (QSECURITY, QPWDLVL, Additional sign-on factor)
CHGSECA ADLSGNFAC(*ENABLED/*DISABLED) Activer/désactiver le facteur de connexion additionnel
CHGSSTSECA CHGADLSGN(*YES/*NO) Autoriser/interdire la modification de l'attribut depuis l'OS
DSPSYSVAL SYSVAL(QPWDLVL) Afficher le niveau de mot de passe
CHGSYSVAL SYSVAL(QPWDLVL) VALUE('4') Modifier le niveau de mot de passe
DSPSYSVAL SYSVAL(QSECURITY) Afficher le niveau de sécurité
CHGSYSVAL SYSVAL(QSECURITY) VALUE('40') Modifier le niveau de sécurité
STRTCPSVR SERVER(*NTP) Démarrer le client NTP
DSPSYSVAL SYSVAL(QTIMADJ) Vérifier la synchronisation de l'heure
CHGTOTPKEY TOTPKEY(*GEN) Générer et stocker une clé TOTP (exécuté par l'utilisateur)
CHKTOTP Valider le fonctionnement de la clé TOTP (exécuté par l'utilisateur)
DSPUSRPRF USRPRF(xxx) Afficher le profil utilisateur et ses attributs MFA
DSPAUTUSR (F11 deux fois) Lister tous les profils avec attributs MFA
CHGUSRPRF USRPRF(xxx) AUTHMTH(*TOTP) TOTPOPTITV(60) Activer *TOTP avec intervalle optionnel
CHGUSRPRF USRPRF(xxx) AUTHMTH(*REGFAC) Activer la méthode exit program
CHGUSRPRF USRPRF(xxx) AUTHMTH(*TOTP *REGFAC) Combiner *TOTP et *REGFAC
CHGFCNUSG FCNID(QIBM_RUN_UNDER_USER_NO_AUTH) USER(xxx) USAGE(*DENIED) Protéger un profil contre l'usurpation
CHGUSRAUD USRPRF(xxx) AUDLVL(*AUTWARN) Activer l'audit d'avertissement sur un profil
ADDEXITPGM EXITPNT(QIBM_QSY_AUTH) FORMAT(AUTH0100) ... Enregistrer l'exit program *REGFAC
DSPSSTSECA Afficher les attributs de sécurité SST
CHGSSTSECA Modifier les attributs de sécurité SST
CHGSSTUSR Modifier un utilisateur SST (dont TOTP)

12.2 APIs TOTP

API Autorisation requise Description
QSYRTVK *ALLOBJ + *SECADM Récupérer la clé TOTP (protégée) d'un profil
QSYSETK *ALLOBJ + *SECADM Définir la clé TOTP d'un profil (mirroring)
QSYCHKK — Vérifier si une clé TOTP correspond (mirroring) — PTF SJ05455
QSYGETPH — Get Profile Handle (avec paramètre facteur additionnel)
QsyGetProfileHandle2 — Version améliorée de QsyGetProfileHandle
QSYGENPT — Generate Profile Token (avec paramètres améliorés)
QsyGenPrfTkn2 — Version améliorée de QsyGenPrfTkn

12.3 Checklist déploiement — Administrateur système

12.4 Checklist déploiement — Utilisateur

12.5 Checklist activation — Administrateur par profil

12.6 Références documentaires