[MODEL:dataset="forcepoint_forcepoint_dlp_raw"]
// Syslog events
filter _collector_source != "API"
| alter fsize = to_float(arrayindex(regextract(fname,"\s\-\s(\d+\.\d+)\s\w+"),0)),
fsize_unit = arrayindex(regextract(fname,"\s\-\s\d+\.\d+\s(\w+)"),0)
| alter fname = if(fname contains "N/A",null,arrayindex(regextract(fname ,"(.*)\s\-\s\d+"),0))
| alter xdm.event.original_event_type = to_string(eventid),
xdm.event.operation_sub_type = act,
xdm.observer.name = analyzedBy,
xdm.event.description = cat,
xdm.source.user.username = suser,
xdm.source.identity.username = suser,
xdm.target.resource.name = if(duser contains "N/A",null,duser ),
xdm.event.type = msg,
xdm.target.file.path = fname,
xdm.target.file.size = to_integer(if(fsize_unit = "KB", multiply(fsize,1024),fsize_unit = "MB", multiply(multiply(fsize,1024),1024),fsize_unit = "GB", multiply(multiply(multiply(fsize,1024),1024),1024) ,fsize)),
xdm.source.ipv4 = if(sourceIp contains "N/A",null,sourceIp ),
xdm.network.application_protocol_category = sourceServiceName,
xdm.alert.severity = severityType,
xdm.source.host.hostname = sourceHost,
xdm.observer.version = productVersion;
// API based logs modeling rules
filter _collector_source = "API"
| alter xdm.observer.action=action,
xdm.observer.name=analyzed_by,
xdm.event.type=channel,
xdm.target.host.device_category = if(channel ~= "PRINT", "PRINTER", null),
xdm.email.recipients=if(channel = "EMAIL", split(destination, ";"), null),
xdm.target.host.hostname = if(channel = "ENDPOINT_PRINTING", destination),
xdm.target.url = if(channel ~= "HTTP|FTP", destination),
xdm.target.application.name = if(channel ~= "ENDPOINT_APPLICATION", destination),
xdm.target.ipv4 = arrayindex(regextract(destination, "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"), 0),
xdm.target.port = to_integer(arrayindex(regextract(destination, "\w+:(\d{1,5})"), 0)),
xdm.email.subject = if(channel = "EMAIL", details),
xdm.event.description=details,
observer_type = arrayindex(regextract(detected_by, "(.+?)\s+on"), 0)
| alter xdm.observer.type = coalesce(observer_type, detected_by),
xdm.source.host.device_category=endpoint_type,
xdm.event.id=event_id,
file_name_array = arraymap(regextract(file_name, "(.+?)\s+\-\s+\d+[\.\d]*\s+[KMGTP]*B;?"), trim("@element"))
| alter file_type_array = arraymap(file_name_array, if("@element" ~= "\.[\w]+$", arrayindex(regextract("@element", ".+?\.(\w+)$"), 0), ""))
| alter file_names = arraystring(file_name_array, ";"),
file_types = arraystring(file_type_array, ";")
| alter xdm.target.file.filename = file_names,
xdm.target.file.file_type = file_types,
xdm.email.attachment.filename = if(channel ~= "EMAIL", file_names),
xdm.email.attachment.file_type = if(channel ~= "EMAIL", file_types),
xdm.target.file.path = if(channel = "ENDPOINT_LAN", destination),
xdm.alert.original_alert_id=to_string(id),
xdm.network.rule=policies,
xdm.alert.severity=severity,
xdm.source.user.groups = arraymap(split(json_extract_scalar(source, "$.business_unit"), ","), trim("@element")),
xdm.source.identity.groups = arraymap(split(json_extract_scalar(source, "$.business_unit"), ","), trim("@element")),
xdm.source.user.ou=json_extract_scalar(source, "$.department"),
xdm.source.identity.ou=json_extract_scalar(source, "$.department"),
xdm.email.sender=json_extract_scalar(source, "$.email_address"),
xdm.source.host.hostname=json_extract_scalar(source, "$.host_name"),
ip_address = json_extract_scalar(source, "$.ip_address")
| alter xdm.source.ipv6 = if(ip_address ~= "\:[a-fA-F\d]{1,4}|[a-fA-F\d]{1,4}\:", ip_address, null),
xdm.source.ipv4 = if(ip_address ~= "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$", ip_address, null),
username = json_extract_scalar(source, "$.login_name"),
nt_domain = json_extract_scalar(source, "$.nt_domain"),
email_address = json_extract_scalar(source, "$.email_address")
| alter xdm.source.user.username=coalesce(username, email_address),
xdm.source.identity.username=coalesce(username, email_address),
user_domain = arrayindex(regextract(username, "([^\\]+)\\"), 0)
| alter xdm.source.user.domain = coalesce(nt_domain, user_domain),
xdm.source.identity.domain = coalesce(nt_domain, user_domain),
xdm.event.is_completed = if(uppercase(status) ~= "CLOSE|FALSE.POSITIVE", true, false),
xdm.event.tags = arraycreate(`tag`),
xdm.target.file.size=to_integer(transaction_size),
xdm.event.outcome = if(action in ("AUTHORIZED", "RELEASED", "AUDITED", "ENDPOINT_CONFIRM_CONTINUE"), XDM_CONST.OUTCOME_SUCCESS, action in ("QUARANTINED", "BLOCKED", "ENDPOINT_CONFIRM_ABORT"), XDM_CONST.OUTCOME_FAILED);