TransformIndicatorToCSFalconIOC
Transform an indicator in Cortex into a CrowdStrike Falcon IOC. The output (found at the TransformIndicatorToCSFalconIOC.JsonOutput context path) is a JSON, which represents the indicators in CrowdStrike Falcon format. This JSON can be used as the input for the *cs-falcon-batch-upload-custom-ioc* command.
- Type
- python
- Pack
- CrowdStrikeFalcon
Source
from CommonServerPython import *
# Feel free to change it hard-coded
IOC_SOURCE = "Cortex XSOAR"
IOC_DESCRIPTION = ""
POPULATE_INDICATOR_FIELDS = ["value", "expiration", "score", "description", "tags", "indicator_type"]
INDICATOR_FIELDS_TO_CS_FALCON_IOC = {
"value": "value",
"expiration": "expiration",
"score": "severity",
"description": "description",
"tags": "tags",
"indicator_type": "type",
}
# Feel free to change it hard-coded.
# Possible values in CS Falcon are: Informational, Low, Medium, High and Critical
DBOT_SCORE_TO_CS_FALCON_SEVERITY = {
Common.DBotScore.BAD: "High",
Common.DBotScore.SUSPICIOUS: "Medium",
Common.DBotScore.GOOD: "Informational",
Common.DBotScore.NONE: "Informational",
}
def convert_unique_fields(ioc: dict, action: str, host_groups: list, platforms: list, applied_globally: bool):
# XSOAR indicators always have score
ioc["severity"] = DBOT_SCORE_TO_CS_FALCON_SEVERITY[ioc.get("severity")] # type: ignore
if ioc.get("type"):
indicator_type = ioc.get("type")
indicator_value = ioc.get("value", "")
if indicator_type == "File":
hash_type = get_hash_type(indicator_value)
if hash_type == "md5":
ioc["type"] = "md5"
elif hash_type == "sha256":
ioc["type"] = "sha256"
elif indicator_type == "IP":
ip_type = FeedIndicatorType.ip_to_indicator_type(indicator_value)
if ip_type == "IP":
ioc["type"] = "ipv4"
elif ip_type == "IPv6":
ioc["type"] = "ipv6"
elif indicator_type == "Domain":
ioc["type"] = "domain"
else:
raise DemistoException(f"The indicator type: {indicator_type} does not exist in CS Falcon")
# If you want to map the action field, you can do it here.
# Note: The action arg is mandatory with CS Falcon api
# Possible values are: 'no_action', 'allow', 'detect', 'prevent_no_ui', and 'prevent'.
ioc["action"] = action
# Note: The platforms arg is mandatory with CS Falcon api
if not platforms:
raise ValueError("Platform is required.")
ioc["platforms"] = platforms
ioc["source"] = IOC_SOURCE
if host_groups:
ioc["host_groups"] = host_groups
if applied_globally:
ioc["applied_globally"] = applied_globally
if not ioc.get("description", "") and IOC_DESCRIPTION:
ioc["description"] = IOC_DESCRIPTION
return ioc
def get_indicators_by_query():
action = demisto.args().pop("action")
platforms = argToList(demisto.args().pop("platforms"))
host_groups = argToList(demisto.args().pop("host_groups")) if demisto.args().get("host_groups") else []
applied_globally = argToBoolean(demisto.args().pop("applied_globally"))
demisto.args().update({"populateFields": POPULATE_INDICATOR_FIELDS})
indicators = execute_command("GetIndicatorsByQuery", args=demisto.args())
cs_falcon_iocs = []
if indicators:
for indicator in indicators:
# convert XSOAR indicator to CS Falcon IOC
cs_falcon_ioc = {
INDICATOR_FIELDS_TO_CS_FALCON_IOC[indicator_field]: indicator_value
for (indicator_field, indicator_value) in indicator.items()
}
cs_falcon_ioc = convert_unique_fields(cs_falcon_ioc, action, host_groups, platforms, applied_globally)
cs_falcon_iocs.append(cs_falcon_ioc)
return cs_falcon_iocs
def main():
try:
cs_falcon_iocs = get_indicators_by_query()
human_readable = tableToMarkdown(
"TransformIndicatorToCSFalconIOC is done:",
cs_falcon_iocs,
removeNull=True,
headers=list(INDICATOR_FIELDS_TO_CS_FALCON_IOC.values()),
)
context = {
"TransformIndicatorToCSFalconIOC.JsonOutput": json.dumps(cs_falcon_iocs),
"TransformIndicatorToCSFalconIOC.Indicators": cs_falcon_iocs,
}
demisto.results(
{
"Type": entryTypes["note"],
"ContentsFormat": formats["text"],
"Contents": cs_falcon_iocs,
"EntryContext": context,
"HumanReadable": human_readable,
}
)
except Exception as ex:
return_error(f"Failed to execute TransformIndicatorToCSFalconIOC. Error: {ex!s}")
if __name__ in ("__main__", "__builtin__", "builtins"):
main()
README
Transform an indicator in Cortex into a CrowdStrike Falcon IOC.
The output (found at the TransformIndicatorToCSFalconIOC.JsonOutput context path) is a JSON, which represents the indicators in CrowdStrike Falcon format.
This JSON can be used as the input for the cs-falcon-batch-upload-custom-ioc command. (Available from Cortex XSOAR 6.0.0).
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | |
| Cortex XSOAR Version | 6.0.0 |
Inputs
| Argument Name | Description |
|---|---|
| query | The indicators query. Using GetIndicatorsByQuery automation. Example: type:IP and lastSeen:>="2022-02-16T16:20:00 +0200". |
| action | The action that will be taken if the indicator will be discovered in the organization. |
| limit | The maximum number of indicators to fetch. |
| offset | The results offset page. Only change when the number of the results exceed the limit. |
| host_groups | List of host group IDs that the indicator applies to. Can be retrieved by running the cs-falcon-list-host-groups command. Either applied_globally or host_groups must be provided. |
| platforms | The platforms that the indicator applies to. |
| applied_globally | Whether the indicator is applied globally. Either applied_globally or host_groups must be provided. Default set to True. |
Outputs
| Path | Description | Type |
|---|---|---|
| TransformIndicatorToCSFalconIOC | Json output of the indicators. Should be the input for the *cs-falcon-batch-upload-custom-ioc*. | String |
| TransformIndicatorToCSFalconIOC.Indicators.value | The value of the Indicator. | String |
| TransformIndicatorToCSFalconIOC.Indicators.expiration | The date on which the indicator will become inactive. | String |
| TransformIndicatorToCSFalconIOC.Indicators.description | Descriptive label for the indicator. | String |
| TransformIndicatorToCSFalconIOC.Indicators.tags | List of tags of the indicator. | Unknown |
| TransformIndicatorToCSFalconIOC.Indicators.source | The source where this indicator originated. | String |
| TransformIndicatorToCSFalconIOC.Indicators.id | The ID of the indicator. | String |
| TransformIndicatorToCSFalconIOC.Indicators.type | Type of the indicator. Possible values are: md5, sha256, ipv4, ipv6 and domain. | String |
| TransformIndicatorToCSFalconIOC.Indicators.severity | The severity of the indicator. possible values are: Informational, Low, Medium, High and Critical. | String |
| TransformIndicatorToCSFalconIOC.Indicators.action | The action that will be taken if the indicator will be discovered in the organization. | String |
| TransformIndicatorToCSFalconIOC.Indicators.applied_globally | Whether the indicator is applied globally. | Boolean |
| TransformIndicatorToCSFalconIOC.Indicators.platforms | The platforms that the indicator applies to. | Unknown |
| TransformIndicatorToCSFalconIOC.Indicators.host_groups | List of host group IDs that the indicator applies to. | Unknown |
Script Examples
Example command
!TransformIndicatorToCSFalconIOC query="type:IP" action=no_action platforms=linux
Context Example
{
"TransformIndicatorToCSFalconIOC": {
"Indicators": [
{
"Severity": "Informational",
"Tags": [
"test"
],
"action": "no_action",
"applied_globally": true,
"expiration": "2022-02-16T13:02:26Z",
"platforms": [
"linux"
],
"source": "Cortex",
"type": "ipv4",
"value": "9.6.3.5"
},
{
"Severity": "Informational",
"action": "no_action",
"applied_globally": true,
"expiration": "2022-02-22T13:36:02.776329896Z",
"platforms": [
"linux"
],
"source": "Cortex",
"type": "ipv4",
"value": "4.6.8.7"
},
{
"Severity": "Informational",
"action": "no_action",
"applied_globally": true,
"expiration": "2022-02-22T13:41:02.960974457Z",
"platforms": [
"linux"
],
"source": "Cortex",
"type": "ipv4",
"value": "4.7.8.7"
},
{
"Severity": "Informational",
"action": "no_action",
"applied_globally": true,
"expiration": "2022-02-22T13:41:02.960919913Z",
"platforms": [
"linux"
],
"source": "Cortex",
"type": "ipv4",
"value": "9.1.4.8"
},
{
"Severity": "Informational",
"action": "no_action",
"applied_globally": true,
"expiration": "2022-02-22T13:36:02.776389915Z",
"platforms": [
"linux"
],
"source": "Cortex",
"type": "ipv4",
"value": "2.1.4.8"
},
{
"Severity": "Informational",
"action": "no_action",
"applied_globally": true,
"expiration": "2022-02-16T13:02:46Z",
"platforms": [
"linux"
],
"source": "Cortex",
"type": "ipv4",
"value": "4.5.8.9"
}
],
"JsonOutput": "[{\"expiration\": \"2022-02-16T13:02:26Z\", \"type\": \"ipv4\", \"Severity\": \"Informational\", \"Tags\": [\"test\"], \"value\": \"9.6.3.5\", \"action\": \"no_action\", \"source\": \"Cortex\", \"platforms\": [\"linux\"], \"applied_globally\": true}, {\"expiration\": \"2022-02-22T13:36:02.776329896Z\", \"type\": \"ipv4\", \"Severity\": \"Informational\", \"value\": \"4.6.8.7\", \"action\": \"no_action\", \"source\": \"Cortex\", \"platforms\": [\"linux\"], \"applied_globally\": true}, {\"expiration\": \"2022-02-22T13:41:02.960974457Z\", \"type\": \"ipv4\", \"Severity\": \"Informational\", \"value\": \"4.7.8.7\", \"action\": \"no_action\", \"source\": \"Cortex\", \"platforms\": [\"linux\"], \"applied_globally\": true}, {\"expiration\": \"2022-02-22T13:41:02.960919913Z\", \"type\": \"ipv4\", \"Severity\": \"Informational\", \"value\": \"9.1.4.8\", \"action\": \"no_action\", \"source\": \"Cortex\", \"platforms\": [\"linux\"], \"applied_globally\": true}, {\"expiration\": \"2022-02-22T13:36:02.776389915Z\", \"type\": \"ipv4\", \"Severity\": \"Informational\", \"value\": \"2.1.4.8\", \"action\": \"no_action\", \"source\": \"Cortex\", \"platforms\": [\"linux\"], \"applied_globally\": true}, {\"expiration\": \"2022-02-16T13:02:46Z\", \"type\": \"ipv4\", \"Severity\": \"Informational\", \"value\": \"4.5.8.9\", \"action\": \"no_action\", \"source\": \"Cortex\", \"platforms\": [\"linux\"], \"applied_globally\": true}]"
}
}
Human Readable Output
TransformIndicatorToCSFalconIOC is done
value expiration Severity Tags type 9.6.3.5 2022-02-16T13:02:26Z Informational test ipv4 4.6.8.7 2022-02-22T13:36:02.776329896Z Informational ipv4 4.7.8.7 2022-02-22T13:41:02.960974457Z Informational ipv4 9.1.4.8 2022-02-22T13:41:02.960919913Z Informational ipv4 2.1.4.8 2022-02-22T13:36:02.776389915Z Informational ipv4 4.5.8.9 2022-02-16T13:02:46Z Informational ipv4