Servidor MCP CISA M365
Un servidor de Protocolo de Contexto de Modelo (MCP) que implementa los controles de seguridad de la Directiva Operativa Vinculante 25-01 de CISA para Microsoft 365 (Azure AD/Entra ID).
Contenido
- Descripción general
- Controles de seguridad
- Arquitectura
- Requisitos previos
- Instalación
- Configuración
- Utilización
- Referencia API
- Tratamiento de errores
- Pruebas
- Consideraciones de seguridad
- Contribución
- Licencia
Descripción general
Este servidor MCP proporciona herramientas para configurar y administrar los ajustes de seguridad de Microsoft 365 de acuerdo con los requisitos de BOD 25-01. Se integra con Microsoft Graph API para aplicar controles de seguridad, supervisar el cumplimiento y proporcionar informes detallados.
Características principales
- Controles de autenticación heredados
- Controles de acceso basados en riesgos
- Gestión de autenticación multifactor
- Controles de registro y consentimiento de aplicaciones
- Gestión de políticas de contraseñas
- Gestión de funciones privilegiadas
- Aplicación de cuentas sólo en la nube
- Integración de sistemas PAM
- Informes exhaustivos sobre el cumplimiento de normativas
- Autenticación basada en tokens
- Validación de argumentos segura
- Gestión de errores y registro detallados
Controles de seguridad
MS.AAD.1.1v1
Fecha de vencimiento: 20/06/2025
Bloquea la autenticación heredada:
- Desactiva los protocolos de autenticación heredados
- Reduce la superficie de ataque
- Mejora la postura de seguridad
Detalles de implementación:
await graphClient .api('/policies/authenticationMethodsPolicy') .patch({ allowLegacyAuthentication: false, blockLegacyAuthenticationMethods: true, })
MS.AAD.2.1v1 y MS.AAD.2.3v1
Fecha de vencimiento: 20/06/2025
Bloquear usuarios e inicios de sesión de alto riesgo:
- Bloquea usuarios detectados como de alto riesgo
- Bloquea los inicios de sesión detectados como de alto riesgo
- Aprovecha la información sobre amenazas de Microsoft
Detalles de implementación:
await graphClient .api('/policies/identitySecurityDefaultsEnforcementPolicy') .patch({ blockHighRiskUsers: true, riskLevelForBlocking: 'high', })
MS.AAD.3.1v1, MS.AAD.3.2v1, MS.AAD.3.3v1
Fecha de vencimiento: 20/06/2025
Configuración MFA:
- Aplica una AMF resistente a la suplantación de identidad
- Configura métodos MFA alternativos
- Muestra el contexto de inicio de sesión en Microsoft Authenticator
Detalles de implementación:
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
Fecha de vencimiento: 20/06/2025
Controles de aplicaciones:
- Restringe el registro de aplicaciones a los administradores
- Restringe el consentimiento de la aplicación a los administradores
- Configuración del flujo de trabajo de consentimiento del administrador
- Bloquea el consentimiento del propietario del grupo
Detalles de implementación:
await graphClient .api('/policies/applicationRegistrationManagement') .patch({ restrictAppRegistration: true, restrictNonAdminUsers: true, })
MS.AAD.6.1v1
Fecha de vencimiento: 20/06/2025
Política de contraseñas:
- Desactiva la caducidad de contraseñas
- Sigue las mejores prácticas de seguridad modernas
Detalles de implementación:
await graphClient .api('/policies/passwordPolicy') .patch({ passwordExpirationPolicy: { passwordExpirationDays: 0, neverExpire: true, }, })
MS.AAD.7.1v1 a MS.AAD.7.8v1
Fecha de vencimiento: 20/06/2025
Gestión de roles privilegiados:
- Limita el número de administradores globales
- Impone funciones granulares
- Requiere cuentas sólo en la nube
- Impone el uso del sistema PAM
- Configura flujos de trabajo de aprobación
- Establece alertas
Detalles de la implementación:
await graphClient .api('/policies/roleManagementPolicies') .patch({ enforceGranularRoles: true, blockGlobalAdminForGeneralUse: true, requireApprovalForGlobalAdmin: true, })
Arquitectura
Componentes
Clase Servidor
- Gestiona la aplicación del protocolo MCP
- Gestiona el registro y la ejecución de herramientas
- Gestión de errores y registro
Autenticación
- Autenticación basada en token con Microsoft Graph API
- Actualización automática de tokens
- Gestión segura de credenciales
Cliente Graph
- Envoltura alrededor de la API de Microsoft Graph
- Gestión de solicitud/respuesta segura
- Lógica de reintento y gestión de errores
Herramientas
- Control de autenticación heredado
- Gestión de acceso basada en riesgos
- Configuración de MFA
- Control de aplicaciones
- Gestión de políticas de contraseñas
- Gestión de roles
- Configuración de alertas
- Informes sobre el estado de las políticas
Flujo de datos
graph TD A[Cliente MCP] -->|Solicitud| B[Servidor MCP] B -->|Autenticación| C[Token Manager] C -->|Token de acceso| D[Cliente Graph] D -->|Llamadas API| E[Microsoft Graph] E -->|Respuesta| D D -->|Resultados| B B -->|Respuesta| A
Requisitos previos
- Node.js 18.x o superior
- Tenant Microsoft 365 con acceso de administrador
- Aplicación Azure AD con los permisos necesarios
- Policy.ReadWrite.All
- RoleManagement.ReadWrite.All
- User.Read.All
- Application.ReadWrite.All
Instalación
Instalación a través de Smithery
Para instalar CISA M365 MCP Server automáticamente a través de Smithery:
npx -y @smithery/cli install cisa-m365
También puede copiar directamente las configuraciones y definiciones MCP del Directorio de Protocolos de Smithery y agregar el servidor MCP a su configuración Claude o LLM que admita el protocolo MCP.
- Clone el repositorio:
git clone https://github.com/DynamicEndpoints/BOD-25-01-CSA-MCP.git cd cisa-m365
- Instale las dependencias:
npm install
- Construye el servidor:
npm run build
Configuración
Crear aplicación Azure AD:
- Navega a Azure Portal > Azure Active Directory
- Registrar una nueva aplicación
- Añada los permisos de API necesarios
- Crear un secreto de cliente
Configure las variables de entorno:
cp .env.ejemplo .env
Edite el archivo .env
:
TENANT_ID=id-arrendatario CLIENT_ID=id-cliente CLIENT_SECRET=secreto-cliente
- Configure los ajustes de MCP:
{ "mcpServers": { "cisa-m365": { "command": "node", "args": ["path/to/cisa-m365/build/index.js"], "env": { "TENANT_ID": "your-tenant-id", "CLIENT_ID": "tu-id-cliente", "CLIENT_SECRET": "your-client-secret" } } }
Uso
Herramientas disponibles
block_legacy_auth
Bloquea los métodos de autenticación heredados.
{}
block_high_risk_users
Bloquear usuarios detectados como de alto riesgo.
{}
enforce_phishing_resistant_mfa
Aplicar MFA resistente a phishing para todos los usuarios.
{}
configure_global_admins
Configurar la asignación de funciones de administrador global.
{"userIds": ["user1-id", "user2-id"] }
get_policy_status
Obtener el estado actual de todas las políticas de seguridad.
{}
Ejemplo de uso
// Bloquear autenticación heredada const result = await client.callTool('block_legacy_auth', {}); // Obtener estado de políticas const status = await client.callTool('get_policy_status', {})
Referencia API
API de configuración de políticas
interfaz PolicySettings { legacyAuthentication: { blocked: boolean; compliant: boolean; }; highRiskUsers: { blocked: boolean; compliant: boolean; }; mfa: { phishingResistant: boolean; alternativeEnabled: boolean; compliant: boolean; }; applications: { registrationRestricted: boolean; consentRestricted: boolean; compliant: boolean; }; passwords: { expirationDisabled: boolean; compliant: boolean; }; roles: { globalAdminCount: number; granularRolesEnforced: boolean; pamEnforced: boolean; compliant: boolean; }; }
Gestión de errores
El servidor implementa una completa gestión de errores:
Errores de autenticación
- Fallos en la adquisición de tokens
- Problemas de permisos
- Problemas de configuración de inquilinos
Errores de API
- Fallos en la solicitud de Graph API
- Limitación de tarifas
- Indisponibilidad del servicio
Errores de validación
- Argumentos no válidos
- Faltan parámetros obligatorios
- Error de tipo
Errores de ejecución
- Problemas de red
- Problemas de tiempo de espera
- Limitaciones de recursos
Ejemplo de respuesta de error:
{ "error": { "code": "InvalidParams", "message": "Invalid role assignment arguments", "details": { "parameter": "userIds", "constraint": "Debe tener entre 2 y 8 usuarios", "received": "1 user" } }
Pruebas
- Ejecutar pruebas unitarias:
npm test
- Ejecutar pruebas de integración:
npm run test:integration
- Ejecutar pruebas de conformidad:
npm run test:compliance
Consideraciones de seguridad
Autenticación
- Utilice un almacenamiento seguro de tokens
- Rotación de tokens
- Supervisión de actividades sospechosas
Acceso a la API
- Seguir el principio del mínimo privilegio
- Auditorías periódicas de permisos
- Supervisión del uso de la API
Protección de datos
- Sin registro de datos sensibles
- Almacenamiento seguro de la configuración
- Análisis de seguridad periódicos
Conformidad
- Comprobaciones periódicas del cumplimiento
- Verificación automatizada de políticas
- Registro de auditorías
Contribución
- Bifurcar el repositorio
- Crear una rama de características
- Realice sus cambios
- Ejecutar pruebas
- Envíe un pull request
Directrices:
- Siga el estilo de código existente
- Añadir pruebas para las nuevas funciones
- Actualizar la documentación
- Mantener los commits atómicos
Licencia
MIT