ServiceNow alerts for Vulnerability Response
Table of Contents
Expand all | Collapse all
-
- Getting started
- System Requirements
- Cluster Context
-
- Prisma Cloud Container Images
- Kubernetes
- Deploy the Prisma Cloud Console on Amazon ECS
- Console on Fargate
- Onebox
- Alibaba Cloud Container Service for Kubernetes (ACK)
- Azure Container Service (ACS) with Kubernetes
- Azure Kubernetes Service (AKS)
- Amazon Elastic Kubernetes Service (EKS)
- IBM Kubernetes Service (IKS)
- OpenShift v4
-
- Defender Types
- Manage your Defenders
- Redeploy Defenders
- Uninstall Defenders
-
- Deploy Orchestrator Defenders on Amazon ECS
- Automatically Install Container Defender in a Cluster
- Deploy Prisma Cloud Defender from the GCP Marketplace
- Deploy Defenders as DaemonSets
- VMware Tanzu Application Service (TAS) Defender
- Deploy Defender on Google Kubernetes Engine (GKE)
- Google Kubernetes Engine (GKE) Autopilot
- Deploy Defender on OpenShift v4
-
- Agentless Scanning Modes
-
- Onboard AWS Accounts for Agentless Scanning
- Onboard Azure Accounts for Agentless Scanning
- Configure Agentless Scanning for Azure
- Onboard GCP Accounts for Agentless Scanning
- Configure Agentless Scanning for GCP
- Onboard Oracle Cloud Infrastructure (OCI) Accounts for Agentless Scanning
- Configure Agentless Scanning for Oracle Cloud Infrastructure (OCI)
- Agentless Scanning Results
-
- Rule ordering and pattern matching
- Backup and restore
- Custom feeds
- Configuring Prisma Cloud proxy settings
- Prisma Cloud Compute certificates
- Configure scanning
- User certificate validity period
- Enable HTTP access to Console
- Set different paths for Defender and Console (with DaemonSets)
- Authenticate to Console with Certificates
- Configure custom certs from a predefined directory
- Customize terminal output
- Collections
- Tags
- Logon settings
- Reconfigure Prisma Cloud
- Subject Alternative Names
- WildFire Settings
- Log Scrubbing
- Clustered-DB
- Permissions by feature
-
- Logging into Prisma Cloud
- Integrating with an IdP
- Integrate with Active Directory
- Integrate with OpenLDAP
- Integrate Prisma Cloud with Open ID Connect
- Integrate with Okta via SAML 2.0 federation
- Integrate Google G Suite via SAML 2.0 federation
- Integrate with Azure Active Directory via SAML 2.0 federation
- Integrate with PingFederate via SAML 2.0 federation
- Integrate with Windows Server 2016 & 2012r2 Active Directory Federation Services (ADFS) via SAML 2.0 federation
- Integrate Prisma Cloud with GitHub
- Integrate Prisma Cloud with OpenShift
- Non-default UPN suffixes
- Compute user roles
- Assign roles
-
- Prisma Cloud Vulnerability Feed
- Scanning Procedure
- Vulnerability Management Policies
- Vulnerability Scan Reports
- Scan Images for Custom Vulnerabilities
- Base images
- Vulnerability Explorer
- CVSS scoring
- CVE Viewer
-
- Configure Registry Scans
- Scan images in Alibaba Cloud Container Registry
- Scan images in Amazon Elastic Container Registry (ECR)
- Scan images in Azure Container Registry (ACR)
- Scan images in Docker Registry v2 (including Docker Hub)
- Scan Images in GitLab Container Registry
- Scan images in Google Artifact Registry
- Scan images in Google Container Registry (GCR)
- Scan images in Harbor Registry
- Scan images in IBM Cloud Container Registry
- Scan Images in JFrog Artifactory Docker Registry
- Scan Images in Sonatype Nexus Registry
- Scan images in OpenShift integrated Docker registry
- Scan Images in CoreOS Quay Registry
- Trigger registry scans with Webhooks
- Configure VM image scanning
- Configure code repository scanning
- Malware scanning
- Windows container image scanning
- Serverless Functions Scanning
- VMware Tanzu Blobstore Scanning
- Scan App-Embedded workloads
- Troubleshoot Vulnerability Detection
-
- Compliance Explorer
- Enforce compliance checks
- CIS Benchmarks
- Prisma Cloud Labs compliance checks
- Serverless functions compliance checks
- Windows compliance checks
- DISA STIG compliance checks
- Custom compliance checks
- Trusted images
- Host scanning
- VM image scanning
- App-Embedded scanning
- Detect secrets
- OSS license management
-
- Alert mechanism
- AWS Security Hub
- Cortex XDR alerts
- Cortex XSOAR alerts
- Email alerts
- Google Cloud Pub/Sub
- Google Cloud Security Command Center
- IBM Cloud Security Advisor
- JIRA Alerts
- PagerDuty alerts
- ServiceNow alerts for Security Incident Response
- ServiceNow alerts for Vulnerability Response
- Slack Alerts
- Splunk Alerts
- Webhook alerts
- API
ServiceNow alerts for Vulnerability Response
ServiceNow is a workflow management platform.
It offers a number of security operations applications.
You can configure Prisma Cloud to route alerts to ServiceNow’s Vulnerability Response application.
To integrate Prisma Cloud with ServiceNow, you’ll need to create a ServiceNow endpoint to consume findings from the Prisma Cloud scanner.
The endpoint is created using ServiceNow’s Scripted REST API mechanism.
Each vulnerability found by the Prisma Cloud scanner is mapped to a ServiceNow vulnerable item.
Scanner data is mapped to vulnerable items as follows:
Vulnerable items contain all CVEs reported by the Prisma Cloud scanner only if the corresponding CVEs also exist in ServiceNow’s vuln DB.
If a CVE doesn’t exist in ServiceNow, the
Vulnerability (Reference)
field won’t list it.ServiceNow vulnerability item field | Field description | Prisma Cloud scanner data |
---|---|---|
Source | The scanner that found this vulnerable item. | Prisma Cloud Compute |
Vulnerability (Reference) | ID of the vulnerability associated with this vulnerable item. | Reference to CVE ID (if exists in ServiceNow’s vulnerabilities DB) |
State | This field defaults to Open, but you can change it to Under Investigation if the vulnerability is ready for immediate remediation. | Open (automatically set by ServiceNow) |
Assignment group | Group selected to work on this vulnerability group. | Assignment group set in the alert profile |
Assigned to | Individual from the selected assignment group that works on this vulnerability. | Assignee set in the alert profile |
Created | The date this vulnerable item was created in your instance. | Creation date of the vulnerable item (automatically set by ServiceNow) |
Additional comments | Any relevant information. | Vulnerabilities:
|
Configuring ServiceNow
Create a ServiceNow endpoint to collect findings from the Prisma Cloud scanner.
Prerequisites:
Prisma Cloud Console is running.- In ServiceNow, create a Scripted REST API. Name itPrisma Vulnerabilities Report.For more information, see the official documentation here.
- Create a new resource in your scripted REST service.
- InName, enterreport_findings.
- InHTTP method, selectPOST.
- Download the script that implements the endpoint from Prisma Cloud Console.
- Log into Prisma Cloud Console.
- Go toManage > Alerts > Add Profile.
- ClickAdd Profile.
- InProvider, selectServiceNow.
- InApplication, selectVulnerability Response.
- InScripted REST API, clickCopy.
- In ServiceNow, paste the script intoScript.
- ClickSubmitto create the resource.
- Construct the URL for your resource (endpoint), then copy it, and set it aside. You’ll need when you configure Prisma Cloud to send findings to ServiceNow.The format for the base URL is: https://<SERVICENOW>/<BASE_API_PATH>Where:
- SERVICENOW — URL for your ServiceNow instance.
- BASE_API_PATH — Path to the scripted API service you just created.
Configuring alert frequency
You can configure the rate at which alerts are emitted.
This is a global setting that controls the spamminess of the alert service.
Alerts received during the specified period are aggregated into a single alert.
For each alert profile, an alert is sent as soon as the first matching event is received.
All subsequent alerts are sent once per period.
- Open Console, and go toManage > Alerts.
- InGeneral settings, select the default frequency for all alerts.You can specifySecond,Minute,Hour,Day.
Sending findings to ServiceNow
Alert profiles specify which events trigger the alert machinery, and to which channel alerts are sent.
You can send alerts to any combination of channels by creating multiple alert profiles.
Alert profiles consist of two parts:
(1) Alert settings — Who should get the alerts, and on what channel?
Configure Prisma Cloud to integrate with ServiceNow and specify the people or places where alerts should be sent.
You can specify assignees and assignment groups.(2) Alert triggers — Which events should trigger an alert to be sent?
Specify which of the rules that make up your overall policy should trigger alerts.
For the Vulnerability Response application, you can send vulnerability and compliance alerts only.
Create new alert profile
Create a new alert profile.
- InManage > Alerts, clickAdd profile.
- Enter a name for your alert profile.
- InProvider, selectServiceNow.
Configure the channel
Configure Prisma Cloud to send alerts to ServiceNow, then validate the setup by sending a test alert.
Prerequisites:
You’ve created a service account in ServiceNow with a base role of web_service_admin.- InApplication, selectVulnerability Response.
- InScripted API URL, enter the url of the vulnerabilities reporting api defined in ServiceNow (see ServiceNow config above). e.g. https://ven03718.service-now.com/api/paan/prisma_vulnerabilities_report
- InCredential, clickAdd New.
- InType, selectBasic authentication.This is currently the only auth method supported.
- Enter a username and password.
- (Optional) InAssignee, enter the name of a user in ServiceNow that will be assigned the Vulnerable Items.The assignee name isn’t case-sensitive.
- (Optional) InAssignment Group, enter the name of a group in ServiceNow that will be assigned the Vulnerable Items.
- (Optional) InCA certificate, enter a CA certificate in PEM format. Relevant only for on-premises deployments of ServiceNow.
- ClickSend Test Alert. If everything looks good, and you get an alert in ServiceNow, save the profile.
Configure the triggers
- InSelect triggers, select the events that should trigger an alert to be sent.
- To specify specific rules that should trigger an alert, deselectAll rules, and then select any individual rules.
- ClickNext.
Map Vulnerable Items to Configuration Items (optional)
Adjust your Scripted REST API to map each vulnerable item to its configuration item (CI) in ServiceNow’s CMDB.
- Create a Discovery Source in ServiceNow for Prisma Cloud Compute:
- Navigate toSystem Definition > Fix Script.
- ClickNew.
- Name your Fix Script appropriately.
- EnsureRun onceis selected .
- Execute the following code with the appropriate value for your Discovery Source name: “SG-PrismaCloudCompute”.Source var dsUtil = new global.CMDBDataSourceUtil(); dsUtil.addDataSource("SG-PrismaCloudCompute");Your fix script should look like this:Ensure your discovery source has fewer than 40 characters.After you have saved your fix script, navigate to it again and clickRun Fix Script.
- Create an Identification Rule in ServiceNow:
- Navigate toConfiguration > CI Class Manager.
- In the CI Classes hierarchy, chooseDocker Image.
- Navigate toClass Info > Identification Rule.
- Add an identification rule to identify the image by theImage idattribute.
- Use the enhanced script in place of the standard script you copy from Console when setting up the Scripted REST API.
Suggested script
The following script maps vulnerable items to configuration items.
Use it in place of the script you copy from Console when setting up the Scripted REST API in Configuring ServiceNow.
To use the script, you must first set up a discovery source and identification rule.
The script in this section extends the standard script to:
- Implement CI mapping — Finds the relevant CI (from type docker image), or creates one if it doesn’t exist, and references it in the Vulnerable Item.
- Create a vulnerability placeholder — Creates an empty vulnerability in ServiceNow’s vulnerabilities DB when the CVE ID sent by Prisma Cloud Compute can’t be found in ServiceNow.
The following listing shows the script in its entirety.
Copy and use this listing when setting up the vulnerable item to configuration item mapping.
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { var vulnerabilities = request.body.data.vulnerabilities; response.setContentType('application/JSON'); var writer = response.getStreamWriter(); for (var i in vulnerabilities) { var vulnItemRecord = new GlideRecord('sn_vul_vulnerable_item'); var vulnEntryRecord = new GlideRecord('sn_vul_entry'); var userGroupsRecord = new GlideRecord('sys_user_group'); var vulnerability = vulnerabilities[i]; // the id field is the name (a string) of the cve if (!vulnEntryRecord.get('id', vulnerability.cve)) { // The following code inserts the placeholder vulnerability in sn_vul_nvd_entry. The other attributes will be filled once the NVD import run's var nvd_entry = new GlideRecord("sn_vul_nvd_entry"); nvd_entry.initialize(); nvd_entry.setValue("id", vulnerability.cve); var vulEntry = nvd_entry.insert(); vulnEntryRecord = new GlideRecord('sn_vul_entry'); vulnEntryRecord.get(vulEntry); } if (!userGroupsRecord.get('name', vulnerability.assignment_group)) { userGroupsRecord.sys_id = ""; } vulnItemRecord.initialize(); // The following block of code is to create a CI using IRE if (vulnerability.imageName && vulnerability.imageID) { // Step 1: construct the payload // Step 2: Encode the payload as JSON // Step 3: create CI using createOrUpdateCIEnhanced API. This API requires discovery source that needs to be created var payload = { "items": [{ "className": "cmdb_ci_docker_image", // update the cmdb unmatched class name here "values": { "image_id": vulnerability.imageID, // update the correct values that needs to be populated and any additional fields "name": vulnerability.imageName }, "sys_object_source_info": { // optional, used to optimize the fetch to get CIs from this specific source only "source_native_key": vulnerability.imageID, // unique key/id for the item from the source "source_name": "SG-PrismaCloudCompute" // The discovery source of the CI information } }] }; var inputPayload = new JSON().encode(payload); var cmdb = SNC.IdentificationEngineScriptableApi.createOrUpdateCI("SG-PrismaCloudCompute",inputPayload); // CMDB discovery source name var output = JSON.parse(cmdb); vulnItemRecord.cmdb_ci.setDisplayValue(output.items[0].sysId); // This will assign CMDB_ci item to vuln item. } else if (vulnerability.imageName != "Prisma Test Alert") { gs.log("missing image name or image id"); } vulnItemRecord.Description = vulnerability.description; vulnItemRecord.assigned_to = vulnerability.assigned_to; // sys_id is the unique id of a record (like an internal service now GUID), used to link records in different tables vulnItemRecord.assignment_group.setDisplayValue(userGroupsRecord.sys_id); vulnItemRecord.source = vulnerability.source; vulnItemRecord.vulnerability.setDisplayValue(vulnEntryRecord.sys_id); vulnItemRecord.comments.setJournalEntry(vulnerability.comments); vulnItemRecord.insert(); vulnItemRecord.query(); writer.writeString(JSON.stringify(vulnItemRecord)); } response.setStatus(201); })(request, response);
The following excerpt shows the part of the listing that implements the CI mapping:
// The following block of code is to create a CI using IRE if (vulnerability.imageName && vulnerability.imageID) { // Step 1: construct the payload // Step 2: Encode the payload as JSON // Step 3: create CI using createOrUpdateCIEnhanced API. This API requires discovery source that needs to be created var payload = { "items": [{ "className": "cmdb_ci_docker_image", // update the cmdb unmatched class name here "values": { "image_id": vulnerability.imageID, // update the correct values that needs to be populated and any additional fields "name": vulnerability.imageName }, "sys_object_source_info": { // optional, used to optimize the fetch to get CIs from this specific source only "source_native_key": vulnerability.imageID, // unique key/id for the item from the source "source_name": "SG-PrismaCloudCompute" // The discovery source of the CI information } }] }; var inputPayload = new JSON().encode(payload); var cmdb = SNC.IdentificationEngineScriptableApi.createOrUpdateCI("SG-PrismaCloudCompute",inputPayload); // CMDB discovery source name var output = JSON.parse(cmdb); vulnItemRecord.cmdb_ci.setDisplayValue(output.items[0].sysId); // This will assign CMDB_ci item to vuln item. } else if (vulnerability.imageName != "Prisma Test Alert") { gs.log("missing image name or image id"); }
The following excerpt shows the part of the listing that creates the vulnerability placeholder:
if (!vulnEntryRecord.get('id', vulnerability.cve)) { // The following code inserts the placeholder vulnerability in sn_vul_nvd_entry. The other attributes will be filled once the NVD import run's var nvd_entry = new GlideRecord("sn_vul_nvd_entry"); nvd_entry.initialize(); nvd_entry.setValue("id", vulnerability.cve); var vulEntry = nvd_entry.insert(); vulnEntryRecord = new GlideRecord('sn_vul_entry'); vulnEntryRecord.get(vulEntry); }