Búsqueda de sitios web

Informes de capacidades de dominio externo


Uso de listas de permitidos y listas de bloqueo para proteger el acceso externo

Desde cero, Microsoft 365 está diseñado para facilitar la colaboración, tanto interna como externa, para los usuarios finales. Que eso sea algo bueno depende de la actitud de una organización hacia el intercambio de datos y la colaboración externa. Una cosa clara es la importancia de comprender las capacidades de colaboración externa, particularmente cuando se evalúan opciones para combatir el uso compartido excesivo o las posibles vulnerabilidades.

Controlar qué dominios externos permite es clave para controlar con qué dominios externos pueden comunicarse los usuarios y el nivel de colaboración permitido. Microsoft proporciona un conjunto de herramientas (como las listas de permisos de acceso externo de Teams) para ayudar a los administradores a aplicar la gobernanza a nivel de dominio. Sin embargo, no existe un panel único para ver el estado general de un dominio externo y validar la configuración de cada carga de trabajo puede llevar mucho tiempo.

Para facilitar los informes de la configuración de dominios externos en un inquilino, creé un script de PowerShell para extraer detalles sobre las configuraciones de carga de trabajo para un inquilino de Microsoft 365. El script (disponible en GitHub) genera un informe que detalla los ajustes de configuración para cada dominio en las siguientes áreas:

  • TenantID: si el dominio tiene un inquilino de Entra ID asociado, este campo contiene el TenantID de ese inquilino.
  • Dominio: el nombre del dominio.
  • Invitaciones de invitados: si las invitaciones de invitados B2B están permitidas o bloqueadas según la configuración de identidades externas de Entra ID. Si el dominio no está configurado en la configuración, el valor será Predeterminado de organización. La configuración predeterminada de la organización se enumera en la entrada del dominio Default en la salida.
  • TeamsFederation: si el chat externo de Teams está permitido o bloqueado según la configuración de acceso externo de Teams. Si el dominio no está configurado en la configuración, el valor será Predeterminado de organización. La configuración predeterminada de la organización se enumera en la entrada del dominio Default en la salida.
  • SharePointSharing: si se permite o bloquea el uso compartido externo de SharePoint según la configuración de la política de uso compartido externo de SharePoint. Si el dominio no está configurado en la configuración, el valor será Predeterminado de organización. La configuración predeterminada de la organización se enumera en la entrada del dominio Default en la salida.
  • B2BCrossTenantAccessInbound: si hay una configuración de acceso entrante entre inquilinos para un dominio, este valor detalla la configuración tanto para usuarios como para grupos. Este valor describe si el acceso está permitido o bloqueado tanto para usuarios como para grupos y si se especifican todos los usuarios/todos los grupos o si se especifican usuarios seleccionados/grupos seleccionados. Si el dominio no está configurado en la configuración, el valor será Predeterminado de organización. La configuración predeterminada de la organización se enumera en la entrada del dominio Default en la salida.
  • B2BCrossTenantAccessOutbound: si hay una configuración de acceso saliente entre inquilinos para un dominio, este valor detalla la configuración tanto para usuarios como para grupos. Este valor describe si el acceso está permitido o bloqueado tanto para usuarios como para grupos y si se especifican todos los usuarios/todos los grupos o si se especifican usuarios seleccionados/grupos seleccionados. Si el dominio no está configurado en la configuración, el valor será Predeterminado de organización. La configuración predeterminada de la organización se enumera en la entrada del dominio Default en la salida.
  • B2BDirectConnectInbound: si hay una configuración de Direct Connect entrante para el dominio, este valor detalla la configuración tanto para usuarios como para grupos. Este valor describe si el acceso está permitido o bloqueado tanto para usuarios como para grupos y si se especifican todos los usuarios/todos los grupos o si se especifican usuarios seleccionados/grupos seleccionados. Si el dominio no está configurado en la configuración, el valor será Predeterminado de organización. La configuración predeterminada de la organización se enumera en la entrada del dominio Default en la salida.
  • B2BDirectConnectOutbound: si hay una configuración de Direct Connect saliente para el dominio, este valor detalla la configuración tanto para usuarios como para grupos. Este valor describe si el acceso está permitido o bloqueado tanto para usuarios como para grupos y si se especifican todos los usuarios/todos los grupos o si se especifican usuarios seleccionados/grupos seleccionados. Si el dominio no está configurado en la configuración, el valor será Predeterminado de organización. La configuración predeterminada de la organización se enumera en la entrada del dominio Default en la salida.
  • CrossTenantSyncEnabled: si la sincronización entre inquilinos está habilitada o deshabilitada para el dominio, si no hay una política para el dominio, este valor mostrará N/A. No existe una configuración predeterminada de la organización para esta configuración.
  • TrustSettings: si hay configuraciones de confianza configuradas para el dominio, este valor enumera las configuraciones confiables configuradas (dispositivos compatibles, MFA y dispositivos administrados por Intune). Si no hay ninguna política para el dominio, este valor mostrará N/A. No existe una configuración predeterminada de la organización para esta configuración.
  • Redempción automática: si el canje automático de invitaciones está habilitado o deshabilitado para el dominio. Si no hay ninguna política para el dominio, este valor mostrará N/A. No existe una configuración predeterminada de la organización para esta configuración.

El script captura los ajustes de configuración para los dominios y se captura en un archivo de exportación CSV para brindar una descripción general de fácil acceso de los dominios externos (Figura 1).

Preparándose para correr

En el script, utilizo dos módulos de PowerShell diferentes. La mayor parte del trabajo pesado lo realiza el SDK de Microsoft Graph PowerShell. El segundo módulo es el módulo MicrosoftTeams PowerShell. Esto es necesario debido a una limitación con la API de Microsoft Graph donde actualmente no es posible recuperar la configuración de la lista de bloqueo y permiso de acceso externo de Teams.

A medida que el script se ejecuta de forma interactiva, se utilizan permisos delegados de Microsoft Graph. El código se puede adaptar para que funcione de forma no interactiva (usando permisos de aplicación), como a través de Azure Automation, como se explica aquí. Los permisos delegados requieren que la cuenta que utiliza para iniciar sesión tenga acceso a los ajustes de configuración. Para garantizar que la cuenta tenga los permisos correctos, recomiendo asignar como mínimo la función de "Lector global" a la cuenta con la que ejecuta el script.

Charla TEC: Ataques basados en AD en 2023 - Lo que hemos aprendido hasta ahora - 25 de julio a las 11 a. m. EST

Escuche lo que Paul Robichaux y Bryan Patton tienen que decir sobre las configuraciones incorrectas de AD, las vulnerabilidades y el fortalecimiento de las defensas de AD de su organización.

Uso de PowerShell para recuperar la configuración del inquilino

Como mencioné, hay bastantes lugares de donde extraer información para compilar este informe. El script contiene una gran cantidad de lógica para compilar el informe, pero los pasos básicos que se siguen son:

  • Conéctese a Microsoft Graph y Teams
  • Obtenga la configuración de la Política de Gestión B2B
  • Obtenga la configuración de la política de uso compartido externo de SharePoint Online
  • Obtenga la configuración de la federación de acceso externo de Teams
  • Obtenga el ID de inquilino de cada dominio descubierto (si existe)
  • Obtenga las políticas de acceso entre inquilinos

Conexión a Microsoft Graph y Teams PowerShell

El primer paso que sigue el script es conectarse al inquilino con los módulos Microsoft Graph SDK (versión 2) y Teams PowerShell. El script también utiliza varias consultas que solo están disponibles en el punto final "beta". Como el SDK de Microsoft Graph PowerShell ahora viene en dos módulos distintos para los puntos finales V1.0 y Beta, asegúrese de tener instalado el módulo actualizado, particularmente el módulo "Beta". Esto es necesario para obtener la configuración de la política de acceso entre inquilinos que aún no está disponible en el punto final v1.0. El siguiente código inicia la conexión a Teams y recupera un token de acceso para Microsoft Graph:

##Connect to MG Graph and Teams
Connect-MgGraph -Scopes "IdentityProvider.Read.All policy.read.all CrossTenantInformation.ReadBasic.All SharePointTenantSettings.Read.All"
Connect-MicrosoftTeams

Los ámbitos de permiso necesarios para ejecutar el script son:

  • IdentityProvidor.Read.All: para devolver los detalles de la política de gestión B2B.
  • Policy.Read.All: para devolver los detalles de la política de Entra ID.
  • CrossTenantInformation.ReadBasic.All : para devolver detalles de la política de acceso entre inquilinos.
  • SharePointTenantSettings.Read.All: para devolver la configuración del inquilino de SharePoint.

Durante la conexión, hay dos mensajes de autenticación (uno para Graph y otro para Teams).

Obtén la Política de Gestión B2B

La Política de gestión B2B contiene la configuración para las identidades externas de Entra ID. Una nota importante aquí es que para obtener esta información, el script utiliza el cmdlet Invoke-MgGraphRequest para consultar el extremo heredado/de políticas. Este es actualmente el único método para recuperar esta información a través de Graph API. Si bien no es ideal utilizar un punto final heredado, la alternativa es utilizar el módulo AzureAD PowerShell heredado, que Microsoft retirará en marzo de 2024.

##Get external domains from B2BManagementPolicy
$B2BManagementPolicy = ((Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/legacy/policies").value.definition | convertfrom-json).b2bmanagementpolicy
$allowedGuestDomains = $B2BManagementPolicy.InvitationsAllowedAndBlockedDomainsPolicy.alloweddomains
$blockedGuestDomains = $B2BManagementPolicy.InvitationsAllowedAndBlockedDomainsPolicy.blockeddomains

Obtenga la política de uso compartido externo de SharePoint Online

El siguiente paso es obtener la configuración de uso compartido externo desde la configuración del inquilino de SharePoint Online. La configuración de inquilinos de SharePoint Online estuvo disponible recientemente a través de la API de Microsoft Graph. Todavía no hay ningún cmdlet en el SDK de Graph PowerShell para esto, por lo que el URI se pasa al cmdlet Invoke-MgGraphRequest como se muestra a continuación.

##Get SharePoint Online Tenant Settings
$Uri = "https://graph.microsoft.com/beta/admin/sharepoint/settings"
$SPOSettings = Invoke-MgGraphRequest -Uri $Uri -Method Get

Obtenga la configuración de dominios externos de Teams

Actualmente, la configuración de los dominios externos de Teams no se puede recuperar mediante la API de Microsoft Graph. Para este paso, utilizamos el módulo PowerShell de Microsoft Teams para obtener detalles de la configuración.

##Get external domains from TeamsFederationConfiguration
$TeamsFederationSettings = Get-CsTenantFederationConfiguration

Con suerte, estos datos estarán disponibles a través de Graph API algún día y el módulo Teams se podrá eliminar de este script, pero al crear informes como este, a veces es necesario trabajar con lo que está disponible.

Actualice cada dominio con su ID de inquilino

Aquí es donde las cosas se ponen interesantes. Hasta ahora, cada punto final devuelve una lista de nombres de dominio que se pueden agregar fácilmente a la salida. Sin embargo, para las pólizas entre inquilinos, devuelven una identificación de inquilino. Para asegurarse de que el resultado sea relativamente limpio y evite entradas duplicadas, el script extrae el ID de inquilino de cada dominio descubierto hasta el momento y lo agrega al resultado. Esto significa que el ID de inquilino se puede utilizar para comprobar si existe un dominio en una de las configuraciones anteriores y actualizar el resultado en consecuencia.

Para hacer esto, el script recorre cada dominio en la matriz de objetos de exportación y consulta el punto final findTenantInformationByDomain para obtener el ID de inquilino asociado para ese dominio.

##Update Tenant IDs for all existing domains

foreach ($domain in $domainSettingsObjectArray) {
    Try {
        $tenantID = (Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/tenantRelationships/findTenantInformationByDomainName(domainName='$($domain.Domain)')").tenantID
        $domain.tenantID = $tenantID
    }
    Catch {
        $tenantID = "N/A"
    }
    $domain.tenantID = $tenantID
}

Obtenga detalles de la política entre inquilinos

Finalmente, el script consulta las políticas multiinquilino predeterminadas y no predeterminadas. Los cmdlets Get-MgBetaPolicyCrossTenantAccessPolicyDefault y Get-MgBetaPolicyCrossTenantAccessPolicyPartner devuelven la información necesaria para documentar la configuración de las políticas entre inquilinos en el inquilino.

##Get Cross Tenant Policy Defaults
$DefaultCrossTenantPolicy = Get-MgBetaPolicyCrossTenantAccessPolicyDefault
##Get Cross Tenant Policies for Partner Domains
[array]$CrossTenantPartnerPolicies = Get-MgBetaPolicyCrossTenantAccessPolicyPartner

Una nota importante sobre las políticas entre inquilinos es que cada una se enumera por ID de inquilino. El script utiliza el punto final findTenantInformationByTenantId para buscar el dominio asociado con la política entre inquilinos. El punto final findTenantInformationByTenantId solo devuelve el dominio de inquilino predeterminado. Si el ID del inquilino coincide con cualquier dominio obtenido en cualquier otro paso, también se actualizará. Si hay otros dominios asociados con el ID de inquilino que no han sido identificados mediante otros pasos, no se mostrarán en el informe.

Revisar el resultado

La salida en el script se maneja de dos maneras: la primera es simplemente enviar los resultados a la pantalla en formato de lista y la segunda es exportar el archivo de salida a la carpeta C:\temp. El resultado de la pantalla es bueno para una descripción general rápida, como se muestra en la Figura 2.

El archivo de salida es útil para comparar cambios de configuración a lo largo del tiempo o para revisar resultados más grandes. Los elementos enumerados en el resultado se basan en el valor de configuración para cada dominio.

Entendiendo su configuración

Ya sea que su organización vea la colaboración externa como un riesgo o un beneficio, es importante comprender exactamente lo que ha configurado. Con las numerosas configuraciones disponibles para controlar diferentes aspectos del intercambio y la colaboración externos, es fácil perder de vista las capacidades de cada dominio. Por ejemplo, no es raro que los administradores permitan que Teams chatee con un socio externo solo para descubrir que los usuarios no pueden compartir archivos en el chat. Este tipo de situación a menudo necesita que alguien localice dónde está el problema y averigüe a qué lista se debe agregar el dominio.

Tener procesos sólidos en torno a la administración diaria es clave para garantizar que los datos de su inquilino no se filtren inadvertidamente. Este script no reemplaza la administración diaria, pero documenta la configuración de colaboración externa de la carga de trabajo y, con suerte, ahorra tiempo. Como siempre, se pueden realizar mejoras y agregar funciones adicionales. A medida que las cosas evolucionen dentro de Microsoft 365, sin duda habrá más que agregar a un informe como este.

Artículos relacionados