Ingest Tenable vulnerability findings, scan events, and audit logs

Latest Dynatrace Preview

Tenable provides robust solutions for identifying, prioritizing, and addressing vulnerabilities, which are crucial for reducing cyber risks and securing digital infrastructure. Integrating Tenable findings into Dynatrace can enhance your overall security posture by ensuring comprehensive visibility and streamlined vulnerability management.

How it works

how tenable integration works

Dynatrace integration with Tenable is an extension running on Dynatrace ActiveGate. Once you enable and configure the Dynatrace Tenable extension

  1. It periodically reaches out to Tenable products and fetches the new findings, scans, and audit logs from the Tenable APIs.

  2. The fetched data is ingested into Dynatrace and mapped to the Dynatrace semantic conventions.

  3. Data is stored in a bucket called default_security_custom_events (for details, see: Built-in Grail buckets).

Prerequisites

Supported Tenable products

Tenable requirements

Dynatrace requirements

Get started

  1. In Dynatrace, search for Tenable and select Install.

  2. Follow the on-screen instructions to configure the extension.

  3. Verify configuration by running the following queries in Notebooks:

    • For vulnerabilities and asset scans:

      fetch events
      | filter dt.system.bucket=="default_security_custom_events"
      | filter event.kind == "SECURITY_EVENT"
      | filter event.provider == "Tenable"
    • For audit logs:

      fetch logs
      | filter log.source == "Tenable"
  4. Once the extension is installed and working, you can access and manage it in Dynatrace via the Extensions app Extensions. For details, see Extensions 2.0 concepts.

Now you can visualize findings, analyze audit logs and automate notifications.

Visualize

  1. Download our sample dashboard.

  2. Open Dashboards, select Import Upload, then select the downloaded file.

  3. In the Product filter, select Tenable to view data reported by Tenable, such as critical vulnerabilities and affected objects.

    filter for tenable product

Example result:

tenable filtered dashboard

Analyze

Open Notebooks Notebooks or Security Investigator SI Logo to query ingested data, using the data format in Semantic Dictionary.

For examples of how you can build your queries, see below.

Query for logs over time by action

fetch logs
| filter log.source == "Tenable"
| makeTimeseries logs=countDistinctExact(id), by:{audit.action}, time:{toTimestamp(received)}, interval:{3h}

Example result:

Logs over time by action

Query for vulnerability distribution by risk level

fetch events
| filter dt.system.bucket=="default_security_custom_events"
| filter event.kind == "SECURITY_EVENT" and event.type == "VULNERABILITY_FINDING"
| filter event.provider == "Tenable"
| dedup {object.id, vulnerability.id}, sort:{timestamp}
| summarize Vulnerabilities=countDistinctExact(vulnerability.id), by:{dt.security.risk.level}
| fieldsAdd order=if(dt.security.risk.level=="CRITICAL", 1, else:
if(dt.security.risk.level=="HIGH", 2, else:
if(dt.security.risk.level=="MEDIUM", 3, else:
if(dt.security.risk.level=="LOW", 4, else:5))))
| sort order asc

Example result:

Vulnerability distribution by risk level

Query for top 10 scans with the most host coverage

fetch events
| filter dt.system.bucket=="default_security_custom_events"
| filter event.kind == "SECURITY_EVENT" and event.type == "VULNERABILITY_SCAN"
| filter event.provider == "Tenable"
| dedup {object.id, scan.id}
| summarize Hosts=countDistinctExact(object.id), by:{scan.name}
| sort Hosts desc
| limit 10

Example result:

Query for top 10 scans with the most host coverage

Automate notifications

  1. Download our sample workflow for Jira or sample workflow for Slack.
  2. Open Workflows, select Import Upload, then select the downloaded file.
  3. Adjust the workflow to your needs to create notifications for critical Tenable findings.

Consumption

For billing information, see Events powered by Grail.

FAQ

Why does my configuration show an error?

Error message: Failed to assign monitoring configuration to ActiveGate. Reason: Extension com.dynatrace.extension.tenable(<version-number>) not available in cache yet (queued for download)

If your configuration shows the error message above, it simply means that ActiveGate is still downloading the extension for the cluster. The status should change after a few minutes.

Why do I see duplicate events?

Duplicate events in the Tenable extension are likely due to the first ingest running multiple times. When a monitoring configuration is assigned to an ActiveGate, the first execution will run an export for a longer timeframe (configurable in the monitoring configuration settings). Anytime the extension is restarted (due to an update, ActiveGate reset, failover, and so on), the first ingest will run again.

You can run a DQL query and dedup the events using the object.id, scan.id, and finding.id fields.

  • For VULNERABILITY_FINDING, the unique ID is {object.id, finding.id}.
  • For VULNERABILITY_SCAN, the unique ID is {object.id, scan.id}.

Example:

fetch events
| filter dt.system.bucket=="default_security_custom_events"
| filter event.kind == "SECURITY_EVENT" and event.type == "VULNERABILITY_FINDING"
| filter event.provider == "Tenable"
| dedup {object.id, finding.id}, sort:{timestamp}

Why do some scan events have the same start and end times?

When fetching vulnerabilities, the Tenable extension attempts to match the data with recent scan executions. If the scan mentioned in the Tenable vulnerability can't be found (for example, due to missing permissions), the extension creates a scan event based on this finding. These scan events have the same start and end times as when the vulnerability was found.

Why isn't my data ingested?

If you installed and configured the extension, but data isn’t being ingested, follow the steps below.

  1. Open the extension and go to Health to check the status of the monitoring configuration.

  2. If the status isn’t OK, scroll down to Logs and select Run query to see the error information.

  3. If the error information isn’t enough, or the status shows OK but you're still not getting data, extract a support archive from ActiveGate to troubleshoot further.

    1. Find the ActiveGate ID for the ActiveGate running the configuration and extract a support archive. For details, see ActiveGate diagnostics: Collect and review locally.
    2. Unzip the support archive and find the extension log file at COLLECTOR/<id>/remotepluginmodule/log/extensions/datasources/com.dynatrace.extension.tenable/python3.log.
  4. If the information there is still not sufficient for troubleshooting, enable the Debug logs flag in the monitoring configuration and contact Dynatrace Support.

Common causes for missed data ingest include:

  • No connectivity between the ActiveGate and Tenable cloud

    Suggestion: Attempt to curl the Tenable cloud URL from the ActiveGate to ensure connectivity is working.

  • Wrong access and/or secret key

    Suggestion: Double-check the credentials configured on the monitoring configuration.

  • Missing permissions on the API user

    Suggestion: Ensure that the user provided can call the View activity log API.