Skip to main content

UDM

The Unified Data Model is the normalization schema of Google Security Operations. A UDM record organizes an event around a set of nouns—the actor, the thing acted upon, the network path between them—rather than a flat field list.

DataStream converts to and from UDM with the Normalize processor.

UDM carries no schema version. The metadata.product_version field records the version of the reporting device, not of the model.

Event Types

metadata.event_type classifies the event. It is never mapped from a source field—it is derived, and the derivation runs in two stages.

First, the event action is matched against the following:

Action valueEvent type
networksession, connection, connectNETWORK_CONNECTION
httpNETWORK_HTTP
dns, queryNETWORK_DNS
login, logonUSER_LOGIN
logout, logoffUSER_LOGOUT
launch, start, processcreatedPROCESS_LAUNCH
terminatePROCESS_TERMINATION
createFILE_CREATION
deleteFILE_DELETION
modifyFILE_MODIFICATION
writeFILE_WRITE
readFILE_READ

Matching is case-insensitive and exact.

Second, if no action matched, the type is inferred from which fields are present. The first condition that holds wins:

ConditionEvent type
DNS questions or answers presentNETWORK_DNS
An HTTP method or response code presentNETWORK_HTTP
Principal IP, target IP and principal port all presentNETWORK_CONNECTION
A principal process ID and executable path presentPROCESS_LAUNCH
A target file path present, and the product event type mentions a fileFILE_CREATION
A principal user present, and the product event type mentions a login, authentication or sessionUSER_LOGIN
A target registry key presentREGISTRY_MODIFICATION

Anything unresolved becomes GENERIC_EVENT.

The schema defines 51 event types and DataStream accepts all of them on input, but only the 14 reachable through the two stages above can be produced when converting from another format.

Field Mapping

UDM groups fields under nouns. The tables below give the UDM field produced for each ECS field.

Metadata

ECS FieldUDM Field
@timestampmetadata.event_timestamp
observer.vendormetadata.vendor_name
observer.productmetadata.product_name
observer.versionmetadata.product_version
event.idmetadata.id
event.extidmetadata.correlation_id
event.actionmetadata.product_event_type
event.createdmetadata.collected_timestamp
event.startmetadata.interval.start_time
event.endmetadata.interval.end_time
event.modulemetadata.product_deployment_id
event.datasetmetadata.log_type
event.ownermetadata.collected_by
messagemetadata.description

Principal

The principal is the actor, and is populated from the ECS source entity.

ECS FieldUDM Field
source.ipprincipal.ip
source.portprincipal.port
source.hostnameprincipal.hostname
source.macprincipal.mac
source.domainprincipal.administrative_domain
source.nat.ipprincipal.nat_ip
source.nat.portprincipal.nat_port
source.service.nameprincipal.asset.software.name
source.interfaceprincipal.asset.network_interfaces.name
source.user.nameprincipal.user.userid
source.user.idprincipal.user.windows_sid
source.user.emailprincipal.user.email_addresses
source.user.groupprincipal.user.group_identifiers
source.user.rolesprincipal.user.attribute.roles
source.process.nameprincipal.process.file.full_path
source.process.idprincipal.process.pid
source.geo.countryprincipal.location.country_or_region
source.geo.cityprincipal.location.city
source.geo.regionprincipal.location.state

Target

The target is the thing acted upon, populated from the ECS destination entity and from file, URL and registry fields.

ECS FieldUDM Field
destination.iptarget.ip
destination.porttarget.port
destination.hostnametarget.hostname
destination.mactarget.mac
destination.domaintarget.administrative_domain
destination.nat.iptarget.nat_ip
destination.nat.porttarget.nat_port
destination.service.nametarget.asset.software.name
destination.user.nametarget.user.userid
destination.user.idtarget.user.windows_sid
destination.user.emailtarget.user.email_addresses
destination.process.nametarget.process.file.full_path
destination.process.idtarget.process.pid
destination.geo.countrytarget.location.country_or_region
destination.geo.citytarget.location.city
destination.geo.regiontarget.location.state
file.pathtarget.file.full_path
file.nametarget.file.names
file.sizetarget.file.size
file.hash.md5target.file.md5
file.hash.sha1target.file.sha1
file.hash.sha256target.file.sha256
file.createdtarget.file.creation_time
file.mtimetarget.file.last_modification_time
file.mime_typetarget.file.mime_type
url.fulltarget.url
registry.keytarget.registry.registry_key
registry.valuetarget.registry.registry_value_name
registry.datatarget.registry.registry_value_data

Intermediary

The intermediary is the device that reported the event.

ECS FieldUDM Field
observer.hostnameintermediary.hostname
observer.ipintermediary.ip
observer.macintermediary.mac
observer.nameintermediary.asset.asset_id
observer.domainintermediary.administrative_domain
observer.nat.addressintermediary.nat_ip
observer.process.idintermediary.process.pid
observer.process.nameintermediary.process.file.full_path

Network

ECS FieldUDM Field
network.transportnetwork.ip_protocol
network.bytesnetwork.total_bytes
network.directionnetwork.direction
network.community_idnetwork.session_id
network.forwardednetwork.http.x_forwarded_for
source.bytesnetwork.sent_bytes
source.packetsnetwork.sent_packets
destination.bytesnetwork.received_bytes
destination.packetsnetwork.received_packets
event.durationnetwork.session_duration
http.request.methodnetwork.http.method
http.response.status_codenetwork.http.response_code
http.request.referrernetwork.http.referral_url
user_agent.namenetwork.http.user_agent
dns.question.namenetwork.dns.questions.name
dns.question.typenetwork.dns.questions.type
dns.question.classnetwork.dns.questions.class
dns.answers.typenetwork.dns.answers.type
dns.answers.classnetwork.dns.answers.class
dns.answers.ttlnetwork.dns.answers.ttl
dns.resolved_ipnetwork.dns.answers.data
dns.response_codenetwork.dns.response_code

Security Result

ECS FieldUDM Field
event.severitysecurity_result.severity
event.reasonsecurity_result.description
rule.idsecurity_result.rule_id
rule.namesecurity_result.rule_name
rule.versionsecurity_result.rule_version
rule.categorysecurity_result.category
rule.referencesecurity_result.url_back_to_product
threat.frameworksecurity_result.threat_name
threat.indicator.typesecurity_result.category
url.categorysecurity_result.category_details

Additional Fields

Any field without a place in the model above is written under additional.fields, with its dots replaced by underscores. process.args becomes additional.fields.process_args, syslog.priority becomes additional.fields.syslog_priority. This accounts for the majority of fields on a typical record.

Enumerations

security_result.action takes one of UNKNOWN_ACTION, ALLOW, BLOCK or ALERT. Words such as permit, accept and success produce ALLOW; deny, drop, reject and failure produce BLOCK; alert and detect produce ALERT. Anything unrecognized produces UNKNOWN_ACTION.

security_result.severity takes UNKNOWN_SEVERITY, INFORMATIONAL, LOW, MEDIUM, HIGH or CRITICAL. FATAL maps to CRITICAL and ERROR to HIGH. A value matching none of these is passed through unchanged rather than normalized.

network.direction takes UNKNOWN_DIRECTION, INBOUND, OUTBOUND or INTERNAL. When the source does not supply one, it is derived by testing the principal and target addresses against the private address ranges.

network.ip_protocol accepts TCP, UDP, ICMP, ICMPV6, SCTP, GRE, ESP and AH. A value of IPV4 or IPV6 describes the address family rather than the protocol and is moved to additional.fields.ip_version; any other value is preserved under additional.fields.network_ip_protocol_raw.

Always Written

Three fields are present on every converted record regardless of the source: metadata.event_type, which falls back to GENERIC_EVENT; metadata.event_timestamp, which falls back to the time of conversion; and security_result.action, which falls back to UNKNOWN_ACTION.

metadata.vendor_name and metadata.product_name are required by the model but are only written when the source supplies an observer vendor and product.

Limitations

  • The output is not restricted to UDM fields. A source field with no mapping is carried through under its original name, so a converted record can contain both UDM fields and leftover fields from the source format.
  • Longitude is not written. The geographic mappings name a latitude and a longitude field, and only the first is written, so principal.location.region_longitude and target.location.region_longitude are always absent.
  • Converting back is lossy where several fields share a target. event.original and message both produce metadata.description; event.reason and rule.description both produce security_result.description; rule.category and threat.indicator.type both produce security_result.category. The reverse conversion recovers one source field per target.