Аналитика журнала Azure: мониторинг успешных входов в систему после повторных сбоев входа - PullRequest
0 голосов
/ 04 января 2019

Я бы хотел использовать Azure Log Analytics для создания предупреждения о возможных попытках перебора в учетных записях моих пользователей. Иными словами, я хотел бы получать уведомления от Azure (или, по крайней мере, иметь возможность вручную запускать сценарий для получения данных), когда учетная запись пользователя успешно аутентифицирована в O365 после нескольких неудачных попыток.

Я знаю, как анализировать журналы, например, для получения количества неудачных попыток входа всех пользователей в течение определенного периода (см. Пример ниже):

SigninLogs
| where TimeGenerated between(datetime("2018-11-19 00:00:00") .. datetime("2018-11-19 23:59:59")) 
| where ResultType == "50074"
| summarize FailedSigninCount = count() by UserDisplayName 
| sort by FailedSigninCount desc

Но я не знаю, как написать следующее:

  • Пользователь создал 9 неудачных попыток входа (тип 50074) и создал успешную попытку входа.
  • В течение 60 секунд.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 03 апреля 2019

Посетите GitHub сообщества Azure Sentinel и посмотрите, помогают ли там запросы. В частности, я добавил https://github.com/Azure/Azure-Sentinel/blob/master/Detections/SigninLogs/SigninBruteForce-AzurePortal.txt, который, я думаю, более или менее делает то, что вам нужно, - также опубликовал ниже. Надеюсь, это поможет.

// Evidence of Azure Portal brute force attack in SigninLogs:
// This query returns results if there are more than 5 authentication failures and a successful authentication 
// within a 20-minute window.
let failureCountThreshold = 5;
let successCountThreshold = 1;
let timeRange = ago(1d);
let authenticationWindow = 20m;
SigninLogs
| where TimeGenerated >= timeRange 
| extend OS = DeviceDetail.operatingSystem, Browser = DeviceDetail.browser
| extend StatusCode = tostring(Status.errorCode), StatusDetails = tostring(Status.additionalDetails)
| extend State = tostring(LocationDetails.state), City = tostring(LocationDetails.city)
| where AppDisplayName contains "Azure Portal"
// Split out failure versus non-failure types
| extend FailureOrSuccess = iff(ResultType in ("0", "50125", "50140"), "Success", "Failure")
| summarize StartTimeUtc = min(TimeGenerated), EndTimeUtc = max(TimeGenerated), 
makeset(IPAddress), makeset(OS), makeset(Browser), makeset(City), makeset(ResultType),
FailureCount=countif(FailureOrSuccess=="Failure"),
SuccessCount = countif(FailureOrSuccess=="Success") 
by bin(TimeGenerated, authenticationWindow), UserDisplayName, UserPrincipalName, AppDisplayName
| where FailureCount>=failureCountThreshold and SuccessCount>=successCountThreshold
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...