Get desktop application:
View/edit binary Protocol Buffers messages
Used by containers to signal the "alerting" container
Currently just "slack"
Text to send for the alert
The service the message originated from (optional)
Used in:
Used in:
Used in:
*2john hash representing the archive password
Used in:
Data that may be used to authenticate to a resource. The resource does not need to be accessible over a network and a local resource may be specified using the file:// scheme in the URI parameter. The type data may be anything that may be used to authenticate such as a password, certificate, JWT, SAML token, TGT, NTLM hash, private key, etc. The authentication data does not need to be additionally encoded because all ODR string parameters already support hex encoding values. ODR: `authentication_data`, defined in docs/odr/references/authentication_data.md See authentication_data.md for supported "type" values.
Used in:
Case sensitive data or a Nemesis UUID reference (if over 1k)
type of the authentication data
Boolean for if data is a reference to a binary submission
Location of where the data is valid
Simple or FQDN username
any additional notes/context
the Nemesis UUID referencing the original file the hash was extracted from (if applicable)
Used in:
Used in:
Used in:
added in enrichment
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
,Used in:
,Used in:
Path of the user data folder, if known.
Domain/host_key for the cookie
Path on the domain for the cookie.
Name of the cookie value.
Plaintext decrypted cookie value (if decrypted).
Base64 encoding of encrypted value bytes.
Timestamp of when the cookie expires.
Timestamp of when the cookie was created.
Timestamp of when the cookie was last accessed.
Timestamp of when the cookie was last updated.
True/1 if the cookie can only be accessed by the server.
True/1 if the cookie can only be accessed by the server.
True if the cookie is deleted when the user closes their browser.
STRICT/LAX/NONE, protection against CSRF attacks.
The port number of the source origin.
Used in:
Used in:
Used in:
true if the hive values are decrypted
raw bytes extracted from the registry key
DOMAIN.CORP/username
username
counts for Vista style iteration
bytes of the decoded domain cached hash
string representation of the crackable hash
timestamp of the login, UTC
Used in:
Used in:
Used in:
Used in:
unique identifier so originating documents can keep track of which DPAPI blobs were extracted from it in this case this ID does NOT refer to a file in S3
the Nemesis UUID referencing the original file the dpapi blob was extracted from
the Nemesis UUID referencing the registry key the dpapi blob was extracted from
the GUID of the masterkey for the blob
true if enc_data/dec_data are references to a binary submission (UUID in S3)
true if the dpapi blob has been decrypted
If the encrypted data is < 1024 bytes it will be stored as bytes in this field
If the encrypted data is > 1024 bytes it will be will be stored in S3 as a UUID file
If the decrypted data is < 1024 bytes it will be stored as bytes in this field
If the decrypted data is > 1024 bytes it will be will be stored in S3 as a UUID file
not yet used
https://github.com/fortra/impacket/blob/8799a1a2c42ad74423841d21ed5f4193ea54f3d5/impacket/dpapi.py#L850-L862
Used in:
Used in:
unique identifier of the carved DPAPI blob ID that decrypts to the data below TODO: how to exactly handle this being decrypted?
https://github.com/fortra/impacket/blob/8799a1a2c42ad74423841d21ed5f4193ea54f3d5/impacket/dpapi.py#L196-L204
Used in:
https://github.com/fortra/impacket/blob/8799a1a2c42ad74423841d21ed5f4193ea54f3d5/impacket/dpapi.py#L216-L220
Used in:
https://github.com/fortra/impacket/blob/8799a1a2c42ad74423841d21ed5f4193ea54f3d5/impacket/dpapi.py#L206=L214
Used in:
Used in:
the unique GUID identifying the domain backup key
the FQDN of the domain controller the backup key was retrieved from
the actual bytes of the domain backupkey
also used in ParsedData
Used in:
,the Nemesis UUID returned by the web-api/file endpoint, also the name the file is stored as in S3
whether this is a "domain_user, "local_user", or "machine" masterkey
the username the masterkey belongs to
the SID of the user the masterkey belongs to
the GUID that identifies that masterkey
true if the key has been decrypted
the raw bytes of the masterkey subkey
GUID of the domain master/backup key
bytes encrypted by the domain backup key
the full decrypted master key
the sha1 representation of the masterkey
Generic Error message
Used in:
Nemesis UUID
Nemesis UUID
Nemesis UUID
Used in:
,Hashes extracted from processed files
Used in:
md5/sha1/etc.
actual hash data
the Nemesis UUID referencing the original file the hash was extracted from
hash value formatted for Hashcat
hash value formatted for JohnTheRipper
whether the hash has been cracked
if cracked, the jtr pot value
whether the value was checked against the top X passwords with JTR
if cracked, the plaintext value
not yet used
not yet used
not yet used
Used in:
the Nemesis UUID returned by the web-api/file endpoint, also the name the file is stored as in S3
If the file was extracted from another existing file in Nemesis (e.g., a zip or jar), this optional field is the Nemesis UUID referencing the original file
Enrichments that ran and succeeded
Enrichments that ran but failed
The path must be in a UNC, file system, or mapped path format. File system and mapped paths must be absolute and use forward slashes for separators (e.g. /).
Size of the file, in bytes
The base file name
The file extension
Various hashes for the file
The "Nemesis file type", i.e. any format defined in /cmd/file-processor/file_types/
The magic mime type returned from libmagic (a la the `file` command)
True if the file is binary, False if it's text
True if the file is a supported source code file extension
True if the file is an office form consumed by Tika for text extraction
any Nemesis-specific data parsed from the file
any file analysis (e.g., dotnet analysis)
if the document was converted to a PDF, this is the Nemesis object_id/UUID referring to that file in S3
if the document had plaintext extracted, this is the Nemesis object_id/UUID referring to that file in S3
if the binary had source code extracted (i.e., .NET decompilation), this is the Nemesis object_id/UUID referring to that file in S3
any NoseyParker results if this file wasn't binary
any Yara rule matches
possible document canaries
true if the file contains DPAPI data
one or more object_id's that refer to DpapiBlob structures that were extracted from this file
The content of a specific file system resource. The path must be in a UNC, file system, or mapped path format. File system and mapped paths must be absolute and use forward slashes for separators (e.g. /). Paths are expected to be canonicalized but there is no verification of this. ODR: `file_data`, defined in file_data.md
Used in:
Nemesis UUID referring to the uploaded file
Case sensitive file path
Size of the file, in bytes
If the file was extracted from another existing file in Nemesis (e.g., a zip or jar), this optional field is the Nemesis UUID referencing the original file
Used in:
the Nemesis UUID referencing the plaintext file in S3
Enrichments that ran and succeeded
Enrichments that ran but failed
the Nemesis UUID referencing the original file the plaintext was extracted from
if the originating document was converted to a PDF, this is the Nemesis object_id/UUID referring to that file in S3
the path of the originating downloaded file/object, if it exists
the size (in bytes) of the originating file/object, if it exists
size of the raw extracted text, in bytes
number of individual tokens
short summary of the text
any NoseyParker results (including hashes) for the plaintext
message for text chunks extracted from a FileDataPlaintext document has simplified metadata since it goes straight back to the NLP service after extraction
length of the chunk size, in characters
the raw text of the chunk
the Nemesis UUID referencing the plaintext file the chunk came from
the Nemesis UUID referencing the original file the plaintext was extracted from
the path of the originating downloaded file/object the plaintext whole originated from, if it exists
Used in:
the Nemesis UUID referencing the source code file in S3
If the file was extracted from another existing file in Nemesis (e.g., a zip or jar), this optional field is the Nemesis UUID referencing the original file
The path must be in a UNC, file system, or mapped path format. File system and mapped paths must be absolute and use forward slashes for separators (e.g. /).
The base file name
The file extension
Language for the source code file
Size of the file, in bytes
Used in:
Information about a specific file system resource. Note that file_info is more specialized than the path_list submission which may include information about non-file system resources (ex. registry paths). The path must be in a UNC, file system, or mapped path format. File system and mapped paths must be absolute and use forward slashes for separators (e.g. /). Paths are expected to be canonicalized but there is no verification of this. Submission parameters may accommodate files from most operating systems. The only submission parameters that are required is the file path and type. Note that all date time parameters in ODRs including for the modified, access, and creation times for Windows files are expected to be UTC.
Used in:
case sensitive file path
case insensitive full name of file type currently: file, folder, share
size in bytes
file creation time in UTC
file last access time in UTC
file modification time in UTC
*nix permission number
*nix case sensitive file group membership
*nix string for an inode or file id
case sensitive owner (*nix and Windows)
case sensitive Windows permission string
optional Windows VersionInfo fields
Used in:
Used in:
Used in:
,Used in:
Used in:
,Used in:
Used in:
name of the secret
true if the value is decrypted
encrypted bytes of the secret
decrypted bytes of the secret
string representation of the decrypted secret
Used in:
"local" or "remote"
Used in:
Used in:
Metadata header that's send with every message to the API ODR: defined in README.md
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,Name or unique identifier for an agent
Name of the type of agent (ex. beacon)
If the submission was automatically or manually sent
Name of the ODR the body must conform to
The semi-unique source for the data For host-related data_types, this is the hostname For network-related data_types, this is the network name For AD-related data_types, this is the full qualified domain name
Name or unique identifier for a project
Time the C2 platform sent the data to the ODS
Time the data should be removed from the ODS
Name or unique identifier for a message
Information about Windows named pipes.
Used in:
Case sensitive name.
Name of the server process that for named pipe, if known
PID of the server process that for named pipe, if known
Path of the server process that for named pipe, if known
Case sensitive Windows permission string
Addresses that may be used to refer to the host the agent is running on or a network resource on the host. Addresses are expected to conform to the public standard for the address type but there is no verification of this. As an example, ethernet addresses are expected to use a hyphen as a separator instead of a colon as per IEEE 802.3 but this is not verified.
Used in:
Case sensitive address
Case insensitive name for the address type TODO: Make into an enum: ipv4, ipv6, mac, host, netbios, spn, ethernet
Name or id for a network interface card
Connections between the host the agent is running with itself or another host. These could also be listening ports (i.e., netstat output) Addresses are expected to conform to the public standard for the address type but there is no verification of this as well. As an example, ethernet addresses are expected to use a hyphen as a separator instead of a colon as per IEEE 802.3 but this is not verified. The protocol list and matching source and destination lists represent the protocol stack used for a connection. The lists only need to represent a portion of the protocol stack and do not need to represent the entirety of it. The lists allow the ODR to be reused for any connection type an operator may be interested in without having to make a new ODR for each new connection type. local_address is treated as source, remote_address is treated as destination
Used in:
Local/source address for the connection
Remote/destination address for the connection
Protocol specification ("tcp,ipv4", "udp,ipv4", "tcp,ipv6", etc.)
Optional - case insensitive state of the connection (e.g., listen, established, etc.)
Optional - process ID handling the connection
Optional - process name/command line handling the connection
Optional - service name handling the connection
Protobuf representation of NoseyParker JSON output
Used in:
,Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
.docx/.pptx/.xlsx/etc.
Used in:
office2john hash representing the document password
.doc/.ppt/.xls/etc.
Used in:
office2john hash representing the document password
Represents any file data type specifically parsed by Nemesis This is the container for the above section of messages
Used in:
DpapiVault dpapi_vault = 43;
true if the parsed data has some kind of hash/password parsed
true if the file is encrypted in some way
Used in:
Used in:
Child listings for a specified path. The path must be in a UNC, URI, file system, or mapped path format. File system and mapped paths must be absolute and use forward slashes for separators (e.g. /). Paths are expected to be canonicalized but there is no verification of this. The mapped file format may be used to specify a registry keys as well using PowerShell convention of specifying the hive name as the drive (ex. HKLM:).
Used in:
Case sensitive resource path
Case sensitive child items
Used in:
pdf2john hash representing the document password
Used in:
Used in ProcessIngestion
Used in:
Security identifier, if known
Name of the principal, if known. The format should be the Down-Level Logon Name (e.g., DOMAIN\user)
Used in:
The name of the process
The current command line information
If known, the file that was executed
Process id
Parent process id
Architecture of the process
When the process was started
The amount of memory used by the process, in bytes
If present, Windows token information
Used in:
The category of the type of process (AV, EDR, infrastructure, etc.)
A description of process
Used in:
Original process data ingested
Categorization information about the process
Enrichments that ran and succeeded
Enrichments that ran but failed
Information about the currently running processes for the host the agent is running on. The file_name parameter must be in a UNC, file system, or mapped path format. File system and mapped paths must be absolute and use forward slashes for separators (e.g. /). Paths are expected to be canonicalized but there is no verification of this. Submission parameters may accommodate processes information for most operating systems. The only submission parameter that is required is the process id. Note that all start time parameters are expected to be from the Unix epoch.
Used in:
,The name of the process
The current command line information
If known, the file that was executed
Process id
Parent process id
Architecture of the process
When the process was started
The amount of memory used by the process, in bytes
If present, Windows token information
Data that may consist of anything. Developers and operators may use this type to push arbitrary data to the ODS to take advantage of any builtin or custom automated post processing the ODS performs. Example use cases include daily status reports, C2 logs, and other data that may be unique to the workflow of a team.
Used in:
User defined case insensitive keywords
Boolean for if data is a reference to a binary submission
Raw data or a UUID reference to data in the ODS
RawParsedData is for unstructured data meant for the user instead of an automated pipeline
Used in:
Used in:
true if the hive values are decrypted
bytes of the encrypted source for the HashedBootKey
bytes of the decrypted HashedBootKey
one or more local SAM hashes
Used in:
true if the hive values are decrypted
true if hive is post XP
enc/dec bytes of the LSASecret
enc/dec bytes of the NLKM key
one or more LSA secrets
one or more domain cached creds
Used in:
Used in:
Case-sensitive absolute registry key path. Use backslashes for separators (e.g. `HKLM\Software`) This is the only required field since without it the others do not make sense.Alert If all other fields aren't present, this indicates that the key exists and may or may not have values.
(optional) Case sensitive value name. Set this to the empty string to indicate a key's default value.
(optional) Type of the registry value
(optional) string representation of the value
(optional) string SDDL representation of key's security descriptor
(optional) string comma separated tags for the registry key
Used in:
Used in DotnetAssembly - TODO: combine into one block
Used in:
Network routing rules for the host the agent is running on. The network mask must be specified separately from the destination address. Addresses and network masks are also expected to conform to the public standard for the address type but there is no verification of this.
Used in:
Case sensitive address
Address of the routing host
Network mask for the destination address
Name or id for a network interface card
Protocol of the route rule
Used in:
true if the value is decrypted
true if the hash is a "new style" hash
name of the local user account
RID of the local user account
bytes of the enc/dec LM hash value
bytes of the enc/dec NT hash value
string representation of the total hash
Used in:
Original service data ingested
Categorization information about the service
Enrichments that ran and succeeded
Enrichments that ran but failed
Information about Windows services.
Used in:
,Case sensitive service name.
Case sensitive service display name.
Case sensitive service description
Case sensitive username the service starts as
Case insensitive state of the service (running, stopped, etc.)
Case insensitive start mode of the service (automatic, disabled, etc.)
Case insensitive type of the service.
Case sensitive, quote-escaped, binary path of the serbice binary + any arguments
Case sensitive file path of the service DLL being loaded into SVCHOST
Case sensitive Windows permission string
Used in:
Used in:
Used in:
,Used in:
Used in:
Used in:
Used in:
Used in:
,Used in:
Current time for the host
How long the host has been running in seconds
List of users, their session, and their time logged on
The time zone that the host uses
Used in:
,Used in:
Used in:
Privilege name (e.g., SeDebugPrivilege)
Is the privileged enabled
Used in:
Used in:
Used in:
Used in:
Current time information about the host the agent is running on. The subparameters of the Users list must delimited by spaces in CSV submissions. Note that all date time parameters are expected to be in UTC from the Unix epoch regardless of what time zone the host uses.
Used in:
Used in Pe - TODO: combine into one block?
Used in:
Used in:
,Used in:
Used in:
Used in:
Used in:
Used in:
bytes so we can decode UTF8/UTF16 as appropriate later