Skip to main content

Documentation Index

Fetch the complete documentation index at: https://snakysec.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Controls Catalog

Catalogue des 220 contrôles évalués (CIS M365 v6.0.1 + CISA SCuBA v1.5.0), leur schéma JSON, et les conventions de rédaction.

Inventaire

Total : 220 contrôles évalués (CIS 140 + SCuBA 94 — 14 contrôles sont partagés entre les deux frameworks via mapping croisé).
FrameworkProduct areaContrôlesFichier
CIS M365 v6.0.1Entra ID60src/frameworks/cis/entra.json
CISDefender20src/frameworks/cis/defender.json
CISTeams17src/frameworks/cis/teams.json
CISSharePoint13src/frameworks/cis/sharepoint.json
CISExchange12src/frameworks/cis/exchange.json
CISFabric12src/frameworks/cis/fabric.json
CISPurview4src/frameworks/cis/purview.json
CISIntune2src/frameworks/cis/intune.json
CISA SCuBA v1.5.0Exchange (EXO)30src/frameworks/scuba/exo.json
SCuBAEntra ID (AAD)22src/frameworks/scuba/aad.json
SCuBADefender17src/frameworks/scuba/defender.json
SCuBATeams13src/frameworks/scuba/teams.json
SCuBAPurview9src/frameworks/scuba/purview.json
SCuBASharePoint3src/frameworks/scuba/sharepoint.json

Convention ID

  • CIS : CIS-<AREA>-<x.x.x> (exemples : CIS-ENTRA-5.2.3.1, CIS-DEFENDER-4.1.2)
  • SCuBA : MS.<AREA>.<x.x>v<N> (exemples : MS.AAD.3.3v2, MS.EXO.15.1v1)

Schéma d’un contrôle

{
  "id": "CIS-ENTRA-1.1.1",
  "title": "Ensure 'Users can register applications' is set to 'No'",
  "level": 1,                              // CIS L1 | L2 (absent pour SCuBA)
  "method": "automated",                   // automated | manual
  "severity": "high",                      // critical | high | medium | low

  // Un seul des blocs `graph` ou `cmdlet` selon le provider
  "graph": {
    "apiVersion": "v1.0",                  // v1.0 | beta
    "endpoint": "/policies/authorizationPolicy",
    "check": {
      "property": "defaultUserRolePermissions.allowedToCreateApps",
      "operator": "eq",
      "expected": false
    }
  },
  "cmdlet": {
    "module": "ExchangeOnlineManagement",  // ExchangeOnlineManagement | MicrosoftTeams | PnP.PowerShell
    "cmdlet": "Get-OrganizationConfig",
    "property": "AuditDisabled",
    "expected": false
  },

  "remediation": {
    "instructions": "...",
    "portalUrl": "https://entra.microsoft.com/...",
    "graphSetUrl": "https://..."
  },

  "mappings": {
    "cis": "1.1.1",
    "iso27001": "A.5.15",
    "nistCsf2": "PR.AC-01"
  },

  "requiredPermissions": ["Policy.Read.All"],
  "requiredLicense": null,                 // ex: "AAD_PREMIUM_P2"

  "applicability": {
    "hybridOnly": false,                   // true → not_applicable si cloud-only
    "cloudOnly": false
  },

  "manualValidation": {                    // obligatoire si method=manual
    "steps": ["...", "..."],
    "expectedState": "...",
    "references": ["CIS §1.1.1", "ANSSI-PSSI §4.2"]
  }
}

Opérateurs de check

OpérateurDescription
eq / neqÉgalité / inégalité stricte
gt / gte / lt / lteComparaison numérique
contains / containsAll / containsAnyPrésence dans un array
in / notInPrésence dans une liste attendue
exists / notExistsPropriété présente / absente
matchesRegex
and / orCompound (conditions[] imbriqué)

Règles de rédaction

  1. method: "automated" par défaut. Ne jamais downgrader en manual sans discussion explicite (feedback utilisateur standing).
  2. Vérifier endpoint + property via Microsoft Learn MCP avant d’ajouter/modifier un contrôle (microsoft_docs_search, microsoft_docs_fetch). La mémoire est peu fiable sur les props Graph.
  3. Pas d’ID object hardcodé tenant-spécifique — utiliser discovery queries ou config par tenant.
  4. Severity mapping :
    • critical : exposition directe (compte admin, données exfiltrables)
    • high : conf. sécu MFA/CA/elevation
    • medium : logs, audit, observabilité
    • low : branding, UX admin

Ajouter un contrôle

  1. Invoquer le skill verify-props pour valider endpoint + propriété.
  2. Éditer src/frameworks/<framework>/<area>.json.
  3. Respecter le schéma ci-dessus (tous les champs requis).
  4. Si compound check nécessaire → check: { and: [{...}, {...}] }.
  5. Exécuter le runner sur un tenant de test (Invoke-CISAudit.ps1 -ProductArea <area>).

Ajouter une logique d’évaluation

Pour un nouveau pattern (JSONPath complexe, aggregation, cross-reference) : étendre Invoke-MsspControlCheck dans src/modules/Mssp.Graph.psm1.