McAfee OpenDXL

Table of Contents


Release Notes

v1.2.0

  • App Host support

v1.1.0

  • Added Resilient Subscriber component

v1.0.0

  • Initial Release


Overview

Resilient Circuits Components for McAfee publishing to DXL Functions

screenshot: fn-mcafee-publish-to-dxl-workflow

Resilient Circuits Components for McAfee publishing to DXL Functions

Key Features

  • The McAfee Publish to DXL function contains the ability to publish a synchronous or asynchronous message to an event or a service.

  • The McAfee DXL Subscriber listens on defined topics and maps the data to the Resilient platform to create incidents and artifacts.


Installation

Requirements

  • Resilient platform >= v35.0.0

  • An App Host or an Integration Server:

    • To setup up an App Host see: ibm.biz/res-app-host-setup

    • An Integration Server running resilient_circuits>=30.0.0 (if using an Integration Server)

      • To set up an Integration Server see: ibm.biz/res-int-server-guide

      • If using an API key account, minimum required permissions are:

        Name

        Permissions

        Org Data

        Read

        Incident

        Create, Read All

        Function

        Read

  • Proxy supported: No (OpenDXL does not support proxy in on-prem installations)


Install


App Configuration

The following table describes the settings you need to configure in the app.config file. If using App Host, see the Resilient System Administrator Guide. If using the integration server, see the Integration Server Guide.

Config

Required

Example

Description

dxlclient_config

Yes

/home/integration/.resilient/fn_mcafee_opendxl/dxlclient.config

Path to the dxlclient.config file

topic_listener_on

Yes

False

Boolean to turn ON/OFF Listener

custom_template_dir

No

``

Path to custom jinja template


In addition to updating the app.config file and before running the McAfee OpenDXL functions, the dxlclient.config, certificates and key files must be created using a provisioning command. More information on the dxlclient.config file and provisioning the system can be found here:

https://opendxl.github.io/opendxl-client-python/pydoc/provisioningoverview.html https://opendxl.github.io/opendxl-client-python/pydoc/basiccliprovisioning.html#basiccliprovisioning

Here is an example of the dxlclient CLI provisioning command:

python -m dxlclient -vv provisionconfig /home/integration/.resilient/fn_mcafee_opendxl X.X.X.X client1 -u admin -p password

In this example, X.X.X.X is the IP address of the McAfee ePO server or OpenDXL Broker.

The generated files are created in the /home/integration/.resilient/fn_mcafee_tie directory.

If installing the app on an integration server, set the dxlclient_config app.config parameter to the location of the created dxlclient.config file.

  [fn_mcafee_opendxl]
   dxlclient_config=/home/integration/.resilient/fn_mcafee_opendxl/dxlclient.config

If installing the app directly to the Resilient platform (App Host environment), you need to use the New File button to create each file that was created by the provisioning command. As you create each file, copy the contents of the file into your new file. Make sure to enter /etc/rescircuits/fn_mcafee_opendxl as the File Path. See the Resilient Platform System Administrator Guide for the detailed procedure.


Function - McAfee Publish to DXL

A function which takes 4 inputs:

mcafee_topic_name: String of the topic name. ie: /mcafee/service/epo/remote/epo1. mcafee_dxl_payload: The text of the payload to publish to the topic. mcafee_publish_method: Specify whether to publish an event or invoke a service. mcafee_wait_for_response: Specify whether or not to wait for the response. Uses synchronous/asynchronous service.

The function will send the provided message to the provided topic.

screenshot: fn-mcafee-publish-to-dxl

Inputs:

Name

Type

Required

Example

Tooltip

mcafee_dxl_payload

text

Yes

-

The text of the payload to publish to the topic

mcafee_publish_method

select

Yes

-

Specify whether to publish an event or invoke a service

mcafee_topic_name

text

Yes

-

String of the topic name. ie: /mcafee/service/epo/remote/epo1

mcafee_wait_for_response

select

No

-

Specify whether or not to wait for the response. Uses synchronous/asynchronous service

Outputs:

results = {
    {'version': '1.0',
     'success': True,
     'reason': None,
     'content': {'mcafee_topic_name': '/mcafee/service/epo/remote/epo1',
                 'mcafee_dxl_payload': '{"command": "system.applyTag",
                                         "output": "json",
                                         "params": {"names": "10.0.2.15", "tagName": "Shut Down"}}',
                 'mcafee_publish_method': 'Service',
                 'mcafee_wait_for_response': 'Yes',
                 'response': {'_version': '2',
                              '_message_id': '{eb976a7f-2051-43f7-bd13-0205630385a7}',
                              '_source_client_id': '',
                              '_source_broker_id': '',
                              '_destination_topic': '',
                              '_payload': '',
                              '_broker_ids': [],
                              '_client_ids': [],
                              '_other_fields': {},
                              '_source_tenant_guid': '',
                              '_destination_tenant_guids': [],
                              '_request': None,
                              '_request_message_id': None,
                              '_service_id': ''}},
        'raw': '{"mcafee_topic_name": "/mcafee/service/epo/remote/epo1", "mcafee_dxl_payload": "{\\"command\\": \\"system.applyTag\\", \\"output\\": \\"json\\", \\"params\\":       {\\"names\\": \\"10.0.2.15\\", \\"tagName\\": \\"Shut Down\\"}}", "mcafee_publish_method": "Service", "mcafee_wait_for_response": "Yes", "response": {"_version": "2", "_message_id": "{eb976a7f-2051-43f7-bd13-0205630385a7}", "_source_client_id": "", "_source_broker_id": "", "_destination_topic": "", "_payload": "", "_broker_ids": [], "_client_ids": [], "_other_fields": {}, "_source_tenant_guid": "", "_destination_tenant_guids": [], "_request": null, "_request_message_id": null, "_service_id": ""}}',

        'inputs': {'mcafee_publish_method': {'id': 305, 'name': 'Service'},
                   'mcafee_topic_name': '/mcafee/service/epo/remote/epo1',
                   'mcafee_dxl_payload': '{"command": "system.applyTag", "output": "json", "params": {"names": "10.0.2.15", "tagName": "Shut Down"}}',
                   'mcafee_wait_for_response': {'id': 302, 'name': 'Yes'}},

        'metrics': {'version': '1.0',
                    'package': 'fn-mcafee-opendxl',
                    'package_version': '1.2.0',
                    'host': 'MacBook-Pro.local',
                    'execution_time_ms': 2534,
                    'timestamp': '2020-10-20 17:34:14'},
        'mcafee_topic_name': '/mcafee/service/epo/remote/epo1',
        'mcafee_dxl_payload': '{"command": "system.applyTag", "output": "json", "params": {"names": "10.0.2.15", "tagName": "Shut Down"}}',
        'mcafee_publish_method': 'Service',
        'mcafee_wait_for_response': 'Yes'}
}

Example Pre-Process Script:

# Replaces trust level string with acceptable value to publish to topic

inputs.mcafee_dxl_payload = inputs.mcafee_dxl_payload.replace("\"Known Malicious\"", "1")

inputs.mcafee_dxl_payload = inputs.mcafee_dxl_payload.replace("\"Most Likely Malicious\"", "15")

inputs.mcafee_dxl_payload = inputs.mcafee_dxl_payload.replace("\"Might Be Malicious\"", "30")

Example Post-Process Script:

"""
Response returned provides the input values in the following format
{
  "mcafee_topic_name": "<topic_name>",
  "mcafee_dxl_payload": "<payload>",
  "mcafee_publish_method": "<method>",
  "mcafee_wait_for_response": "<wait for response>"
"""

trust_level = ""

content = results.get("content")

if content.get("mcafee_dxl_payload").find("30") > 0:
  trust_level = "Might Be Malicious"

elif content.get("mcafee_dxl_payload").find("15") > 0:
  trust_level = "Most Likely Malicious"

elif content.get("mcafee_dxl_payload").find("1") > 0:
  trust_level = "Known Malicious"



text = """The following was published to DXL:<br>
<b>Payload:</b> {}<br>
<b>Topic:</b> {}<br>
<b>Method:</b> {}<br>

Setting Trust Level to {}
""".format(content.get("mcafee_dxl_payload"), content.get("mcafee_topic_name"), content.get("mcafee_publish_method"), trust_level)

noteText = helper.createRichText(text)
incident.addNote(noteText)


Rules

Rule Name

Object

Workflow Triggered

(Example) McAfee Publish to DXL (Set TIE Reputation Known Malicious)

incident

example_mcafee_publish_to_dxl_set_tie_reputation

(Example) McAfee Publish to DXL (Tag System Shut Down)

incident

example_mcafee_publish_to_dxl_tag_system


DXL Subscriber

The DXL subscriber is designed using Resilient Circuits but does not rely on the functions capabilities. The subscriber connects to the Data Exchange Layer and listens on the topic specified topic(s). When a message is sent to the topic, the integration uses a mapping template to map the data into a Resilient incident DTO and create incidents and artifacts within the Resilient platform.

To use the DXL Subscriber, set the topic_listener_on configuration parameter to True.

When you run Resilient Circuits, the subscriber listens on the default topic, /mcafee/event/epo/threat/response, and uses the default provided jinja template to map incident and artifact data into the Resilient Platform.


Troubleshooting & Support

If using the app with an App Host, see the Resilient System Administrator Guide and the App Host Deployment Guide for troubleshooting procedures. You can find these guides on the IBM Knowledge Center, where you can select which version of the Resilient platform you are using.

If using the app with an integration server, see the Integration Server Guide

For Support

This is an IBM Supported app. Please search https://ibm.com/mysupport for assistance.