Serveur MCP CISA M365
Serveur MCP (Model Context Protocol) mettant en œuvre les contrôles de sécurité de la directive opérationnelle contraignante 25-01 de la CISA pour Microsoft 365 (Azure AD/Entra ID).
Table des matières
- Vue d'ensemble
- Contrôles de sécurité
- Architecture du serveur
- Conditions préalables
- Installation des contrôles de sécurité
- Configuration des contrôles de sécurité
- Utilisation
- Référence API
- Gestion des erreurs
- Tests
- Considérations de sécurité
- Contribuer
- Licence
Vue d'ensemble
Ce serveur MCP fournit des outils pour configurer et gérer les paramètres de sécurité de Microsoft 365 conformément aux exigences du BOD 25-01. Il s'intègre à l'API Microsoft Graph pour appliquer les contrôles de sécurité, surveiller la conformité et fournir des rapports détaillés.
Caractéristiques principales
- Contrôles d'authentification existants
- Contrôles d'accès basés sur les risques
- Gestion de l'authentification multi-facteurs
- Contrôles de l'enregistrement des applications et du consentement
- Gestion de la politique des mots de passe
- Gestion des rôles privilégiés
- Application des comptes en nuage
- Intégration du système PAM
- Rapports de conformité complets
- Authentification par jeton
- Validation des arguments en toute sécurité
- Gestion détaillée des erreurs et journalisation
Contrôles de sécurité
MS.AAD.1.1v1
Date d'échéance : 20/06/2025
Blocage de l'authentification héritée :
- Désactive les protocoles d'authentification existants
- Réduit la surface d'attaque
- Améliore la posture de sécurité
Détails de la mise en œuvre :
attendez graphClient .api('/policies/authenticationMethodsPolicy') .patch({ allowLegacyAuthentication : false, blockLegacyAuthenticationMethods : true, })
MS.AAD.2.1v1 & MS.AAD.2.3v1
Date d'échéance : 20/06/2025
Bloquer les utilisateurs et les connexions à haut risque :
- Bloque les utilisateurs détectés comme présentant un risque élevé
- Bloque les ouvertures de session détectées comme présentant un risque élevé
- Exploite les renseignements sur les menaces de Microsoft
Détails de la mise en œuvre :
attendez graphClient .api('/policies/identitySecurityDefaultsEnforcementPolicy') .patch({ blockHighRiskUsers : true, riskLevelForBlocking : 'high', })
MS.AAD.3.1v1, MS.AAD.3.2v1, MS.AAD.3.3v1
Date d'échéance : 20/06/2025
Configuration de l'AMF :
- Mise en œuvre d'un MFA résistant à l'hameçonnage
- Configure des méthodes alternatives de MFA
- Affiche le contexte de connexion dans Microsoft Authenticator
Détails de l'implémentation :
await graphClient .api('/policies/authenticationMethodsPolicy') .patch({ policies : { fido2 : { isEnabled : true, isSelfServiceRegistrationAllowed : true, }, windowsHelloForBusiness : { isEnabled : true, isSelfServiceRegistrationAllowed : true, }, }, })
MS.AAD.5.1v1, MS.AAD.5.2v1, MS.AAD.5.3v1, MS.AAD.5.4v1
Date d'échéance : 20/06/2025
Contrôle des applications :
- Limite l'enregistrement des applications aux administrateurs
- Limite le consentement à l'utilisation de l'application aux administrateurs
- Configure le flux de travail du consentement de l'administrateur
- Bloque le consentement du propriétaire du groupe
Détails de l'implémentation :
await graphClient .api('/policies/applicationRegistrationManagement') .patch({ restrictAppRegistration : true, restrictNonAdminUsers : true, })
MS.AAD.6.1v1
Date d'échéance : 20/06/2025
Politique de mot de passe :
- Désactive l'expiration des mots de passe
- Suit les meilleures pratiques modernes en matière de sécurité
Détails de l'implémentation :
await graphClient .api('/policies/passwordPolicy') .patch({ passwordExpirationPolicy : { passwordExpirationDays : 0, neverExpire : true, }, })
MS.AAD.7.1v1 à MS.AAD.7.8v1
Date d'échéance : 20/06/2025
Gestion des rôles privilégiés :
- Limite le nombre d'administrateurs globaux
- Mise en œuvre de rôles granulaires
- Nécessite des comptes "cloud-only
- Application de l'utilisation du système PAM
- Configure les flux d'approbation
- Mise en place d'alertes
Détails de l'implémentation :
await graphClient .api('/policies/roleManagementPolicies') .patch({ enforceGranularRoles : true, blockGlobalAdminForGeneralUse : true, requireApprovalForGlobalAdmin : true, })
Architecture
Composants
Classe de serveur
- Gère la mise en œuvre du protocole MCP
- Gestion de l'enregistrement et de l'exécution des outils
- Traitement des erreurs et journalisation
Authentification
- Authentification par jeton avec Microsoft Graph API
- Rafraîchissement automatique des jetons
- Gestion sécurisée des informations d'identification
Client graphique
- Enveloppe de l'API Microsoft Graph
- Gestion des requêtes/réponses à sécurité de type
- Logique de relance et gestion des erreurs
Outils
- Contrôle de l'authentification
- Gestion des accès basée sur les risques
- Configuration de l'AMF
- Contrôle des applications
- Gestion de la politique des mots de passe
- Gestion des rôles
- Configuration des alertes
- Rapport sur l'état de la politique
Flux de données
graph TD A [Client MCP] -->|Demande| B [Serveur MCP] B -->|Authentication| C [Gestionnaire de jetons] C -->| Jeton d'accès| D [Client Graph] D -->|Appels d'API| E [Microsoft Graph] E -->|Réponse| D D -->|Résultats| B B -->|Réponse| A
Conditions préalables
- Node.js 18.x ou supérieur
- Locataire Microsoft 365 avec accès administrateur
- Application Azure AD avec les permissions requises
- Policy.ReadWrite.All
- RoleManagement.ReadWrite.All
- User.Read.All
- Application.ReadWrite.All
Installation de l'application
Installation via Smithery
Pour installer automatiquement le serveur CISA M365 MCP via Smithery:
npx -y @smithery/cli install cisa-m365
Vous pouvez également copier directement les paramètres et définitions MCP à partir du répertoire de protocoles de Smithery et ajouter le serveur MCP à votre installation Claude ou LLM qui prend en charge le protocole MCP.
- Clonez le dépôt :
git clone https://github.com/DynamicEndpoints/BOD-25-01-CSA-MCP.git cd cisa-m365
- Installez les dépendances :
npm install
- Construire le serveur :
npm run build
Configuration du serveur
Créer l'application Azure AD :
- Naviguer vers Azure Portal > Azure Active Directory
- Enregistrer une nouvelle application
- Ajouter les permissions API requises
- Créer un secret client
Configurer les variables d'environnement :
cp .env.example .env
Modifier le fichier .env :
TENANT_ID=votre-id-locataire CLIENT_ID=votre-id-client CLIENT_SECRET=votre-secret-client
- Configurez les paramètres MCP :
{ "mcpServers" : { "cisa-m365" : { "command" : "node", "args" : ["path/to/cisa-m365/build/index.js"], "env" : { "TENANT_ID" : "your-tenant-id", "CLIENT_ID" : "your-client-id", "CLIENT_SECRET" : "your-client-secret" } } }
Utilisation
Outils disponibles
block_legacy_auth
Bloque les méthodes d'authentification traditionnelles.
{}
block_high_risk_users
Bloque les utilisateurs détectés comme présentant un risque élevé.
{}
enforce_phishing_resistant_mfa
Appliquer l'AMF résistante à l'hameçonnage pour tous les utilisateurs.
{}
configure_global_admins
Configure l'attribution des rôles d'administrateur global.
{"userIds" : ["user1-id", "user2-id"] }
get_policy_status
Obtenir l'état actuel de toutes les politiques de sécurité.
{}
Exemple d'utilisation
// Bloquer l'authentification héritée const result = await client.callTool('block_legacy_auth', {}) ; // Obtenir l'état de la politique const status = await client.callTool('get_policy_status', {})
Référence de l'API
API des paramètres des politiques
interface PolicySettings { legacyAuthentication : { blocked : boolean ; compliant : boolean ; } ; highRiskUsers : { blocked : boolean ; compliant : boolean ; } ; mfa : { phishingResistant : boolean ; alternativeEnabled : boolean ; compliant : boolean ; } ; applications : { registrationRestricted : booléen ; consentRestricted : booléen ; compliant : booléen ; } ; passwords : { expirationDisabled : booléen ; compliant : booléen ; } ; roles : { globalAdminCount : nombre ; granularRolesEnforced : booléen ; pamEnforced : booléen ; compliant : booléen ; } ; }
Gestion des erreurs
Le serveur met en œuvre une gestion complète des erreurs :
Erreurs d'authentification
- Échecs d'acquisition de jetons
- Problèmes de permission
- Problèmes de configuration des locataires
Erreurs d'API
- Échecs des demandes d'API de graphes
- Limitation du débit
- Indisponibilité du service
Erreurs de validation
- Arguments non valides
- Paramètres requis manquants
- Inadéquation des types
Erreurs d'exécution
- Problèmes de réseau
- Problèmes de délai d'attente
- Contraintes de ressources
Exemple de réponse à une erreur :
{"error" : {"code" : "InvalidParams", "message" : "Invalid role assignment arguments", "details" : { "parameter" : "userIds", "constraint" : "Doit avoir entre 2 et 8 utilisateurs", "received" : "1 user" } } }
Test
- Exécutez les tests unitaires :
npm test
- Exécution des tests d'intégration :
npm run test:integration
- Exécuter les tests de conformité :
npm run test:compliance
Considérations sur la sécurité
Authentification
- Utiliser un stockage sécurisé des jetons
- Mise en œuvre de la rotation des jetons
- Surveiller les activités suspectes
Accès à l'API
- Suivre le principe du moindre privilège
- Audits réguliers des autorisations
- Contrôler l'utilisation de l'API
Protection des données
- Pas d'enregistrement de données sensibles
- Stockage sécurisé de la configuration
- Analyses de sécurité régulières
Conformité
- Contrôles de conformité réguliers
- Vérification automatisée des politiques
- Journalisation des audits
Contribuer
- Créer une branche dans le référentiel
- Créer une branche de fonctionnalités
- Effectuez vos modifications
- Exécuter des tests
- Soumettre une demande d'extraction
Lignes directrices :
- Suivre le style du code existant
- Ajouter des tests pour les nouvelles fonctionnalités
- Mettre à jour la documentation
- Garder les commits atomiques
Licence
MIT