Detection rules › Panther
Panther rules: netskope
Action Performed by Netskope Personnel
#An action was performed by Netskope personnel.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Detection logic
def rule(event):
if event.get("is_netskope_personnel") is True:
return True
return False
def title(event):
user = event.get("user", "<USER_NOT_FOUND>")
audit_log_event = event.get("audit_log_event", "<EVENT_NOT_FOUND>")
return f"Action [{audit_log_event}] performed by Netskope personnel [{user}]"
Rule specification
AnalysisType: rule
RuleID: "Netskope.NetskopePersonnelActivity"
DisplayName: "Action Performed by Netskope Personnel"
Enabled: true
Filename: netskope_personnel_action.py
LogTypes:
- Netskope.Audit
Tags:
- Netskope
- Supply Chain Compromise
Reports:
MITRE ATT&CK:
- TA0001:T1195
Severity: Medium
Description: An action was performed by Netskope personnel.
DedupPeriodMinutes: 60
Threshold: 1
Runbook: Action taken by Netskope Personnel. Validate that this action was authorized.
Reference: https://docs.netskope.com/en/netskope-help/admin-console/administration/audit-log/#filters-1
Stages and Predicates
Fires on Netskope.Audit events when the condition below holds.
Condition
is_netskope_personnelistrue
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
is_netskope_personnel | eq |
| field:"is_netskope_personnel" kind:eq value:"true" |
Output fields
Fields the rule emits when it matches, drawn from the rule's alert_context.
| Field |
|---|
audit_log_event |
user |
Response runbook
Action taken by Netskope Personnel. Validate that this action was authorized.
Worked example
A sample event from the rule's unit tests that triggers a match.Sample Test Event
{
"_id": "e5ca619b059fccdd0cfd9398",
"_insertion_epoch_timestamp": 1702308331,
"audit_log_event": "Login Successful",
"count": 1,
"is_netskope_personnel": true,
"organization_unit": "",
"severity_level": 2,
"supporting_data": {
"data_type": "user",
"data_values": [
"11.22.33.44",
"adminsupport@netskope.com"
]
},
"timestamp": "2023-12-11 15:25:31.000000000",
"type": "admin_audit_logs",
"ur_normalized": "adminsupport@netskope.com",
"user": "adminsupport@netskope.com"
}
Admin logged out because of successive login failures
#An admin was logged out because of successive login failures.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
Detection logic
def rule(event):
if event.get("audit_log_event") == "Admin logged out because of successive login failures":
return True
return False
def title(event):
user = event.get("user", "<USER_NOT_FOUND>")
return f"Admin [{user}] was logged out because of successive login failures"
Rule specification
AnalysisType: rule
RuleID: "Netskope.AdminLoggedOutLoginFailures"
DisplayName: "Admin logged out because of successive login failures"
Enabled: true
Filename: netskope_admin_logged_out.py
LogTypes:
- Netskope.Audit
Tags:
- Netskope
- Brute Force
Reports:
MITRE ATT&CK:
- TA0006:T1110
Severity: Medium
Description: An admin was logged out because of successive login failures.
DedupPeriodMinutes: 60
Threshold: 1
Runbook: An admin was logged out because of successive login failures. This could indicate brute force activity against this account.
Reference: https://docs.netskope.com/en/netskope-help/admin-console/administration/audit-log/
Stages and Predicates
Fires on Netskope.Audit events when the condition below holds.
Condition
audit_log_eventisAdmin logged out because of successive login failures
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
audit_log_event | eq |
| field:"audit_log_event" kind:eq value:"Admin logged out because of successive login failures" |
Output fields
Fields the rule emits when it matches, drawn from the rule's alert_context.
| Field |
|---|
user |
Response runbook
An admin was logged out because of successive login failures. This could indicate brute force activity against this account.
Worked example
A sample event from the rule's unit tests that triggers a match.Sample Test Event
{
"_id": "e5ca619b059fccdd0cfd9398",
"_insertion_epoch_timestamp": 1702308331,
"audit_log_event": "Admin logged out because of successive login failures",
"count": 1,
"is_netskope_personnel": true,
"organization_unit": "",
"severity_level": 2,
"supporting_data": {
"data_type": "user",
"data_values": [
"11.22.33.44",
"adminsupport@netskope.com"
]
},
"timestamp": "2023-12-11 15:25:31.000000000",
"type": "admin_audit_logs",
"ur_normalized": "adminsupport@netskope.com",
"user": "adminsupport@netskope.com"
}
An administrator account was created, deleted, or modified.
#An administrator account was created, deleted, or modified.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation |
Detection logic
ADMIN_USER_CHANGE_EVENTS = [
"Created new admin",
"Added SSO Admin",
"Edited SSO Admin Record",
"Created new support admin",
"Edit admin record",
"Deleted admin",
"Enabled admin",
"Disabled admin",
"Unlocked admin",
"Updated admin settings",
"Deleted Netskope SSO admin",
]
def rule(event):
if event.get("audit_log_event") in ADMIN_USER_CHANGE_EVENTS:
return True
return False
def title(event):
user = event.get("user", "<USER_NOT_FOUND>")
audit_log_event = event.get("audit_log_event", "<EVENT_NOT_FOUND>")
return f"User [{user}] performed [{audit_log_event}]"
def severity(event):
audit_log_event = event.get("audit_log_event", "no_data").lower()
if "create" in audit_log_event or "add" in audit_log_event or "delete" in audit_log_event:
return "CRITICAL"
return "HIGH"
Rule specification
AnalysisType: rule
RuleID: "Netskope.AdminUserChange"
DisplayName: "An administrator account was created, deleted, or modified."
Enabled: true
Filename: netskope_admin_user_change.py
LogTypes:
- Netskope.Audit
Tags:
- Netskope
- Account Manipulation
Reports:
MITRE ATT&CK:
- TA0004:T1098
Severity: High
Reference: https://docs.netskope.com/en/netskope-help/admin-console/administration/managing-administrators/
Description: An administrator account was created, deleted, or modified.
DedupPeriodMinutes: 60
Threshold: 1
Runbook: An administrator account was created, deleted, or modified. Validate that this activity is expected and authorized.
Stages and Predicates
Fires on Netskope.Audit events when the condition below holds.
Condition
audit_log_eventis one ofCreated new admin,Added SSO Admin,Edited SSO Admin Record,Created new support admin,Edit admin record
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
audit_log_event | in |
| field:"audit_log_event" kind:in |
Output fields
Fields the rule emits when it matches, drawn from the rule's alert_context.
| Field |
|---|
user |
audit_log_event |
Response runbook
An administrator account was created, deleted, or modified. Validate that this activity is expected and authorized.
Worked example
A sample event from the rule's unit tests that triggers a match.Sample Test Event
{
"_id": "e5ca619b059fccdd0cfd9398",
"_insertion_epoch_timestamp": 1702308331,
"audit_log_event": "Created new admin",
"count": 1,
"is_netskope_personnel": true,
"organization_unit": "",
"severity_level": 2,
"supporting_data": {
"data_type": "user",
"data_values": [
"11.22.33.44",
"adminsupport@netskope.com"
]
},
"timestamp": "2023-12-11 15:25:31.000000000",
"type": "admin_audit_logs",
"ur_normalized": "adminsupport@netskope.com",
"user": "adminsupport@netskope.com"
}
Netskope Many Objects Deleted
#A user deleted a large number of objects in a short period of time.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Impact |
Detection logic
def rule(event):
audit_log_event = event.get("audit_log_event")
if audit_log_event and "Delete" in audit_log_event:
return True
return False
def title(event):
user = event.get("user", "<USER_NOT_FOUND>")
return f"[{user}] deleted many objects in a short time"
Rule specification
AnalysisType: rule
RuleID: "Netskope.ManyDeletes"
DisplayName: "Netskope Many Objects Deleted"
Enabled: true
Filename: netskope_many_deletes.py
LogTypes:
- Netskope.Audit
Tags:
- Netskope
- Configuration Required # configure threshold for your environment
- Data Destruction
Reports:
MITRE ATT&CK:
- TA0040:T1485
Severity: High
Description: A user deleted a large number of objects in a short period of time.
DedupPeriodMinutes: 60
Threshold: 10
Runbook: A user deleted a large number of objects in a short period of time. Validate that this activity is expected and authorized.
Reference: https://docs.netskope.com/en/netskope-help/admin-console/administration/audit-log/
Stages and Predicates
Fires on Netskope.Audit events when all of the conditions below hold.
Condition
audit_log_eventis presentaudit_log_eventcontainsDelete
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
audit_log_event | contains |
| field:"audit_log_event" kind:contains value:"Delete" |
audit_log_event | is_not_null | field:"audit_log_event" kind:is_not_null |
Output fields
Fields the rule emits when it matches, drawn from the rule's alert_context.
| Field |
|---|
user |
Response runbook
A user deleted a large number of objects in a short period of time. Validate that this activity is expected and authorized.
Worked example
A sample event from the rule's unit tests that triggers a match.Sample Test Event
{
"_id": "1e589befa3da30132362f32a",
"_insertion_epoch_timestamp": 1702318213,
"audit_log_event": "Deleted rbi template",
"count": 1,
"is_netskope_personnel": false,
"organization_unit": "",
"severity_level": 2,
"timestamp": "2023-12-11 18:10:13.000000000",
"type": "admin_audit_logs",
"ur_normalized": "service-account",
"user": "service-account"
}