Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
caOptics — CA Optics - Analyseur d'écarts de l'accès conditionnel Azure AD | Kitploit
Outils/GitHubGitHub/jsa2/caoptics
Outils DéfensifsAudit de ConfigurationSécurité CloudGestion des Identités et des Accès (IAM)AuthentificationMauvaise ConfigurationArchived
GitHubjsa2/caoptics

caOptics

CA Optics - Analyseur d'écarts de l'accès conditionnel Azure AD

Voir le dépôt
337264il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Note

Projet archivé en raison de l'évolution des priorités de développement et du recentrage de mes efforts communautaires vers d'autres domaines (PoC, autres outils et démos/présentations), le projet est passé en lecture seule.


  • CA Optics - Analyseur d'écarts d'accès conditionnel Azure AD
    • Qu'est-ce que l'accès conditionnel ?
    • Notes pour les premiers testeurs
  • Notes de version
  • Documentation
    • Exemple d'écart
    • Génération des permutations
    • Prérequis
    • Important
    • Description - Analyseur d'écarts d'accès conditionnel
      • Comparé aux outils existants
    • Périmètre
    • Conception assumée
      • Décisions de conception
        • Recherche de plateforme
        • Différences de recherche
        • Imbrication de groupes
    • Paramètres
      • Fournir des paramètres depuis launch.json (débogage dans VSCode) ?
    • Exécution de l'outil
    • Consultation des rapports
    • Dépannage
  • Contribuer

CA Optics - Analyseur d'écarts d'accès conditionnel Azure AD

Télécharger l’outil

L'Analyseur d'écarts d'accès conditionnel Azure AD est une solution pour détecter les écarts qui peuvent exister au sein de configurations complexes de politiques d'accès conditionnel Azure Active Directory.

Qu'est-ce que l'accès conditionnel ?

Si vous débutez avec l'accès conditionnel, nous vous recommandons de consulter l'article Microsoft suivant : https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview


Notes pour les premiers testeurs


Commande unique pour exécuter cet outil : (si c'est la seule partie que vous prévoyez de lire et que vous avez terminé l'installation)

node ./ca/main.js --mapping --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --clearTokenCache --clearMappingCache


Après avoir satisfait aux prérequis et lu ce fichier README, tenez compte des points suivants :

  1. les politiques reportOnly ne sont pas considérées comme terminales : Lisez : scope

  2. exécutez chaque analyse avec --clearPolicyCache

  3. exécutez chaque analyse avec --clearMappingCache si vous apportez des modifications aux groupes / utilisateurs liés aux politiques

  4. seules les politiques ciblant les utilisateurs et les applications sont dans le périmètre (c'est le périmètre le plus courant, mais cela signifie par exemple que la politique d'enregistrement de sécurité n'est pas évaluée) Lisez : scope

  5. Commencez par un environnement de test pour acquérir de l'expérience et définir des attentes concernant le fonctionnement de l'outil

  6. si vous savez que des groupes ou des utilisateurs sont exclus des politiques, définissez avec --skipObjectIds les objets à exclure de l'analyse, sauf si vous cherchez à confirmer les exclusions

  7. Si vous exécutez des analyses dans plusieurs environnements, assurez-vous que les connexions et les caches sont supprimés avant de lancer de nouvelles analyses

    Lisez : paramètres

    • si vous avez AZ CLI installé, videz le cache AZ CLI avant de continuer avec az account clear puis effectuez une nouvelle connexion à l'environnement que vous prévoyez d'analyser avec az login

Lisez autres notes importantes


Notes de version

root@kitploit:~
Notes de version : 0.7.1
- Dépendances mises à jour et sorties texte des rapports actualisées
Notes de version : 0.7
- Utilise désormais le point de terminaison bêta par défaut ; l'option --expand étend désormais les résultats du rapport, indépendamment de l'utilisation de --allTerminations
Notes de version : 0.6.9
- Utilisation de --expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016 et extension de 10 membres de groupe pour une inspection séparée.
Notes de version : 0.6.8
- Lorsque vous mettez à jour une politique avec des conditions d'invité dans l'interface graphique, cette politique ne sera disponible qu'à partir du point de terminaison bêta après la mise à jour (pendant l'aperçu).
- Cette mise à jour apporte une normalisation pour les politiques transférées vers le point de terminaison bêta en raison de ce comportement.
- La politique sera évaluée comme les conditions d'invité précédentes, tant que les conditions suivantes sont incluses "internalGuest,b2bCollaborationGuest,b2bCollaborationMember" et qu'aucun locataire n'est exclu de la politique. Pour évaluer les politiques transférées,
- utilisez '--allowPreviewPolicies' lors de l'exécution de CaOptics pour tenir compte de ce comportement

Notes de version : 0.6.6-7 bêta
- Permet d'utiliser différents points de terminaison de connexion pour la connexion et le graphe avec les paramètres : --altLogin --altGraph
- Permet d'utiliser un filtrage personnalisé pour les politiques (recommandé uniquement lorsque les politiques ne correspondent pas au schéma attendu)

Notes de version : 0.6.5 bêta
- Ajout d'un compteur au rapport lorsqu'un grand nombre de permutations est également ajouté au rapport (par défaut, seules les permutations non terminées sont ajoutées)
- Corrections mineures de code remplaçant <var> par <let>
- Le nom du fichier de rapport inclut désormais le jour, le mois, l'année et l'ID de locataire, par ex. report_day_4_month_9_year_2022-tenant_48f55450-183a-45d6-a9ce-68f3cbc68947.csv

Notes de version : 0.6.4 bêta
- Récupère plus de groupes par appel unique (moins de regroupements par lots)
- Correction d'une condition de concurrence détectée lors de l'utilisation générale des boucles for await
- Encadre les valeurs avec "" entre les délimiteurs (CSV)

Notes de version : 0.6.3 bêta
- Optimisations de la gestion des objets mappés.
  - Les objets mappés sont mis en cache. Vous pouvez recréer le mappage d'objets à l'aide du paramètre 'clearMappingCache'
  - Les clés de recherche commencent toujours par les conditions 'user/group/role' en premier
  - Ajout de la possibilité de remplir l'usermap avec des UUID aléatoires pour tester l'impact sur les performances (il s'agit uniquement d'une option de débogage, et pas vraiment quelque chose qui serait dans les versions non bêta)

Notes de version : 0.6.2 bêta
- Séparation des paramètres de cache en fonctions distinctes -> (clearTokenCache et ClearPolicyCache)
- Ajout de la possibilité d'exécuter un algorithme pré-optimisé sur les permutations avec le paramètre --aggressive (consommation mémoire élevée, présent uniquement ici pour les tests A/B)
- fusion terminée.

Notes de version : 0.6.1 bêta
- Ajout d'une version de base du rapport CSV
- Génération de permutations simplifiée pour garantir que les permutations essentielles sont générées, et certaines permutations sont terminées plus tôt lors des recherches

Notes de version : 0.6 bêta (première version non « silencieuse »)
- Ajout des noms d'affichage des applications au rapport MD. Type d'objet ajouté au type d'utilisateur

Notes de version : 0.5.2,0.5.1,0.5 bêta  (voir les branches précédentes pour les notes de version)


Documentation

Exemple d'écart

Exemple de détection inter-politiques

❌ Toute permutation avec la valeur 0 signifie qu'aucune politique n'a été terminée pour cette combinaison particulière de conditions.

PolicyTerminationslookup
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:GuestsOrExternalUsers
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:Jane Doe
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:John Doe

✅ Lisez la description détaillée de la détection dans docs/example.md


Génération des permutations

Les permutations sont générées par getPol2.js

  • Comment cela fonctionne-t-il ? Une recherche récursive est effectuée pour toutes les conditions, puis les conditions sont placées sous des permutations uniques

Les permutations peuvent être visualisées avec le service JSON Crack :

(Visualisation par https://jsoncrack.com/)

Prérequis

Environnement d'exécution

  • Node.JS 14 LTS (Linux) (Installation sous Linux)
  • Node.JS 16 LTS (Windows) (Installation sous Windows)

Si vous préférez ne pas utiliser la version « fire & forget »```bash nvm use 16 git clone https://github.com/jsa2/caOptics; cd caOptics; npm install;

root@kitploit:~
**Configuration d'exécution « fire and forget » pour Azure Cloud Shell (Bash)**```bash
curl -o- https://raw.githubusercontent.com/jsa2/caOptics/main/init.sh | bash;
# Force reload of NVM
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 
# This loads nvm

I notice the translation request arrived without any actual content in the INPUT section. Please provide the text you'd like translated so I can proceed with translating it into French.```bash cd caOptics

Force fresh login (AZ CLI can't use the built-in token for the scope we are looking in here)

az login

root@kitploit:~
**Lié à Azure AD**
- Rôle Azure AD Security Reader activé
- Si vous avez Azure CLI et une session CLI existante, cet outil utilisera cette [session](https://github.com/jsa2/caoptics/blob/main/tokenHandler/getCode.js).
   - Si vous n'avez pas Azure CLI installé, le clientID Azure CLI est simplement utilisé pour obtenir des jetons avec le flux device_code initié par le client http Node.js

      >![](https://assets.kitploit.com/production/public/readmes/47865/74e5e9fa7f505e20aecbe9ab86620b749fbecbd246cf233c4826991cda9a493b.png)  


**Les paquets open source suivants sont utilisés**

Pour réduire la quantité de code, nous utilisons les dépendances suivantes pour l'opération et l'esthétique (Merci aux mainteneurs de ces formidables paquets. Le lien de licence de chaque paquet est fourni dans la colonne licence)
  
  paquet | esthétique|opération|licence
  -|-|-|-
  [axios](https://www.npmjs.com/package/axios)||✅ | [MIT](https://github.com/axios/axios/blob/v1.x/LICENSE)
  [yargs](https://www.npmjs.com/package/yargs)||✅ | [MIT](https://github.com/yargs/yargs/blob/main/LICENSE)
  [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) | |✅|[MIT](https://github.com/auth0/node-jsonwebtoken/blob/master/LICENSE)
  [chalk](https://www.npmjs.com/package/chalk)| ✅ | |[MIT](https://github.com/chalk/chalk/blob/main/license)
   [js-beautify ](https://www.npmjs.com/package/js-beautify) | ✅ | |[MIT](https://github.com/beautify-web/js-beautify/blob/main/LICENSE)

**Quel accès réseau est nécessaire pour que cela fonctionne ?**

1. Les hôtes suivants sont nécessaires pour le fonctionnement  ```sh
  graph.microsoft.com
  login.microsoftonline.com
  1. Avant l'opération, un accès à GitHub et à npmjs est nécessaire pour télécharger les dépendances.

    Si vous prévoyez d'exécuter cet outil dans un environnement au réseau restreint, téléchargez d'abord les dépendances dans un environnement qui autorise l'accès aux installations de paquets et à github.com. Vous pouvez ensuite transférer l'intégralité du répertoire d'installation compressé vers l'environnement au réseau restreint

Voici une trace typique que j'effectue lorsque j'exécute des paquets tiers sur mes applications Node.js. Elle montre les URL appelées au moment de l'exécution


Important

  1. Lisez la Licence

  2. ⚠️ Aucun assainissement des entrées n'est effectué sur les paramètres de lancement, car il est toujours supposé que l'entrée de ces paramètres est contrôlée, et que cet outil ne s'exécute pas dans un environnement non contrôlé (ou sans surveillance). Bien que je n'aie pas examiné tous les chemins, je pense qu'atteindre l'exécution de shellcode est trivial. Cet outil ne suppose pas d'entrée hostile, c'est pourquoi il est recommandé de ne pas coller les arguments de lancement dans la ligne de commande sans les avoir examinés au préalable.

  3. Nous recommandons que cet outil soit toujours exécuté uniquement avec des autorisations en lecture seule (si vous avez AZ CLI installé, supprimez le cache AZ CLI avant de continuer az account clear)

  4. L'authentification héritée n'est pas évaluée lorsque la politique évaluée inclut uniquement des conditions d'authentification héritée - Contexte : Microsoft est en train d'abandonner l'authentification de base pour Exchange, une grande partie de l'évaluation de l'authentification héritée deviendra donc bientôt (fin 2022) sans objet.

    Vous pouvez toujours opter pour le paramètre --includeLegacyAuth afin d'inclure uniquement les politiques d'authentification héritée dans le mélange. Gardez à l'esprit que cela supposera alors que l'authentification héritée est couverte pour toutes les applications (et l'évaluera donc aussi pour les applications ne prenant pas en charge l'authentification héritée), et pas seulement EXO

  5. L'outil stocke localement le jeton d'actualisation AZ CLI pour conserver la persistance de session - Les jetons sont mis en cache localement en texte brut (tout comme ils sont mis en cache avec Azure CLI dans BASH, que vous utilisiez ou non cet outil). Bien que le cache de jetons puisse être chiffré, cela n'offre aucun avantage pour le PoC pour le moment. Chiffrer le cache de jetons n'aiderait pas beaucoup non plus, car de nombreux autres outils/applications exécutés sur le système stockent probablement des jetons d'actualisation opaques dans leur format en texte brut.

  6. Concernant les rapports et les permutations : je cherche toujours le meilleur équilibre entre lisibilité et verbosité. Je crois que toutes les lacunes du périmètre sont identifiées, mais j'ai apporté de nombreux changements à l'algorithme de ces détections, et il pourrait donc encore y avoir quelques cas limites que je n'ai pas pris en compte.


Description - Analyseur de lacunes d'accès conditionnel

Cet outil résout le problème de la détection des lacunes dans les politiques d'accès conditionnel, même lorsque la lacune n'apparaît pas dans les journaux de connexion.

Comparaison avec les outils existants

En quoi cet outil se distingue-t-il des outils existants ?

OutilBPA ¹Analyse des lacunesExigences supplémentaires
Microsoft Azure AD Assessment✅- Uniquement en relation avec le BPAnouvel enregistrement d'application
Conditional access gap analyzer workbook -² Uniquement lorsque la lacune peut être attribuée à un événement de connexionles journaux sont exportés vers l'espace de travail Log Analytics
CA Optics-✅³ Accès à Azure Cloud Shell et autorisations de lire les politiques d'AC via l'API MS Graph

Informations supplémentaires

¹ Analyseur de bonnes pratiques

² La lacune ne peut pas être identifiée si les conditions qui l'exposent n'ont jamais été enregistrées dans le journal de connexion

³ Cloud Shell n'est pas une exigence stricte, mais une bonne alternative pour les utilisateurs de cet outil qui n'auraient pas Node.js installé

Scope

À la version 0.5, les conditions couvertes sont les suivantes :

✅Users / Roles /Groups

✅Cloud apps (seules les politiques qui définissent toutes les applications, ou des applications individuelles, sont dans le périmètre)

✅Device platforms (par ex. user-agents)

✅Locations

✅Client Apps (par ex. applications navigateur / bureau et mobiles) ¹

✅Access Controls (Grant / Block) (Seules les politiques qui ont les contrôles d'accès activés sont dans le périmètre ²)

  • Ces conditions ont été choisies comme point de départ, car la plupart des lacunes typiquement exploitables par un attaquant se produisent dans ces politiques. À mesure que nous gagnons en expérience grâce aux tests de cet outil, nous introduirons de nouvelles détections de lacunes.
  • (Tout ce qui ne figure pas sur la liste n'est pas évalué. Par exemple, les politiques basées sur le risque ne sont pas considérées comme couvrant les lacunes, car la détection des risques n'est pas considérée comme parfaite ; elles devraient être utilisées plutôt dans les situations où vous souhaitez bloquer quelque chose, plutôt que d'exiger une MFA uniquement en cas de risque associé)

¹ Étant donné que Microsoft abandonne l'authentification héritée (Legacy Auth), l'authentification héritée n'est pas examinée ² L'application de la politique doit être activée (les politiques en mode rapport seul ne sont pas évaluées par défaut, mais peuvent être incluses avec un certain indicateur)

Conception assumée

Il est important de comprendre que l'outil reflète les opinions de ses créateurs en matière de conception de politiques :

Il existe deux écoles de conception d'accès conditionnel

  1. Approche par inclusion : n'appliquer l'AC qu'aux conditions qui correspondent aux schémas d'utilisation prévus par l'organisation.

  2. Approche par exclusion : appliquer l'AC dans toutes les conditions, puis créer des exclusions étroites pour gérer ces exceptions.

⚠ Cet outil ne fonctionne que pour la seconde école de conception d'AC. Le fondement de cette conception est que l'attaquant considère tous les modèles d'accès comme valides, y compris ceux que l'organisation pourrait ne pas considérer comme valides pour son propre usage. Si vos schémas d'utilisation ne correspondent pas à l'approche adoptée par cet outil, nous vous recommandons d'envisager plutôt l'utilisation des outils existants


Cette école de pensée est similaire à la bonne pratique de Microsoft 'Appliquer des politiques d'accès conditionnel à chaque application' avec la distinction suivante : outre toutes les applications, toutes les autres conditions configurées devraient être couvertes par une politique, ou une exclusion d'un certain type ¹

Assurez-vous que chaque application dispose d'au moins une politique d'accès conditionnel appliquée. D'un point de vue sécuritaire, il est préférable de créer une politique qui englobe toutes les applications cloud, puis d'exclure les applications auxquelles vous ne souhaitez pas que la politique s'applique. Cela garantit que vous n'avez pas besoin de mettre à jour les politiques d'accès conditionnel à chaque fois que vous intégrez une nouvelle application.

¹ Cet outil considère qu'une lacune est couverte également lorsqu'une exclusion de localisation approuvée ou d'appareil approuvé est utilisée, et que la politique n'est donc pas appliquée en raison de l'utilisation d'un appareil ou d'une localisation approuvés. Il convient de mentionner qu'il existe des bonnes pratiques d'utilisation administrative qui devraient exiger que la localisation approuvée ou l'appareil approuvé soit combiné(e) avec une MFA.


Décisions de conception


Correspondance de plateforme

La conception actuelle exige que toutes les conditions correspondent à la politique « toutes les plateformes ». Cela repose sur le scénario où tous les clients sont sélectionnés explicitement, et ainsi aucun client « inconnu » n'est sélectionné dans cette politique particulière

Exemple d'une telle condition```json "platforms": { "includePlatforms": ["all"], "excludePlatforms": ["macOS"] },

root@kitploit:~
**Référence** https://learn.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-conditions#device-platforms


> **Important** <br> *Microsoft recommande de disposer d’une stratégie d’accès conditionnel pour les plateformes d’appareils non prises en charge. Par exemple, si vous souhaitez bloquer l’accès à vos ressources d’entreprise depuis Chrome OS ou tout autre client non pris en charge, vous devez configurer une stratégie avec une condition de plateformes d’appareils qui inclut tout appareil et exclut les plateformes d’appareils prises en charge, et un contrôle d’octroi défini sur Bloquer l’accès.* 

---

#### Différences de recherche


1. Recherche par rôle
> Lorsque les rôles sont utilisés comme conditions, la recherche des exclusions/inclusions est dictée uniquement par le rôle. Cela peut aboutir à une situation où la stratégie se termine correctement sur un rôle, mais où l’utilisateur appartenant à ce rôle peut encore être exclu de la stratégie dans les résultats. Dans les résultats, les deux conditions sont mises en évidence (non fusionnées). Il s’agit purement d’une décision de conception, car nous voulons afficher les terminaisons de rôle séparément, sans contexte utilisateur ou groupe.

 --- 

    Example:
    userID:0cd1b62d-5ff8-497b-9b56-9bb02bc0ab8c is included from All Apps policy

    There is admin policy, that covers role of Global administrator, but not the userId. 

    Both of following conditions would be shown in results:
    1. Role GA is excluded individually (1)
    2. UserId is not explicitly targeted by group or userId (0)

    All (cross-policy)	policies matched:1	users:Company Administrator
    All (cross-policy)	policies matched:0	users:joosua santasalo
    


---

2. Recherche par groupe
> À l’inverse, si des groupes sont utilisés, la terminaison de la stratégie est fusionnée, et l’exclusion de l’utilisateur serait alors affichée comme terminée par l’inclusion du groupe.

    Example:
    userID:194383eb-6053-4d1e-bc72-f332be6ca2cb is included from All Apps policy

    There is policy which targets the user only by group

    Following conditions would be shown in results:
    1. User is excluded individually 
    2. User is targeted via group.

  
    All (cross-policy)	policies matched:1	users:Vihtori Santasalo (matched via group)


3. Recherche des invités
   
>Les utilisateurs ne sont pas mappés en tant qu’invités dans cette version. Cette fonctionnalité sera introduite plus tard, permettant de détecter les inclusions/exclusions des userId d’invités pour les mapper correctement à la propriété ``GuestsOrExternalUsers``.
Actuellement, les utilisateurs invités sont mappés comme des utilisateurs normaux.
>

#### Imbrication de groupes

  >En raison de considérations de performances, la profondeur d’imbrication pour la résolution des appartenances aux groupes n’est résolue qu’une seule fois si le groupe est un groupe d’un autre groupe. Sinon, il existe un risque de résoudre les appartenances indéfiniment, car un sous-groupe pourrait inclure l’un des groupes racines, ce qui entraînerait une boucle sans fin.

    Membership:    
    Group1 -> all members resolved
    --> user is member of Group1
    --> Group2 is member of Group1 -> all members resolved to Group1
      --> Group3 is member of Group1 -> NOT RESOLVED

> Si vous osez... vous pouvez augmenter l’imbrication directement dans le code... [group.js](https://github.com/jsa2/caoptics/blob/main/ca/mainPlugins/userMappers/group.js)

![](https://assets.kitploit.com/production/public/readmes/47865/59681df621b6d006dbf9ae0a77045e5967665eb4000674c643fcc9a9e74ad856.png)  

## Paramètres

Param| Description 
-|-
``mapping`` | Par défaut, les exclusions basées sur l’utilisateur et le groupe sont évaluées par l’ID exact des objets. Par exemple, si un objet est exclu par une stratégie, l’objet doit être trouvé dans une autre stratégie par son ID exact. <br> L’utilisation de ``--mapping`` appelle MS Graph pour renseigner les relations entre les objets de manière à garantir, par exemple, qu’un utilisateur peut être exclu par userId dans une stratégie, tandis que l’évaluation détecte que l’utilisateur est inclus dans une autre stratégie par un groupId. <br> p. ex. ``--mapping`` 
``clearMappingCache`` | Efface les mappages utilisateur/groupe récupérés lors d’une exécution précédente <br> p. ex ``--clearMappingCache`` 
``skipObjectId `` | Supprime l’ObjectId des permutations. Cela peut être utile si vous souhaitez exclure le compte break-glass des résultats <br> p. ex. ``--skipObjectId=bcd27e9b-8974-42ec-a2a1-ba2498b45674,c7a4a639-00e7-47e0-aa9d-ea502bbbd382`` 
``skip `` | Supprime la catégorie complète de permutations. <br> p. ex. ``--skip=users`` 
``includeReportOnly `` | Permet de mélanger les stratégies reportOnly avec les stratégies activées. Supprimez les stratégies existantes avant d’exécuter cette option en supprimant le fichier policies.json à la racine, ou utilisez l’option ``clearPolicyCache`` <br> p. ex. ``--includeReportOnly`` 
``includeLegacyAuth `` | Par défaut, les stratégies qui ont uniquement des conditions d’authentification héritée ne sont pas évaluées. Utilisez cet indicateur si vous souhaitez inclure l’authentification héritée dans l’analyse <br> veuillez noter que l’inclusion de l’authentification héritée l’examinera par rapport à toutes les applications, pas uniquement aux charges de travail prises en charge (AAD, SPO, EXO) <br> p. ex. ``--includeLegacyAuth`` 
``clearPolicyCache `` | Supprime les caches de stratégies <br> p. ex. ``--clearPolicyCache`` 
``clearTokenCache `` | Supprime les caches de jetons <br> p. ex. ``--clearTokenCache`` 
``allTerminations`` | Inclut également les résultats qui se sont terminés sur une stratégie <br> ``--allTerminations``
``debug`` | Affiche l’utilisation de la mémoire et l’estimation de la progression <br> p. ex. ``--debug``
``altLogin `` | Permet de définir un point de terminaison de connexion alternatif (FQDN) <br> p. ex. ``--altLogin=login.microsoft.com.alt``
``altGraph `` | Permet de définir un point de terminaison graphique alternatif (FQDN) <br> p. ex. ``--altGraph=graph.microsoft.com.alt`` 
``customPolicyFilter `` | Permet d’utiliser un filtrage personnalisé pour les stratégies (ceci n’est recommandé que lorsque les stratégies ne respectent pas le schéma attendu) <br> p. ex. ``--customPolicyFilter`` <br> Vous pouvez modifier le filtre en sélectionnant [``customPolicyFilter.js``](https://github.com/jsa2/caoptics/blob/main/ca/mainPlugins/customPolicyFilter.js) 
``expand `` | Permet de définir un groupe à développer dans les résultats. Par défaut, le groupe est développé pour les 10 premiers éléments. Le nombre d’éléments développés peut être augmenté en utilisant conjointement l’option ``--expandCount=30``<br> p. ex. ``--expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016`` <br> Remarque : L’utilisation de cette option nécessite que le cache de mappage soit effacé ``--clearMappingCache`` 

### Fournir des paramètres depuis launch.json (débogage dans VSCode) ?


copiez le schéma json actuel et créez un fichier nommé launch.json dans le dossier ``.vscode/launch.json`````json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "skipFiles": [
                "<node_internals>/**"
            ],
"program": "${workspaceFolder}/ca/main.js",
//"program": "${file}",
            "args":  [
                "--skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f",
               "--mapping",
              "--clearMappingCache",
               "--clearPolicyCache",
               "--clearTokenCache",
               "--customPolicyFilter",
               "--allowPreviewPolicies=beta",
             //  "--altGraph=graph.microsoft.com",
              // "--allPlatforms",
             //   "--includeReportOnly",
                //"--inject",
            //"--clearPolicyCache",
              // "--skipCleaning",
             // "--allTerminations",
             // "--aggressive",
             "--debug",
            ],
            "runtimeArgs": [
                "--max-old-space-size=4096"
            ]
        }
    ]
  }

Exécution de l'outil

Avant d'exécuter l'outil pour la première fois```sh #Navigate to the cloned folder cd caOptics; #Install depedencies npm install

root@kitploit:~
Chaque exécution initiera une connexion si aucune session n'est stockée. Si vous avez une session sur Azure CLI et que vous souhaitez utiliser une autre session, exécutez ``Az Account Clear`` 

1. Exécution statique (sans [mapping](#parameters) )
>``node ./ca/main.js `` 
2. Exécution statique (avec [mapping](#parameters) )
>``node ./ca/main.js --mapping`` 
3. Fournir ``skipObjectId=yourID`` pour exclure le groupe Break glass 
>``node ./ca/main.js --mapping  --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f`` 

De plus, si vous expérimentez avec l'outil, il est recommandé d'inclure ``--clearPolicyCache --clearTokencache``  en paramètre. Cela supprimera les jetons de session existants, ainsi que le policy.json (cache)

>supprimez policies.json du dossier du projet, si vous ne voulez pas supprimer la session du cache, mais souhaitez simplement que les politiques soient supprimées

**Résultat attendu (sur la base des données d'exemple)**

Stratégie | Permutation | Terminaisons | recherche 
 -|-|-|- 
All (cross-policy)| 33a51ecbcc58466a90b6bea66b239c74|  0| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS -> clientAppTypes:mobileAppsAndDesktopClients -> users:All 
All (cross-policy)| 4194a5e64e054764bd8774d4992887b9|  0| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS -> clientAppTypes:mobileAppsAndDesktopClients 
All (cross-policy)| 24f38821ea8e4331aeae7c078a727236|  1| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS 


## Affichage des rapports
Toutes les exécutions réussies génèrent ``crosstable.md`` (un tableau markdown) et le CSV ``report.csv`` 
- Chaque nouvelle exécution de l'outil effacera le rapport précédent

**Exemple de rapport .csv**```
users                 Applications clientAppTypes              Platforms locations terminations  
-----                 ------------ --------------              --------- --------- ----------
GuestsOrExternalUsers All          browser                     macOS     finland   0
user-Joosua Santasalo All          browser                     macOS     finland   0
user-Joosua Santasalo All          mobileAppsAndDesktopClients macOS     finland   0
All                   All          browser                     macOS     finland   0

Exemple de dump .json```json [ { "policy": "all", "lineage": "Platforms:macOS -> clientAppTypes:browser -> users:All -> Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> ", "lookup": "Locations:10a25087-9bf6-479b-a2a1-37e814310c90", "terminated": [] }, { "policy": "all", "lineage": "Platforms:macOS -> clientAppTypes:browser -> users:GuestsOrExternalUsers -> Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> ", "lookup": "Locations:10a25087-9bf6-479b-a2a1-37e814310c90", "terminated": [] } ]

root@kitploit:~
## Dépannage

- Si vous utilisez AZ CLI pour la connexion de session, commencez par ``az account clear`` 
- Lors de l'exécution de l'outil, ajoutez ``--clearPolicyCache --clearTokencache`` pour vider les caches (jetons, stratégies et emplacements)
- supprimez manuellement les fichiers policies.json et namedLocations.json existants à la racine du projet (si vous n'utilisez pas l'option ``--clearPolicyCache --clearTokencache``  ) 
- Si les inclusions de groupe ne semblent pas fonctionner, assurez-vous que ``--mapping`` est sélectionné et que vous n'avez pas d'imbrication au-delà de deux groupes

--- 

**Tests dans Azure Cloud Shell**

Si vous testez cette solution dans un environnement plus vaste. Activez ``--debug`` dans les paramètres et, si possible, augmentez la taille du tas de Node.js `` --max-old-space-size=4096 `` 
  - L'expérience des tests a montré que le nombre de permutations peut atteindre des valeurs très élevées avec de grands environnements. L'exécution en mode débogage peut aider à identifier où le problème peut survenir. Dans de tels scénarios, l'utilisation de Cloud Shell peut ne pas être viable (bien que l'algorithme de permutation ait désormais considérablement réduit l'utilisation de la mémoire, je n'ai pas pu confirmer que Cloud Shell fonctionnerait dans de grands environnements)

> Étant donné que l'algorithme actuel de génération de permutations est fortement réduit par rapport à l'original, même Cloud Shell devrait fonctionner, mais par exemple des conditions de course ou d'autres fuites de mémoire peuvent encore se cacher quelque part et se manifester dans des environnements plus grands, atténuant les avantages de l'algorithme actuel. 

``node --max-old-space-size=4096 ./ca/main.js --mapping  --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --debug`` 


---

- Vous pouvez avoir des références vides dans les stratégies CA et la recherche affichera ainsi une condition non terminée

  >![](https://assets.kitploit.com/production/public/readmes/47865/7820044fc6c547017bca097b6a0306b341e689241ceea64b245f8a204c3269b4.png)  


# Contribution

Ouvrez une pull request, ou soumettez un problème selon la portée de la demande.