A small PowerShell Script to quickly find out source IPs in case of a brute force attack on O365 Infra. This can save manual efforts and can improve turnaround time to mitigate the issue in Infrastructures which still not using MFA or ExtraNetLockOut. This is just a basic code. One can set email alerts basis the thresholds or even can write a custom event on any of the server to be picked by SCOM or OMS.
Pre-requisites: Auditing should be enabled on Federation servers
# To investigate Account lockouts on Federation Servers # Author: Nitish Kumar # v1.0 # Thresholds $Period = 1 $LockedAccountsThreshold = 50 #federation Servers $FServers = ("XYZ01", "ABC01") # Replace the name with actual federation server names $LastEvents = @() $LockEvents = @() #collect events from all federation servers ForEach($Server in $FServers){ $Events = Get-WinEvent -Computername $Server -FilterHashtable @{LogName='Security';ID=411; StartTime=$((get-date).addhours(-($Period)))}| ?{$_.message -like "*Locked*"} | Select-object MachineName, TimeCreated, Message $LastEvents += $Events } ForEach($Ev in $LastEvents){ $Array = $Ev.Message.split("`n") $a = $Array[13].split("@") $Temp = New-Object -TypeName PSObject -Property @{ FederationServer = $Ev.MachineName TimeWritten = $Ev.TimeCreated IPAddress = [string]$Array[10] UserAccount = $a[0] } $LockEvents += $Temp } # Find unique users from the lockouts $LockedAccounts = $LockEvents.UserAccount | sort-object -unique write-host "A total $($LockedAccounts.count) Accounts locked out in last $($Period) hours: `n$($LockedAccounts -join ",")" -foregroundcolor RED $Logfile = "c:\temp\Lockouts_$((Get-Date).ToString('MM-dd-yyyy_hh-mm-ss')).csv" $LockEvents | Select-object FederationServer, TimeWritten, UserAccount, IPAddress | Export-csv -nti $Logfile
Hi Nitish, is it possible to get a list of all computers for a particular GPO that it has applied or not.