Cybersixgill_DVE_Enrichment
By enriching CVEs with the DVE Score, Cortex XSOAR customers gain deeper visibility with relevant threat intel from the deep and dark web with dynamic attributes such as where they are trending, POC exploit details, and more. Loaded with extra-context, this allows users to accurately understand the real impact of CVEs to effectively prioritize critical vulnerabilities.
Data Enrichment & Threat Intelligence · Cybersixgill-DVE
Details
| ID | Cybersixgill_DVE_Enrichment |
|---|---|
| Provider | BitSight |
| Category | Data Enrichment & Threat Intelligence |
| From Version | 5.5.0 |
| Docker Image | demisto/sixgill:1.0.0.10120494 |
| Supported Modules | Agentix XSIAM |
README
Powered by the broadest automated collection from the deep and dark web, Cybersixgill’s Dynamic Vulnerability Exploit (DVE) Score is a feed of common known vulnerabilities, scored by their probability of getting exploited. The DVE Score feed enables Cortex XSOAR users to track threats from vulnerabilities that others define as irrelevant, but have a higher probability of being exploited. It is the only solution that predicts the immediate risks of a vulnerability based on threat actors’ intent.
DVE Score is also the most comprehensive CVE enrichment solution on the market: Cortex XSOAR users gain unparalleled context and can accelerate threat response and decision making, effectively giving security teams a head start on vulnerability management.
· Anticipate the exploitation of a vulnerability up to 90 days in advance
· Track threats from CVEs that most others define as irrelevant or obsolete, but a higher probability of being exploited by active cyber threat actors.
· Gain visibility as well as the ability to prioritize and articulate the remediation process across the organization - straight from Cortex XSOAR
To obtain access to Cybersixgill DVE Score feed via Cortex XSOAR, please contact Cybersixgill at getstarted@cybersixgill.com.
Configure Sixgill_Darkfeed_Enrichment in Cortex
| Parameter | Description | Required |
|---|---|---|
| Sixgill API client ID | Sixgill API client ID | True |
| Sixgill API client secret | Sixgill API client secret | True |
| insecure | Trust any certificate (not secure) | False |
| proxy | Use system proxy settings | False |
Commands
You can execute these commands from the 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.
cybersixgill-cve-enrich
Returns information for each CVE in the input list.
Base Command
cybersixgill-cve-enrich
Input
| Argument Name | Description | Required |
|---|---|---|
| cve_id | comma separated list of cves id. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| Sixgill.CVE.value | String | CVE ID. |
| Sixgill.CVE.Description | String | Description of the given DVE ID. |
| Sixgill.CVE.Created | Date | The creation date of the CVE. |
| Sixgill.CVE.Modified | Date | The modified date of the CVE. |
| Sixgill.CVE.Cybersixgill_DVE_score_current | String | The current Sixgill DVE Score. |
| Sixgill.CVE.Cybersixgill_DVE_score_highest_ever_date | Date | The date on which Sixgill’s highest DVE score ever reported. |
| Sixgill.CVE.Cybersixgill_DVE_score_highest_ever | String | Sixgill’s highest DVE score ever reported. |
| Sixgill.CVE.Cybersixgill_Previously_exploited_probability | String | Sixgill’s score of previously exploited probability. |
| Sixgill.CVE.Previous_Level | String | Previous level of the CVE ID. |
| Sixgill.CVE.CVSS_3_1_score | String | CVSS 3.1 score. |
| Sixgill.CVE.CVSS_3_1_severity | String | CVSS 3.1 severity. |
| Sixgill.CVE.NVD_Link | String | NVD link. |
| Sixgill.CVE.NVD_last_modified_date | Date | NVD last modified date. |
| Sixgill.CVE.NVD_publication_date | Date | NVD publication date. |
| Sixgill.CVE.CVSS_2_0_score | String | CVSS 2.0 score. |
| Sixgill.CVE.CVSS_2_0_severity | String | CVSS 2.0 severity. |
| Sixgill.CVE.NVD_Vector_V2_0 | String | NVD vector v2.0. |
| Sixgill.CVE.NVD_Vector_V3_1 | String | NVD vector v3.1. |
| Sixgill.CVE.rawJSON | String | The raw JSON of the CVE entich information. |
cybersixgill-cve-remediation
Returns remediation for each CVE in the input list.
Base Command
cybersixgill-cve-remediation
Input
| Argument Name | Description | Required |
|---|---|---|
| cve_id | comma separated list of cves id. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| Sixgill.CVE.value | String | CVE ID. |
| Sixgill.CVE.Description | String | Description of the given DVE remediation. |
| Sixgill.CVE.Solutions | String | Possible remediation solutions for the CVE ID. |
| Sixgill.CVE.rawJSON | String | The raw JSON of the CVE entich information. |
Configuration parameters
client_id— Sixgill API client ID (required)client_secret— Sixgill API client secret (required)insecure— Trust any certificate (not secure)proxy— Use system proxy settings
Commands (2)
-
cybersixgill-cve-enrichReturns information for each CVE in the input list.
-
cybersixgill-cve-remediationReturns remediation for each CVE in the input list.
import demistomock as demisto from CommonServerPython import * from CommonServerUserPython import * """ IMPORTS """ import requests from sixgill.sixgill_enrich_client import SixgillEnrichClient from sixgill.sixgill_request_classes.sixgill_auth_request import SixgillAuthRequest """ CONSTANTS """ DATE_FORMAT = "%Y-%m-%dT%H:%M:%SZ" def test_module(client_id, client_secret, channel_code, session, verify): """ Performs basic Auth request """ response = session.send( request=SixgillAuthRequest(client_id, client_secret, channel_code).prepare(), verify=verify, ) if not response.ok: raise Exception("Auth request failed - please verify client_id, and client_secret.") return "ok" def stix_to_indicator(stix_obj): indicator: Dict[str, Any] = {} try: ext_obj = stix_obj.get("external_references", []) ext_id = "" if ext_obj and ext_obj[0]: ext_id = ext_obj[0].get("external_id") event_obj = stix_obj.get("x_sixgill_info", {}).get("event", {}) nvd_obj = stix_obj.get("x_sixgill_info", {}).get("nvd", {}) nvd_obj_v2 = stix_obj.get("x_sixgill_info", {}).get("nvd", {}).get("v2", {}) nvd_obj_v3 = stix_obj.get("x_sixgill_info", {}).get("nvd", {}).get("v3", {}) score_obj = stix_obj.get("x_sixgill_info", {}).get("score", {}) indicator["value"] = ext_id indicator["Description"] = stix_obj.get("description", "") indicator["Created"] = stix_obj.get("created", "") indicator["Modified"] = stix_obj.get("modified", "") indicator["Cybersixgill_DVE_score_current"] = score_obj.get("current", "") indicator["Cybersixgill_DVE_score_highest_ever_date"] = score_obj.get("highest", {}).get("date", "") indicator["Cybersixgill_DVE_score_highest_ever"] = score_obj.get("highest", {}).get("value", "") indicator["Cybersixgill_Previously_exploited_probability"] = score_obj.get("previouslyExploited", "") indicator["Previous_Level"] = event_obj.get("prev_level", "") indicator["CVSS_3_1_score"] = nvd_obj_v3.get("exploitabilityScore", "") indicator["CVSS_3_1_severity"] = nvd_obj_v3.get("severity", "") indicator["NVD_Link"] = nvd_obj.get("link", "") indicator["NVD_last_modified_date"] = nvd_obj.get("modified", "") indicator["NVD_publication_date"] = nvd_obj.get("published", "") indicator["CVSS_2_0_score"] = nvd_obj_v2.get("exploitabilityScore", "") indicator["CVSS_2_0_severity"] = nvd_obj_v2.get("severity", "") indicator["NVD_Vector_V2_0"] = nvd_obj_v2.get("vector", "") indicator["NVD_Vector_V3_1"] = nvd_obj_v3.get("vector", "") indicator["rawJSON"] = stix_obj except Exception as err: err_msg = f"Error in DVE Enrichment Integration [{err}]\nTrace:\n{traceback.format_exc()}" raise DemistoException(err_msg) return indicator def cve_enrich_command(client: SixgillEnrichClient, args) -> List[CommandResults]: cve_ids = argToList(args.get("cve_id")) command_results: List[CommandResults] = [] final_data_list = [] for cve_id in cve_ids: cve_id_data = client.enrich_dve(cve_id) final_data = stix_to_indicator(cve_id_data) final_data_list.append(final_data) readable_output = tableToMarkdown("Enriched results for cve_id:", final_data_list) command_results.append( CommandResults( readable_output=readable_output, outputs_prefix="Sixgill.CVE", outputs_key_field="CVE_ID", outputs=final_data_list, ) ) return command_results def cve_enrich_remediation_command(client: SixgillEnrichClient, args) -> List[CommandResults]: cve_ids = argToList(args.get("cve_id")) command_results: List[CommandResults] = [] remediations = [] for cve_id in cve_ids: dve_remediations = client.enrich_dve_remediation(cve_id) for dve_remediation in dve_remediations: if any([dve_remediation.get("advisory"), dve_remediation.get("description"), dve_remediation.get("solutions")]): remediations.append( { "Value": cve_id, "Advisory": dve_remediation.get("advisory", ""), "Description": dve_remediation.get("description", ""), "Solutions": dve_remediation.get("solutions", ""), } ) readable_output = tableToMarkdown("Enriched results for cve_id:", remediations) command_results.append( CommandResults( readable_output=readable_output, outputs_prefix="Sixgill.CVE", outputs_key_field="CVE_ID", outputs=remediations, ) ) return command_results def main(): channel_code = "7457a04d972fceb8e0cc2192ba4abc66" if is_xsiam() else "7698e8287dfde53dcd13082be750a85a" params = demisto.params() command = demisto.command() verify = not params.get("insecure", True) session = requests.Session() session.proxies = handle_proxy() client = SixgillEnrichClient(params.get("client_id"), params.get("client_secret"), channel_code, demisto, session, verify) LOG(f"Command being called is {demisto.command()}") try: if command == "cybersixgill-cve-enrich": return_results(cve_enrich_command(client, demisto.args())) elif command == "cybersixgill-cve-remediation": return_results(cve_enrich_remediation_command(client, demisto.args())) elif command == "test-module": return_results(test_module(params.get("client_id"), params.get("client_secret"), channel_code, session, verify)) # Log exceptions except Exception as e: return_error(f"Failed to execute {command} command. Error: {e!s}") if __name__ in ("__main__", "__builtin__", "builtins"): main()