Recherche de site Web

Mises à jour du domaine d’accès externe Teams avec PowerShell


Bloquer les discussions entrantes malveillantes avec la liste d'autorisation d'accès externe

Dans mon article sur l'attaque de validation de principe GIFShell visant à compromettre les données Teams, j'ai expliqué qu'un moyen simple d'empêcher les messages de discussion indésirables provenant de locataires inconnus et susceptibles de constituer le point d'entrée des attaquants consistait à créer une liste verte pour les accès externes. Si une liste verte existe, Teams n’acceptera que les messages de discussion entrants provenant des domaines de la liste verte.

En règle générale, les locataires gèrent l’accès externe via la section Utilisateurs du centre d’administration Teams. Il est facile d’y ajouter ou de supprimer des domaines de la liste verte. Cependant, cela suppose que vous sachiez quels domaines ajouter ou supprimer. Et c’est la question qui a découlé de l’article : comment déterminer quels domaines doivent figurer sur la liste verte ?

Mon instinct est d'utiliser l'ensemble des comptes invités déjà présents dans le locataire comme guide. Après tout, si vous avez autorisé une personne d’un autre locataire à devenir un compte invité chez votre locataire, il est raisonnable de supposer que vous êtes également prêt à accepter les messages de discussion entrants provenant de ce domaine. Si vous ne le faites pas, les invités peuvent participer aux conversations de canal et aux discussions qui ont commencé avant qu'une restriction ne soit imposée, mais ils ne peuvent pas démarrer de nouvelles discussions de leur locataire avec les personnes de votre locataire.

Étapes pour mettre à jour la configuration de l’accès externe aux équipes

Si nous acceptons que les comptes invités constituent une bonne base pour contrôler les accès externes, nous pouvons utiliser PowerShell pour :

  • Trouvez tous les invités dans le locataire.
  • Extrayez le domaine de l'adresse e-mail pour chaque compte invité.
  • Créez une liste de domaines à partir de ceux extraits des comptes invités.
  • Récupérez la configuration actuelle de l’accès externe pour Teams.
  • Recherchez les domaines qui ne sont pas déjà inclus dans la configuration de l'accès externe.
  • Mettez à jour la configuration de l'accès externe avec les domaines manquants.

Chaque locataire gérera les détails de la façon dont ce traitement est effectué à sa manière, mais les commandes de base restent les mêmes. Voici le code que j'ai créé pour faire le travail. Vous pouvez télécharger la dernière version du script depuis 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 liste blanche des domaines d'accès externes peut contenir environ 4 000 entrées.

Modules PowerShell requis

Le code est simple et utilise l'applet de commande Get-MgUser du SDK Microsoft Graph PowerShell pour rechercher l'ensemble des comptes invités et des applets de commande du module Microsoft Teams PowerShell pour récupérer et mettre à jour la configuration d'accès externe. Les deux modules sont en cours de développement actif et Microsoft publie de nouvelles versions tous les mois environ. Il est préférable d’utiliser la dernière version pour vous assurer de ne pas rencontrer de problèmes résolus dans la version actuelle.

En dehors de cela, les seules applets de commande utilisées sont des applets de commande PowerShell de base telles que Group-Object, Sort-Object et Select-Object. En d’autres termes, pas de magie noire ni de code compliqué.

L'inconvénient des listes de blocage

L’inconvénient de toute liste de blocage est qu’elle arrête la communication. Même après avoir autorisé tous les domaines d’où provient un compte invité, il est possible que les utilisateurs soient frustrés lorsqu’ils ne parviennent pas à communiquer avec d’autres contacts. Peut-être avez-vous besoin d'une méthode pour permettre aux utilisateurs de demander l'ajout d'un nouveau domaine (après vérification) à la configuration de l'accès externe de Teams. Je vous laisse ce débat.

Rencontrez Tony Redmond et d’autres MVP Microsoft à la conférence des experts 2022, les 6 et 7 décembre.

100% gratuit et virtuel. Vous ne voulez pas manquer l’événement de formation Microsoft de l’année !

Articles connexes