Branch was auto-updated.

This commit is contained in:
srv-rr-gh-researchbt
2023-03-03 04:28:37 -08:00
committed by GitHub
305 changed files with 21804 additions and 14296 deletions
@@ -27,7 +27,7 @@ tags:
analytic_story:
- AWS Network ACL Activity
- Suspicious AWS Traffic
- Command and Control
- Command And Control
detections:
- Detect Spike in blocked Outbound Traffic from your AWS
product:
@@ -29,7 +29,7 @@ tags:
analytic_story:
- Hidden Cobra Malware
- Suspicious DNS Traffic
- Command and Control
- Command And Control
detections:
- DNS Query Length Outliers - MLTK
product:
@@ -19,7 +19,7 @@ tags:
analytic_story:
- Prohibited Traffic Allowed or Protocol Mismatch
- Ransomware
- Command and Control
- Command And Control
detections:
- Prohibited Network Traffic Allowed
product:
@@ -25,6 +25,7 @@ class BAFactoryInputDto:
basic_builder: BasicBuilder
detection_builder: DetectionBuilder
director: Director
attack_enrichment: dict
@dataclass(frozen=True)
class BAFactoryOutputDto:
@@ -75,43 +76,43 @@ class BAFactory():
progress_percent = ((index+1)/len(files_with_ssa)) * 100
try:
type_string = "UNKNOWN TYPE"
if type == SecurityContentType.detections:
type_string = "Detections"
self.input_dto.director.constructDetection(self.input_dto.detection_builder, file, [], [], [], {}, [], [])
detection = self.input_dto.detection_builder.getObject()
Utils.add_id(self.ids, detection, file)
#try:
type_string = "UNKNOWN TYPE"
if type == SecurityContentType.detections:
type_string = "Detections"
self.input_dto.director.constructDetection(self.input_dto.detection_builder, file, [], [], [], self.input_dto.attack_enrichment, [], [])
detection = self.input_dto.detection_builder.getObject()
Utils.add_id(self.ids, detection, file)
tag_and_nist_errors = []
if detection.tags.cis20 == None:
error = TypeError(f"Detection Tags missing cis20 field")
tag_and_nist_errors.append(ErrorWrapper(error, loc="cis20"))
tag_and_nist_errors = []
if detection.tags.nist == None:
error = TypeError(f"Detection Tags missing nist field")
tag_and_nist_errors.append(ErrorWrapper(error, loc="nist"))
if detection.tags.cis20 == None:
error = TypeError(f"Detection Tags missing cis20 field")
tag_and_nist_errors.append(ErrorWrapper(error, loc="cis20"))
if detection.tags.nist == None:
error = TypeError(f"Detection Tags missing nist field")
tag_and_nist_errors.append(ErrorWrapper(error, loc="nist"))
if len(tag_and_nist_errors) > 0:
raise ValidationError( tag_and_nist_errors , DetectionTags)
if len(tag_and_nist_errors) > 0:
raise ValidationError( tag_and_nist_errors , DetectionTags)
if not detection.deprecated and not detection.experimental:
self.output_dto.detections.append(detection)
else:
raise(Exception(f"Unsupported content type: [{type}]"))
if detection.status == "production":
self.output_dto.detections.append(detection)
else:
raise(Exception(f"Unsupported content type: [{type}]"))
if (sys.stdout.isatty() and sys.stdin.isatty() and sys.stderr.isatty()) or not already_ran:
already_ran = True
print(f"\r{f'{type_string} Progress'.rjust(23)}: [{progress_percent:3.0f}%]...", end="", flush=True)
if (sys.stdout.isatty() and sys.stdin.isatty() and sys.stderr.isatty()) or not already_ran:
already_ran = True
print(f"\r{f'{type_string} Progress'.rjust(23)}: [{progress_percent:3.0f}%]...", end="", flush=True)
except ValidationError as e:
validation_errors.append((pathlib.Path(file), e))
except Exception as e:
print(f"Unknown exception caught while Creating BA Security Content: {str(e)}")
sys.exit(1)
# except ValidationError as e:
# validation_errors.append((pathlib.Path(file), e))
# except Exception as e:
# print(f"Unknown exception caught while Creating BA Security Content: {str(e)}")
# sys.exit(1)
@@ -149,7 +149,7 @@ class NewContentQuestions():
'Unauthorized Software',
'Best Practices',
'Cloud Security',
'Command and Control',
'Command And Control',
'Lateral Movement',
'Ransomware',
'Privilege Escalation'
@@ -90,7 +90,7 @@ class ContentChanger:
def fix_wrong_kill_chain_phases(self, objects : list) -> None:
valid_kill_chain_phases = [
'Reconnaissance', 'Weaponization', 'Delivery',
'Exploitation', 'Installation', 'Command and Control',
'Exploitation', 'Installation', 'Command And Control',
'Actions on Objectives']
for obj in objects:
if 'kill_chain_phases' in obj['tags']:
@@ -196,4 +196,4 @@ class ContentChanger:
for obj in objects:
if 'Command & Control' in obj['tags']['analytic_story']:
obj['tags']['analytic_story'].remove('Command & Control')
obj['tags']['analytic_story'].append('Command and Control')
obj['tags']['analytic_story'].append('Command And Control')
@@ -24,6 +24,3 @@ class Convert:
yml_output = YmlOutput()
yml_output.writeDetections(sigma_converter_output_dto.detections, input_dto.output_path)
file_name = sigma_converter_output_dto.detections[0].file_path
print('Converted Sigma detection to: ' + input_dto.output_path + '/' + file_name)
@@ -11,10 +11,10 @@ ATTACK_TACTICS_KILLCHAIN_MAPPING = {
"Discovery": "Exploitation",
"Lateral Movement": "Exploitation",
"Collection": "Exploitation",
"Command and Control": "Command and Control",
"Command And Control": "Command and Control",
"Exfiltration": "Actions On Objectives",
"Impact": "Actions On Objectives"
"Command And Control": "Command And Control",
"Command And Control": "Command And Control",
"Exfiltration": "Actions on Objectives",
"Impact": "Actions on Objectives"
}
SES_CONTEXT_MAPPING = {
@@ -74,7 +74,7 @@ SES_KILL_CHAIN_MAPPINGS = {
"Delivery": 3,
"Exploitation": 4,
"Installation": 5,
"Command & Control": 6,
"Command And Control": 6,
"Actions on Objectives": 7
}
@@ -93,23 +93,43 @@ SES_OBSERVABLE_ROLE_MAPPING = {
}
SES_OBSERVABLE_TYPE_MAPPING = {
"Other": -1,
"Unknown": 0,
"Device": 1,
"Container": 2,
"Endpoint": 3,
"Hostname": 4,
"IP Address": 5,
"User": 6,
"Username": 7,
"Email": 8,
"Email Address": 9,
"URL": 10,
"URL Domain": 11,
"File": 12,
"File Name": 13,
"File Hash": 14,
"Process": 15,
"Process Name": 16,
"Location": 17
"Hostname": 1,
"IP Address": 2,
"MAC Address": 3,
"User Name": 4,
"Email Address": 5,
"URL String": 6,
"File Name": 7,
"File Hash": 8,
"Process Name": 9,
"Ressource UID": 10,
"Endpoint": 20,
"User": 21,
"Email": 22,
"Uniform Resource Locator": 23,
"File": 24,
"Process": 25,
"Geo Location": 26,
"Container": 27,
"Registry Key": 28,
"Registry Value": 29,
"Other": 99
}
SES_ATTACK_TACTICS_ID_MAPPING = {
"Reconnaissance": "TA0043",
"Resource_Development": "TA0042",
"Initial_Access": "TA0001",
"Execution": "TA0002",
"Persistence": "TA0003",
"Privilege_Escalation": "TA0004",
"Defense_Evasion": "TA0005",
"Credential_Access": "TA0006",
"Discovery": "TA0007",
"Lateral_Movement": "TA0008",
"Collection": "TA0009",
"Command_and_Control": "TA0011",
"Exfiltration": "TA0010",
"Impact": "TA0040"
}
@@ -41,9 +41,11 @@ class DetectionTags(BaseModel):
risk_level_id: int = None
risk_level: str = None
observable_str: str = None
evidence_str: str = None
kill_chain_phases_id: list = None
research_site_url: str = None
event_schema: str = None
mappings: list = None
@validator('cis20')
@@ -109,19 +111,19 @@ class DetectionTags(BaseModel):
raise ValueError('Mitre Attack ID are not following the pattern Txxxx: ' + values["name"])
return v
@validator('observable')
def tags_observable(cls,v,values):
valid_roles = SES_OBSERVABLE_ROLE_MAPPING.keys()
valid_types = SES_OBSERVABLE_TYPE_MAPPING.keys()
# @validator('observable')
# def tags_observable(cls,v,values):
# valid_roles = SES_OBSERVABLE_ROLE_MAPPING.keys()
# valid_types = SES_OBSERVABLE_TYPE_MAPPING.keys()
for value in v:
if value['type'] in valid_types:
for role in value['role']:
if role not in valid_roles:
raise ValueError('Observable role ' + role + ' not valid for ' + values["name"] + '. valid options are ' + str(valid_roles))
else:
raise ValueError('Observable type ' + value['type'] + ' not valid for ' + values["name"] + '. valid options are ' + str(valid_types))
return v
# for value in v:
# if value['type'] in valid_types:
# for role in value['role']:
# if role not in valid_roles:
# raise ValueError('Observable role ' + role + ' not valid for ' + values["name"] + '. valid options are ' + str(valid_roles))
# else:
# raise ValueError('Observable type ' + value['type'] + ' not valid for ' + values["name"] + '. valid options are ' + str(valid_types))
# return v
@validator('product')
def tags_product(cls, v, values):
@@ -17,9 +17,9 @@ class FindingReportObject():
else:
detection.tags.confidence_id = 3
detection.tags.context_ids = list()
for context in detection.tags.context:
detection.tags.context_ids.append(SES_CONTEXT_MAPPING[context])
# detection.tags.context_ids = list()
# for context in detection.tags.context:
# detection.tags.context_ids.append(SES_CONTEXT_MAPPING[context])
if detection.tags.impact < 20:
detection.tags.impact_id = 1
@@ -32,9 +32,10 @@ class FindingReportObject():
else:
detection.tags.impact_id = 5
detection.tags.kill_chain_phases_id = list()
detection.tags.kill_chain_phases_id = dict()
for kill_chain_phase in detection.tags.kill_chain_phases:
detection.tags.kill_chain_phases_id.append(SES_KILL_CHAIN_MAPPINGS[kill_chain_phase])
detection.tags.kill_chain_phases_id[kill_chain_phase] = SES_KILL_CHAIN_MAPPINGS[kill_chain_phase]
if detection.tags.risk_score < 20:
detection.tags.risk_level_id = 0
@@ -53,22 +54,27 @@ class FindingReportObject():
detection.tags.risk_level = "Critical"
observable_str = "["
for i in range(len(detection.tags.observable)):
role_list = []
for role in detection.tags.observable[i]["role"]:
role_list.append(str(SES_OBSERVABLE_ROLE_MAPPING[role]))
observable_str = observable_str + 'create_map("name", "' + detection.tags.observable[i]["name"] + '", "role_ids", [' + ",".join(role_list) + '], "type_id", ' + str(SES_OBSERVABLE_TYPE_MAPPING[detection.tags.observable[i]["type"]]) + ', "value", ' + detection.tags.observable[i]["name"] + ')'
if not i == len(detection.tags.observable):
for i in range(len(detection.tags.observable)):
observable_str = observable_str + 'create_map("name", "' + detection.tags.observable[i]["name"] + '", "type_id", ' + str(SES_OBSERVABLE_TYPE_MAPPING[detection.tags.observable[i]["type"]]) + ', "value", ' + detection.tags.observable[i]["name"].replace(".", "_") + ')'
if not i == (len(detection.tags.observable) - 1):
observable_str = observable_str + ', '
observable_str = observable_str + ']'
detection.tags.observable_str = observable_str
evidence_str = "create_map("
for i in range(len(detection.tags.observable)):
evidence_str = evidence_str + '"' + detection.tags.observable[i]["name"] + '", ' + detection.tags.observable[i]["name"].replace(".", "_")
if not i == (len(detection.tags.observable) - 1):
evidence_str = evidence_str + ', '
evidence_str = evidence_str + ')'
detection.tags.evidence_str = evidence_str
j2_env = Environment(
loader=FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')),
trim_blocks=True)
template = j2_env.get_template('finding_report.j2')
body = template.render(detection=detection)
body = template.render(detection=detection, attack_tactics_id_mapping=SES_ATTACK_TACTICS_ID_MAPPING)
return body
@@ -40,9 +40,9 @@ class ObjToYmlAdapter(Adapter):
obj.tags.research_site_url = research_site_url
# add ocsf schema tag
obj.tags.event_schema = 'cim'
obj.tags.event_schema = 'ocsf'
#body = FindingReportObject.writeFindingReport(obj)
body = FindingReportObject.writeFindingReport(obj)
if obj.test:
test_dict = {
@@ -59,10 +59,12 @@ class ObjToYmlAdapter(Adapter):
# remove unncessary fields
YmlWriter.writeYmlFile(file_path, obj.dict(
exclude_none=True,
include =
{
"name": True,
"id": True,
"eventSchema": True,
"version": True,
"description": True,
"search": True,
@@ -75,6 +77,7 @@ class ObjToYmlAdapter(Adapter):
"cis20" : True,
"nist": True,
"kill_chain_phases": True,
"mappings": True,
"mitre_attack_id": True,
"risk_severity": True,
"risk_score": True,
@@ -107,12 +110,13 @@ class ObjToYmlAdapter(Adapter):
))
# Add Finding Report Object
#with open(file_path, 'r') as file:
# data = file.read().replace('--body--', body)
with open(file_path, 'r') as file:
data = file.read().replace('--finding_report--', body)
f = open(file_path, "w")
f.write(data)
f.close()
#f = open(file_path, "w")
#f.write(data)
#f.close()
def writeObjectNewContent(self, object: dict, type: SecurityContentType) -> None:
if type == SecurityContentType.detections:
@@ -1,11 +1,44 @@
create_map("category_id", 101, "class_id", 101000, "detection_start_time", start_time,
"detection_end_time", end_time, "device_entities", [create_map("uid", ucast(map_get(input_event, "enrichments.device_entities.device.uid"), "string", null), "type_id", 0)],
"disposition_id", 1, "end_time", end_time, "event_id", 10100001, "event_time", timestamp,
"finding", create_map("confidence", {{ detection.tags.confidence }}, "confidence_id", {{ detection.tags.confidence_id }},
"context_ids", {{ detection.tags.context_ids }}, "impact", {{ detection.tags.impact }}, "impact_id", {{ detection.tags.impact_id }},
"kill_chain_phase", {{ detection.tags.kill_chain_phases[0] }}, "kill_chain_phase_id", {{ detection.tags.kill_chain_phases_id[0] }},
"risk_level", {{ detection.tags.risk_level }}, "risk_level_id", {{ detection.tags.risk_level_id }}, "type_id", 1, "ref_event_uid", event_id),
"message", {{ detection.tags.message }}, "metadata", create_map("log_name", {{ detection.datamodel[0] }}, "version",
"1.0.0"), "observables", {{ detection.tags.observables_str }}, "origin", create_map("product", create_map("name", "Splunk Behavioral Analytics")),
"rule", create_map("name", "{{ detection.name }}", "uid", "{{ detection.id }}", "version", "1"), "start_time", start_time, "time", start_time,
"user_entities", [create_map("uid", ucast(map_get(input_event, "enrichments.user_entities.user.uid"),"string", null))])
| eval body=create_map(
"activity_id", 1,
"analytic_stories", [{%- for story in detection.tags.analytic_story %}"{{story}}"{% if not loop.last %}, {% endif %}{%- endfor -%}],
"cis_csc", [{%- for cis in detection.tags.cis20 %}create_map("control", "{{cis}}", "version", 7){% if not loop.last %}, {% endif %}{%- endfor -%}],
"category_uid", 2,
"class_name", "Detection Report",
"class_uid", 102001,
"confidence", {{ detection.tags.confidence }},
"confidence_id", {{ detection.tags.confidence_id }},
"devices", [
create_map(
"hostname", device_hostname, "type_id", 0, "uuid", ucast(map_get(device,"uuid"), "string", null)
)
],
"duration", 0,
"time", timestamp,
"evidence", {{ detection.tags.evidence_str }},
"impact", {{ detection.tags.impact }},
"impact_id", {{ detection.tags.impact_id }},
"kill_chain", [{%- for kill_chain_phase in detection.tags.kill_chain_phases %}create_map("phase", "{{kill_chain_phase}}", "phase_id", {{detection.tags.kill_chain_phases_id[kill_chain_phase]}}){% if not loop.last %}, {% endif %}{%- endfor -%}],
"attacks", [{%- for enrichment in detection.tags.mitre_attack_enrichments %}create_map("tactics", [{%- for tactic in enrichment.mitre_attack_tactics %}create_map("name", "{{tactic}}", "uid", "{{attack_tactics_id_mapping[tactic|replace(" ", "_")]}}"){% if not loop.last %}, {% endif %}{%- endfor -%}], "technique", create_map("name", "{{ enrichment.mitre_attack_technique }}", "uid", "{{ enrichment.mitre_attack_id }}"), "version", "12.1"){% if not loop.last %}, {% endif %}{%- endfor -%}],
"message", concat("{{ detection.name }} has been triggered on ", device_hostname, " by ", process_user_name, "."),
"metadata", create_map(
"product", create_map(
"name", "Behavioral Analytic Service",
"vendor_name", "Splunk"
),
"version", "1.0.0"
),
"nist", [{%- for nist in detection.tags.nist %}"{{nist}}"{% if not loop.last %}, {% endif %}{%- endfor -%}],
"observables", {{ detection.tags.observable_str }},
"risk_level", "{{ detection.tags.risk_level }}",
"risk_level_id", {{ detection.tags.risk_level_id }},
"risk_score", {{ detection.tags.risk_score }},
"severity_id", {{ detection.tags.impact_id }},
"type_uid", 10200101,
"users", [
create_map(
"name", process_user_name, "uuid", ucast(map_get(device,"uuid"), "string", null)
)
]
)
| into write_ba_finding_events();
@@ -11,6 +11,7 @@ class YmlOutput():
for obj in objects:
file_path = obj.file_path
YmlWriter.writeYmlFile(os.path.join(output_path, file_path), obj.dict(
exclude_none=True,
include =
{
"name": True,
@@ -30,13 +31,17 @@ class YmlOutput():
{
"analytic_story": True,
"asset_type": True,
"atomic_guid": True,
"confidence": True,
"impact": True,
"drilldown_search": True,
"mappings": True,
"message": True,
"mitre_attack_id": True,
"atomic_guid": True,
"kill_chain_phases:": True,
"observable": True,
"product": True,
"required_fields": True,
"risk_score": True,
"security_domain": True
},
@@ -8,28 +8,16 @@ from sigma.types import SigmaCompareExpression
from sigma.exceptions import SigmaFeatureNotSupportedByBackendError
from sigma.pipelines.splunk.splunk import splunk_sysmon_process_creation_cim_mapping, splunk_windows_registry_cim_mapping, splunk_windows_file_event_cim_mapping
from bin.contentctl_project.contentctl_core.domain.entities.detection import Detection
from typing import ClassVar, Dict, List, Optional, Pattern, Tuple
class SplunkDeferredRegularExpression(DeferredTextQueryExpression):
template = 'regex {field}{op}"{value}"'
operators = {
True: "!=",
False: "=",
}
default_field = "_raw"
class SplunkDeferredCIDRExpression(DeferredTextQueryExpression):
template = 'where {op}cidrmatch("{value}", {field})'
operators = {
True: "NOT ",
False: "",
}
default_field = "_raw"
class SplunkBABackend(TextQueryBackend):
"""Splunk SPL backend."""
precedence: ClassVar[Tuple[ConditionItem, ConditionItem, ConditionItem]] = (ConditionNOT, ConditionOR, ConditionAND)
group_expression : ClassVar[str] = "({expr})"
parenthesize : bool = True
or_token : ClassVar[str] = "OR"
and_token : ClassVar[str] = "AND"
@@ -45,7 +33,7 @@ class SplunkBABackend(TextQueryBackend):
wildcard_single : ClassVar[str] = "%"
add_escaped : ClassVar[str] = "\\"
re_expression : ClassVar[str] = "{regex}"
re_expression : ClassVar[str] = "match_regex({field}, /(?i){regex}/)=true"
re_escape_char : ClassVar[str] = "\\"
re_escape : ClassVar[Tuple[str]] = ('"',)
@@ -72,29 +60,19 @@ class SplunkBABackend(TextQueryBackend):
unbound_value_num_expression : ClassVar[str] = '{value}'
unbound_value_re_expression : ClassVar[str] = '{value}'
deferred_start : ClassVar[str] = "\n| "
deferred_separator : ClassVar[str] = "\n| "
deferred_start : ClassVar[str] = " "
deferred_separator : ClassVar[str] = " OR "
deferred_only_query : ClassVar[str] = "*"
wildcard_match_expression : ClassVar[Optional[str]] = "like({field}, {value})"
def __init__(self, processing_pipeline: Optional["sigma.processing.pipeline.ProcessingPipeline"] = None, collect_errors: bool = False, min_time : str = "-30d", max_time : str = "now", **kwargs):
def __init__(self, processing_pipeline: Optional["sigma.processing.pipeline.ProcessingPipeline"] = None, collect_errors: bool = False, min_time : str = "-30d", max_time : str = "now", detection : Detection = None, field_mapping: dict = None, **kwargs):
super().__init__(processing_pipeline, collect_errors, **kwargs)
self.min_time = min_time or "-30d"
self.max_time = max_time or "now"
def convert_condition_field_eq_val_re(self, cond : ConditionFieldEqualsValueExpression, state : "sigma.conversion.state.ConversionState") -> SplunkDeferredRegularExpression:
"""Defer regular expression matching to pipelined regex command after main search expression."""
if cond.parent_condition_chain_contains(ConditionOR):
raise SigmaFeatureNotSupportedByBackendError("ORing regular expressions is not yet supported by Splunk backend", source=cond.source)
return SplunkDeferredRegularExpression(state, cond.field, super().convert_condition_field_eq_val_re(cond, state)).postprocess(None, cond)
def convert_condition_field_eq_val_cidr(self, cond : ConditionFieldEqualsValueExpression, state : "sigma.conversion.state.ConversionState") -> SplunkDeferredCIDRExpression:
"""Defer CIDR network range matching to pipelined where cidrmatch command after main search expression."""
if cond.parent_condition_chain_contains(ConditionOR):
raise SigmaFeatureNotSupportedByBackendError("ORing CIDR matching is not yet supported by Splunk backend", source=cond.source)
return SplunkDeferredCIDRExpression(state, cond.field, super().convert_condition_field_eq_val_cidr(cond, state)).postprocess(None, cond)
self.detection = detection
self.field_mapping = field_mapping
def finalize_query_data_model(self, rule: SigmaRule, query: str, index: int, state: ConversionState) -> str:
@@ -103,15 +81,49 @@ class SplunkBABackend(TextQueryBackend):
except KeyError:
raise SigmaFeatureNotSupportedByBackendError("No fields specified by processing pipeline")
fields_input_parsing = ''
for count, value in enumerate(fields):
fields_input_parsing = fields_input_parsing + value + '=ucast(map_get(input_event, "' + value + '"), "string", null)'
if not count == len(fields) - 1:
fields_input_parsing = fields_input_parsing + ', '
# fields_input_parsing = ''
# for count, value in enumerate(fields):
# fields_input_parsing = fields_input_parsing + value + '=ucast(map_get(input_event, "' + value + '"), "string", null)'
# if not count == len(fields) - 1:
# fields_input_parsing = fields_input_parsing + ', '
return f"""| from read_ssa_enriched_events() | eval timestamp=parse_long(ucast(map_get(input_event,"_time"), "string", null)),
{fields_input_parsing} | where {query} | output tbd
detection_str = """
| from read_ba_enriched_events()
| eval timestamp = ucast(map_get(input_event,"time"),"long", null)
| eval metadata = ucast(map_get(input_event, "metadata"),"map<string, any>", null)
| eval metadata_uid = ucast(map_get(metadata, "uid"),"string", null)
""".replace("\n", " ")
parsed_fields = []
for field in self.field_mapping["mapping"].keys():
mapped_field = self.field_mapping["mapping"][field]
parent = 'input_event'
i = 1
values = mapped_field.split('.')
for val in values:
if parent == "input_event":
new_val = val
else:
new_val = parent + '_' + val
if new_val in parsed_fields:
parent = new_val
i = i + 1
continue
if i == len(values):
parser_str = '| eval ' + new_val + '' + '=ucast(map_get(' + parent + ',"' + val + '"), "string", null) '
else:
parser_str = '| eval ' + new_val + '' + '=ucast(map_get(' + parent + ',"' + val + '"), "map<string, any>", null) '
detection_str = detection_str + parser_str
parsed_fields.append(new_val)
parent = new_val
i = i + 1
detection_str = detection_str + "| where " + query
detection_str = detection_str.replace("\\\\\\\\", "\\\\")
return detection_str
def finalize_output_data_model(self, queries: List[str]) -> List[str]:
return queries
@@ -66,6 +66,7 @@ class SecurityContentDetectionBuilder(DetectionBuilder):
def addRBA(self) -> None:
if self.security_content_obj:
risk_objects = []
risk_object_user_types = {'user', 'username', 'email address'}
risk_object_system_types = {'device', 'endpoint', 'hostname', 'ip address'}
@@ -74,20 +75,16 @@ class SecurityContentDetectionBuilder(DetectionBuilder):
for entity in self.security_content_obj.tags.observable:
risk_object = dict()
if entity['type'].lower() in risk_object_user_types:
for r in entity['role']:
if 'attacker' == r.lower() or 'victim' ==r.lower():
risk_object['risk_object_type'] = 'user'
risk_object['risk_object_field'] = entity['name']
risk_object['risk_score'] = self.security_content_obj.tags.risk_score
risk_objects.append(risk_object)
risk_object['risk_object_type'] = 'user'
risk_object['risk_object_field'] = entity['name']
risk_object['risk_score'] = self.security_content_obj.tags.risk_score
risk_objects.append(risk_object)
elif entity['type'].lower() in risk_object_system_types:
for r in entity['role']:
if 'attacker' == r.lower() or 'victim' ==r.lower():
risk_object['risk_object_type'] = 'system'
risk_object['risk_object_field'] = entity['name']
risk_object['risk_score'] = self.security_content_obj.tags.risk_score
risk_objects.append(risk_object)
risk_object['risk_object_type'] = 'system'
risk_object['risk_object_field'] = entity['name']
risk_object['risk_score'] = self.security_content_obj.tags.risk_score
risk_objects.append(risk_object)
else:
risk_object['threat_object_field'] = entity['name']
risk_object['threat_object_type'] = entity['type'].lower()
@@ -1,7 +1,9 @@
import os
import sys
import copy
from dataclasses import dataclass
from jinja2 import Environment, FileSystemLoader
from sigma.processing.conditions import LogsourceCondition
from sigma.processing.transformations import AddConditionTransformation, FieldMappingTransformation, DetectionItemFailureTransformation, RuleFailureTransformation, SetStateTransformation
@@ -16,14 +18,17 @@ from bin.contentctl_project.contentctl_infrastructure.builder.yml_reader import
from bin.contentctl_project.contentctl_core.domain.entities.detection import Detection
from bin.contentctl_project.contentctl_core.domain.entities.data_source import DataSource
from bin.contentctl_project.contentctl_infrastructure.builder.backend_splunk_ba import SplunkBABackend
from bin.contentctl_project.contentctl_core.application.factory.utils.utils import Utils
from bin.contentctl_project.contentctl_core.domain.constants.constants import *
@dataclass(frozen=True)
class SigmaConverterInputDto:
data_model: SigmaConverterTarget
detection_path: str
detection_folder : str
input_path: str
log_source: str
cim_to_ocsf: bool
@dataclass(frozen=True)
@@ -40,115 +45,177 @@ class SigmaConverter():
def execute(self, input_dto: SigmaConverterInputDto) -> None:
detection = self.read_detection(input_dto.detection_path)
data_source = self.load_data_source(input_dto.input_path, detection.data_source[0])
if not data_source:
print("ERROR: Didn't find data source with name: " + detection.data_source[0] + " for detection " + detection.name)
detection_files = []
errors = []
if input_dto.detection_path:
detection_files.append(input_dto.detection_path)
elif input_dto.detection_folder:
detection_files = Utils.get_all_yml_files_from_directory(input_dto.detection_folder)
else:
print("ERROR: --detection_path or --detection_folder needed.")
sys.exit(1)
file_name = detection.name.replace(' ', '_').replace('-','_').replace('.','_').replace('/','_').lower()
sigma_rule = self.get_sigma_rule(detection, data_source)
if input_dto.data_model == SigmaConverterTarget.RAW:
if input_dto.log_source and input_dto.log_source != detection.data_source[0][0]:
try:
field_mapping = self.find_mapping(data_source.convert_to_log_source, 'data_source', input_dto.log_source)
except Exception as e:
print(e)
print("ERROR: Couldn't find data source mapping for log source " + input_dto.log_source + " for detection: " + detection.name)
sys.exit(1)
logsource_condition = self.get_logsource_condition(data_source)
processing_item = self.get_field_transformation_processing_item(
field_mapping['mapping'],
logsource_condition
)
sigma_processing_pipeline = self.get_pipeline_from_processing_items([processing_item])
splunk_backend = SplunkBackend(processing_pipeline=sigma_processing_pipeline)
data_source = self.load_data_source(input_dto.input_path, input_dto.log_source)
else:
splunk_backend = SplunkBackend()
search = splunk_backend.convert(sigma_rule)[0]
search = self.add_source_macro(search, data_source.type)
search = self.add_stats_count(search, data_source.raw_fields)
search = self.add_timeformat_conversion(search)
search = self.add_filter_macro(search, file_name)
elif input_dto.data_model == SigmaConverterTarget.CIM:
logsource_condition = self.get_logsource_condition(data_source)
try:
field_mapping = self.find_mapping(data_source.field_mappings, 'data_model', 'cim')
except Exception as e:
print(e)
print("ERROR: Couldn't find data source mapping to cim for log source " + detection.data_source[0] + " and detection " + detection.name)
sys.exit(1)
sigma_transformation_processing_item = self.get_field_transformation_processing_item(
field_mapping['mapping'],
logsource_condition
)
sigma_state_fields_processing_item = self.get_state_fields_processing_item(
field_mapping['mapping'].values(),
logsource_condition
)
sigma_state_data_model_processing_item = self.get_state_data_model_processing_item(
field_mapping['data_set'],
logsource_condition
)
sigma_processing_pipeline = self.get_pipeline_from_processing_items([
sigma_transformation_processing_item,
sigma_state_fields_processing_item,
sigma_state_data_model_processing_item
])
splunk_backend = SplunkBackend(processing_pipeline=sigma_processing_pipeline)
search = splunk_backend.convert(sigma_rule, "data_model")[0]
search = self.add_filter_macro(search, file_name)
elif input_dto.data_model == SigmaConverterTarget.OCSF:
processing_items = list()
logsource_condition = self.get_logsource_condition(data_source)
if input_dto.log_source and input_dto.log_source != detection.data_source[0]:
try:
field_mapping = self.find_mapping(data_source.convert_to_log_source, 'data_source', input_dto.log_source)
except Exception as e:
print(e)
print("ERROR: Couldn't find data source mapping for log source " + input_dto.log_source + " and detection " + detection.name)
for detection_file in detection_files:
#try:
detection = self.read_detection(str(detection_file))
print("Converting detection: " + detection.name)
data_source = self.load_data_source(input_dto.input_path, detection.data_source[0])
if not data_source:
print("ERROR: Didn't find data source with name: " + detection.data_source[0] + " for detection " + detection.name)
sys.exit(1)
processing_items.append(
self.get_field_transformation_processing_item(
file_name = detection.name.replace(' ', '_').replace('-','_').replace('.','_').replace('/','_').lower()
sigma_rule = self.get_sigma_rule(detection, data_source)
if input_dto.data_model == SigmaConverterTarget.RAW:
if input_dto.log_source and input_dto.log_source != detection.data_source[0][0]:
try:
field_mapping = self.find_mapping(data_source.convert_to_log_source, 'data_source', input_dto.log_source)
except Exception as e:
print(e)
print("ERROR: Couldn't find data source mapping for log source " + input_dto.log_source + " for detection: " + detection.name)
sys.exit(1)
logsource_condition = self.get_logsource_condition(data_source)
processing_item = self.get_field_transformation_processing_item(
field_mapping['mapping'],
logsource_condition
)
sigma_processing_pipeline = self.get_pipeline_from_processing_items([processing_item])
splunk_backend = SplunkBackend(processing_pipeline=sigma_processing_pipeline)
data_source = self.load_data_source(input_dto.input_path, input_dto.log_source)
else:
splunk_backend = SplunkBackend()
search = splunk_backend.convert(sigma_rule)[0]
search = self.add_source_macro(search, data_source.type)
search = self.add_stats_count(search, data_source.raw_fields)
search = self.add_timeformat_conversion(search)
search = self.add_filter_macro(search, file_name)
detection.file_path = file_name + '.yml'
elif input_dto.data_model == SigmaConverterTarget.CIM:
logsource_condition = self.get_logsource_condition(data_source)
try:
field_mapping = self.find_mapping(data_source.field_mappings, 'data_model', 'cim')
except Exception as e:
print(e)
print("ERROR: Couldn't find data source mapping to cim for log source " + detection.data_source[0] + " and detection " + detection.name)
sys.exit(1)
sigma_transformation_processing_item = self.get_field_transformation_processing_item(
field_mapping['mapping'],
logsource_condition
)
)
data_source = self.load_data_source(input_dto.input_path, input_dto.log_source)
sigma_state_fields_processing_item = self.get_state_fields_processing_item(
field_mapping['mapping'].values(),
logsource_condition
)
sigma_state_data_model_processing_item = self.get_state_data_model_processing_item(
field_mapping['data_set'],
logsource_condition
)
sigma_processing_pipeline = self.get_pipeline_from_processing_items([
sigma_transformation_processing_item,
sigma_state_fields_processing_item,
sigma_state_data_model_processing_item
])
splunk_backend = SplunkBackend(processing_pipeline=sigma_processing_pipeline)
search = splunk_backend.convert(sigma_rule, "data_model")[0]
search = self.add_filter_macro(search, file_name)
field_mapping = self.find_mapping(data_source.field_mappings, 'data_model', 'ocsf')
detection.file_path = file_name + '.yml'
processing_items.append(
self.get_field_transformation_processing_item(
field_mapping['mapping'],
logsource_condition
)
)
processing_items.append(
self.get_state_fields_processing_item(
field_mapping['mapping'].values(),
logsource_condition
)
)
elif input_dto.data_model == SigmaConverterTarget.OCSF:
sigma_processing_pipeline = self.get_pipeline_from_processing_items(processing_items)
if not data_source.name == "Windows Security 4688":
print("ERROR: Convert command for OCSF only supports data source Windows Security 4688 for now.")
continue
splunk_backend = SplunkBABackend(processing_pipeline=sigma_processing_pipeline)
search = splunk_backend.convert(sigma_rule, "data_model")[0]
processing_items = list()
logsource_condition = self.get_logsource_condition(data_source)
if input_dto.log_source and input_dto.log_source != detection.data_source[0]:
try:
field_mapping = self.find_mapping(data_source.convert_to_log_source, 'data_source', input_dto.log_source)
except Exception as e:
print(e)
print("ERROR: Couldn't find data source mapping for log source " + input_dto.log_source + " and detection " + detection.name)
sys.exit(1)
detection.search = search
detection.file_path = file_name + '.yml'
self.output_dto.detections.append(detection)
processing_items.append(
self.get_field_transformation_processing_item(
field_mapping['mapping'],
logsource_condition
)
)
data_source = self.load_data_source(input_dto.input_path, input_dto.log_source)
if input_dto.cim_to_ocsf:
field_mapping_dot = {
"data_model": "ocsf",
"mapping": {
"process_name": "process.file.name",
"parent_process_name": "actor.process.file.name",
"parent_process": "actor.process.cmd_line",
"cmd_line": "process.cmd_line",
"process": "process.cmd_line",
"process_path": "process.file.path",
"process_file_path": "process.file.path",
"user": "process.user.name",
"dest": "device.hostname"
}
}
field_mapping = copy.deepcopy(field_mapping_dot)
for field in field_mapping["mapping"].keys():
field_mapping["mapping"][field] = field_mapping["mapping"][field].replace(".", "_")
else:
field_mapping = self.find_mapping(data_source.field_mappings, 'data_model', 'ocsf')
self.add_required_fields_and_mappings(field_mapping_dot, detection)
self.update_observables(detection)
processing_items.append(
self.get_field_transformation_processing_item(
field_mapping['mapping'],
logsource_condition
)
)
processing_items.append(
self.get_state_fields_processing_item(
field_mapping['mapping'].values(),
logsource_condition
)
)
sigma_processing_pipeline = self.get_pipeline_from_processing_items(processing_items)
if input_dto.cim_to_ocsf:
splunk_backend = SplunkBABackend(processing_pipeline=sigma_processing_pipeline, detection=detection, field_mapping=field_mapping_dot)
else:
splunk_backend = SplunkBABackend(processing_pipeline=sigma_processing_pipeline, detection=detection)
search = splunk_backend.convert(sigma_rule, "data_model")[0]
search = search + ' --finding_report--'
detection.file_path = 'ssa___' + file_name + '.yml'
detection.search = search
self.output_dto.detections.append(detection)
# except Exception as e:
# print(e)
# errors.append("ERROR: Converting detection " + detection.name)
print()
for error in errors:
print(error)
print()
def read_detection(self, detection_path : str) -> Detection:
yml_dict = YmlReader.load_file(detection_path)
@@ -162,7 +229,7 @@ class SigmaConverter():
data_sources = list()
files = Utils.get_all_yml_files_from_directory(os.path.join(input_path, 'data_sources'))
for file in files:
data_sources.append(DataSource.parse_obj(YmlReader.load_file(file)))
data_sources.append(DataSource.parse_obj(YmlReader.load_file(str(file))))
data_source = None
@@ -256,3 +323,52 @@ class SigmaConverter():
return mapping
raise AttributeError("ERROR: Couldn't find mapping.")
def add_required_fields_and_mappings(self, field_mapping: dict, detection: Detection) -> None:
required_fields = list()
required_fields = ["process.user.name", "device.hostname"]
mappings = list()
mappings = [
{
"ocsf": "process.user.name",
"cim": "user"
},
{
"ocsf": "device.hostname",
"cim": "dest"
}
]
for mapping in field_mapping["mapping"].keys():
for selection in detection.search.keys():
if selection != "condition":
for detection_field in detection.search[selection]:
if detection_field.startswith(mapping):
if not field_mapping["mapping"][mapping] in required_fields:
required_fields.append(field_mapping["mapping"][mapping])
mappings.append({"ocsf": field_mapping["mapping"][mapping], "cim": mapping})
detection.tags.mappings = mappings
detection.tags.required_fields = required_fields
def update_observables(self, detection : Detection) -> None:
mapping_field_to_type = {
"process.user.name": "User Name",
"device.hostname": "Hostname",
"process.file.name": "File Name",
"actor.process.file.name": "File Name",
"actor.process.cmd_line": "Process",
"process.cmd_line": "Other",
"process.file.path": "File"
}
observables = list()
for field in detection.tags.required_fields:
observables.append({
"name": field,
"type": mapping_field_to_type[field]
})
detection.tags.observable = observables
@@ -136,7 +136,7 @@ action.escu.full_search_name = ESCU - Get Parent Process Info - Response Task
description = This search queries the Endpoint data model to give you details about the parent process of a process running on a host which is under investigation. Enter the values of the process name in question and the dest
action.escu.creation_date = 2019-02-28
action.escu.modification_date = 2019-02-28
action.escu.analytic_story = ["Collection and Staging", "Command and Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"]
action.escu.analytic_story = ["Collection and Staging", "Command And Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"]
action.escu.earliest_time_offset = 3600
action.escu.latest_time_offset = 86400
action.escu.providing_technologies = []
@@ -136,7 +136,7 @@ action.escu.full_search_name = ESCU - Get Parent Process Info - Response Task
description = This search queries the Endpoint data model to give you details about the parent process of a process running on a host which is under investigation. Enter the values of the process name in question and the dest
action.escu.creation_date = 2019-02-28
action.escu.modification_date = 2019-02-28
action.escu.analytic_story = ["Collection and Staging", "Command and Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"]
action.escu.analytic_story = ["Collection and Staging", "Command And Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"]
action.escu.earliest_time_offset = 3600
action.escu.latest_time_offset = 86400
action.escu.providing_technologies = []
@@ -1 +1 @@
{"response_tasks": [{"name": "Get Parent Process Info", "id": "fecf2918-670d-4f1c-872b-3d7317a41bf9", "version": 2, "date": "2019-02-28", "author": "Bhavin Patel, Splunk", "type": "Investigation", "datamodel": ["Endpoint"], "description": "This search queries the Endpoint data model to give you details about the parent process of a process running on a host which is under investigation. Enter the values of the process name in question and the dest", "search": "| tstats `security_content_summariesonly` count values(Processes.process) as process min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes by Processes.user Processes.parent_process_name Processes.process_name Processes.dest | `drop_dm_object_name(\"Processes\")` | search parent_process_name= $parent_process_name$ |search dest = $dest$ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`", "how_to_implement": "You must be ingesting endpoint data that tracks process activity, including parent-child relationships from your endpoints to populate the Endpoint data model in the Processes node. The command-line arguments are mapped to the \"process\" field in the Endpoint data model.", "known_false_positives": "", "references": [], "inputs": ["parent_process_name", "dest"], "tags": {"analytic_story": ["Collection and Staging", "Command and Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"], "product": ["Splunk Phantom"], "required_fields": ["_time", "Processes.user", "Processes.parent_process_name", "Processes.process_name", "Processes.dest"], "security_domain": "endpoint"}, "lowercase_name": "get_parent_process_info"}]}
{"response_tasks": [{"name": "Get Parent Process Info", "id": "fecf2918-670d-4f1c-872b-3d7317a41bf9", "version": 2, "date": "2019-02-28", "author": "Bhavin Patel, Splunk", "type": "Investigation", "datamodel": ["Endpoint"], "description": "This search queries the Endpoint data model to give you details about the parent process of a process running on a host which is under investigation. Enter the values of the process name in question and the dest", "search": "| tstats `security_content_summariesonly` count values(Processes.process) as process min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes by Processes.user Processes.parent_process_name Processes.process_name Processes.dest | `drop_dm_object_name(\"Processes\")` | search parent_process_name= $parent_process_name$ |search dest = $dest$ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`", "how_to_implement": "You must be ingesting endpoint data that tracks process activity, including parent-child relationships from your endpoints to populate the Endpoint data model in the Processes node. The command-line arguments are mapped to the \"process\" field in the Endpoint data model.", "known_false_positives": "", "references": [], "inputs": ["parent_process_name", "dest"], "tags": {"analytic_story": ["Collection and Staging", "Command And Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"], "product": ["Splunk Phantom"], "required_fields": ["_time", "Processes.user", "Processes.parent_process_name", "Processes.process_name", "Processes.dest"], "security_domain": "endpoint"}, "lowercase_name": "get_parent_process_info"}]}
@@ -1 +1 @@
{"response_tasks": [{"name": "Get Parent Process Info", "id": "fecf2918-670d-4f1c-872b-3d7317a41bf9", "version": 2, "date": "2019-02-28", "author": "Bhavin Patel, Splunk", "type": "Investigation", "datamodel": ["Endpoint"], "description": "This search queries the Endpoint data model to give you details about the parent process of a process running on a host which is under investigation. Enter the values of the process name in question and the dest", "search": "| tstats `security_content_summariesonly` count values(Processes.process) as process min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes by Processes.user Processes.parent_process_name Processes.process_name Processes.dest | `drop_dm_object_name(\"Processes\")` | search parent_process_name= $parent_process_name$ |search dest = $dest$ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`", "how_to_implement": "You must be ingesting endpoint data that tracks process activity, including parent-child relationships from your endpoints to populate the Endpoint data model in the Processes node. The command-line arguments are mapped to the \"process\" field in the Endpoint data model.", "known_false_positives": "", "references": [], "inputs": ["parent_process_name", "dest"], "tags": {"analytic_story": ["Collection and Staging", "Command and Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"], "product": ["Splunk Phantom"], "required_fields": ["_time", "Processes.user", "Processes.parent_process_name", "Processes.process_name", "Processes.dest"], "security_domain": "endpoint"}, "lowercase_name": "get_parent_process_info"}]}
{"response_tasks": [{"name": "Get Parent Process Info", "id": "fecf2918-670d-4f1c-872b-3d7317a41bf9", "version": 2, "date": "2019-02-28", "author": "Bhavin Patel, Splunk", "type": "Investigation", "datamodel": ["Endpoint"], "description": "This search queries the Endpoint data model to give you details about the parent process of a process running on a host which is under investigation. Enter the values of the process name in question and the dest", "search": "| tstats `security_content_summariesonly` count values(Processes.process) as process min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes by Processes.user Processes.parent_process_name Processes.process_name Processes.dest | `drop_dm_object_name(\"Processes\")` | search parent_process_name= $parent_process_name$ |search dest = $dest$ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`", "how_to_implement": "You must be ingesting endpoint data that tracks process activity, including parent-child relationships from your endpoints to populate the Endpoint data model in the Processes node. The command-line arguments are mapped to the \"process\" field in the Endpoint data model.", "known_false_positives": "", "references": [], "inputs": ["parent_process_name", "dest"], "tags": {"analytic_story": ["Collection and Staging", "Command And Control", "DHS Report TA18-074A", "Disabling Security Tools", "Emotet Malware DHS Report TA18-201A ", "Hidden Cobra Malware", "Lateral Movement", "Malicious PowerShell", "Monitor for Unauthorized Software", "Netsh Abuse", "Orangeworm Attack Group", "Phishing Payloads", "Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns", "Prohibited Traffic Allowed or Protocol Mismatch", "Ransomware", "SamSam Ransomware", "Suspicious Command-Line Executions", "Suspicious DNS Traffic", "Suspicious MSHTA Activity", "Suspicious WMI Use", "Suspicious Windows Registry Activities", "Unusual Processes", "Windows Defense Evasion Tactics", "Windows File Extension and Association Abuse", "Windows Log Manipulation", "Windows Persistence Techniques", "Windows Privilege Escalation", "Windows Service Abuse", "DarkSide Ransomware"], "product": ["Splunk Phantom"], "required_fields": ["_time", "Processes.user", "Processes.parent_process_name", "Processes.process_name", "Processes.dest"], "security_domain": "endpoint"}, "lowercase_name": "get_parent_process_info"}]}
@@ -23,7 +23,7 @@ references: []
tags:
analytic_story:
- Collection and Staging
- Command and Control
- Command And Control
- DHS Report TA18-074A
- Disabling Security Tools
- 'Emotet Malware DHS Report TA18-201A '
+10 -4
View File
@@ -125,7 +125,8 @@ def generate(args) -> None:
os.path.abspath(args.path),
SecurityContentBasicBuilder(),
SecurityContentDetectionBuilder(force_cached_or_offline = args.cached_and_offline, skip_enrichment=args.skip_enrichment),
SecurityContentDirector()
SecurityContentDirector(),
AttackEnrichment.get_attack_lookup(args.path, force_cached_or_offline=args.cached_and_offline, skip_enrichment=args.skip_enrichment)
)
@@ -196,7 +197,8 @@ def validate(args) -> None:
os.path.abspath(args.path),
SecurityContentBasicBuilder(),
SecurityContentDetectionBuilder(force_cached_or_offline = args.cached_and_offline, check_references=args.check_references, skip_enrichment=args.skip_enrichment),
SecurityContentDirector()
SecurityContentDirector(),
AttackEnrichment.get_attack_lookup(args.path, force_cached_or_offline=args.cached_and_offline, skip_enrichment=args.skip_enrichment)
)
if args.product == "ESCU" or args.product == "all":
@@ -319,8 +321,10 @@ def convert(args) -> None:
sigma_converter_input_dto = SigmaConverterInputDto(
data_model = data_model,
detection_path = args.detection_path,
detection_folder = args.detection_folder,
input_path = args.path,
log_source = args.log_source
log_source = args.log_source,
cim_to_ocsf = args.cim_to_ocsf
)
convert_input_dto = ConvertInputDto(
@@ -408,7 +412,9 @@ def main(args):
convert_parser.add_argument("-dm", "--data_model", required=False, type=str, default="cim", help="converter target, choose between cim, raw, ba")
convert_parser.add_argument("-lo", "--log_source", required=False, type=str, help="converter log source")
convert_parser.add_argument("-dp", "--detection_path", required=True, type=str, help="path to the detection")
convert_parser.add_argument("-dp", "--detection_path", required=False, type=str, help="path to a single detection")
convert_parser.add_argument("-df", "--detection_folder", required=False, type=str, help="path to a detection folder")
convert_parser.add_argument("-cto", "--cim_to_ocsf", action=argparse.BooleanOptionalAction, help="temp: cim to ocsf")
convert_parser.add_argument("-o", "--output", required=True, type=str, help="output path to store the detections")
convert_parser.set_defaults(func=convert)
@@ -39,11 +39,11 @@ field_mappings:
- data_model: ocsf
mapping:
NewProcessId: process.pid
NewProcessName: process.file
NewProcessName: process.file.name
Process_Command_Line: process.cmd_line
SubjectUserSid: user.name
ProcessId: actor_process.pid
ParentProcessName: actor_process.file
ParentProcessName: actor.process.file.name
Computer: origin.device.name
convert_to_log_source:
- data_source: Sysmon Event ID 1
@@ -45,7 +45,7 @@ tags:
analytic_story:
- AWS Network ACL Activity
- Suspicious AWS Traffic
- Command and Control
- Command And Control
asset_type: AWS Instance
confidence: 50
impact: 50
@@ -33,7 +33,7 @@ tags:
- DNS Hijacking
- Suspicious DNS Traffic
- Host Redirection
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -7,7 +7,7 @@ status: deprecated
type: TTP
description: This search is used to detect attempts to use DNS tunneling, by calculating
the length of responses to DNS TXT queries. Endpoints using DNS as a method of transmission
for data exfiltration, command and control, or evasion of security controls can
for data exfiltration, Command And Control, or evasion of security controls can
often be detected by noting unusually large volumes of DNS traffic. Deprecated because
this detection should focus on DNS queries instead of DNS responses.
data_source: []
@@ -32,7 +32,7 @@ references: []
tags:
analytic_story:
- Suspicious DNS Traffic
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -9,7 +9,7 @@ description: 'This search is used to detect DNS tunneling, by calculating the su
of the length of DNS queries and DNS answers. The search also filters out potential
false positives by filtering out queries made to internal systems and the queries
originating from internal DNS, Web, and Email servers. Endpoints using DNS as a
method of transmission for data exfiltration, command and control, or evasion of
method of transmission for data exfiltration, Command And Control, or evasion of
security controls can often be detected by noting an unusually large volume of DNS
traffic. \
@@ -48,7 +48,7 @@ tags:
analytic_story:
- Data Protection
- Suspicious DNS Traffic
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -24,7 +24,7 @@ tags:
- DNS Hijacking
- Suspicious DNS Traffic
- Host Redirection
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -8,7 +8,7 @@ type: TTP
description: The following analytic identifies regasm.exe with a network connection
to a public IP address, exluding private IP space. This particular technique has
been used in the wild to bypass application control products. Regasm.exe and Regsvcs.exe
are signed by Microsoft. By contacting a remote command and control server, the
are signed by Microsoft. By contacting a remote Command And Control server, the
adversary will have the ability to escalate privileges and complete the objectives.
During investigation, identify and retrieve the content being loaded. Review parallel
processes for additional suspicious behavior. Gather any other file modifications
@@ -8,7 +8,7 @@ type: TTP
description: The following analytic identifies Regsvcs.exe with a network connection
to a public IP address, exluding private IP space. This particular technique has
been used in the wild to bypass application control products. Regasm.exe and Regsvcs.exe
are signed by Microsoft. By contacting a remote command and control server, the
are signed by Microsoft. By contacting a remote Command And Control server, the
adversary will have the ability to escalate privileges and complete the objectives.
During investigation, identify and retrieve the content being loaded. Review parallel
processes for additional suspicious behavior. Gather any other file modifications
@@ -35,7 +35,7 @@ tags:
- Suspicious DNS Traffic
- Dynamic DNS
- Data Exfiltration
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 80
impact: 90
@@ -32,7 +32,7 @@ tags:
- Suspicious DNS Traffic
- Dynamic DNS
- Data Exfiltration
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 70
impact: 40
@@ -13,7 +13,7 @@ description: This correlation find exploitation of Log4Shell CVE-2021-44228 agai
of a Log4Shell exploitation, specifically> Initial Payload delivery eg. `${jndi:ldap://PAYLOAD_INJECTED}`
Call back to malicious LDAP server eg. Exploit.class Post Exploitation Activity/Lateral
Movement using Powershell or similar T1562.001 Each of these phases fall into different
MITRE ATT&CK Tactics (Initial Access, Execution, Command and Control), by looking
MITRE ATT&CK Tactics (Initial Access, Execution, Command And Control), by looking
into 2 or more phases showing up in detections triggerd is how this correlation
search finds exploitation. If we get a notable from this correlation search the
best way to triage it is by investigating the affected systems against Log4Shell
@@ -6,7 +6,7 @@ author: Michael Haag, Splunk
status: production
type: TTP
description: This query detects the Nishang Invoke-PowerShellTCPOneLine utility that
spawns a call back to a remote command and control server. This is a powershell
spawns a call back to a remote Command And Control server. This is a powershell
oneliner. In addition, this will capture on the command-line additional utilities
used by Nishang. Triage the endpoint and identify any parallel processes that look
suspicious. Review the reputation of the remote IP or domain contacted by the powershell
@@ -6,7 +6,7 @@ author: Michael Haag, Splunk
status: experimental
type: TTP
description: The following analytic identifies the use of a curl contacting suspicious
remote domains to checkin to command and control servers or download further implants.
remote domains to checkin to Command And Control servers or download further implants.
In the context of Silver Sparrow, curl is identified contacting s3.amazonaws.com.
This particular behavior is common with MacOS adware-malicious software.
data_source:
@@ -8,7 +8,7 @@ type: Anomaly
description: The following analytic identifies a possible windows application having
a FTP connection in a non common installation path in windows operating system.This
network protocol is being used by adversaries, threat actors and malware like AgentTesla
as a command and control communication to transfer its collected stolen information
as a Command And Control communication to transfer its collected stolen information
like the desktop screenshots, browser information and system information of a targeted
or compromised host.
data_source:
@@ -8,7 +8,7 @@ type: Anomaly
description: The following analytic identifies a possible windows application having
a SMTP connection in a non common installation path in windows operating system.This
network protocol is being used by adversaries, threat actors and malware like AgentTesla
as a command and control communication to transfer its collected stolen information
as a Command And Control communication to transfer its collected stolen information
like the desktop screenshots, browser information and system information of a targeted
or compromised host.
data_source:
@@ -35,7 +35,7 @@ references:
tags:
analytic_story:
- Insider Threat
- Command and Control
- Command And Control
- Ransomware
asset_type: Endpoint
confidence: 10
@@ -10,7 +10,7 @@ description: The following analytic identifies the execution of qwinsta.exe exec
about sessions on a remote desktop session host server. The information includes
servername, sessionname, username and many more. This tool is being abused of Qakbot
malware to gather information to the targeted or compromised host that will be send
back to its Command and control server.
back to its Command And Control server.
data_source:
- Sysmon Event ID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
@@ -64,7 +64,7 @@ tags:
- DNS Hijacking
- Suspicious DNS Traffic
- Dynamic DNS
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 90
impact: 70
@@ -6,7 +6,7 @@ author: Bhavin Patel, Splunk
status: production
type: TTP
description: Malicious actors often abuse legitimate Dynamic DNS services to host
malicious payloads or interactive command and control nodes. Attackers will automate
malicious payloads or interactive Command And Control nodes. Attackers will automate
domain resolution changes by routing dynamic domains to countless IP addresses to
circumvent firewall blocks, block lists as well as frustrate a network defenders
analytic and investigative processes. This search will look for DNS queries made
@@ -51,7 +51,7 @@ tags:
- DNS Hijacking
- Suspicious DNS Traffic
- Dynamic DNS
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 80
impact: 70
@@ -29,14 +29,14 @@ how_to_implement: 'In order to run this search effectively, we highly recommend
known_false_positives: ICMP packets are used in a variety of ways to help troubleshoot
networking issues and ensure the proper flow of traffic. As such, it is possible
that a large ICMP packet could be perfectly legitimate. If large ICMP packets are
associated with command and control traffic, there will typically be a large number
associated with Command And Control traffic, there will typically be a large number
of these packets observed over time. If the search is providing a large number of
false positives, you can modify the macro `detect_large_outbound_icmp_packets_filter`
to adjust the byte threshold or add specific IP addresses to an allow list.
references: []
tags:
analytic_story:
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -51,7 +51,7 @@ tags:
analytic_story:
- Hidden Cobra Malware
- Suspicious DNS Traffic
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -24,7 +24,7 @@ tags:
analytic_story:
- Hidden Cobra Malware
- Suspicious DNS Traffic
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 80
impact: 70
@@ -26,7 +26,7 @@ references: []
tags:
analytic_story:
- Suspicious DNS Traffic
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -34,7 +34,7 @@ references:
tags:
analytic_story:
- Data Exfiltration
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -24,7 +24,7 @@ references:
tags:
analytic_story:
- Data Exfiltration
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 90
impact: 70
@@ -27,7 +27,7 @@ tags:
analytic_story:
- Prohibited Traffic Allowed or Protocol Mismatch
- Ransomware
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -29,7 +29,7 @@ references: []
tags:
analytic_story:
- Prohibited Traffic Allowed or Protocol Mismatch
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
+1 -1
View File
@@ -26,7 +26,7 @@ tags:
- Prohibited Traffic Allowed or Protocol Mismatch
- Ransomware
- NOBELIUM Group
- Command and Control
- Command And Control
asset_type: Endpoint
confidence: 50
impact: 50
@@ -6,7 +6,7 @@ author: Michael Haag, Splunk
status: production
type: TTP
description: This query detects the Nishang Invoke-PowerShellTCPOneLine utility that
spawns a call back to a remote command and control server. This is a powershell
spawns a call back to a remote Command And Control server. This is a powershell
oneliner. In addition, this will capture on the command-line additional utilities
used by Nishang. Triage the endpoint and identify any parallel processes that look
suspicious. Review the reputation of the remote IP or domain contacted by the powershell
@@ -6,7 +6,7 @@ author: Michael Haag, Splunk
status: experimental
type: TTP
description: The following analytic identifies the use of a curl contacting suspicious
remote domains to checkin to command and control servers or download further implants.
remote domains to checkin to Command And Control servers or download further implants.
In the context of Silver Sparrow, curl is identified contacting s3.amazonaws.com.
This particular behavior is common with MacOS adware-malicious software.
data_source:
@@ -33,7 +33,7 @@ references:
tags:
analytic_story:
- Insider Threat
- Command and Control
- Command And Control
- Ransomware
asset_type: Endpoint
confidence: 10
@@ -10,7 +10,7 @@ description: The following analytic identifies the execution of qwinsta.exe exec
about sessions on a remote desktop session host server. The information includes
servername, sessionname, username and many more. This tool is being abused of Qakbot
malware to gather information to the targeted or compromised host that will be send
back to its Command and control server.
back to its Command And Control server.
data_source:
- Sysmon Event ID 1
search:
@@ -0,0 +1,80 @@
name: Anomalous usage of Archive Tools
id: 63614a58-10e2-4c6c-ae81-ea1113681439
version: 1
date: '2021-11-22'
author: Patrick Bareiss, Splunk
status: production
type: Anomaly
description: The following detection identifies the usage of archive tools from the
command line.
data_source:
- Windows Security 4688
search:
selection1:
process_name: WinRAR.exe
selection2:
process_name|startswith: 7z
selection3:
process_name|startswith: winzip
selection4:
parent_process_name|endswith:
- powershell.exe
- cmd.exe
condition: (selection1 or selection2 or selection3) and selection4
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node.
known_false_positives: False positives can be ligitmate usage of archive tools from
the command line.
references:
- https://attack.mitre.org/techniques/T1560/001/
tags:
analytic_story:
- Cobalt Strike
- NOBELIUM Group
- Insider Threat
asset_type: Endpoint
confidence: 60
impact: 70
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest$ by user $user$. This behavior is indicative of suspicious loading
of 7zip.
mitre_attack_id:
- T1560.001
- T1560
observable:
- name: user
type: User
role:
- Victim
- name: dest
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- Processes.process_name
- Processes.process
- Processes.dest
- Processes.user
- Processes.parent_process_name
- Processes.parent_process
kill_chain_phases:
- Exploitation
risk_score: 42
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1560.001/archive_tools/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,78 @@
name: Attempt To Delete Services
id: a0c8c292-d01a-11eb-aa18-acde48001122
version: 3
date: '2021-11-24'
author: Teoderick Contreras, splunk
status: production
type: TTP
description: The following analytic identifies Windows Service Control, `sc.exe`,
attempting to delete a service. This is typically identified in parallel with other
instances of service enumeration of attempts to stop a service and then delete it.
Adversaries utilize this technique to terminate security services or other related
services to continue there objective and evade detections.
data_source:
- Windows Security 4688
search:
selection1:
process_name: sc.exe
cmd_line|contains: delete
condition: selection1
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: It is possible administrative scripts may start/stop/delete
services. Filter as needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1543.003/T1543.003.md
tags:
analytic_story:
- XMRig
- Ransomware
asset_type: Endpoint
confidence: 60
impact: 60
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to delete a service.
mitre_attack_id:
- T1489
- T1543
- T1543.003
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 36
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/ssa_data1/sc_del.log
source: WinEventLog:Security
@@ -0,0 +1,79 @@
name: Attempt To Disable Services
id: afb31de4-d023-11eb-98d5-acde48001122
version: 3
date: '2021-11-24'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic identifies Windows Service Control, `sc.exe`,
attempting to disable a service. This is typically identified in parallel with other
instances of service enumeration of attempts to stop a service and then disable
it. Adversaries utilize this technique to terminate security services or other related
services to continue there objective and evade detections.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: config
selection2:
cmd_line|contains: disabled
selection3:
process_name: sc.exe
condition: selection1 and selection2 and selection3
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: It is possible administrative scripts may start/stop/delete
services. Filter as needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
- https://app.any.run/tasks/c0f98850-af65-4352-9746-fbebadee4f05/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1562.001/T1562.001.md#atomic-test-14---disable-arbitrary-security-windows-service
tags:
analytic_story:
- XMRig
- Ransomware
asset_type: Endpoint
confidence: 60
impact: 60
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to disable a service.
mitre_attack_id:
- T1489
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
kill_chain_phases:
- Exploitation
risk_score: 36
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/ssa_data1/sc_disable.log
source: WinEventLog:Security
@@ -0,0 +1,77 @@
name: Attempted Credential Dump From Registry via Reg exe
id: 14038953-e5f2-4daf-acff-5452062baf03
version: 2
date: '2021-11-29'
author: Jose Hernandez, Splunk
status: production
type: TTP
description: The following analytic identifies the use of `reg.exe` attempting to
export Windows registry keys that contain hashed credentials. Adversaries will utilize
this technique to capture and perform offline password cracking.
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- reg.exe
- cmd.exe
selection2:
cmd_line|re:
- HKEY_LOCAL_MACHINE\System
- HKEY_LOCAL_MACHINE\SAM
- HKEY_LOCAL_MACHINE\Security
- HKLM\System
- HKLM\SAM
- HKLM\Security
selection3:
cmd_line|re: save
condition: selection1 and (selection2) and selection3
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: None identified.
references:
- https://github.com/splunk/security_content/blob/55a17c65f9f56c2220000b62701765422b46125d/detections/attempted_credential_dump_from_registry_via_reg_exe.yml
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1003.002/T1003.002.md#atomic-test-1---registry-dump-of-sam-creds-and-secrets
tags:
analytic_story:
- Credential Dumping
asset_type: Endpoint
confidence: 90
impact: 70
message: An attempt to save registry keys storing credentials has been performed on
mitre_attack_id:
- T1003
- T1003.002
observable:
- name: dest_user_id
type: User
role:
- Actor
- name: dest_device_id
type: Hostname
role:
- Victim
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- process_name
- _time
- dest_device_id
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Actions on Objectives
risk_score: 63
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.002/atomic_red_team/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,76 @@
name: BCDEdit Failure Recovery Modification
id: 76d79d6e-25bb-40f6-b3b2-e0a6b7e5ea13
version: 1
date: '2021-12-07'
author: Michael Haag, Splunk
status: production
type: TTP
description: This search looks for flags passed to bcdedit.exe modifications to the
built-in Windows error recovery boot configurations. This is typically used by ransomware
to prevent recovery.
data_source:
- Windows Security 4688
search:
selection1:
process_name: bcdedit.exe
selection2:
cmd_line|contains: 'no'
selection3:
cmd_line|contains: recoveryenabled
condition: selection1 and (selection2 and selection3)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint_Processess` datamodel.
known_false_positives: Administrators may modify the boot configuration.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1490/T1490.md#atomic-test-4---windows---disable-windows-recovery-console-repair
tags:
analytic_story:
- Ryuk Ransomware
- Ransomware
- Information Sabotage
asset_type: Endpoint
confidence: 80
impact: 100
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting disable the ability
to recover the endpoint.
mitre_attack_id:
- T1490
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Actions on Objectives
risk_score: 80
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1490/atomic_red_team/windows-security_bcdedit_wbadmin.log
source: WinEventLog:Security
@@ -0,0 +1,78 @@
name: Clear Unallocated Sector Using Cipher App
id: 8f907d90-6173-11ec-9c23-acde48001122
version: 1
date: '2021-12-20'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: this search is to detect execution of `cipher.exe` to clear the unallocated
sectors of a specific disk. This technique was seen in some ransomware to make it
impossible to forensically recover deleted files.
data_source:
- Windows Security 4688
search:
selection1:
process_name: cipher.exe
cmd_line|contains: '/W:'
condition: selection1
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node.
known_false_positives: administrator may execute this app to manage disk
references:
- https://unit42.paloaltonetworks.com/vatet-pyxie-defray777/3/
- https://www.sophos.com/en-us/medialibrary/PDFs/technical-papers/sophoslabs-ransomware-behavior-report.pdf
tags:
analytic_story:
- Ransomware
- Information Sabotage
asset_type: Endpoint
confidence: 100
impact: 90
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest$ by user $user$ attempting to clear the unallocated sectors
of a specific disk.
mitre_attack_id:
- T1070.004
- T1070
observable:
- name: user
type: User
role:
- Victim
- name: dest
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- Processes.dest
- Processes.user
- Processes.parent_process_name
- Processes.parent_process
- Processes.original_file_name
- Processes.process_name
- Processes.process
- Processes.process_id
- Processes.parent_process_path
- Processes.process_path
- Processes.parent_process_id
kill_chain_phases:
- Exploitation
risk_score: 90
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070.004/cipher/security.log
source: WinEventLog:Security
@@ -0,0 +1,84 @@
name: Delete A Net User
id: 8776d79c-d26e-11eb-9a56-acde48001122
version: 4
date: '2022-03-17'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: This analytic will detect a suspicious net.exe/net1.exe command-line
to delete a user on a system. This technique may be use by an administrator for
legitimate purposes, however this behavior has been used in the wild to impair some
user or deleting adversaries tracks created during its lateral movement additional
systems. During triage, review parallel processes for additional behavior. Identify
any other user accounts created before or after.
data_source:
- Windows Security 4688
search:
selection1:
process|contains: user
selection2:
process|contains: /delete
selection3:
process_name:
- net.exe
- net1.exe
condition: selection1 and selection2 and (selection3)
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA. Tune and filter known instances where renamed net.exe may be used.
known_false_positives: System administrators or scripts may delete user accounts via
this technique. Filter as needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
tags:
analytic_story:
- XMRig
- Ransomware
asset_type: Endpoint
confidence: 70
impact: 70
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to delete a user
account.
mitre_attack_id:
- T1531
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 49
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/ssa_data1/net_user_del.log
source: WinEventLog:Security
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1531/atomic_red_team/security.log
source: WinEventLog:Security
@@ -0,0 +1,69 @@
name: Deny Permission using Cacls Utility
id: b76eae28-cd25-11eb-9c92-acde48001122
version: 3
date: '2021-11-29'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic identifies the use of `cacls.exe`, `icacls.exe`
or `xcacls.exe` placing the deny permission on a file or directory. Adversaries
perform this behavior to prevent responders from reviewing or gaining access to
adversary files on disk.
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- icacls.exe
- xcacls.exe
- cacls.exe
cmd_line|re: deny
condition: (selection1)
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA. Tune and filter known instances where renamed icacls.exe may be used.
known_false_positives: System administrators may use cacls utilities but this is not
a common practice. Filter as needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
tags:
analytic_story:
- XMRig
- Information Sabotage
asset_type: Endpoint
confidence: 70
impact: 50
message: A cacls process $process_name$ with commandline $cmd_line$ try to deny
a permission of a file or directory in host $dest_device_id$
mitre_attack_id:
- T1222
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 35
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/ssa_cacls/all_icalc.log
source: WinEventLog:Security
@@ -0,0 +1,89 @@
name: Detect Prohibited Applications Spawning cmd exe
id: c10a18cb-fd80-4ffa-a844-25026e0a0c94
version: 3
date: '2022-03-01'
author: Ignacio Bermudez Corrales, Splunk
status: production
type: Anomaly
description: The following analytic identifies parent processes, browsers, Windows
terminal applications, Office Products and Java spawning cmd.exe. By its very nature,
many applications spawn cmd.exe natively or built into macros. Much of this will
need to be tuned to further enhance the risk.
data_source:
- Windows Security 4688
search:
selection1:
parent_process_name:
- winword.exe
- excel.exe
- outlook.exe
- acrobat.exe
- acrord32.exe
- iexplore.exe
- opera.exe
- firefox.exe
- powershell.exe
-
selection2:
parent_process_name: java.exe
selection3:
parent_process|re: patch1-Hotfix1a
selection4:
parent_process_name: chrome.exe
selection5:
parent_process: chrome-extension
condition: selection1 or (selection2 and not selection3) or (selection4 and not selection5)
how_to_implement: In order to successfully implement this analytic, you will need
endpoint process data from a EDR product or Sysmon. This search has been modified
to process raw sysmon data from attack_range's nxlogs on DSP.
known_false_positives: There are circumstances where an application may legitimately
execute and interact with the Windows command-line interface.
references:
- https://attack.mitre.org/techniques/T1059/
tags:
analytic_story:
- Suspicious Command-Line Executions
- Insider Threat
asset_type: Endpoint
confidence: 50
impact: 70
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$, producing a suspicious event
that warrants investigating.
mitre_attack_id:
- T1059
observable:
- name: dest_user_id
type: User
role:
- Actor
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- process_name
- parent_process_name
- _time
- dest_device_id
- dest_user_id
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 35
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/powershell_spawn_cmd/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,92 @@
name: Detect RClone Command-Line Usage
id: e8b74268-5454-11ec-a799-acde48001122
version: 1
date: '2021-12-03'
author: Michael Haag, Splunk
status: production
type: TTP
description: This analytic identifies commonly used command-line arguments used by
`rclone.exe` to initiate a file transfer. Some arguments were negated as they are
specific to the configuration used by adversaries. In particular, an adversary may
list the files or directories of the remote file share using `ls` or `lsd`, which
is not indicative of malicious behavior. During triage, at this stage of a ransomware
event, exfiltration is about to occur or has already. Isolate the endpoint and continue
investigating by review file modifications and parallel processes.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- --multi-thread-streams
- --transfers
- --auto-confirm
- --ignore-existing
- --no-check-certificate
- --progress
- --config
- ftp
- pcloud
- mega
- copy
process_name: rclone.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint_Processess` datamodel.
known_false_positives: False positives should be limited as this is restricted to
the Rclone process name. Filter or tune the analytic as needed.
references:
- https://redcanary.com/blog/rclone-mega-extortion/
- https://www.mandiant.com/resources/shining-a-light-on-darkside-ransomware-operations
- https://thedfirreport.com/2021/03/29/sodinokibi-aka-revil-ransomware/
- https://thedfirreport.com/2021/11/29/continuing-the-bazar-ransomware-story/
tags:
analytic_story:
- DarkSide Ransomware
- Ransomware
- Insider Threat
asset_type: Endpoint
confidence: 70
impact: 50
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to connect to a
remote cloud service to move files or folders.
mitre_attack_id:
- T1020
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 35
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1020/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,81 @@
name: Disable Net User Account
id: ba858b08-d26c-11eb-af9b-acde48001122
version: 3
date: '2021-11-30'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: This analytic will identify a suspicious command-line that disables a
user account using the native `net.exe` or `net1.exe` utility to Windows. This technique
may used by the adversaries to interrupt availability of accounts and continue the
impact against the organization.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: user
selection2:
cmd_line|contains: /active:no
selection3:
process_name:
- net.exe
- net1.exe
condition: selection1 and selection2 and (selection3)
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA. Tune and filter known instances where renamed net.exe/net1.exe may be
used.
known_false_positives: System administrators or automated scripts may disable an account
but not a common practice. Filter as needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
tags:
analytic_story:
- XMRig
- Ransomware
asset_type: Endpoint
confidence: 70
impact: 70
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to disable accounts.
mitre_attack_id:
- T1489
- T1078
observable:
- name: user
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 49
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/ssa_data1/net_user_dis.log
source: WinEventLog:Security
@@ -0,0 +1,85 @@
name: DNS Exfiltration Using Nslookup App
id: 2452e632-9e0d-11eb-34ba-acde48001122
version: 1
date: '2021-12-07'
author: Michael Haag, Splunk
status: production
type: TTP
description: This search is to detect potential DNS exfiltration using nslookup application.
This technique are seen in couple of malware and APT group to exfiltrated collected
data in a infected machine or infected network. This detection is looking for unique
use of nslookup where it tries to use specific record type, TXT, A, AAAA, that are
commonly used by attacker and also the retry parameter which is designed to query
C2 DNS multiple tries.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- -retry=
- -type=
- -q=
- -qt=
- -querytype=
process_name: nslookup.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint_Processess` datamodel.
known_false_positives: It is possible for some legitimate administrative utilities
to use similar cmd_line parameters. Filter as needed.
references:
- https://www.mandiant.com/resources/fin7-spear-phishing-campaign-targets-personnel-involved-sec-filings
- https://www.varonis.com/blog/dns-tunneling
- https://www.microsoft.com/security/blog/2021/01/20/deep-dive-into-the-solorigate-second-stage-activation-from-sunburst-to-teardrop-and-raindrop/
tags:
analytic_story:
- Suspicious DNS Traffic
- Dynamic DNS
- Data Exfiltration
- Command And Control
asset_type: Endpoint
confidence: 80
impact: 90
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ performing activity related
to DNS exfiltration.
mitre_attack_id:
- T1048
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 72
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1048.003/nslookup_exfil/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,76 @@
name: Fsutil Zeroing File
id: f792cdc9-43ee-4429-a3c0-ffce4fed1a85
version: 1
date: '2021-12-07'
author: Michael Haag, Splunk
status: production
type: TTP
description: This search is to detect a suspicious fsutil process to zeroing a target
file. This technique was seen in lockbit ransomware where it tries to zero out its
malware path as part of its defense evasion after encrypting the compromised host.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: setzerodata
process_name: fsutil.exe
condition: (selection1)
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA. Tune and filter known instances where renamed net.exe may be used.
known_false_positives: System administrators or scripts may delete user accounts via
this technique. Filter as needed.
references:
- https://app.any.run/tasks/e0ac072d-58c9-4f53-8a3b-3e491c7ac5db/
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/fsutil-file
tags:
analytic_story:
- Ransomware
- Insider Threat
- Information Sabotage
asset_type: Endpoint
confidence: 90
impact: 60
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ atempting to perform file
deletion.
mitre_attack_id:
- T1070
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 54
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070/fsutil_file_zero/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,69 @@
name: Grant Permission Using Cacls Utility
id: c6da561a-cd29-11eb-ae65-acde48001122
version: 3
date: '2021-11-30'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic identifies the use of `cacls.exe`, `icacls.exe`
or `xcacls.exe` placing the grant permission on a file or directory. Adversaries
perform this behavior to allow components of their files to run, however it allows
responders to review or gaining access to adversary files on disk.
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- icacls.exe
- xcacls.exe
- cacls.exe
cmd_line|re: grant
condition: (selection1)
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA. Tune and filter known instances where renamed icacls.exe may be used.
known_false_positives: System administrators may use cacls utilities but this is not
a common practice. Filter as needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
tags:
analytic_story:
- XMRig
- Insider Threat
asset_type: Endpoint
confidence: 70
impact: 50
message: A cacls process $process_name$ with commandline $cmd_line$ try to grant
user a permission to a file or directory in host $dest_device_id$
mitre_attack_id:
- T1222
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 35
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/ssa_cacls/all_icalc.log
source: WinEventLog:Security
@@ -0,0 +1,67 @@
name: Hiding Files And Directories With Attrib exe
id: 028e4406-6176-11ec-aec2-acde48001122
version: 1
date: '2021-12-20'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: Attackers leverage an existing Windows binary, attrib.exe, to mark specific
as hidden by using specific flags so that the victim does not see the file. The
search looks for specific command-line arguments to detect the use of attrib.exe
to hide files.
data_source:
- Windows Security 4688
search:
selection1:
process_name: attrib.exe
cmd_line|re: ''
condition: selection1
how_to_implement: You must be ingesting data that records process activity from your
hosts to populate the Endpoint data model in the Processes node. You must also be
ingesting logs with both the process name and command line from your endpoints.
The command-line arguments are mapped to the "process" field in the Endpoint data
model.
known_false_positives: 'Some applications and users may legitimately use attrib.exe
to interact with the files. '
references:
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/attrib
tags:
analytic_story:
- Windows Defense Evasion Tactics
- Windows Persistence Techniques
- Information Sabotage
- Insider Threat
asset_type: Endpoint
confidence: 90
impact: 80
message: Attrib.exe with +h flag to hide files on $dest$ executed by $user$ is detected.
mitre_attack_id:
- T1222.001
- T1222
observable:
- name: user
type: User
role:
- Victim
- name: dest
type: Endpoint
role:
- Victim
- name: parent_process
type: Other
role:
- Attacker
- Parent Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
kill_chain_phases:
- Exploitation
risk_score: 72
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/attrib_hidden/security.log
source: WinEventLog:Security
@@ -0,0 +1,74 @@
name: Modify ACLs Permission Of Files Or Folders
id: 9ae9a48a-cdbe-11eb-875a-acde48001122
version: 3
date: '2022-03-17'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: This analytic identifies suspicious modification of ACL permission to
a files or folder to make it available to everyone or to a specific user. This technique
may be used by the adversary to evade ACLs or protected files access. This changes
is commonly configured by the file or directory owner with appropriate permission.
This behavior raises suspicion if this command is seen on an endpoint utilized by
an account with no permission to do so.
data_source:
- Windows Security 4688
search:
selection1:
process|re:
- 'S-1-1-0:'
- 'SYSTEM:'
- 'everyone:'
selection2:
process_name:
- icacls.exe
- xcacls.exe
- cacls.exe
condition: (selection1) and (selection2)
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA. Tune and filter known instances where renamed cacls.exe may be used.
known_false_positives: System administrators may use this windows utility. filter
is needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
tags:
analytic_story:
- XMRig
asset_type: Endpoint
confidence: 70
impact: 50
message: A cacls process $process_name$ with commandline $cmd_line$ try to modify
a permission of a file or directory in host $dest_device_id$
mitre_attack_id:
- T1222
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 35
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/ssa_cacls/all_icalc.log
source: WinEventLog:Security
@@ -0,0 +1,80 @@
name: Office Product Spawning Windows Script Host
id: 3ea3851a-8736-41a0-bc09-7e4485b48fa6
version: 1
date: '2022-10-12'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic will identify a Windows Office Product spawning
WScript.exe or CScript.exe. Tuning may be required based on legitimate application
usage that may spawn scripts from an Office product.
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- cscript.exe
- wscript.exe
parent_process_name|re:
- visio.exe
- mspub.exe
- powerpnt.exe
- excel.exe
- winword.exe
condition: selection1
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: False positives may be present based on macro based approved
documents in the organization. Filtering may be needed.
references:
- https://blog.cluster25.duskrise.com/2022/09/23/in-the-footsteps-of-the-fancy-bear-powerpoint-graphite/
tags:
analytic_story:
- Spearphishing Attachments
asset_type: Endpoint
confidence: 90
impact: 70
message: A Microsoft office parent process $parent_process_name$ has spawned a suspicious
child process $process_name$ on host $dest$.
mitre_attack_id:
- T1566
- T1566.001
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
kill_chain_phases:
- Exploitation
risk_score: 63
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1566.002/atomic_red_team/windows-security.log
source: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,81 @@
name: Resize Shadowstorage Volume
id: dbc30554-d27e-11eb-9e5e-acde48001122
version: 3
date: '2021-11-30'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic identifies the resizing of shadowstorage using
vssadmin.exe to avoid the shadow volumes being made again. This technique is typically
found used by adversaries during a ransomware event and a precursor to deleting
the shadowstorage.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: shadowstorage
selection2:
cmd_line|contains: resize
selection3:
cmd_line|contains: maxsize
selection4:
process_name: vssadmin.exe
condition: selection1 and selection2 and selection3 and selection4
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: System administrators may resize the shadowstorage for valid
purposes. Filter as needed.
references:
- https://www.mandiant.com/resources/fin11-email-campaigns-precursor-for-ransomware-data-theft
- https://blog.virustotal.com/2020/11/keep-your-friends-close-keep-ransomware.html
tags:
analytic_story:
- Clop Ransomware
- Ransomware
asset_type: Endpoint
confidence: 80
impact: 80
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to create a shadow
copy to perform offline password cracking.
mitre_attack_id:
- T1489
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 64
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/ssa_data1/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,107 @@
name: Sdelete Application Execution
id: fcc52b9a-4616-11ec-8454-acde48001122
version: 1
date: '2021-11-15'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: This analytic will detect the execution of sdelete.exe attempting to
delete potentially important files that may related to adversary or insider threats
to destroy evidence or information sabotage. Sdelete is a SysInternals utility meant
to securely delete files on disk. This tool is commonly used to clear tracks and
artifact on the targeted host.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- .xls
- .gz
- .tar
- .rar
- .zip
- .7z
- .bmp
- .gif
- .png
- .jpg
- .txt
- .log
- .key
- .pdf
- .rtf
- .ppt
- .xls
- .doc
- -nobanner
- /accepteula
- '-z '
- '-s '
- '-q '
- '-r '
- '-p '
- '-f '
- '-c '
process_name|contains: sdelete
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
confirm the latest CIM App 4.20 or higher is installed and the latest TA for the
endpoint product.
known_false_positives: False positives should be limited, filter as needed.
references:
- https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1485/T1485.md
tags:
analytic_story:
- Information Sabotage
- Insider Threat
asset_type: Endpoint
confidence: 70
impact: 60
message: Sdelete process $process_name$ executed on $dest_device_id$ attempting
to permanently delete files by $dest_user_id$.
mitre_attack_id:
- T1485
- T1070.004
- T1070
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest
- user
- parent_process_name
- parent_process
- process_name
- process
- process_id
- process_path
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 42
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/sdelete/security.log
source: WinEventLog:Security
@@ -0,0 +1,624 @@
name: System Process Running from Unexpected Location
id: 28179107-099a-464a-94d3-08301e6c055f
version: 4
date: '2022-03-24'
author: Jose Hernadnez, Ignacio Bermudez Corrales, Splunk
status: production
type: Anomaly
description: An attacker tries might try to use different version of a system command
without overriding original, or they might try to avoid some detection running the
process from a different folder. This detection checks that a list of system processes
run inside C:\\Windows\System32 or C:\\Windows\SysWOW64 The list of system processes
has been extracted from https://github.com/splunk/security_content/blob/develop/lookups/is_windows_system_file.csv
and the original detection https://github.com/splunk/security_content/blob/develop/detections/system_processes_run_from_unexpected_locations.yml
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- xwizard.exe
- xpsrchvw.exe
- xcopy.exe
- wusa.exe
- wuauclt.exe
- wuapp.exe
- wuapihost.exe
- wsqmcons.exe
- wsmprovhost.exe
- wscript.exe
- write.exe
- wpr.exe
- wpnpinst.exe
- wowreg32.exe
- wlrmdr.exe
- wlanext.exe
- wksprt.exe
- wkspbroker.exe
- wisptis.exe
- winver.exe
- winrshost.exe
- winrs.exe
- winresume.exe
- winlogon.exe
- winload.exe
- wininit.exe
- wimserv.exe
- wifitask.exe
- wiawow64.exe
- wiaacmgr.exe
- whoami.exe
- where.exe
- wextract.exe
- wevtutil.exe
- wermgr.exe
- wecutil.exe
- wbengine.exe
- wbadmin.exe
- waitfor.exe
- w32tm.exe
- vssadmin.exe
- vmicsvc.exe
- verifiergui.exe
- verifier.exe
- verclsid.exe
- vdsldr.exe
- vds.exe
- userinit.exe
- upnpcont.exe
- unregmp2.exe
- unlodctr.exe
- ucsvc.exe
- tzutil.exe
- tzsync.exe
- typeperf.exe
- tskill.exe
- tsdiscon.exe
- tscon.exe
- tracerpt.exe
- tpmvscmgrsvr.exe
- tpmvscmgr.exe
- timeout.exe
- tcmsetup.exe
- taskmgr.exe
- tasklist.exe
- taskkill.exe
- taskhostw.exe
- taskhost.exe
- taskeng.exe
- takeown.exe
- tabcal.exe
- systray.exe
- systemreset.exe
- systeminfo.exe
- syskey.exe
- sxstrace.exe
- svchost.exe
- subst.exe
- srdelayed.exe
- spreview.exe
- sppsvc.exe
- spoolsv.exe
- spinstall.exe
- sort.exe
- snmptrap.exe
- smss.exe
- slui.exe
- sihost.exe
- sigverif.exe
- shutdown.exe
- shrpubw.exe
- shadow.exe
- sfc.exe
- setx.exe
- setupugc.exe
- setupcl.exe
- setspn.exe
- sethc.exe
- sessionmsg.exe
- services.exe
- secinit.exe
- sdiagnhost.exe
- sdclt.exe
- sdchange.exe
- sdbinst.exe
- schtasks.exe
- sc.exe
- sbunattend.exe
- rwinsta.exe
- runonce.exe
- rundll32.exe
- runas.exe
- rstrui.exe
- rrinstaller.exe
- rmttpmvscmgrsvr.exe
- resmon.exe
- reset.exe
- replace.exe
- repair-bde.exe
- relog.exe
- rekeywiz.exe
- regsvr32.exe
- regini.exe
- regedt32.exe
- reg.exe
- recover.exe
- recdisc.exe
- rdrleakdiag.exe
- rdpinput.exe
- rdpclip.exe
- rasphone.exe
- raserver.exe
- rasdial.exe
- rasautou.exe
- qwinsta.exe
- quser.exe
- query.exe
- qprocess.exe
- qappsrv.exe
- pwlauncher.exe
- psr.exe
- provtool.exe
- proquota.exe
- printui.exe
- printfilterpipelinesvc.exe
- print.exe
- prevhost.exe
- powercfg.exe
- poqexec.exe
- plasrv.exe
- phoneactivate.exe
- perfmon.exe
- pcwrun.exe
- pcawrk.exe
- pcaui.exe
- pcalua.exe
- p2phost.exe
- osk.exe
- openfiles.exe
- omadmprc.exe
- omadmclient.exe
- odbcconf.exe
- odbcad32.exe
- ocsetup.exe
- ntprint.exe
- ntoskrnl.exe
- nslookup.exe
- notepad.exe
- nltest.exe
- newdev.exe
- netsh.exe
- netiougc.exe
- netcfg.exe
- netbtugc.exe
- net1.exe
- net.exe
- ndadmin.exe
- nbtstat.exe
- mtstocom.exe
- mstsc.exe
- msra.exe
- mspaint.exe
- msinfo32.exe
- msiexec.exe
- mshta.exe
- msg.exe
- msfeedssync.exe
- msdtc.exe
- msdt.exe
- msconfig.exe
- mpnotify.exe
- mountvol.exe
- mobsync.exe
- mmc.exe
- mfpmp.exe
- mctadmin.exe
- mcbuilder.exe
- mblctr.exe
- manage-bde.exe
- makecab.exe
- lsm.exe
- lsass.exe
- lpremove.exe
- lpksetup.exe
- lpkinstall.exe
- logoff.exe
- logman.exe
- logagent.exe
- lodctr.exe
- licensingdiag.exe
- label.exe
- ktmutil.exe
- ksetup.exe
- klist.exe
- isoburn.exe
- iscsicpl.exe
- iscsicli.exe
- irftp.exe
- ipconfig.exe
- immersivetpmvscmgrsvr.exe
- iexpress.exe
- ieetwcollector.exe
- ieunatt.exe
- ie4uinit.exe
- icsunattend.exe
- icardagt.exe
- icacls.exe
- hwrreg.exe
- hwrcomp.exe
- help.exe
- hdwwiz.exe
- grpconv.exe
- gpupdate.exe
- gpscript.exe
- gpresult.exe
- getmac.exe
- fveprompt.exe
- fvenotify.exe
- ftp.exe
- fsutil.exe
- fsquirt.exe
- fsavailux.exe
- forfiles.exe
- fontview.exe
- fontdrvhost.exe
- fodhelper.exe
- fltmc.exe
- fixmapi.exe
- finger.exe
- findstr.exe
- find.exe
- fhmanagew.exe
- fc.exe
- extrac32.exe
- expand.exe
- eventvwr.exe
- eventcreate.exe
- eudcedit.exe
- esentutl.exe
- embeddedapplauncher.exe
- efsui.exe
- easinvoker.exe
- dxdiag.exe
- dwm.exe
- dvdupgrd.exe
- dvdplay.exe
- dstokenclean.exe
- dsregcmd.exe
- drvinst.exe
- drvcfg.exe
- driverquery.exe
- dpnsvr.exe
- dpapimig.exe
- doskey.exe
- dnscacheugc.exe
- dmclient.exe
- dmcfghost.exe
- dmcertinst.exe
- dllhst3g.exe
- dllhost.exe
- djoin.exe
- dispdiag.exe
- diskraid.exe
- diskperf.exe
- diskpart.exe
- dinotify.exe
- diantz.exe
- dialer.exe
- dfrgui.exe
- ddodiag.exe
- dcomcnfg.exe
- dccw.exe
- dashost.exe
- cttunesvr.exe
- cttune.exe
- ctfmon.exe
- csrss.exe
- cscript.exe
- credwiz.exe
- convert.exe
- control.exe
- consent.exe
- conhost.exe
- compact.exe
- comp.exe
- colorcpl.exe
- cofire.exe
- cmstp.exe
- cmmon32.exe
- cmdl32.exe
- cmdkey.exe
- cmd.exe
- clip.exe
- cliconfg.exe
- cleanmgr.exe
- cipher.exe
- choice.exe
- chkntfs.exe
- chkdsk.exe
- chgusr.exe
- chgport.exe
- chglogon.exe
- charmap.exe
- changepk.exe
- change.exe
- certutil.exe
- certreq.exe
- cdpreference.exe
- calc.exe
- cacls.exe
- bthudtask.exe
- browser_broker.exe
- bridgeunattend.exe
- bootsect.exe
- bootim.exe
- bootcfg.exe
- bitsadmin.exe
- bdeunlock.exe
- bdechangepin.exe
- bcdedit.exe
- bcdboot.exe
- bcastdvr.exe
- backgroundtaskhost.exe
- baaupdate.exe
- autofmt.exe
- autoconv.exe
- autochk.exe
- auditpol.exe
- audiodg.exe
- attrib.exe
- at.exe
- appidpolicyconverter.exe
- appidcertstorecheck.exe
- alg.exe
- aitstatic.exe
- aitagent.exe
- acu.exe
- wpcmon.exe
- workfolders.exe
- windowsupdateelevatedinstaller.exe
- windowsanytimeupgradeui.exe
- windowsanytimeupgraderesults.exe
- windowsanytimeupgrade.exe
- windowsactiondialog.exe
- windows.media.backgroundplayback.exe
- winsat.exe
- werfaultsecure.exe
- werfault.exe
- webcache.exe
- wallpaperhost.exe
- wwahost.exe
- wudfhost.exe
- wsreset.exe
- wsmanhttpconfig.exe
- wscollect.exe
- wpdshextautoplay.exe
- wmpdmc.exe
- wfs.exe
- vaultsysui.exe
- vaultcmd.exe
- vssvc.exe
- utilman.exe
- usoclient.exe
- useraccountcontrolsettings.exe
- useraccountbroker.exe
- upgraderesultsui.exe
- ui0detect.exe
- tswpfwrp.exe
- tpminit.exe
- tokenbrokercookies.exe
- thumbnailextractionhost.exe
- taskmgr.exe
- tapiunattend.exe
- tswbprxy.exe
- tstheme.exe
- tracert.exe
- tcpsvcs.exe
- systemsettingsremovedevice.exe
- systemsettingsbroker.exe
- systemsettingsadminflows.exe
- systempropertiesremote.exe
- systempropertiesprotection.exe
- systempropertiesperformance.exe
- systempropertieshardware.exe
- systempropertiesdataexecutionprevention.exe
- systempropertiescomputername.exe
- systempropertiesadvanced.exe
- sysreseterr.exe
- synchost.exe
- stikynot.exe
- srtasks.exe
- sppextcomobj.exe
- spaceagent.exe
- soundrecorder.exe
- snippingtool.exe
- sndvol.exe
- smartscreensettings.exe
- slidetoshutdown.exe
- settingsynchost.exe
- setieinstalleddate.exe
- sensordataservice.exe
- secedit.exe
- searchprotocolhost.exe
- searchindexer.exe
- searchfilterhost.exe
- sihclient.exe
- runtimebroker.exe
- runlegacycplelevated.exe
- rpcping.exe
- rmclient.exe
- remoteposworker.exe
- relpost.exe
- registeriepkeys.exe
- register-cimprovider.exe
- recoverydrive.exe
- reagentc.exe
- rdpsauachelper.exe
- rdpsaproxy.exe
- rdpsa.exe
- route.exe
- rmactivate_ssp_isv.exe
- rmactivate_ssp.exe
- rmactivate_isv.exe
- rmactivate.exe
- rdspnf.exe
- proximityuxhost.exe
- printisolationhost.exe
- printdialoghost3d.exe
- printdialoghost.exe
- printbrmui.exe
- presentationsettings.exe
- presentationhost.exe
- pnputil.exe
- pnpunattend.exe
- pkgmgr.exe
- pickerhost.exe
- passwordonwakesettingflyout.exe
- ping.exe
- pathping.exe
- optionalfeatures.exe
- openwith.exe
- networkuxbroker.exe
- netplwiz.exe
- netproj.exe
- netevtfwdr.exe
- netcfgnotifyobjecthost.exe
- narrator.exe
- netstat.exe
- napstat.exe
- musnotificationux.exe
- musnotification.exe
- multidigimon.exe
- muiunattend.exe
- msspellcheckinghost.exe
- mpsigstub.exe
- migautoplay.exe
- mdsched.exe
- mdres.exe
- mbaeparsertask.exe
- magnify.exe
- mschedexe.exe
- mrt.exe
- mrinfo.exe
- mdmappinstaller.exe
- mdmagent.exe
- mdeserver.exe
- lsaiso.exe
- logonui.exe
- lockscreencontentserver.exe
- lockapphost.exe
- locator.exe
- locationnotifications.exe
- locationnotificationwindows.exe
- licensingui.exe
- licensemanagershellext.exe
- legacynetuxhost.exe
- launchwinapp.exe
- launchtm.exe
- languagecomponentsinstallercomhandler.exe
- installagent.exe
- infdefaultinstall.exe
- icsentitlementhost.exe
- hostname.exe
- gettingstarted.exe
- genvalobj.exe
- gamepanel.exe
- fondue.exe
- filehistory.exe
- fxsunatd.exe
- fxssvc.exe
- fxscover.exe
- ehstorauthn.exe
- easeofaccessdialog.exe
- easpoliciesbrokerhost.exe
- eap3host.exe
- eosnotify.exe
- edpcleanup.exe
- dxpserver.exe
- dsmusertask.exe
- dpiscaling.exe
- dmomacpmo.exe
- dmnotificationbroker.exe
- displayswitch.exe
- dism.exe
- disksnapshot.exe
- deviceproperties.exe
- devicepairingwizard.exe
- deviceenroller.exe
- deviceeject.exe
- devicedisplayobjectprovider.exe
- defrag.exe
- dataexchangehost.exe
- dwwin.exe
- dfdwiz.exe
- credentialuibroker.exe
- computerdefaults.exe
- compattelrunner.exe
- compmgmtlauncher.exe
- cloudstoragewizard.exe
- cloudnotifications.exe
- cloudexperiencehostbroker.exe
- clipup.exe
- checknetisolation.exe
- certenrollctrl.exe
- castsrv.exe
- camerasettingsuihost.exe
- bytecodegenerator.exe
- bitlockerwizardelev.exe
- bitlockerwizard.exe
- bitlockerdeviceencryption.exe
- bdeunlockwizard.exe
- bdeuisrv.exe
- bdehdcfg.exe
- backgroundtransferhost.exe
- axinstui.exe
- autoworkplace.exe
- authhost.exe
- atbroker.exe
- applicationframehost.exe
- adaptertroubleshooter.exe
- arp.exe
selection2:
process_path|re: \\windows\\syswow64
selection3:
process_path|re: \\windows\\system32
condition: selection1 and not selection2 and not selection3
how_to_implement: Collect endpoint data such as sysmon or 4688 events.
known_false_positives: None
references: []
tags:
analytic_story:
- Windows Defense Evasion Tactics
- Masquerading - Rename System Utilities
asset_type: Endpoint
confidence: 80
impact: 70
message: A system process $process_name$ with commandline $cmd_line$ spawn in non-default
folder path in host $dest_device_id$
mitre_attack_id:
- T1036
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- dest_device_id
- process_name
- _time
- dest_user_id
- process_path
kill_chain_phases:
- Actions on Objectives
risk_score: 56
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036/system_process_running_unexpected_location/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,79 @@
name: WBAdmin Delete System Backups
id: 71efbf52-4dbb-4c00-a520-306aa546cbb7
version: 1
date: '2021-12-07'
author: Michael Haag, Splunk
status: production
type: TTP
description: This search looks for flags passed to wbadmin.exe (Windows Backup Administrator
Tool) that delete backup files. This is typically used by ransomware to prevent
recovery.
data_source:
- Windows Security 4688
search:
selection1:
process_name: wbadmin.exe
selection2:
cmd_line|contains:
- systemstatebackup
- catalog
- delete
condition: selection1 and selection2
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint_Processess` datamodel.
known_false_positives: Administrators may modify the boot configuration.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1490/T1490.md
- https://thedfirreport.com/2020/10/08/ryuks-return/
- https://attack.mitre.org/techniques/T1490/
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wbadmin
tags:
analytic_story:
- Ryuk Ransomware
- Ransomware
asset_type: Endpoint
confidence: 50
impact: 30
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to delete system
backups.
mitre_attack_id:
- T1490
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 15
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1490/atomic_red_team/windows-security_bcdedit_wbadmin.log
source: WinEventLog:Security
@@ -0,0 +1,76 @@
name: WevtUtil Usage To Clear Logs
id: 5438113c-cdd9-11eb-93b8-acde48001122
version: 2
date: '2021-06-15'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The wevtutil.exe application is the windows event log utility. This searches
for wevtutil.exe with parameters for clearing the application, security, setup,
powershell, sysmon, or system event logs.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|re:
- powershell
- setup
- application
- sysmon
- system
- security
cmd_line|contains: ' cl '
process_name: wevtutil.exe
condition: (selection1)
how_to_implement: You must be ingesting data that records process activity from your
hosts to populate the Endpoint data model in the Processes node. You must also be
ingesting logs with both the process name and command line from your endpoints.
The command-line arguments are mapped to the "process" field in the Endpoint data
model.
known_false_positives: The wevtutil.exe application is a legitimate Windows event
log utility. Administrators may use it to manage Windows event logs.
references:
- https://www.splunk.com/en_us/blog/security/detecting-clop-ransomware.html
tags:
analytic_story:
- Windows Log Manipulation
- Ransomware
- Clop Ransomware
- Insider Threat
- CISA AA22-264A
asset_type: Endpoint
confidence: 90
impact: 70
message: A wevtutil process $process_name$ with commandline $cmd_line$ to clear
event logs in host $dest_device_id$
mitre_attack_id:
- T1070
- T1070.001
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
kill_chain_phases:
- Exploitation
risk_score: 63
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070.001/ssa_wevtutil/clear_evt.log
source: WinEventLog:Security
@@ -0,0 +1,71 @@
name: Wevtutil Usage To Disable Logs
id: a4bdc944-cdd9-11eb-ac97-acde48001122
version: 2
date: '2021-06-15'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: This search is to detect execution of wevtutil.exe to disable logs. This
technique was seen in several ransomware to disable the event logs to evade alerts
and detections in compromised host.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: /e:false
selection2:
cmd_line|contains: ' sl '
selection3:
process_name: wevtutil.exe
condition: selection1 and selection2 and selection3
how_to_implement: You must be ingesting data that records process activity from your
hosts to populate the Endpoint data model in the Processes node. You must also be
ingesting logs with both the process name and command line from your endpoints.
The command-line arguments are mapped to the "process" field in the Endpoint data
model.
known_false_positives: network operator may disable audit event logs for debugging
purposes.
references:
- https://www.bleepingcomputer.com/news/security/new-ransom-x-ransomware-used-in-texas-txdot-cyberattack/
tags:
analytic_story:
- Windows Log Manipulation
- Ransomware
- Insider Threat
- Information Sabotage
asset_type: Endpoint
confidence: 90
impact: 70
message: A wevtutil process $process_name$ with commandline $cmd_line$ to disable
event logs in host $dest_device_id$
mitre_attack_id:
- T1070
- T1070.001
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
kill_chain_phases:
- Exploitation
risk_score: 63
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070.001/ssa_wevtutil/disable_evt.log
source: WinEventLog:Security
@@ -0,0 +1,89 @@
name: Windows Bits Job Persistence
id: 1e25e97a-8ea4-11ec-9767-acde48001122
version: 1
date: '2022-02-15'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following query identifies Microsoft Background Intelligent Transfer
Service utility `bitsadmin.exe` scheduling a BITS job to persist on an endpoint.
The query identifies the parameters used to create, resume or add a file to a BITS
job. Typically seen combined in a oneliner or ran in sequence. If identified, review
the BITS job created and capture any files written to disk. It is possible for BITS
to be used to upload files and this may require further network data analysis to
identify. You can use `bitsadmin /list /verbose` to list out the jobs during investigation.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- resume
- setcustomheaders
- setminretrydelay
- setnotifycmdline
- setnotifyflags
- addfile
- create
process_name: bitsadmin.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
confirm the latest CIM App 4.20 or higher is installed and the latest TA for the
endpoint product.
known_false_positives: Limited false positives will be present. Typically, applications
will use `BitsAdmin.exe`. Any filtering should be done based on command-line arguments
(legitimate applications) or parent process.
references:
- https://attack.mitre.org/techniques/T1197/
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/bitsadmin
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1197/T1197.md#atomic-test-3---persist-download--execute
- https://lolbas-project.github.io/lolbas/Binaries/Bitsadmin/
tags:
analytic_story:
- BITS Jobs
- Living Off The Land
asset_type: Endpoint
confidence: 80
impact: 70
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest$ by user $dest_user_id$ attempting to persist using BITS.
mitre_attack_id:
- T1197
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 56
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/bits-windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,89 @@
name: Windows Bitsadmin Download File
id: d76e8188-8f5a-11ec-ace4-acde48001122
version: 1
date: '2022-02-16'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following query identifies Microsoft Background Intelligent Transfer
Service utility `bitsadmin.exe` using the `transfer` parameter to download a remote
object. In addition, look for `download` or `upload` on the command-line, the switches
are not required to perform a transfer. Capture any files downloaded. Review the
reputation of the IP or domain used. Typically once executed, a follow on command
will be used to execute the dropped file. Note that the network connection or file
modification events related will not spawn or create from `bitsadmin.exe`, but the
artifacts will appear in a parallel process of `svchost.exe` with a command-line
similar to `svchost.exe -k netsvcs -s BITS`. It's important to review all parallel
and child processes to capture any behaviors and artifacts. In some suspicious and
malicious instances, BITS jobs will be created. You can use `bitsadmin /list /verbose`
to list out the jobs during investigation.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: transfer
process_name: bitsadmin.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
confirm the latest CIM App 4.20 or higher is installed and the latest TA for the
endpoint product.
known_false_positives: Limited false positives, however it may be required to filter
based on parent process name or network connection.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/8eb52117b748d378325f7719554a896e37bccec7/atomics/T1105/T1105.md#atomic-test-9---windows---bitsadmin-bits-download
- https://github.com/redcanaryco/atomic-red-team/blob/bc705cb7aaa5f26f2d96585fac8e4c7052df0ff9/atomics/T1197/T1197.md
- https://docs.microsoft.com/en-us/windows/win32/bits/bitsadmin-tool
- https://thedfirreport.com/2021/03/29/sodinokibi-aka-revil-ransomware/
tags:
analytic_story:
- Ingress Tool Transfer
- BITS Jobs
- DarkSide Ransomware
- Living Off The Land
asset_type: Endpoint
confidence: 70
impact: 70
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest$ by user $dest_user_id$ attempting to download a file.
mitre_attack_id:
- T1197
- T1105
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 49
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/bits-windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,84 @@
name: Windows CertUtil Decode File
id: b06983f4-8f72-11ec-ab50-acde48001122
version: 1
date: '2022-02-16'
author: Michael Haag, Splunk
status: production
type: TTP
description: CertUtil.exe may be used to `encode` and `decode` a file, including PE
and script code. Encoding will convert a file to base64 with `-----BEGIN CERTIFICATE-----`
and `-----END CERTIFICATE-----` tags. Malicious usage will include decoding a encoded
file that was downloaded. Once decoded, it will be loaded by a parallel process.
Note that there are two additional command switches that may be used - `encodehex`
and `decodehex`. Similarly, the file will be encoded in HEX and later decoded for
further execution. During triage, identify the source of the file being decoded.
Review its contents or execution behavior for further analysis.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: decode
process_name: certutil.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
confirm the latest CIM App 4.20 or higher is installed and the latest TA for the
endpoint product.
known_false_positives: Typically seen used to `encode` files, but it is possible to
see legitimate use of `decode`. Filter based on parent-child relationship, file
paths, endpoint or user.
references:
- https://attack.mitre.org/techniques/T1140/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1140/T1140.md
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/certutil
- https://www.bleepingcomputer.com/news/security/certutilexe-could-allow-attackers-to-download-malware-while-bypassing-av/
tags:
analytic_story:
- Deobfuscate-Decode Files or Information
- Living Off The Land
asset_type: Endpoint
confidence: 80
impact: 50
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to decode a file
on disk.
mitre_attack_id:
- T1140
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 40
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1140/atomic_red_team/encode-windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,84 @@
name: Windows CertUtil URLCache Download
id: 8cb1ad38-8f6d-11ec-87a3-acde48001122
version: 1
date: '2022-02-16'
author: Michael Haag, Splunk
status: production
type: TTP
description: Certutil.exe may download a file from a remote destination using `-urlcache`.
This behavior does require a URL to be passed on the command-line. In addition,
`-f` (force) and `-split` (Split embedded ASN.1 elements, and save to files) will
be used. It is not entirely common for `certutil.exe` to contact public IP space.
However, it is uncommon for `certutil.exe` to write files to world writeable paths.\
During triage, capture any files on disk and review. Review the reputation of the
remote IP or domain in question.
data_source:
- Windows Security 4688
search:
selection1:
process_name: certutil.exe
selection2:
cmd_line|contains: split
selection3:
cmd_line|contains: urlcache
selection4:
cmd_line|contains: urlcache
condition: selection1 and selection2 and selection3 or selection4
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node.
known_false_positives: Limited false positives in most environments, however tune
as needed based on parent-child relationship or network connection.
references:
- https://attack.mitre.org/techniques/T1105/
- https://www.avira.com/en/blog/certutil-abused-by-attackers-to-spread-threats
- https://web.archive.org/web/20210921110637/https://www.fireeye.com/blog/threat-research/2019/10/certutil-qualms-they-came-to-drop-fombs.html
tags:
analytic_story:
- Ingress Tool Transfer
- DarkSide Ransomware
- Living Off The Land
asset_type: Endpoint
confidence: 100
impact: 90
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to download a file.
mitre_attack_id:
- T1105
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 90
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/T1105-windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,85 @@
name: Windows CertUtil VerifyCtl Download
id: 9ac29c40-8f6b-11ec-b19a-acde48001122
version: 1
date: '2022-02-16'
author: Michael Haag, Splunk
status: production
type: TTP
description: 'Certutil.exe may download a file from a remote destination using `-VerifyCtl`.
This behavior does require a URL to be passed on the command-line. In addition,
`-f` (force) and `-split` (Split embedded ASN.1 elements, and save to files) will
be used. It is not entirely common for `certutil.exe` to contact public IP space.
\ During triage, capture any files on disk and review. Review the reputation of
the remote IP or domain in question. Using `-VerifyCtl`, the file will either be
written to the current working directory or `%APPDATA%\..\LocalLow\Microsoft\CryptnetUrlCache\Content\<hash>`. '
data_source:
- Windows Security 4688
search:
selection1:
process_name: certutil.exe
selection2:
cmd_line|contains: split
selection3:
cmd_line|contains: verifyctl
selection4:
cmd_line|contains: verifyctl
condition: selection1 and selection2 and selection3 or selection4
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node.
known_false_positives: Limited false positives in most environments, however tune
as needed based on parent-child relationship or network connection.
references:
- https://attack.mitre.org/techniques/T1105/
- https://www.hexacorn.com/blog/2020/08/23/certutil-one-more-gui-lolbin/
- https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc732443(v=ws.11)#-verifyctl
- https://www.avira.com/en/blog/certutil-abused-by-attackers-to-spread-threats
tags:
analytic_story:
- Ingress Tool Transfer
- DarkSide Ransomware
- Living Off The Land
asset_type: Endpoint
confidence: 100
impact: 90
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to download a file.
mitre_attack_id:
- T1105
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 90
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/T1105-windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,81 @@
name: Windows COM Hijacking InprocServer32 Modification
id: 0ae05a0f-bc84-456b-822a-a5b9c081c7ca
version: 1
date: '2022-10-12'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies the use of reg.exe performing an add
to the InProcServer32, which may be related to COM hijacking. Adversaries can use
the COM system to insert malicious code that can be executed in place of legitimate
software through hijacking the COM references and relationships as a means for persistence.
Hijacking a COM object requires a change in the Registry to replace a reference
to a legitimate system component which may cause that component to not work when
executed. When that system component is executed through normal system operation
the adversary's code will be executed instead.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|re: inprocserver32
process_name: reg.exe
condition: selection1
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: False positives may be present and some filtering may be required.
references:
- https://attack.mitre.org/techniques/T1546/015/
- https://blog.cluster25.duskrise.com/2022/09/23/in-the-footsteps-of-the-fancy-bear-powerpoint-graphite/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1546.015/T1546.015.md
tags:
analytic_story:
- Living Off The Land
asset_type: Endpoint
confidence: 80
impact: 80
message: An instance of $parent_process_name$ has spawned $process_name$ attempting
to modify InProcServer32 within the registry on $dest_device_id$ by $dest_user_id$.
mitre_attack_id:
- T1546.015
- T1546
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 64
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.015/atomic_red_team/windows-security.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,95 @@
name: Windows Curl Upload to Remote Destination
id: cc8d046a-543b-11ec-b864-acde48001122
version: 1
date: '2021-12-03'
author: Michael Haag, Splunk
status: production
type: TTP
description: 'The following analytic identifies the use of Windows Curl.exe uploading
a file to a remote destination. \
`-T` or `--upload-file` is used when a file is to be uploaded to a remotge destination.
\
`-d` or `--data` POST is the HTTP method that was invented to send data to a receiving
web application, and it is, for example, how most common HTML forms on the web work.
\
HTTP multipart formposts are done with `-F`, but this appears to not be compatible
with the Windows version of Curl. Will update if identified adversary tradecraft.
\
Adversaries may use one of the three methods based on the remote destination and
what they are attempting to upload (zip vs txt). During triage, review parallel
processes for further behavior. In addition, identify if the upload was successful
in network logs. If a file was uploaded, isolate the endpoint and review.'
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- '-F '
- '--data '
- '-d '
- '--upload-file '
- '-T '
process_name|re: curl.exe
condition: selection1
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint_Processess` datamodel.
known_false_positives: False positives may be limited to source control applications
and may be required to be filtered out.
references:
- https://everything.curl.dev/usingcurl/uploads
- https://techcommunity.microsoft.com/t5/containers/tar-and-curl-come-to-windows/ba-p/382409
- https://twitter.com/d1r4c/status/1279042657508081664?s=20
tags:
analytic_story:
- Ingress Tool Transfer
- Insider Threat
asset_type: Endpoint
confidence: 100
impact: 80
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ uploading a file to a remote
destination.
mitre_attack_id:
- T1105
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 80
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,64 @@
name: Windows Defender Tools in Non Standard Path
id: c205bd2e-cd5b-4224-8510-578a2a1f83d7
version: 1
date: '2022-07-18'
author: Lou Stella, Splunk
status: production
type: Anomaly
description: The following analytic identifies usage of the MPCmdRun utility that
can be abused by adversaries by moving it to a new directory.
data_source:
- Windows Security 4688
search:
selection1:
process_name|re: mpcmdrun.exe
selection2:
process_path|re: \\windows defender
selection3:
process_path|re: \\microsoft\\windows defender\\platform
condition: selection1 and not selection2 and not selection3
how_to_implement: Collect endpoint data such as sysmon or 4688 events.
known_false_positives: False positives may be present and filtering may be required.
references:
- https://attack.mitre.org/techniques/T1036/003/
- https://lolbas-project.github.io/lolbas/Binaries/MpCmdRun/
tags:
analytic_story:
- Living Off The Land
asset_type: Endpoint
confidence: 80
impact: 70
message: Process $process_name$ with commandline $cmd_line$ spawn in non-default
folder path on host $dest_device_id$
mitre_attack_id:
- T1036
- T1036.003
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- dest_device_id
- process_name
- _time
- dest_user_id
- process_path
- cmd_line
kill_chain_phases:
- Actions on Objectives
risk_score: 56
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/mpcmdrun/windows-security.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,76 @@
name: Windows Diskshadow Proxy Execution
id: aa502688-9037-11ec-842d-acde48001122
version: 1
date: '2022-02-17'
author: Lou Stella, Splunk
status: production
type: Anomaly
description: DiskShadow.exe is a Microsoft Signed binary present on Windows Server.
It has a scripting mode intended for complex scripted backup operations. This feature
also allows for execution of arbitrary unsigned code. This analytic looks for the
usage of the scripting mode flags in executions of DiskShadow. During triage, compare
to known backup behavior in your environment and then review the scripts called
by diskshadow.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- /s
- -S
process_name: diskshadow.exe
condition: selection1
how_to_implement: To successfully implement this search you need to be ingesting information
on processes that include the name of the process responsible for the changes from
your endpoints into the `Endpoint_Processess` datamodel.
known_false_positives: Administrators using the DiskShadow tool in their infrastructure
as a main backup tool with scripts will cause false positives
references:
- https://bohops.com/2018/03/26/diskshadow-the-return-of-vss-evasion-persistence-and-active-directory-database-extraction/
tags:
analytic_story:
- Living Off The Land
asset_type: Endpoint
confidence: 70
impact: 70
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to run a script.
mitre_attack_id:
- T1218
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 49
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218/diskshadow/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,124 @@
name: Windows DotNet Binary in Non Standard Path
id: 21179107-099a-324a-94d3-08301e6c065f
version: 1
date: '2022-03-17'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: The following analytic identifies native .net binaries within the Windows
operating system that may be abused by adversaries by moving it to a new directory.
The analytic identifies the .net binary by using a list. If one or the other matches
an alert will be generated. Adversaries abuse these binaries as they are native
to Windows and native DotNet. Note that not all SDK (post install of Windows) are
captured in the list. Lookup - https://github.com/splunk/security_content/blob/develop/lookups/is_net_windows_file.csv.
data_source:
- Windows Security 4688
search:
selection1:
process_name|re:
- MSBuild.exe
- comsvcconfig.exe
- dfsradmin.exe
- dfsvc.exe
- microsoft.workflow.compiler.exe
- smsvchost.exe
- wsatconfig.exe
- addinprocess.exe
- addinprocess32.exe
- addinutil.exe
- aspnet_compiler.exe
- aspnet_regbrowsers.exe
- aspnet_regsql.exe
- caspol.exe
- datasvcutil.exe
- edmgen.exe
- installutil.exe
- jsc.exe
- ngentask.exe
- regasm.exe
- regsvcs.exe
- sdnbr.exe
- acu.exe
- appvstreamingux.exe
- dsac.exe
- lbfoadmin.exe
- microsoft.uev.synccontroller.exe
- mtedit.exe
- scriptrunner.exe
- servermanager.exe
- stordiag.exe
- tzsync.exe
- uevagentpolicygenerator.exe
- uevappmonitor.exe
- uevtemplatebaselinegenerator.exe
- uevtemplateconfigitemgenerator.exe
- powershell_ise.exe
- iediagcmd.exe
- xbox.tcui.exe
- microsoft.activedirectory.webservices.exe
- iisual.exe
- filehistory.exe
- secureassessmentbrowser.exe
selection2:
process_path|re:
- \\windows\\system32
- \\windows\\syswow64
- \\windows\\adws
- \\windows\\networkcontroller
- \\windows\\systemapps
- \\winsxs
- \\microsoft.net
condition: selection1 and not selection2
how_to_implement: Collect endpoint data such as sysmon or 4688 events.
known_false_positives: False positives may be present and filtering may be required.
Certain utilities will run from non-standard paths based on the third-party application
in use.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1036.003/T1036.003.yaml
- https://attack.mitre.org/techniques/T1036/003/
- https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218.004/T1218.004.md
tags:
analytic_story:
- Masquerading - Rename System Utilities
- Unusual Processes
- Ransomware
- Signed Binary Proxy Execution InstallUtil
- WhisperGate
asset_type: Endpoint
confidence: 70
impact: 70
message: A system process $process_name$ with commandline $cmd_line$ spawn in non-default
folder path on host $dest_device_id$
mitre_attack_id:
- T1036
- T1036.003
- T1218
- T1218.004
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- dest_device_id
- process_name
- _time
- dest_user_id
- process_path
- cmd_line
kill_chain_phases:
- Actions on Objectives
risk_score: 49
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036/system_process_running_unexpected_location/dotnet_lolbin-windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,71 @@
name: Windows Eventvwr UAC Bypass
id: 66adff66-90d9-11ec-aba7-acde48001122
version: 1
date: '2022-02-18'
author: Lou Stella, Splunk
status: experimental
type: Anomaly
description: The following search identifies Eventvwr bypass by identifying the registry
modification into a specific path that eventvwr.msc looks to (but is not valid)
upon execution. A successful attack will include a suspicious command to be executed
upon eventvwr.msc loading. Upon triage, review the parallel processes that have
executed. Identify any additional registry modifications on the endpoint that may
look suspicious. Remediate as necessary.
data_source:
- Sysmon Event ID 13
search:
selection1:
process_name|contains: mscfile\\\\shell\\\\open\\\\command
condition: selection1
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint_Registry` datamodel.
known_false_positives: None known at this time.
references:
- https://blog.malwarebytes.com/malwarebytes-news/2021/02/lazyscripter-from-empire-to-double-rat/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1548.002/T1548.002.md
- https://attack.mitre.org/techniques/T1548/002/
- https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/
tags:
analytic_story:
- Windows Defense Evasion Tactics
- IcedID
- Living Off The Land
asset_type: Endpoint
confidence: 100
impact: 80
message: Registry values were modified to bypass UAC using Event Viewer on $dest_device_id$
mitre_attack_id:
- T1548.002
- T1548
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- event_id
- registry_path
- registry_hive
- registry_value_name
- registry_key_name
- registry_value_type
- registry_value_data
- process_guid
kill_chain_phases:
- Exploitation
risk_score: 80
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/ssa_eventvwr/windows-sysmon-registry.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: xmlwineventlog
@@ -0,0 +1,92 @@
name: Windows Exchange PowerShell Module Usage
id: 1118bc65-b0c7-4589-bc2f-ad6802fd0909
version: 1
date: '2022-10-12'
author: Michael Haag, Splunk
status: production
type: TTP
description: 'The following analytic identifies the usage of Exchange PowerShell modules
that were recently used for a proof of concept related to ProxyShell. Currently,
there is no active data shared or data we could re-produce relate to this part of
the ProxyShell chain of exploits. \
Inherently, the usage of the modules is not malicious, but reviewing parallel processes,
and user, of the session will assist with determining the intent. \
Module - New-MailboxExportRequest will begin the process of exporting contents of
a primary mailbox or archive to a .pst file. \
Module - New-managementroleassignment can assign a management role to a management
role group, management role assignment policy, user, or universal security group
(USG). \
Module - New-MailboxSearch cmdlet to create a mailbox search and either get an estimate
of search results, place search results on In-Place Hold or copy them to a Discovery
mailbox. You can also place all contents in a mailbox on hold by not specifying
a search query, which accomplishes similar results as Litigation Hold. \ Module
- Get-Recipient cmdlet to view existing recipient objects in your organization.
This cmdlet returns all mail-enabled objects (for example, mailboxes, mail users,
mail contacts, and distribution groups).'
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|re:
- get-recipient
- new-mailboxsearch
- new-managementroleassignment
- new-mailboxexportrequest
condition: (selection1)
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
This will only work with Multiline event logs, not XML.
known_false_positives: Administrators or power users may use this PowerShell commandlet
references:
- https://docs.microsoft.com/en-us/powershell/module/exchange/new-mailboxexportrequest?view=exchange-ps
- https://docs.microsoft.com/en-us/powershell/module/exchange/new-managementroleassignment?view=exchange-ps
- https://blog.orange.tw/2021/08/proxyshell-a-new-attack-surface-on-ms-exchange-part-3.html
- https://www.zerodayinitiative.com/blog/2021/8/17/from-pwn2own-2021-a-new-attack-surface-on-microsoft-exchange-proxyshell
- https://thedfirreport.com/2021/11/15/exchange-exploit-leads-to-domain-wide-ransomware/
- https://www.cisa.gov/uscert/ncas/alerts/aa22-264a
- https://learn.microsoft.com/en-us/powershell/module/exchange/new-mailboxsearch?view=exchange-ps
- https://learn.microsoft.com/en-us/powershell/module/exchange/get-recipient?view=exchange-ps
- https://thedfirreport.com/2022/03/21/apt35-automates-initial-access-using-proxyshell/
tags:
analytic_story:
- ProxyShell
- CISA AA22-264A
asset_type: Endpoint
confidence: 80
impact: 40
message: Exchange enumeration using PowerShell on $dest_device_id$.
mitre_attack_id:
- T1059
- T1059.001
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Actions on Objectives
risk_score: 32
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/exchange/windows-powershell.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,91 @@
name: Windows Execute Arbitrary Commands with MSDT
id: f253f9c2-10f0-4cc8-b469-f505ba8c2038
version: 1
date: '2022-09-15'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies a recently disclosed arbitraty command
execution using Windows msdt.exe - a Diagnostics Troubleshooting Wizard. The sample
identified will use the ms-msdt:/ protocol handler to load msdt.exe to retrieve
a remote payload. During triage, review file modifications for html. Identify parallel
process execution that may be related, including an Office Product.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- ms-msdt:/id
- ms-msdt:-id
- ms-msdt:/id
- 'ms-msdt:'
- msdt
process_name: msdt.exe
selection2:
cmd_line|re:
- .xml
- it_rebrowseforfile=
- it_browseforfile=
selection3:
cmd_line|re: pcwdiagnostic
condition: selection1 and selection2 and selection3
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: False positives may be present, filter as needed. Added .xml
to potentially capture any answer file usage. Remove as needed.
references:
- https://isc.sans.edu/diary/rss/28694
- https://doublepulsar.com/follina-a-microsoft-office-code-execution-vulnerability-1a47fce5629e
- https://twitter.com/nao_sec/status/1530196847679401984?s=20&t=ZiXYI4dQuA-0_dzQzSUb3A
- https://app.any.run/tasks/713f05d2-fe78-4b9d-a744-f7c133e3fafb/
- https://www.virustotal.com/gui/file/4a24048f81afbe9fb62e7a6a49adbd1faf41f266b5f9feecdceb567aec096784/detection
- https://strontic.github.io/xcyclopedia/library/msdt.exe-152D4C9F63EFB332CCB134C6953C0104.html
tags:
analytic_story:
- Microsoft Support Diagnostic Tool Vulnerability CVE-2022-30190
asset_type: Endpoint
confidence: 100
cve:
- CVE-2022-30190
impact: 100
message: $process_name$ on $dest_device_id$ under user $dest_user_id$ possibly indicative
of indirect command execution.
mitre_attack_id:
- T1218
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 100
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1566.001/macro/msdt-windows-security.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,81 @@
name: Windows Ingress Tool Transfer Using Explorer
id: 695bfad6-9662-4f9e-a576-bf02a951aa60
version: 1
date: '2022-09-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies the Windows Explorer process with a
URL within the command-line. Explorer.exe is known Windows process that handles
start menu, taskbar, desktop and file manager. Many adversaries abuse this process,
like DCRat malware, where it attempts to open the URL with the default browser application
on the target host by putting the URL as a parameter on explorer.exe process. This
anomaly detection might be a good pivot to check which user and how this process
was executed, what is the parent process and what is the URL link. This technique
is not commonly used to open an URL.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- https://
- http://
process_name: explorer.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints.
known_false_positives: False positives may be present based on legitimate applications
or third party utilities. Filter out any additional parent process names.
references:
- https://www.mandiant.com/resources/analyzing-dark-crystal-rat-backdoor
tags:
analytic_story:
- DarkCrystal RAT
asset_type: Endpoint
confidence: 50
impact: 50
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to access a remote
destination to download an additional payload.
mitre_attack_id:
- T1105
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 25
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/T1105_explorer-windows-security.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,157 @@
name: Windows LOLBin Binary in Non Standard Path
id: 25689101-012a-324a-94d3-08301e6c065a
version: 4
date: '2022-08-31'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: The following analytic identifies native living off the land binaries
within the Windows operating system that may be abused by adversaries by moving
it to a new directory. The list of binaries was derived from the https://lolbas-project.github.io
site, and excluded common process names (cmd.exe, explorer.exe, csc.exe, hh.exe,
regedit.exe) and DotNet binaries. It also does not include the category of OtherMSBinaries.
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- bitsadmin.exe
- certoc.exe
- certreq.exe
- certutil.exe
- cmdkey.exe
- cmdl32.exe
- cmstp.exe
- configsecuritypolicy.exe
- control.exe
- cscript.exe
- datasvcutil.exe
- desktopimgdownldr.exe
- dfsvc.exe
- diantz.exe
- diskshadow.exe
- dllhost.exe
- dnscmd.exe
- esentutl.exe
- eventvwr.exe
- expand.exe
- extexport.exe
- extrac32.exe
- findstr.exe
- finger.exe
- fltmc.exe
- forfiles.exe
- ftp.exe
- gfxdownloadwrapper.exe
- gpscript.exe
- imewdbld.exe
- ie4uinit.exe
- ieexec.exe
- ilasm.exe
- infdefaultinstall.exe
- makecab.exe
- mavinject.exe
- microsoft.workflow.compiler.exe
- mmc.exe
- msconfig.exe
- msdt.exe
- mshta.exe
- msiexec.exe
- netsh.exe
- odbcconf.exe
- offlinescannershell.exe
- pcalua.exe
- pcwrun.exe
- pktmon.exe
- pnputil.exe
- presentationhost.exe
- print.exe
- printbrm.exe
- psr.exe
- rasautou.exe
- reg.exe
- regini.exe
- register-cimprovider.exe
- regsvr32.exe
- replace.exe
- rpcping.exe
- rundll32.exe
- runonce.exe
- runscripthelper.exe
- sc.exe
- schtasks.exe
- scriptrunner.exe
- settingsynchost.exe
- syncappvpublishingserver.exe
- ttdinject.exe
- tttracer.exe
- vbc.exe
- verclsid.exe
- wab.exe
- wlrmdr.exe
- wmic.exe
- workfolders.exe
- wscript.exe
- wsreset.exe
- wuauclt.exe
- xwizard.exe
selection2:
process_path|re:
- (?i)\\windows\\system32
- (?i)\\windows\\syswow64
- (?i)\\windows\\networkcontrolle
- (?i)\\windows\\systemapps
- (?i)\\winsxs
- (?i)\\microsoft.net
condition: selection1 and not selection2
how_to_implement: Collect endpoint data such as sysmon or 4688 events.
known_false_positives: False positives may be present and filtering may be required.
Certain utilities will run from non-standard paths based on the third-party application
in use.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1036.003/T1036.003.yaml
- https://attack.mitre.org/techniques/T1036/003/
- https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218.004/T1218.004.md
tags:
analytic_story:
- Unusual Processes
- Ransomware
- WhisperGate
asset_type: Endpoint
confidence: 70
impact: 70
message: A system process $process_name$ with commandline $cmd_line$ spawn in non-default
folder path on host $dest_device_id$
mitre_attack_id:
- T1036
- T1036.003
- T1218
- T1218.004
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
- name: dest_user_id
type: User
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- dest_device_id
- process_name
- _time
- dest_user_id
- process_path
- cmd_line
kill_chain_phases:
- Actions on Objectives
risk_score: 49
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036/system_process_running_unexpected_location/dotnet_lolbin-windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,86 @@
name: Windows MSHTA Child Process
id: f63f7e9c-9526-11ec-9fc7-acde48001122
version: 2
date: '2022-02-23'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies child processes spawning from "mshta.exe".
The search will return the first time and last time these command-line arguments
were used for these executions, as well as the target system, the user, parent process
"mshta.exe" and its child process.
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- wscript.exe
- cscript.exe
- searchprotocolhost.exe
- microsoft.workflow.compiler.exe
- msbuild.exe
- colorcpl.exe
- scrcons.exe
- cmd.exe
- powershell.exe
parent_process_name|endswith: mshta.exe
condition: selection1
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: Although unlikely, some legitimate applications may exhibit
this behavior, triggering a false positive.
references:
- https://github.com/redcanaryco/AtomicTestHarnesses
- https://redcanary.com/blog/introducing-atomictestharnesses/
tags:
analytic_story:
- Suspicious MSHTA Activity
- Living Off The Land
asset_type: Endpoint
confidence: 100
impact: 80
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to access a remote
destination to download an additional payload.
mitre_attack_id:
- T1218.005
- T1218
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 80
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,84 @@
name: Windows MSHTA Command-Line URL
id: 9b35c538-94ef-11ec-9439-acde48001122
version: 1
date: '2022-02-23'
author: Michael Haag, Splunk
status: production
type: TTP
description: This analytic identifies when Microsoft HTML Application Host (mshta.exe)
utility is used to make remote http connections. Adversaries may use mshta.exe to
proxy the download and execution of remote .hta files. The analytic identifies command
line arguments of http and https being used. This technique is commonly used by
malicious software to bypass preventative controls. The search will return the first
time and last time these command-line arguments were used for these executions,
as well as the target system, the user, process "rundll32.exe" and its parent process.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- https://
- http://
process_name: mshta.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
confirm the latest CIM App 4.20 or higher is installed and the latest TA for the
endpoint product.
known_false_positives: It is possible legitimate applications may perform this behavior
and will need to be filtered.
references:
- https://github.com/redcanaryco/AtomicTestHarnesses
- https://redcanary.com/blog/introducing-atomictestharnesses/
- https://docs.microsoft.com/en-us/windows/win32/search/-search-3x-wds-extidx-prot-implementing
tags:
analytic_story:
- Suspicious MSHTA Activity
- Living Off The Land
asset_type: Endpoint
confidence: 100
impact: 80
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ attempting to access a remote
destination to download an additional payload.
mitre_attack_id:
- T1218.005
- T1218
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 80
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,83 @@
name: Windows MSHTA Inline HTA Execution
id: 24962154-9524-11ec-9333-acde48001122
version: 1
date: '2022-02-23'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies "mshta.exe" execution with inline protocol
handlers. "JavaScript", "VBScript", and "About" are the only supported options when
invoking HTA content directly on the command-line. The search will return the first
time and last time these command-line arguments were used for these executions,
as well as the target system, the user, process "mshta.exe" and its parent process.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- about
- javascript
- vbscript
process_name: mshta.exe
condition: (selection1)
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
confirm the latest CIM App 4.20 or higher is installed and the latest TA for the
endpoint product.
known_false_positives: Although unlikely, some legitimate applications may exhibit
this behavior, triggering a false positive.
references:
- https://github.com/redcanaryco/AtomicTestHarnesses
- https://redcanary.com/blog/introducing-atomictestharnesses/
- https://docs.microsoft.com/en-us/windows/win32/search/-search-3x-wds-extidx-prot-implementing
tags:
analytic_story:
- Suspicious MSHTA Activity
- Living Off The Land
asset_type: Endpoint
confidence: 100
impact: 80
message: An instance of $parent_process_name$ spawning $process_name$ was identified
on endpoint $dest_device_id$ by user $dest_user_id$ executing with inline HTA,
indicative of defense evasion.
mitre_attack_id:
- T1218.005
- T1218
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 80
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,78 @@
name: Windows Odbcconf Load Response File
id: 7b6c3fac-0c37-4efc-a85e-de88f42b6763
version: 1
date: '2022-09-15'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies the odbcconf.exe, Windows Open Database
Connectivity utility, loading up a resource file. The file extension is arbitrary
and may be named anything. The resource file itself may have different commands
supported by Odbcconf to load up a DLL (REGSVR) on disk or additional commands.
During triage, review file modifications and parallel processes.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- '/f '
- '-f '
process_name: odbcconf.exe
selection2:
cmd_line|contains: .rsp
condition: (selection1) and selection2
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: False positives may be present and filtering may need to occur
based on legitimate application usage. Filter as needed.
references:
- https://strontic.github.io/xcyclopedia/library/odbcconf.exe-07FBA12552331355C103999806627314.html
- https://twitter.com/redcanary/status/1541838407894171650?s=20&t=kp3WBPtfnyA3xW7D7wx0uw
tags:
analytic_story:
- Living Off The Land
asset_type: Endpoint
confidence: 70
impact: 60
message: $process_name$ has been identified on $dest_device_id$ under user $dest_user_id$
attempting to circumvent controls.
mitre_attack_id:
- T1218.008
- T1218
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 42
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.008/atomic_red_team/odbcconf-windows-security.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,87 @@
name: Windows OS Credential Dumping with Ntdsutil Export NTDS
id: dad9ddec-a72a-47be-87b6-a0f7ba98ed6e
version: 1
date: '2022-08-31'
author: Michael Haag, Splunk
status: production
type: TTP
description: 'Monitor for signs that Ntdsutil is being used to Extract Active Directory
database - NTDS.dit, typically used for offline password cracking. It may be used
in normal circumstances with no command line arguments or shorthand variations of
more common arguments. Ntdsutil.exe is typically seen run on a Windows Server. Typical
command used to dump ntds.dit \
ntdsutil "ac i ntds" "ifm" "create full C:\Temp" q q \
This technique uses "Install from Media" (IFM), which will extract a copy of the
Active Directory database. A successful export of the Active Directory database
will yield a file modification named ntds.dit to the destination.'
data_source:
- Windows Security 4688
search:
selection1:
process_name: ntdsutil.exe
selection2:
cmd_line|contains: create
selection3:
cmd_line|contains: ntds
condition: selection1 and (selection2 and selection3)
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: Highly possible Server Administrators will troubleshoot with
ntdsutil.exe, generating false positives.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1003.003/T1003.003.md#atomic-test-3---dump-active-directory-database-with-ntdsutil
- https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc753343(v=ws.11)
- https://2017.zeronights.org/wp-content/uploads/materials/ZN17_Kheirkhabarov_Hunting_for_Credentials_Dumping_in_Windows_Environment.pdf
- https://strontic.github.io/xcyclopedia/library/vss_ps.dll-97B15BDAE9777F454C9A6BA25E938DB3.html
tags:
analytic_story:
- Credential Dumping
- HAFNIUM Group
- Living Off The Land
asset_type: Endpoint
confidence: 50
impact: 100
message: Active Directory NTDS export on $dest_device_id$ using $process_name$ by
$dest_user_id$.
mitre_attack_id:
- T1003.003
- T1003
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 50
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/4688_windows-security.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,86 @@
name: Windows OS Credential Dumping with Procdump
id: e102e297-dbe6-4a19-b319-5c08f4c19a06
version: 1
date: '2022-08-31'
author: Michael Haag, Splunk
status: production
type: TTP
description: 'Detect procdump.exe dumping the lsass process. This query looks for
both -mm and -ma usage. -mm will produce a mini dump file and -ma will write a dump
file with all process memory. Both are highly suspect and should be reviewed. This
query does not monitor for the internal name (original_file_name=procdump) of the
PE or look for procdump64.exe. Modify the query as needed.\
During triage, confirm this is procdump.exe executing. If it is the first time a
Sysinternals utility has been ran, it is possible there will be a -accepteula on
the command line. Review other endpoint data sources for cross process (injection)
into lsass.exe.'
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains:
- '-ma '
- '-mm '
process_name:
- procdump64.exe
- procdump.exe
selection2:
cmd_line|contains: lsass
condition: (selection1) and selection2
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
Sysmon TA.
known_false_positives: None identified.
references:
- https://attack.mitre.org/techniques/T1003/001/
- https://docs.microsoft.com/en-us/sysinternals/downloads/procdump
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1003.001/T1003.001.md#atomic-test-2---dump-lsassexe-memory-using-procdump
- https://thedfirreport.com/2022/08/08/bumblebee-roasts-its-way-to-domain-admin/
tags:
analytic_story:
- Credential Dumping
- HAFNIUM Group
asset_type: Endpoint
confidence: 100
impact: 80
message: Procdump was utilized to dump lsass on $dest_device_id$ by $dest_user_id$.
mitre_attack_id:
- T1003.001
- T1003
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 80
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/procdump_windows-security.log
source: XmlWinEventLog
sourcetype: XmlWinEventLog
update_timestamp: true
@@ -0,0 +1,94 @@
name: Windows Powershell Connect to Internet With Hidden Window
id: 477e068e-8b6d-11ec-b6c1-81af21670352
version: 1
date: '2022-02-11'
author: Jose Hernandez, David Dorsey, Michael Haag Splunk
status: production
type: Anomaly
description: The following hunting analytic identifies PowerShell commands utilizing
the WindowStyle parameter to hide the window on the compromised endpoint. This combination
of command-line options is suspicious because it is overriding the default PowerShell
execution policy, attempts to hide its activity from the user, and connects to the
Internet. Removed in this version of the query is New-Object. The analytic identifies
all variations of WindowStyle, as PowerShell allows the ability to shorten the parameter.
For example w, win, windowsty and so forth. In addition, through our research it
was identified that PowerShell will interpret different command switch types beyond
the hyphen. We have added endash, emdash, horizontal bar, and forward slash.
data_source:
- Windows Security 4688
search:
selection1:
process_name:
- powershell_ise.exe
- powershell.exe
- sqltoolsps.exe
- sqlps.exe
- pwsh.exe
- pwsh.exe
selection2:
process|re: '(?i)[\-|\/]w(in*d*o*w*s*t*y*l*e*)*\s+[^-]'
condition: selection1 and not selection2
how_to_implement: You must be ingesting data that records process activity from your
hosts to populate the Endpoint data model in the Processes node. You must also be
ingesting logs with both the process name and command line from your endpoints.
The command-line arguments are mapped to the "process" field in the Endpoint data
model.
known_false_positives: Legitimate process can have this combination of command-line
options, but it's not common.
references:
- https://regexr.com/663rr
- https://github.com/redcanaryco/AtomicTestHarnesses/blob/master/TestHarnesses/T1059.001_PowerShell/OutPowerShellCommandLineParameter.ps1
- https://ss64.com/ps/powershell.html
- https://twitter.com/M_haggis/status/1440758396534214658?s=20
- https://blog.netlab.360.com/ten-families-of-malicious-samples-are-spreading-using-the-log4j2-vulnerability-now/
tags:
analytic_story:
- Malicious PowerShell
- Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns
- HAFNIUM Group
- Log4Shell CVE-2021-44228
asset_type: Endpoint
confidence: 70
impact: 50
message: PowerShell processes $process$ started with parameters to modify the execution
policy of the run, run in a hidden window, and connect to the Internet on host
$dest$ executed by user $user$.
mitre_attack_id:
- T1020
observable:
- name: dest_user_id
type: User
role:
- Victim
- name: dest_device_id
type: Hostname
role:
- Victim
- name: parent_process_name
type: Process
role:
- Parent Process
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- process
kill_chain_phases:
- Exploitation
risk_score: 35
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/hidden_powershell/hidden_windows-security.log
source: WinEventLog:Security
@@ -0,0 +1,69 @@
name: Windows PowerShell Disabled Kerberos Pre-Authentication Discovery Get-ADUser
id: d57b4d91-fc91-4482-a325-47693cced1eb
version: 1
date: '2022-11-14'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic utilizes PowerShell Script Block Logging (EventCode=4104)
to identify the execution of the `Get-ADUser` commandlet with specific parameters.
`Get-ADUser` is part of the Active Directory PowerShell module used to manage Windows
Active Directory networks. As the name suggests, `Get-ADUser` is used to query for
domain users. With the appropiate parameters, Get-ADUser allows adversaries to discover
domain accounts with Kerberos Pre Authentication disabled.\ Red Teams and adversaries
alike use may abuse Get-ADUSer to enumerate these accounts and attempt to crack
their passwords offline.
data_source:
- Windows Security 4688
search:
selection1:
cmd_line|contains: '4194304'
selection2:
cmd_line|re: get-aduser
condition: selection1 and selection2
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
known_false_positives: Administrators or power users may use search for accounts with
Kerberos Pre Authentication disabled for legitimate purposes.
references:
- https://attack.mitre.org/techniques/T1558/004/
- https://m0chan.github.io/2019/07/31/How-To-Attack-Kerberos-101.html
- https://stealthbits.com/blog/cracking-active-directory-passwords-with-as-rep-roasting/
tags:
analytic_story:
- Active Directory Kerberos Attacks
asset_type: Endpoint
confidence: 90
impact: 60
message: Disabled Kerberos Pre-Authentication Discovery With Get-ADUser from $dest_device_id$
mitre_attack_id:
- T1558
- T1558.004
observable:
- name: dest_device_id
type: Hostname
role:
- Victim
product:
- Splunk Behavioral Analytics
required_fields:
- _time
- dest_device_id
- process_name
- parent_process_name
- process_path
- dest_user_id
- process
- cmd_line
kill_chain_phases:
- Exploitation
risk_score: 54
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.004/getaduser/windows-powershell.log
source: WinEventLog
sourcetype: WinEventLog
update_timestamp: true

Some files were not shown because too many files have changed in this diff Show More