Cisco Secure Malware Analytics
Secure Malware Analytics (formerly Threat Grid) combines advanced sandboxing with threat intelligence into one unified solution to protect organizations from malware.
Data Enrichment & Threat Intelligence · Cisco Secure Malware Analytics · Feed
Details
| ID | Cisco Secure Malware Analytics |
|---|---|
| Provider | Cisco Systems |
| Category | Data Enrichment & Threat Intelligence |
| From Version | 5.5.0 |
| Docker Image | demisto/python3:3.12.13.10116658 |
| Supported Modules | Agentix XSIAM EDR Cortex Cloud Cloud Runtime Security |
README
Secure Malware Analytics (formerly Threat Grid) combines advanced sandboxing with threat intelligence into one unified solution to protect organizations from malware.
Configure Cisco Secure Malware Analytics in Cortex
| Parameter | Description | Required |
|---|---|---|
| API Key | The Cisco Secure Malware Analytics API key. | True |
| Feed Name | The feed name to fetch. | True |
| First fetch | The date or number of days from when to start fetching indicators. | False |
| Fetch indicators | Whether to fetch indicators. | False |
| Indicator Reputation | Indicators from this integration instance will be marked with this reputation. | False |
| Traffic Light Protocol Color | The Traffic Light Protocol (TLP) designation to apply to indicators fetched from the feed. | False |
| Tags | Supports CSV values. | False |
| Source Reliability | Reliability of the source providing the intelligence data. | True |
| Feed Fetch Interval | The feed fetch interval. | False |
| Bypass exclusion list | When selected, the exclusion list is ignored for indicators from this feed. This means that if an indicator from this feed is on the exclusion list, the indicator might still be added to the system. | False |
| Use system proxy settings | Whether to use the system proxy settings. | False |
| Trust any certificate | Whether to trust any certificate (not secure). | False |
Commands
You can execute these commands from the CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.
cisco-sma-get-indicators
Retrieves indicators.
Base Command
cisco-sma-get-indicators
Input
| Argument Name | Description | Required |
|---|---|---|
| limit | The maximum number of indicators to retrieve. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| CiscoSMA.value | String | The indicator value. |
| CiscoSMA.type | Unknown | The indicator type. |
| CiscoSMA.Tags | String | Tags that are associated with the indicator. |
| CiscoSMA.Description | String | The feed description. |
| CiscoSMA.FeedRelatedIndicators.type | String | The type of the indicators that are associated with the domain. |
| CiscoSMA.FeedRelatedIndicators.value | String | Indicators that are associated with the domain. |
Command Example
!cisco-sma-get-indicators limit=1
Context Example
{
"CiscoSMA": {
"fields": {
"Description": "DNS response information from requests made by document samples performing network communications.",
"FirstSeenBySource": "2021-04-13T12:47:34Z",
"Tags": [
"doc-net-com-dns"
],
"reportedby": "CiscoSMA",
"trafficlightprotocol": "GREEN"
},
"rawJSON": {
"description": "DNS response information from requests made by document samples performing network communications.",
"domain": "example.com",
"info": "example.com/feeds/doc-net-com-dns/domain",
"ips": [
"0.0.0.0"
],
"sample": "example",
"sample_md5": "1234556",
"sample_sha1": "1234556",
"sample_sha256": "1234556",
"timestamp": "2021-04-13T12:47:34Z"
},
"type": "IP",
"value": "0.0.0.0"
}
}
Human Readable Output
CiscoSMA Indicators
value type o.o.o.o IP
cisco-sma-reset-fetch-indicators
WARNING: This command will reset your fetch history.
Base Command
cisco-sma-reset-fetch-indicators
Input
There are no input arguments for this command.
Context Output
There is no context output for this command.
Command Example
!cisco-sma-reset-fetch-indicators
Human Readable Output
Fetch history deleted successfully
Configuration parameters
base_url— URLapi_key— API Key (Leave empty. Fill in the API Key in the password field.)feed_name— Feed Name (required)first_fetch— First fetchfeed— Fetch indicatorsfeedReputation— Indicator Reputationtlp_color— Traffic Light Protocol ColorfeedTags— TagsfeedReliability— Source Reliability (required)feedExpirationPolicy—feedExpirationInterval—feedFetchInterval— Feed Fetch IntervalfeedBypassExclusionList— Bypass exclusion listproxy— Use system proxy settingsinsecure— Trust any certificate (not secure)create_relationships— Create Relationships
Commands (2)
-
cisco-sma-get-indicatorsRetrieves indicators.
-
cisco-sma-reset-fetch-indicatorsWARNING: This command will reset your fetch history.
from CommonServerPython import * from FeedCiscoSecureMalwareAnalytics import Client, create_entity_relationships, fetch_indicators, fetch_indicators_command from test_data.feed_data import banking_dns_response, sinkholed_ip_dns_response def test_fetch_indicators(requests_mock): """Unit test Given - fetch incidents command - feed name - command raw response When - run the fetch indicators command. Then - Validate creates indicators and unifies if they are the same """ first_fetch = arg_to_datetime(arg="today", arg_name="First fetch") client = Client( api_key="1234", verify=False, proxy=False, feed_name=["sinkholed-ip-dns"], first_fetch=first_fetch, tlp_color="", feed_tags="", create_relationships=True, ) requests_mock.get( f"https://panacea.threatgrid.com/api/v3/feeds/sinkholed-ip-dns.json?api_key={client._api_key}", json=sinkholed_ip_dns_response, ) indicators, status = fetch_indicators(client, None) assert len(indicators) == 15 def test_fetch_indicators_command_list(requests_mock, mocker): """Unit test Given - fetch incidents command - list of feed names - command raw response When - run the fetch indicators command with 2 feed names. Then - Validate creates indicators and unifies if they are the same _ Validate that the fields: 'FeedRelatedIndicators' and 'tags' have been updated properly """ first_fetch = arg_to_datetime(arg="today", arg_name="First fetch") client = Client( api_key="1234", verify=False, proxy=False, feed_name=["sinkholed-ip-dns", "banking-dns"], first_fetch=first_fetch, tlp_color="", feed_tags="", create_relationships=True, ) requests_mock.get( f"https://panacea.threatgrid.com/api/v3/feeds/sinkholed-ip-dns.json?api_key={client._api_key}", json=sinkholed_ip_dns_response, ) requests_mock.get( f"https://panacea.threatgrid.com/api/v3/feeds/banking-dns.json?api_key={client._api_key}", json=banking_dns_response, ) a = mocker.patch.object(demisto, "createIndicators") fetch_indicators_command(client) fetch_indicators_command(client) for indicator in a.call_args.args[0]: if indicator["value"] == "Example1.com": assert len(indicator["fields"]["FeedRelatedIndicators"]) == 14 assert len(indicator["relationships"]) == 14 assert len(indicator["fields"]["Tags"]) == 2 if indicator["value"] == "Example3.com": assert len(indicator["fields"]["FeedRelatedIndicators"]) == 4 assert len(indicator["relationships"]) == 4 assert len(indicator["fields"]["Tags"]) == 1 assert len(a.call_args.args[0]) == 28 def test_create_entity_relationships(): """ Given - indicator domain name - related indicators When - run the fetch incidents command Then - Validate created relationships """ domain_name = "test.com" relevant_indicators = [{"type": "IP", "value": "1.1.1.1"}] relationships = create_entity_relationships(relevant_indicators, domain_name) assert relationships[0].get("entityB") == "1.1.1.1" assert relationships[0].get("entityBType") == "IP" assert relationships[0].get("entityA") == "test.com" assert relationships[0].get("entityAType") == "Domain" def test_get_indicators_success(requests_mock): """ Given a Client instance, valid key and a timestamp value When get_indicators is called Then the expected indicators are returned """ client = Client("api_key", False, False, "first_fetch", ["feed"], "", "", False) requests_mock.get("https://panacea.threatgrid.com/api/v3/feeds/feed.json", json={"indicators": ["1.1.1.1"]}) indicators = client.get_indicators("feed", None) assert indicators == {"indicators": ["1.1.1.1"]} def test_get_indicators_with_timestamp(requests_mock): """ Given a Client instance and a timestamp value When get_indicators is called with the timestamp Then the expected indicators are returned """ client = Client("api_key", False, False, "first_fetch", ["feed"], "", "", False) requests_mock.get("https://panacea.threatgrid.com/api/v3/feeds/feed_timestamp.json", json={"indicators": ["1.1.1.1"]}) indicators = client.get_indicators("feed", "timestamp") assert indicators == {"indicators": ["1.1.1.1"]}