From d0f9c0782db5583e3d22d87e46a47bce551eee92 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 10:30:50 -0600 Subject: [PATCH 01/42] Fix crash on element lookup failure --- libsshlog/bpf/sshtrace.bpf.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 01db148..5220f1e 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -253,9 +253,15 @@ int sys_exit_accept(struct trace_event_raw_sys_exit* ctx) struct socket_map* sockmap = bpf_map_lookup_elem(&socket_mapping, &pid_tgid); + // 1. Check if map lookup succeeded + if (sockmap == NULL) + return 1; + + // 2. Now it is safe to read sockmap->addr struct sockaddr* addr_peer = sockmap->addr; - if (sockmap == NULL || addr_peer == NULL) + // 3. Check if the internal pointer is valid + if (addr_peer == NULL) return 1; u32 sock_family = BPF_CORE_READ_USER(addr_peer, sa_family); @@ -1020,4 +1026,4 @@ int sys_exit_read(struct trace_event_raw_sys_exit* ctx) } return 0; -} \ No newline at end of file +} From adc4aec3e6e65892ed205847166c33553193c276 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 10:54:59 -0600 Subject: [PATCH 02/42] Updated bpf libraries to newer --- libsshlog/bpftool | 2 +- libsshlog/libbpf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsshlog/bpftool b/libsshlog/bpftool index 259f40f..e1bd72c 160000 --- a/libsshlog/bpftool +++ b/libsshlog/bpftool @@ -1 +1 @@ -Subproject commit 259f40fd5bde67025beb1371d269c91bbe5d42ed +Subproject commit e1bd72cee842b415b87e632425d04aa773344654 diff --git a/libsshlog/libbpf b/libsshlog/libbpf index f8cd00f..45e8934 160000 --- a/libsshlog/libbpf +++ b/libsshlog/libbpf @@ -1 +1 @@ -Subproject commit f8cd00f61302ca4d8645e007acf7f546dc323b33 +Subproject commit 45e89348ec74617c11cd5241ccd0ffc91dfd03c4 From e40dfe2025cafcfdd066bc12779a54e7f00afb59 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 10:55:16 -0600 Subject: [PATCH 03/42] Defined missing types --- libsshlog/bpf/sshtrace_types.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libsshlog/bpf/sshtrace_types.h b/libsshlog/bpf/sshtrace_types.h index f96f8a3..1717530 100644 --- a/libsshlog/bpf/sshtrace_types.h +++ b/libsshlog/bpf/sshtrace_types.h @@ -25,6 +25,16 @@ #ifndef __clang__ // Only include this for outside BPF code. BPF code compiles w/ clang #include +#else +// FIX: BPF (Clang) doesn't have stdint.h included, so we must define these manually. +// Assuming vmlinux.h or similar provides basic C types, or standard primitives: +typedef unsigned int uint32_t; +typedef int int32_t; +typedef unsigned short uint16_t; +typedef short int16_t; +typedef unsigned long long uint64_t; +typedef long long int64_t; +typedef _Bool bool; #endif // Read buffer bytes must be a power of 2 From d4d07f321ee63e7c3602a74a7f07da7476f777a0 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 10:55:25 -0600 Subject: [PATCH 04/42] Clang formatting --- libsshlog/bpf/sshtrace.bpf.c | 1291 +++++++++++++++------------------- 1 file changed, 584 insertions(+), 707 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 5220f1e..7ebf1db 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -19,14 +19,13 @@ * SPDX-License-Identifier: GPL-2.0 */ - +#include "sshtrace_events.h" +#include "sshtrace_heap.h" +#include "sshtrace_types.h" #include "vmlinux/vmlinux.h" +#include #include #include -#include -#include "sshtrace_events.h" -#include "sshtrace_types.h" -#include "sshtrace_heap.h" char LICENSE[] SEC("license") = "GPL"; @@ -37,7 +36,6 @@ char LICENSE[] SEC("license") = "GPL"; // 102 101 pt slave // 103 102 sh/bash or whatever - // Swap these defines out for debugging. Logs can be seen with: // sudo cat /sys/kernel/debug/tracing/trace_pipe #ifdef SSHTRACE_DEBUG @@ -46,77 +44,66 @@ char LICENSE[] SEC("license") = "GPL"; #define log_printk(fmt, args...) #endif - #ifdef SSHTRACE_USE_RINGBUF - // Ringbuf is more efficient but requires at least kernel version 5.8 - struct { - __uint(type, BPF_MAP_TYPE_RINGBUF); - __uint(max_entries, 4096 * 1024 /* 4 MB */); - } events SEC(".maps"); +// Ringbuf is more efficient but requires at least kernel version 5.8 +struct { + __uint(type, BPF_MAP_TYPE_RINGBUF); + __uint(max_entries, 4096 * 1024 /* 4 MB */); +} events SEC(".maps"); #else - struct { - __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); - __uint(key_size, sizeof(u32)); - __uint(value_size, sizeof(u32)); - } events SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); + __uint(key_size, sizeof(u32)); + __uint(value_size, sizeof(u32)); +} events SEC(".maps"); #endif -struct socket_map -{ - struct sockaddr* addr; - struct tcpinfo recent_tcpinfo; +struct socket_map { + struct sockaddr* addr; + struct tcpinfo recent_tcpinfo; }; // Just used to temporarily map a pointer between enter_accept and exit_accept struct { - __uint(type, BPF_MAP_TYPE_LRU_HASH); - __uint(max_entries, 100); - __type(key, u32); - __type(value, struct socket_map ); + __uint(type, BPF_MAP_TYPE_LRU_HASH); + __uint(max_entries, 100); + __type(key, u32); + __type(value, struct socket_map); } socket_mapping SEC(".maps"); - - // Provide a sane limit on buffer size for tracking concurrently running programs (hash size) // memory usage = MAX_CONCURRENT_PROGRAMS * (STDOUT_ACTUAL_MEM_USAGE_BYTES + sizeof(command2) + COMMAND_ARGS_ACTUAL_MEM_USAGE_BYTES) // so for 2000, about ~20MB #define MAX_CONCURRENT_PROGRAMS 2000 - struct { - __uint(type, BPF_MAP_TYPE_LRU_HASH); - __uint(max_entries, MAX_CONCURRENT_PROGRAMS); - __type(key, u32); - __type(value, struct command); + __uint(type, BPF_MAP_TYPE_LRU_HASH); + __uint(max_entries, MAX_CONCURRENT_PROGRAMS); + __type(key, u32); + __type(value, struct command); } commands SEC(".maps"); - - #define MAX_CONNECTIONS 10000 struct { - __uint(type, BPF_MAP_TYPE_LRU_HASH); - __uint(max_entries, MAX_CONNECTIONS); - __type(key, u32); - __type(value, struct connection); + __uint(type, BPF_MAP_TYPE_LRU_HASH); + __uint(max_entries, MAX_CONNECTIONS); + __type(key, u32); + __type(value, struct connection); } connections SEC(".maps"); - // Maps the data pointer between read enter and read exit -struct read_buffer_map -{ - int fd; - void* data_ptr; +struct read_buffer_map { + int fd; + void* data_ptr; }; struct { - __uint(type, BPF_MAP_TYPE_LRU_HASH); - __uint(max_entries, MAX_CONNECTIONS); - __type(key, u32); - __type(value, struct read_buffer_map); + __uint(type, BPF_MAP_TYPE_LRU_HASH); + __uint(max_entries, MAX_CONNECTIONS); + __type(key, u32); + __type(value, struct read_buffer_map); } connections_read_mapping SEC(".maps"); - - // Local constants since we can't include std headers static const int AF_UNIX = 1; static const int AF_INET = 2; @@ -126,184 +113,161 @@ static const int STDIN_FILENO = 0; static const int STDOUT_FILENO = 1; static const int STDERR_FILENO = 2; -static void push_event(void* context, void* event, size_t event_size) -{ +static void push_event(void* context, void* event, size_t event_size) { #ifdef SSHTRACE_USE_RINGBUF -// TODO consider more efficient bpf_ringbuf_reserve()/bpf_ringbuf_commit() - int64_t success = bpf_ringbuf_output(&events, event, event_size, 0); - if (success < 0) - log_printk("event push error code: %d", success); + // TODO consider more efficient bpf_ringbuf_reserve()/bpf_ringbuf_commit() + int64_t success = bpf_ringbuf_output(&events, event, event_size, 0); + if (success < 0) + log_printk("event push error code: %d", success); #else - bpf_perf_event_output(context, &events, BPF_F_CURRENT_CPU, event, event_size); + bpf_perf_event_output(context, &events, BPF_F_CURRENT_CPU, event, event_size); #endif } -static int proc_is_sshd(void) -{ - // Just needs to be bigger than sshd\0 - char comm[6]; +static int proc_is_sshd(void) { + // Just needs to be bigger than sshd\0 + char comm[6]; - bpf_get_current_comm(&comm, sizeof(comm)); + bpf_get_current_comm(&comm, sizeof(comm)); - // Check that process name is "sshd" - if (comm[0] == 's' && comm[1] == 's' && comm[2] == 'h' && comm[3] == 'd' && comm[4] == '\0') - return 1; - return 0; + // Check that process name is "sshd" + if (comm[0] == 's' && comm[1] == 's' && comm[2] == 'h' && comm[3] == 'd' && comm[4] == '\0') + return 1; + return 0; } -static u64 get_parent_pid(void) -{ - struct task_struct *curr = (struct task_struct *)bpf_get_current_task(); - struct task_struct *parent = (struct task_struct *)BPF_CORE_READ(curr, parent); +static u64 get_parent_pid(void) { + struct task_struct* curr = (struct task_struct*) bpf_get_current_task(); + struct task_struct* parent = (struct task_struct*) BPF_CORE_READ(curr, parent); - if (parent == NULL) - return 0; + if (parent == NULL) + return 0; - u32 p_tgid = BPF_CORE_READ(parent, tgid); - u32 p_pid = BPF_CORE_READ(parent, pid); - return ((u64)p_tgid << 32) | p_pid; + u32 p_tgid = BPF_CORE_READ(parent, tgid); + u32 p_pid = BPF_CORE_READ(parent, pid); + return ((u64) p_tgid << 32) | p_pid; } -static u64 get_grandparent_pid(void) -{ - struct task_struct *curr = (struct task_struct *)bpf_get_current_task(); - struct task_struct *parent = (struct task_struct *)BPF_CORE_READ(curr, parent); - struct task_struct *gparent = (struct task_struct *)BPF_CORE_READ(parent, parent); +static u64 get_grandparent_pid(void) { + struct task_struct* curr = (struct task_struct*) bpf_get_current_task(); + struct task_struct* parent = (struct task_struct*) BPF_CORE_READ(curr, parent); + struct task_struct* gparent = (struct task_struct*) BPF_CORE_READ(parent, parent); - if (parent == NULL) - return 0; + if (parent == NULL) + return 0; - u32 p_tgid = BPF_CORE_READ(gparent, tgid); - u32 p_pid = BPF_CORE_READ(gparent, pid); + u32 p_tgid = BPF_CORE_READ(gparent, tgid); + u32 p_pid = BPF_CORE_READ(gparent, pid); - return ((u64)p_tgid << 32) | p_pid; + return ((u64) p_tgid << 32) | p_pid; } -static struct connection *find_ancestor_connection(void) -{ - struct task_struct *tsk = (struct task_struct *)bpf_get_current_task(); - struct connection *conn; - - //log_printk("ancestor search start"); +static struct connection* find_ancestor_connection(void) { + struct task_struct* tsk = (struct task_struct*) bpf_get_current_task(); + struct connection* conn; - // put a max cap on looping back to parent - for (int i = 0; i < 20; i++) - { - u32 tgid = BPF_CORE_READ(tsk, tgid); - if (tgid <= 1) - { - //log_printk("Reached root tgid %u\n", tgid); - break; - } + //log_printk("ancestor search start"); - //log_printk("my tgid %u\n", tgid); + // put a max cap on looping back to parent + for (int i = 0; i < 20; i++) { + u32 tgid = BPF_CORE_READ(tsk, tgid); + if (tgid <= 1) { + //log_printk("Reached root tgid %u\n", tgid); + break; + } - conn = bpf_map_lookup_elem(&connections, &tgid); - if (conn != NULL) - return conn; - tsk = (struct task_struct *)BPF_CORE_READ(tsk, parent); + //log_printk("my tgid %u\n", tgid); - } + conn = bpf_map_lookup_elem(&connections, &tgid); + if (conn != NULL) + return conn; + tsk = (struct task_struct*) BPF_CORE_READ(tsk, parent); + } - - return NULL; + return NULL; } - SEC("tracepoint/syscalls/sys_enter_accept") -int sys_enter_accept(struct trace_event_raw_sys_enter* ctx) -{ - // field:int fd; offset:16; size:8; signed:0; - // field:struct sockaddr * upeer_sockaddr; offset:24; size:8; signed:0; - // field:int * upeer_addrlen; offset:32; size:8; signed:0; +int sys_enter_accept(struct trace_event_raw_sys_enter* ctx) { + // field:int fd; offset:16; size:8; signed:0; + // field:struct sockaddr * upeer_sockaddr; offset:24; size:8; signed:0; + // field:int * upeer_addrlen; offset:32; size:8; signed:0; - if (!proc_is_sshd()) - return 1; + if (!proc_is_sshd()) + return 1; - u64 pid_tgid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); - struct socket_map sockmap = {0}; - sockmap.recent_tcpinfo.client_ip = 0; - sockmap.recent_tcpinfo.server_ip = 0; - sockmap.recent_tcpinfo.client_port = 0; - sockmap.recent_tcpinfo.server_port = 0; + struct socket_map sockmap = {0}; + sockmap.recent_tcpinfo.client_ip = 0; + sockmap.recent_tcpinfo.server_ip = 0; + sockmap.recent_tcpinfo.client_port = 0; + sockmap.recent_tcpinfo.server_port = 0; - uint32_t socket_id = (uint32_t) BPF_CORE_READ(ctx, args[0]); - sockmap.addr = (struct sockaddr*) BPF_CORE_READ(ctx, args[1]); - //int* addrlen = (int*) BPF_CORE_READ(ctx, args[2]); + uint32_t socket_id = (uint32_t) BPF_CORE_READ(ctx, args[0]); + sockmap.addr = (struct sockaddr*) BPF_CORE_READ(ctx, args[1]); + //int* addrlen = (int*) BPF_CORE_READ(ctx, args[2]); + bpf_map_update_elem(&socket_mapping, &pid_tgid, &sockmap, BPF_ANY); - bpf_map_update_elem(&socket_mapping, &pid_tgid, &sockmap, BPF_ANY); - - return 0; + return 0; } SEC("tracepoint/syscalls/sys_exit_accept") -int sys_exit_accept(struct trace_event_raw_sys_exit* ctx) -{ - if (!proc_is_sshd()) - return 1; +int sys_exit_accept(struct trace_event_raw_sys_exit* ctx) { + if (!proc_is_sshd()) + return 1; - u64 pid_tgid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); + int32_t ret = (int32_t) BPF_CORE_READ(ctx, ret); + struct socket_map* sockmap = bpf_map_lookup_elem(&socket_mapping, &pid_tgid); - int32_t ret = (int32_t) BPF_CORE_READ(ctx, ret); + // 1. Check if map lookup succeeded + if (sockmap == NULL) + return 1; - struct socket_map* sockmap = bpf_map_lookup_elem(&socket_mapping, &pid_tgid); + // 2. Now it is safe to read sockmap->addr + struct sockaddr* addr_peer = sockmap->addr; - // 1. Check if map lookup succeeded - if (sockmap == NULL) - return 1; + // 3. Check if the internal pointer is valid + if (addr_peer == NULL) + return 1; - // 2. Now it is safe to read sockmap->addr - struct sockaddr* addr_peer = sockmap->addr; + u32 sock_family = BPF_CORE_READ_USER(addr_peer, sa_family); - // 3. Check if the internal pointer is valid - if (addr_peer == NULL) - return 1; + if (sock_family == AF_INET) { + struct sockaddr_in* inet_socket = (struct sockaddr_in*) addr_peer; - u32 sock_family = BPF_CORE_READ_USER(addr_peer, sa_family); + u16 port = BPF_CORE_READ_USER(inet_socket, sin_port); // & 0xffff; + port = __builtin_bswap16(port); - if (sock_family == AF_INET) - { - struct sockaddr_in* inet_socket = (struct sockaddr_in*) addr_peer; - - u16 port = BPF_CORE_READ_USER(inet_socket, sin_port);// & 0xffff; - port = __builtin_bswap16(port); + u32 ip_address = BPF_CORE_READ_USER(inet_socket, sin_addr.s_addr); + //ip_address = __builtin_bswap32(ip_address); - u32 ip_address = BPF_CORE_READ_USER(inet_socket, sin_addr.s_addr); - //ip_address = __builtin_bswap32(ip_address); + sockmap->recent_tcpinfo.client_ip = ip_address; + sockmap->recent_tcpinfo.server_ip = 0; // Unknown + sockmap->recent_tcpinfo.client_port = port; + sockmap->recent_tcpinfo.server_port = 0; // Unknown - sockmap->recent_tcpinfo.client_ip = ip_address; - sockmap->recent_tcpinfo.server_ip = 0; // Unknown - sockmap->recent_tcpinfo.client_port = port; - sockmap->recent_tcpinfo.server_port = 0; // Unknown + } else if (sock_family == AF_INET6) { + // TODO: support IPv6 + // struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr; + // port = ntohs(s->sin6_port); + // inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof ipstr); + } - } - else if (sock_family == AF_INET6) - { - // TODO: support IPv6 - // struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr; - // port = ntohs(s->sin6_port); - // inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof ipstr); - } + log_printk("sys_exit_accept tgid: %d fd: %d", pid_tgid, ret); - - log_printk("sys_exit_accept tgid: %d fd: %d", pid_tgid, ret); - - - return 0; + return 0; } - - - // TODO: This also works, and provides more information (server port and IP address) // But I do not like that it is less maintainable (i.e., it's a kernel probe instead of tracepoint) // SEC("kretprobe/inet_csk_accept") -// int BPF_KRETPROBE(inet_csk_accept_ret, struct sock *newsk) +// int BPF_KRETPROBE(inet_csk_accept_ret, struct sock *newsk) // { // if (!proc_is_sshd()) @@ -317,14 +281,12 @@ int sys_exit_accept(struct trace_event_raw_sys_exit* ctx) // if ((listener = get_sshd_listener()) == NULL) // return 1; - + // u16 family = 0; // bpf_core_read(&family, sizeof(family), &newsk->__sk_common.skc_family); - // if (family == AF_INET) // { - // u16 client_port = 0, server_port = 0; // u32 client_ip = 0, server_ip = 0; @@ -345,685 +307,600 @@ int sys_exit_accept(struct trace_event_raw_sys_exit* ctx) // listener->recent_tcpinfo.server_ip = server_ip; // listener->recent_tcpinfo.client_port = client_port; // listener->recent_tcpinfo.server_port = server_port; - + // log_printk("inet_csk_accept fd: %d %d %u", pid_tgid, client_port, server_port); // } - // return 0; // } +static bool is_ptm_clone(u64 pid_tgid) { + struct socket_map* sockmap = bpf_map_lookup_elem(&socket_mapping, &pid_tgid); + if (sockmap == NULL) + return false; - - - - -static bool is_ptm_clone(u64 pid_tgid) -{ - struct socket_map *sockmap = bpf_map_lookup_elem(&socket_mapping, &pid_tgid); - - if (sockmap == NULL) - return false; - - return true; + return true; } +static void handle_new_connection(void* context, u32 sshd_tgid, u32 conn_tgid) { -static void handle_new_connection(void* context, u32 sshd_tgid, u32 conn_tgid) -{ + struct socket_map* sockmap = bpf_map_lookup_elem(&socket_mapping, &sshd_tgid); + struct connection conn = {}; - struct socket_map *sockmap = bpf_map_lookup_elem(&socket_mapping, &sshd_tgid); - struct connection conn = {}; + log_printk("conn_tgid %d parent %d\n", conn_tgid, sshd_tgid); + if (sockmap == NULL) + return; - log_printk("conn_tgid %d parent %d\n", conn_tgid, sshd_tgid); - if (sockmap == NULL) - return; + conn.ptm_tgid = conn_tgid; + conn.user_id = -1; + conn.pts_tgid = -1; + conn.shell_tgid = -1; + conn.tty_id = -1; + conn.tcp_info = sockmap->recent_tcpinfo; - conn.ptm_tgid = conn_tgid; - conn.user_id = -1; - conn.pts_tgid = -1; - conn.shell_tgid = -1; - conn.tty_id = -1; - conn.tcp_info = sockmap->recent_tcpinfo; + conn.start_time = bpf_ktime_get_ns(); + conn.end_time = 0; + conn.rate_limit_epoch_second = 0; + conn.rate_limit_hit = false; + conn.rate_limit_total_bytes_this_second = 0; - conn.start_time = bpf_ktime_get_ns(); - conn.end_time = 0; - conn.rate_limit_epoch_second = 0; - conn.rate_limit_hit = false; - conn.rate_limit_total_bytes_this_second = 0; + // cleanup sockmap + bpf_map_delete_elem(&socket_mapping, &sshd_tgid); + bpf_map_update_elem(&connections, &conn_tgid, &conn, BPF_ANY); - // cleanup sockmap - bpf_map_delete_elem(&socket_mapping, &sshd_tgid); - - bpf_map_update_elem(&connections, &conn_tgid, &conn, BPF_ANY); + // The PTM has been created now, go ahead and send the event + int zero = 0; + struct connection_event* e = bpf_map_lookup_elem(&connectionevent_heap, &zero); + if (!e) + return; - // The PTM has been created now, go ahead and send the event - int zero = 0; - struct connection_event* e = bpf_map_lookup_elem(&connectionevent_heap, &zero); - if (!e) - return; + e->event_type = SSHTRACE_EVENT_NEW_CONNECTION; + e->ptm_pid = conn.ptm_tgid; + e->conn = conn; + push_event(context, e, sizeof(struct connection_event)); - e->event_type = SSHTRACE_EVENT_NEW_CONNECTION; - e->ptm_pid = conn.ptm_tgid; - e->conn = conn; - push_event(context, e, sizeof(struct connection_event)); - - log_printk("conn ptm_tgid %u\n", conn_tgid); + log_printk("conn ptm_tgid %u\n", conn_tgid); } -static bool is_pts_clone(u32 tgid) -{ - struct connection *conn; +static bool is_pts_clone(u32 tgid) { + struct connection* conn; - conn = bpf_map_lookup_elem(&connections, &tgid); - if (conn == NULL) - return false; + conn = bpf_map_lookup_elem(&connections, &tgid); + if (conn == NULL) + return false; - return tgid == conn->ptm_tgid; + return tgid == conn->ptm_tgid; } +static bool is_bash_clone() { + u32 parent_tgid = get_parent_pid() >> 32; -static bool is_bash_clone() -{ - u32 parent_tgid = get_parent_pid() >> 32; - - struct connection* conn = bpf_map_lookup_elem(&connections, &parent_tgid); - if (conn == NULL) - return false; + struct connection* conn = bpf_map_lookup_elem(&connections, &parent_tgid); + if (conn == NULL) + return false; - return true; + return true; } - SEC("tracepoint/syscalls/sys_exit_clone") -int sys_exit_clone(struct trace_event_raw_sys_exit* ctx) -{ - u64 pid_tgid = bpf_get_current_pid_tgid(); - - // mhill add - if (!proc_is_sshd()) - return 1; - - log_printk("sys_exit_clone\n"); +int sys_exit_clone(struct trace_event_raw_sys_exit* ctx) { + u64 pid_tgid = bpf_get_current_pid_tgid(); - int32_t ret = (int32_t) BPF_CORE_READ(ctx, ret); + // mhill add + if (!proc_is_sshd()) + return 1; - u32 child_tgid = ret; + log_printk("sys_exit_clone\n"); + int32_t ret = (int32_t) BPF_CORE_READ(ctx, ret); - if (is_pts_clone(pid_tgid >> 32)) { - log_printk("CLONE CONNECTION parent pid %d child pid %d", pid_tgid, child_tgid); - - struct connection *conn = bpf_map_lookup_elem(&connections, &pid_tgid); + u32 child_tgid = ret; - if (conn != NULL) - { + if (is_pts_clone(pid_tgid >> 32)) { + log_printk("CLONE CONNECTION parent pid %d child pid %d", pid_tgid, child_tgid); - conn->pts_tgid = child_tgid; + struct connection* conn = bpf_map_lookup_elem(&connections, &pid_tgid); - } - - return 0; - } + if (conn != NULL) { + conn->pts_tgid = child_tgid; + } - if (is_ptm_clone(pid_tgid)) { - log_printk("NEW CONNECTION parent pid %d child pid %d", pid_tgid, child_tgid); - handle_new_connection(ctx, pid_tgid, child_tgid); + return 0; + } + if (is_ptm_clone(pid_tgid)) { + log_printk("NEW CONNECTION parent pid %d child pid %d", pid_tgid, child_tgid); + handle_new_connection(ctx, pid_tgid, child_tgid); - return 0; - } + return 0; + } + if (is_bash_clone() && child_tgid != 0) { - if (is_bash_clone() && child_tgid != 0) { + log_printk("NEW BASH CONNECTION parent pid %d child pid %d", pid_tgid, child_tgid); - log_printk("NEW BASH CONNECTION parent pid %d child pid %d", pid_tgid, child_tgid); + // The FD mapping for PTS is too squirrelly. Instead of chasing the ioctl -> dup calls + // (which could change between openssh versions) a more reliable method seems to be, + // Wait for the pts proc to fork a terminal, and when it does, pop a message out to user-space to + // go lookup the FDs for the pts sessions in /proc/[pid]/fd/. Then update the map back here + // It's possible we miss a little bit of initial terminal reads due to the poll interval - // The FD mapping for PTS is too squirrelly. Instead of chasing the ioctl -> dup calls - // (which could change between openssh versions) a more reliable method seems to be, - // Wait for the pts proc to fork a terminal, and when it does, pop a message out to user-space to - // go lookup the FDs for the pts sessions in /proc/[pid]/fd/. Then update the map back here - // It's possible we miss a little bit of initial terminal reads due to the poll interval + // We'll need to have this logic in userspace anyway, for when our proc is started while + // sessions already exist monitor existing sessions - // We'll need to have this logic in userspace anyway, for when our proc is started while - // sessions already exist monitor existing sessions + struct bash_clone_event e; + e.event_type = SSHTRACE_EVENT_BASH_CLONED; + e.pts_pid = pid_tgid; + e.bash_pid = child_tgid; + e.ptm_pid = get_parent_pid() >> 32; - struct bash_clone_event e; - e.event_type = SSHTRACE_EVENT_BASH_CLONED; - e.pts_pid = pid_tgid; - e.bash_pid = child_tgid; - e.ptm_pid = get_parent_pid() >> 32; - - push_event(ctx, &e, sizeof(e)); - } + push_event(ctx, &e, sizeof(e)); + } - return 0; + return 0; } -#define O_WRONLY 01 +#define O_WRONLY 01 SEC("tracepoint/syscalls/sys_enter_openat") -int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) -{ +int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) { - // field:int dfd; offset:16; size:8; signed:0; - // field:const char * filename; offset:24; size:8; signed:0; - // field:int flags; offset:32; size:8; signed:0; - // field:umode_t mode; offset:40; size:8; signed:0; + // field:int dfd; offset:16; size:8; signed:0; + // field:const char * filename; offset:24; size:8; signed:0; + // field:int flags; offset:32; size:8; signed:0; + // field:umode_t mode; offset:40; size:8; signed:0; - // Just needs to be bigger than scp\0 - char pname[5]; + // Just needs to be bigger than scp\0 + char pname[5]; - bpf_get_current_comm(&pname, sizeof(pname)); + bpf_get_current_comm(&pname, sizeof(pname)); - // Check that process name is "scp" - if (pname[0] != 's' || pname[1] != 'c' || pname[2] != 'p' || pname[3] != '\0') - { - return 0; - } - - // This needs to be a direct descendent of PTS (i.e., no bash or shell in between) - // Otherwise, this is not an scp upload - u32 gparent_tgid = get_grandparent_pid() >> 32; - struct connection* conn = bpf_map_lookup_elem(&connections, &gparent_tgid); - if (conn != NULL) - { - + // Check that process name is "scp" + if (pname[0] != 's' || pname[1] != 'c' || pname[2] != 'p' || pname[3] != '\0') { + return 0; + } - u32 flags = (size_t) BPF_CORE_READ(ctx, args[2]); - - if (flags & O_WRONLY) - { - u32 mode = (size_t) BPF_CORE_READ(ctx, args[3]); + // This needs to be a direct descendent of PTS (i.e., no bash or shell in between) + // Otherwise, this is not an scp upload + u32 gparent_tgid = get_grandparent_pid() >> 32; + struct connection* conn = bpf_map_lookup_elem(&connections, &gparent_tgid); + if (conn != NULL) { + u32 flags = (size_t) BPF_CORE_READ(ctx, args[2]); - int zero = 0; - struct file_upload_event* e = bpf_map_lookup_elem(&fileuploadevent_heap, &zero); - if (!e) - return 0; + if (flags & O_WRONLY) { + u32 mode = (size_t) BPF_CORE_READ(ctx, args[3]); - e->event_type = SSHTRACE_EVENT_FILE_UPLOAD; - e->ptm_pid = conn->ptm_tgid; - e->file_mode = mode; + int zero = 0; + struct file_upload_event* e = bpf_map_lookup_elem(&fileuploadevent_heap, &zero); + if (!e) + return 0; - const char* filename_ptr = (const char*) BPF_CORE_READ(ctx, args[1]); - //static char filename[255]; - bpf_core_read_user_str(e->target_path, sizeof(e->target_path), ctx->args[1]); + e->event_type = SSHTRACE_EVENT_FILE_UPLOAD; + e->ptm_pid = conn->ptm_tgid; + e->file_mode = mode; - u32 current_tgid = bpf_get_current_pid_tgid() >> 32; - log_printk("scp open event: pid: %d ptm_pid %d - %s", current_tgid, e->ptm_pid, e->target_path); + const char* filename_ptr = (const char*) BPF_CORE_READ(ctx, args[1]); + //static char filename[255]; + bpf_core_read_user_str(e->target_path, sizeof(e->target_path), ctx->args[1]); + u32 current_tgid = bpf_get_current_pid_tgid() >> 32; + log_printk("scp open event: pid: %d ptm_pid %d - %s", current_tgid, e->ptm_pid, e->target_path); - push_event(ctx, e, sizeof(struct file_upload_event)); + push_event(ctx, e, sizeof(struct file_upload_event)); - // u32 dfd = (size_t) BPF_CORE_READ(ctx, args[0]); - // log_printk("open: tgid: %d - %s", current_tgid, filename);) - // log_printk("open: dfd: %d flags: %d mode: %d", dfd, flags, mode; - } + // u32 dfd = (size_t) BPF_CORE_READ(ctx, args[0]); + // log_printk("open: tgid: %d - %s", current_tgid, filename);) + // log_printk("open: dfd: %d flags: %d mode: %d", dfd, flags, mode; + } + } - - } - - return 0; + return 0; } +static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { + // field:const char * filename; offset:16; size:8; signed:0; + // field:const char *const * argv; offset:24; size:8; signed:0; + // field:const char *const * envp; offset:32; size:8; signed:0; + u32 parent_tgid = get_parent_pid() >> 32; + u32 current_tgid = bpf_get_current_pid_tgid() >> 32; -static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) -{ - // field:const char * filename; offset:16; size:8; signed:0; - // field:const char *const * argv; offset:24; size:8; signed:0; - // field:const char *const * envp; offset:32; size:8; signed:0; - - - u32 parent_tgid = get_parent_pid() >> 32; - u32 current_tgid = bpf_get_current_pid_tgid() >> 32; - - const char* filename = (const char*) BPF_CORE_READ(ctx, args[0]); - const char* const* argv = (const char* const*) BPF_CORE_READ(ctx, args[1]); - const char* const* envp = (const char* const*) BPF_CORE_READ(ctx, args[2]); + const char* filename = (const char*) BPF_CORE_READ(ctx, args[0]); + const char* const* argv = (const char* const*) BPF_CORE_READ(ctx, args[1]); + const char* const* envp = (const char* const*) BPF_CORE_READ(ctx, args[2]); - // FOR TROUBLESHOOTING - // static char fn[255] = {0}; - // bpf_core_read_user_str(fn, sizeof(fn), filename); - // log_printk("sys_enter_execve: parent_tgid: %d, current_tgid: %d - %s", parent_tgid, current_tgid, fn); + // FOR TROUBLESHOOTING + // static char fn[255] = {0}; + // bpf_core_read_user_str(fn, sizeof(fn), filename); + // log_printk("sys_enter_execve: parent_tgid: %d, current_tgid: %d - %s", parent_tgid, current_tgid, fn); + struct connection* conn; - struct connection *conn; + int zero = 0; + struct command* cmd = bpf_map_lookup_elem(&command_heap, &zero); + if (!cmd) + return 0; - - int zero = 0; - struct command* cmd = bpf_map_lookup_elem(&command_heap, &zero); - if (!cmd) - return 0; + if ((conn = find_ancestor_connection()) == NULL) + return 1; - if ((conn = find_ancestor_connection()) == NULL) - return 1; + cmd->filename[0] = '\0'; + cmd->start_time = bpf_ktime_get_ns(); + cmd->end_time = 0; + cmd->exit_code = -1; + cmd->parent_tgid = parent_tgid; + cmd->current_tgid = current_tgid; + cmd->stdout_offset = 0; + cmd->conn_tgid = conn->ptm_tgid; + cmd->stdout[0] = '\0'; + cmd->args[0] = '\0'; - cmd->filename[0] = '\0'; - cmd->start_time = bpf_ktime_get_ns(); - cmd->end_time = 0; - cmd->exit_code = -1; - cmd->parent_tgid = parent_tgid; - cmd->current_tgid = current_tgid; - cmd->stdout_offset = 0; - cmd->conn_tgid = conn->ptm_tgid; - cmd->stdout[0] = '\0'; - cmd->args[0] = '\0'; + // Copy the "Command" from args[0] rather than filename + // because filename without path is bounded at 255 bytes - // Copy the "Command" from args[0] rather than filename - // because filename without path is bounded at 255 bytes + char* arg0_ptr = NULL; + bpf_core_read_user(&arg0_ptr, sizeof(arg0_ptr), argv); + bpf_core_read_user_str(cmd->filename, sizeof(cmd->filename), arg0_ptr); - char* arg0_ptr = NULL; - bpf_core_read_user(&arg0_ptr, sizeof(arg0_ptr), argv); - bpf_core_read_user_str(cmd->filename, sizeof(cmd->filename), arg0_ptr); + log_printk("sys_enter_execve: conn tgid: %d, tgid: %d - %s", conn->ptm_tgid, current_tgid, cmd->filename); + //bpf_core_read_str(cmd.filename, sizeof(cmd.filename), args->filename); - log_printk("sys_enter_execve: conn tgid: %d, tgid: %d - %s", conn->ptm_tgid, current_tgid, cmd->filename); + // Read full filename and args data into map + u32 argoffset = 0; + // Copy the filename first, this is the full path not just the filename from args + int bytes_read = argoffset = bpf_core_read_user_str(cmd->args, COMMAND_ARGS_MAX_BYTES, filename); + log_printk("args copied bytes %d - %s", bytes_read, filename); + argoffset = argoffset & COMMAND_ARGS_MAX_BYTES - 1; + cmd->args[(argoffset - 1) & COMMAND_ARGS_MAX_BYTES - 1] = ' '; - //bpf_core_read_str(cmd.filename, sizeof(cmd.filename), args->filename); + for (u32 i = 1; i < sizeof(argv); i++) { + char* argv_p = NULL; + bpf_core_read_user(&argv_p, sizeof(argv_p), argv + i); + if (!argv_p) + break; + bytes_read = bpf_core_read_user_str(cmd->args + argoffset, COMMAND_ARGS_MAX_BYTES - argoffset, argv_p); + //int bytes_read = bpf_core_read_user_str(cmd.args, COMMAND_ARGS_MAX_BYTES , argv_p); + log_printk("args copied bytes %d - %s", bytes_read, argv_p); + if (bytes_read > 0) { + argoffset += bytes_read; + // Replace the '\0' with spaces between the args + cmd->args[(argoffset - 1) & COMMAND_ARGS_MAX_BYTES - 1] = ' '; + } + // Prevent this value from being zero'd out when it is exactly max size + if (argoffset != COMMAND_ARGS_MAX_BYTES) + argoffset = argoffset & COMMAND_ARGS_MAX_BYTES - 1; + } + // Finalize string with '\0' + cmd->args[(argoffset - 1) & COMMAND_ARGS_MAX_BYTES - 1] = '\0'; + log_printk("args full %d - %s", argoffset, cmd->args); - // Read full filename and args data into map - u32 argoffset = 0; + bpf_map_update_elem(&commands, ¤t_tgid, cmd, BPF_ANY); - // Copy the filename first, this is the full path not just the filename from args - int bytes_read = argoffset = bpf_core_read_user_str(cmd->args, COMMAND_ARGS_MAX_BYTES, filename); - log_printk("args copied bytes %d - %s", bytes_read, filename); - argoffset = argoffset & COMMAND_ARGS_MAX_BYTES-1; - cmd->args[(argoffset -1) & COMMAND_ARGS_MAX_BYTES-1 ] = ' '; - - for (u32 i = 1; i < sizeof(argv); i++) - { - char *argv_p = NULL; - bpf_core_read_user(&argv_p, sizeof(argv_p), argv + i); + struct command_event* e = bpf_map_lookup_elem(&commandevent_heap, &zero); + if (!e) + return 0; - if (!argv_p) - break; + // Command just started. Send event + e->event_type = SSHTRACE_EVENT_COMMAND_START; + e->ptm_pid = conn->ptm_tgid; + bpf_core_read(&e->cmd, sizeof(struct command), cmd); - bytes_read = bpf_core_read_user_str(cmd->args+argoffset, COMMAND_ARGS_MAX_BYTES - argoffset, argv_p); - //int bytes_read = bpf_core_read_user_str(cmd.args, COMMAND_ARGS_MAX_BYTES , argv_p); - log_printk("args copied bytes %d - %s", bytes_read, argv_p); - - if (bytes_read > 0) - { - argoffset += bytes_read; - // Replace the '\0' with spaces between the args - cmd->args[(argoffset -1) & COMMAND_ARGS_MAX_BYTES-1 ] = ' '; - } + push_event(ctx, e, sizeof(struct command_event)); - // Prevent this value from being zero'd out when it is exactly max size - if (argoffset != COMMAND_ARGS_MAX_BYTES) - argoffset = argoffset & COMMAND_ARGS_MAX_BYTES-1; - - - } - // Finalize string with '\0' - cmd->args[(argoffset -1) & COMMAND_ARGS_MAX_BYTES-1 ] = '\0'; - log_printk("args full %d - %s", argoffset, cmd->args); - - - bpf_map_update_elem(&commands, ¤t_tgid, cmd, BPF_ANY); - - struct command_event* e = bpf_map_lookup_elem(&commandevent_heap, &zero); - if (!e) - return 0; - - // Command just started. Send event - e->event_type = SSHTRACE_EVENT_COMMAND_START; - e->ptm_pid = conn->ptm_tgid; - bpf_core_read(&e->cmd, sizeof(struct command), cmd); - - push_event(ctx, e, sizeof(struct command_event)); - - - return 0; + return 0; } SEC("tracepoint/syscalls/sys_enter_execveat") -int sys_enter_execveat(struct trace_event_raw_sys_enter* ctx) -{ - return sys_enter_exec_common(ctx); -} +int sys_enter_execveat(struct trace_event_raw_sys_enter* ctx) { return sys_enter_exec_common(ctx); } SEC("tracepoint/syscalls/sys_enter_execve") -int sys_enter_execve(struct trace_event_raw_sys_enter* ctx) -{ - return sys_enter_exec_common(ctx); -} - - +int sys_enter_execve(struct trace_event_raw_sys_enter* ctx) { return sys_enter_exec_common(ctx); } SEC("tracepoint/syscalls/sys_enter_exit_group") -int sys_enter_exit_group(struct trace_event_raw_sys_enter* ctx) -{ -// field:int error_code; offset:16; size:8; signed:0; +int sys_enter_exit_group(struct trace_event_raw_sys_enter* ctx) { + // field:int error_code; offset:16; size:8; signed:0; - u32 error_code = (u32) BPF_CORE_READ(ctx, args[0]); - u32 current_tgid = bpf_get_current_pid_tgid() >> 32; - struct command *cmd; - struct connection *conn; + u32 error_code = (u32) BPF_CORE_READ(ctx, args[0]); + u32 current_tgid = bpf_get_current_pid_tgid() >> 32; + struct command* cmd; + struct connection* conn; - conn = bpf_map_lookup_elem(&connections, ¤t_tgid); - if (conn != NULL) { - conn->end_time= bpf_ktime_get_ns(); + conn = bpf_map_lookup_elem(&connections, ¤t_tgid); + if (conn != NULL) { + conn->end_time = bpf_ktime_get_ns(); - log_printk("CONNECTION EVENT!!!!"); + log_printk("CONNECTION EVENT!!!!"); + bpf_map_delete_elem(&connections, ¤t_tgid); - bpf_map_delete_elem(&connections, ¤t_tgid); - - // Connection was terminated, send event - int zero = 0; - struct connection_event* e = bpf_map_lookup_elem(&connectionevent_heap, &zero); - if (!e) - return 0; - e->event_type = SSHTRACE_EVENT_CLOSE_CONNECTION; - e->ptm_pid = conn->ptm_tgid; - e->conn = *conn; - push_event(ctx, e, sizeof(struct connection_event)); + // Connection was terminated, send event + int zero = 0; + struct connection_event* e = bpf_map_lookup_elem(&connectionevent_heap, &zero); + if (!e) + return 0; + e->event_type = SSHTRACE_EVENT_CLOSE_CONNECTION; + e->ptm_pid = conn->ptm_tgid; + e->conn = *conn; + push_event(ctx, e, sizeof(struct connection_event)); + return 0; + } - return 0; - } + cmd = bpf_map_lookup_elem(&commands, ¤t_tgid); + if (cmd != NULL) { + cmd->end_time = bpf_ktime_get_ns(); + cmd->exit_code = error_code; + log_printk("COMMAND EVENT!!!! conn tgid: %d, tgid: %d - %s", cmd->conn_tgid, current_tgid, cmd->filename); + log_printk("COMMAND EVENT!!!! %d %s", cmd->stdout_offset, cmd->stdout); - cmd = bpf_map_lookup_elem(&commands, ¤t_tgid); - if (cmd != NULL) { - cmd->end_time = bpf_ktime_get_ns(); - cmd->exit_code = error_code; - log_printk("COMMAND EVENT!!!! conn tgid: %d, tgid: %d - %s", cmd->conn_tgid, current_tgid, cmd->filename); - log_printk("COMMAND EVENT!!!! %d %s", cmd->stdout_offset, cmd->stdout); + bpf_map_delete_elem(&commands, ¤t_tgid); - bpf_map_delete_elem(&commands, ¤t_tgid); - - // Command just completed. Send event - int zero = 0; - struct command_event* e = bpf_map_lookup_elem(&commandevent_heap, &zero); - if (!e) - return 0; + // Command just completed. Send event + int zero = 0; + struct command_event* e = bpf_map_lookup_elem(&commandevent_heap, &zero); + if (!e) + return 0; - e->event_type = SSHTRACE_EVENT_COMMAND_END; - e->ptm_pid = cmd->conn_tgid; - - bpf_core_read(&e->cmd, sizeof(struct command), cmd); + e->event_type = SSHTRACE_EVENT_COMMAND_END; + e->ptm_pid = cmd->conn_tgid; - push_event(ctx, e, sizeof(struct command_event)); + bpf_core_read(&e->cmd, sizeof(struct command), cmd); + push_event(ctx, e, sizeof(struct command_event)); - return 0; - } + return 0; + } - - return 1; + return 1; } - #define __max(a,b) \ - ({ __typeof__ (a) _a = (a); \ - __typeof__ (b) _b = (b); \ - _a > _b ? _a : _b; }) - -#define __min(a,b) \ -({ \ - __typeof__ (a) _a = (a); \ - __typeof__ (b) _b = (b); \ - _a < _b ? _a : _b; \ -}) +#define __max(a, b) \ + ({ \ + __typeof__(a) _a = (a); \ + __typeof__(b) _b = (b); \ + _a > _b ? _a : _b; \ + }) + +#define __min(a, b) \ + ({ \ + __typeof__(a) _a = (a); \ + __typeof__(b) _b = (b); \ + _a < _b ? _a : _b; \ + }) SEC("tracepoint/syscalls/sys_enter_write") -int sys_enter_write(struct trace_event_raw_sys_enter* ctx) -{ - // args documented here: https://mozillazg.com/2022/05/ebpf-libbpf-tracepoint-common-questions-en.html - // field:unsigned int fd; offset:16; size:8; signed:0; - // field:const char * buf; offset:24; size:8; signed:0; - // field:size_t count; offset:32; size:8; signed:0; - +int sys_enter_write(struct trace_event_raw_sys_enter* ctx) { + // args documented here: https://mozillazg.com/2022/05/ebpf-libbpf-tracepoint-common-questions-en.html + // field:unsigned int fd; offset:16; size:8; signed:0; + // field:const char * buf; offset:24; size:8; signed:0; + // field:size_t count; offset:32; size:8; signed:0; - unsigned int fd = (uint32_t) BPF_CORE_READ(ctx, args[0]); + unsigned int fd = (uint32_t) BPF_CORE_READ(ctx, args[0]); + if (fd != STDOUT_FILENO && fd != STDERR_FILENO) + return 1; - if (fd != STDOUT_FILENO && fd != STDERR_FILENO) - return 1; + u32 current_tgid = bpf_get_current_pid_tgid() >> 32; + struct command* cmd; + cmd = bpf_map_lookup_elem(&commands, ¤t_tgid); + if (cmd == NULL) + return 1; - u32 current_tgid = bpf_get_current_pid_tgid() >> 32; - struct command *cmd; - cmd = bpf_map_lookup_elem(&commands, ¤t_tgid); - - if (cmd == NULL) - return 1; - - // We have a command. Let's see if we need to copy the buffer - if (cmd->stdout_offset >= STDOUT_MAX_BYTES) - { - // already collected max amount of bytes for this process - return 1; - } + // We have a command. Let's see if we need to copy the buffer + if (cmd->stdout_offset >= STDOUT_MAX_BYTES) { + // already collected max amount of bytes for this process + return 1; + } - const char* buf = (const char*) BPF_CORE_READ(ctx, args[1]); - size_t size = (size_t) BPF_CORE_READ(ctx, args[2]); + const char* buf = (const char*) BPF_CORE_READ(ctx, args[1]); + size_t size = (size_t) BPF_CORE_READ(ctx, args[2]); + int offset = cmd->stdout_offset; + offset = __max(offset, 0); + // Subtract one so that the final '\0' is not copied, since these buffers must append + int amount_to_write = __min(size, STDOUT_MAX_BYTES - offset); + amount_to_write = __max(amount_to_write, 0); - int offset = cmd->stdout_offset; - offset = __max(offset, 0); - // Subtract one so that the final '\0' is not copied, since these buffers must append - int amount_to_write = __min(size, STDOUT_MAX_BYTES - offset); - amount_to_write = __max(amount_to_write, 0); + if (amount_to_write == 0) + return 1; - if (amount_to_write == 0) - return 1; - - // Need this check to get pass the bpf verifier (otherwise it complains about unbounded memory access) - // Caveat is that STDOUT_MAX_BYTES MUST be a power of 2 - //if (proc_with_offset > proc_output && proc_with_offset < proc_output+amount_to_write) + // Need this check to get pass the bpf verifier (otherwise it complains about unbounded memory access) + // Caveat is that STDOUT_MAX_BYTES MUST be a power of 2 + //if (proc_with_offset > proc_output && proc_with_offset < proc_output+amount_to_write) - offset = offset & STDOUT_MAX_BYTES-1; - char* proc_with_offset = cmd->stdout + offset; - - amount_to_write = amount_to_write & STDOUT_MAX_BYTES-1; + offset = offset & STDOUT_MAX_BYTES - 1; + char* proc_with_offset = cmd->stdout + offset; - //if (offset + amount_to_write < STDOUT_MAX_BYTES - 1 ) - bpf_core_read_user(proc_with_offset, amount_to_write, buf); + amount_to_write = amount_to_write & STDOUT_MAX_BYTES - 1; - // Apply a null termination at the end. If another write appends, this will get overwritten - cmd->stdout[offset+amount_to_write] = '\0'; + //if (offset + amount_to_write < STDOUT_MAX_BYTES - 1 ) + bpf_core_read_user(proc_with_offset, amount_to_write, buf); + // Apply a null termination at the end. If another write appends, this will get overwritten + cmd->stdout[offset + amount_to_write] = '\0'; - log_printk("sys_enter_writex pid %d fd %d %s", current_tgid, fd, cmd->stdout+offset); - log_printk("sys_enter_write wrote %d bytes at offset %d to pid %d", amount_to_write, offset, current_tgid); + log_printk("sys_enter_writex pid %d fd %d %s", current_tgid, fd, cmd->stdout + offset); + log_printk("sys_enter_write wrote %d bytes at offset %d to pid %d", amount_to_write, offset, current_tgid); - cmd->stdout_offset += amount_to_write; + cmd->stdout_offset += amount_to_write; - //log_printk("sys_enter_write id: %d, fd: %d: %s", conn->ptm_tgid, fd, buf); + //log_printk("sys_enter_write id: %d, fd: %d: %s", conn->ptm_tgid, fd, buf); - - return 0; + return 0; } -// Rate limit prevents a huge data spike of terminal data from one or more sessions -// (e.g., local ssh running find /) from blowing out the perf buffer. -static int is_rate_limited(void* ctx, struct connection* conn, int32_t new_bytes, u32 parent_tgid) -{ - // Break the rate limit down into 250ms increments so that it doesn't feel as jittery - // when rate limits hit - const int TIME_INTERVALS_PER_SECOND = 4; - - const int64_t NANOSECONDS_IN_A_SECOND = 1000000000; - int64_t cur_epoch_sec = bpf_ktime_get_ns() / (NANOSECONDS_IN_A_SECOND/TIME_INTERVALS_PER_SECOND); - if (cur_epoch_sec != conn->rate_limit_epoch_second ) - { - // We've entered a new second. Reset all the counters - conn->rate_limit_epoch_second = cur_epoch_sec; - conn->rate_limit_hit = false; - conn->rate_limit_total_bytes_this_second = 0; - } - - conn->rate_limit_total_bytes_this_second += new_bytes; - //log_printk("rate limit sec %d bytes %d", conn->rate_limit_epoch_second, conn->rate_limit_total_bytes_this_second); - if (conn->rate_limit_total_bytes_this_second > (RATE_LIMIT_MAX_BYTES_PER_SECOND/TIME_INTERVALS_PER_SECOND)) - { - // Rate limit. If limit has already been hit this second, just exit - // if not, send an event message back with the rate limit message - if (!conn->rate_limit_hit) - { - conn->rate_limit_hit = true; - log_printk("rate limit hit for conn %d", conn->ptm_tgid); - - int zero = 0; - struct terminal_update_event* e = bpf_map_lookup_elem(&terminalupdateevent_heap, &zero); - if (!e) - return 0; - - e->event_type = SSHTRACE_EVENT_TERMINAL_UPDATE; - e->ptm_pid = parent_tgid; - // Got to love the BPF verifier. Simple strcpy is not so easy - e->terminal_data[0] = '['; - e->terminal_data[1] = '['; - e->terminal_data[2] = 'S'; - e->terminal_data[3] = 'S'; - e->terminal_data[4] = 'H'; - e->terminal_data[5] = 'B'; - e->terminal_data[6] = 'o'; - e->terminal_data[7] = 'u'; - e->terminal_data[8] = 'n'; - e->terminal_data[9] = 'c'; - e->terminal_data[10] = 'e'; - e->terminal_data[11] = 'r'; - e->terminal_data[12] = ' '; - e->terminal_data[13] = 'R'; - e->terminal_data[14] = 'a'; - e->terminal_data[15] = 't'; - e->terminal_data[16] = 'e'; - e->terminal_data[17] = '/'; - e->terminal_data[18] = 's'; - e->terminal_data[19] = 'e'; - e->terminal_data[20] = 'c'; - e->terminal_data[21] = ' '; - e->terminal_data[22] = 'R'; - e->terminal_data[23] = 'e'; - e->terminal_data[24] = 'a'; - e->terminal_data[25] = 'c'; - e->terminal_data[26] = 'h'; - e->terminal_data[27] = 'e'; - e->terminal_data[28] = 'd'; - e->terminal_data[29] = ']'; - e->terminal_data[30] = ']'; - e->terminal_data[31] = '\r'; - e->terminal_data[32] = '\n'; - e->terminal_data[33] = '\0'; - e->data_len = 34; - - push_event(ctx, e, sizeof(struct terminal_update_event)); - } - return 1; - } - return 0; +// Rate limit prevents a huge data spike of terminal data from one or more sessions +// (e.g., local ssh running find /) from blowing out the perf buffer. +static int is_rate_limited(void* ctx, struct connection* conn, int32_t new_bytes, u32 parent_tgid) { + // Break the rate limit down into 250ms increments so that it doesn't feel as jittery + // when rate limits hit + const int TIME_INTERVALS_PER_SECOND = 4; + + const int64_t NANOSECONDS_IN_A_SECOND = 1000000000; + int64_t cur_epoch_sec = bpf_ktime_get_ns() / (NANOSECONDS_IN_A_SECOND / TIME_INTERVALS_PER_SECOND); + if (cur_epoch_sec != conn->rate_limit_epoch_second) { + // We've entered a new second. Reset all the counters + conn->rate_limit_epoch_second = cur_epoch_sec; + conn->rate_limit_hit = false; + conn->rate_limit_total_bytes_this_second = 0; + } + + conn->rate_limit_total_bytes_this_second += new_bytes; + //log_printk("rate limit sec %d bytes %d", conn->rate_limit_epoch_second, conn->rate_limit_total_bytes_this_second); + if (conn->rate_limit_total_bytes_this_second > (RATE_LIMIT_MAX_BYTES_PER_SECOND / TIME_INTERVALS_PER_SECOND)) { + // Rate limit. If limit has already been hit this second, just exit + // if not, send an event message back with the rate limit message + if (!conn->rate_limit_hit) { + conn->rate_limit_hit = true; + log_printk("rate limit hit for conn %d", conn->ptm_tgid); + + int zero = 0; + struct terminal_update_event* e = bpf_map_lookup_elem(&terminalupdateevent_heap, &zero); + if (!e) + return 0; + + e->event_type = SSHTRACE_EVENT_TERMINAL_UPDATE; + e->ptm_pid = parent_tgid; + // Got to love the BPF verifier. Simple strcpy is not so easy + e->terminal_data[0] = '['; + e->terminal_data[1] = '['; + e->terminal_data[2] = 'S'; + e->terminal_data[3] = 'S'; + e->terminal_data[4] = 'H'; + e->terminal_data[5] = 'B'; + e->terminal_data[6] = 'o'; + e->terminal_data[7] = 'u'; + e->terminal_data[8] = 'n'; + e->terminal_data[9] = 'c'; + e->terminal_data[10] = 'e'; + e->terminal_data[11] = 'r'; + e->terminal_data[12] = ' '; + e->terminal_data[13] = 'R'; + e->terminal_data[14] = 'a'; + e->terminal_data[15] = 't'; + e->terminal_data[16] = 'e'; + e->terminal_data[17] = '/'; + e->terminal_data[18] = 's'; + e->terminal_data[19] = 'e'; + e->terminal_data[20] = 'c'; + e->terminal_data[21] = ' '; + e->terminal_data[22] = 'R'; + e->terminal_data[23] = 'e'; + e->terminal_data[24] = 'a'; + e->terminal_data[25] = 'c'; + e->terminal_data[26] = 'h'; + e->terminal_data[27] = 'e'; + e->terminal_data[28] = 'd'; + e->terminal_data[29] = ']'; + e->terminal_data[30] = ']'; + e->terminal_data[31] = '\r'; + e->terminal_data[32] = '\n'; + e->terminal_data[33] = '\0'; + e->data_len = 34; + + push_event(ctx, e, sizeof(struct terminal_update_event)); + } + return 1; + } + return 0; } SEC("tracepoint/syscalls/sys_enter_read") -int sys_enter_read(struct trace_event_raw_sys_enter* ctx) -{ - - // field:unsigned int fd; offset:16; size:8; signed:0; - // field:char * buf; offset:24; size:8; signed:0; - // field:size_t count; offset:32; size:8; signed:0; - - u32 fd = (uint32_t) BPF_CORE_READ(ctx, args[0]); - - // Quick/efficient check to bounce out early without having to lookup connection ID - // We will never be reading non SSHD process nor stdin/stdout/stderr - if (fd == STDERR_FILENO || fd == STDOUT_FILENO || fd == STDIN_FILENO || !proc_is_sshd()) - return 1; +int sys_enter_read(struct trace_event_raw_sys_enter* ctx) { - // We want to catch the pts process which pipes all reads out to the /dev/ptsx fd - u32 parent_tgid = get_parent_pid() >> 32; + // field:unsigned int fd; offset:16; size:8; signed:0; + // field:char * buf; offset:24; size:8; signed:0; + // field:size_t count; offset:32; size:8; signed:0; - - struct connection* conn = bpf_map_lookup_elem(&connections, &parent_tgid); + u32 fd = (uint32_t) BPF_CORE_READ(ctx, args[0]); - if (conn != NULL) - { - if (conn->pts_fd == fd || conn->pts_fd2 == fd || conn->pts_fd3 == fd) - { - // Check if this should be rate limited - if (is_rate_limited(ctx, conn, 0, parent_tgid)) { - return 0; - } - //const char* buf = (const char*) BPF_CORE_READ(ctx, args[1]); - size_t size = (size_t) BPF_CORE_READ(ctx, args[2]); + // Quick/efficient check to bounce out early without having to lookup connection ID + // We will never be reading non SSHD process nor stdin/stdout/stderr + if (fd == STDERR_FILENO || fd == STDOUT_FILENO || fd == STDIN_FILENO || !proc_is_sshd()) + return 1; - struct read_buffer_map readmap = {0}; - readmap.fd = fd; - readmap.data_ptr = (void*) ctx->args[1]; + // We want to catch the pts process which pipes all reads out to the /dev/ptsx fd + u32 parent_tgid = get_parent_pid() >> 32; - bpf_map_update_elem(&connections_read_mapping, &parent_tgid, &readmap, BPF_ANY); + struct connection* conn = bpf_map_lookup_elem(&connections, &parent_tgid); + if (conn != NULL) { + if (conn->pts_fd == fd || conn->pts_fd2 == fd || conn->pts_fd3 == fd) { + // Check if this should be rate limited + if (is_rate_limited(ctx, conn, 0, parent_tgid)) { + return 0; + } + //const char* buf = (const char*) BPF_CORE_READ(ctx, args[1]); + size_t size = (size_t) BPF_CORE_READ(ctx, args[2]); - } - } + struct read_buffer_map readmap = {0}; + readmap.fd = fd; + readmap.data_ptr = (void*) ctx->args[1]; + bpf_map_update_elem(&connections_read_mapping, &parent_tgid, &readmap, BPF_ANY); + } + } - return 0; + return 0; } - SEC("tracepoint/syscalls/sys_exit_read") -int sys_exit_read(struct trace_event_raw_sys_exit* ctx) -{ - - // Quick/efficient check to bounce out early without having to lookup connection ID - // We will never be reading non SSHD process nor stdin/stdout/stderr - if (!proc_is_sshd()) - return 1; - - int32_t ret = (int32_t) BPF_CORE_READ(ctx, ret); - - - // We want to catch the pts process which pipes all reads out to the /dev/ptsx fd - u32 parent_tgid = get_parent_pid() >> 32; - - struct read_buffer_map* readmap = bpf_map_lookup_elem(&connections_read_mapping, &parent_tgid); - - if (readmap != NULL && readmap->data_ptr != NULL && ret > 0) - { - - struct connection* conn = bpf_map_lookup_elem(&connections, &parent_tgid); - if (conn == NULL) - return 0; - // Check if this should be rate limited - if (is_rate_limited(ctx, conn, ret, parent_tgid)) { - return 0; - } - - int zero = 0; - struct terminal_update_event* e = bpf_map_lookup_elem(&terminalupdateevent_heap, &zero); - if (!e) - return 0; - - e->event_type = SSHTRACE_EVENT_TERMINAL_UPDATE; - e->data_len = ret; - e->ptm_pid = parent_tgid; - - - //static char read_buffer[CONNECTION_READ_BUFFER_BYTES] = {0}; - // Not a CORE read, but I think it is ok because readmap struct is defined in this code - bpf_probe_read_user(e->terminal_data, ret & (CONNECTION_READ_BUFFER_BYTES-1), readmap->data_ptr); - - // Set the last char of the string to 0 in case it wasn't set. - e->terminal_data[ret & (CONNECTION_READ_BUFFER_BYTES-1)] = '\0'; - log_printk("sys_enter_readz exit ret %d %s", ret, e->terminal_data); - - bpf_map_delete_elem(&connections_read_mapping, &parent_tgid); - // e.pts_pid = pid_tgid; - // e.bash_pid = child_tgid; - // e.ptm_pid = get_parent_pid() >> 32; - push_event(ctx, e, sizeof(struct terminal_update_event)); - - } - return 0; +int sys_exit_read(struct trace_event_raw_sys_exit* ctx) { + + // Quick/efficient check to bounce out early without having to lookup connection ID + // We will never be reading non SSHD process nor stdin/stdout/stderr + if (!proc_is_sshd()) + return 1; + + int32_t ret = (int32_t) BPF_CORE_READ(ctx, ret); + + // We want to catch the pts process which pipes all reads out to the /dev/ptsx fd + u32 parent_tgid = get_parent_pid() >> 32; + + struct read_buffer_map* readmap = bpf_map_lookup_elem(&connections_read_mapping, &parent_tgid); + + if (readmap != NULL && readmap->data_ptr != NULL && ret > 0) { + + struct connection* conn = bpf_map_lookup_elem(&connections, &parent_tgid); + if (conn == NULL) + return 0; + // Check if this should be rate limited + if (is_rate_limited(ctx, conn, ret, parent_tgid)) { + return 0; + } + + int zero = 0; + struct terminal_update_event* e = bpf_map_lookup_elem(&terminalupdateevent_heap, &zero); + if (!e) + return 0; + + e->event_type = SSHTRACE_EVENT_TERMINAL_UPDATE; + e->data_len = ret; + e->ptm_pid = parent_tgid; + + //static char read_buffer[CONNECTION_READ_BUFFER_BYTES] = {0}; + // Not a CORE read, but I think it is ok because readmap struct is defined in this code + bpf_probe_read_user(e->terminal_data, ret & (CONNECTION_READ_BUFFER_BYTES - 1), readmap->data_ptr); + + // Set the last char of the string to 0 in case it wasn't set. + e->terminal_data[ret & (CONNECTION_READ_BUFFER_BYTES - 1)] = '\0'; + log_printk("sys_enter_readz exit ret %d %s", ret, e->terminal_data); + + bpf_map_delete_elem(&connections_read_mapping, &parent_tgid); + // e.pts_pid = pid_tgid; + // e.bash_pid = child_tgid; + // e.ptm_pid = get_parent_pid() >> 32; + push_event(ctx, e, sizeof(struct terminal_update_event)); + } + return 0; } From d5b837c87fa9ad925397caed42645f38cfd75200 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 11:56:57 -0600 Subject: [PATCH 05/42] Removed a few unused memcpy --- libsshlog/bpf/sshtrace.bpf.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 7ebf1db..e0c9984 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -205,7 +205,6 @@ int sys_enter_accept(struct trace_event_raw_sys_enter* ctx) { sockmap.recent_tcpinfo.client_port = 0; sockmap.recent_tcpinfo.server_port = 0; - uint32_t socket_id = (uint32_t) BPF_CORE_READ(ctx, args[0]); sockmap.addr = (struct sockaddr*) BPF_CORE_READ(ctx, args[1]); //int* addrlen = (int*) BPF_CORE_READ(ctx, args[2]); @@ -482,8 +481,6 @@ int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) { e->event_type = SSHTRACE_EVENT_FILE_UPLOAD; e->ptm_pid = conn->ptm_tgid; e->file_mode = mode; - - const char* filename_ptr = (const char*) BPF_CORE_READ(ctx, args[1]); //static char filename[255]; bpf_core_read_user_str(e->target_path, sizeof(e->target_path), ctx->args[1]); @@ -840,9 +837,6 @@ int sys_enter_read(struct trace_event_raw_sys_enter* ctx) { if (is_rate_limited(ctx, conn, 0, parent_tgid)) { return 0; } - //const char* buf = (const char*) BPF_CORE_READ(ctx, args[1]); - size_t size = (size_t) BPF_CORE_READ(ctx, args[2]); - struct read_buffer_map readmap = {0}; readmap.fd = fd; readmap.data_ptr = (void*) ctx->args[1]; From 9d6ad12f3f7b6fe5e50da50181c004870696dd46 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:00:31 -0600 Subject: [PATCH 06/42] Remove dead code --- libsshlog/bpf/sshtrace.bpf.c | 51 ------------------------------------ 1 file changed, 51 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index e0c9984..0fe714e 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -263,57 +263,6 @@ int sys_exit_accept(struct trace_event_raw_sys_exit* ctx) { return 0; } -// TODO: This also works, and provides more information (server port and IP address) -// But I do not like that it is less maintainable (i.e., it's a kernel probe instead of tracepoint) -// SEC("kretprobe/inet_csk_accept") -// int BPF_KRETPROBE(inet_csk_accept_ret, struct sock *newsk) -// { - -// if (!proc_is_sshd()) -// return 1; - -// if (newsk == NULL) -// return 0; - -// u64 pid_tgid = bpf_get_current_pid_tgid(); -// struct sshd_listener *listener; - -// if ((listener = get_sshd_listener()) == NULL) -// return 1; - -// u16 family = 0; -// bpf_core_read(&family, sizeof(family), &newsk->__sk_common.skc_family); - -// if (family == AF_INET) -// { - -// u16 client_port = 0, server_port = 0; -// u32 client_ip = 0, server_ip = 0; -// bpf_core_read(&client_port, sizeof(client_port), &newsk->__sk_common.skc_dport); -// bpf_core_read(&server_port, sizeof(server_port), &newsk->__sk_common.skc_num); -// bpf_core_read(&client_ip, sizeof(client_ip), &newsk->__sk_common.skc_daddr); -// bpf_core_read(&server_ip, sizeof(server_ip), &newsk->__sk_common.skc_rcv_saddr); - -// client_port = __builtin_bswap16(client_port); -// client_ip = __builtin_bswap32(client_ip); -// server_ip = __builtin_bswap32(server_ip); - -// // TODO, is there a race condition here? -// // e.g., two SSH sessions happen around the same time and the connections get crossed... -// // If so, recent_tcpinfo needs to be a global hash with some unique ID to differentiate. -// listener->pid_tgid = pid_tgid; -// listener->recent_tcpinfo.client_ip = client_ip; -// listener->recent_tcpinfo.server_ip = server_ip; -// listener->recent_tcpinfo.client_port = client_port; -// listener->recent_tcpinfo.server_port = server_port; - -// log_printk("inet_csk_accept fd: %d %d %u", pid_tgid, client_port, server_port); -// } - -// return 0; - -// } - static bool is_ptm_clone(u64 pid_tgid) { struct socket_map* sockmap = bpf_map_lookup_elem(&socket_mapping, &pid_tgid); From 55d5c4fd02cc68e344c235ef3babe0cdbb001e60 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:02:15 -0600 Subject: [PATCH 07/42] Simplify expression --- libsshlog/bpf/sshtrace.bpf.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 0fe714e..ea5cf96 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -314,9 +314,7 @@ static void handle_new_connection(void* context, u32 sshd_tgid, u32 conn_tgid) { } static bool is_pts_clone(u32 tgid) { - struct connection* conn; - - conn = bpf_map_lookup_elem(&connections, &tgid); + struct connection* conn = bpf_map_lookup_elem(&connections, &tgid); if (conn == NULL) return false; From 13b67a1a5248c76ff0d5c457a070f59c812a3709 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:10:21 -0600 Subject: [PATCH 08/42] Simplify memcpy on rate limit --- libsshlog/bpf/sshtrace.bpf.c | 40 +++--------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index ea5cf96..4e06c46 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -715,43 +715,9 @@ static int is_rate_limited(void* ctx, struct connection* conn, int32_t new_bytes e->event_type = SSHTRACE_EVENT_TERMINAL_UPDATE; e->ptm_pid = parent_tgid; - // Got to love the BPF verifier. Simple strcpy is not so easy - e->terminal_data[0] = '['; - e->terminal_data[1] = '['; - e->terminal_data[2] = 'S'; - e->terminal_data[3] = 'S'; - e->terminal_data[4] = 'H'; - e->terminal_data[5] = 'B'; - e->terminal_data[6] = 'o'; - e->terminal_data[7] = 'u'; - e->terminal_data[8] = 'n'; - e->terminal_data[9] = 'c'; - e->terminal_data[10] = 'e'; - e->terminal_data[11] = 'r'; - e->terminal_data[12] = ' '; - e->terminal_data[13] = 'R'; - e->terminal_data[14] = 'a'; - e->terminal_data[15] = 't'; - e->terminal_data[16] = 'e'; - e->terminal_data[17] = '/'; - e->terminal_data[18] = 's'; - e->terminal_data[19] = 'e'; - e->terminal_data[20] = 'c'; - e->terminal_data[21] = ' '; - e->terminal_data[22] = 'R'; - e->terminal_data[23] = 'e'; - e->terminal_data[24] = 'a'; - e->terminal_data[25] = 'c'; - e->terminal_data[26] = 'h'; - e->terminal_data[27] = 'e'; - e->terminal_data[28] = 'd'; - e->terminal_data[29] = ']'; - e->terminal_data[30] = ']'; - e->terminal_data[31] = '\r'; - e->terminal_data[32] = '\n'; - e->terminal_data[33] = '\0'; - e->data_len = 34; - + char msg[] = "[[SSHLog Rate/sec Reached]]\r\n"; + __builtin_memcpy(e->terminal_data, msg, sizeof(msg)); + e->data_len = sizeof(msg); push_event(ctx, e, sizeof(struct terminal_update_event)); } return 1; From 6e01d869b2e1cc765bfe9064e35fa0151214f476 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:12:58 -0600 Subject: [PATCH 09/42] Fix order of operations --- libsshlog/bpf/sshtrace.bpf.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 4e06c46..65871ef 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -661,11 +661,9 @@ int sys_enter_write(struct trace_event_raw_sys_enter* ctx) { // Need this check to get pass the bpf verifier (otherwise it complains about unbounded memory access) // Caveat is that STDOUT_MAX_BYTES MUST be a power of 2 //if (proc_with_offset > proc_output && proc_with_offset < proc_output+amount_to_write) - - offset = offset & STDOUT_MAX_BYTES - 1; + offset = offset & (STDOUT_MAX_BYTES - 1); char* proc_with_offset = cmd->stdout + offset; - - amount_to_write = amount_to_write & STDOUT_MAX_BYTES - 1; + amount_to_write = amount_to_write & (STDOUT_MAX_BYTES - 1); //if (offset + amount_to_write < STDOUT_MAX_BYTES - 1 ) bpf_core_read_user(proc_with_offset, amount_to_write, buf); From 7e545a4fe444c03fa5a835ea9764ce181a7354e9 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:15:11 -0600 Subject: [PATCH 10/42] Fix order of operations --- libsshlog/bpf/sshtrace.bpf.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 65871ef..c8b52ca 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -495,13 +495,13 @@ static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { //bpf_core_read_str(cmd.filename, sizeof(cmd.filename), args->filename); // Read full filename and args data into map - u32 argoffset = 0; // Copy the filename first, this is the full path not just the filename from args - int bytes_read = argoffset = bpf_core_read_user_str(cmd->args, COMMAND_ARGS_MAX_BYTES, filename); log_printk("args copied bytes %d - %s", bytes_read, filename); - argoffset = argoffset & COMMAND_ARGS_MAX_BYTES - 1; - cmd->args[(argoffset - 1) & COMMAND_ARGS_MAX_BYTES - 1] = ' '; + int bytes_read = 0; + u32 argoffset = bpf_core_read_user_str(cmd->args, COMMAND_ARGS_MAX_BYTES, filename); + argoffset = argoffset & (COMMAND_ARGS_MAX_BYTES - 1); + cmd->args[(argoffset - 1) & (COMMAND_ARGS_MAX_BYTES - 1)] = ' '; for (u32 i = 1; i < sizeof(argv); i++) { char* argv_p = NULL; @@ -517,16 +517,16 @@ static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { if (bytes_read > 0) { argoffset += bytes_read; // Replace the '\0' with spaces between the args - cmd->args[(argoffset - 1) & COMMAND_ARGS_MAX_BYTES - 1] = ' '; + cmd->args[(argoffset - 1) & (COMMAND_ARGS_MAX_BYTES - 1)] = ' '; } // Prevent this value from being zero'd out when it is exactly max size if (argoffset != COMMAND_ARGS_MAX_BYTES) - argoffset = argoffset & COMMAND_ARGS_MAX_BYTES - 1; + argoffset = argoffset & (COMMAND_ARGS_MAX_BYTES - 1); } // Finalize string with '\0' - cmd->args[(argoffset - 1) & COMMAND_ARGS_MAX_BYTES - 1] = '\0'; log_printk("args full %d - %s", argoffset, cmd->args); + cmd->args[(argoffset - 1) & (COMMAND_ARGS_MAX_BYTES - 1)] = '\0'; bpf_map_update_elem(&commands, ¤t_tgid, cmd, BPF_ANY); From fab5ca76bc11fd599e0e1a3c4d9639dfdd56cb4a Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:17:23 -0600 Subject: [PATCH 11/42] Dropped unused memcpy --- libsshlog/bpf/sshtrace.bpf.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index c8b52ca..17f9afc 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -455,12 +455,6 @@ static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { const char* filename = (const char*) BPF_CORE_READ(ctx, args[0]); const char* const* argv = (const char* const*) BPF_CORE_READ(ctx, args[1]); - const char* const* envp = (const char* const*) BPF_CORE_READ(ctx, args[2]); - - // FOR TROUBLESHOOTING - // static char fn[255] = {0}; - // bpf_core_read_user_str(fn, sizeof(fn), filename); - // log_printk("sys_enter_execve: parent_tgid: %d, current_tgid: %d - %s", parent_tgid, current_tgid, fn); struct connection* conn; From d4e51141fd8623f68d62f931928317ec41d13370 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:18:15 -0600 Subject: [PATCH 12/42] Removed unused comments --- libsshlog/bpf/sshtrace.bpf.c | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 17f9afc..574db84 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -335,7 +335,6 @@ SEC("tracepoint/syscalls/sys_exit_clone") int sys_exit_clone(struct trace_event_raw_sys_exit* ctx) { u64 pid_tgid = bpf_get_current_pid_tgid(); - // mhill add if (!proc_is_sshd()) return 1; @@ -428,17 +427,12 @@ int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) { e->event_type = SSHTRACE_EVENT_FILE_UPLOAD; e->ptm_pid = conn->ptm_tgid; e->file_mode = mode; - //static char filename[255]; bpf_core_read_user_str(e->target_path, sizeof(e->target_path), ctx->args[1]); u32 current_tgid = bpf_get_current_pid_tgid() >> 32; log_printk("scp open event: pid: %d ptm_pid %d - %s", current_tgid, e->ptm_pid, e->target_path); push_event(ctx, e, sizeof(struct file_upload_event)); - - // u32 dfd = (size_t) BPF_CORE_READ(ctx, args[0]); - // log_printk("open: tgid: %d - %s", current_tgid, filename);) - // log_printk("open: dfd: %d flags: %d mode: %d", dfd, flags, mode; } } @@ -484,14 +478,6 @@ static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { bpf_core_read_user(&arg0_ptr, sizeof(arg0_ptr), argv); bpf_core_read_user_str(cmd->filename, sizeof(cmd->filename), arg0_ptr); - log_printk("sys_enter_execve: conn tgid: %d, tgid: %d - %s", conn->ptm_tgid, current_tgid, cmd->filename); - - //bpf_core_read_str(cmd.filename, sizeof(cmd.filename), args->filename); - - // Read full filename and args data into map - - // Copy the filename first, this is the full path not just the filename from args - log_printk("args copied bytes %d - %s", bytes_read, filename); int bytes_read = 0; u32 argoffset = bpf_core_read_user_str(cmd->args, COMMAND_ARGS_MAX_BYTES, filename); argoffset = argoffset & (COMMAND_ARGS_MAX_BYTES - 1); @@ -505,7 +491,6 @@ static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { break; bytes_read = bpf_core_read_user_str(cmd->args + argoffset, COMMAND_ARGS_MAX_BYTES - argoffset, argv_p); - //int bytes_read = bpf_core_read_user_str(cmd.args, COMMAND_ARGS_MAX_BYTES , argv_p); log_printk("args copied bytes %d - %s", bytes_read, argv_p); if (bytes_read > 0) { @@ -692,7 +677,6 @@ static int is_rate_limited(void* ctx, struct connection* conn, int32_t new_bytes } conn->rate_limit_total_bytes_this_second += new_bytes; - //log_printk("rate limit sec %d bytes %d", conn->rate_limit_epoch_second, conn->rate_limit_total_bytes_this_second); if (conn->rate_limit_total_bytes_this_second > (RATE_LIMIT_MAX_BYTES_PER_SECOND / TIME_INTERVALS_PER_SECOND)) { // Rate limit. If limit has already been hit this second, just exit // if not, send an event message back with the rate limit message @@ -787,7 +771,6 @@ int sys_exit_read(struct trace_event_raw_sys_exit* ctx) { e->data_len = ret; e->ptm_pid = parent_tgid; - //static char read_buffer[CONNECTION_READ_BUFFER_BYTES] = {0}; // Not a CORE read, but I think it is ok because readmap struct is defined in this code bpf_probe_read_user(e->terminal_data, ret & (CONNECTION_READ_BUFFER_BYTES - 1), readmap->data_ptr); From b74c8086844a4f64d0b68eb427ffd467e0670473 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:18:56 -0600 Subject: [PATCH 13/42] Add rate limit on events/second in addition to bytes/second --- libsshlog/bpf/sshtrace.bpf.c | 19 +++++++++++++++++-- libsshlog/bpf/sshtrace_types.h | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 574db84..68b567e 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -294,9 +294,10 @@ static void handle_new_connection(void* context, u32 sshd_tgid, u32 conn_tgid) { conn.rate_limit_hit = false; conn.rate_limit_total_bytes_this_second = 0; - // cleanup sockmap - bpf_map_delete_elem(&socket_mapping, &sshd_tgid); + // Initialize the IOPS counter + conn.rate_limit_events_this_second = 0; + bpf_map_delete_elem(&socket_mapping, &sshd_tgid); bpf_map_update_elem(&connections, &conn_tgid, &conn, BPF_ANY); // The PTM has been created now, go ahead and send the event @@ -674,9 +675,14 @@ static int is_rate_limited(void* ctx, struct connection* conn, int32_t new_bytes conn->rate_limit_epoch_second = cur_epoch_sec; conn->rate_limit_hit = false; conn->rate_limit_total_bytes_this_second = 0; + // Reset IOPS counter + conn->rate_limit_events_this_second = 0; } conn->rate_limit_total_bytes_this_second += new_bytes; + conn->rate_limit_events_this_second++; + + // 1. Check Bandwidth if (conn->rate_limit_total_bytes_this_second > (RATE_LIMIT_MAX_BYTES_PER_SECOND / TIME_INTERVALS_PER_SECOND)) { // Rate limit. If limit has already been hit this second, just exit // if not, send an event message back with the rate limit message @@ -698,6 +704,15 @@ static int is_rate_limited(void* ctx, struct connection* conn, int32_t new_bytes } return 1; } + + // 2. Check Event Count (IOPS) - Stop tiny write floods + if (conn->rate_limit_events_this_second > RATE_LIMIT_MAX_EVENTS_PER_SECOND) { + if (!conn->rate_limit_hit) { + conn->rate_limit_hit = true; + } + return 1; + } + return 0; } diff --git a/libsshlog/bpf/sshtrace_types.h b/libsshlog/bpf/sshtrace_types.h index 1717530..b31ecbc 100644 --- a/libsshlog/bpf/sshtrace_types.h +++ b/libsshlog/bpf/sshtrace_types.h @@ -45,6 +45,7 @@ typedef _Bool bool; #define USERNAME_MAX_LENGTH 32 #define RATE_LIMIT_MAX_BYTES_PER_SECOND 1024000 +#define RATE_LIMIT_MAX_EVENTS_PER_SECOND 1000 struct tcpinfo { uint32_t server_ip; @@ -80,6 +81,7 @@ struct connection { int64_t rate_limit_epoch_second; bool rate_limit_hit; int64_t rate_limit_total_bytes_this_second; + uint64_t rate_limit_events_this_second; }; // Must be a power of 2 From 7097ff36923778153d6c8fb91dc9c9e7323f820f Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:33:51 -0600 Subject: [PATCH 14/42] Move filename lookup/copy to after process has qualified --- libsshlog/bpf/sshtrace.bpf.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 68b567e..02e1ace 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -448,11 +448,7 @@ static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { u32 parent_tgid = get_parent_pid() >> 32; u32 current_tgid = bpf_get_current_pid_tgid() >> 32; - const char* filename = (const char*) BPF_CORE_READ(ctx, args[0]); - const char* const* argv = (const char* const*) BPF_CORE_READ(ctx, args[1]); - struct connection* conn; - int zero = 0; struct command* cmd = bpf_map_lookup_elem(&command_heap, &zero); if (!cmd) @@ -475,10 +471,12 @@ static int sys_enter_exec_common(struct trace_event_raw_sys_enter* ctx) { // Copy the "Command" from args[0] rather than filename // because filename without path is bounded at 255 bytes + const char* const* argv = (const char* const*) BPF_CORE_READ(ctx, args[1]); char* arg0_ptr = NULL; bpf_core_read_user(&arg0_ptr, sizeof(arg0_ptr), argv); bpf_core_read_user_str(cmd->filename, sizeof(cmd->filename), arg0_ptr); + const char* filename = (const char*) BPF_CORE_READ(ctx, args[0]); int bytes_read = 0; u32 argoffset = bpf_core_read_user_str(cmd->args, COMMAND_ARGS_MAX_BYTES, filename); argoffset = argoffset & (COMMAND_ARGS_MAX_BYTES - 1); From 15b96283cf9754f66cc86c48ee7c52d59ced5bee Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 12:45:47 -0600 Subject: [PATCH 15/42] Implemented hash map for SSHD process lookup Pull the proc name once for each process. After it's been compared (either is SSHD or not) add the proc id to a hash map Should significantly reduce overhead in the highly active bpf read listener --- libsshlog/bpf/sshtrace.bpf.c | 76 +++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 02e1ace..0543aca 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -108,10 +108,21 @@ struct { static const int AF_UNIX = 1; static const int AF_INET = 2; static const int AF_INET6 = 10; // TODO: Test and add support for ipv6 +// --- THE NEW CACHE MAP --- +// Key: TGID (Process ID) +// Value: 1 = IS_SSHD, 2 = NOT_SSHD +// LRU type automatically evicts old entries when full (4096 entries) +struct { + __uint(type, BPF_MAP_TYPE_LRU_HASH); + __uint(max_entries, 4096); + __type(key, u32); + __type(value, u8); +} proc_cache SEC(".maps"); static const int STDIN_FILENO = 0; static const int STDOUT_FILENO = 1; static const int STDERR_FILENO = 2; +#define O_WRONLY 01 static void push_event(void* context, void* event, size_t event_size) { @@ -125,10 +136,10 @@ static void push_event(void* context, void* event, size_t event_size) { bpf_perf_event_output(context, &events, BPF_F_CURRENT_CPU, event, event_size); #endif } -static int proc_is_sshd(void) { - // Just needs to be bigger than sshd\0 - char comm[6]; +// 1 = Yes (SSHD), 0 = No +static int check_proc_name(void) { + char comm[6]; bpf_get_current_comm(&comm, sizeof(comm)); // Check that process name is "sshd" @@ -137,6 +148,30 @@ static int proc_is_sshd(void) { return 0; } +// Returns: 1 if this is an SSHD process, 0 if not. +static int is_sshd_process(void) { + u32 tgid = bpf_get_current_pid_tgid() >> 32; + + // 1. Check Cache + u8* cached_val = bpf_map_lookup_elem(&proc_cache, &tgid); + if (cached_val) { + // If 1, it's SSHD. If 2, it's NOT SSHD. + return (*cached_val == 1); + } + + // 2. Cache Miss: Perform Expensive String Check + int is_sshd = check_proc_name(); + + // 3. Update Cache (Store 1 for Yes, 2 for No) + // We use 2 for "No" because 0 is often the default/null value + u8 new_val = is_sshd ? 1 : 2; + bpf_map_update_elem(&proc_cache, &tgid, &new_val, BPF_ANY); + + return is_sshd; +} + +// --- STANDARD HELPERS --- + static u64 get_parent_pid(void) { struct task_struct* curr = (struct task_struct*) bpf_get_current_task(); struct task_struct* parent = (struct task_struct*) BPF_CORE_READ(curr, parent); @@ -188,13 +223,15 @@ static struct connection* find_ancestor_connection(void) { return NULL; } +// --- HOOKS --- + SEC("tracepoint/syscalls/sys_enter_accept") int sys_enter_accept(struct trace_event_raw_sys_enter* ctx) { // field:int fd; offset:16; size:8; signed:0; // field:struct sockaddr * upeer_sockaddr; offset:24; size:8; signed:0; // field:int * upeer_addrlen; offset:32; size:8; signed:0; - if (!proc_is_sshd()) + if (!is_sshd_process()) return 1; u64 pid_tgid = bpf_get_current_pid_tgid(); @@ -215,7 +252,7 @@ int sys_enter_accept(struct trace_event_raw_sys_enter* ctx) { SEC("tracepoint/syscalls/sys_exit_accept") int sys_exit_accept(struct trace_event_raw_sys_exit* ctx) { - if (!proc_is_sshd()) + if (!is_sshd_process()) return 1; u64 pid_tgid = bpf_get_current_pid_tgid(); @@ -336,7 +373,7 @@ SEC("tracepoint/syscalls/sys_exit_clone") int sys_exit_clone(struct trace_event_raw_sys_exit* ctx) { u64 pid_tgid = bpf_get_current_pid_tgid(); - if (!proc_is_sshd()) + if (!is_sshd_process()) return 1; log_printk("sys_exit_clone\n"); @@ -390,7 +427,6 @@ int sys_exit_clone(struct trace_event_raw_sys_exit* ctx) { return 0; } -#define O_WRONLY 01 SEC("tracepoint/syscalls/sys_enter_openat") int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) { @@ -534,6 +570,10 @@ int sys_enter_exit_group(struct trace_event_raw_sys_enter* ctx) { u32 error_code = (u32) BPF_CORE_READ(ctx, args[0]); u32 current_tgid = bpf_get_current_pid_tgid() >> 32; + + // Cleanup cache entry (auto-eviction handles LRU, but specific cleanup is nice) + bpf_map_delete_elem(&proc_cache, ¤t_tgid); + struct command* cmd; struct connection* conn; @@ -703,7 +743,7 @@ static int is_rate_limited(void* ctx, struct connection* conn, int32_t new_bytes return 1; } - // 2. Check Event Count (IOPS) - Stop tiny write floods + // 2. IOPS Limiter (Stops the Event Flood CPU Spike) if (conn->rate_limit_events_this_second > RATE_LIMIT_MAX_EVENTS_PER_SECOND) { if (!conn->rate_limit_hit) { conn->rate_limit_hit = true; @@ -723,14 +763,16 @@ int sys_enter_read(struct trace_event_raw_sys_enter* ctx) { u32 fd = (uint32_t) BPF_CORE_READ(ctx, args[0]); - // Quick/efficient check to bounce out early without having to lookup connection ID - // We will never be reading non SSHD process nor stdin/stdout/stderr - if (fd == STDERR_FILENO || fd == STDOUT_FILENO || fd == STDIN_FILENO || !proc_is_sshd()) + // Fast cheap integer checks first + if (fd == STDERR_FILENO || fd == STDOUT_FILENO || fd == STDIN_FILENO) return 1; - // We want to catch the pts process which pipes all reads out to the /dev/ptsx fd - u32 parent_tgid = get_parent_pid() >> 32; + // If it's NOT SSHD (based on cache), we exit immediately. + if (!is_sshd_process()) + return 1; + // If we are here, we are an SSHD process. Safe to do the heavy logic. + u32 parent_tgid = get_parent_pid() >> 32; struct connection* conn = bpf_map_lookup_elem(&connections, &parent_tgid); if (conn != NULL) { @@ -752,10 +794,8 @@ int sys_enter_read(struct trace_event_raw_sys_enter* ctx) { SEC("tracepoint/syscalls/sys_exit_read") int sys_exit_read(struct trace_event_raw_sys_exit* ctx) { - - // Quick/efficient check to bounce out early without having to lookup connection ID - // We will never be reading non SSHD process nor stdin/stdout/stderr - if (!proc_is_sshd()) + // Fast Cache Check + if (!is_sshd_process()) return 1; int32_t ret = (int32_t) BPF_CORE_READ(ctx, ret); @@ -798,4 +838,4 @@ int sys_exit_read(struct trace_event_raw_sys_exit* ctx) { push_event(ctx, e, sizeof(struct terminal_update_event)); } return 0; -} +} \ No newline at end of file From a799ac28a5a443e71fc45364b2dfd986f3d4e8b2 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 13:37:03 -0600 Subject: [PATCH 16/42] Fixed race condition in short-lived processes while app is starting --- .../proc_parsers/existing_connections.cpp | 265 ++++++++++-------- 1 file changed, 145 insertions(+), 120 deletions(-) diff --git a/libsshlog/proc_parsers/existing_connections.cpp b/libsshlog/proc_parsers/existing_connections.cpp index ca44fca..3980ce4 100644 --- a/libsshlog/proc_parsers/existing_connections.cpp +++ b/libsshlog/proc_parsers/existing_connections.cpp @@ -24,104 +24,119 @@ ExistingConnections::ExistingConnections() { // Build a list of all processes in a hashmap indexed by process ID std::unordered_map processes; - for (const auto& process : pfs.get_processes()) { - processes.insert({process.id(), process}); + + try { + for (const auto& process : pfs.get_processes()) { + processes.insert({process.id(), process}); + } + } catch (const std::exception& e) { + PLOG_ERROR << "Failed to list processes: " << e.what(); + return; } int sshd_port = SSHD_DEFAULT_PORT; + // Find all "sshd" processes for (const std::pair& proc_data : processes) { pfs::task process = proc_data.second; - if (process.get_comm() != SSHD_PROCESS_NAME) - continue; + // Processes (especially short-lived ones from exec_stress) can exit + // after we list them but before we inspect them. + // We must catch exceptions here to prevent the agent from crashing. + try { + if (process.get_comm() != SSHD_PROCESS_NAME) + continue; - bool is_pts_target = is_pts(process, processes); - int ppid = process.get_stat().ppid; + bool is_pts_target = is_pts(process, processes); + int ppid = process.get_stat().ppid; - if (ppid == 1) { - // This is our sshd process, try and determine the port - sshd_port = discover_sshd_listen_port(pfs, process); - } + if (ppid == 1) { + // This is our sshd process, try and determine the port + sshd_port = discover_sshd_listen_port(pfs, process); + } - if (is_pts_target) { - struct ssh_session session; - - // I am the pts process, so find the parent (ptm) and child (bash) - // process - session.pts_pid = process.id(); - session.ptm_pid = ppid; - session.bash_pid = SSH_SESSION_UNKNOWN; - session.client_ip = ""; - session.client_port = SSH_SESSION_UNKNOWN; - session.server_ip = ""; - session.server_port = SSH_SESSION_UNKNOWN; - - // Convert process start time to CLOCK_MONOTONIC time - // to match what comes out of BPF - // Take process start time (measured in "jiffies" since bootup, and convert to nanoseconds) - // BPF is using nanos since boot - const int64_t NANOS_IN_A_SEC = 1000000000; - // https://unix.stackexchange.com/questions/62154/when-was-a-process-started - static int64_t JIFFIES_PER_SECOND = sysconf(_SC_CLK_TCK); - - int64_t proc_start_seconds_after_boot = process.get_stat().starttime / JIFFIES_PER_SECOND; - int64_t proc_start_nanos_after_boot = proc_start_seconds_after_boot * NANOS_IN_A_SEC; - - session.start_time = proc_start_nanos_after_boot; - // Requires an adjustment to convert from BOOTTIME to MONOTONIC time so that it matches what ebpf spits out - // ebpf spits out monotonic time (which does not include sleep/suspend time) whereas stat is using boottime - - const int64_t MILLIS_IN_A_SEC = 1000; - const int64_t NANOS_IN_A_MILLIS = 1000000; - struct timespec ts_bt, ts_mt; - clock_gettime(CLOCK_MONOTONIC, &ts_mt); - clock_gettime(CLOCK_BOOTTIME, &ts_bt); - - int64_t boottime_diff = - (ts_bt.tv_sec - ts_mt.tv_sec) * MILLIS_IN_A_SEC + (ts_bt.tv_nsec - ts_mt.tv_nsec) / NANOS_IN_A_MILLIS; - PLOG_DEBUG << "existing connection millisecond adjustment: " << boottime_diff; - - session.start_time -= (boottime_diff * NANOS_IN_A_MILLIS); - - session.user_id = process.get_status().uid.real; - - // Iterate the processes and stop at the first process that lists - // ptm_pid as its parent - for (const std::pair& child_proc_data : processes) { - pfs::task child_proc = child_proc_data.second; - try { - int child_parent = child_proc.get_stat().ppid; - if (child_parent == session.pts_pid) { - session.bash_pid = child_proc.id(); - break; + if (is_pts_target) { + struct ssh_session session; + + // I am the pts process, so find the parent (ptm) and child (bash) + // process + session.pts_pid = process.id(); + session.ptm_pid = ppid; + session.bash_pid = SSH_SESSION_UNKNOWN; + session.client_ip = ""; + session.client_port = SSH_SESSION_UNKNOWN; + session.server_ip = ""; + session.server_port = SSH_SESSION_UNKNOWN; + + // Convert process start time to CLOCK_MONOTONIC time + const int64_t NANOS_IN_A_SEC = 1000000000; + static int64_t JIFFIES_PER_SECOND = sysconf(_SC_CLK_TCK); + + int64_t proc_start_seconds_after_boot = process.get_stat().starttime / JIFFIES_PER_SECOND; + int64_t proc_start_nanos_after_boot = proc_start_seconds_after_boot * NANOS_IN_A_SEC; + + session.start_time = proc_start_nanos_after_boot; + + const int64_t MILLIS_IN_A_SEC = 1000; + const int64_t NANOS_IN_A_MILLIS = 1000000; + struct timespec ts_bt, ts_mt; + clock_gettime(CLOCK_MONOTONIC, &ts_mt); + clock_gettime(CLOCK_BOOTTIME, &ts_bt); + + int64_t boottime_diff = + (ts_bt.tv_sec - ts_mt.tv_sec) * MILLIS_IN_A_SEC + (ts_bt.tv_nsec - ts_mt.tv_nsec) / NANOS_IN_A_MILLIS; + // PLOG_DEBUG << "existing connection millisecond adjustment: " << boottime_diff; + + session.start_time -= (boottime_diff * NANOS_IN_A_MILLIS); + + session.user_id = process.get_status().uid.real; + + // Iterate the processes and stop at the first process that lists + // ptm_pid as its parent + for (const std::pair& child_proc_data : processes) { + pfs::task child_proc = child_proc_data.second; + try { + int child_parent = child_proc.get_stat().ppid; + if (child_parent == session.pts_pid) { + session.bash_pid = child_proc.id(); + break; + } + } catch (const std::exception& e) { + // Child process gone? ignore. } - } catch (const std::runtime_error& e) { } - } - - // Find the socket/IP information for this process - // First, find the sockets (inode) IDs from /proc/[pid]/fd/ - std::unordered_map proc_sockets_by_inode; - for (const std::pair& fd_data : process.get_fds()) { - struct stat st = fd_data.second.get_target_stat(); - if (S_ISSOCK(st.st_mode)) { - proc_sockets_by_inode.insert({st.st_ino, process}); + // Find the socket/IP information for this process + std::unordered_map proc_sockets_by_inode; + + // get_fds() can throw if process is gone + for (const std::pair& fd_data : process.get_fds()) { + try { + struct stat st = fd_data.second.get_target_stat(); + if (S_ISSOCK(st.st_mode)) { + proc_sockets_by_inode.insert({st.st_ino, process}); + } + } catch (...) { + continue; + } } - } - for (auto& net : pfs.get_net().get_tcp()) { - if (net.local_port == sshd_port && proc_sockets_by_inode.find(net.inode) != proc_sockets_by_inode.end()) { + for (auto& net : pfs.get_net().get_tcp()) { + if (net.local_port == sshd_port && proc_sockets_by_inode.find(net.inode) != proc_sockets_by_inode.end()) { - session.client_ip = net.remote_ip.to_string(); - session.server_ip = net.local_ip.to_string(); - session.client_port = net.remote_port; - session.server_port = net.local_port; + session.client_ip = net.remote_ip.to_string(); + session.server_ip = net.local_ip.to_string(); + session.client_port = net.remote_port; + session.server_port = net.local_port; + } } - } - this->sessions.push_back(session); + this->sessions.push_back(session); + } + } catch (const std::exception& e) { + // Process likely exited during inspection. Use DEBUG log so we don't spam errors during stress tests. + PLOG_DEBUG << "Process vanished during inspection (race condition): " << e.what(); + continue; } } @@ -137,55 +152,65 @@ ExistingConnections::~ExistingConnections() {} std::vector ExistingConnections::get_sessions() { return this->sessions; } static bool is_pts(pfs::task& process, std::unordered_map processes) { - // Given an sshd process, check to see if it's the pts side, ptm side, or the - // root sshd proc The 3 processes are generally decendents of each other - - // Make sure target proc is sshd - if (process.get_comm() != SSHD_PROCESS_NAME) - return false; - - // Make sure he has a parent - int ppid = process.get_stat().ppid; - if (ppid == 1) - return false; - if (processes.find(ppid) == processes.end()) - return false; - - // Parent should also be "sshd" - pfs::task parent = processes.at(ppid); - int parent_ppid = parent.get_stat().ppid; - if (parent.get_comm() != SSHD_PROCESS_NAME || parent_ppid == 1) - return false; - - if (processes.find(parent_ppid) == processes.end()) - return false; + try { + // Make sure target proc is sshd + if (process.get_comm() != SSHD_PROCESS_NAME) + return false; - // Grandparent should exist, and it's PPID should be 1 - pfs::task grandparent = processes.at(parent_ppid); - int grandparent_ppid = grandparent.get_stat().ppid; - if (grandparent.get_comm() != SSHD_PROCESS_NAME || grandparent_ppid != 1) + // Make sure he has a parent + int ppid = process.get_stat().ppid; + if (ppid == 1) + return false; + if (processes.find(ppid) == processes.end()) + return false; + + // Parent should also be "sshd" + pfs::task parent = processes.at(ppid); + + // Check parent details (can throw if parent died) + int parent_ppid = parent.get_stat().ppid; + if (parent.get_comm() != SSHD_PROCESS_NAME || parent_ppid == 1) + return false; + + if (processes.find(parent_ppid) == processes.end()) + return false; + + // Grandparent should exist, and it's PPID should be 1 + pfs::task grandparent = processes.at(parent_ppid); + int grandparent_ppid = grandparent.get_stat().ppid; + if (grandparent.get_comm() != SSHD_PROCESS_NAME || grandparent_ppid != 1) + return false; + + return true; + } catch (...) { + // Any failure to read proc files means this isn't a stable SSH session we can inspect return false; - - return true; + } } static int discover_sshd_listen_port(pfs::procfs& pfs, pfs::task& sshd_process) { - int test = 1; - - std::unordered_map proc_sockets_by_inode; - for (const std::pair& fd_data : sshd_process.get_fds()) { - struct stat st = fd_data.second.get_target_stat(); - if (S_ISSOCK(st.st_mode)) { - proc_sockets_by_inode.insert({st.st_ino, sshd_process}); + try { + std::unordered_map proc_sockets_by_inode; + for (const std::pair& fd_data : sshd_process.get_fds()) { + try { + struct stat st = fd_data.second.get_target_stat(); + if (S_ISSOCK(st.st_mode)) { + proc_sockets_by_inode.insert({st.st_ino, sshd_process}); + } + } catch (...) { + continue; + } } - } - for (auto& net : pfs.get_net().get_tcp()) { - if (proc_sockets_by_inode.find(net.inode) != proc_sockets_by_inode.end() && - (net.socket_net_state == pfs::net_socket::net_state::listen)) { + for (auto& net : pfs.get_net().get_tcp()) { + if (proc_sockets_by_inode.find(net.inode) != proc_sockets_by_inode.end() && + (net.socket_net_state == pfs::net_socket::net_state::listen)) { - return net.local_port; + return net.local_port; + } } + } catch (...) { + // Return default if inspection fails } // If we couldn't determine it, return default port (22) From 669659c156d76f3c8db1ce1156a555c29a21f47c Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 13:46:52 -0600 Subject: [PATCH 17/42] Use newer version of yyjson --- libsshlog/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsshlog/CMakeLists.txt b/libsshlog/CMakeLists.txt index ad97670..0d1e3ea 100644 --- a/libsshlog/CMakeLists.txt +++ b/libsshlog/CMakeLists.txt @@ -4,7 +4,7 @@ option(BUILD_TESTS "Build test programs" OFF) option(USE_RINGBUF "Use more efficient Ringbuf for BPF comms, requires recent kernel" OFF) -CPMAddPackage("gh:ibireme/yyjson#0.6.0") +CPMAddPackage("gh:ibireme/yyjson#0.12.0") CPMAddPackage("gh:SergiusTheBest/plog#1.1.9") CPMAddPackage( From b759d0843ebf98207a2fe4edeedcad198036321a Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 14:02:21 -0600 Subject: [PATCH 18/42] Significant CPU reduction (~20x) on high volume of events --- libsshlog/sshtrace_wrapper.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libsshlog/sshtrace_wrapper.cpp b/libsshlog/sshtrace_wrapper.cpp index eb540dd..2ed47e3 100644 --- a/libsshlog/sshtrace_wrapper.cpp +++ b/libsshlog/sshtrace_wrapper.cpp @@ -166,18 +166,19 @@ char* SSHTraceWrapper::poll(int timeout_ms) { q.enqueue(json_data); } - const int MICROSEC_IN_A_MILLISEC = 1000; char* obj; - bool success = q.wait_dequeue_timed(obj, timeout_ms * MICROSEC_IN_A_MILLISEC); + + // Check queue once. Non-blocking. + bool success = q.try_dequeue(obj); if (!success) { - PLOG_VERBOSE << "Polling for data..."; + // If the queue is empty, we MUST sleep to yield the CPU. + // 10ms is a good balance for a log agent (unnoticeable lag, near 0% CPU). + std::this_thread::sleep_for(std::chrono::milliseconds(10)); return nullptr; } return obj; - // char *themem = (char *)malloc(100); - // return themem; } void SSHTraceWrapper::queue_event(void* event_struct) { From 889e7217536e5fb352cd0e758a59158f755550d5 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 14:05:36 -0600 Subject: [PATCH 19/42] Using newer version of plog lib --- libsshlog/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsshlog/CMakeLists.txt b/libsshlog/CMakeLists.txt index 0d1e3ea..3db0033 100644 --- a/libsshlog/CMakeLists.txt +++ b/libsshlog/CMakeLists.txt @@ -5,7 +5,7 @@ option(USE_RINGBUF "Use more efficient Ringbuf for BPF comms, requires recent ke CPMAddPackage("gh:ibireme/yyjson#0.12.0") -CPMAddPackage("gh:SergiusTheBest/plog#1.1.9") +CPMAddPackage("gh:SergiusTheBest/plog#1.1.11") CPMAddPackage( NAME pfs From 448e7af43ade86e48aecf2d555adbb40c9c0ceff Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 18:17:55 -0600 Subject: [PATCH 20/42] Add unit tests --- libsshlog/CMakeLists.txt | 6 +- libsshlog/tests/CMakeLists.txt | 21 ++ libsshlog/tests/integration_tests.cpp | 426 ++++++++++++++++++++++++++ 3 files changed, 452 insertions(+), 1 deletion(-) create mode 100644 libsshlog/tests/CMakeLists.txt create mode 100644 libsshlog/tests/integration_tests.cpp diff --git a/libsshlog/CMakeLists.txt b/libsshlog/CMakeLists.txt index 3db0033..42353f8 100644 --- a/libsshlog/CMakeLists.txt +++ b/libsshlog/CMakeLists.txt @@ -121,6 +121,7 @@ add_library(sshlog SHARED ) target_link_libraries(sshlog + PRIVATE sshtrace_skel ${LIBBPF_LIBRARIES} yyjson @@ -147,4 +148,7 @@ if(USE_RINGBUF) endif() set_target_properties(sshlog PROPERTIES SOVERSION 1) -install (TARGETS sshlog DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) \ No newline at end of file +install (TARGETS sshlog DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) + + +add_subdirectory(tests) \ No newline at end of file diff --git a/libsshlog/tests/CMakeLists.txt b/libsshlog/tests/CMakeLists.txt new file mode 100644 index 0000000..e1796ab --- /dev/null +++ b/libsshlog/tests/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 3.14) + +# 1. Fetch Catch2 (Standard Modern Approach) + +CPMAddPackage("gh:catchorg/Catch2#v3.12.0") + +# 2. Define the Test Executable +add_executable(integration_tests integration_tests.cpp) + +# 3. Link dependencies +target_link_libraries(integration_tests + PRIVATE + sshlog + Catch2::Catch2WithMain + yyjson +) +target_include_directories(integration_tests PRIVATE ../) + +# 4. Register with CTest +include(CTest) +add_test(NAME IntegrationTests COMMAND integration_tests) \ No newline at end of file diff --git a/libsshlog/tests/integration_tests.cpp b/libsshlog/tests/integration_tests.cpp new file mode 100644 index 0000000..fe23c29 --- /dev/null +++ b/libsshlog/tests/integration_tests.cpp @@ -0,0 +1,426 @@ +#define CATCH_CONFIG_MAIN +#include + +#include "sshlog.h" +#include "yyjson.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// --- CONFIGURATION --- +const std::string SSH_HOST = "127.0.0.1"; +const std::string SSH_USER = "mhill"; +const std::string SSH_KEY = "/home/mhill/.ssh/id_rsa"; + +// --- HELPER: UUID GENERATOR --- +std::string generate_uuid() { + static int i = 0; + return "token_" + std::to_string(time(NULL)) + "_" + std::to_string(i++); +} + +struct JsonView { + yyjson_val* node; + JsonView(yyjson_val* v) : node(v) {} + + // --- Navigation --- + JsonView operator[](const char* key) const { return JsonView(yyjson_obj_get(node, key)); } + + // --- String Comparison --- + bool operator==(const std::string& expected) const { + return node && yyjson_is_str(node) && std::string(yyjson_get_str(node)) == expected; + } + + bool operator!=(const std::string& expected) const { return !(*this == expected); } + + bool contains(const std::string& substring) const { + if (!node || !yyjson_is_str(node)) + return false; + std::string val = yyjson_get_str(node); + return val.find(substring) != std::string::npos; + } + + // --- Integer Comparison Logic (The Core Fix) --- + // We strictly compare int64_t vs uint64_t to avoid wrap-around bugs. + + bool operator==(int64_t expected) const { + if (!node) + return false; + if (yyjson_is_int(node)) + return yyjson_get_int(node) == expected; + if (yyjson_is_uint(node)) { + if (expected < 0) + return false; // Unsigned JSON can't equal negative C++ int + return yyjson_get_uint(node) == (uint64_t) expected; + } + return false; + } + + bool operator!=(int64_t expected) const { return !(*this == expected); } + + bool operator<(int64_t expected) const { + if (!node) + return false; + if (yyjson_is_int(node)) + return yyjson_get_int(node) < expected; + if (yyjson_is_uint(node)) { + if (expected < 0) + return false; // Unsigned (pos) can never be less than negative + return yyjson_get_uint(node) < (uint64_t) expected; + } + return false; + } + + bool operator>(int64_t expected) const { + if (!node) + return false; + if (yyjson_is_int(node)) + return yyjson_get_int(node) > expected; + if (yyjson_is_uint(node)) { + if (expected < 0) + return true; // Unsigned (pos) is always greater than negative + return yyjson_get_uint(node) > (uint64_t) expected; + } + return false; + } + + bool operator<=(int64_t expected) const { return !(*this > expected); } + bool operator>=(int64_t expected) const { return !(*this < expected); } + + // Overloads for plain 'int' to resolve ambiguity + bool operator==(int v) const { return *this == (int64_t) v; } + bool operator!=(int v) const { return *this != (int64_t) v; } + bool operator<(int v) const { return *this < (int64_t) v; } + bool operator>(int v) const { return *this > (int64_t) v; } + bool operator<=(int v) const { return *this <= (int64_t) v; } + bool operator>=(int v) const { return *this >= (int64_t) v; } + + // --- Existence Check --- + operator bool() const { return node != nullptr; } + // Helper to extract string value + std::string get_string() const { + if (node && yyjson_is_str(node)) + return yyjson_get_str(node); + return ""; + } + + // Helper to extract int value + int64_t get_int() const { + if (node && yyjson_is_int(node)) + return yyjson_get_int(node); + return 0; + } +}; + +// --- LOG BUFFER --- +class LogBuffer { + private: + std::vector logs; + std::mutex mtx; + + public: + void add(const char* json) { + std::lock_guard lock(mtx); + logs.emplace_back(json); + } + + size_t size() { + std::lock_guard lock(mtx); + return logs.size(); + } + + void clear() { + std::lock_guard lock(mtx); + logs.clear(); + } + + std::vector get_snapshot() { + std::lock_guard lock(mtx); + return logs; + } +}; + +// --- DAEMON WRAPPER --- +class SSHLogDaemon { + private: + SSHLOG* ctx = nullptr; + std::thread worker; + std::atomic stop_flag{false}; + + public: + LogBuffer captured_logs; + + SSHLogDaemon() { + if (geteuid() != 0) { + std::cerr << "[-] Must run as root for BPF." << std::endl; + exit(1); + } + + sshlog_options opts = sshlog_get_default_options(); + opts.log_level = SSHLOG_LOG_LEVEL::LOG_WARNING; + + ctx = sshlog_init(&opts); + if (!ctx) { + std::cerr << "[-] Failed to init sshlog!" << std::endl; + exit(1); + } + + worker = std::thread([this]() { + while (!stop_flag && sshlog_is_ok(ctx) == 0) { + char* json = sshlog_event_poll(ctx, 50); + if (json) { + captured_logs.add(json); + sshlog_event_release(json); + } + } + }); + + // Reduced timeout: 1 second should be enough for BPF to load on most systems + std::this_thread::sleep_for(std::chrono::seconds(1)); + + // 2. DRAIN: Wipe the buffer clean. + // This ensures tests don't accidentally match stale events from startup. + std::cout << "[Setup] Draining " << captured_logs.size() << " initial startup events..." << std::endl; + captured_logs.clear(); + } + + ~SSHLogDaemon() { + stop_flag = true; + if (worker.joinable()) + worker.join(); + sshlog_release(ctx); + } +}; + +static SSHLogDaemon* daemon_ptr = nullptr; + +// --- WAIT HELPER --- +using JsonMatcher = std::function; + +bool wait_for_event(JsonMatcher matcher, int timeout_sec = 5) { + auto start = std::chrono::steady_clock::now(); + size_t processed_count = 0; + + while (true) { + auto logs = daemon_ptr->captured_logs.get_snapshot(); + + for (size_t i = processed_count; i < logs.size(); ++i) { + const std::string& log_line = logs[i]; + + yyjson_doc* doc = yyjson_read(log_line.c_str(), log_line.size(), 0); + if (doc) { + JsonView root(yyjson_doc_get_root(doc)); + bool matched = matcher(root); + yyjson_doc_free(doc); + + if (matched) { + // REQUIREMENT: Print the matching JSON + std::cout << "\n[MATCH FOUND]: " << log_line << std::endl; + return true; + } + } + } + processed_count = logs.size(); + + auto now = std::chrono::steady_clock::now(); + if (std::chrono::duration_cast(now - start).count() > timeout_sec) { + return false; + } + std::this_thread::sleep_for(std::chrono::milliseconds(200)); + } + return false; +} + +// --- TESTS --- + +TEST_CASE("SSHLog Library Integration (Strict JSON)", "[lib]") { + static SSHLogDaemon daemon; + daemon_ptr = &daemon; + + SECTION("New Connection Detection") { + INFO("Connecting to " << SSH_HOST); + std::string cmd = "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'exit'"; + std::system(cmd.c_str()); + + INFO("Parsing JSON for event_type: 'connection_new'"); + + bool found = wait_for_event([](JsonView json) { return json["event_type"] == "connection_new"; }); + CHECK(found == true); + + found = wait_for_event([](JsonView json) { return json["event_type"] == "connection_established"; }); + CHECK(found == true); + + found = wait_for_event([](JsonView json) { return json["event_type"] == "connection_close"; }); + CHECK(found == true); + } + + SECTION("Command Execution Tracking") { + std::string token = generate_uuid(); + std::string cmd_str = "ls " + token; + INFO("Running: " << cmd_str); + + std::string cmd = + "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " '" + cmd_str + "'"; + std::system(cmd.c_str()); + + INFO("Parsing JSON for 'command_start' with token: " << token); + + bool found = false; + int64_t pid = -1; + + found = wait_for_event([&](JsonView json) { + // Check for string "command_start" and token inside args + if ((json["event_type"] == "command_start") && (json["filename"] == "ls") && (json["args"].contains(token)) && + (json["exit_code"] == -1)) { + pid = json["pid"].get_int(); + return true; + } + return false; + }); + + CHECK(found == true); + + INFO("Looking for PID " << pid); + + INFO("Parsing JSON for 'command_end' with token: " << token); + found = wait_for_event([&](JsonView json) { + // Check for string "command_end" and token inside args + return (json["event_type"] == "command_finish") && (json["filename"] == "ls") && (json["pid"] == pid) && + (json["args"].contains(token)) && (json["exit_code"] != 0) && (json["stdout_size"] > 0); + }); + + CHECK(found == true); + } + + SECTION("File Upload (SCP) Detection") { + std::string token = generate_uuid(); + std::string remote_path = "/tmp/sshlog_test_" + token; + std::system("echo 'payload' > /tmp/sshlog_dummy"); + + INFO("Uploading to " << remote_path); + std::string cmd = "scp -o StrictHostKeyChecking=no -i " + SSH_KEY + " /tmp/sshlog_dummy " + SSH_USER + "@" + + SSH_HOST + ":" + remote_path; + std::system(cmd.c_str()); + + INFO("Parsing JSON for 'file_upload' with path: " << remote_path); + + bool found = wait_for_event([&](JsonView json) { + // Check for string "file_upload" + // Checks both 'filename' and 'target_path' just in case schema varies + bool name_match = (json["filename"] == remote_path) || (json["target_path"] == remote_path); + + return (json["event_type"] == "file_upload") && name_match; + }); + + CHECK(found == true); + std::remove("/tmp/sshlog_dummy"); + } +} + +// ... (Previous includes and setup code remain the same) ... + +// --- NEW TEST CASES --- + +TEST_CASE("SSHLog Advanced Features", "[lib]") { + static SSHLogDaemon daemon; + daemon_ptr = &daemon; + + SECTION("Authentication Failure Detection") { + INFO("Attempting failed login for user 'baduser'"); + + // Use -o BatchMode=yes -o PasswordAuthentication=no to fail immediately without prompt + // We attempt to log in as a non-existent user or just fail auth + std::string cmd = "ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o PasswordAuthentication=no baduser@" + + SSH_HOST + " 'exit' 2>/dev/null"; + + // We expect the command to fail (ret != 0) + int ret = std::system(cmd.c_str()); + CHECK(ret != 0); + + INFO("Waiting for 'connection_auth_failed' event"); + + bool found = wait_for_event([](JsonView json) { + return (json["event_type"] == "connection_auth_failed") && (json["username"] == "baduser"); + }); + + CHECK(found == true); + } + + SECTION("Command Output Capture (Stdout)") { + std::string token = generate_uuid(); + INFO("Running command that generates specific output: " << token); + + // We run a command that prints the token to stdout + std::string cmd = + "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'ls " + token + "'"; + std::system(cmd.c_str()); + + INFO("Waiting for 'command_finish' with stdout containing token"); + + bool found = wait_for_event([&](JsonView json) { + // Check that we captured the stdout + // Log entry example: {"event_type":"command_finish", ..., "stdout":"token_...\n"} + return (json["event_type"] == "command_finish") && (json["stdout"].contains(token)); + }); + + CHECK(found == true); + } + + SECTION("Terminal Keystroke Logging") { + // This is harder to simulate with 'ssh command' because that doesn't allocate a PTY. + // We use Python/Expect logic via 'script' or just assume 'ssh -tt' works. + // 'ssh -tt' forces TTY allocation. + + INFO("Simulating interactive terminal session"); + + // We send a command that sleeps so the session stays open, then we send input? + // Actually, just running a command with -tt might trigger terminal_update events + // for the output, even if we don't send keystrokes manually. + std::string unique_output = "TERM_DATA_" + generate_uuid(); + + std::string cmd = "ssh -tt -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + + " 'echo " + unique_output + "; exit'"; + std::system(cmd.c_str()); + + INFO("Waiting for 'terminal_update' containing output"); + + bool found = wait_for_event([&](JsonView json) { + // Look for the echoed text in the terminal stream + return (json["event_type"] == "terminal_update") && (json["terminal_data"].contains(unique_output)); + }); + + CHECK(found == true); + } + + SECTION("Recursive Command Execution (Shell Chains)") { + // Your logs showed: sh -c ... -> run-parts -> uname + // Let's verify we catch a child process spawned by a shell script. + + std::string token = generate_uuid(); + INFO("Running nested command: sh -c 'ls " << token << "'"); + + // We run 'sh -c ls' to create a parent-child relationship (sshd -> sh -> ls) + std::string cmd = "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + + " 'sh -c \"ls " + token + "\"'"; + std::system(cmd.c_str()); + + INFO("Waiting for the child 'ls' command event"); + + bool found = wait_for_event([&](JsonView json) { + // We want to make sure we caught the 'ls', not just the 'sh' + // The 'filename' should be 'ls' (or contain it) and args should have token + bool is_ls = (json["filename"] == "ls") || (json["filename"] == "/usr/bin/ls"); + + return (json["event_type"] == "command_start") && is_ls && (json["args"].contains(token)); + }); + + CHECK(found == true); + } +} \ No newline at end of file From 49e5e1876bd3e78348d10131820a2cde639e9d6b Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 28 Jan 2026 18:18:09 -0600 Subject: [PATCH 21/42] Fix file transfer logic to detect sftp-server case --- libsshlog/bpf/sshtrace.bpf.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 0543aca..7649146 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -435,13 +435,14 @@ int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) { // field:int flags; offset:32; size:8; signed:0; // field:umode_t mode; offset:40; size:8; signed:0; - // Just needs to be bigger than scp\0 - char pname[5]; - + // Buffer for process name (16 is the kernel max for comms) + char pname[16]; bpf_get_current_comm(&pname, sizeof(pname)); - // Check that process name is "scp" - if (pname[0] != 's' || pname[1] != 'c' || pname[2] != 'p' || pname[3] != '\0') { +#define IS_CMD(buf, str) (__builtin_memcmp(buf, str, sizeof(str)) == 0) + + // Check the name of the command. Either of these indicate a file upload + if (!IS_CMD(pname, "scp") && !IS_CMD(pname, "sftp-server")) { return 0; } @@ -450,7 +451,6 @@ int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) { u32 gparent_tgid = get_grandparent_pid() >> 32; struct connection* conn = bpf_map_lookup_elem(&connections, &gparent_tgid); if (conn != NULL) { - u32 flags = (size_t) BPF_CORE_READ(ctx, args[2]); if (flags & O_WRONLY) { From 38f0f1508223151187ba8f59f5df1e37c90c8035 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 29 Jan 2026 10:48:55 -0600 Subject: [PATCH 22/42] Update test --- libsshlog/tests/integration_tests.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/libsshlog/tests/integration_tests.cpp b/libsshlog/tests/integration_tests.cpp index fe23c29..c94e629 100644 --- a/libsshlog/tests/integration_tests.cpp +++ b/libsshlog/tests/integration_tests.cpp @@ -19,6 +19,7 @@ const std::string SSH_HOST = "127.0.0.1"; const std::string SSH_USER = "mhill"; const std::string SSH_KEY = "/home/mhill/.ssh/id_rsa"; +const std::string SSH_ARGS = "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"; // --- HELPER: UUID GENERATOR --- std::string generate_uuid() { @@ -246,7 +247,7 @@ TEST_CASE("SSHLog Library Integration (Strict JSON)", "[lib]") { SECTION("New Connection Detection") { INFO("Connecting to " << SSH_HOST); - std::string cmd = "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'exit'"; + std::string cmd = "ssh " + SSH_ARGS + " -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'exit'"; std::system(cmd.c_str()); INFO("Parsing JSON for event_type: 'connection_new'"); @@ -266,8 +267,7 @@ TEST_CASE("SSHLog Library Integration (Strict JSON)", "[lib]") { std::string cmd_str = "ls " + token; INFO("Running: " << cmd_str); - std::string cmd = - "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " '" + cmd_str + "'"; + std::string cmd = "ssh " + SSH_ARGS + " -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " '" + cmd_str + "'"; std::system(cmd.c_str()); INFO("Parsing JSON for 'command_start' with token: " << token); @@ -305,8 +305,8 @@ TEST_CASE("SSHLog Library Integration (Strict JSON)", "[lib]") { std::system("echo 'payload' > /tmp/sshlog_dummy"); INFO("Uploading to " << remote_path); - std::string cmd = "scp -o StrictHostKeyChecking=no -i " + SSH_KEY + " /tmp/sshlog_dummy " + SSH_USER + "@" + - SSH_HOST + ":" + remote_path; + std::string cmd = + "scp " + SSH_ARGS + " -i " + SSH_KEY + " /tmp/sshlog_dummy " + SSH_USER + "@" + SSH_HOST + ":" + remote_path; std::system(cmd.c_str()); INFO("Parsing JSON for 'file_upload' with path: " << remote_path); @@ -337,8 +337,8 @@ TEST_CASE("SSHLog Advanced Features", "[lib]") { // Use -o BatchMode=yes -o PasswordAuthentication=no to fail immediately without prompt // We attempt to log in as a non-existent user or just fail auth - std::string cmd = "ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o PasswordAuthentication=no baduser@" + - SSH_HOST + " 'exit' 2>/dev/null"; + std::string cmd = "ssh -o BatchMode=yes -o " + SSH_ARGS + " -o PasswordAuthentication=no baduser@" + SSH_HOST + + " 'exit' 2>/dev/null"; // We expect the command to fail (ret != 0) int ret = std::system(cmd.c_str()); @@ -358,8 +358,7 @@ TEST_CASE("SSHLog Advanced Features", "[lib]") { INFO("Running command that generates specific output: " << token); // We run a command that prints the token to stdout - std::string cmd = - "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'ls " + token + "'"; + std::string cmd = "ssh " + SSH_ARGS + " -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'ls " + token + "'"; std::system(cmd.c_str()); INFO("Waiting for 'command_finish' with stdout containing token"); @@ -385,8 +384,8 @@ TEST_CASE("SSHLog Advanced Features", "[lib]") { // for the output, even if we don't send keystrokes manually. std::string unique_output = "TERM_DATA_" + generate_uuid(); - std::string cmd = "ssh -tt -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + - " 'echo " + unique_output + "; exit'"; + std::string cmd = "ssh -tt " + SSH_ARGS + " -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'echo " + + unique_output + "; exit'"; std::system(cmd.c_str()); INFO("Waiting for 'terminal_update' containing output"); @@ -407,8 +406,8 @@ TEST_CASE("SSHLog Advanced Features", "[lib]") { INFO("Running nested command: sh -c 'ls " << token << "'"); // We run 'sh -c ls' to create a parent-child relationship (sshd -> sh -> ls) - std::string cmd = "ssh -o StrictHostKeyChecking=no -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + - " 'sh -c \"ls " + token + "\"'"; + std::string cmd = + "ssh " + SSH_ARGS + " -i " + SSH_KEY + " " + SSH_USER + "@" + SSH_HOST + " 'sh -c \"ls " + token + "\"'"; std::system(cmd.c_str()); INFO("Waiting for the child 'ls' command event"); From bdc3367787f9ac0c9750b2a9f3d7b4fed32280a2 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 29 Jan 2026 10:49:48 -0600 Subject: [PATCH 23/42] Fix existing connection detection for newer openssh versions ssh session procs are being named "sshd-session" now instead of "sshd" --- libsshlog/bpf/sshtrace.bpf.c | 13 ++++--- .../proc_parsers/existing_connections.cpp | 37 +++++++++++++------ 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/libsshlog/bpf/sshtrace.bpf.c b/libsshlog/bpf/sshtrace.bpf.c index 7649146..fda0792 100644 --- a/libsshlog/bpf/sshtrace.bpf.c +++ b/libsshlog/bpf/sshtrace.bpf.c @@ -44,6 +44,8 @@ char LICENSE[] SEC("license") = "GPL"; #define log_printk(fmt, args...) #endif +#define IS_CMD(buf, str) (__builtin_memcmp(buf, str, sizeof(str)) == 0) + #ifdef SSHTRACE_USE_RINGBUF // Ringbuf is more efficient but requires at least kernel version 5.8 struct { @@ -137,14 +139,15 @@ static void push_event(void* context, void* event, size_t event_size) { #endif } -// 1 = Yes (SSHD), 0 = No +// 1 = Yes (SSHD or sshd-session), 0 = No static int check_proc_name(void) { - char comm[6]; + char comm[14]; bpf_get_current_comm(&comm, sizeof(comm)); - // Check that process name is "sshd" - if (comm[0] == 's' && comm[1] == 's' && comm[2] == 'h' && comm[3] == 'd' && comm[4] == '\0') + // Check the name of the command. Either of these indicate an sshd session process + if (IS_CMD(comm, "sshd") || IS_CMD(comm, "sshd-session")) { return 1; + } return 0; } @@ -439,8 +442,6 @@ int sys_enter_openat(struct trace_event_raw_sys_enter* ctx) { char pname[16]; bpf_get_current_comm(&pname, sizeof(pname)); -#define IS_CMD(buf, str) (__builtin_memcmp(buf, str, sizeof(str)) == 0) - // Check the name of the command. Either of these indicate a file upload if (!IS_CMD(pname, "scp") && !IS_CMD(pname, "sftp-server")) { return 0; diff --git a/libsshlog/proc_parsers/existing_connections.cpp b/libsshlog/proc_parsers/existing_connections.cpp index 3980ce4..a9124f6 100644 --- a/libsshlog/proc_parsers/existing_connections.cpp +++ b/libsshlog/proc_parsers/existing_connections.cpp @@ -13,8 +13,8 @@ namespace sshlog { #define SSHD_DEFAULT_PORT 22 -#define SSHD_PROCESS_NAME "sshd" +static bool is_sshd_process(const std::string& comm); static bool is_pts(pfs::task& process, std::unordered_map processes); static int discover_sshd_listen_port(pfs::procfs& pfs, pfs::task& sshd_process); @@ -44,7 +44,7 @@ ExistingConnections::ExistingConnections() { // after we list them but before we inspect them. // We must catch exceptions here to prevent the agent from crashing. try { - if (process.get_comm() != SSHD_PROCESS_NAME) + if (!is_sshd_process(process.get_comm())) continue; bool is_pts_target = is_pts(process, processes); @@ -85,7 +85,8 @@ ExistingConnections::ExistingConnections() { int64_t boottime_diff = (ts_bt.tv_sec - ts_mt.tv_sec) * MILLIS_IN_A_SEC + (ts_bt.tv_nsec - ts_mt.tv_nsec) / NANOS_IN_A_MILLIS; - // PLOG_DEBUG << "existing connection millisecond adjustment: " << boottime_diff; + // PLOG_DEBUG << "existing connection millisecond adjustment: " << + // boottime_diff; session.start_time -= (boottime_diff * NANOS_IN_A_MILLIS); @@ -134,7 +135,8 @@ ExistingConnections::ExistingConnections() { this->sessions.push_back(session); } } catch (const std::exception& e) { - // Process likely exited during inspection. Use DEBUG log so we don't spam errors during stress tests. + // Process likely exited during inspection. Use DEBUG log so we don't spam + // errors during stress tests. PLOG_DEBUG << "Process vanished during inspection (race condition): " << e.what(); continue; } @@ -154,7 +156,7 @@ std::vector ExistingConnections::get_sessions() { return thi static bool is_pts(pfs::task& process, std::unordered_map processes) { try { // Make sure target proc is sshd - if (process.get_comm() != SSHD_PROCESS_NAME) + if (!is_sshd_process(process.get_comm())) return false; // Make sure he has a parent @@ -164,30 +166,43 @@ static bool is_pts(pfs::task& process, std::unordered_map pr if (processes.find(ppid) == processes.end()) return false; - // Parent should also be "sshd" + // Parent should also be "sshd" or "sshd-session" pfs::task parent = processes.at(ppid); // Check parent details (can throw if parent died) int parent_ppid = parent.get_stat().ppid; - if (parent.get_comm() != SSHD_PROCESS_NAME || parent_ppid == 1) + if (!is_sshd_process(parent.get_comm()) || parent_ppid == 1) return false; if (processes.find(parent_ppid) == processes.end()) return false; - // Grandparent should exist, and it's PPID should be 1 + // Grandparent should exist pfs::task grandparent = processes.at(parent_ppid); int grandparent_ppid = grandparent.get_stat().ppid; - if (grandparent.get_comm() != SSHD_PROCESS_NAME || grandparent_ppid != 1) + + if (!is_sshd_process(grandparent.get_comm())) return false; - return true; + if (grandparent_ppid == 1) + return true; + + if (processes.find(grandparent_ppid) != processes.end()) { + pfs::task great_grandparent = processes.at(grandparent_ppid); + if (!is_sshd_process(great_grandparent.get_comm())) + return true; + } + + return false; } catch (...) { - // Any failure to read proc files means this isn't a stable SSH session we can inspect + // Any failure to read proc files means this isn't a stable SSH session we + // can inspect return false; } } +static bool is_sshd_process(const std::string& comm) { return comm == "sshd" || comm == "sshd-session"; } + static int discover_sshd_listen_port(pfs::procfs& pfs, pfs::task& sshd_process) { try { std::unordered_map proc_sockets_by_inode; From ff3071c90b632b28d65cacfa94fc0af1e5a1ef5b Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 29 Jan 2026 16:21:26 -0600 Subject: [PATCH 24/42] Add Dockerfile for deployment --- Dockerfile | 95 +++++++++++++++++++++++++++++++++++------ daemon/build_binary.sh | 4 +- daemon/requirements.txt | 2 +- distros/prep_install.sh | 0 4 files changed, 85 insertions(+), 16 deletions(-) mode change 100644 => 100755 daemon/build_binary.sh mode change 100644 => 100755 distros/prep_install.sh diff --git a/Dockerfile b/Dockerfile index 42c8d97..30a3e95 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,91 @@ -FROM sshlog/build:latest AS builder +# --- Stage 1: Builder --- +FROM debian:bookworm-slim AS builder -WORKDIR /build/ +ENV DEBIAN_FRONTEND=noninteractive +ENV INSTALL_TARGET_DIR=/tmp/sshlog-install +SHELL ["/bin/bash", "-c"] -COPY . ./ +# Install build dependencies +RUN apt-get update && apt-get install -y \ + build-essential \ + cmake \ + git \ + clang-19 \ + llvm \ + libelf-dev \ + libbpf-dev \ + pkg-config \ + linux-libc-dev \ + flex \ + bison \ + python3-docutils \ + python3-virtualenv \ + && ln -s /usr/bin/clang-19 /usr/bin/clang \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /source + +# Copy the daemon source code and prep the python build env +COPY daemon/ ./daemon/ +RUN rm -Rf /tmp/sshlog_venv 2>/dev/null && \ + virtualenv /tmp/sshlog_venv && \ + source /tmp/sshlog_venv/bin/activate && \ + pip3 install -r daemon/requirements.txt + + +# Copy the library source code +COPY CMakeLists.txt . +COPY libsshlog/ ./libsshlog/ +COPY cmake/ ./cmake/ + + +# Create build directory and compile +WORKDIR /source/build -RUN package/build_scripts/prep_repo.sh && \ - cd drone_src && \ - debuild -b -uc -us +RUN cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_SYSCONFDIR=/etc .. \ + && make -j$(nproc) -# Deployable image -FROM ubuntu:20.04 +# Install to a temporary directory +RUN make install DESTDIR=${INSTALL_TARGET_DIR} -COPY --from=builder /build/*.deb ./ +# RUN mkdir -p ${INSTALL_TARGET_DIR}/usr/bin/ && \ +# cp libsshlog/sshlog_cli ${INSTALL_TARGET_DIR}/usr/bin/ +WORKDIR /source + +RUN daemon/build_binary.sh && \ + mkdir -p ${INSTALL_TARGET_DIR}/usr/bin/ && cp dist/* ${INSTALL_TARGET_DIR}/usr/bin/ && \ + mkdir -p ${INSTALL_TARGET_DIR}/var/log/sshlog && chmod 700 ${INSTALL_TARGET_DIR}/var/log/sshlog && \ + mkdir -p ${INSTALL_TARGET_DIR}/etc/sshlog/conf.d && \ + mkdir -p ${INSTALL_TARGET_DIR}/etc/sshlog/plugins && \ + mkdir -p ${INSTALL_TARGET_DIR}/etc/sshlog/samples && \ + cp daemon/config_samples/*.yaml ${INSTALL_TARGET_DIR}/etc/sshlog/samples/ && \ + # Copy the session and event log config to the conf.d folder + cp ${INSTALL_TARGET_DIR}/etc/sshlog/samples/log_all_sessions.yaml ${INSTALL_TARGET_DIR}/etc/sshlog/conf.d && \ + cp ${INSTALL_TARGET_DIR}/etc/sshlog/samples/log_events.yaml ${INSTALL_TARGET_DIR}/etc/sshlog/conf.d + +# --- Stage 2: Production --- +FROM debian:bookworm-slim + +ENV DEBIAN_FRONTEND=noninteractive + +# Install runtime dependencies RUN apt-get update && apt-get install -y \ - libelf1 && \ - dpkg -i ./*.deb && \ - rm -rf /var/lib/apt/lists/* + libelf1 \ + libbpf1 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Copy the compiled artifacts +COPY --from=builder /tmp/sshlog-install / + +# Ensure directories exist +RUN mkdir -p /var/log/sshlog /etc/sshlog + +# Daemon must run as root to access the Kernel BPF subsystem +USER root -CMD ["sshlogd"] +CMD ["/usr/bin/sshlogd"] diff --git a/daemon/build_binary.sh b/daemon/build_binary.sh old mode 100644 new mode 100755 index bb3aa7c..7bff6e7 --- a/daemon/build_binary.sh +++ b/daemon/build_binary.sh @@ -12,7 +12,7 @@ if [[ -f dist/sshlog && -f dist/sshlogd ]]; then exit 0 fi -rm -Rf /tmp/sshlog_venv 2>/dev/null +#rm -Rf /tmp/sshlog_venv 2>/dev/null virtualenv /tmp/sshlog_venv source /tmp/sshlog_venv/bin/activate pip3 install -r ${SCRIPT_DIR}/requirements.txt @@ -38,4 +38,4 @@ client_imports=$(findimports --ignore-stdlib ${SCRIPT_DIR}/cli/ | grep -v 'cli\ pyinstaller --onefile $CLIENT_IMPORTS ${SCRIPT_DIR}/client.py -n sshlog -echo "Python binaries built in dist/ folder" \ No newline at end of file +echo "Python binaries built in dist/ folder" diff --git a/daemon/requirements.txt b/daemon/requirements.txt index 60d6d7e..883cc02 100644 --- a/daemon/requirements.txt +++ b/daemon/requirements.txt @@ -8,5 +8,5 @@ pyzmq==24.0.1 requests==2.28.2 syslog-py==0.2.5 timeago==1.0.16 -pyinstaller==5.8.0 # For installer +pyinstaller==6.18.0 # For installer findimports==2.3.0 # For installer diff --git a/distros/prep_install.sh b/distros/prep_install.sh old mode 100644 new mode 100755 From 329b89e7b759e2fc637d91d177dbfb13883a0820 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 29 Jan 2026 16:21:35 -0600 Subject: [PATCH 25/42] Fix bug causing crash when /etc/passwd is not exposed --- libsshlog/proc_parsers/pts_parser.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libsshlog/proc_parsers/pts_parser.cpp b/libsshlog/proc_parsers/pts_parser.cpp index edf3c5f..f8d6aed 100644 --- a/libsshlog/proc_parsers/pts_parser.cpp +++ b/libsshlog/proc_parsers/pts_parser.cpp @@ -137,8 +137,10 @@ void PtsParser::find_user_id(int32_t pid) { } static std::string getUser(uid_t uid) { - struct passwd* pws; - pws = getpwuid(uid); + struct passwd* pws = getpwuid(uid); + if (pws == nullptr) + return std::to_string(uid); + return pws->pw_name; } From 141d5e3d7ff1aab0132fcb9b74f7f020e7485dd9 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 13:49:00 -0600 Subject: [PATCH 26/42] Upgraded Python libs --- daemon/requirements.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/daemon/requirements.txt b/daemon/requirements.txt index 883cc02..556c652 100644 --- a/daemon/requirements.txt +++ b/daemon/requirements.txt @@ -1,11 +1,11 @@ -blinker==1.5 -dataclasses-json==0.5.7 -datadog==0.45.0 -orjson==3.8.4 -prettytable==3.6.0 -PyYAML==6.0 -pyzmq==24.0.1 -requests==2.28.2 +blinker==1.7.0 +dataclasses-json==0.6.4 +datadog==0.49.1 +orjson==3.9.15 +prettytable==3.10.0 +PyYAML==6.0.1 +pyzmq==25.1.2 +requests==2.31.0 syslog-py==0.2.5 timeago==1.0.16 pyinstaller==6.18.0 # For installer From a9d1963d1594fe35c153506732cb0e3d8bae1ecb Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 13:49:10 -0600 Subject: [PATCH 27/42] Fix CLI bugs expressed after lib upgrade --- daemon/comms/dtos.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/daemon/comms/dtos.py b/daemon/comms/dtos.py index 49aeae6..bd6e0f1 100644 --- a/daemon/comms/dtos.py +++ b/daemon/comms/dtos.py @@ -5,7 +5,7 @@ from dataclasses import dataclass import dataclasses from dataclasses_json import dataclass_json -from typing import List +from typing import List, Dict, Any import json from uuid import uuid4 @@ -89,7 +89,7 @@ class KillSessionRequestDto: @dataclass(frozen=True) class EventWatchResponseDto: event_type: str - payload_json: str + payload_json: Dict[str, Any] payload_type: int = EVENT_WATCH_RESPONSE @@ -107,8 +107,8 @@ class SessionDto: pts_pid: int shell_pid: int tty_id: int - start_time: str - end_time: str + start_time: int + end_time: int last_activity_time: int last_command: str user_id: int From b3fa923a513cc3ec54df90e7dcb7ad0325951d01 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 13:50:16 -0600 Subject: [PATCH 28/42] Add diagnostic webserver --- daemon/daemon.py | 26 +++- daemon/requirements.txt | 3 + daemon/web_server.py | 254 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 282 insertions(+), 1 deletion(-) create mode 100644 daemon/web_server.py diff --git a/daemon/daemon.py b/daemon/daemon.py index ae2d962..3c759e3 100644 --- a/daemon/daemon.py +++ b/daemon/daemon.py @@ -15,6 +15,7 @@ from comms.mq_base import PROC_LOCK_FILE from comms.pidlockfile import PIDLockFile, LockTimeout, AlreadyLocked import platform +from web_server import SSHLogWebServer def run_main(): @@ -31,6 +32,22 @@ def run_main(): action='store_true', help='Print debug info' ) + parser.add_argument( + '--enable-diagnostic-web', + action='store_true', + help='Enable the diagnostic web interface' + ) + parser.add_argument( + '--diagnostic-web-ip', + default='127.0.0.1', + help='Binding IP for the diagnostic web interface (default: 127.0.0.1)' + ) + parser.add_argument( + '--diagnostic-web-port', + default=5000, + type=int, + help='Port for the diagnostic web interface (default: 5000)' + ) args = parser.parse_args() @@ -108,6 +125,12 @@ def run_main(): server = MQLocalServer(session_tracker) server.start() + # Start the Web Server + web_server = None + if args.enable_diagnostic_web: + web_server = SSHLogWebServer(session_tracker, host=args.diagnostic_web_ip, port=args.diagnostic_web_port) + web_server.start() + with SSHLog(loglevel=0) as sshb: try: @@ -115,6 +138,8 @@ def run_main(): event_data = sshb.poll(timeout_ms=15) if event_data is not None: eventbus_sshtrace_push(event_data, session_tracker) + if web_server: + web_server.process_event(event_data) except KeyboardInterrupt: pass @@ -135,4 +160,3 @@ def run_main(): print(f"Error: sshlog daemon is already running. To force process to run, delete {PROC_LOCK_FILE}") except PermissionError: print(f"Permission denied accessing file {PROC_LOCK_FILE}") - diff --git a/daemon/requirements.txt b/daemon/requirements.txt index 556c652..cfb939b 100644 --- a/daemon/requirements.txt +++ b/daemon/requirements.txt @@ -10,3 +10,6 @@ syslog-py==0.2.5 timeago==1.0.16 pyinstaller==6.18.0 # For installer findimports==2.3.0 # For installer +Flask==3.0.2 +Flask-SocketIO==5.3.6 +simple-websocket==1.0.0 diff --git a/daemon/web_server.py b/daemon/web_server.py new file mode 100644 index 0000000..526a23e --- /dev/null +++ b/daemon/web_server.py @@ -0,0 +1,254 @@ +import logging +import threading +import json +import os +from functools import wraps +from flask import Flask, render_template_string, jsonify, request, Response +from flask_socketio import SocketIO, emit, join_room, leave_room +from comms.mq_client import MQClient +from comms.dtos import ShellSendKeysRequestDto +from comms.event_types import SSHTRACE_EVENT_TERMINAL_UPDATE, SSHTRACE_EVENT_CLOSE_CONNECTION + +logger = logging.getLogger('sshlog_web') + +HTML_TEMPLATE = """ + + + + SSHLog Dashboard + + + + + + + +

SSHLog Active Sessions

+ +
+
Loading sessions...
+
+ +
+
+ + +
+
+
+ + + + +""" + +def check_auth(username, password): + """Check if a username / password combination is valid.""" + env_user = os.environ.get('SSHLOG_WEB_USER', 'admin') + env_pass = os.environ.get('SSHLOG_WEB_PASS', 'admin') + return username == env_user and password == env_pass + +def authenticate(): + """Sends a 401 response that enables basic auth""" + return Response( + 'Could not verify your access level for that URL.\n' + 'You have to login with proper credentials', 401, + {'WWW-Authenticate': 'Basic realm="Login Required"'}) + +def requires_auth(f): + @wraps(f) + def decorated(*args, **kwargs): + auth = request.authorization + if not auth or not check_auth(auth.username, auth.password): + return authenticate() + return f(*args, **kwargs) + return decorated + +class SSHLogWebServer: + def __init__(self, session_tracker, host='127.0.0.1', port=5000): + self.session_tracker = session_tracker + self.host = host + self.port = port + self.app = Flask(__name__) + self.socketio = SocketIO(self.app, cors_allowed_origins="*") + self.mq_client = MQClient() + + self.app.add_url_rule('/', 'index', requires_auth(self.index)) + self.app.add_url_rule('/api/sessions', 'get_sessions', requires_auth(self.get_sessions)) + self.socketio.on_event('term_input', self.on_term_input) + self.socketio.on_event('join_session', self.on_join_session) + self.socketio.on_event('leave_session', self.on_leave_session) + self.buffers = {} + + def start(self): + t = threading.Thread(target=self._run) + t.daemon = True + t.start() + logger.info(f"Web server started on port {self.port}") + + def _run(self): + self.socketio.run(self.app, host=self.host, port=self.port, use_reloader=False, log_output=False) + + def index(self): + return render_template_string(HTML_TEMPLATE) + + def get_sessions(self): + sessions = [] + try: + # Iterate over the tracker's sessions + for s in self.session_tracker.get_sessions(): + sessions.append({ + 'user': s['username'], + 'ptm_pid': s['ptm_pid'], + 'tty_id': s['tty_id'], + 'client_ip': s['tcp_info']['client_ip'] + }) + except Exception as e: + logger.error(f"Error listing sessions: {e}") + return jsonify(sessions) + + def on_join_session(self, data): + ptm_pid = data.get('ptm_pid') + if ptm_pid: + join_room(str(ptm_pid)) + + def on_leave_session(self, data): + ptm_pid = data.get('ptm_pid') + if ptm_pid: + leave_room(str(ptm_pid)) + + def on_term_input(self, data): + ptm_pid = data.get('ptm_pid') + keys = data.get('data') + force_redraw = data.get('force_redraw', False) + + if ptm_pid: + if force_redraw and ptm_pid in self.buffers: + emit('term_output', { + 'ptm_pid': ptm_pid, + 'data': self.buffers[ptm_pid] + }) + + # Use the internal MQ client to send keystrokes to the daemon's MQ server + dto = ShellSendKeysRequestDto(ptm_pid=ptm_pid, keys=keys, force_redraw=force_redraw) + self.mq_client.make_request(dto) + + def process_event(self, event_data): + event_type = event_data.get('event_type') + ptm_pid = event_data.get('ptm_pid') + + # Broadcast terminal updates to all connected web clients + if event_type == SSHTRACE_EVENT_TERMINAL_UPDATE: + data = event_data.get('terminal_data') + if data: + if ptm_pid not in self.buffers: + self.buffers[ptm_pid] = "" + self.buffers[ptm_pid] += data + if len(self.buffers[ptm_pid]) > 16384: + self.buffers[ptm_pid] = self.buffers[ptm_pid][-16384:] + + self.socketio.emit('term_output', { + 'ptm_pid': ptm_pid, + 'data': data + }, room=str(ptm_pid)) + elif event_type == SSHTRACE_EVENT_CLOSE_CONNECTION: + if ptm_pid in self.buffers: + del self.buffers[ptm_pid] \ No newline at end of file From 813ce1c66209e1b45090980bdf422e90ed7ddb4a Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 13:58:18 -0600 Subject: [PATCH 29/42] Removed old comments --- daemon/daemon.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/daemon/daemon.py b/daemon/daemon.py index 3c759e3..1ecb3cd 100644 --- a/daemon/daemon.py +++ b/daemon/daemon.py @@ -23,10 +23,6 @@ def run_main(): parser.add_argument("-l", "--logfile", default=None, help='Path to log file') - # parser.add_argument("-k", "--key", default=os.getenv('OPENREPO_APIKEY', ''), help='API key') - # parser.add_argument("-s", "--server", default=os.getenv('OPENREPO_SERVER', 'http://localhost:7376'), - # help="OpenRepo Server") - parser.add_argument( '--debug', action='store_true', From 3bfc6477cc8e64fb960d5d2ea44ec33017578791 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 14:29:49 -0600 Subject: [PATCH 30/42] Added env vars to CLI args to make docker deployment simpler --- daemon/daemon.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/daemon/daemon.py b/daemon/daemon.py index 1ecb3cd..cd29d53 100644 --- a/daemon/daemon.py +++ b/daemon/daemon.py @@ -21,26 +21,28 @@ def run_main(): parser = argparse.ArgumentParser(description="SSHLog Daemon") - parser.add_argument("-l", "--logfile", default=None, help='Path to log file') + parser.add_argument("-l", "--logfile", default=os.environ.get('SSHLOG_LOGFILE', None), help='Path to log file') parser.add_argument( '--debug', action='store_true', + default=os.environ.get('SSHLOG_DEBUG', '').lower() in ('true', '1', 'yes'), help='Print debug info' ) parser.add_argument( '--enable-diagnostic-web', action='store_true', + default=os.environ.get('SSHLOG_ENABLE_DIAGNOSTIC_WEB', '').lower() in ('true', '1', 'yes'), help='Enable the diagnostic web interface' ) parser.add_argument( '--diagnostic-web-ip', - default='127.0.0.1', + default=os.environ.get('SSHLOG_DIAGNOSTIC_WEB_IP', '127.0.0.1'), help='Binding IP for the diagnostic web interface (default: 127.0.0.1)' ) parser.add_argument( '--diagnostic-web-port', - default=5000, + default=int(os.environ.get('SSHLOG_DIAGNOSTIC_WEB_PORT', 5000)), type=int, help='Port for the diagnostic web interface (default: 5000)' ) From 16306066a6c9a1f06948c1e86821ad24a4d20152 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 14:30:07 -0600 Subject: [PATCH 31/42] Moved dockerfile build order to avoid recompiling on python change --- Dockerfile | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 30a3e95..15f5725 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,15 +23,8 @@ RUN apt-get update && apt-get install -y \ && ln -s /usr/bin/clang-19 /usr/bin/clang \ && rm -rf /var/lib/apt/lists/* -WORKDIR /source - -# Copy the daemon source code and prep the python build env -COPY daemon/ ./daemon/ -RUN rm -Rf /tmp/sshlog_venv 2>/dev/null && \ - virtualenv /tmp/sshlog_venv && \ - source /tmp/sshlog_venv/bin/activate && \ - pip3 install -r daemon/requirements.txt +WORKDIR /source # Copy the library source code COPY CMakeLists.txt . @@ -56,6 +49,14 @@ RUN make install DESTDIR=${INSTALL_TARGET_DIR} WORKDIR /source +# Copy the daemon source code and prep the python build env +COPY daemon/ ./daemon/ +RUN rm -Rf /tmp/sshlog_venv 2>/dev/null && \ + virtualenv /tmp/sshlog_venv && \ + source /tmp/sshlog_venv/bin/activate && \ + pip3 install -r daemon/requirements.txt + + RUN daemon/build_binary.sh && \ mkdir -p ${INSTALL_TARGET_DIR}/usr/bin/ && cp dist/* ${INSTALL_TARGET_DIR}/usr/bin/ && \ mkdir -p ${INSTALL_TARGET_DIR}/var/log/sshlog && chmod 700 ${INSTALL_TARGET_DIR}/var/log/sshlog && \ From 4702feb3e0479cb54d348e49060c4180609760b8 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 14:31:00 -0600 Subject: [PATCH 32/42] Added session age to UI --- daemon/web_server.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/daemon/web_server.py b/daemon/web_server.py index 526a23e..9ab511d 100644 --- a/daemon/web_server.py +++ b/daemon/web_server.py @@ -61,6 +61,18 @@ refreshSessions(); }); + function formatDuration(ms) { + if (!ms) return '-'; + let seconds = Math.floor((Date.now() - ms) / 1000); + if (seconds < 0) seconds = 0; + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = seconds % 60; + if (h > 0) return `${h}h ${m}m`; + if (m > 0) return `${m}m ${s}s`; + return `${s}s`; + } + function refreshSessions() { fetch('/api/sessions') .then(response => response.json()) @@ -69,7 +81,7 @@ document.getElementById('session-list').innerHTML = '

No active SSH sessions.

'; return; } - var html = ''; + var html = '
UserPIDTTYClient IPAction
'; data.forEach(s => { html += ` @@ -77,6 +89,7 @@ + `; }); html += '
UserPIDTTYClient IPAgeAction
${s.user}${s.tty_id} ${s.client_ip} ${formatDuration(s.start_time)}
'; @@ -199,7 +212,8 @@ def get_sessions(self): 'user': s['username'], 'ptm_pid': s['ptm_pid'], 'tty_id': s['tty_id'], - 'client_ip': s['tcp_info']['client_ip'] + 'client_ip': s['tcp_info']['client_ip'], + 'start_time': s.get('start_time') }) except Exception as e: logger.error(f"Error listing sessions: {e}") From f5763229de4314c4bad75c35d365a6262a8a4e30 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 14:31:13 -0600 Subject: [PATCH 33/42] Fix deployment issue --- daemon/web_server.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/daemon/web_server.py b/daemon/web_server.py index 9ab511d..08846aa 100644 --- a/daemon/web_server.py +++ b/daemon/web_server.py @@ -4,6 +4,13 @@ import os from functools import wraps from flask import Flask, render_template_string, jsonify, request, Response +import simple_websocket +# Explicitly import the threading driver to ensure PyInstaller bundles it +try: + import engineio.async_drivers.threading +except ImportError: + pass + from flask_socketio import SocketIO, emit, join_room, leave_room from comms.mq_client import MQClient from comms.dtos import ShellSendKeysRequestDto @@ -181,7 +188,7 @@ def __init__(self, session_tracker, host='127.0.0.1', port=5000): self.host = host self.port = port self.app = Flask(__name__) - self.socketio = SocketIO(self.app, cors_allowed_origins="*") + self.socketio = SocketIO(self.app, cors_allowed_origins="*", async_mode='threading') self.mq_client = MQClient() self.app.add_url_rule('/', 'index', requires_auth(self.index)) From 970ab1ea2bb490916e624433e545634a9300e2b6 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 14:31:22 -0600 Subject: [PATCH 34/42] Add a visual indicator to show which session is being watched --- daemon/web_server.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/daemon/web_server.py b/daemon/web_server.py index 08846aa..a7263fe 100644 --- a/daemon/web_server.py +++ b/daemon/web_server.py @@ -40,6 +40,7 @@ #terminal-container { flex-grow: 1; background: #000; padding: 10px; border-radius: 5px; overflow: hidden; } .close-btn { background: #dc3545; } .close-btn:hover { background: #a71d2a; } + .watching-row { background-color: #e2e6ea; } @@ -90,13 +91,15 @@ } var html = ''; data.forEach(s => { - html += ` + const isWatching = (s.ptm_pid == currentPtmPid); + const rowClass = isWatching ? 'class="watching-row"' : ''; + html += ` - + `; }); html += '
UserPIDTTYClient IPAgeAction
${s.user} ${s.ptm_pid} ${s.tty_id} ${s.client_ip} ${formatDuration(s.start_time)}
'; @@ -108,6 +111,7 @@ function watchSession(ptmPid) { currentPtmPid = ptmPid; + refreshSessions(); document.getElementById('terminal-wrapper').style.display = 'flex'; if (term) term.dispose(); @@ -148,6 +152,7 @@ if (term) term.dispose(); currentPtmPid = -1; window.removeEventListener('resize', fitTerminal); + refreshSessions(); } socket.on('term_output', function(msg) { From a457cd6b8035bf04dd1dfe3db3ea0995759dc877 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 14:40:59 -0600 Subject: [PATCH 35/42] Added github action to build docker container --- .github/workflows/docker-publish.yml | 68 ++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 .github/workflows/docker-publish.yml diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..c8cf392 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,68 @@ +name: Build and Publish Docker Image + +on: + push: + branches: [ "master", "release/*" ] + # Publish semver tags as releases. + tags: [ 'v*.*.*' ] + pull_request: + branches: [ "master" ] + +env: + # Use ghcr.io for GitHub Container Registry + REGISTRY: ghcr.io + # github.repository as / + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Set up QEMU for multi-arch builds (arm64/amd64) + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + # Set up Docker Buildx + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Login against the registry except on PR + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Extract metadata (tags, labels) for Docker + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=ref,event=branch + type=ref,event=pr + type=raw,value=latest,enable={{is_default_branch}} + + # Build and push Docker image with Buildx + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + platforms: linux/amd64,linux/arm64 + cache-from: type=gha + cache-to: type=gha,mode=max From 0b990f5cc35da041af676873dc83e8478adc99c3 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 30 Jan 2026 14:44:54 -0600 Subject: [PATCH 36/42] Don't forget the submodules --- .github/workflows/docker-publish.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index c8cf392..7ea76fa 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -24,6 +24,8 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 + with: + submodules: recursive # Set up QEMU for multi-arch builds (arm64/amd64) - name: Set up QEMU From 1664b69eed9e48b098a7a8db3e1f12f699b117c7 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sat, 31 Jan 2026 17:51:03 -0600 Subject: [PATCH 37/42] Add argument to controll keystroke injection --- daemon/comms/mq_server.py | 17 ++++++++++------- daemon/daemon.py | 13 ++++++++++--- daemon/web_server.py | 14 +++++++++++--- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/daemon/comms/mq_server.py b/daemon/comms/mq_server.py index 2ce2efd..5499e43 100644 --- a/daemon/comms/mq_server.py +++ b/daemon/comms/mq_server.py @@ -75,7 +75,7 @@ class MQLocalServer(threading.Thread): Acts as a server to receive requests from client process (sshlog) responds with data that client can display to CLI ''' - def __init__(self, session_tracker: Tracker, + def __init__(self, session_tracker: Tracker, enable_injection=False, group=None, target=None, name=None, args=(), kwargs=None): super(MQLocalServer,self).__init__(group=group, target=target, @@ -85,6 +85,7 @@ def __init__(self, session_tracker: Tracker, self.response_queue = queue.Queue() self.active_streams = ActiveStreams() self._stay_alive = True + self.enable_injection = enable_injection @@ -165,10 +166,14 @@ def _launch_task(self, request_message: RequestMessage): logger.debug("Redrawing shell via SIGWINCH") os.kill(session['shell_pid'], SIGWINCH) - # Write the text char-by-char to the TTY output using ioctl - with open(f'/dev/pts/{tty_id}', 'w') as tty_out: - for key in request_message.dto_payload.keys: - fcntl.ioctl(tty_out, termios.TIOCSTI, key.encode('utf-8')) + if request_message.dto_payload.keys: + if self.enable_injection: + # Write the text char-by-char to the TTY output using ioctl + with open(f'/dev/pts/{tty_id}', 'w') as tty_out: + for key in request_message.dto_payload.keys: + fcntl.ioctl(tty_out, termios.TIOCSTI, key.encode('utf-8')) + else: + logger.warning(f"Injection disabled. Ignoring request for PTM PID {ptm_pid}") @@ -179,5 +184,3 @@ def shutdown(self): def stay_alive(self): return self._stay_alive - - diff --git a/daemon/daemon.py b/daemon/daemon.py index cd29d53..8a03dfd 100644 --- a/daemon/daemon.py +++ b/daemon/daemon.py @@ -46,6 +46,12 @@ def run_main(): type=int, help='Port for the diagnostic web interface (default: 5000)' ) + parser.add_argument( + '--enable-session-injection', + action='store_true', + default=os.environ.get('SSHLOG_ENABLE_SESSION_INJECTION', '').lower() in ('true', '1', 'yes'), + help='Enable command injection into active sessions (default: False)' + ) args = parser.parse_args() @@ -120,16 +126,17 @@ def run_main(): # Spin up local MQ server to start listening - server = MQLocalServer(session_tracker) + server = MQLocalServer(session_tracker, enable_injection=args.enable_session_injection) server.start() # Start the Web Server web_server = None if args.enable_diagnostic_web: - web_server = SSHLogWebServer(session_tracker, host=args.diagnostic_web_ip, port=args.diagnostic_web_port) + web_server = SSHLogWebServer(session_tracker, host=args.diagnostic_web_ip, + port=args.diagnostic_web_port, enable_session_injection=args.enable_session_injection) web_server.start() - with SSHLog(loglevel=0) as sshb: + with SSHLog(loglevel=0, enable_injection=args.enable_session_injection) as sshb: try: while sshb.is_ok(): diff --git a/daemon/web_server.py b/daemon/web_server.py index a7263fe..d3cfd05 100644 --- a/daemon/web_server.py +++ b/daemon/web_server.py @@ -53,7 +53,9 @@
- +
@@ -188,10 +190,11 @@ def decorated(*args, **kwargs): return decorated class SSHLogWebServer: - def __init__(self, session_tracker, host='127.0.0.1', port=5000): + def __init__(self, session_tracker, host='127.0.0.1', port=5000, enable_session_injection=False): self.session_tracker = session_tracker self.host = host self.port = port + self.enable_session_injection = enable_session_injection self.app = Flask(__name__) self.socketio = SocketIO(self.app, cors_allowed_origins="*", async_mode='threading') self.mq_client = MQClient() @@ -213,7 +216,7 @@ def _run(self): self.socketio.run(self.app, host=self.host, port=self.port, use_reloader=False, log_output=False) def index(self): - return render_template_string(HTML_TEMPLATE) + return render_template_string(HTML_TEMPLATE, injection_enabled=self.enable_session_injection) def get_sessions(self): sessions = [] @@ -253,6 +256,11 @@ def on_term_input(self, data): 'data': self.buffers[ptm_pid] }) + # Block keystrokes if injection is disabled + if keys and not self.enable_session_injection: + logger.warning(f"Keystroke injection attempted for PID {ptm_pid} but is disabled.") + return + # Use the internal MQ client to send keystrokes to the daemon's MQ server dto = ShellSendKeysRequestDto(ptm_pid=ptm_pid, keys=keys, force_redraw=force_redraw) self.mq_client.make_request(dto) From 10f5c07b58215f500de7286a3f86992002f8cd70 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sat, 31 Jan 2026 17:54:56 -0600 Subject: [PATCH 38/42] CMake tweaks --- libsshlog/CMakeLists.txt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libsshlog/CMakeLists.txt b/libsshlog/CMakeLists.txt index 42353f8..99e26f2 100644 --- a/libsshlog/CMakeLists.txt +++ b/libsshlog/CMakeLists.txt @@ -31,7 +31,13 @@ ExternalProject_Add(libbpf PREFIX libbpf SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libbpf/src CONFIGURE_COMMAND "" - BUILD_COMMAND make + # Step 1: Just Build + BUILD_COMMAND make -j$(nproc) + BUILD_STATIC_ONLY=1 + CPPFLAGS=-fPIC + OBJDIR=${CMAKE_CURRENT_BINARY_DIR}/libbpf/libbpf + # Step 2: Install + INSTALL_COMMAND make BUILD_STATIC_ONLY=1 CPPFLAGS=-fPIC OBJDIR=${CMAKE_CURRENT_BINARY_DIR}/libbpf/libbpf @@ -41,7 +47,6 @@ ExternalProject_Add(libbpf UAPIDIR= install install_uapi_headers BUILD_IN_SOURCE TRUE - INSTALL_COMMAND "" STEP_TARGETS build ) @@ -55,7 +60,9 @@ ExternalProject_Add(bpftool PREFIX bpftool SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bpftool/src CONFIGURE_COMMAND "" - BUILD_COMMAND make bootstrap + BUILD_COMMAND make -j$(nproc) bootstrap + feature-libelf=1 + feature-zlib=1 OUTPUT=${CMAKE_CURRENT_BINARY_DIR}/bpftool/ BUILD_IN_SOURCE TRUE INSTALL_COMMAND "" From b50eca64b64b0a6ef4e8ce98f0227b5f07db9131 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sat, 31 Jan 2026 21:05:18 -0600 Subject: [PATCH 39/42] Dockerfile updates --- Dockerfile | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 15f5725..398600e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ RUN apt-get update && apt-get install -y \ cmake \ git \ clang-19 \ - llvm \ + llvm-19 \ libelf-dev \ libbpf-dev \ pkg-config \ @@ -20,22 +20,28 @@ RUN apt-get update && apt-get install -y \ bison \ python3-docutils \ python3-virtualenv \ + bpftool \ + libcap-dev \ && ln -s /usr/bin/clang-19 /usr/bin/clang \ + && ln -s /usr/bin/llvm-strip-19 /usr/bin/llvm-strip \ && rm -rf /var/lib/apt/lists/* - WORKDIR /source # Copy the library source code + +# Copy Source COPY CMakeLists.txt . COPY libsshlog/ ./libsshlog/ COPY cmake/ ./cmake/ +# 2. Remove 'bpftool-build' dependency so CMake doesn't try to compile the submodule +RUN sed -i 's|${CMAKE_CURRENT_BINARY_DIR}/bpftool/bootstrap/bpftool|/usr/sbin/bpftool|g' CMakeLists.txt && \ + sed -i 's|bpftool-build||g' CMakeLists.txt -# Create build directory and compile WORKDIR /source/build - +# Use RelWithDebInfo for optimized but debuggable binaries RUN cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_SYSCONFDIR=/etc .. \ @@ -47,6 +53,7 @@ RUN make install DESTDIR=${INSTALL_TARGET_DIR} # RUN mkdir -p ${INSTALL_TARGET_DIR}/usr/bin/ && \ # cp libsshlog/sshlog_cli ${INSTALL_TARGET_DIR}/usr/bin/ +# Install Configs & Scripts WORKDIR /source # Copy the daemon source code and prep the python build env @@ -73,11 +80,14 @@ FROM debian:bookworm-slim ENV DEBIAN_FRONTEND=noninteractive -# Install runtime dependencies +# Install Runtime Dependencies +# Added 'gdb' for debugging RUN apt-get update && apt-get install -y \ libelf1 \ libbpf1 \ + libcap2 \ ca-certificates \ + gdb \ && rm -rf /var/lib/apt/lists/* # Copy the compiled artifacts From 14f0ce24a5c477b93ca87b9742c16c211f39cec1 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sun, 1 Feb 2026 13:25:57 -0600 Subject: [PATCH 40/42] Dropped bpftool from repo. Instead using OS packaged tool --- .gitmodules | 3 --- Dockerfile | 4 ---- libsshlog/CMakeLists.txt | 18 ++---------------- libsshlog/bpftool | 1 - 4 files changed, 2 insertions(+), 24 deletions(-) delete mode 160000 libsshlog/bpftool diff --git a/.gitmodules b/.gitmodules index 9d733da..1fcdc83 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "libbpf"] path = libsshlog/libbpf url = https://github.com/openkilt/libbpf.git -[submodule "libsshlog/bpftool"] - path = libsshlog/bpftool - url = https://github.com/libbpf/bpftool.git diff --git a/Dockerfile b/Dockerfile index 398600e..334e071 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,10 +35,6 @@ COPY CMakeLists.txt . COPY libsshlog/ ./libsshlog/ COPY cmake/ ./cmake/ -# 2. Remove 'bpftool-build' dependency so CMake doesn't try to compile the submodule -RUN sed -i 's|${CMAKE_CURRENT_BINARY_DIR}/bpftool/bootstrap/bpftool|/usr/sbin/bpftool|g' CMakeLists.txt && \ - sed -i 's|bpftool-build||g' CMakeLists.txt - WORKDIR /source/build # Use RelWithDebInfo for optimized but debuggable binaries diff --git a/libsshlog/CMakeLists.txt b/libsshlog/CMakeLists.txt index 99e26f2..f3de1bf 100644 --- a/libsshlog/CMakeLists.txt +++ b/libsshlog/CMakeLists.txt @@ -56,22 +56,8 @@ else () set (X86 FALSE) endif () -ExternalProject_Add(bpftool - PREFIX bpftool - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bpftool/src - CONFIGURE_COMMAND "" - BUILD_COMMAND make -j$(nproc) bootstrap - feature-libelf=1 - feature-zlib=1 - OUTPUT=${CMAKE_CURRENT_BINARY_DIR}/bpftool/ - BUILD_IN_SOURCE TRUE - INSTALL_COMMAND "" - STEP_TARGETS build -) - set(LIBBPF_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/libbpf) set(LIBBPF_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/libbpf/libbpf.a) -set(BPFOBJECT_BPFTOOL_EXE ${CMAKE_CURRENT_BINARY_DIR}/bpftool/bootstrap/bpftool) if (X86) message("-- BPF Using x86 vmlinux.h file") @@ -113,7 +99,7 @@ if(USE_RINGBUF) endif() bpf_object(sshtrace bpf/sshtrace.bpf.c) -add_dependencies(sshtrace_skel libbpf-build bpftool-build) +add_dependencies(sshtrace_skel libbpf-build ) set(sshlog_SRC sshlog.cpp @@ -158,4 +144,4 @@ set_target_properties(sshlog PROPERTIES SOVERSION 1) install (TARGETS sshlog DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) -add_subdirectory(tests) \ No newline at end of file +add_subdirectory(tests) diff --git a/libsshlog/bpftool b/libsshlog/bpftool deleted file mode 160000 index e1bd72c..0000000 --- a/libsshlog/bpftool +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e1bd72cee842b415b87e632425d04aa773344654 From 1d004dd4d2b111d1f306d789fd45bbc5664c77cb Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sun, 1 Feb 2026 14:31:47 -0600 Subject: [PATCH 41/42] Updated readme w/ docker-only deliverable --- assets/sshlog_header.png | Bin 0 -> 96429 bytes assets/webserver_demo.gif | Bin 0 -> 430040 bytes readme.md | 131 +++++++++++++++++--------------------- 3 files changed, 59 insertions(+), 72 deletions(-) create mode 100644 assets/sshlog_header.png create mode 100644 assets/webserver_demo.gif diff --git a/assets/sshlog_header.png b/assets/sshlog_header.png new file mode 100644 index 0000000000000000000000000000000000000000..3acb415a12157d4c74612353a3bdaaadcc63ab05 GIT binary patch literal 96429 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�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 YW;Zp6PILoX3k~=@S5{XlSNH(>FMcVp>Hq)$ literal 0 HcmV?d00001 diff --git a/assets/webserver_demo.gif b/assets/webserver_demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..0cbad474edd770adbb53cc1553e83c8e0f72ed1f GIT binary patch literal 430040 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�%$=P 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�vQW|DvEH~QXC3gg9H|=> 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 HW=a1ClgE$} literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 95ffe85..d29f343 100644 --- a/readme.md +++ b/readme.md @@ -12,31 +12,47 @@ SSHLog is a free, source-available Linux daemon written in C++ and Python that p SSHLog is configurable, any combination of features may be enabled, disabled, or customized. It works with your existing OpenSSH server process, no alternative SSH daemon is required. Just install the sshlog package to begin monitoring SSH. -![SSHLog header](http://www.sshlog.com/assets/img/hero/hero-img.png) +![SSHLog header](assets/sshlog_header.png) -## Quick Start +## Quick Start (Docker) -Install the daemon using the instructions for your OS (located below). The default installation will: - 1. Install and enable the "sshlogd" daemon on startup - 2. Install the "sshlog" CLI application - 3. Enable a number of default configuration files in /etc/sshlog/conf.d/ +SSHLog is designed to run as a privileged Docker container. - - /var/log/sshlog/event.log contains all SSH events: - - /var/log/sshlog/sessions/ log files contains all individual session activity (commands and output) +### 1. Try it out (Diagnostic Mode) -### After installation: +To quickly test SSHLog with the web interface and session injection enabled, run: - - SSH into your server to generate some activity (e.g., ssh localhost). - - Check log files in /var/log/sshlog/ - - /var/log/sshlog/event.log will contain a list of all actions (e.g., logins/logouts, commands run, files uploaded, etc) - - /var/log/sshlog/sessions/ will contain the full shell terminal output, one file for each SSH session - - Tip: Optionally add admin users to the "sshlog" group so that they can interact with SSHLog daemon without requiring sudo - -Interact with the daemon via the CLI app: +```bash +docker run --privileged \ + -e SSHLOG_ENABLE_DIAGNOSTIC_WEB=1 \ + -e SSHLOG_ENABLE_SESSION_INJECTION=1 \ + -v /usr/src:/usr/src:ro \ + -v /lib/modules:/lib/modules:ro \ + -v /var/log/btmp:/var/log/btmp:ro \ + -v /etc/passwd:/etc/passwd:ro \ + -v /etc/group:/etc/group:ro \ + -v /dev/pts:/dev/pts:rw \ + -v /sys/kernel/debug:/sys/kernel/debug:rw \ + -v /etc/sshlog:/etc/sshlog \ + --net=host --pid=host \ + --rm -it ghcr.io/sshlog/agent:v1.1.0 +``` + +**Note:** This mode enables the diagnostic web server on port 5000 and allows writing to SSH sessions. + +### 2. Web Interface + +Once running, access the dashboard at `http://:5000`. + +![Web Interface Demo](assets/webserver_demo.gif) + +### 3. CLI Usage + +You can interact with the daemon via the CLI app inside the container: #### Show current logged in sessions: - mhill@devlaptop:~$ sshlog sessions + docker exec -it sshlog sshlog sessions User Last Activity Last Command Session Start Client IP TTY mhill just now /usr/bin/gcc 2023-04-10 16:16:18 127.0.0.1:58668 17 @@ -45,73 +61,44 @@ Interact with the daemon via the CLI app: #### Monitor real-time SSH activity - mhill@devlaptop:~$ sshlog watch + docker exec -it sshlog sshlog watch 16:16:45 connection_established (970236) billy from ip 15.12.5.8:59120 tty 33 16:16:45 command_start (970236) billy executed /bin/bash - 16:16:49 command_start (970236) billy executed /usr/bin/whoami - 16:16:49 command_finish (970236) billy execute complete (exit code: 0) /usr/bin/whoami - 16:16:51 command_start (970236) billy executed /usr/bin/sudo ls - 16:16:54 command_start (970236) billy executed /usr/bin/ls - 16:16:54 command_finish (970236) billy execute complete (exit code: 0) /usr/bin/ls - 16:16:54 command_finish (970236) billy execute complete (exit code: 0) /usr/bin/sudo ls - 16:16:56 command_finish (970236) billy execute complete (exit code: 0) /bin/bash - 16:16:56 connection_close (970236) billy from ip 15.12.5.8:59120 + ... #### Attach to another user's shell session (either read-only or interactive) - mhill@devlaptop:~$ sshlog attach [TTY ID] - - Attached to TTY 32. Press CTRL+Q to exit - - billy@devlaptop:~$ - - - - -### Debian/Ubuntu Install (arm64 and x86_64) - - apt update && apt install -y curl gnupg - curl https://repo.sshlog.com/sshlog-ubuntu/public.gpg | gpg --yes --dearmor -o /usr/share/keyrings/repo-sshlog-ubuntu.gpg - echo "deb [arch=any signed-by=/usr/share/keyrings/repo-sshlog-ubuntu.gpg] https://repo.sshlog.com/sshlog-ubuntu/ stable main" > /etc/apt/sources.list.d/repo-sshlog-ubuntu.list - apt update && apt install -y sshlog - + docker exec -it sshlog sshlog attach [TTY ID] +## Production Deployment -### RedHat/Fedora Install (arm64 and x86_64) +For production use, we recommend locking down the container: +* Disable the web server (remove `SSHLOG_ENABLE_DIAGNOSTIC_WEB`) +* Disable session injection (remove `SSHLOG_ENABLE_SESSION_INJECTION`) +* Mount `/dev/pts` as read-only - echo """ - [sshlog-redhat] - name=sshlog-redhat - baseurl=https://repo.sshlog.com/sshlog-redhat - enabled=1 - repo_gpgcheck=1 - gpgkey=https://repo.sshlog.com/sshlog-redhat/public.gpg - """ > /etc/yum.repos.d/sshlog-redhat.repo - yum update && yum install sshlog +```bash +docker run -d --restart=always --name sshlog \ + --privileged \ + -v /usr/src:/usr/src:ro \ + -v /lib/modules:/lib/modules:ro \ + -v /var/log/btmp:/var/log/btmp:ro \ + -v /etc/passwd:/etc/passwd:ro \ + -v /etc/group:/etc/group:ro \ + -v /dev/pts:/dev/pts:ro \ + -v /sys/kernel/debug:/sys/kernel/debug:rw \ + -v /var/log/sshlog:/var/log/sshlog \ + -v /etc/sshlog:/etc/sshlog \ + --net=host --pid=host \ + ghcr.io/sshlog/agent:v1.1.0 +``` -### Docker Install (x86_64) +## Security Implications - # First, copy the default configuration files to the host /etc/sshlog directory - # This step is unnecessary if you're using your own custom configuration - id=$(docker create sshlog/agent:latest) - docker cp $id:/etc/sshlog - > /tmp/sshlog_default_config.tar - tar xvf /tmp/sshlog_default_config.tar -C /etc/ - docker rm -v $id +**Warning:** This container requires `--privileged` mode and `--pid=host` to monitor SSH processes via eBPF. This grants the container significant access to the host system. - # Next create a detached container and volume mount - # the config files (/etc/sshlog) and output log files (/var/log/sshlog) - # you could place the config files and log file volume mounts elsewhere if you prefer - docker run -d --restart=always --name sshlog \ - --privileged \ - -v /sys:/sys:ro \ - -v /dev:/dev \ - -v /proc:/proc \ - -v /etc/passwd:/etc/passwd:ro \ - -v /var/log/sshlog:/var/log/sshlog \ - -v /etc/sshlog:/etc/sshlog \ - --pid=host \ - sshlog/agent:latest +When `SSHLOG_ENABLE_SESSION_INJECTION` is enabled, the container has the ability to inject keystrokes into any active SSH session on the host. Ensure access to this container and the Docker socket is strictly controlled. From 769f3a77deb4b71ebd5f7c78bc254c9b51072048 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sun, 1 Feb 2026 14:32:01 -0600 Subject: [PATCH 42/42] Fixed unnecessary argument to libsshlog wrapper --- daemon/daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/daemon.py b/daemon/daemon.py index 8a03dfd..06d1f05 100644 --- a/daemon/daemon.py +++ b/daemon/daemon.py @@ -136,7 +136,7 @@ def run_main(): port=args.diagnostic_web_port, enable_session_injection=args.enable_session_injection) web_server.start() - with SSHLog(loglevel=0, enable_injection=args.enable_session_injection) as sshb: + with SSHLog(loglevel=0) as sshb: try: while sshb.is_ok():