Skip to content
API Documentation
BastionGuard™
bastionguard::rootguard::ConsoleEventSink Class Referencefinal

#include <ConsoleEventSink.hpp>

Inheritance diagram for bastionguard::rootguard::ConsoleEventSink:
bastionguard::rootguard::IEventSink

Public Member Functions

void onEvent (const rg_event &event) noexcept override
Public Member Functions inherited from bastionguard::rootguard::IEventSink
virtual ~IEventSink ()=default

Static Private Member Functions

static const char * eventName (__u32 type) noexcept
static const char * verdictName (__u32 verdict) noexcept

Detailed Description

Definition at line 7 of file ConsoleEventSink.hpp.

Member Function Documentation

◆ eventName()

const char * bastionguard::rootguard::ConsoleEventSink::eventName ( __u32 type)
staticprivatenoexcept

Definition at line 9 of file ConsoleEventSink.cpp.

10{
11 switch (type) {
12 case RG_EVENT_SETUID: return "setuid";
13 case RG_EVENT_EXEC_PRIV: return "exec-priv";
14 case RG_EVENT_CREDENTIAL_ANOMALY: return "credential-anomaly";
15 case RG_EVENT_PERMISSION_CHANGE: return "permission-change";
16 case RG_EVENT_OWNER_CHANGE: return "owner-change";
17 case RG_EVENT_XATTR_CHANGE: return "xattr-change";
18 case RG_EVENT_ACL_CHANGE: return "acl-change";
19 case RG_EVENT_PROTECTED_UNLINK: return "protected-unlink";
20 case RG_EVENT_PROTECTED_RENAME: return "protected-rename";
21 case RG_EVENT_PROTECTED_HARDLINK: return "protected-hardlink";
22 case RG_EVENT_INTEGRITY_DRIFT: return "integrity-drift";
23 case RG_EVENT_INTEGRITY_RESTORED: return "integrity-restored";
24 case RG_EVENT_SERVICE_BLOCKED: return "service-blocked";
25 case RG_EVENT_FILE_RESTORED: return "file-restored";
26 case RG_EVENT_FILE_QUARANTINED: return "file-quarantined";
27 case RG_EVENT_PROTECTION_MODE_CHANGED: return "protection-mode-changed";
28 default: return "unknown";
29 }
30}
@ RG_EVENT_PROTECTED_RENAME
@ RG_EVENT_FILE_QUARANTINED
@ RG_EVENT_EXEC_PRIV
@ RG_EVENT_OWNER_CHANGE
@ RG_EVENT_ACL_CHANGE
@ RG_EVENT_PROTECTED_UNLINK
@ RG_EVENT_SETUID
@ RG_EVENT_SERVICE_BLOCKED
@ RG_EVENT_INTEGRITY_RESTORED
@ RG_EVENT_INTEGRITY_DRIFT
@ RG_EVENT_PROTECTED_HARDLINK
@ RG_EVENT_CREDENTIAL_ANOMALY
@ RG_EVENT_PROTECTION_MODE_CHANGED
@ RG_EVENT_XATTR_CHANGE
@ RG_EVENT_PERMISSION_CHANGE
@ RG_EVENT_FILE_RESTORED

References RG_EVENT_ACL_CHANGE, RG_EVENT_CREDENTIAL_ANOMALY, RG_EVENT_EXEC_PRIV, RG_EVENT_FILE_QUARANTINED, RG_EVENT_FILE_RESTORED, RG_EVENT_INTEGRITY_DRIFT, RG_EVENT_INTEGRITY_RESTORED, RG_EVENT_OWNER_CHANGE, RG_EVENT_PERMISSION_CHANGE, RG_EVENT_PROTECTED_HARDLINK, RG_EVENT_PROTECTED_RENAME, RG_EVENT_PROTECTED_UNLINK, RG_EVENT_PROTECTION_MODE_CHANGED, RG_EVENT_SERVICE_BLOCKED, RG_EVENT_SETUID, and RG_EVENT_XATTR_CHANGE.

Referenced by onEvent().

◆ onEvent()

void bastionguard::rootguard::ConsoleEventSink::onEvent ( const rg_event & event)
overridevirtualnoexcept

Implements bastionguard::rootguard::IEventSink.

Definition at line 62 of file ConsoleEventSink.cpp.

63{
64 try {
65 std::cout << '[' << verdictName(event.verdict) << "] "
66 << "type=" << eventName(event.event_type)
67 << " pid=" << event.pid
68 << " tgid=" << event.tgid
69 << " ppid=" << event.ppid
70 << " comm=" << event.comm
71 << " parent-comm=" << event.parent_comm
72 << " actor-dev=" << event.actor_file.device
73 << " actor-ino=" << event.actor_file.inode
74 << " parent-dev=" << event.parent_file.device
75 << " parent-ino=" << event.parent_file.inode
76 << " actor-start=" << event.actor_start_boottime_ns
77 << " euid=" << event.old_euid << "->" << event.new_euid
78 << " rule=" << event.rule_id
79 << " reason=0x" << std::hex << event.reason_flags << std::dec
80 << " aux=" << event.auxiliary
81 << " dev=" << event.file.device
82 << " ino=" << event.file.inode;
83
84 if (event.old_mode != 0 || event.new_mode != 0) {
85 std::cout << " mode=" << std::oct << event.old_mode
86 << "->" << event.new_mode << std::dec;
87 }
88 if (event.old_uid != 0 || event.new_uid != 0 ||
89 event.old_gid != 0 || event.new_gid != 0) {
90 std::cout << " owner=" << event.old_uid << ':' << event.old_gid
91 << "->" << event.new_uid << ':' << event.new_gid;
92 }
93 if (event.xattr_name[0] != '\0')
94 std::cout << " xattr=" << event.xattr_name;
95 std::cout << " file="
96 << (event.filename[0] != '\0' ? event.filename : "-")
97 << " path-resolution=" << pathResolutionName(event.path_resolution);
98 if (event.actor_executable[0] != '\0')
99 std::cout << " actor=" << event.actor_executable;
100 if (event.parent_executable[0] != '\0')
101 std::cout << " parent-exe=" << event.parent_executable;
102 std::cout << '\n';
103 std::cout.flush();
104 } catch (...) {
105 // Never allow an exception to cross the libbpf callback boundary.
106 }
107}
static const char * verdictName(__u32 verdict) noexcept
static const char * eventName(__u32 type) noexcept
const char * pathResolutionName(const __u32 resolution) noexcept
char xattr_name[RG_XATTR_NAME_LEN]
char parent_executable[RG_FILENAME_LEN]
char actor_executable[RG_FILENAME_LEN]
__u32 path_resolution

References eventName(), and verdictName().

◆ verdictName()

const char * bastionguard::rootguard::ConsoleEventSink::verdictName ( __u32 verdict)
staticprivatenoexcept

Definition at line 32 of file ConsoleEventSink.cpp.

33{
34 switch (verdict) {
35 case RG_VERDICT_AUDIT: return "AUDIT";
36 case RG_VERDICT_AUTHORIZED: return "AUTHORIZED";
37 case RG_VERDICT_BLOCKED: return "BLOCKED";
38 case RG_VERDICT_TRUSTED: return "TRUSTED";
39 case RG_VERDICT_ALERT: return "ALERT";
40 case RG_VERDICT_RESTORED: return "RESTORED";
41 default: return "UNKNOWN";
42 }
43}
@ RG_VERDICT_TRUSTED
@ RG_VERDICT_ALERT
@ RG_VERDICT_AUDIT
@ RG_VERDICT_RESTORED
@ RG_VERDICT_AUTHORIZED
@ RG_VERDICT_BLOCKED

References RG_VERDICT_ALERT, RG_VERDICT_AUDIT, RG_VERDICT_AUTHORIZED, RG_VERDICT_BLOCKED, RG_VERDICT_RESTORED, and RG_VERDICT_TRUSTED.

Referenced by onEvent().


The documentation for this class was generated from the following files: