Site icon Gioxx.org

PowerShell e M365: chi usa MFA? E con quale strumento?

Powershell: LockoutAD.ps1, utente a riga di comando 1

Negli ultimi tempi sto cercando di lavorare solo con PowerShell 7 (e lo faccio per il 99,9% del tempo) e Microsoft Graph per evitare di andare a risvegliare dalle tenebre il modulo MSOnline che non è così tanto compatibile (no, non lo è affatto) con la versione più recente di PowerShell di Microsoft. Ogni tanto però è un male necessario e questo ne è l’esempio lampante.

Updated June 8, 2023: We have updated the rollout timeline below. Thank you for your patience.

In today’s landscape, organizations and users utilize various authentication methods with varying levels of security. Unfortunately, users often select less secure MFA methods, even when more secure options are available. This may be due to convenience, lack of awareness, or technical limitations.

To encourage the use of the strongest available method, we are introducing system-preferred authentication for MFA. This system prompts users to sign in with the most secure method they’ve registered and the one that’s enabled by admin policy. This transition from choosing a default method to always using the most secure method will promote better security practices. If users can’t use the prompted method, they can choose an alternative MFA method.

When this will happen:

We will begin rolling out in late June and expect to complete by late July.

How this will affect your organization:

Microsoft managed will be rolled out as enabled. Admins will have the control to disable the feature.

Admins can enable the feature via the admin UX in the Azure Portal or GraphAPI. For example, if a user named “John Doe” registered both SMS and Microsoft Authenticator and used SMS as the default option to sign in, the system-preferred method (Authenticator) will be presented to the user once the feature is enabled.

We launched this with Microsoft-managed set to disabled. As mentioned above, we will be setting “Microsoft-managed” to enabled from the end of June 2023. While we highly encourage you to adopt this feature for your entire tenant, should you need to you can either scope the feature for a segment of your user population or disable it if necessary. The feature will ultimately be set to Microsoft-managed (enabled) for all tenants, with no option to disable it.

To ensure adequate preparation time, detailed timelines will be shared by June. Deploying this feature with the rollout controls is highly encouraged to enhance security and ensure users always use the most secure authentication method first. The feature is now available from your tenant.

What you need to do to prepare:

We strongly recommend that tenants enable the feature.

La comunicazione è disponibile nel portale amministrativo di Microsoft 365, ma ne parla anche Merill su Twitter (leggi tutto il thread):

Come posso scoprire chi usa l’autenticazione “debole”?

Ci ho provato tramite PowerShell 7 e Microsoft Graph ma sfortunatamente non ho ancora trovato la risposta riguardo il metodo predefinito utilizzato.

Per questo motivo ho fatto appello alla vecchia scuola e sono passato tramite MsolService / MSOnline e la PowerShell Core. Lo script originale è quello riportato nell’articolo pubblicato all’indirizzo thesysadminchannel.com/get-per-user-mfa-status-using-powershell, io mi sono limitato a fare delle minuscole modifiche per rendere un pelo più pulito il risultato finale.

function _CheckCSVFolder($path) {
if ([string]::IsNullOrEmpty($path)) {
$path = ".\"
} else {
$path = $path.TrimEnd('\')
}
return $path
}
function _SaveFileWithProgressiveNumber($path) {
$baseName = [System.IO.Path]::GetFileNameWithoutExtension($path)
$extension = [System.IO.Path]::GetExtension($path)
$directory = [System.IO.Path]::GetDirectoryName($path)
$count = 1
while (Test-Path $path)
{
$fileName = $baseName + "_$count" + $extension
$path = Join-Path -Path $directory -ChildPath $fileName
$count++
}
return $path
}
function Export-MFAStatusDefaultMethod {
# Credits: https://thesysadminchannel.com/get-per-user-mfa-status-using-powershell
param(
[Parameter(Mandatory=$false, ValueFromPipeline=$true, HelpMessage="Folder where export CSV file (e.g. C:\Temp)")]
[string] $folderCSV,
[Parameter(Mandatory=$false, ValueFromPipeline=$true, HelpMessage="Extract into CSV all users (even those with MFA disabled).")]
[switch] $All
)
Set-Variable ProgressPreference Continue
$folder = _CheckCSVFolder($folderCSV)
if (-not (Get-MsolDomain -ErrorAction SilentlyContinue)) {
Write-Error "You must connect to the MSolService to continue" -ErrorAction Stop
}
$Result = @()
$ProcessedCount = 0
$MsolUserList = Get-MsolUser -All -ErrorAction Stop |
Where-Object {$_.UserType -ne 'Guest' -And $_.DisplayName -notmatch 'On-Premises Directory Synchronization'}
$totalUsers = $MsolUserList.Count
foreach ($User in $MsolUserList) {
$ProcessedCount++
$PercentComplete = (($ProcessedCount / $totalUsers) * 100)
Write-Progress -Activity "Processing $User" -Status "$ProcessedCount out of $totalUsers completed ($($PercentComplete.ToString('0.00'))%)" -PercentComplete $PercentComplete
if ($User.StrongAuthenticationRequirements) {
$PerUserMFAState = $User.StrongAuthenticationRequirements.State
} else {
$PerUserMFAState = 'Disabled'
}
$MethodType = $User.StrongAuthenticationMethods |
Where-Object {$_.IsDefault -eq $true} |
Select -ExpandProperty MethodType
if ($MethodType) {
switch ($MethodType) {
'OneWaySMS' {$DefaultMethodType = 'SMS Text Message'}
'TwoWayVoiceMobile' {$DefaultMethodType = 'Call to Phone'}
'PhoneAppOTP' {$DefaultMethodType = 'TOTP'}
'PhoneAppNotification' {$DefaultMethodType = 'Authenticator App'}
}
} else {
$DefaultMethodType = 'Not Enabled'
}
if ($All) {
$Result += New-Object -TypeName PSObject -Property $([ordered]@{
UserPrincipalName = $User.UserPrincipalName
DisplayName = $User.DisplayName
PerUserMFAState = $PerUserMFAState
DefaultMethodType = $DefaultMethodType
})
$MethodType = $null
} else {
if (!($PerUserMFAState -eq 'Disabled')) {
$Result += New-Object -TypeName PSObject -Property $([ordered]@{
UserPrincipalName = $User.UserPrincipalName
DisplayName = $User.DisplayName
DefaultMethodType = $DefaultMethodType
})
$MethodType = $null
}
}
}
$CSV = _SaveFileWithProgressiveNumber("$($folder)\$((Get-Date -format "yyyyMMdd").ToString())_M365-MFA-DefaultAuthMethod-Report.csv")
$Result | Export-CSV $CSV -NoTypeInformation -Encoding UTF8 -Delimiter ";"
}
Export-MFAStatusDefaultMethod

Nel file CSV prodotto potrai immediatamente identificare gli utenti con MFA attiva e capire che metodo di autenticazione predefinita stanno utilizzando. Chi si basa su SMS o telefonata potrà essere educato all’utilizzo dell’autenticazione tramite applicazione (Microsoft Authenticator) o – al limite – TOTP generato da un software di terza parte (come Google Authenticator o 1Password, per esempio). Io in futuro darò ancora un’occhiata al codice che ho già inserito in ToyBox (spero di potertene parlare tra qualche giorno) e proverò a capire se via Graph sarà accessibile quel dato che oggi manca, e che farebbe davvero la differenza permettendo di abbandonare MsolService.

Sappi che – lanciando lo script con il parametro -All in coda – questo estrarrà tutti gli utenti configurati sul tenant, anche senza MFA attiva. Semplicemente li riporterà all’interno del file CSV facendo presente che non usano MFA.

In caso di dubbi sai già cosa fare, l’area commenti è a tua totale disposizione :-)

#KeepItSimple


Credits: thesysadminchannel.com/get-per-user-mfa-status-using-powershell

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Exit mobile version