| syntax = "proto3"; | |
| package schema; | |
| message SocketIp { | |
| uint32 family = 1; // AF_* for socket type. | |
| bytes ip = 2; // ip4 or ip6 address. | |
| uint32 port = 3; // port bind or connected. | |
| } | |
| message Socket { | |
| SocketIp local = 1; | |
| SocketIp remote = 2; // unset if not connected. | |
| } | |
| message Overlay { | |
| bool lower_layer = 1; | |
| bool upper_layer = 2; | |
| bytes modified_uuid = 3; // The process who first modified the file. | |
| } | |
| message File { | |
| bytes fullpath = 1; | |
| uint32 ino = 3; // inode number. | |
| oneof filesystem { | |
| Overlay overlayfs = 2; | |
| Socket socket = 4; | |
| } | |
| uint64 ctime = 5; | |
| } | |
| message ProcessArguments { | |
| repeated bytes argv = 1; // process arguments | |
| uint32 argv_truncated = 2; // number of characters truncated from argv | |
| repeated bytes envp = 3; // process environment variables | |
| uint32 envp_truncated = 4; // number of characters truncated from envp | |
| } | |
| message Descriptor { | |
| uint32 mode = 1; // file mode (stat st_mode) | |
| File file = 2; | |
| } | |
| message Streams { | |
| Descriptor stdin = 1; | |
| Descriptor stdout = 2; | |
| Descriptor stderr = 3; | |
| } | |
| message Process { | |
| uint64 creation_timestamp = 1; // Only populated in ExecuteEvent, in ns. | |
| bytes uuid = 2; | |
| uint32 pid = 3; | |
| File binary = 4; // Only populated in ExecuteEvent. | |
| uint32 parent_pid = 5; | |
| bytes parent_uuid = 6; | |
| uint64 container_id = 7; // unique id of process's container | |
| uint32 container_pid = 8; // pid inside the container namespace pid | |
| uint32 container_parent_pid = 9; // optional | |
| ProcessArguments args = 10; // Only populated in ExecuteEvent. | |
| Streams streams = 11; // Only populated in ExecuteEvent. | |
| uint64 exec_session_id = 12; // identifier set for kubectl exec sessions. | |
| } | |
| message Container { | |
| uint64 creation_timestamp = 1; // container create time in ns | |
| bytes pod_namespace = 2; | |
| bytes pod_name = 3; | |
| uint64 container_id = 4; // unique across lifetime of Node | |
| bytes container_name = 5; | |
| bytes container_image_uri = 6; | |
| repeated bytes labels = 7; | |
| bytes init_uuid = 8; | |
| bytes container_image_id = 9; | |
| } | |
| // A binary being executed. | |
| // e.g., execve() | |
| message ExecuteEvent { | |
| Process proc = 1; | |
| } | |
| // A process clone is being created. This message means that a cloning operation | |
| // is being attempted. It may be sent even if fork fails. | |
| message CloneEvent { | |
| Process proc = 1; | |
| } | |
| // Processes that are enumerated at startup will be sent with this event. There | |
| // is no distinction from events we would have seen from fork or exec. | |
| message EnumerateProcessEvent { | |
| Process proc = 1; | |
| } | |
| // Collect information about mmap/mprotect calls with the PROT_EXEC flag set. | |
| message MemoryExecEvent { | |
| Process proc = 1; // The origin process | |
| // The timestamp in ns when the memory was set executable | |
| uint64 prot_exec_timestamp = 2; | |
| // The prot flags granted by the kernel for the operation | |
| uint64 new_flags = 3; | |
| // The prot flags requested for the mprotect/mmap operation | |
| uint64 req_flags = 4; | |
| // The vm_flags prior to the mprotect operation, if relevant | |
| uint64 old_vm_flags = 5; | |
| // The operational flags for the mmap operation, if relevant | |
| uint64 mmap_flags = 6; | |
| // Derived from the file struct describing the fd being mapped | |
| File mapped_file = 7; | |
| enum Action { | |
| UNDEFINED = 0; | |
| MPROTECT = 1; | |
| MMAP_FILE = 2; | |
| } | |
| Action action = 8; | |
| uint64 start_addr = 9; // The executable memory region start addr | |
| uint64 end_addr = 10; // The executable memory region end addr | |
| // True if this event is a mmap of the process' binary | |
| bool is_initial_mmap = 11; | |
| } | |
| // Associate the following container information with all processes | |
| // that have the indicated container_id. | |
| message ContainerInfoEvent { | |
| Container container = 1; | |
| } | |
| // The process with the indicated pid has exited. | |
| message ExitEvent { | |
| bytes process_uuid = 1; | |
| } | |
| // Next ID: 8 | |
| message Event { | |
| oneof event { | |
| ExecuteEvent execute = 1; | |
| ContainerInfoEvent container = 2; | |
| ExitEvent exit = 3; | |
| MemoryExecEvent memexec = 4; | |
| CloneEvent clone = 5; | |
| EnumerateProcessEvent enumproc = 7; | |
| } | |
| uint64 timestamp = 6; // In nanoseconds | |
| } | |
| // Message sent by the daemonset to the LSM for container enlightenment. | |
| message ContainerReport { | |
| uint32 pid = 1; // Top pid of the running container. | |
| Container container = 2; // Information collected about the container. | |
| } |