Skip to main content

TAXII2 Server

This Integration is part of the TAXII Server Pack.#

Supported versions

Supported Cortex XSOAR versions: 6.1.0 and later.

TAXII2 Server Integration#

This integration provides TAXII2 Services for system indicators (outbound feed). You can choose to use TAXII v2.0 or TAXII v2.1.

Configure Collections#

Each TAXII collection in the integration is represented by a Cortex XSOAR indicator query.

The collections are defined by a JSON object in the following format:

{
"collection1_name":{
"query": "<Cortex XSOAR indicator query>",
"description": "<Custom collection description>"
},
"collection2_name": "<Cortex XSOAR indicator query>"
}

You can add a collection description as is done in collection1_name, or enter only a collection query, as in collection2_name.

How to Access the TAXII2 Server#

Use one of the following options:

  • https://demisto_address/instance/execute/instance_name/{taxii2_api_endpoint}/
  • http://demisto_address:listen_port/{taxii2_api_endpoint}/

Access the TAXII Service by Instance Name#

To access the TAXII service by instance name, make sure Instance execute external is enabled.

  1. In Cortex XSOAR, go to Settings > About > Troubleshooting.
  2. In the Server Configuration section, verify that the instance.execute.external key is set to true. If this key does not exist, click + Add Server Configuration, add the instance.execute.external and set the value to true.

How to use HTTPS#

To use HTTPS, a certificate and private key have to be supplied in the integration configuration.

How to use authentication#

The integration allows the use of basic authentication in the requests. To enable basic authentication, a user and password must be supplied in the Credentials parameters in the integration configuration.

The server will then authenticate the requests by the Authorization header, expecting basic authentication encrypted in base64 to match the given credentials.

TAXII v2.0 API Enpoints#

URLMethodResponseTAXII2 Documentation
/taxii/GETServer Discovery Information.Server Discovery
/{api_root}/GETCortex XSOAR API root is threatintel.API Root Information
/{api_root}/collections/GETAll Cortex XSOAR collections that configure in Collection JSON parameter.Collections Resource
/{api_root}/collections/{collection_id}/GETCortex XSOAR Collection with given collection_id.Collection Response
/{api_root}/collections/{collection_id}/manifest/GETObject manifests from the given collection.Objects Manifest Resource
/{api_root}/collections/{collection_id}/objects/GETObjects (Cortex XSOAR Indicators) from the given collection.Object Resource

For more information, visit TAXII2 Documentation.

TAXII v2.1 API Enpoints#

URLMethodResponseTAXII2 Documentation
/taxii2/GETServer Discovery Information.Server Discovery
/{api_root}/GETXSOAR API root is threatintel.API Root Information
/{api_root}/collections/GETAll Cortex XSOAR collections that configure in Collection JSON parameter.Collections Resource
/{api_root}/collections/{collection_id}/GETCortex XSOAR Collection with given collection_id.Collection Response
/{api_root}/collections/{collection_id}/manifest/GETObject manifests from the given collection.Objects Manifest Resource
/{api_root}/collections/{collection_id}/objects/GETObjects (Cortex XSOAR Indicators) from the given collection.Object Resource

For more information, visit TAXII2 Documentation.

Known limitations#

  • GET objects by ID is not allowed.
  • Filtering objects by ID or version not allowed.
  • POST and DELETE objects are not allowed. Cannot add or delete indicators using TAXII2 Server.

How UUIDs work in TAXII2 XSOAR#


STIX Cyber Objects (SCO)#

All STIX SCOs UUIDs follow STIX 2.1 guidelines and use UUID5 with STIX unique namespace (00abedb4-aa42-466c-9c01-fed23315a9b7). This is used so all SCOs created have persistent UUID across all producers.

STIX Domain Objects (SDO)#

Unlike SCOs, STIX 2.1 specs for SDOs require a UUID4. While this solution works if the UUID is part of the database, it is not the case in Cortex XSOAR. If the SDO already has a unique UUID stored it will use it, if not it will generate a unique and persistent UUID using the following method.

A general UUID5 is created using the NameSpace_URL as follows:

PAWN_UUID = uuid.uuid5(uuid.NAMESPACE_URL, 'https://www.paloaltonetworks.com')

The generated UUID is then used to create a unique UUID5 per customer:

UNIQUE_UUID = uuid.uuid5(PAWN_UUID, <UniqueCostumerString>)

We then use this UUID as a base namespace to generate UUIDs for SDOs following the STIX 2.1 specs. Using this method, we create unique and persistent UUIDs per customer.

Cortex XSOAR TIM Extension Fields#


When selected in the integration settings (Cortex XSOAR Extension Fields) the TAXII2 integration will generate an extension object and an extension attribute that holds Cortex XSOAR additional TIM fields (system generated and custom). An example of these two related objects:

{
"id": "extension-definition--<UUID>",
"type": "extension-definition",
"spec_version": "2.1",
"name": "XSOAR TIM <Cortex XSOAR Type>",
"description": "This schema adds TIM data to the object",
"created": "<creation date>",
"modified": "<modification date>",
"created_by_ref": "identity--<UUID of creator>",
"schema": "https://github.com/demisto/content/blob/4265bd5c71913cd9d9ed47d9c37d0d4d3141c3eb/Packs/TAXIIServer/doc_files/XSOAR_indicator_schema.json",
"version": "1.0",
"extension_types": ["property-extension"]
},
{
"type": "ipv4-addr",
"spec_version": "2.1",
"id": "ipv4-addr--2f689bf9-0ff2-545f-aa61-e495eb8cecc7",
"value": "8.8.8.8",
"extensions":{
"extension-definition--<UUID>": {
"Extension_type": "property_extension",
"Field_1": "Value1",
"Field_2": "Value2",
"Field_3": "Value3"
}
}
}

Performance Benchmark#

Indicators AmountRequest time (seconds)
10,0005-10
50,00030-40
100,00050-90

Configuration Guide#

Microsoft Sentinel#

Configure the TAXII2 Server instance#

  1. Set TAXII2 Server version to 2.0 (The integration currently doesn't work with Microsoft Sentinel in TAXII Version 2.1).

  2. Under STIX types for STIX indicator Domain Object select the indicator types you want to ingest.

  3. Set the Listen Port and Collection JSON to your linking.

Find the information required for the Sentinel TAXII connector#

  1. All your server info can be found by running !taxii-server-info, the default API root for you server will usually be - https://<xsoar-server>/instance/execute/<instance_name>/threatintel/

  2. You can use the !taxii-server-list-collections command in order to get a list of your server's collections and their ids. You can also do it manually by running curl https://<xsoar-server>/instance/execute/<instance_name>/threatintel/collections/ | jq . to get a list of the collections available and on your TAXII server. From the list, copy the correct ID of the collection you want to ingest.

    Response Example:

    {
    "collections": [
    {
    "can_read": true,
    "can_write": false,
    "description": "",
    "id": "3709e6df-bbe1-5ece-b683-e99a42f31fce",
    "media_types": [
    "application/vnd.oasis.stix+json; version=2.0"
    ],
    "query": "type:IP",
    "title": "AllIPs"
    },
    {
    "can_read": true,
    "can_write": false,
    "description": "",
    "id": "16763019-5ee6-59bc-b4d9-be586235b308",
    "media_types": [
    "application/vnd.oasis.stix+json; version=2.0"
    ],
    "query": "type:File",
    "title": "AllHashes"
    }
    ]
    }

Set up the Microsoft Sentinel TAXII connector#

Now that we have the API root URL and the collection ID we can configure the Threat intelligence - TAXII Connector in Microsoft Sentinel.

Paste your API root URL in the field marked API Root URL and the desired collection ID we got in step (2) under Collection ID.

Example: Microsoft Sentinel TI Configuration

Commands#

You can execute these commands from the Cortex XSOAR 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.

taxii-server-list-collections#


Returns all the collections.

Base Command#

taxii-server-list-collections

Input#

There are no input arguments for this command.

Context Output#

PathTypeDescription
TAXIIServer.Collection.idStringThe collection ID.
TAXIIServer.Collection.queryStringThe collection query.
TAXIIServer.Collection.titleStringThe collection title.
TAXIIServer.Collection.descriptionStringThe collection description.

Command example#

!taxii-server-list-collections

Context Example#

{
"TAXIIServer": {
"Collection": {
"can_read": true,
"can_write": false,
"description": "",
"id": "2eb7bfae-7739-5863-9b00-1681309c3d8c",
"media_types": [
"application/stix+json;version=2.1"
],
"query": "",
"title": "ALL"
}
}
}

Human Readable Output#

Collections#

idtitlequerydescription
2eb7bfae-7739-5863-9b00-1681309c3d8cALL

taxii-server-info#


Returns the TAXII server info, default URL, title, etc.

Base Command#

taxii-server-info

Input#

There are no input arguments for this command.

Context Output#

PathTypeDescription
TAXIIServer.ServerInfo.titleStringThe server title
TAXIIServer.ServerInfo.api_rootsUnknownThe server API roots URLs.
TAXIIServer.ServerInfo.defaultStringThe default URL.
TAXIIServer.ServerInfo.descriptionStringThe server description

Command example#

!taxii-server-info

Context Example#

{
"TAXIIServer": {
"ServerInfo": {
"api_roots": [
"https://foo.cooo.com/inc/threatintel/"
],
"default": "https://foo.cooo.com/inc/threatintel/",
"description": "This integration provides TAXII Services for system indicators (Outbound feed).",
"title": "Cortex XSOAR TAXII2 Server"
}
}
}

Human Readable Output#

In case the default URL is incorrect, you can override it by setting the "TAXII2 Service URL Address" field in the integration configuration

Server Info#

api_rootsdefaultdescriptiontitle
https://foo.cooo.com/inc/threatintel/https://foo.cooo.com/inc/threatintel/This integration provides TAXII Services for system indicators (Outbound feed).Cortex XSOAR TAXII2 Server