From 464aa98f2322dd717c9b3b95d801a963602cf11a Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Mon, 30 May 2022 14:20:15 +0300 Subject: [PATCH] Add `golang_uprobes.c` --- tap/tlstapper/bpf/golang_uprobes.c | 156 +++++++++++++++++++++++++++++ tap/tlstapper/bpf/include/maps.h | 19 +++- tap/tlstapper/bpf/tls_tapper.c | 1 + tap/tlstapper/tls_tapper.go | 2 +- tap/tlstapper/tlstapper_bpfeb.go | 100 ++++++++++++------ tap/tlstapper/tlstapper_bpfeb.o | Bin 116088 -> 125296 bytes tap/tlstapper/tlstapper_bpfel.go | 100 ++++++++++++------ tap/tlstapper/tlstapper_bpfel.o | Bin 116088 -> 125296 bytes 8 files changed, 317 insertions(+), 61 deletions(-) create mode 100644 tap/tlstapper/bpf/golang_uprobes.c diff --git a/tap/tlstapper/bpf/golang_uprobes.c b/tap/tlstapper/bpf/golang_uprobes.c new file mode 100644 index 000000000..1099c5695 --- /dev/null +++ b/tap/tlstapper/bpf/golang_uprobes.c @@ -0,0 +1,156 @@ +/* +Note: This file is licenced differently from the rest of the project +SPDX-License-Identifier: GPL-2.0 +Copyright (C) UP9 Inc. +*/ + +#include + +#include "include/headers.h" +#include "include/maps.h" + +#define MAX_ENTRIES_LRU_HASH (1 << 14) // 16384 +#define MAX_ENTRIES_RINGBUFF (1 << 24) // 16777216 +#define BUFFER_SIZE_READ_WRITE (1 << 19) // 512 KiB + + +struct socket { + __u32 pid; + __u32 fd; + __u32 key_dial; +}; + +struct golang_read_write { + __u32 pid; + __u32 fd; + __u32 conn_addr; + bool is_request; + __u32 len; + __u32 cap; + __u8 data[BUFFER_SIZE_READ_WRITE]; +}; + +BPF_LRU_HASH(golang_socket_dials, __u64, struct socket); +BPF_LRU_HASH(golang_dial_writes, __u32, struct socket); +BPF_RINGBUF(golang_read_writes); + +const struct golang_read_write *unused __attribute__((unused)); + + +SEC("uprobe/golang_crypto_tls_write") +static __always_inline int golang_crypto_tls_write_uprobe(struct pt_regs *ctx) { + 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) { + bpf_printk("[golang_crypto_tls_write_uprobe] error reading key_dial: %d", status); + return 0; + } + + struct socket *s = bpf_map_lookup_elem(&golang_dial_writes, &key_dial); + if (s == NULL) { + bpf_printk("[golang_crypto_tls_write_uprobe] error getting socket"); + return 0; + } + + struct golang_read_write *b = NULL; + b = bpf_ringbuf_reserve(&golang_read_writes, sizeof(struct golang_read_write), 0); + if (!b) { + return 0; + } + + __u64 pid_tgid = bpf_get_current_pid_tgid(); + b->pid = pid_tgid >> 32; + b->fd = s->fd; + // ctx->rsi is common between golang_crypto_tls_write_uprobe and golang_net_http_read_uprobe + b->conn_addr = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address + b->is_request = true; + b->len = ctx->rcx; + b->cap = ctx->rdi; + + status = bpf_probe_read_str(&b->data, sizeof(b->data), (void*)ctx->rbx); + if (status < 0) { + bpf_printk("[golang_crypto_tls_write_uprobe] error reading data: %d", status); + bpf_ringbuf_discard(b, BPF_RB_FORCE_WAKEUP); + return 0; + } + + bpf_ringbuf_submit(b, 0); + + return 0; +} + +SEC("uprobe/golang_net_http_read") +static __always_inline int golang_net_http_read_uprobe(struct pt_regs *ctx) { + struct golang_read_write *b = NULL; + b = bpf_ringbuf_reserve(&golang_read_writes, sizeof(struct golang_read_write), 0); + if (!b) { + return 0; + } + + __u64 pid_tgid = bpf_get_current_pid_tgid(); + b->pid = pid_tgid >> 32; + // ctx->rsi is common between golang_crypto_tls_write_uprobe and golang_net_http_read_uprobe + b->conn_addr = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address + b->is_request = false; + b->len = ctx->rax; + b->cap = ctx->r10; + + __u32 status = bpf_probe_read_str(&b->data, sizeof(b->data), (void*)ctx->r8); + if (status < 0) { + bpf_printk("[golang_net_http_read_uprobe] error reading data: %d", status); + bpf_ringbuf_discard(b, BPF_RB_FORCE_WAKEUP); + return 0; + } + + bpf_ringbuf_submit(b, 0); + + 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; + // ctx->r14 is common between golang_net_socket_uprobe and golang_net_http_dialconn_uprobe + __u64 key_socket = (pid << 32) + ctx->r14; + struct socket *s = bpf_map_lookup_elem(&golang_socket_dials, &key_socket); + if (s == NULL) { + return 0; + } + + struct socket b = { .pid = s->pid, .fd = ctx->rax, .key_dial = s->key_dial }; + + __u32 status = bpf_map_update_elem(&golang_dial_writes, &s->key_dial, &b, BPF_ANY); + if (status != 0) { + bpf_printk("[golang_net_socket_uprobe] error updating socket file descriptor: %d", status); + } + + return 0; +} + +SEC("uprobe/golang_net_http_dialconn") +static __always_inline int golang_net_http_dialconn_uprobe(struct pt_regs *ctx) { + 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) { + bpf_printk("[golang_net_http_dialconn_uprobe] error reading key_dial: %d", status); + return 0; + } + + __u64 pid_tgid = bpf_get_current_pid_tgid(); + struct socket b = { .pid = pid_tgid >> 32, .fd = 0, .key_dial = key_dial }; + + __u64 pid = b.pid; + // 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_socket_dials, &key_socket, &b, BPF_ANY); + if (status != 0) { + bpf_printk("[golang_net_socket_uprobe] error setting socket: %d", status); + } + + return 0; +} diff --git a/tap/tlstapper/bpf/include/maps.h b/tap/tlstapper/bpf/include/maps.h index 0774e775b..5296834a1 100644 --- a/tap/tlstapper/bpf/include/maps.h +++ b/tap/tlstapper/bpf/include/maps.h @@ -16,6 +16,11 @@ Copyright (C) UP9 Inc. // One minute in nano seconds. Chosen by gut feeling. #define SSL_INFO_MAX_TTL_NANO (1000000000l * 60l) +#define MAX_ENTRIES_HASH (1 << 12) // 4096 +#define MAX_ENTRIES_PERF_OUTPUT (1 << 10) // 1024 +#define MAX_ENTRIES_LRU_HASH (1 << 14) // 16384 +#define MAX_ENTRIES_RINGBUFF (1 << 24) // 16777216 + // The same struct can be found in chunk.go // // Be careful when editing, alignment and padding should be exactly the same in go/c. @@ -57,13 +62,19 @@ struct fd_info { }; #define BPF_HASH(_name, _key_type, _value_type) \ - BPF_MAP(_name, BPF_MAP_TYPE_HASH, _key_type, _value_type, 4096) + BPF_MAP(_name, BPF_MAP_TYPE_HASH, _key_type, _value_type, MAX_ENTRIES_HASH) #define BPF_PERF_OUTPUT(_name) \ - BPF_MAP(_name, BPF_MAP_TYPE_PERF_EVENT_ARRAY, int, __u32, 1024) - + BPF_MAP(_name, BPF_MAP_TYPE_PERF_EVENT_ARRAY, int, __u32, MAX_ENTRIES_PERF_OUTPUT) + #define BPF_LRU_HASH(_name, _key_type, _value_type) \ - BPF_MAP(_name, BPF_MAP_TYPE_LRU_HASH, _key_type, _value_type, 16384) + BPF_MAP(_name, BPF_MAP_TYPE_LRU_HASH, _key_type, _value_type, MAX_ENTRIES_LRU_HASH) + +#define BPF_RINGBUF(_name) \ + struct { \ + __uint(type, BPF_MAP_TYPE_RINGBUF); \ + __uint(max_entries, MAX_ENTRIES_RINGBUFF); \ + } _name SEC(".maps"); \ BPF_HASH(pids_map, __u32, __u32); BPF_LRU_HASH(ssl_write_context, __u64, struct ssl_info); diff --git a/tap/tlstapper/bpf/tls_tapper.c b/tap/tlstapper/bpf/tls_tapper.c index 9878ef690..c328f0c89 100644 --- a/tap/tlstapper/bpf/tls_tapper.c +++ b/tap/tlstapper/bpf/tls_tapper.c @@ -14,6 +14,7 @@ Copyright (C) UP9 Inc. // To avoid multiple .o files // #include "openssl_uprobes.c" +#include "golang_uprobes.c" #include "fd_tracepoints.c" #include "fd_to_address_tracepoints.c" diff --git a/tap/tlstapper/tls_tapper.go b/tap/tlstapper/tls_tapper.go index b6fd173e1..67b38ccb3 100644 --- a/tap/tlstapper/tls_tapper.go +++ b/tap/tlstapper/tls_tapper.go @@ -11,7 +11,7 @@ import ( const GLOABL_TAP_PID = 0 -//go:generate go run github.com/cilium/ebpf/cmd/bpf2go tlsTapper bpf/tls_tapper.c -- -O2 -g -D__TARGET_ARCH_x86 +//go:generate go run github.com/cilium/ebpf/cmd/bpf2go@0d0727ef53e2f53b1731c73f4c61e0f58693083a -type golang_read_write tlsTapper bpf/tls_tapper.c -- -O2 -g -D__TARGET_ARCH_x86 type TlsTapper struct { bpfObjects tlsTapperObjects diff --git a/tap/tlstapper/tlstapper_bpfeb.go b/tap/tlstapper/tlstapper_bpfeb.go index b250bd755..f39bb5e29 100644 --- a/tap/tlstapper/tlstapper_bpfeb.go +++ b/tap/tlstapper/tlstapper_bpfeb.go @@ -13,6 +13,29 @@ import ( "github.com/cilium/ebpf" ) +type tlsTapperGolangReadWrite struct { + Pid uint32 + Fd uint32 + ConnAddr uint32 + IsRequest bool + _ [3]byte + Len uint32 + Cap uint32 + Data [524288]uint8 +} + +type tlsTapperTlsChunk struct { + Pid uint32 + Tgid uint32 + Len uint32 + Start uint32 + Recorded uint32 + Fd uint32 + Flags uint32 + Address [16]uint8 + Data [4096]uint8 +} + // loadTlsTapper returns the embedded CollectionSpec for tlsTapper. func loadTlsTapper() (*ebpf.CollectionSpec, error) { reader := bytes.NewReader(_TlsTapperBytes) @@ -54,20 +77,24 @@ type tlsTapperSpecs struct { // // It can be passed ebpf.CollectionSpec.Assign. type tlsTapperProgramSpecs struct { - 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"` - 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"` + GolangCryptoTlsWriteUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_write_uprobe"` + GolangNetHttpDialconnUprobe *ebpf.ProgramSpec `ebpf:"golang_net_http_dialconn_uprobe"` + GolangNetHttpReadUprobe *ebpf.ProgramSpec `ebpf:"golang_net_http_read_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"` + 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. @@ -78,6 +105,9 @@ type tlsTapperMapSpecs struct { ChunksBuffer *ebpf.MapSpec `ebpf:"chunks_buffer"` ConnectSyscallInfo *ebpf.MapSpec `ebpf:"connect_syscall_info"` FileDescriptorToIpv4 *ebpf.MapSpec `ebpf:"file_descriptor_to_ipv4"` + GolangDialWrites *ebpf.MapSpec `ebpf:"golang_dial_writes"` + GolangReadWrites *ebpf.MapSpec `ebpf:"golang_read_writes"` + GolangSocketDials *ebpf.MapSpec `ebpf:"golang_socket_dials"` Heap *ebpf.MapSpec `ebpf:"heap"` LogBuffer *ebpf.MapSpec `ebpf:"log_buffer"` PidsMap *ebpf.MapSpec `ebpf:"pids_map"` @@ -108,6 +138,9 @@ type tlsTapperMaps struct { ChunksBuffer *ebpf.Map `ebpf:"chunks_buffer"` ConnectSyscallInfo *ebpf.Map `ebpf:"connect_syscall_info"` FileDescriptorToIpv4 *ebpf.Map `ebpf:"file_descriptor_to_ipv4"` + GolangDialWrites *ebpf.Map `ebpf:"golang_dial_writes"` + GolangReadWrites *ebpf.Map `ebpf:"golang_read_writes"` + GolangSocketDials *ebpf.Map `ebpf:"golang_socket_dials"` Heap *ebpf.Map `ebpf:"heap"` LogBuffer *ebpf.Map `ebpf:"log_buffer"` PidsMap *ebpf.Map `ebpf:"pids_map"` @@ -121,6 +154,9 @@ func (m *tlsTapperMaps) Close() error { m.ChunksBuffer, m.ConnectSyscallInfo, m.FileDescriptorToIpv4, + m.GolangDialWrites, + m.GolangReadWrites, + m.GolangSocketDials, m.Heap, m.LogBuffer, m.PidsMap, @@ -133,24 +169,32 @@ func (m *tlsTapperMaps) Close() error { // // It can be passed to loadTlsTapperObjects or ebpf.CollectionSpec.LoadAndAssign. type tlsTapperPrograms struct { - 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"` - 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"` + GolangCryptoTlsWriteUprobe *ebpf.Program `ebpf:"golang_crypto_tls_write_uprobe"` + GolangNetHttpDialconnUprobe *ebpf.Program `ebpf:"golang_net_http_dialconn_uprobe"` + GolangNetHttpReadUprobe *ebpf.Program `ebpf:"golang_net_http_read_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"` + 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.GolangCryptoTlsWriteUprobe, + p.GolangNetHttpDialconnUprobe, + p.GolangNetHttpReadUprobe, + p.GolangNetSocketUprobe, p.SslRead, p.SslReadEx, p.SslRetRead, diff --git a/tap/tlstapper/tlstapper_bpfeb.o b/tap/tlstapper/tlstapper_bpfeb.o index 3a10829d253ff211a3d4da38f9218d6289973427..1b5d4d8f0d4ae86409abb4ac8734e3dee2584dc6 100644 GIT binary patch literal 125296 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∾i@mUe(3bIYr=-R`s|vw?DQq;g}%O8>xHVXU0Oe< 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 literal 116088 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

-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 diff --git a/tap/tlstapper/tlstapper_bpfel.go b/tap/tlstapper/tlstapper_bpfel.go index a7447f458..df180fe62 100644 --- a/tap/tlstapper/tlstapper_bpfel.go +++ b/tap/tlstapper/tlstapper_bpfel.go @@ -13,6 +13,29 @@ import ( "github.com/cilium/ebpf" ) +type tlsTapperGolangReadWrite struct { + Pid uint32 + Fd uint32 + ConnAddr uint32 + IsRequest bool + _ [3]byte + Len uint32 + Cap uint32 + Data [524288]uint8 +} + +type tlsTapperTlsChunk struct { + Pid uint32 + Tgid uint32 + Len uint32 + Start uint32 + Recorded uint32 + Fd uint32 + Flags uint32 + Address [16]uint8 + Data [4096]uint8 +} + // loadTlsTapper returns the embedded CollectionSpec for tlsTapper. func loadTlsTapper() (*ebpf.CollectionSpec, error) { reader := bytes.NewReader(_TlsTapperBytes) @@ -54,20 +77,24 @@ type tlsTapperSpecs struct { // // It can be passed ebpf.CollectionSpec.Assign. type tlsTapperProgramSpecs struct { - 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"` - 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"` + GolangCryptoTlsWriteUprobe *ebpf.ProgramSpec `ebpf:"golang_crypto_tls_write_uprobe"` + GolangNetHttpDialconnUprobe *ebpf.ProgramSpec `ebpf:"golang_net_http_dialconn_uprobe"` + GolangNetHttpReadUprobe *ebpf.ProgramSpec `ebpf:"golang_net_http_read_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"` + 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. @@ -78,6 +105,9 @@ type tlsTapperMapSpecs struct { ChunksBuffer *ebpf.MapSpec `ebpf:"chunks_buffer"` ConnectSyscallInfo *ebpf.MapSpec `ebpf:"connect_syscall_info"` FileDescriptorToIpv4 *ebpf.MapSpec `ebpf:"file_descriptor_to_ipv4"` + GolangDialWrites *ebpf.MapSpec `ebpf:"golang_dial_writes"` + GolangReadWrites *ebpf.MapSpec `ebpf:"golang_read_writes"` + GolangSocketDials *ebpf.MapSpec `ebpf:"golang_socket_dials"` Heap *ebpf.MapSpec `ebpf:"heap"` LogBuffer *ebpf.MapSpec `ebpf:"log_buffer"` PidsMap *ebpf.MapSpec `ebpf:"pids_map"` @@ -108,6 +138,9 @@ type tlsTapperMaps struct { ChunksBuffer *ebpf.Map `ebpf:"chunks_buffer"` ConnectSyscallInfo *ebpf.Map `ebpf:"connect_syscall_info"` FileDescriptorToIpv4 *ebpf.Map `ebpf:"file_descriptor_to_ipv4"` + GolangDialWrites *ebpf.Map `ebpf:"golang_dial_writes"` + GolangReadWrites *ebpf.Map `ebpf:"golang_read_writes"` + GolangSocketDials *ebpf.Map `ebpf:"golang_socket_dials"` Heap *ebpf.Map `ebpf:"heap"` LogBuffer *ebpf.Map `ebpf:"log_buffer"` PidsMap *ebpf.Map `ebpf:"pids_map"` @@ -121,6 +154,9 @@ func (m *tlsTapperMaps) Close() error { m.ChunksBuffer, m.ConnectSyscallInfo, m.FileDescriptorToIpv4, + m.GolangDialWrites, + m.GolangReadWrites, + m.GolangSocketDials, m.Heap, m.LogBuffer, m.PidsMap, @@ -133,24 +169,32 @@ func (m *tlsTapperMaps) Close() error { // // It can be passed to loadTlsTapperObjects or ebpf.CollectionSpec.LoadAndAssign. type tlsTapperPrograms struct { - 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"` - 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"` + GolangCryptoTlsWriteUprobe *ebpf.Program `ebpf:"golang_crypto_tls_write_uprobe"` + GolangNetHttpDialconnUprobe *ebpf.Program `ebpf:"golang_net_http_dialconn_uprobe"` + GolangNetHttpReadUprobe *ebpf.Program `ebpf:"golang_net_http_read_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"` + 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.GolangCryptoTlsWriteUprobe, + p.GolangNetHttpDialconnUprobe, + p.GolangNetHttpReadUprobe, + p.GolangNetSocketUprobe, p.SslRead, p.SslReadEx, p.SslRetRead, diff --git a/tap/tlstapper/tlstapper_bpfel.o b/tap/tlstapper/tlstapper_bpfel.o index 459124a1a02b46257779ddf5cf7247a26c9f0956..c73d78472a4c660dfcf69d8ada87e2bf64f88717 100644 GIT binary patch literal 125296 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