
Un script de PowerShell que automatiza la evaluación de seguridad de entornos de Microsoft 365.

Avanzar el estado de la seguridad de Microsoft 365 mediante la creación de un script de PowerShell que automatice la evaluación de seguridad de los entornos de Microsoft 365.
Soteria Inspect nace del proyecto 365Inspect y es la solución SaaS de Soteria para ayudar a evaluar la seguridad de un inquilino de Microsoft 365 con más de 200 puntos de inspección en todo el conjunto completo de servicios de Microsoft 365.
Soteria Inspect para Microsoft 365 permite a los clientes realizar un seguimiento de los cambios en los objetos afectados de cada hallazgo a lo largo del tiempo, así como de los esfuerzos de remediación, y ahora incluye multiinquilinato para MSP y organizaciones matrices para mantener el pulso de sus inquilinos secundarios.
Soteria Inspect para Microsoft 365 está disponible directamente a través de Soteria o a través de Azure Marketplace
Consulte todas nuestras ofertas de Soteria Inspect para Microsoft 365

365Inspect Community Edition requiere los módulos administrativos de PowerShell para la administración de Exchange, Microsoft Graph, Microsoft Teams y el módulo de administración de SharePoint.
365Inspect ahora es compatible con PowerShell Core (6+) y requiere un sistema operativo Microsoft Windows debido a las dependencias de módulos necesarias.
El script de PowerShell 365Inspect.ps1 validará los módulos instalados y la versión mínima de los módulos necesarios para que los Inspectores funcionen.
Si no tiene estos módulos instalados, se le pedirá que los instale y, con su aprobación, el script intentará la instalación. De lo contrario, debería poder instalarlos con los siguientes comandos en un símbolo del sistema de PowerShell administrativo, o siguiendo las instrucciones en las referencias a continuación:
Install-Module -Name ExchangeOnlineManagement -AllowClobber -Force
Install-Module -Name PnP.PowerShell -AllowClobber -Force
Install-Module -Name Microsoft.Graph -AllowClobber -Force
Install-Module -Name MicrosoftTeams -AllowClobber -Force
Instalar Exchange Online PowerShell
Instalar el módulo de PowerShell de PnP de SharePoint
Una vez instalados los anteriores, descargue la carpeta del código fuente de 365Inspect desde Github usando su navegador o usando git clone.
A partir del 9 de septiembre de 2024, PnP.PowerShell requiere que los administradores de inquilinos registren su propia aplicación para usar con el servicio SharePoint/PnP. Consulte la siguiente documentación de PnP.PowerShell para los pasos necesarios. Registrar una aplicación de Entra ID para usar con PnP PowerShell Determinar permisos Autenticación
NOTA: Si está utilizando PowerShell 5.1, PnP PowerShell ya no es compatible y todos los Inspectores de SharePoint serán excluidos en tiempo de ejecución.
Hay un comando que se puede ejecutar para automatizar este paso.```powershell Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "PnP Rocks" -Tenant [yourtenant].onmicrosoft.com -Interactive
__¡Recuerda el nombre o el ID de Aplicación/Cliente de la aplicación que se creó. Esto ahora es necesario para autenticarse y se te solicitará el AppID!__
# Compatibilidad de Módulos
Actualmente, los módulos Microsoft.Graph y Microsoft.Graph.Beta versión 2.23.0 son incompatibles con ExchangeOnlineManagement versión 3.5.1.
Las siguientes versiones son compatibles:
- Microsoft.Graph versión 2.21.1
- Microsoft.Graph.Beta versión 2.21.1
- ExchangeOnlineManagement versión 3.5.0
Se pueden usar los siguientes comandos para instalar versiones compatibles:```powershell
Install-Module -Name Microsoft.Graph -Scope CurrentUser -RequiredVersion 2.21.1 -AllowClobber -Force
Install-Module -Name Microsoft.Graph.Beta -Scope CurrentUser -RequiredVersion 2.21.1 -AllowClobber -Force
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -RequiredVersion 3.5.0 -AllowClobber -Force
Como ejecutará 365Inspect con privilegios administrativos, debe colocarlo en una ubicación lógica y asegurarse de que el contenido de la carpeta sea legible y escribible solo por el usuario administrador. Esto es especialmente importante si planea instalar 365Inspect en una ubicación donde se ejecutará con frecuencia o se usará como parte de un proceso automatizado. NOTA: 365Inspect no necesita ejecutarse en una ventana de PowerShell administrativa para funcionar.
Para ejecutar 365Inspect, abra una consola de PowerShell y navegue hasta la carpeta donde descargó 365Inspect:
cd 365Inspect
Interactuará con 365Inspect ejecutando el script principal, 365Inspect.ps1, desde el símbolo del sistema de PowerShell.
Todo lo que 365Inspect requiere para inspeccionar su tenant de M365 es acceso a través de una cuenta de M365 con los permisos adecuados, por lo que la mayoría de los parámetros de línea de comandos se relacionan con la organización que se evalúa y el método de autenticación.
La ejecución de 365Inspect se ve así:
.\365Inspect.ps1 -OutPath <valor> -UserPrincipalName [email protected] -Auth <MFA|DEVICE|ALREADY_AUTHED|APP> -pnpPowerShellApplicationId <Su ID de aplicación/cliente de PnP PowerShell>
Por ejemplo, para iniciar sesión ingresando sus credenciales en un navegador con soporte MFA:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA
Para iniciar sesión en una implementación gubernamental o de nube nacional (China, Alemania, etc.), el parámetro -Environment debe especificarse de la siguiente manera:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -Environment USGovGCCHigh
Los argumentos válidos para -Environment son:
La autenticación de aplicación se puede lograr ejecutando el script con los siguientes parámetros:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP
Para iniciar sesión en una implementación gubernamental o de nube nacional (China, Alemania, etc.), el parámetro -Environment debe especificarse de la siguiente manera:
A medida que 365Inspect se ejecuta, imprimirá constantemente actualizaciones de estado que indican qué tarea de inspección se está ejecutando.
365Inspect puede tardar un tiempo en ejecutarse. Este tiempo escala con el tamaño y la complejidad del entorno bajo prueba. Por ejemplo, algunas tareas de inspección implican escanear la configuración de la cuenta de todos los usuarios. Esto puede ocurrir casi al instante para una organización con 50 usuarios, o podría llevar minutos enteros (!) para una organización con 10000.
365Inspect crea el directorio especificado en el parámetro out_path. Este directorio es el resultado de toda la inspección de 365Inspect. Contiene cuatro elementos de interés:
Debido a la naturaleza de algunos de los elementos devueltos, el informe CSV está delimitado por el carácter de caret (^). Se recomienda abrir el informe CSV en un editor de texto en lugar de Excel, ya que Excel usa de forma predeterminada un delimitador de coma (,) y mostrará el informe incorrectamente. Una vez abierto en un editor de texto, los datos pueden pegarse en Excel.
Soporte para autenticación de dispositivo
Soporte para implementaciones de nube nacional
365Inspect ahora admite autenticación de aplicación
El formato del informe HTML de 365Inspect ha cambiado



365Inspect no puede funcionar correctamente a menos que la cuenta de M365 con la que se autentica tenga los privilegios adecuados. 365Inspect requiere, como mínimo, lo siguiente:
Somos conscientes de que estos son roles extremadamente permisivos; desafortunadamente, debido al uso de Microsoft Graph, Microsoft nos restringe el uso de privilegios menores. Los roles de Administrador de aplicaciones y Administrador de aplicaciones en la nube (utilizados para otorgar permisos delegados y de aplicación) tienen restricciones para otorgar permisos para los módulos de PowerShell de Microsoft Graph o Azure AD. Documentos de Microsoft: Administrador de aplicaciones
Si ejecuta 365Inspect utilizando el parámetro de autenticación de aplicación, se deben otorgar roles adicionales para permitir que la aplicación realice todas las tareas ejecutadas. Consulte Requisitos de autenticación de aplicación
Antes de que se pueda utilizar 365Inspect, todos los demás componentes necesarios deben estar en su lugar.
Para el uso más eficiente del tiempo, se recomienda realizar las funciones necesarias en el siguiente orden:
Consulte las siguientes referencias:
365Inspect está diseñado para ser fácil de expandir, con la esperanza de que permita a individuos y organizaciones utilizar sus propios módulos de 365Inspect internamente, o publicar esos módulos para la comunidad de M365.
Todos los módulos de inspección de 365Inspect se almacenan en la carpeta .\inspectors.
Es simple crear un módulo de inspección. Los inspectores tienen dos archivos:
Las plantillas se incluyen en la carpeta Templates. Simplemente agregue su código y valores en las ubicaciones respectivas. Los nombres de archivo de PowerShell y JSON deben ser idénticos para que 365Inspect reconozca que los dos pertenecen juntos. Hay numerosos ejemplos en el conjunto de módulos integrados de 365Inspect, pero pondremos un ejemplo aquí también.
# If some of the parsed M365 objects were found to have the security flaw this module is inspecting for,
# return a list of strings representing those objects. This is what will end up as the "Affected Objects"
# field in the report.
If ($safe_attachment_bypass_rules.Count -ne 0) {
return $safe_attachment_bypass_rules
}
# If none of the parsed M365 objects were found to have the security flaw this module is inspecting for,
# returning $null indicates to 365Inspect that there were no findings for this module.
return $null
}
return Inspect-BypassingSafeAttachments
</details>
<details>
<summary>Ejemplo de archivo .json, BypassingSafeAttachments.json:</summary>```json
{
"FindingName": "Do Not Bypass the Safe Attachments Filter",
"Description": "In Exchange, it is possible to create mail transport rules that bypass the Safe Attachments detection capability. The rules listed above bypass the Safe Attachments capability. Consider reviewing these rules, as bypassing the Safe Attachments capability even for a subset of senders could be considered insecure depending on the context or may be an indicator of compromise.",
"Remediation": "Navigate to the Mail Flow → Rules screen in the Exchange Admin Center. Look for the offending rules and begin the process of assessing who created them and whether they are necessary to the continued function of the organization. If they are not, remove the rules.",
"DefaultValue": "None",
"ExpectedValue": "None",
"Impact": "Critical",
"AffectedObjects": "",
"Service": "Exchange", // Valid values are Exchange, SharePoint, Teams, Intune, AzureAD, SecurityandCompliance, Tenant //
"PowerShell": "", // Any PowerShell remediation command examples should be placed here //
"References": [
{
"Url": "https://docs.microsoft.com/en-us/exchange/security-and-compliance/mail-flow-rules/manage-mail-flow-rules",
"Text": "Manage Mail Flow Rules in Exchange Online"
},
{
"Url": "https://www.undocumented-features.com/2018/05/10/atp-safe-attachments-safe-links-and-anti-phishing-policies-or-all-the-policies-you-can-shake-a-stick-at/#Bypass_Safe_Attachments_Processing",
"Text": "Undocumented Features: Safe Attachments, Safe Links, and Anti-Phishing Policies"
}
]
}
Una vez que coloques estos dos archivos en la carpeta .\inspectors, se considerarán parte del inventario de módulos de 365Inspect y se ejecutarán la próxima vez que ejecutes 365Inspect.
¡Acabas de crear el módulo BypassingSafeAttachments Inspector! ¡Eso es todo!
365Inspect lanzará un error bastante llamativo y feo si algo en tu módulo no funciona o no sigue las convenciones de 365Inspect, así que supervisa la salida de la línea de comandos.
¡Fomentamos la participación y las contribuciones de la comunidad! Por favor, consulta nuestras Directrices de contribución
365Inspect es un conjunto de scripts que ejecuta otros módulos de script de inspección almacenados en la carpeta .\inspectors. Al igual que con cualquier otro script que puedas ejecutar con privilegios elevados, debes observar ciertas prácticas de higiene de seguridad:
Soteria ofrece una amplia gama de soluciones de seguridad y asesoramiento, que incluyen Incident Response, Managed Detection and Response, Security Assessments, Penetration Testing y más. ¡Contáctanos para todas tus necesidades!
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth APP -Environment USGovGCCHigh
Los argumentos válidos para -Environment son:
NOTA: Existen requisitos previos para la ejecución de 365Inspect con autenticación de aplicación. Vaya a Requisitos de autenticación de aplicación
365Inspect ahora admite la salida de informes en formato HTML (valor predeterminado), CSV y XML.
Por ejemplo, se pueden generar informes CSV llamando al parámetro -ReportType:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -ReportType CSV
365Inspect se puede ejecutar solo con módulos Inspector específicos o, por el contrario, excluyendo módulos específicos.
Por ejemplo, para iniciar sesión ingresando sus credenciales en un navegador con soporte MFA:
.\365Inspect.ps1 -OutPath ..\365_report -UserPrincipalName [email protected] -Auth MFA -SelectedInspectors inspector1, inspector2
o
.\365Inspect.ps1 -OutPath ..\365_report -Auth MFA -ExcludedInspectors inspector1, inspector2, inspector3
Para desglosar los parámetros más a fondo:
OutPath es la ruta a una carpeta donde se colocará el informe generado por 365Inspect.
Auth es un selector que debe ser uno de los valores literales "MFA" o "ALREADY_AUTHED".
SelectedInspectors es el nombre o los nombres del inspector o inspectores que desea ejecutar con 365Inspect. Si se seleccionan varios inspectores, deben estar separados por comas. Solo se ejecutarán los inspectores nombrados.
ExcludedInspectors es el nombre o los nombres del inspector o inspectores que desea evitar que se ejecuten con 365Inspect. Si se seleccionan varios inspectores, deben estar separados por comas. Se ejecutarán todos los módulos excepto los módulos incluidos.
UserPrincipalName - UserPrincipalName del evaluador, esto se incluye para reducir la cantidad de veces que necesita ingresar credenciales en los módulos compatibles.
ReportType - Formato de salida del informe generado. Los valores admitidos actualmente son HTML (predeterminado), CSV y XML.
Environment - Especifique la instancia de Azure Cloud a la que conectarse para tenants de Microsoft 365 no estándar/de consumo.
Cuando ejecuta 365Inspect con -Auth MFA, puede mostrar varias ventanas de inicio de sesión gráficas en las que debe iniciar sesión secuencialmente. Este es un comportamiento normal, ya que Exchange, SharePoint, etc., tienen módulos de administración separados y cada uno requiere una sesión de inicio de sesión diferente. Si simplemente inicia sesión la cantidad de veces solicitada, 365Inspect debería comenzar a ejecutarse. Esto es todo lo contrario a divertido y estamos buscando una solución alternativa, pero no hace falta decir que creemos que los resultados valen el minuto que se pasa mirando códigos MFA.