IREX - Tests de sécurité à réaliser sur la plateforme ACRA selon les référentiels open source

Tests de sécurité à réaliser sur la plateforme ACRA selon les référentiels open source .sommaire { bo

 · 7 min read

Tests de sécurité à réaliser sur la plateforme ACRA selon les référentiels open source

  1. Introduction

  2. L'article précédent a sélectionné les référentiels open source qui servent de critères d'évaluation pour ACRA. Un référentiel ne protège pourtant rien tant que ses exigences ne sont pas vérifiées : il faut des tests, avec des moyens précis et des preuves. Cet article indique, pour chaque référentiel retenu, quels tests réaliser, sur quels composants, avec quels outils et quelle preuve conserver.

    ACRA est une plateforme de surveillance réseau : sa compromission donnerait à un attaquant une vue complète de l'infrastructure surveillée. Les tests portent uniquement sur les composants déployés (Nginx, Keycloak, Grafana, Prometheus, Zabbix, Thanos, SeaweedFS, Jenkins) et sur les deux serveurs qui les hébergent. Les composants prévus mais non déployés seront ajoutés après leur mise en service.

    L'article présente d'abord la démarche de test, puis les tests regroupés par référentiel, les outils utilisés, une synthèse et les limites.

  3. Démarche de test

    1. Périmètre et conditions

    2. Les tests suivent le périmètre fixé lors du cadrage. Le tableau suivant en rappelle le contenu et les conditions d'exécution.

      ÉlémentContenu
      Dans le périmètre Nginx (frontal et internes), Keycloak, Grafana, Prometheus, Zabbix, Thanos, SeaweedFS, Jenkins et son pipeline, serveur d'applications (Debian), serveur d'automatisation, flux HTTP entre composants, quatre profils utilisateurs
      Hors périmètre Composants non déployés, ingénierie sociale, scan sans fil, déni de service, destruction de données
      Environnement Préproduction, après sauvegarde
      Comptes de test Un par profil : profane, administrateur système, administrateur sécurité, administrateur réseau
      Nature des tests Non destructifs
      Autorisation Périmètre validé par écrit avant le premier test
    3. Cycle de test

    4. Le cycle suit les quatre phases du guide NIST SP 800-115, appliquées à ACRA comme suit.

      PhaseObjectifActivités pour ACRA
      1. PlanificationFixer règles et objectifsPérimètre, comptes de test, niveau ASVS
      2. DécouverteIdentifier cibles et vulnérabilités potentiellesPorts et services, configurations, scans
      3. AttaqueVérifier les vulnérabilités en les exploitantTests de cette partie 3, scénarios combinés
      4. RapportConsigner constats et correctionsEn parallèle des autres phases, avec les preuves
    5. Format d'un test

    6. Chaque test est consigné avec six champs : Réf. (identifiant dans le référentiel), Contrôle, Description, Vérifications à effectuer, Moyen de vérification et Preuves. Un test donne un résultat parmi : conforme, non conforme, partiellement conforme, non applicable.

    7. Niveau de vérification ASVS

    8. L'ASVS 5.0.0 définit trois niveaux. Le tableau suivant compte les exigences des neuf chapitres retenus (V3, V4, V6, V7, V8, V9, V10, V12, V13), d'après le fichier officiel.

      NiveauExigences propres au niveauCumul
      14646
      2101147
      355202

      Le niveau 2 : il est usuel pour une plateforme avec authentification, et il ajoute des exigences directement utiles à ACRA, comme V12.3.3 (chiffrement entre services internes) et V13.4.5 (endpoints de supervision non exposés).

  4. Tests par référentiel

    1. OWASP ASVS 5.0 : les exigences à contrôler

    2. L'ASVS fournit les exigences. Les tests ci-dessous en reprennent une sélection : 26 exigences de niveau 1 et 7 de niveau 2. Les autres exigences des neuf chapitres suivent la même procédure, à partir du fichier officiel. Le premier tableau couvre le point d'entrée et les communications.

      Tableau 1 : Nginx, communications et configuration (V12, V13)

      Réf.ContrôleDescriptionVérifications à effectuerMoyen de vérificationPreuves
      V12.1.1 (N1)Versions TLSSeules les versions de TLS recommandées (1.2 et 1.3) sont activéesProtocoles acceptés par le Nginx frontal (port 4443)testssl.shRapport de l'outil
      V12.2.1 (N1)TLS pour les accès externesTLS pour toute connexion vers un service HTTP exposé, sans repli en clairTentative de connexion en HTTP, redirectioncurl, testssl.shRequêtes et réponses
      V12.2.2 (N1)Certificat de confiance publiqueLes services exposés présentent un certificat de confiance publique (si exposition publique)Émetteur et chaîne du certificattestssl.shDétail du certificat
      V12.1.2 (N2)Suites de chiffrementSeules les suites recommandées sont activées, les plus fortes en prioritéListe et ordre des suitestestssl.shRapport de l'outil
      V12.3.1 (N2)Chiffrement de toutes les connexionsProtocole chiffré sur toutes les connexions entrantes et sortantes, y compris supervision et gestionChiffrement des flux du Nginx frontal vers les servicesCapture réseauCapture
      V12.3.3 (N2)Chiffrement entre services internesChiffrement de transport sur toute connectivité entre services internesFlux HTTP vers Keycloak (8080), Grafana (8089), Prometheus (9090), Zabbix (8080), Thanos et SeaweedFS (8089)Capture réseauCapture montrant le trafic en clair ou chiffré
      V13.4.1 (N1)Métadonnées de contrôle de sourceAucun dossier .git ou .svn déployéRequêtes sur ces cheminscurl, ZAPRéponses
      V13.4.2 (N2)Modes de débogageDésactivés en productionParamètres de débogage de chaque composantRevue des configurationsExtraits de configuration
      V13.4.3 (N2)Listage de répertoiresNon exposéRequêtes sur des répertoiresZAP, curlRéponses
      V13.4.4 (N2)Méthode HTTP TRACENon prise en chargeRequête TRACE sur chaque NginxcurlRéponse
      V13.4.5 (N2)Endpoints de supervision et de documentationNon exposés sauf nécessitéAccès aux interfaces et aux métriques depuis l'extérieur et depuis chaque profilcurl, ZAPRéponses, matrice d'accès

      Le deuxième tableau concerne Keycloak, qui gère l'authentification, les sessions et les jetons. Les exigences V9 et V10 ne s'appliquent que si Keycloak est utilisé avec des jetons autonomes et OAuth/OIDC (à confirmer).

      Tableau 2 : Keycloak, authentification et sessions (V6, V7, V9, V10)

      Réf.ContrôleDescriptionVérifications à effectuerMoyen de vérificationPreuves
      V6.2.1 (N1)Longueur des mots de passeAu moins 8 caractères, 15 fortement recommandésPolitique de mots de passe, tentative de créationRevue de configurationCapture de configuration
      V6.3.1 (N1)Résistance au brute forceContrôles contre le bourrage d'identifiants et la force bruteVerrouillage ou limitation après échecs répétésZAP (rejeu d'authentification)Journal du test
      V6.3.2 (N1)Comptes par défautComptes de type admin ou root absents ou désactivésListe des comptes, essai des identifiants par défautConsole KeycloakListe des comptes
      V7.2.4 (N1)Nouveau jeton à l'authentificationUn nouveau jeton de session est généré à chaque authentificationComparer les identifiants de session avant et après connexionZAP, navigateurRequêtes
      V7.4.1 (N1)Fin de sessionAprès déconnexion ou expiration, le jeton ne peut plus servirRejouer le jeton après déconnexionZAP, curlRequêtes et réponses
      V7.4.2 (N1)Désactivation d'un compteToutes les sessions actives du compte sont terminéesDésactiver un compte de test et rejouer sa sessionConsole Keycloak, curlJournal
      V9.1.1 (N1)Signature des jetons autonomesSignature ou MAC vérifiés avant acceptationModifier le contenu d'un jeton et le présenterScripts ZAPRequêtes et réponses
      V9.1.2 (N1)Algorithmes autorisésListe blanche d'algorithmes pour créer et vérifier les jetonsPrésenter un jeton avec un algorithme non autoriséScripts ZAPRequêtes et réponses
      V9.2.1 (N1)Validité temporelleJeton rejeté hors de sa période de validitéPrésenter un jeton expiréScripts ZAPRequêtes et réponses
      V10.4.1 (N1)URI de redirectionValidées sur une liste blanche pré-enregistréeModifier le paramètre redirect_uriZAPRequêtes et réponses
      V10.4.2 (N1)Code d'autorisation à usage uniqueLe code ne peut être utilisé qu'une foisRejouer un codeZAP, curlRequêtes et réponses
      V10.4.3 (N1)Durée du code d'autorisation10 minutes au plus pour les niveaux 1 et 2Mesurer la durée de validitéZAP, curlHorodatages

      Le troisième tableau vérifie le cloisonnement entre les quatre profils, test central pour ACRA : un profane ne doit pas atteindre les fonctions de Prometheus, de Zabbix ou des alertes.

      Tableau 3 : Cloisonnement des profils (V8)

      Réf.ContrôleDescriptionVérifications à effectuerMoyen de vérificationPreuves
      V8.1.1 (N1)Règles d'autorisation documentéesLa documentation définit les restrictions d'accès par fonction et par donnéeComparer la documentation aux droits réels de chaque profilRevue de la documentationMatrice des rôles
      V8.2.1 (N1)Accès aux fonctionsRéservé aux consommateurs explicitement autorisésTenter, avec chaque profil, les fonctions des autres profils sur Grafana, Prometheus et ZabbixNavigateur et ZAP avec les 4 comptesMatrice d'accès
      V8.2.2 (N1)Accès aux donnéesRéservé aux consommateurs autorisés pour des données précisesAccès à des dashboards ou données non autorisésNavigateur et ZAPCaptures, requêtes
      V8.3.1 (N1)Contrôle côté serveurRègles appliquées par une couche de confiance, sans dépendre du clientContourner l'interface en modifiant les requêtesZAPRequêtes et réponses

      Le quatrième tableau couvre la sécurité des interfaces web et des API de Grafana, Prometheus et Zabbix.

      Tableau 4 : Interfaces web et API (V3, V4)

      Réf.ContrôleDescriptionVérifications à effectuerMoyen de vérificationPreuves
      V3.2.2 (N1)Rendu sûr du texteLe contenu texte n'est pas interprété comme du HTMLInjecter des balises dans les champs saisisZAPRequêtes et réponses
      V3.3.1 (N1)Attribut Secure des cookiesPrésent sur les cookiesExaminer les en-têtes Set-CookieNavigateur, ZAPEn-têtes
      V3.4.1 (N1)HSTSEn-tête Strict-Transport-Security sur toutes les réponsesExaminer les en-têtescurl, testssl.shEn-têtes
      V3.4.2 (N1)CORSAccess-Control-Allow-Origin à valeur fixeEnvoyer des origines non prévuescurl, ZAPRequêtes et réponses
      V3.5.3 (N1)Méthodes HTTPMéthodes appropriées pour les fonctions sensibles (pas GET)Requêtes GET sur des fonctions de modificationZAPRequêtes et réponses
      V4.1.1 (N1)Type de contenuChaque réponse avec corps porte un Content-Type exactEn-têtes des réponses d'APIcurl, ZAPEn-têtes
    3. OWASP WSTG 4.2 : la méthode de test

    4. Le WSTG donne la manière de conduire les tests applicatifs. Le tableau suivant en sélectionne 15 et les relie à l'exigence ASVS correspondante.

      Tableau 5 : Tests WSTG sélectionnés

      Réf.TestComposantsExigence ASVS liée
      WSTG-CONF-01Configuration de l'infrastructure réseauNginx, serveursV13
      WSTG-CONF-07HTTP Strict Transport SecurityNginx, interfaces webV3.4.1
      WSTG-CRYP-01Transport (TLS) faibleNginx frontalV12.1.1
      WSTG-ATHN-01Identifiants transmis sur un canal chiffréKeycloak, interfaces webV12.2.1
      WSTG-ATHN-02Identifiants par défautKeycloak, Grafana, ZabbixV6.3.2
      WSTG-ATHN-03Verrouillage faibleKeycloakV6.3.1
      WSTG-ATHN-07Politique de mots de passe faibleKeycloakV6.2.1
      WSTG-ATHZ-02Contournement du schéma d'autorisationGrafana, Prometheus, ZabbixV8.2.1
      WSTG-ATHZ-03Élévation de privilègesTous les profilsV8.2.1
      WSTG-ATHZ-04Références directes d'objets non sécuriséesGrafana, ZabbixV8.2.2
      WSTG-SESS-03Fixation de sessionKeycloakV7.2.4
      WSTG-SESS-05Falsification de requête inter-sites (CSRF)Grafana, ZabbixV3.5.3
      WSTG-INPV-01Injection de script réfléchie (XSS)Grafana, ZabbixV3.2.2
      WSTG-INPV-05Injection SQLZabbix, GrafanaChapitre V1 (hors sélection)
      WSTG-ERRH-01Gestion des erreursInterfaces webChapitre V16 (hors sélection)
    5. Guide ANSSI sur TLS et recommandations TLSRef : la configuration TLS

    6. Ces deux documents fixent la configuration attendue du chiffrement. Les tests portent sur le Nginx frontal et sont réalisés avec testssl.sh. Les recommandations de l'ANSSI portent les numéros du guide (v1.2).

      Tableau 6 : Tests de configuration TLS

      Réf.ContrôleDescriptionVérifications à effectuerMoyen de vérificationPreuves
      ANSSI R3Versions de TLSPrivilégier TLS 1.3 et accepter TLS 1.2Versions acceptéestestssl.shRapport
      ANSSI R4Versions interditesNe pas utiliser SSLv2, SSLv3, TLS 1.0 et 1.1Refus de ces versionstestssl.shRapport
      ANSSI R9, R10Chiffrement symétriqueAES ou ChaCha20, avec un mode de chiffrement intègreSuites acceptéestestssl.shRapport
      ANSSI R11Fonction de hachageUtiliser SHA-2Algorithmes de hachagetestssl.shRapport
      ANSSI R13Ordre des suitesPréférer l'ordre de suites du serveurOption de préférencetestssl.shRapport
      ANSSI R19Compression TLSNe pas utiliser la compressionCompression désactivéetestssl.shRapport
      ANSSI R22RenégociationExtension de renégociation sécurisée activéePrise en chargetestssl.shRapport
      ANSSI R24, R25, R26CertificatSigné avec SHA-2, valide 3 ans ou moins, clés de taille suffisanteDétail du certificattestssl.sh, opensslDétail du certificat
      ANSSI R29SubjectAlternativeNamePrésenter un SAN appropriéNoms du certificattestssl.shDétail du certificat
      ANSSI R34Chaîne de certificatsTransmettre une chaîne complète et ordonnéeChaîne envoyéetestssl.shRapport
      ANSSI R35Agrafage OCSPPréférer l'agrafage OCSPPrise en chargetestssl.shRapport
      TLSRef v6.0Profil IntermediateComparer la configuration réelle au profil généré pour NginxÉcarts avec le profilGénérateur TLSRef, testssl.shTableau d'écarts
      Voir ASVS V12.3.3Flux internes en HTTPLes recommandations TLS ne s'appliquent qu'une fois TLS activé : constat attendu, absence de chiffrementTrafic entre le Nginx frontal et les servicesCapture réseauCapture

No comments yet

No comments yet. Start a new discussion.

Add Comment