ShowCampaignSenders

Displays the phishing campaign senders' email addresses and the number of incidents each email address appears in.

Type
python
Pack
Campaign

Source

from collections import Counter

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

FROM_FIELD = "emailfrom"


def get_incident_ids() -> list | None:
    """
    Gets all the campaign incident ids.

    Returns:
        List of all the ids.
    """
    incidents = demisto.get(demisto.context(), "EmailCampaign.incidents")
    return [incident["id"] for incident in incidents] if incidents else None


def get_campaign_senders(incident_ids: list[str]) -> str:
    """
    Gets the campaign senders in a readable table.

    Args:
        incident_ids: All the campaign incident ids.
    Returns:
        MD table of the senders and their amount.
    """
    res = demisto.executeCommand("GetIncidentsByQuery", {"query": f"id:({' '.join(incident_ids)})"})

    if isError(res):
        return_error(f"Error occurred while trying to get incidents by query: {get_error(res)}")

    incidents_from_query = json.loads(res[0]["Contents"])

    if not incidents_from_query:
        return "No incidents found."

    senders = [incident[FROM_FIELD] for incident in incidents_from_query if FROM_FIELD in incident]

    if not senders:
        return "No incident senders found."

    senders_counter = Counter(senders).most_common()  # type: ignore

    senders_table_content = [{"Email": email, "Number Of Appearances": count} for email, count in senders_counter]
    headers = ["Email", "Number Of Appearances"]

    return tableToMarkdown("", senders_table_content, headers=headers)


def main():
    try:
        if incident_ids := get_incident_ids():
            campaign_senders = get_campaign_senders(incident_ids)
            return_results(CommandResults(readable_output=campaign_senders, raw_response=campaign_senders))
        else:
            return_results(
                CommandResults(
                    content_format="html",
                    raw_response=(
                        "<div style='text-align:center; font-size:17px; padding: 15px;'>Senders"
                        "</br> <div style='font-size:20px;'> No incident senders found.</div></div>"
                    ),
                )
            )

    except Exception as err:
        return_error(str(err))


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

README

Displays the phishing campaign senders’ email addresses and the number of incidents each email address appears in.

Script Data


Name Description
Script Type python3
Tags dynamic-section
Cortex XSOAR Version 5.5.0 and later

Inputs


There are no inputs for this script.

Outputs


There are no outputs for this script.