ExtractIndicators-CloudLogging

This script will extract indicators from a given AWS CloudTrail or GCP Logging event.

python · Cloud Incident Response

Details

IDExtractIndicators-CloudLogging
Languagepython
From Version6.8.0
Docker Imagedemisto/bs4-tld:1.0.0.10133006

README

This script will extract indicators from a given AWS CloudTrail or GCP Logging event.

Script Data


Name Description
Script Type python3
Cortex XSOAR Version 6.8.0

Inputs


Argument Name Description
json_data The event JSON or data.

Outputs


Path Description Type
CloudIndicators.arn The ARN extracted from the event Unknown
CloudIndicators.access_key_id The access key ID extracted from the event Unknown
CloudIndicators.resource_name The resource name extracted from the event Unknown
CloudIndicators.source_ip The source ip extracted from the event Unknown
CloudIndicators.username The username extracted from the event Unknown
CloudIndicators.event_name The event name extracted from the event Unknown
CloudIndicators.user_agent The user agent extracted from the event Unknown
import json

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


def extract_aws_info(event):
    arn = event.get("userIdentity", {}).get("arn")
    access_key_id = event.get("userIdentity", {}).get("accessKeyId")
    resource_name = event.get("userIdentity", {}).get("instanceId")
    source_ip = event.get("sourceIPAddress")
    username = event.get("userIdentity", {}).get("sessionContext", {}).get("sessionIssuer", {}).get("userName")
    event_name = event.get("eventName")
    user_agent = event.get("userAgent")

    return arn, access_key_id, resource_name, source_ip, username, event_name, user_agent


def extract_gcp_info(event):
    resource_name = event.get("protoPayload", {}).get("resourceName")
    source_ip = event.get("protoPayload", {}).get("requestMetadata", {}).get("callerIp")
    username = event.get("protoPayload", {}).get("authenticationInfo", {}).get("principalEmail")
    event_name = event.get("protoPayload", {}).get("methodName")
    user_agent = event.get("protoPayload", {}).get("requestMetadata", {}).get("callerSuppliedUserAgent")

    return resource_name, source_ip, username, event_name, user_agent


def extract_event_info(event):
    if event.get("eventSource") and "amazonaws.com" in event.get("eventSource"):
        return "AWS", extract_aws_info(event)
    elif event.get("logName", "").startswith("projects/"):
        return "GCP", extract_gcp_info(event)
    else:
        raise ValueError("Unknown event type")


def main():  # pragma: no cover
    try:
        args = demisto.args()
        json_data = args.get("json_data")
        data = json.loads(json_data) if isinstance(json_data, str) else json_data
        results = None

        # Extract information from AWS event
        event_type, event_info = extract_event_info(data)
        if event_type == "AWS":
            results = CommandResults(
                outputs_prefix="CloudIndicators",
                outputs={
                    "arn": event_info[0],
                    "access_key_id": event_info[1],
                    "resource_name": event_info[2],
                    "source_ip": event_info[3],
                    "username": event_info[4],
                    "event_name": event_info[5],
                    "user_agent": event_info[6],
                },
            )

        # Extract information from GCP event
        elif event_type == "GCP":
            results = CommandResults(
                outputs_prefix="CloudIndicators",
                outputs={
                    "resource_name": event_info[0],
                    "source_ip": event_info[1],
                    "username": event_info[2],
                    "event_name": event_info[3],
                    "user_agent": event_info[4],
                },
            )

        return_results(results)

    except Exception as e:
        return_error(f"An error occurred: {e!s}")


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