GetIndicatorDBotScoreFromContext
Get the final verdict from the DBotScore of the context. Provided that it has all of the latest source verdict, this script gives you the right final verdict.
python · Community Common Scripts
Source
import demistomock as demisto # noqa: F401 from CommonServerPython import * # noqa: F401 from typing import Any FINAL_VERDICT_VENDOR = "XSOAR" def reliability_level(reliability: str | None) -> int: if reliability is None: return -1 return { DBotScoreReliability.A_PLUS: 6, DBotScoreReliability.A: 5, DBotScoreReliability.B: 4, DBotScoreReliability.C: 3, DBotScoreReliability.D: 2, DBotScoreReliability.E: 1, DBotScoreReliability.F: 0, }.get(reliability, -1) def is_source_reliable(final: dict[str, Any] | None, source: dict[str, Any]) -> bool: if source.get("Vendor") == "Manual": return True source_reliability = reliability_level(source.get("Reliability")) if source_reliability < 0: return False if final is None: return True final_reliability = reliability_level(final.get("Reliability")) if source_reliability > final_reliability: return True elif source_reliability == final_reliability: source_score = source.get("Score") or 0 final_score = final.get("Score") or 0 if source_score > final_score: return True return False def get_final_verdict(sources: list[dict[str, Any]], indicator_value: str) -> dict[str, Any] | None: """Get the DBotScore of the final verdict of an indicator from list of source DBotScores Vendor = Manual: - The most reliable DBotScore If DBotScore by Manual is not found: - The most reliable DBotScore is decided by 'Reliability' If some different DBotScores having the same Reliability are found: - The DBotScores having the highest risk are applied for the final verdict. (Malicious > Suspicious > Benign > Unknown) If there are some different DBotScores filtered by the highest risk: - The DBotScore found at first is applied for the final verdict. :param sources: The list of source DBotScore :param indicator_value: The indicator value :return: The DBotScore of the final verdict. """ final = None for source in sources: source_indicator = source.get("Indicator") if source_indicator == indicator_value and is_source_reliable(final, source): final = assign_params( Indicator=source_indicator, Type=source.get("Type"), Score=source.get("Score") or 0, Reliability=source.get("Reliability"), Vendor=FINAL_VERDICT_VENDOR, ) return final def main(): try: args = demisto.args() indicator_value = args.get("indicator_value") final_dbot_store = None if source_dbot_scores := demisto.dt(demisto.context(), "DBotScore(val.Indicator && val.Score)"): source_dbot_scores = source_dbot_scores if isinstance(source_dbot_scores, list) else [source_dbot_scores] final_dbot_store = get_final_verdict(source_dbot_scores, indicator_value) if final_dbot_store: return_results( CommandResults( outputs_prefix="FinalDBotScore", outputs_key_field="Indicator", outputs=final_dbot_store, readable_output=tblToMd("Final Verdict", final_dbot_store), raw_response=final_dbot_store, ) ) else: return_results(f"No DBotScore found for {indicator_value}") except Exception as err: return_error(f"Failed to execute GetIndicatorDBotScoreFromContext script. Error: {str(err)}") if __name__ in ("__builtin__", "builtins", "__main__"): main()
README
Get the final verdict of a indcator from the given DBotScores in the context by their reliability.
Provided that it has all of the latest source verdict, this script gives you the right final verdict.
Note that the result is calculated by the context data and not given from the database.
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | Utility |
| Cortex XSOAR Version | 6.5.0 |
Inputs
| Argument Name | Description |
|---|---|
| indicator_value | The indicator value |
Outputs
| Path | Description | Type |
|---|---|---|
| FinalDBotScore.Indicator | The indicator value | string |
| FinalDBotScore.Score | The indicator score | number |
| FinalDBotScore.Type | The indicator type | string |
| FinalDBotScore.Vendor | The source vendor of the verdict | string |
| FinalDBotScore.Reliability | The reliability of the indicator verdict | string |