MFA everywhere! Questo è il mantra che ogni azienda dovrebbe adottare per proteggere l’accesso alle sue risorse e ai dati sensibili. Che si tratti di accesso alla posta elettronica, ai sistemi di gestione delle risorse umane, ai dati finanziari o alle applicazioni cloud, l’MFA deve esserne parte integrante ed integrata.
Tra le diverse soluzioni MFA disponibili, Microsoft Entra ID in combinazione con l’app Microsoft Authenticator è sicuramente una delle più diffuse e fornisce un’esperienza utente fluida e sicura, tanto più se supportata da adeguate Conditional Access policies.
Tuttavia, in alcuni casi è necessario o preferibile interfacciarsi direttamente con delle API per integrare la verifica MFA in processi preesistenti o sensibili. Ad oggi, Entra ID non fornisce un metodo nativo e API documentate al riguardo. Questa necessità mi ha spinto a cercare una soluzione che in modo rapido e definitivo potesse essere integrabile e facilmente accessibile per alcuni strumenti che utilizzo. Il risultato è MfaOnDemand.
MfaOnDemand
MfaOnDemand è un modulo PowerShell progettato per confermare rapidamente le identità degli utenti Entra ID tramite richieste Push da inviare a Microsoft Authenticator o anche richiedere una verifica tramite codice TOTP.
Caratteristiche degne di nota sono :
- supporto per verifica TOTP e Push
- pensata per l’integrazione in script e workflow preesistenti
- autenticazione su base SecretKey e Certificati
- non richiede nessuna Enterprise App aggiuntiva sul Tenant
- utilizza solo API Microsoft native
Installazione
MfaOnDemand è disponibile sia su GitHub che su PowerShell Gallery
|
|
Utilizzo base
Per prima cosa è necessario ottenere delle credenziali valide per l’utilizzo dell’App MFA nativa di Entra ID, per fare questo bisogna registrare almeno una Key:
|
|
La Key verrà quindi usata per ogni richiesta di MfaOnDemand
|
|
Utilizzo avanzato
Come già detto, per l’utilizzo dell’App MFA nativa di Entra ID sono necessarie delle credenziali, queste possono essere sotto forma di stringa che è a tutti gli effetti una Password o in forma di Certificato di cui ovviamente dobbiamo possedere la chiave privata.
Per registrare queste credenziali MfaOnDemand fornisce una sua funzione nativa Add-MoDCredentials
, utilizzabile così:
|
|
La registrazione di credenziali con -Type Certificate
richiede di fornire il parametro -MyCertificate
avente uno di questi valori:
?
- Avvia un metodo interattivo che permette di scegliere un certificato tra quelli disponibili nel percorsoCert:\CurrentUser\My
New
- Crea e registra un nuovo certificato[X509Certificate]
- Registra un certificato ottenuto in precedenza e che è memorizzato in una variabile di tipo[X509Certificate]
some_thumbprint_string
- Registra un certificato presente nel percorsoCert:\CurrentUser\My
utilizzando il suo Thumbprintsome_thumbprint_string_short
- Cerca e registra un certificato presente nel percorsoCert:\CurrentUser\My
utilizzando i primi 5 o più caratteri del suo Thumbprint
Per utilizzare
Add-MoDCredentials
è necessario autenticarsi sul Tenant Entra ID con un utente che abbia permessiApplication.ReadWrite.All
L’effettiva verifica MFA avviene tramite il comando Invoke-MoDMfa
.
La prima volta che viene eseguito è necessario passare il parametro -Credential
affinchè MfaOnDemand possa autenticarsi su Entra ID.
Le chiamate successive a Invoke-MoDMfa
possono omettere tale parametro perchè la sessione viene mantenuta attiva in cache.
|
|
In figura vengono mostrati alcuni possibili utilizzi e output di MfaOnDemand
MfaOnDemand fornisce anche un’altra funzione nativa per un facile recupero delle credenziali precedentemente registrate su Entra ID: Get-MoDCredentials
|
|
Note
L’uso di Password
è considerato meno sicuro rispetto a Certificate
, per tale motivo le credenziali aggiunte tramite Add-MoDCredentials -Type Password
hanno validità di sole 24 ore mentre quelle aggiunte tramite Add-MoDCredentials -Type Certificate
hanno una validità di 365 giorni.
MfaOnDemand non gestisce la pulizia delle credenziali registrate tramite Add-MoDCredentials
.
Effettuate una puntuale e periodica pulizia delle credenziali, sia di quelle scadute che di quelle non più in uso.
Per semplificare la pulizia Get-MoDCredentials
mostra anche i comandi per la rimozione delle Key esistenti, usateli con cautela!
|
|
Invoke-MoDMfa -Credential <password>
accetta in input solo SecureString
, l’output di Add-MoDCredentials -Type Password
è invece plain text e deve quindi essere convertito tramite ConvertTo-SecureString
.
La verifica tramite Number Matching di Microsoft Authenticator non è supportata.
Disclaimer
MfaOnDemand è (spero) uno strumento che può essere utile e molto versatile, è importante però sottolineare un paio di riflessioni da tenere in debita considerazione.
Primo,
MFA fatigue è un problema vero e riscontrabile, per quanto possibile non è il caso di eccedere nelle verifiche MFA e nel caso è preferibile utilizzare -Mode OTP
.
Secondo, potenzialmente legato al primo, MfaOnDemand utilizza API non documentate ed è facile pensare che Microsoft abbia fatto questa scelta per un buon motivo quindi meglio non abusarne.
Sviluppi futuri
Tempo e risorse permettendo sarebbe interessante ampliare il progetto ed eventualmente aggiungere ulteriori Provider
oltre ad Entra ID, se quindi avete casi d’uso o fornitori di servizi MFA che vorreste fossero implementati fatemelo sapere nei commenti o su
GitHub