DarkmonVIPFanOut

For each protected email, calls dmontip-get-boardemails three times (accounts, combo-lists, public-breaches), filters new entries, creates incidents.

Type
python
Pack
Darkmon

Source

import demistomock as demisto  # noqa: F401
from CommonServerPython import *  # noqa: F401


def _get_seen(seen_list_name):
    try:
        res = demisto.executeCommand("getList", {"listName": seen_list_name})
        content = res[0].get("Contents", "") if res else ""
        return {line.strip() for line in (content or "").splitlines() if line.strip()}
    except Exception:
        return set()


def _put_seen(seen_list_name, seen):
    demisto.executeCommand("setList", {"listName": seen_list_name, "listData": "\n".join(sorted(seen))})


def main():
    args = demisto.args()
    emails = argToList(args.get("emails")) or []
    seen_list_name = args.get("seen_list")
    incident_type = args.get("incident_type", "Darkmon VIP Email Leak")

    seen = _get_seen(seen_list_name)
    new_seen = set(seen)
    created = 0

    for email in emails:
        for leak_type in ("accounts", "combo-lists", "public-breaches"):
            try:
                res = demisto.executeCommand(
                    "dmontip-get-boardemails",
                    {"type": leak_type, "email": email, "size": "100"},
                )
                ctx = res[0].get("EntryContext", {}) if res else {}
                singular = {
                    "accounts": "Account",
                    "combo-lists": "ComboList",
                    "public-breaches": "PublicBreach",
                }[leak_type]
                items = ctx.get(f"Darkmon.BoardLeak.{singular}") or []
            except Exception as e:
                demisto.error(f"VIP fetch failed for {email}/{leak_type}: {e}")
                continue
            for it in items:
                composite = f"{email}::{leak_type}::{it.get('id')}"
                if composite in new_seen:
                    continue
                new_seen.add(composite)
                demisto.executeCommand(
                    "createNewIncident",
                    {
                        "name": f"Darkmon VIP leak: {email} ({leak_type})",
                        "type": incident_type,
                        "customFields": {
                            "darkmonprotectedemail": email,
                            "darkmonleaktype": leak_type,
                            "darkmonleakid": str(it.get("id", "")),
                            "darkmonsourcename": str(it.get("source", "")),
                        },
                    },
                )
                created += 1

    if seen_list_name and new_seen != seen:
        _put_seen(seen_list_name, new_seen)

    return_results({"VIPCreated": created})


if __name__ in ("__main__", "__builtin__", "builtins"):
    main()

README

For each protected email, calls dmontip-get-boardemails three times (accounts, combo-lists, public-breaches), filters new entries, creates incidents.

Script Data


Name Description
Script Type python3
Tags darkmon
Cortex XSOAR Version 6.5.0

Dependencies


This script uses the following commands and scripts.

Used In


This script is used in the following playbooks and scripts.

Inputs


Argument Name Description
items Items to process.
id_field Field name to use as the dedup key.
seen_list Name of the XSOAR List storing already-seen IDs.
domain_filter_list Optional - list of customer domains to filter username matches.
domain_match_field Field on each item to match against domain_filter_list.
allowlist Optional list of usernames/DNs that must NEVER be actioned.
allowlist_match_field Field to match against the allowlist.
incident_type Incident type for newly created incidents.
severity Severity (1=Low, 2=Medium, 3=High, 4=Critical).
name_template Incident name template (supports ${field} interpolation).
field_map Comma-separated ‘fieldCli=sourcePath’ pairs.
emails Email addresses to fan out per VIP fetch.
domains  
brands_list  
max_distance  
min_cvss  
tech_stack_list  

Outputs


Path Description Type
NewAccounts   unknown
CreatedIncidents   unknown
Count   number
Typosquats   unknown
FilteredCVEs   unknown
VIPCreated   number