Skip to content

Commit

Permalink
fix(ebpf): use kprobes for execute_finished (aquasecurity#4025)
Browse files Browse the repository at this point in the history
Recently, the process_execute_failed event implementation had been changed to use the new inner execute_finished event.
This event has used syscall tracepoints in its implementation.
However, tracepoints rely on debugfs, which was not a requirement of tracee until now.
To remove this requirement (at least for now), move to use architecture-specific kprobes instead.
  • Loading branch information
AlonZivony authored May 8, 2024
1 parent cf391b4 commit 14c106e
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 10 deletions.
8 changes: 4 additions & 4 deletions pkg/ebpf/c/tracee.bpf.c
Original file line number Diff line number Diff line change
Expand Up @@ -5042,17 +5042,17 @@ int BPF_KPROBE(trace_security_bprm_creds_for_exec2)
return execute_failed_tail2(ctx);
}

SEC("tracepoint/execute_finished")
int execute_finished(struct sys_exit_tracepoint_args *args)
SEC("kretprobe/execute_finished")
int BPF_KPROBE(execute_finished)
{
program_data_t p = {};
if (!init_program_data(&p, args, EXECUTE_FINISHED))
if (!init_program_data(&p, ctx, EXECUTE_FINISHED))
return -1;

if (!evaluate_scope_filters(&p))
return 0;

long exec_ret = args->ret;
long exec_ret = PT_REGS_RC(ctx);
return events_perf_submit(&p, exec_ret);
}

Expand Down
10 changes: 8 additions & 2 deletions pkg/ebpf/probes/probe_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,14 @@ func NewDefaultProbeGroup(module *bpf.Module, netEnabled bool, kSyms *helpers.Ke
SignalSchedProcessFork: NewTraceProbe(RawTracepoint, "sched:sched_process_fork", "sched_process_fork_signal"),
SignalSchedProcessExec: NewTraceProbe(RawTracepoint, "sched:sched_process_exec", "sched_process_exec_signal"),
SignalSchedProcessExit: NewTraceProbe(RawTracepoint, "sched:sched_process_exit", "sched_process_exit_signal"),
ExecuteFinished: NewTraceProbe(Tracepoint, "syscalls:sys_exit_execve", "execute_finished"),
ExecuteAtFinished: NewTraceProbe(Tracepoint, "syscalls:sys_exit_execveat", "execute_finished"),
ExecuteFinishedX86: NewTraceProbe(KretProbe, "__x64_sys_execve", "execute_finished"),
ExecuteAtFinishedX86: NewTraceProbe(KretProbe, "__x64_sys_execveat", "execute_finished"),
ExecuteFinishedCompatX86: NewTraceProbe(KretProbe, "__ia32_compat_sys_execve", "execute_finished"),
ExecuteAtFinishedCompatX86: NewTraceProbe(KretProbe, "__ia32_compat_sys_execveat", "execute_finished"),
ExecuteFinishedARM: NewTraceProbe(KretProbe, "__arm64_sys_execve", "execute_finished"),
ExecuteAtFinishedARM: NewTraceProbe(KretProbe, "__arm64_sys_execveat", "execute_finished"),
ExecuteFinishedCompatARM: NewTraceProbe(KretProbe, "__arm64_compat_sys_execve", "execute_finished"),
ExecuteAtFinishedCompatARM: NewTraceProbe(KretProbe, "__arm64_compat_sys_execveat", "execute_finished"),
}

if !netEnabled {
Expand Down
10 changes: 8 additions & 2 deletions pkg/ebpf/probes/probes.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,12 @@ const (
SignalSchedProcessFork
SignalSchedProcessExec
SignalSchedProcessExit
ExecuteFinished
ExecuteAtFinished
ExecuteFinishedX86
ExecuteAtFinishedX86
ExecuteFinishedCompatX86
ExecuteAtFinishedCompatX86
ExecuteFinishedARM
ExecuteAtFinishedARM
ExecuteFinishedCompatARM
ExecuteAtFinishedCompatARM
)
11 changes: 9 additions & 2 deletions pkg/events/core.go
Original file line number Diff line number Diff line change
Expand Up @@ -12896,8 +12896,15 @@ var CoreEvents = map[ID]Definition{
internal: true,
dependencies: Dependencies{
probes: []Probe{
{handle: probes.ExecuteFinished, required: false}, // TODO: Change to required once fallback are supported
{handle: probes.ExecuteAtFinished, required: false}, // TODO: Change to required once fallback are supported
// TODO: Change all of these probes to tracepoints (requires debugfs)
{handle: probes.ExecuteFinishedX86, required: false},
{handle: probes.ExecuteAtFinishedX86, required: false},
{handle: probes.ExecuteFinishedCompatX86, required: false},
{handle: probes.ExecuteAtFinishedCompatX86, required: false},
{handle: probes.ExecuteFinishedARM, required: false},
{handle: probes.ExecuteAtFinishedARM, required: false},
{handle: probes.ExecuteFinishedCompatARM, required: false},
{handle: probes.ExecuteAtFinishedCompatARM, required: false},
},
},
},
Expand Down

0 comments on commit 14c106e

Please sign in to comment.