Dev.to Security ๐Ÿ” Cybersecurity ๐Ÿ‘ 0 ๐Ÿ“– 2 min read

3 controlli di sicurezza su Microsoft 365 da fare oggi in 10 minuti (con PowerShell)

Molti incidenti nelle aziende partono da poche cause ricorrenti, e tre si verificano in dieci minuti con PowerShell, in sola lettura, senza toccare nulla. 1. Chi non ha la MFA registrata Un account senza MFA

Molti incidenti nelle aziende partono da poche cause ricorrenti, e tre si verificano in dieci minuti con PowerShell, in sola lettura, senza toccare nulla.

1. Chi non ha la MFA registrata

Un account senza MFA รจ il primo bersaglio di qualsiasi campagna di phishing di credenziali. Entra ID espone un report ufficiale di registrazione dei metodi (richiede Entra ID P1).

Connect-MgGraph -Scopes 'AuditLog.Read.All','UserAuthenticationMethod.Read.All'
Get-MgReportAuthenticationMethodUserRegistrationDetail -All |
    Where-Object { -not $_.IsMfaRegistered -and $_.UserType -eq 'member' } |
    Select-Object UserPrincipalName, IsAdmin

Attenzione anche agli amministratori con soli SMS o chiamata vocale: sono metodi vulnerabili a SIM swap e social engineering.

2. Chi usa ancora l'autenticazione legacy

IMAP, POP, SMTP AUTH e simili non supportano la MFA: sono la via preferita del password spraying. Prima di bloccarli con l'Accesso Condizionale bisogna sapere chi li usa (spesso scanner multifunzione e vecchie applicazioni), altrimenti si crea un disservizio.

$since = (Get-Date).ToUniversalTime().AddDays(-7).ToString('yyyy-MM-ddTHH:mm:ssZ')
Get-MgAuditLogSignIn -All -Filter "createdDateTime ge $since" |
    Where-Object { $_.ClientAppUsed -notin 'Browser','Mobile Apps and Desktop clients' } |
    Group-Object UserPrincipalName, ClientAppUsed | Select-Object Count, Name

Tanti tentativi falliti da IP sconosciuti sono il segnale tipico di uno spraying in corso.

3. Quali caselle inoltrano posta all'esterno

Un inoltro automatico verso un dominio esterno รจ la prima cosa che fa un attaccante dopo aver compromesso una casella (Business Email Compromise).

Connect-ExchangeOnline
$accepted = (Get-AcceptedDomain).DomainName
Get-EXOMailbox -ResultSize Unlimited -Properties ForwardingSmtpAddress |
    Where-Object { $_.ForwardingSmtpAddress -and (($_.ForwardingSmtpAddress -split '@')[-1] -notin $accepted) } |
    Select-Object PrimarySmtpAddress, ForwardingSmtpAddress

Non dimenticare le regole di posta in arrivo (Get-InboxRule), dove gli inoltri si nascondono meglio.

Cosa fare con i risultati

Ogni criticitร  va valutata, pianificata e comunicata prima del rimedio: bloccare la legacy auth o forzare la MFA da un giorno all'altro puรฒ fermare un reparto. Rilancia gli stessi controlli dopo ogni intervento per misurare il miglioramento: รจ anche un ottimo KPI da portare alla direzione (e utile nei percorsi NIS2).

Trasparenza: ho raccolto questi controlli, piรน gli audit di Active Directory (Kerberoasting, delega non vincolata, krbtgt), guest, ruoli amministrativi e SMBv1/NTLM, nel Kit Sicurezza Microsoft 365 e AD, che vendo. Script gratuiti su GitHub. Tutto in italiano.

๐Ÿ“ฐ Read the original article on Dev.to Security

Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes โ€” full credit and traffic to the original publisher.