Detection rules › Kusto
EatonForeseer - Unauthorized Logins
Detects Unauthorized Logins into Eaton Foreseer
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Initial Access | T1078 Valid Accounts |
Event coverage
| Provider | Event | Title |
|---|---|---|
| Security-Auditing | Event ID 4624 | An account was successfully logged on. |
| Security-Auditing | Event ID 4625 | An account failed to log on. |
| Security-Auditing | Event ID 4634 | An account was logged off. |
| Security-Auditing | Event ID 4647 | User initiated logoff. |
| Security-Auditing | Event ID 4648 | A logon was attempted using explicit credentials. |
| Security-Auditing | Event ID 4675 | SIDs were filtered. |
Rule body kusto
id: 5a7fccb8-3ed0-44f2-8477-540af3ef4d92
name: EatonForeseer - Unauthorized Logins
description: |
'Detects Unauthorized Logins into Eaton Foreseer'
severity: High
status: Available
requiredDataConnectors:
- connectorId: WindowsSecurityEvents
dataTypes:
- SecurityEvent
queryFrequency: 15m
queryPeriod: 15m
triggerOperator: gt
triggerThreshold: 0
tactics:
- InitialAccess
relevantTechniques:
- T1078
query: |
SecurityEvent
// Look for all events relating to user logins
| where EventID in (4624,4625,4648,4675,4634,4647)
| where AccountType == "User"
// Filter for data present
| where isnotempty(TargetUserName)
// Look for all events that relate to the Eaton Foreseer application
| where ProcessName has "Foreseer"
// Ignore known user accounts (please edit based on your allowed users)
| where TargetUserName !in ("janedoe", "johndoe")
// De-duplicate multiple entries for the same user accessing a particular device
| summarize TimeGenerated=arg_min(TimeGenerated, *) by TargetUserName, Computer
| project
TimeGenerated,
IPCustomEntity = IpAddress,
HostCustomEntity = Computer,
UserEntity = TargetUserName,
Process,
ProcessName
entityMappings:
- entityType: IP
fieldMappings:
- identifier: Address
columnName: IPCustomEntity
- entityType: Account
fieldMappings:
- identifier: Name
columnName: UserEntity
- entityType: Host
fieldMappings:
- identifier: HostName
columnName: HostCustomEntity
- entityType: Process
fieldMappings:
- identifier: CommandLine
columnName: Process
version: 1.0.0
kind: Scheduled
Stages and Predicates
Stage 1: source
SecurityEvent
Stage 2: where
| where EventID in (4624,4625,4648,4675,4634,4647)
Stage 3: where
| where AccountType == "User"
Stage 4: where
| where isnotempty(TargetUserName)
Stage 5: where
| where ProcessName has "Foreseer"
Stage 6: where
| where TargetUserName !in ("janedoe", "johndoe")
Stage 7: summarize
| summarize TimeGenerated=arg_min(TimeGenerated, *) by TargetUserName, Computer
Stage 8: project
| project
TimeGenerated,
IPCustomEntity = IpAddress,
HostCustomEntity = Computer,
UserEntity = TargetUserName,
Process,
ProcessName
Exclusions
Top-level NOT(...) conjuncts: predicates this rule actively suppresses.
| Field | Kind | Excluded values |
|---|---|---|
TargetUserName | in | janedoe, johndoe |
Indicators
Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.
| Field | Kind | Values |
|---|---|---|
AccountType | eq |
|
EventID | in |
|
ProcessName | match |
|
TargetUserName | is_not_null |
Output fields
Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.
| Field | Source |
|---|---|
HostCustomEntity | project |
IPCustomEntity | project |
Process | project |
ProcessName | project |
TimeGenerated | project |
UserEntity | project |