VirusTotal Retrohunt Feed
Use this feed integration to fetch VirusTotal Retrohunt matches.
Data Enrichment & Threat Intelligence · VirusTotal · Feed
Details
| ID | VirusTotal Retrohunt Feed |
|---|---|
| Provider | |
| 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
Use this feed integration to fetch VirusTotal Retrohunt matches. It processes the latest finished job retrieving its matches based on the limit parameter (40 by default) in every fetch until there are no more matches for that job.
Configure VirusTotal Retrohunt Feed in Cortex
| Parameter | Description | Required |
|---|---|---|
| API Key (leave empty. Fill in the API key in the password field.) | True | |
| API Key | True | |
| Limit | Limit of indicators to fetch from retrohunt job results. | False |
| Fetch indicators | False | |
| Indicator Reputation | Indicators from this integration instance will be marked with this reputation. | False |
| Source Reliability | Reliability of the source providing the intelligence data. | True |
| False | ||
| False | ||
| 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 |
| Tags | Supports CSV values. | False |
| Traffic Light Protocol Color | The Traffic Light Protocol (TLP) designation to apply to indicators fetched from the feed. | 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.
vt-retrohunt-get-indicators
Gets the matches from a given retrohunt job’s id or the latest finished by default.
vt-retrohunt-reset-fetch-indicators
Reset the last processed job’s id
Base Command
vt-retrohunt-get-indicators
Input
| Argument Name | Description | Required |
|---|---|---|
| limit | The maximum number of results to return. Default is 40. | Optional |
| job_id | VT Retrohunt job’s ID. | Optional |
Context Output
There is no context output for this command.
Command Example
!vt-retrohunt-get-indicators
!vt-retrohunt-get-indicators limit=10
!vt-retrohunt-get-indicators limit=10 job_id="RETROHUNT-JOB-ID"
Human Readable Output
Indicators from VirusTotal Retrohunt Feed
| Sha256 | Detections | Filetype |
|---|---|---|
| 80db033dfe2b4e966d46a4ceed36e20b98a13891ce364a1308b90da7ad694cf3 | 1/59 | ELF |
| 6717c568e623551e600d315c7d1d634824a6f4b16e8aedfa298aefe7155313ff | 1/59 | ELF |
| 2c02a593ac714f9bac876d0a3c056384e0038505515d0c8472aa00ea36a6abb2 | 1/59 | ELF |
| e658b64650153c2207a76b2ee390b0fef04712d0da1d75a9eae25e4be596071a | 3/59 | ELF |
| 5ec2e17f25e800825ec5ed592c73303f840fa33cce2c8c4a4e7b6556798ffda0 | 1/55 | ELF |
| 771ba05ca9321dc723fc66b995c1d79a969330fc4242da6737cff1b364f978c8 | 2/59 | ELF |
| 4e3fac63a8b027788a10fd0191adf3ad59b2111324e1aa4eb4441723793c1b11 | 33/60 | ELF |
| ff1bdaf789643c6b934c9a9593fea82912d5974ba6ca0fd8dbf42db09ba82925 | 0/60 | ELF |
| 4371874f35538dc7d3b1d50df8cd0e8ad0744441ed487deb0d7a18a4a4373fea | 1/60 | ELF |
Configuration parameters
credentials— API Key (leave empty. Fill in the API key in the password field.) (required)limit— Limitfeed— Fetch indicatorsfeedReputation— Indicator ReputationfeedReliability— Source Reliability (required)feedExpirationPolicy—feedExpirationInterval—feedFetchInterval— Feed Fetch IntervalfeedBypassExclusionList— Bypass exclusion listfeedTags— Tagstlp_color— Traffic Light Protocol Color
Commands (2)
-
vt-retrohunt-get-indicatorsGets the matches from a given retrohunt job's id or the latest by default.
-
vt-retrohunt-reset-fetch-indicatorsThis command will reset your fetch history.
from unittest.mock import call import demistomock as demisto from FeedRetrohunt import Client, fetch_indicators_command, main MOCK_VT_JOBS = { "data": [ { "attributes": { "status": "finished", "finish_date": 1637921161, "rules": "lorem ipsum", "num_matches_outside_time_range": 0, "corpus": "main", "scanned_bytes": 101180105623515, "creation_date": 1637919938, "num_matches": 10000, "progress": 100, "notification_email": "", "start_date": 1637919943, }, "type": "retrohunt_job", "id": "Jobidhere-123456789", "links": {"self": "https://www.virustotal.com/ui/intelligence/retrohunt_jobs/Diviei-1637919938"}, } ], "links": {"self": "https://www.virustotal.com/ui/users/Diviei/retrohunt_jobs?limit=10"}, "meta": {"count": 1}, } MOCK_VT_JOB_MATCHES = { "data": [ { "attributes": { "sha256": "bd59949c6cbe8bd00ad114e2c1c8f4e2e79f90a818d4eddfbd76194e111c9ebb", "tags": [ "peexe", "overlay", "runtime-modules", "checks-network-adapters", "exploit", "cve-2017-0147", "direct-cpu-clock-access", "detect-debug-environment", "long-sleeps", "checks-disk-space", ], "vhash": "026046651d6570b8z201cpz31zd025z", "last_analysis_stats": { "harmless": 0, "type-unsupported": 4, "suspicious": 0, "confirmed-timeout": 0, "timeout": 2, "failure": 0, "malicious": 56, "undetected": 9, }, "unique_sources": 1, "first_submission_date": 1637892429, "meaningful_name": "5b24a21f6f9f6955b0fbaacaefb8dc9b.virus", "last_submission_date": 1637892429, "type_tag": "peexe", "ssdeep": "49152:QnaMSPbcBVQej/1INRx+TSqTdX1HkQWRdhn:QaPoBhz1aRxcSUDkLdh", "times_submitted": 1, "size": 2281472, }, "type": "file", "id": "bd59949c6cbe8bd00ad114e2c1c8f4e2e79f90a818d4eddfbd76194e111c9ebb", "links": {"self": "https://www.virustotal.com/loremipsum"}, "context_attributes": {"rule_name": "wannacry_2", "match_in_subfile": False}, } ], "links": {"self": "https://www.virustotal.com/loremipsum", "next": "https://www.virustotal.com/loremipsum"}, "meta": {"count": 1, "cursor": "STI1Ci4="}, } def test_fetch_indicators_command(mocker): client = Client("https://fake") mocker.patch.object(client, "fetch_jobs", return_value=MOCK_VT_JOBS) mocker.patch.object(client, "fetch_job_matches", return_value=MOCK_VT_JOB_MATCHES) indicators = fetch_indicators_command(client, None, [], limit=1) fields = indicators[0]["fields"] assert len(indicators) == 1 assert fields["sha256"] == "bd59949c6cbe8bd00ad114e2c1c8f4e2e79f90a818d4eddfbd76194e111c9ebb" assert fields["ssdeep"] == "49152:QnaMSPbcBVQej/1INRx+TSqTdX1HkQWRdhn:QaPoBhz1aRxcSUDkLdh" def test_main_manual_command(mocker): params = { "tlp_color": None, "feedTags": [], "credentials": {"password": "xxx"}, } mocker.patch.object(demisto, "params", return_value=params) mocker.patch.object(demisto, "command", return_value="vt-retrohunt-get-indicators") list_jobs_mock = mocker.patch.object(Client, "list_job_matches") main() assert list_jobs_mock.call_args == call(40, "") def test_main_default_command(mocker): params = { "tlp_color": None, "feedTags": [], "credentials": {"password": "xxx"}, "limit": 7, "filter": "Wannacry", } mocker.patch.object(demisto, "params", return_value=params) mocker.patch.object(demisto, "command", return_value="fetch-indicators") list_jobs_mock = mocker.patch.object(Client, "list_job_matches") main() assert list_jobs_mock.call_args == call(40, "") def test_main_test_command(mocker): params = {"credentials": {"password": "xxx"}} mocker.patch.object(demisto, "params", return_value=params) mocker.patch.object(demisto, "command", return_value="test-module") list_jobs_mock = mocker.patch.object(Client, "list_job_matches") main() assert list_jobs_mock.call_count == 1