From 057709c49deb1d1cd6b6bbfa86004025576efb59 Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Wed, 8 Jun 2022 01:05:07 +0300 Subject: [PATCH] Rely on tracepoints for file descriptor retrieval in Golang implementation --- tap/tlstapper/bpf/golang_uprobes.c | 297 ++++++++++++++++++----------- tap/tlstapper/bpf/include/maps.h | 1 + tap/tlstapper/golang_hooks.go | 34 +--- tap/tlstapper/golang_offsets.go | 24 +-- tap/tlstapper/tls_tapper.go | 2 + tap/tlstapper/tlstapper_bpfeb.go | 74 ++++--- tap/tlstapper/tlstapper_bpfeb.o | Bin 131640 -> 156480 bytes tap/tlstapper/tlstapper_bpfel.go | 74 ++++--- tap/tlstapper/tlstapper_bpfel.o | Bin 132296 -> 157296 bytes 9 files changed, 259 insertions(+), 247 deletions(-) diff --git a/tap/tlstapper/bpf/golang_uprobes.c b/tap/tlstapper/bpf/golang_uprobes.c index faa685955..05377f729 100644 --- a/tap/tlstapper/bpf/golang_uprobes.c +++ b/tap/tlstapper/bpf/golang_uprobes.c @@ -5,70 +5,192 @@ Copyright (C) UP9 Inc. */ #include "include/headers.h" +#include "include/util.h" #include "include/maps.h" -#include "include/pids.h" #include "include/log.h" #include "include/logger_messages.h" +#include "include/pids.h" +static __always_inline int golang_get_count_bytes(struct pt_regs *ctx, struct ssl_info* info, __u64 id) { + size_t countBytes; + long err = bpf_probe_read(&countBytes, sizeof(size_t), (void*) info->count_ptr); + + if (err != 0) { + log_error(ctx, LOG_ERROR_READING_BYTES_COUNT, id, err, 0l); + return 0; + } + + return countBytes; +} + +static __always_inline int golang_add_address_to_chunk(struct pt_regs *ctx, struct tls_chunk* chunk, __u64 id, __u32 fd) { + __u32 pid = id >> 32; + __u64 key = (__u64) pid << 32 | fd; + + // bpf_printk("[golang_add_address_to_chunk] file_descriptor_to_ipv4 key: %d", key); + struct fd_info *fdinfo = bpf_map_lookup_elem(&file_descriptor_to_ipv4, &key); + + if (fdinfo == NULL) { + return 0; + } + + int err = bpf_probe_read(chunk->address, sizeof(chunk->address), fdinfo->ipv4_addr); + chunk->flags |= (fdinfo->flags & FLAGS_IS_CLIENT_BIT); + + if (err != 0) { + log_error(ctx, LOG_ERROR_READING_FD_ADDRESS, id, err, 0l); + return 0; + } + + return 1; +} + +static __always_inline void golang_send_chunk_part(struct pt_regs *ctx, __u8* buffer, __u64 id, + struct tls_chunk* chunk, int start, int end) { + size_t recorded = MIN(end - start, sizeof(chunk->data)); + + if (recorded <= 0) { + return; + } + + chunk->recorded = recorded; + chunk->start = start; + + // This ugly trick is for the ebpf verifier happiness + // + long err = 0; + if (chunk->recorded == sizeof(chunk->data)) { + err = bpf_probe_read(chunk->data, sizeof(chunk->data), buffer + start); + } else { + recorded &= (sizeof(chunk->data) - 1); // Buffer must be N^2 + err = bpf_probe_read(chunk->data, recorded, buffer + start); + } + + if (err != 0) { + log_error(ctx, LOG_ERROR_READING_FROM_SSL_BUFFER, id, err, 0l); + return; + } + + // bpf_printk("[golang_send_chunk_part] perf_event"); + + bpf_perf_event_output(ctx, &chunks_buffer, BPF_F_CURRENT_CPU, chunk, sizeof(struct tls_chunk)); +} + +static __always_inline void golang_send_chunk(struct pt_regs *ctx, __u8* buffer, __u64 id, struct tls_chunk* chunk) { + // ebpf loops must be bounded at compile time, we can't use (i < chunk->len / CHUNK_SIZE) + // + // https://lwn.net/Articles/794934/ + // + // However we want to run in kernel older than 5.3, hence we use "#pragma unroll" anyway + // + #pragma unroll + for (int i = 0; i < MAX_CHUNKS_PER_OPERATION; i++) { + if (chunk->len <= (CHUNK_SIZE * i)) { + break; + } + + golang_send_chunk_part(ctx, buffer, id, chunk, CHUNK_SIZE * i, chunk->len); + } +} + +static __always_inline void golang_output_ssl_chunk(struct pt_regs *ctx, struct ssl_info* info, __u64 id, __u32 flags) { + int countBytes = info->buffer_len; + // bpf_printk("countBytes: %d", countBytes); + + if (countBytes <= 0) { + return; + } + + if (countBytes > (CHUNK_SIZE * MAX_CHUNKS_PER_OPERATION)) { + log_error(ctx, LOG_ERROR_BUFFER_TOO_BIG, id, countBytes, 0l); + return; + } + + struct tls_chunk* chunk; + int zero = 0; + + // If other thread, running on the same CPU get to this point at the same time like us (context switch) + // the data will be corrupted - protection may be added in the future + // + chunk = bpf_map_lookup_elem(&heap, &zero); + + if (!chunk) { + log_error(ctx, LOG_ERROR_ALLOCATING_CHUNK, id, 0l, 0l); + return; + } + + chunk->type = openssl_type; + chunk->flags = flags; + chunk->pid = id >> 32; + chunk->tgid = id; + chunk->len = countBytes; + chunk->fd = info->fd; + + if (!golang_add_address_to_chunk(ctx, chunk, id, chunk->fd)) { + // bpf_printk("OOPS! Can't determine address."); + // Without an address, we drop the chunk because there is not much to do with it in Go + // + return; + } + + golang_send_chunk(ctx, info->buffer, id, chunk); +} SEC("uprobe/golang_crypto_tls_write") static __always_inline int golang_crypto_tls_write_uprobe(struct pt_regs *ctx) { + // bpf_printk("called [golang_crypto_tls_write_uprobe]"); __u64 pid_tgid = bpf_get_current_pid_tgid(); __u64 pid = pid_tgid >> 32; if (!should_tap(pid)) { + // bpf_printk("[golang_crypto_tls_write_uprobe] SHOULD NOT TAP"); return 0; } - void* stack_addr = (void*)ctx->rsp; - __u32 key_dial; - // Address at ctx->rsp + 0x20 is common between golang_crypto_tls_write_uprobe and golang_net_http_dialconn_uprobe - __u32 status = bpf_probe_read(&key_dial, sizeof(key_dial), stack_addr + 0x20); - if (status < 0) { - log_error(ctx, LOG_ERROR_GOLANG_WRITE_READING_KEY_DIAL, pid_tgid, status, 0l); - return 0; - } + bpf_printk("[golang_crypto_tls_write_uprobe] ssl_write_context lookup key: %d", pid_tgid); + struct ssl_info *infoPtr = bpf_map_lookup_elem(&ssl_write_context, &pid_tgid); + struct ssl_info info = {}; - __u64 key_dial_full = (pid << 32) + key_dial; - struct golang_socket *s = bpf_map_lookup_elem(&golang_socket_to_write, &key_dial_full); - if (s == NULL) { - log_error(ctx, LOG_ERROR_GOLANG_WRITE_GETTING_SOCKET, pid_tgid, status, 0l); - return 0; - } + if (infoPtr == NULL) { + info.fd = -1; + info.created_at_nano = bpf_ktime_get_ns(); + } else { + long err = bpf_probe_read(&info, sizeof(struct ssl_info), infoPtr); - struct tls_chunk *chunk = NULL; - int zero = 0; + if (err != 0) { + log_error(ctx, LOG_ERROR_READING_SSL_CONTEXT, pid_tgid, err, ORIGIN_SSL_UPROBE_CODE); + } - chunk = bpf_map_lookup_elem(&heap, &zero); - - if (!chunk) { - log_error(ctx, LOG_ERROR_GOLANG_ALLOCATING_EVENT, pid, 0l, 0l); - return 0; + if ((bpf_ktime_get_ns() - info.created_at_nano) > SSL_INFO_MAX_TTL_NANO) { + // If the ssl info is too old, we don't want to use its info because it may be incorrect. + // + info.fd = -1; + info.created_at_nano = bpf_ktime_get_ns(); + } } - chunk->type = golang_type; - chunk->pid = pid; - chunk->fd = s->fd; - // ctx->rsi is common between golang_crypto_tls_write_uprobe and golang_crypto_tls_read_uprobe - chunk->flags = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address - chunk->is_request = true; - chunk->len = ctx->rcx; + info.buffer_len = ctx->rcx; + info.buffer = (void*)ctx->rbx; - status = bpf_probe_read(&chunk->data, CHUNK_SIZE, (void*)ctx->rbx); - if (status < 0) { - log_error(ctx, LOG_ERROR_GOLANG_WRITE_READING_DATA, pid_tgid, status, 0l); - return 0; - } + long err = bpf_map_update_elem(&ssl_write_context, &pid_tgid, &info, BPF_ANY); - bpf_perf_event_output(ctx, &chunks_buffer, BPF_F_CURRENT_CPU, chunk, sizeof(struct tls_chunk)); + if (err != 0) { + log_error(ctx, LOG_ERROR_PUTTING_SSL_CONTEXT, pid_tgid, err, 0l); + } + + bpf_printk("[golang_crypto_tls_write_uprobe] reached output info.fd: %d", info.fd); + + golang_output_ssl_chunk(ctx, &info, pid_tgid, 0); return 0; } SEC("uprobe/golang_crypto_tls_read") static __always_inline int golang_crypto_tls_read_uprobe(struct pt_regs *ctx) { + // bpf_printk("called [golang_crypto_tls_read_uprobe]"); __u64 pid_tgid = bpf_get_current_pid_tgid(); __u64 pid = pid_tgid >> 32; if (!should_tap(pid)) { + // bpf_printk("[golang_crypto_tls_read_uprobe] SHOULD NOT TAP"); return 0; } @@ -81,95 +203,40 @@ static __always_inline int golang_crypto_tls_read_uprobe(struct pt_regs *ctx) { return 0; } - struct tls_chunk *chunk = NULL; - int zero = 0; + bpf_printk("[golang_crypto_tls_read_uprobe] ssl_read_context lookup key: %d", pid_tgid); + struct ssl_info *infoPtr = bpf_map_lookup_elem(&ssl_read_context, &pid_tgid); + struct ssl_info info = {}; - chunk = bpf_map_lookup_elem(&heap, &zero); + if (infoPtr == NULL) { + info.fd = -1; + info.created_at_nano = bpf_ktime_get_ns(); + } else { + long err = bpf_probe_read(&info, sizeof(struct ssl_info), infoPtr); - if (!chunk) { - log_error(ctx, LOG_ERROR_GOLANG_ALLOCATING_EVENT, pid, 0l, 0l); - return 0; + if (err != 0) { + log_error(ctx, LOG_ERROR_READING_SSL_CONTEXT, pid_tgid, err, ORIGIN_SSL_UPROBE_CODE); + } + + if ((bpf_ktime_get_ns() - info.created_at_nano) > SSL_INFO_MAX_TTL_NANO) { + // If the ssl info is too old, we don't want to use its info because it may be incorrect. + // + info.fd = -1; + info.created_at_nano = bpf_ktime_get_ns(); + } } - chunk->type = golang_type; - chunk->pid = pid; - // ctx->rsi is common between golang_crypto_tls_write_uprobe and golang_crypto_tls_read_uprobe - chunk->flags = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address - chunk->is_request = false; - chunk->len = ctx->rcx; + info.buffer_len = ctx->rcx; + info.buffer = (void*)data_p; - status = bpf_probe_read(&chunk->data, CHUNK_SIZE, (void*)(data_p)); - if (status < 0) { - log_error(ctx, LOG_ERROR_GOLANG_READ_READING_DATA, pid_tgid, status, 0l); - return 0; - } + long err = bpf_map_update_elem(&ssl_read_context, &pid_tgid, &info, BPF_ANY); - bpf_perf_event_output(ctx, &chunks_buffer, BPF_F_CURRENT_CPU, chunk, sizeof(struct tls_chunk)); - return 0; -} - -SEC("uprobe/golang_net_socket") -static __always_inline int golang_net_socket_uprobe(struct pt_regs *ctx) { - __u64 pid_tgid = bpf_get_current_pid_tgid(); - __u64 pid = pid_tgid >> 32; - if (!should_tap(pid)) { - return 0; + if (err != 0) { + log_error(ctx, LOG_ERROR_PUTTING_SSL_CONTEXT, pid_tgid, err, 0l); } - // ctx->r14 is common between golang_net_socket_uprobe and golang_net_http_dialconn_uprobe - __u64 key_socket = (pid << 32) + ctx->r14; - struct golang_socket *s = bpf_map_lookup_elem(&golang_dial_to_socket, &key_socket); - if (s == NULL) { - log_error(ctx, LOG_ERROR_GOLANG_SOCKET_GETTING_SOCKET, pid_tgid, 0l, 0l); - return 0; - } + bpf_printk("[golang_crypto_tls_read_uprobe] reached output info.fd: %d", info.fd); - struct golang_socket b = { - .pid = s->pid, - .fd = ctx->rax, - .key_dial = s->key_dial, - .conn_addr = 0, - }; - - __u64 key_dial_full = (pid << 32) + s->key_dial; - __u32 status = bpf_map_update_elem(&golang_socket_to_write, &key_dial_full, &b, BPF_ANY); - if (status != 0) { - log_error(ctx, LOG_ERROR_GOLANG_SOCKET_PUTTING_FILE_DESCRIPTOR, pid_tgid, status, 0l); - } - - return 0; -} - -SEC("uprobe/golang_net_http_dialconn") -static __always_inline int golang_net_http_dialconn_uprobe(struct pt_regs *ctx) { - __u64 pid_tgid = bpf_get_current_pid_tgid(); - __u64 pid = pid_tgid >> 32; - if (!should_tap(pid)) { - return 0; - } - - void* stack_addr = (void*)ctx->rsp; - __u32 key_dial; - // Address at ctx->rsp + 0x250 is common between golang_crypto_tls_write_uprobe and golang_net_http_dialconn_uprobe - __u32 status = bpf_probe_read(&key_dial, sizeof(key_dial), stack_addr + 0x250); - if (status < 0) { - log_error(ctx, LOG_ERROR_GOLANG_DIAL_READING_KEY_DIAL, pid_tgid, status, 0l); - return 0; - } - - struct golang_socket b = { - .pid = pid, - .fd = 0, - .key_dial = key_dial, - .conn_addr = 0, - }; - - // ctx->r14 is common between golang_net_socket_uprobe and golang_net_http_dialconn_uprobe - __u64 key_socket = (pid << 32) + ctx->r14; - status = bpf_map_update_elem(&golang_dial_to_socket, &key_socket, &b, BPF_ANY); - if (status != 0) { - log_error(ctx, LOG_ERROR_GOLANG_DIAL_PUTTING_SOCKET, pid_tgid, status, 0l); - } + golang_output_ssl_chunk(ctx, &info, pid_tgid, FLAGS_IS_READ_BIT); return 0; } diff --git a/tap/tlstapper/bpf/include/maps.h b/tap/tlstapper/bpf/include/maps.h index 366e2d7a6..351343bd4 100644 --- a/tap/tlstapper/bpf/include/maps.h +++ b/tap/tlstapper/bpf/include/maps.h @@ -46,6 +46,7 @@ struct tls_chunk { struct ssl_info { void* buffer; + __u32 buffer_len; __u32 fd; __u64 created_at_nano; diff --git a/tap/tlstapper/golang_hooks.go b/tap/tlstapper/golang_hooks.go index 45acff663..25f5ff551 100644 --- a/tap/tlstapper/golang_hooks.go +++ b/tap/tlstapper/golang_hooks.go @@ -6,10 +6,8 @@ import ( ) type golangHooks struct { - golangDialProbe link.Link - golangSocketProbe link.Link - golangWriteProbe link.Link - golangReadProbe link.Link + golangWriteProbe link.Link + golangReadProbe link.Link } func (s *golangHooks) installUprobes(bpfObjects *tlsTapperObjects, filePath string) error { @@ -31,26 +29,6 @@ func (s *golangHooks) installUprobes(bpfObjects *tlsTapperObjects, filePath stri func (s *golangHooks) installHooks(bpfObjects *tlsTapperObjects, ex *link.Executable, offsets golangOffsets) error { var err error - // Relative offset points to - // [`net/http.(*Transport).dialConn+412`](https://github.com/golang/go/blob/go1.17.6/src/net/http/transport.go#L1561) - s.golangDialProbe, err = ex.Uprobe(golangDialSymbol, bpfObjects.GolangNetHttpDialconnUprobe, &link.UprobeOptions{ - Offset: offsets.GolangDialOffset + 0x19c, - }) - - if err != nil { - return errors.Wrap(err, 0) - } - - // Relative offset points to - // [`net.socket+127`](https://github.com/golang/go/blob/go1.17.6/src/net/sock_posix.go#L24) - s.golangSocketProbe, err = ex.Uprobe(golangSocketSymbol, bpfObjects.GolangNetSocketUprobe, &link.UprobeOptions{ - Offset: offsets.GolangSocketOffset + 0x7f, - }) - - if err != nil { - return errors.Wrap(err, 0) - } - // Symbol points to // [`crypto/tls.(*Conn).Write`](https://github.com/golang/go/blob/go1.17.6/src/crypto/tls/conn.go#L1099) s.golangWriteProbe, err = ex.Uprobe(golangWriteSymbol, bpfObjects.GolangCryptoTlsWriteUprobe, &link.UprobeOptions{ @@ -77,14 +55,6 @@ func (s *golangHooks) installHooks(bpfObjects *tlsTapperObjects, ex *link.Execut func (s *golangHooks) close() []error { errors := make([]error, 0) - if err := s.golangDialProbe.Close(); err != nil { - errors = append(errors, err) - } - - if err := s.golangSocketProbe.Close(); err != nil { - errors = append(errors, err) - } - if err := s.golangWriteProbe.Close(); err != nil { errors = append(errors, err) } diff --git a/tap/tlstapper/golang_offsets.go b/tap/tlstapper/golang_offsets.go index cf02d1438..1b46f993f 100644 --- a/tap/tlstapper/golang_offsets.go +++ b/tap/tlstapper/golang_offsets.go @@ -11,10 +11,8 @@ import ( ) type golangOffsets struct { - GolangDialOffset uint64 - GolangSocketOffset uint64 - GolangWriteOffset uint64 - GolangReadOffset uint64 + GolangWriteOffset uint64 + GolangReadOffset uint64 } const ( @@ -22,8 +20,6 @@ const ( golangVersionSymbol = "runtime.buildVersion.str" golangWriteSymbol = "crypto/tls.(*Conn).Write" golangReadSymbol = "crypto/tls.(*Conn).Read" - golangSocketSymbol = "net.socket" - golangDialSymbol = "net/http.(*Transport).dialConn" ) func findGolangOffsets(filePath string) (golangOffsets, error) { @@ -46,16 +42,6 @@ func findGolangOffsets(filePath string) (golangOffsets, error) { return golangOffsets{}, fmt.Errorf("Unsupported Go version: %s", goVersion) } - dialOffset, err := getOffset(offsets, golangDialSymbol) - if err != nil { - return golangOffsets{}, fmt.Errorf("reading offset [%s]: %s", golangDialSymbol, err) - } - - socketOffset, err := getOffset(offsets, golangSocketSymbol) - if err != nil { - return golangOffsets{}, fmt.Errorf("reading offset [%s]: %s", golangSocketSymbol, err) - } - writeOffset, err := getOffset(offsets, golangWriteSymbol) if err != nil { return golangOffsets{}, fmt.Errorf("reading offset [%s]: %s", golangWriteSymbol, err) @@ -67,10 +53,8 @@ func findGolangOffsets(filePath string) (golangOffsets, error) { } return golangOffsets{ - GolangDialOffset: dialOffset, - GolangSocketOffset: socketOffset, - GolangWriteOffset: writeOffset, - GolangReadOffset: readOffset, + GolangWriteOffset: writeOffset, + GolangReadOffset: readOffset, }, nil } diff --git a/tap/tlstapper/tls_tapper.go b/tap/tlstapper/tls_tapper.go index e29333c6b..a4c89ada5 100644 --- a/tap/tlstapper/tls_tapper.go +++ b/tap/tlstapper/tls_tapper.go @@ -224,6 +224,8 @@ func (t *TlsTapper) tapGolangPath(exePath string) error { return err } + logger.Log.Infof("Tapping TLS (Golang: %v)", exePath) + t.golangHooksStructs = append(t.golangHooksStructs, hooks) return nil diff --git a/tap/tlstapper/tlstapper_bpfeb.go b/tap/tlstapper/tlstapper_bpfeb.go index 8c5d724b7..5e3da3ccf 100644 --- a/tap/tlstapper/tlstapper_bpfeb.go +++ b/tap/tlstapper/tlstapper_bpfeb.go @@ -78,25 +78,23 @@ type tlsTapperSpecs struct { // // It can be passed ebpf.CollectionSpec.Assign. type tlsTapperProgramSpecs struct { - GolangCryptoTlsReadUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_read_uprobe"` - GolangCryptoTlsWriteUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_write_uprobe"` - GolangNetHttpDialconnUprobe *ebpf.ProgramSpec `ebpf:"golang_net_http_dialconn_uprobe"` - GolangNetSocketUprobe *ebpf.ProgramSpec `ebpf:"golang_net_socket_uprobe"` - SslRead *ebpf.ProgramSpec `ebpf:"ssl_read"` - SslReadEx *ebpf.ProgramSpec `ebpf:"ssl_read_ex"` - SslRetRead *ebpf.ProgramSpec `ebpf:"ssl_ret_read"` - SslRetReadEx *ebpf.ProgramSpec `ebpf:"ssl_ret_read_ex"` - SslRetWrite *ebpf.ProgramSpec `ebpf:"ssl_ret_write"` - SslRetWriteEx *ebpf.ProgramSpec `ebpf:"ssl_ret_write_ex"` - SslWrite *ebpf.ProgramSpec `ebpf:"ssl_write"` - SslWriteEx *ebpf.ProgramSpec `ebpf:"ssl_write_ex"` - SysEnterAccept4 *ebpf.ProgramSpec `ebpf:"sys_enter_accept4"` - SysEnterClose *ebpf.ProgramSpec `ebpf:"sys_enter_close"` - SysEnterConnect *ebpf.ProgramSpec `ebpf:"sys_enter_connect"` - SysEnterRead *ebpf.ProgramSpec `ebpf:"sys_enter_read"` - SysEnterWrite *ebpf.ProgramSpec `ebpf:"sys_enter_write"` - SysExitAccept4 *ebpf.ProgramSpec `ebpf:"sys_exit_accept4"` - SysExitConnect *ebpf.ProgramSpec `ebpf:"sys_exit_connect"` + GolangCryptoTlsReadUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_read_uprobe"` + GolangCryptoTlsWriteUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_write_uprobe"` + SslRead *ebpf.ProgramSpec `ebpf:"ssl_read"` + SslReadEx *ebpf.ProgramSpec `ebpf:"ssl_read_ex"` + SslRetRead *ebpf.ProgramSpec `ebpf:"ssl_ret_read"` + SslRetReadEx *ebpf.ProgramSpec `ebpf:"ssl_ret_read_ex"` + SslRetWrite *ebpf.ProgramSpec `ebpf:"ssl_ret_write"` + SslRetWriteEx *ebpf.ProgramSpec `ebpf:"ssl_ret_write_ex"` + SslWrite *ebpf.ProgramSpec `ebpf:"ssl_write"` + SslWriteEx *ebpf.ProgramSpec `ebpf:"ssl_write_ex"` + SysEnterAccept4 *ebpf.ProgramSpec `ebpf:"sys_enter_accept4"` + SysEnterClose *ebpf.ProgramSpec `ebpf:"sys_enter_close"` + SysEnterConnect *ebpf.ProgramSpec `ebpf:"sys_enter_connect"` + SysEnterRead *ebpf.ProgramSpec `ebpf:"sys_enter_read"` + SysEnterWrite *ebpf.ProgramSpec `ebpf:"sys_enter_write"` + SysExitAccept4 *ebpf.ProgramSpec `ebpf:"sys_exit_accept4"` + SysExitConnect *ebpf.ProgramSpec `ebpf:"sys_exit_connect"` } // tlsTapperMapSpecs contains maps before they are loaded into the kernel. @@ -171,33 +169,29 @@ func (m *tlsTapperMaps) Close() error { // // It can be passed to loadTlsTapperObjects or ebpf.CollectionSpec.LoadAndAssign. type tlsTapperPrograms struct { - GolangCryptoTlsReadUprobe *ebpf.Program `ebpf:"golang_crypto_tls_read_uprobe"` - GolangCryptoTlsWriteUprobe *ebpf.Program `ebpf:"golang_crypto_tls_write_uprobe"` - GolangNetHttpDialconnUprobe *ebpf.Program `ebpf:"golang_net_http_dialconn_uprobe"` - GolangNetSocketUprobe *ebpf.Program `ebpf:"golang_net_socket_uprobe"` - SslRead *ebpf.Program `ebpf:"ssl_read"` - SslReadEx *ebpf.Program `ebpf:"ssl_read_ex"` - SslRetRead *ebpf.Program `ebpf:"ssl_ret_read"` - SslRetReadEx *ebpf.Program `ebpf:"ssl_ret_read_ex"` - SslRetWrite *ebpf.Program `ebpf:"ssl_ret_write"` - SslRetWriteEx *ebpf.Program `ebpf:"ssl_ret_write_ex"` - SslWrite *ebpf.Program `ebpf:"ssl_write"` - SslWriteEx *ebpf.Program `ebpf:"ssl_write_ex"` - SysEnterAccept4 *ebpf.Program `ebpf:"sys_enter_accept4"` - SysEnterClose *ebpf.Program `ebpf:"sys_enter_close"` - SysEnterConnect *ebpf.Program `ebpf:"sys_enter_connect"` - SysEnterRead *ebpf.Program `ebpf:"sys_enter_read"` - SysEnterWrite *ebpf.Program `ebpf:"sys_enter_write"` - SysExitAccept4 *ebpf.Program `ebpf:"sys_exit_accept4"` - SysExitConnect *ebpf.Program `ebpf:"sys_exit_connect"` + GolangCryptoTlsReadUprobe *ebpf.Program `ebpf:"golang_crypto_tls_read_uprobe"` + GolangCryptoTlsWriteUprobe *ebpf.Program `ebpf:"golang_crypto_tls_write_uprobe"` + SslRead *ebpf.Program `ebpf:"ssl_read"` + SslReadEx *ebpf.Program `ebpf:"ssl_read_ex"` + SslRetRead *ebpf.Program `ebpf:"ssl_ret_read"` + SslRetReadEx *ebpf.Program `ebpf:"ssl_ret_read_ex"` + SslRetWrite *ebpf.Program `ebpf:"ssl_ret_write"` + SslRetWriteEx *ebpf.Program `ebpf:"ssl_ret_write_ex"` + SslWrite *ebpf.Program `ebpf:"ssl_write"` + SslWriteEx *ebpf.Program `ebpf:"ssl_write_ex"` + SysEnterAccept4 *ebpf.Program `ebpf:"sys_enter_accept4"` + SysEnterClose *ebpf.Program `ebpf:"sys_enter_close"` + SysEnterConnect *ebpf.Program `ebpf:"sys_enter_connect"` + SysEnterRead *ebpf.Program `ebpf:"sys_enter_read"` + SysEnterWrite *ebpf.Program `ebpf:"sys_enter_write"` + SysExitAccept4 *ebpf.Program `ebpf:"sys_exit_accept4"` + SysExitConnect *ebpf.Program `ebpf:"sys_exit_connect"` } func (p *tlsTapperPrograms) Close() error { return _TlsTapperClose( p.GolangCryptoTlsReadUprobe, p.GolangCryptoTlsWriteUprobe, - p.GolangNetHttpDialconnUprobe, - p.GolangNetSocketUprobe, p.SslRead, p.SslReadEx, p.SslRetRead, diff --git a/tap/tlstapper/tlstapper_bpfeb.o b/tap/tlstapper/tlstapper_bpfeb.o index 9b35383a7a80f0508760dd4b748c52f46d8ddc73..1a632d8373c76047b4fd2b6bbfda338a1659635a 100644 GIT binary patch literal 156480 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

($V(C$>zR)` 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 literal 131640 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 diff --git a/tap/tlstapper/tlstapper_bpfel.go b/tap/tlstapper/tlstapper_bpfel.go index 83d996c5f..d53a0fb40 100644 --- a/tap/tlstapper/tlstapper_bpfel.go +++ b/tap/tlstapper/tlstapper_bpfel.go @@ -78,25 +78,23 @@ type tlsTapperSpecs struct { // // It can be passed ebpf.CollectionSpec.Assign. type tlsTapperProgramSpecs struct { - GolangCryptoTlsReadUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_read_uprobe"` - GolangCryptoTlsWriteUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_write_uprobe"` - GolangNetHttpDialconnUprobe *ebpf.ProgramSpec `ebpf:"golang_net_http_dialconn_uprobe"` - GolangNetSocketUprobe *ebpf.ProgramSpec `ebpf:"golang_net_socket_uprobe"` - SslRead *ebpf.ProgramSpec `ebpf:"ssl_read"` - SslReadEx *ebpf.ProgramSpec `ebpf:"ssl_read_ex"` - SslRetRead *ebpf.ProgramSpec `ebpf:"ssl_ret_read"` - SslRetReadEx *ebpf.ProgramSpec `ebpf:"ssl_ret_read_ex"` - SslRetWrite *ebpf.ProgramSpec `ebpf:"ssl_ret_write"` - SslRetWriteEx *ebpf.ProgramSpec `ebpf:"ssl_ret_write_ex"` - SslWrite *ebpf.ProgramSpec `ebpf:"ssl_write"` - SslWriteEx *ebpf.ProgramSpec `ebpf:"ssl_write_ex"` - SysEnterAccept4 *ebpf.ProgramSpec `ebpf:"sys_enter_accept4"` - SysEnterClose *ebpf.ProgramSpec `ebpf:"sys_enter_close"` - SysEnterConnect *ebpf.ProgramSpec `ebpf:"sys_enter_connect"` - SysEnterRead *ebpf.ProgramSpec `ebpf:"sys_enter_read"` - SysEnterWrite *ebpf.ProgramSpec `ebpf:"sys_enter_write"` - SysExitAccept4 *ebpf.ProgramSpec `ebpf:"sys_exit_accept4"` - SysExitConnect *ebpf.ProgramSpec `ebpf:"sys_exit_connect"` + GolangCryptoTlsReadUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_read_uprobe"` + GolangCryptoTlsWriteUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_write_uprobe"` + SslRead *ebpf.ProgramSpec `ebpf:"ssl_read"` + SslReadEx *ebpf.ProgramSpec `ebpf:"ssl_read_ex"` + SslRetRead *ebpf.ProgramSpec `ebpf:"ssl_ret_read"` + SslRetReadEx *ebpf.ProgramSpec `ebpf:"ssl_ret_read_ex"` + SslRetWrite *ebpf.ProgramSpec `ebpf:"ssl_ret_write"` + SslRetWriteEx *ebpf.ProgramSpec `ebpf:"ssl_ret_write_ex"` + SslWrite *ebpf.ProgramSpec `ebpf:"ssl_write"` + SslWriteEx *ebpf.ProgramSpec `ebpf:"ssl_write_ex"` + SysEnterAccept4 *ebpf.ProgramSpec `ebpf:"sys_enter_accept4"` + SysEnterClose *ebpf.ProgramSpec `ebpf:"sys_enter_close"` + SysEnterConnect *ebpf.ProgramSpec `ebpf:"sys_enter_connect"` + SysEnterRead *ebpf.ProgramSpec `ebpf:"sys_enter_read"` + SysEnterWrite *ebpf.ProgramSpec `ebpf:"sys_enter_write"` + SysExitAccept4 *ebpf.ProgramSpec `ebpf:"sys_exit_accept4"` + SysExitConnect *ebpf.ProgramSpec `ebpf:"sys_exit_connect"` } // tlsTapperMapSpecs contains maps before they are loaded into the kernel. @@ -171,33 +169,29 @@ func (m *tlsTapperMaps) Close() error { // // It can be passed to loadTlsTapperObjects or ebpf.CollectionSpec.LoadAndAssign. type tlsTapperPrograms struct { - GolangCryptoTlsReadUprobe *ebpf.Program `ebpf:"golang_crypto_tls_read_uprobe"` - GolangCryptoTlsWriteUprobe *ebpf.Program `ebpf:"golang_crypto_tls_write_uprobe"` - GolangNetHttpDialconnUprobe *ebpf.Program `ebpf:"golang_net_http_dialconn_uprobe"` - GolangNetSocketUprobe *ebpf.Program `ebpf:"golang_net_socket_uprobe"` - SslRead *ebpf.Program `ebpf:"ssl_read"` - SslReadEx *ebpf.Program `ebpf:"ssl_read_ex"` - SslRetRead *ebpf.Program `ebpf:"ssl_ret_read"` - SslRetReadEx *ebpf.Program `ebpf:"ssl_ret_read_ex"` - SslRetWrite *ebpf.Program `ebpf:"ssl_ret_write"` - SslRetWriteEx *ebpf.Program `ebpf:"ssl_ret_write_ex"` - SslWrite *ebpf.Program `ebpf:"ssl_write"` - SslWriteEx *ebpf.Program `ebpf:"ssl_write_ex"` - SysEnterAccept4 *ebpf.Program `ebpf:"sys_enter_accept4"` - SysEnterClose *ebpf.Program `ebpf:"sys_enter_close"` - SysEnterConnect *ebpf.Program `ebpf:"sys_enter_connect"` - SysEnterRead *ebpf.Program `ebpf:"sys_enter_read"` - SysEnterWrite *ebpf.Program `ebpf:"sys_enter_write"` - SysExitAccept4 *ebpf.Program `ebpf:"sys_exit_accept4"` - SysExitConnect *ebpf.Program `ebpf:"sys_exit_connect"` + GolangCryptoTlsReadUprobe *ebpf.Program `ebpf:"golang_crypto_tls_read_uprobe"` + GolangCryptoTlsWriteUprobe *ebpf.Program `ebpf:"golang_crypto_tls_write_uprobe"` + SslRead *ebpf.Program `ebpf:"ssl_read"` + SslReadEx *ebpf.Program `ebpf:"ssl_read_ex"` + SslRetRead *ebpf.Program `ebpf:"ssl_ret_read"` + SslRetReadEx *ebpf.Program `ebpf:"ssl_ret_read_ex"` + SslRetWrite *ebpf.Program `ebpf:"ssl_ret_write"` + SslRetWriteEx *ebpf.Program `ebpf:"ssl_ret_write_ex"` + SslWrite *ebpf.Program `ebpf:"ssl_write"` + SslWriteEx *ebpf.Program `ebpf:"ssl_write_ex"` + SysEnterAccept4 *ebpf.Program `ebpf:"sys_enter_accept4"` + SysEnterClose *ebpf.Program `ebpf:"sys_enter_close"` + SysEnterConnect *ebpf.Program `ebpf:"sys_enter_connect"` + SysEnterRead *ebpf.Program `ebpf:"sys_enter_read"` + SysEnterWrite *ebpf.Program `ebpf:"sys_enter_write"` + SysExitAccept4 *ebpf.Program `ebpf:"sys_exit_accept4"` + SysExitConnect *ebpf.Program `ebpf:"sys_exit_connect"` } func (p *tlsTapperPrograms) Close() error { return _TlsTapperClose( p.GolangCryptoTlsReadUprobe, p.GolangCryptoTlsWriteUprobe, - p.GolangNetHttpDialconnUprobe, - p.GolangNetSocketUprobe, p.SslRead, p.SslReadEx, p.SslRetRead, diff --git a/tap/tlstapper/tlstapper_bpfel.o b/tap/tlstapper/tlstapper_bpfel.o index 9c52ac46abfab42191f12d66ae26e20e00bec87d..0f34952ab1b100211ae3b9e7df365a4721eea352 100644 GIT binary patch literal 157296 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 literal 132296 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 Qo6Nk%|BxtcU^xE&1=iB#vj6}9