Skip to content

Latest commit

 

History

History

fn_proofpoint_tap

Proofpoint TAP

Table of Contents


Release Notes

Version Date Notes
1.1.1 11/2023 Convert all scripts to Python3
1.1.0 6/2023 Playbook support; Add siem_event_types app.config parameter to query threats using different TAP /siem endpoints
1.0.3 8/2020 Fix for event filtering
1.0.2 5/2020 Fix for Poller
1.0.1 4/2020 Bugfix
1.0.0 12/2019 Initial release

1.1 Changes

Playbooks

In v1.1, the existing rules and workflows have been replaced with playbooks. This change is made to support the ongoing, newer capabilities of playbooks. Each playbook has the same functionality as the previous, corresponding rule/workflow.

If upgrading from a previous release, notice that the previous release's rules/workflows remain in place. Both sets of rules and playbooks are active. For manual actions, playbooks will have the same name as it's corresponding rule, but with "(PB)" added at the end.

You can continue to use the rules/workflows. But migrating to playbooks will provide greater functionality along with future app enhancements and bug fixes.

User specified SIEM endpoints

A new app.config setting siem_event_types is provided to allow the user to specify which Proofpoint /siem endpoints to query when converting TAP threats into SOAR incident/cases. The parameter siem_event_types is a comma-separated list with the following possible values:

  • clicks_blocked
  • messages_blocked
  • messages_delivered
  • siem_issues
  • siem_all

If the siem_event_types parameter is not specified, the default behavior is to use the /siem/all endpoint (siem_all), which is the endpoint used in versions of the app prior to 1.1.0.

See the Proofpoint documentation for more information on the SIEM API: https://help.proofpoint.com/Threat_Insight_Dashboard/API_Documentation/SIEM_API

Overview

Proofpoint Targeted Attack Protection (TAP) helps you stay ahead of attackers with an innovative approach that detects, analyzes and blocks advanced threats before they reach your inbox. This includes ransomware and other advanced email threats delivered through malicious attachments and URLs.

screenshot: main

Key Features

The Proofpoint TAP function package provides the following features:

  • Poll detailed information from several types of TAP events in a SIEM-compatible, vendor-neutral format. This includes Blocked or permitted clicks to threats recognized by URL Defense and Blocked, and delivered messages containing threats recognized by URL Defense or Attachment Defense. Create SOAR cases from polled threat data.
  • Get detailed forensic evidences about individual threats or campaigns observed in their environment. These evidences could be used as indicators of compromise to confirm infection on a host, as supplementary data to enrich and correlate against other security intelligence sources, or to orchestrate updates to security endpoints to prevent exposure and infection.
  • Pull specific details about campaigns, including their description, the actor, malware family, and techniques associated with the campaign and the threat variants which have been associated with the campaign.

Requirements

This app supports the IBM Security QRadar SOAR Platform and the IBM Security QRadar SOAR for IBM Cloud Pak for Security.

SOAR platform

The SOAR platform supports two app deployment mechanisms, Edge Gateway (formerly App Host) and integration server.

If deploying to a SOAR platform with an Edge Gateway, the requirements are:

  • SOAR platform >= 45.2.0.
  • The app is in a container-based format (available from the AppExchange as a zip file).

If deploying to a SOAR platform with an integration server, the requirements are:

  • SOAR platform >= 45.2.0.
  • The app is in the older integration format (available from the AppExchange as a zip file which contains a tar.gz file).
  • Integration server is running resilient_circuits>=49.0.4423.
  • If using an API key account, make sure the account provides the following minimum permissions:
    Name Permissions
    Org Data Read
    Function Read
    Incidents Read, Create

The following SOAR platform guides provide additional information:

  • Edge Gateway Deployment Guide or App Host Deployment Guide: provides installation, configuration, and troubleshooting information, including proxy server settings.
  • Integration Server Guide: provides installation, configuration, and troubleshooting information, including proxy server settings.
  • System Administrator Guide: provides the procedure to install, configure and deploy apps.

The above guides are available on the IBM Documentation website at ibm.biz/soar-docs. On this web page, select your SOAR platform version. On the follow-on page, you can find the Edge Gateway Deployment Guide, App Host Deployment Guide, or Integration Server Guide by expanding Apps in the Table of Contents pane. The System Administrator Guide is available by expanding System Administrator.

Cloud Pak for Security

If you are deploying to IBM Cloud Pak for Security, the requirements are:

  • IBM Cloud Pak for Security >= 1.8.
  • Cloud Pak is configured with an Edge Gateway.
  • The app is in a container-based format (available from the AppExchange as a zip file).

The following Cloud Pak guides provide additional information:

  • Edge Gateway Deployment Guide or App Host Deployment Guide: provides installation, configuration, and troubleshooting information, including proxy server settings. From the Table of Contents, select Case Management and Orchestration & Automation > Orchestration and Automation Apps.
  • System Administrator Guide: provides information to install, configure, and deploy apps. From the IBM Cloud Pak for Security IBM Documentation table of contents, select Case Management and Orchestration & Automation > System administrator.

These guides are available on the IBM Documentation website at ibm.biz/cp4s-docs. From this web page, select your IBM Cloud Pak for Security version. From the version-specific IBM Documentation page, select Case Management and Orchestration & Automation.

Proxy Server

The app does support a proxy server.

Python Environment

Python 3.6 and Python 3.9 are supported. Additional package dependencies may exist for each of these packages:

  • resilient_circuits>=49.0.4423

Development Version

This app has been implemented using:

Product Name Product Version API URL API Version
Proofpoint TAP N/A https://tap-api-v2.proofpoint.com/v2 v2

Configuration

  • Proofpoint account with a username and password or an API Key and secret which is used to authenticate with the Proofpoint TAP REST API

Installation

Install

  • To install or uninstall an App or Integration on the SOAR platform, see the documentation at ibm.biz/soar-docs.
  • To install or uninstall an App on IBM Cloud Pak for Security, see the documentation at ibm.biz/cp4s-docs and follow the instructions above to navigate to Orchestration and Automation.

App Configuration

The following table provides the settings you need to configure the app. These settings are made in the app.config file. See the documentation discussed in the Requirements section for the procedure.

Config Required Example Description
base_url Yes https://tap-api-v2.proofpoint.com/v2 Base URL for Proofpoint TAP REST API calls
cafile No `` Certificate file if required by Proofpoint
forensics_template No `` Jinja template to override default forensic format
password Yes xxxx Credentials used to authenticate to Proofpoint TAP: password or API secret
polling_interval Yes 10 Time interval, in minutes, to check for new events. Enter 0 to disable
score_threshold No 50 Classification for the type of event to import based on the respective threat score
siem_event_types No clicks_blocked, messages_blocked, messages_delivered, siem_issues, siem_all Comma-separated list of Proofpoint TAP SIEM endpoints called to import threats into the SOAR platform
startup_interval No 10 Time interval, in minutes, to check for previous events at startup. Maximum is 60
threat_template No `` Jinja template to override default threat description format
type_filter No malware, phish, spam, impostor, all Filter used to determine which comma-separated list of types of events to import into the SOAR platform
username Yes 12345678-abcd-abe1-0123-e1234567890 Credentials used to authenticate to Proofpoint TAP: username or API key

Custom Layouts

Create a Proofpoint TAP custom layout and drag the custom fields and the data table like the screenshot below:

screenshot: custom_layouts


Function - Proofpoint TAP Get Campaign

Function pulls specific details about campaigns including description, the actor, malware family, techniques and the threat variants associated with the campaign.

screenshot: fn-proofpoint-tap-get-campaign

Inputs:

Name Type Required Example Tooltip
proofpoint_campaign_id text No - -

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "inputs": {
    "pp_campaign_id": "68a66f7f-cdd7-4c53-ba0f-2e1760254114"
  },
  "success": true,
  "data": {
    "id": "68a66f7f-cdd7-4c53-ba0f-2e1760254114",
    "name": "WebMail Phish | URLs | 01-05 June 2023",
    "description": "Custom WebMail phishing page, attempting to steal users credentials. \n\nExample senders:\n* 'Mail Admin <admin@yallahomsae.com>'\n* 'Email Support yourcompany.com <server@netbasx.com>'\n\nExample subjects:\n* 'Password Expiration notice'\n* 'Mailbox Config Error - Fix Error'\n\n\n",
    "startDate": "2023-06-01T00:00:00.000Z",
    "notable": false,
    "actors": [],
    "families": [
      {
        "id": "34b3f509-c74c-4d33-a29d-b9b364b9905c",
        "name": "Corporate Credential Phishing"
      }
    ],
    "malware": [],
    "techniques": [],
    "brands": [],
    "campaignMembers": [
      {
        "id": "b17ce924d5c75dd1e222f438fda67c526a77783403737613f261980b7bcc7510",
        "threat": "https://ipfs.io/ipfs/bafybeicfmpubkjm27jyai3bgvcerhr4ewupxngxvt7kj4yhihb3rfuxq5q/25-06-bg-4ur-we9b-f9wohrng-tg-gwbrww.htmlD#mkavanagh@sensata.com",
        "threatStatus": "active",
        "type": "url",
        "threatTime": "2023-06-01T16:06:36.000Z"
      },
      {
        "id": "fc3cdac565b676f3b5f5610fcf58160617fe83dfd691ee20d72a98990a058808",
        "threat": "https://ipfs.io/ipfs/Qmc92zdKqnFZKgnAYyCqSamRCBGaTpsSydmifKDTPMuxmJ#sales@arc-tech.com",
        "threatStatus": "active",
        "type": "url",
        "threatTime": "2023-06-01T06:10:55.000Z"
      },
      {
        "id": "c831966a9c313235f314ffa88c3126f556e9191c70bddea0cc3883ba1d64edd8",
        "threat": "https://googleweblight.com/i?u=https://ipfs.io/ipfs/QmRa9DJTfqGctNFazQSQb5fU6kaUBEyvH56czJ3ioEaz9w/?submit=ima@bmigroup.com",
        "threatStatus": "active",
        "type": "url",
        "threatTime": "2023-06-02T13:57:51.000Z"
      },
      {
        "id": "531cb865bb4a8c87090440414dfce5c16dec06e314797576ba4bac500f602bb5",
        "threat": "https://ipfs.io/ipfs/bafybeifluccxb2hveire3sevma2galuosmtm2egvpbegknas2bmlcjfykq/#nigel.desouza@tnt.com",
        "threatStatus": "active",
        "type": "url",
        "threatTime": "2023-06-02T14:00:49.000Z"
      },
      {
        "id": "97b31dfdc7621e7daef56e339df8fafc43c8ae71be2c79ef311832281dc1810c",
        "threat": "https://ipfs.io/ipfs/bafybeifwtldig24fsmrgbwlm2vr2gll4axhcdrpvdqxlg6akalewirimmi/absupdated.html#agoddard@airmauritius.com",
        "threatStatus": "active",
        "type": "url",
        "threatTime": "2023-06-01T10:30:57.000Z"
      },
      {
        "id": "ad8176b49d94a51aec11e0b5f0dc3257e60f288540315d72e21477a0c73a192d",
        "threat": "https://ipfs.io/ipfs/Qmc92zdKqnFZKgnAYyCqSamRCBGaTpsSydmifKDTPMuxmJ#mmole@mightymole.com",
        "threatStatus": "active",
        "type": "url",
        "threatTime": "2023-06-01T01:20:04.000Z"
      },
      {
        "id": "4a5db6fc6c11fd49b2836a4e77ed2284dc656222f73dbb8e59c8990a99edf8a9",
        "threat": "https://ipfs.io/ipfs/QmRMD1JBn8FTfUsY1LZCc3G3QjYcCNRyo9cgXQLnG5gUaX#odonnel@fastenal.com",
        "threatStatus": "active",
        "type": "url",
        "threatTime": "2023-06-02T05:18:21.000Z"
      }
    ]
  }
}

Example Pre-Process Script:

inputs.proofpoint_campaign_id = artifact.value

Example Post-Process Script:

from datetime import datetime

def add_row_to_campaign_object_dt(object_type, object_id, object_name=None, threat=None, type_of_threat=None, subtype_of_threat=None, threat_time=None):
  object_dt = incident.addRow("proofpoint_tap_campaign_object_dt")
  object_dt.proofpoint_tap_object_timestamp = datetime.now()
  object_dt.proofpoint_tap_campaign_id = artifact.value
  object_dt.proofpoint_tap_object_type = object_type
  object_dt.proofpoint_tap_object_id = object_id
  object_dt.proofpoint_tap_object_name = object_name
  object_dt.proofpoint_tap_object_threat = threat
  object_dt.proofpoint_tap_object_type_of_threat = type_of_threat
  object_dt.proofpoint_tap_object_subtype_of_threat = subtype_of_threat
  object_dt.proofpoint_tap_object_threat_time = threat_time

########################
# Mainline starts here #
########################
results = playbook.functions.results.campaign_results
MAX_DATA_TABLE_ROWS = 25

# results and results.data are both a Dictionary
if results is not None:
  noteText = "<b>Proofpoint TAP - Get Campaign Information by Campaign ID:</b>"

  if results.get("success") is True and results.get("data", None) is not None:
    data = results.get("data")
    campaign_name = data.get("name", None)
    campaign_description = data.get("description", None)
    campaign_start_date = data.get("startDate", None)

    noteText = u"""{}<br>Campaign was found:
    <br>- Campaign ID '{}'
    <br>- Name '{}'
    <br>- Description '{}'
    <br>- Campaign's first threat variants were first observed on '{}'
    <br>Campaign objects are saved in the Proofpoint TAP Campaign Object Details Data Table.""".format(noteText, artifact.value, campaign_name, campaign_description, campaign_start_date)

    campaign_members_list = data.get("campaignMembers", None)
    if len(campaign_members_list) > MAX_DATA_TABLE_ROWS:
      noteText = noteText + "<br>Too many campaignMembers found to add to the Campaign Object data table {0}<br>".format(len(campaign_members_list))
    else:
      for member in campaign_members_list:
        add_row_to_campaign_object_dt("CampaignMembers", member.get("id", None), threat=member.get("threat", None), type_of_threat=member.get("type", None), subtype_of_threat=member.get("subType", None), threat_time=member.get("threatTime", None))

    families_list = data.get("families", [])
    for family in families_list:
      add_row_to_campaign_object_dt("CampaignFamily", family.get("id"), family.get("name"))

    actors_list = data.get("actors", [])
    for actor in actors_list:
      add_row_to_campaign_object_dt("Actor", actor.get("id"), object_name=actor.get("name"))

    malware_list = data.get("malware", [])
    for malware in malware_list:
      add_row_to_campaign_object_dt("Malware", malware.get("id"), object_name=malware.get("name"))

    techniques_list = data.get("techniques", [])
    for technique in techniques_list:
      add_row_to_campaign_object_dt("Technique", technique.get("id"), object_name=technique.get("name"))

  elif results.get("success") is False and results.get("note_err_text", None) is not None:
    noteText = u"""{}
    <br>No Campaign information found for campaign ID '{}'.
    <br>Error: {}.""".format(noteText, artifact.value, results.get("note_err_text"))
  else:
    noteText = u"""{} <br>No Campaign information found for campaign ID '{}'.""".format(noteText, artifact.value)

  incident.addNote(helper.createRichText(noteText))


Function - Proofpoint TAP Get Forensics

Function pulls detailed forensic evidence about individual threats or campaigns observed in their environment.

screenshot: fn-proofpoint-tap-get-forensics

Inputs:

Name Type Required Example Tooltip
incident_id number Yes - -
proofpoint_aggregate_flag boolean No - -
proofpoint_campaign_id text No - -
proofpoint_malicious_flag boolean No - -
proofpoint_threat_id text No - -

Outputs:

NOTE: This example might be in JSON format, but results is a Python Dictionary on the SOAR platform.

results = {
  "inputs": {
    "incident_id": 2862,
    "campaign_id": null,
    "threat_id": "7cbbf08ebb723e7986f2369fc6b7e6fec773ff511484da8b643141e8b1aa221c",
    "aggregate_flag": null,
    "malicious_flag": true
  },
  "success": true,
  "num_reports": 1
}

Example Pre-Process Script:

None

Example Post-Process Script:

None


Script - Example: Proofpoint TAP - Create Artifact for Campaign Object Name or Threat

Script creates an Artifact for Proofpoint TAP Campaign Object Name or Threat based on the selected datatable row.

Object: proofpoint_tap_campaign_object_dt

Script Text:

# Script creates an artifact for Proofpoint TAP Campaign Object Name or Threat based on the selected datatable row.
# Artifact description
artifact_description = u"""Created by Proofpoint TAP Get Campaign results for Campaign ID '{}', Type of Campaign Object '{}', Object ID '{}'""".format(
  row.proofpoint_tap_campaign_id,
  row.proofpoint_tap_object_type,
  row.proofpoint_tap_object_id)

# Artifact type
artifact_type = "String"

# Artifact value
object_name = row.proofpoint_tap_object_name
object_threat = row.proofpoint_tap_object_threat
if object_name is not None:
  artifact_value = object_name
else:
  artifact_value = object_threat

# Create an Artifact
if artifact_value:
  incident.addArtifact(artifact_type, artifact_value, artifact_description)


Data Table - Proofpoint TAP Campaign Object Details

screenshot: dt-proofpoint-tap-campaign-object-details

API Name:

proofpoint_tap_campaign_object_dt

Columns:

Column Name API Access Name Type Tooltip
Campaign ID proofpoint_tap_campaign_id text -
Name proofpoint_tap_object_name text -
Object Id proofpoint_tap_object_id text -
Subtype of Threat proofpoint_tap_object_subtype_of_threat text -
Threat proofpoint_tap_object_threat text -
Threat Time proofpoint_tap_object_threat_time text -
Timestamp proofpoint_tap_object_timestamp datetimepicker -
Type of Campaign Object proofpoint_tap_object_type text -
Type of Threat proofpoint_tap_object_type_of_threat text -

Custom Fields

Label API Access Name Type Prefix Placeholder Tooltip
Proofpoint Campaign ID campaignId text properties - -
Proofpoint Message ID messageID text properties - -

Custom Artifact Types

Display Name API Access Name Description
Proofpoint Campaign ID proofpoint_campaign_id An identifier for the campaign
Proofpoint Threat ID proofpoint_threat_id The unique identifier associated with threat

Playbooks

Playbook Name Description Object Status
Example: Proofpoint TAP - Aggregate Forensics by Campaign ID (PB) Returns aggregate forensics for an entire campaign based on the given campaign identifier. Results are saved in a note and attachment. artifact enabled
Example: Proofpoint TAP - Aggregate Malicious Forensics by Threat ID (PB) Imports additional forensic information based on the given threat identifier. It returns aggregate forensics for the given threat identifier, which is filtered to include malicious results only. Results are saved in a note and attachment. artifact enabled
Example: Proofpoint TAP - Aggregate Malicious Forensics for Entire Campaign Associated with Threat ID (PB) Imports additional forensic information based on the given threat identifier. If the threat has been associated with a campaign, it returns aggregate forensics for the entire campaign. Otherwise, it returns aggregate forensics for the individual threat. The returned forensics are filtered to include malicious results only. Results are saved in a note and attachment. artifact enabled
Example: Proofpoint TAP - Create Artifact for Campaign Object Name or Threat (PB) None proofpoint_tap_campaign_object_dt enabled
Example: Proofpoint TAP - Get Campaign Information by Campaign ID (PB) Imports detailed information for given campaign identifier, including description, the actor, malware family, techniques and the threat variants associated with the campaign. Results are saved in a note and data table. artifact enabled

Troubleshooting & Support

Refer to the documentation listed in the Requirements section for troubleshooting information.

For Support

This is an IBM supported app. Please search ibm.com/mysupport for assistance.