Actualizaciones del dominio de acceso externo de Teams con PowerShell
Bloquee el chat entrante malicioso con la lista de permitidos de acceso externo
En mi artículo sobre el ataque de prueba de concepto GIFShell para comprometer los datos de Teams, dije que una manera fácil de detener la llegada de mensajes de chat no deseados de inquilinos desconocidos que podrían ser el punto de entrada para los atacantes era crear una lista de permitidos para acceso externo. Si existe una lista de permitidos, Teams solo aceptará mensajes de chat entrantes de dominios en la lista de permitidos.
Normalmente, los inquilinos administran el acceso externo a través de la sección Usuarios del centro de administración de Teams. Allí es fácil agregar o eliminar dominios de la lista de permitidos. Sin embargo, eso supone que sabes qué dominios agregar o eliminar. Y esa es la pregunta que surgió del artículo: ¿cómo se puede saber qué dominios deberían estar en la lista de permitidos?
Mi instinto es utilizar como guía el conjunto de cuentas de invitados que ya están presentes en el inquilino. Después de todo, si ha permitido que alguien de otro inquilino se convierta en una cuenta de invitado en su inquilino, es razonable suponer que también está dispuesto a aceptar mensajes de chat entrantes de ese dominio. Si no lo hace, los invitados pueden participar en conversaciones de canal y chats que comenzaron antes de que se impusiera una restricción, pero no pueden iniciar nuevos chats desde su inquilino con personas de su inquilino.
Pasos para actualizar la configuración de acceso externo de Teams
Si aceptamos que las cuentas de invitado son una buena base para controlar el acceso externo, podemos usar PowerShell para:
- Encuentra a todos los invitados en el inquilino.
- Extraiga el dominio de la dirección de correo electrónico de cada cuenta de invitado.
- Cree una lista de dominios a partir de los extraídos de las cuentas de invitados.
- Obtenga la configuración de acceso externo actual para Teams.
- Busque los dominios que aún no están incluidos en la configuración de acceso externo.
- Actualice la configuración de acceso externo con los dominios que faltan.
Cada inquilino manejará los detalles de cómo se realiza este procesamiento a su manera, pero los comandos básicos siguen siendo los mismos. Aquí está el código que creé para hacer el trabajo. Puede descargar la última versión del script desde GitHub.
Connect-MgGraph -NoWelcome -Scopes User.Read.All
[array]$Guests = Get-MgUser -All -Filter "usertype eq 'Guest'"
Write-Host ("{0} guest accounts found" -f $Guests.Count)
$GuestList = [System.Collections.Generic.List[Object]]::new()
ForEach ($Guest in $Guests) {
$Domain = $Guest.Mail.Split("@")[1]
$ReportLine = [PSCustomObject][Ordered]@{
Guest = $Guest.Mail
Domain = $Domain
Name = $Guest.DisplayName }
$GuestList.Add($ReportLine)
}
Write-Host ""
Write-Host "Guest accounts found for the following domains"
Write-Host "----------------------------------------------"
$GuestList | Group-Object Domain | Sort-Object Name | Select-Object Name, Count
$Domains = $GuestList | Sort-Object Domain -Unique | Select-Object -ExpandProperty Domain
Write-Host "Connecting to Microsoft Teams to check current external access configuration"
Connect-MicrosoftTeams
# Get current set of domains configured for Teams extrenal access
$DomainConfiguration = Get-CsTenantFederationConfiguration | Select-Object -ExpandProperty AllowedDomains
# Check the set of domains that aren't in the current configuration
[array]$DomainsToAdd = $Domains | Where-Object {$_ -notin $DomainConfiguration.AllowedDomain.Domain}
$Prompt = "Do you want to add the following domains to the list allowed for Teams external access? " + $DomainsToAdd -join ", "
$Choice = Read-Host $Prompt
If (($Choice.ToUpper()) -eq "Y") {
$i = 0
ForEach ($Domain in $DomainsToAdd) {
$i++
Write-Host ("Adding {0} to the allowed domains list... ({1}/{2})" -f $Domain, $i, $DomainsToAdd.Count)
Set-CsTenantFederationConfiguration -AllowedDomainsAsAList @{Add=$Domain} -ErrorAction SilentlyContinue
}
$DomainConfiguration = Get-CsTenantFederationConfiguration | Select-Object -ExpandProperty AllowedDomains
Write-Host ("External access for Teams now includes {0} domains" -f $DomainConfiguration.AllowedDomain.Domain.count)
}
La lista blanca de dominios de acceso externo puede albergar aproximadamente 4000 entradas.
Módulos PowerShell necesarios
El código es sencillo y utiliza el cmdlet Get-MgUser del SDK de Microsoft Graph PowerShell para buscar el conjunto de cuentas de invitado y cmdlets del módulo de PowerShell de Microsoft Teams para recuperar y actualizar la configuración de acceso externo. Ambos módulos están en desarrollo activo y Microsoft publica nuevas versiones aproximadamente cada mes. Es mejor utilizar la última versión para asegurarse de no tener problemas solucionados en la versión actual.
Aparte de eso, los únicos cmdlets utilizados son cmdlets básicos de PowerShell como Group-Object, Sort-Object y Select-Object. En otras palabras, nada de magia negra ni códigos complicados.
La desventaja de las listas de bloqueo
La desventaja de cualquier lista de bloqueo es que interrumpen la comunicación. Incluso después de permitir todos los dominios de los que proviene una cuenta de invitado, es posible que los usuarios se sientan frustrados al no poder comunicarse con otros contactos. Quizás necesite un método que permita a los usuarios solicitar la adición de un nuevo dominio (después de verificar) a la configuración de acceso externo de Teams. Te dejo ese debate a ti.
Conozca a Tony Redmond y otros MVP de Microsoft en la Conferencia de Expertos 2022, del 6 al 7 de diciembre.
100% Gratis y Virtual. ¡No querrás perderte el evento de formación del año de Microsoft!