ProofpointFeed
Detailed feed of domains and IP addresses classified in different categories. You need a valid authorization code from Proofpoint ET to access this feed.
Data Enrichment & Threat Intelligence · Proofpoint Feed · Feed
Details
| ID | ProofpointFeed |
|---|---|
| Provider | Thoma Bravo |
| Category | Data Enrichment & Threat Intelligence |
| From Version | 5.5.0 |
| Docker Image | demisto/python3:3.12.13.10116658 |
README
Detailed feed of domains and ips classified in different categories. You need a valid authorization code from Proofpoint ET to access this feed
Configure Proofpoint Feed in Cortex
| Parameter | Description | Required |
|---|---|---|
| Fetch indicators | False | |
| Authorization Code | True | |
| 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 |
| Traffic Light Protocol Color | The Traffic Light Protocol (TLP) designation to apply to indicators fetched from the feed | False |
| 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 |
| Indicator Type | The indicator type in the feed to fetch. Domain is referring to “https://rules.emergingthreats.net/auth_code/reputation/detailed-iprepdata.txt”, IP is referring to “https://rules.emergingthreats.net/auth_code/reputation/detailed-domainrepdata.txt”. | True |
| Tags | Supports CSV values. | False |
| Trust any certificate (not secure) | False | |
| Use system proxy settings | 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.
proofpoint-get-indicators
Gets indicators from the feed.
Base Command
proofpoint-get-indicators
Input
| Argument Name | Description | Required |
|---|---|---|
| limit | The maximum number of results to return to the output. The default value is “50”. Default is 50. | Optional |
| indicator_type | The indicator type to fetch. Possible values are: all, domain, ip. Default is all. | Optional |
Context Output
There is no context output for this command.
Configuration parameters
feed— Fetch indicatorsauth_code— Authorization Codecredentials_auth_code—feedReputation— Indicator ReputationfeedReliability— Source Reliability (required)tlp_color— Traffic Light Protocol ColorfeedExpirationPolicy—feedExpirationInterval—feedFetchInterval— Feed Fetch IntervalfeedBypassExclusionList— Bypass exclusion listindicator_type— Indicator Type (required)feedTags— Tagsinsecure— Trust any certificate (not secure)proxy— Use system proxy settings
Commands (1)
-
proofpoint-get-indicatorsGets indicators from the feed.
import pytest from CommonServerPython import FeedIndicatorType from FeedProofpoint import Client, fetch_indicators_command, get_indicators_command url = "https://example.com" auth_code = "cool" client = Client(url, auth_code) def test_fetch_ips(requests_mock): ip_path = "./TestData/detailed-iprep.txt" with open(ip_path) as f: data = f.read() requests_mock.get("https://example.com/cool/reputation/detailed-iprepdata.txt", text=data) indicators = fetch_indicators_command(client, client.IP_TYPE) assert len(indicators) == 4 def test_fetch_domains(requests_mock): ip_path = "./TestData/detalied-domainrepdata.txt" with open(ip_path) as f: data = f.read() requests_mock.get("https://example.com/cool/reputation/detailed-domainrepdata.txt", text=data) indicators = fetch_indicators_command(client, client.DOMAIN_TYPE) assert len(indicators) == 12 # making sure all domains are not of type domain glob domains = [ind for ind in indicators if ind.get("type") == FeedIndicatorType.Domain] domain_globs = [ind for ind in indicators if ind.get("type") == FeedIndicatorType.DomainGlob] assert len(domains) == 9 assert len(domain_globs) == 3 assert any("*" not in ind.get("value") for ind in domains) assert all("*" in ind.get("value") for ind in domain_globs) def test_fetch_domains_with_invalid_category(requests_mock): """ Given: - A domain feed with invalid (non-numeric) category values When: - Executing fetch_indicators_command Then: - Validate that the function handles invalid category values gracefully - Verify that indicators with invalid categories have "Unknown" as category_name """ test_path = "./TestData/domain-with-invalid-category.txt" with open(test_path) as f: data = f.read() requests_mock.get("https://example.com/cool/reputation/detailed-domainrepdata.txt", text=data) indicators = fetch_indicators_command(client, client.DOMAIN_TYPE) # Verify we got all indicators including those with invalid categories assert len(indicators) == 5 # Test case 1: Non-numeric category (domain name) invalid_category_indicator = next((ind for ind in indicators if ind.get("value") == "malicious.com"), None) assert invalid_category_indicator is not None assert invalid_category_indicator["rawJSON"]["category_name"] == "Unknown" # Test case 2: Out of bounds category index out_of_bounds_indicator = next((ind for ind in indicators if ind.get("value") == "outofbounds.com"), None) assert out_of_bounds_indicator is not None assert out_of_bounds_indicator["rawJSON"]["category_name"] == "Unknown" # Test case 3: Empty category empty_category_indicator = next((ind for ind in indicators if ind.get("value") == "empty-category.com"), None) assert empty_category_indicator is not None assert empty_category_indicator["rawJSON"]["category_name"] == "Unknown" @pytest.mark.parametrize("tags", (["tag1, tag2"], [])) def test_feed_param(tags, requests_mock): """ Given: - tags parameters When: - Executing any command on feed Then: - Validate the tags supplied exists in the indicators """ client._tags = tags ip_path = "./TestData/detailed-iprep.txt" with open(ip_path) as f: data = f.read() requests_mock.get("https://example.com/cool/reputation/detailed-iprepdata.txt", text=data) indicators = fetch_indicators_command(client, client.IP_TYPE) assert tags == indicators[0]["fields"]["tags"] def test_get_indicators_command(mocker): """ Given: - tags parameters When: - Executing get_indicators_command Then: - Validate that the function returns expected markdown table, empty dictionary as context, and list of fetched indicators for a valid indicator type and limit value. """ mocker.patch.object( client, "get_indicators", return_value=[{"type": "domain", "value": "example.com"}, {"type": "ip", "value": "1.2.3.4"}] ) args = {"indicator_type": "all", "limit": "2"} expected_hr = "### Indicators from Proofpoint Feed\n|type|value|\n|---|---|\n| domain | example.com |\n| ip | 1.2.3.4 |\n" expected_indicators = [{"type": "domain", "value": "example.com"}, {"type": "ip", "value": "1.2.3.4"}] hr, context, indicators = get_indicators_command(client, args) assert hr == expected_hr assert context == {} assert indicators == expected_indicators