This commit is contained in:
Pete Bryan 2021-08-06 14:12:37 -07:00
Родитель 8c900dafa2
Коммит e030abc8e7
25 изменённых файлов: 59 добавлений и 58 удалений

Просмотреть файл

@ -19,7 +19,7 @@ query: |
let lookback = starttime - 14d;
let midtime = starttime - 1d;
// Generating historical table of all events per AccountId and Region
let EventInfo_CurrentDay = materialize (AWSCloudTrail | where TimeGenerated >= between(starttime..endtime);
let EventInfo_CurrentDay = materialize (AWSCloudTrail | where TimeGenerated between(starttime..endtime);
let EventInfo_historical = AWSCloudTrail | where TimeGenerated between (lookback..midtime)) | summarize max(TimeGenerated) by AWSRegion, UserIdentityAccountId;
// Doing Leftanti join to find new regions historically not seen for the same account.
let EventInfo_Unseen = materialize (

Просмотреть файл

@ -26,7 +26,7 @@ query: |
AwsBucketAPILogs_CL
| where EventTime between (lookback..endtime)
| where EventName == "GetObject"
| make-series Total=sum(BytesTransferredOut) on EventTime from startofday(ago(starttime)) to startofday(ago(endtime)) step timeframe;
| make-series Total=sum(BytesTransferredOut) on EventTime from startofday(starttime) to startofday(endtime) step timeframe;
// Use the time series data prepared in previous step with time series aomaly function to generate baseline pattern and flag the outlier based on scorethreshold value.
let TimeSeriesAlerts = TimeSeriesData
| extend (anomalies, score, baseline) = series_decompose_anomalies(Total, scorethreshold, -1, 'linefit')

Просмотреть файл

@ -23,7 +23,7 @@ query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let auditLookback = startttime - 14d;
let auditLookback = starttime - 14d;
// Setting threshold to 3 as a default, change as needed. Any operation that has been initiated by a user or app more than 3 times in the past 30 days will be exluded
let threshold = 3;
// Helper function to extract relevant fields from AuditLog events

Просмотреть файл

@ -22,7 +22,7 @@ query: |
let propertyIgnoreList = dynamic(["TargetId.UserType", "StsRefreshTokensValidFrom", "LastDirSyncTime", "DeviceOSVersion", "CloudDeviceOSVersion", "DeviceObjectVersion"]);
let appIgnoreList = dynamic(["Microsoft Azure AD Group-Based Licensing"]);
let AuditTrail = AuditLogs
| where TimeGenerated >= ago(auditLookback) and TimeGenerated < starttime
| where TimeGenerated between(auditLookback..starttime)
| where isnotempty(tostring(parse_json(tostring(InitiatedBy.app)).displayName))
| extend InitiatedByApp = tostring(parse_json(tostring(InitiatedBy.app)).displayName)
| extend ModProps = TargetResources.[0].modifiedProperties

Просмотреть файл

@ -29,7 +29,7 @@ query: |
| where isnotempty(FileURI) and isnotempty(commandToExecute)
| summarize max(TimeGenerated), OperationCount = count() by Caller, Resource, CallerIpAddress, FileURI, commandToExecute;
let CurrentCustomScriptExecution = CustomScriptExecution
| where TimeGenerated beteeen (starttime..endtime)
| where TimeGenerated between (starttime..endtime)
| where isnotempty(FileURI) and isnotempty(commandToExecute)
| project TimeGenerated, ActivityStatus, OperationId, CorrelationId, ResourceId, CallerIpAddress, Caller, OperationName, Resource, ResourceGroup, FileURI, commandToExecute, FailureMessage = message_, HTTPRequest, Settings;
let RareCustomScriptExecution = CurrentCustomScriptExecution

Просмотреть файл

@ -17,7 +17,7 @@ query: |
// Set the period for detections
// Get a list of previous Release Pipeline creators to exclude
let releaseusers = AzureDevOpsAuditing
| where TimeGenerated > ago(timeback) and TimeGenerated < starttime
| where TimeGenerated between(ago(lookback)..starttime)
| where OperationName =~ "Release.ReleasePipelineCreated"
// We want to look for users performing actions in specific organizations so we creat this userscope object to match on
| extend UserScope = strcat(ActorUPN, "-", ProjectName)

Просмотреть файл

@ -15,8 +15,6 @@ query: |
let EndLearningTime = starttime - LearningPeriod;
let NumberOfStds = 3;
let MinThreshold = 10.0;
let EndRunTime = StartTime - RunTime;
let EndLearningTime = StartTime + LearningPeriod;
let GitHubRepositoryDestroyEvents = (GitHubAudit
| where Action == "repo.destroy");
GitHubRepositoryDestroyEvents

Просмотреть файл

@ -24,7 +24,7 @@ query: |
| distinct AADClientId
| join kind=rightanti(
LAQueryLogs
| where TimeGenerated > between(starttime..endtime)
| where TimeGenerated between(starttime..endtime)
| where ResponseCode == 200 and RequestClientApp != "AppAnalytics" and AADEmail !contains "@"
)
on AADClientId

Просмотреть файл

@ -20,7 +20,7 @@ query: |
| where TimeGenerated between(startofday(ago(lookback))..starttime)
| summarize by AADEmail
| join kind = rightanti (LAQueryLogs
| where TimeGenerated between(starttime..endtime)
| where TimeGenerated between(starttime..endtime))
on AADEmail
| project TimeGenerated, AADEmail, QueryText, RequestClientApp, RequestTarget
| extend timestamp = TimeGenerated, AccountCustomEntity = AADEmail

Просмотреть файл

@ -18,7 +18,7 @@ query: |
let threshold = 0;
LAQueryLogs
| where TimeGenerated between(starttime..endtime)
| make-series rows = sum(ResponseRowCount) on TimeGenerated in range(ago(lookback), endtime, 1h)
| make-series rows = sum(ResponseRowCount) on TimeGenerated in range(starttime - lookback, endtime, 1h)
| extend (anomalies, score, baseline) = series_decompose_anomalies(rows,3, -1, 'linefit')
| mv-expand anomalies to typeof(int), score to typeof(double), TimeGenerated to typeof(datetime)
| where anomalies > threshold

Просмотреть файл

@ -20,7 +20,7 @@ query: |
let diff = 5;
let anomolous_users = (
LAQueryLogs
| where TimeGenerated between(startofday(ago(lookback))..startime)
| where TimeGenerated between(startofday(ago(lookback))..starttime)
| summarize score=sum(ResponseRowCount) by AADEmail
| join kind = fullouter (LAQueryLogs
| where TimeGenerated between(starttime..endtime)

Просмотреть файл

@ -12,7 +12,7 @@ relevantTechniques:
- T1020
query: |
let timeframe = 1h
let timeframe = 1h;
let threshold = 10;
LAQueryLogs
| where ResponseCode != 200

Просмотреть файл

@ -71,8 +71,8 @@ query: |
) on $left.InitiatedBy_Caller == $right.TargetUserName;
// union the user addition events and resource addition events and provide common column names, additionally pack the value, property and resource info to reduce result set.
UserAddWithResource
| union isfuzzy=true ResourceMatch
| union isfuzzy=true(ResourceMatch
| extend PropertySet = pack("Value", Value, "PropertyName_ResourceId", PropertyName_ResourceId)
| summarize StartTimeUtc = min(TimeGenerated), EndTimeUtc = max(TimeGenerated), makeset(PropertySet) by Action, Type, TargetUserName, InitiatedBy_Caller, IpAddress, OperationName
| order by StartTimeUtc asc
| order by StartTimeUtc asc)
| extend timestamp = StartTimeUtc, AccountCustomEntity = TargetUserName, IPCustomEntity = IpAddress

Просмотреть файл

@ -16,7 +16,7 @@ query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let lookback = startime - 14d;
let lookback = starttime - 14d;
let historical_bots = (
OfficeActivity
| where TimeGenerated between(lookback..starttime)

Просмотреть файл

@ -18,7 +18,7 @@ query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let lookback = startime - 14d;
let lookback = starttime - 14d;
let historicalActivity=
OfficeActivity
| where TimeGenerated between(lookback..starttime)

Просмотреть файл

@ -16,7 +16,7 @@ query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let lookback = startime - 14d;
let lookback = starttime - 14d;
let historicalActivity=
OfficeActivity
| where RecordType == "SharePointFileOperation"

Просмотреть файл

@ -15,7 +15,7 @@ query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let lookback = startime - 14d;
let lookback = starttime - 14d;
let historicalActivity=
OfficeActivity
| where RecordType == "SharePointFileOperation"

Просмотреть файл

@ -14,7 +14,7 @@ query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let lookback = startime - 14d;
let lookback = starttime - 14d;
let historicalUA=
OfficeActivity
| where RecordType == "SharePointFileOperation"

Просмотреть файл

@ -11,7 +11,7 @@ tactics:
query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let lookback = startime - 14d;
let lookback = starttime - 14d;
let out_msg = ProofpointPOD
| where TimeGenerated between (lookback..starttime)
| where EventType == 'message'

Просмотреть файл

@ -17,7 +17,7 @@ query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let lookback = startime - 7d;
let lookback = starttime - 7d;
// For AD SID mappings - https://docs.microsoft.com/windows/security/identity-protection/access-control/active-directory-security-groups
let WellKnownLocalSID = "S-1-5-32-5[0-9][0-9]$";
// The SIDs for DnsAdmins and DnsUpdateProxy can be different than *-1102 and -*1103. Check these SIDs in your domain before running the query

Просмотреть файл

@ -19,7 +19,7 @@ query: |
let lookback = starttime - 14d;
let known_procs = (
SecurityEvent
| where TimeGenerated between(lookback..startime)
| where TimeGenerated between(lookback..starttime)
| where EventID == 4688
| where ParentProcessName hassuffix "w3wp.exe"
| extend ProcessHost = strcat(Process, "-", Computer)

Просмотреть файл

@ -24,7 +24,7 @@ query: |
| where TimeGenerated between(lookback..endtime)
| where EventID == 4688
| summarize FullCount = count()
, Count= countif(TimeGenerated between (startime .. endtime))
, Count= countif(TimeGenerated between (starttime .. endtime))
, min_TimeGenerated=min(TimeGenerated)
, max_TimeGenerated=max(TimeGenerated)
by Computer, NewProcessName

Просмотреть файл

@ -18,7 +18,7 @@ query: |
let lookback = startime - 14d;
let disabledAccounts = (){
SigninLogs
| where TimeGenerated between(lookback..starttime))
| where TimeGenerated between(lookback..starttime)
| where ResultType == 50057
| where ResultDescription =~ "User account is disabled. The account has been disabled by an administrator."
};

Просмотреть файл

@ -16,8 +16,11 @@ relevantTechniques:
- T1030
query: |
let starttime = todatetime('{{StartTimeISO}}');
let endtime = todatetime('{{EndTimeISO}}');
let TimeSeriesData =
Syslog
| where TimeGenerated between(starttime..endtime)
| where ProcessName contains "squid"
| extend URL = extract("(([A-Z]+ [a-z]{4,5}:\\/\\/)|[A-Z]+ )([^ :]*)",3,SyslogMessage),
SourceIP = extract("([0-9]+ )(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}))",2,SyslogMessage),
@ -30,7 +33,7 @@ query: |
contentType = extract("([a-z/]+$)",1,SyslogMessage)
| extend TLD = extract("\\.[a-z]*$",0,Domain)
| where isnotempty(Bytes)
| make-series TotalBytesSent=sum(Bytes) on TimeGenerated from startofday(ago(starttime)) to startofday(ago(endtime)) step timeframe by ProcessName;
| make-series TotalBytesSent=sum(Bytes) on TimeGenerated from startofday(starttime) to startofday(endtime) step timeframe by ProcessName;
TimeSeriesData
| extend (anomalies, score, baseline) = series_decompose_anomalies(TotalBytesSent,3, -1, 'linefit')
| extend timestamp = TimeGenerated