From 71c4b592e82392c6d96ba722b534d88b2d95d9b8 Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Tue, 7 Jun 2022 16:35:16 +0300 Subject: [PATCH] Unify Golang and OpenSSL under a single perf event buffer and `tls_chunk` struct --- tap/tlstapper/bpf/golang_uprobes.c | 49 ++++---- tap/tlstapper/bpf/include/maps.h | 32 +++-- tap/tlstapper/bpf/openssl_uprobes.c | 19 +-- tap/tlstapper/chunk.go | 32 ++--- tap/tlstapper/tls_poller.go | 176 ++++++++++++---------------- tap/tlstapper/tls_reader.go | 6 +- tap/tlstapper/tls_tapper.go | 3 +- tap/tlstapper/tlstapper_bpfeb.go | 38 ++---- tap/tlstapper/tlstapper_bpfeb.o | Bin 132168 -> 131640 bytes tap/tlstapper/tlstapper_bpfel.go | 38 ++---- tap/tlstapper/tlstapper_bpfel.o | Bin 132824 -> 132296 bytes 11 files changed, 157 insertions(+), 236 deletions(-) diff --git a/tap/tlstapper/bpf/golang_uprobes.c b/tap/tlstapper/bpf/golang_uprobes.c index eeb618f31..8f784ec61 100644 --- a/tap/tlstapper/bpf/golang_uprobes.c +++ b/tap/tlstapper/bpf/golang_uprobes.c @@ -11,13 +11,6 @@ Copyright (C) UP9 Inc. #include "include/logger_messages.h" -struct { - __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); - __uint(max_entries, 1); - __type(key, int); - __type(value, struct golang_event); -} golang_heap SEC(".maps"); - SEC("uprobe/golang_crypto_tls_write") static __always_inline int golang_crypto_tls_write_uprobe(struct pt_regs *ctx) { __u64 pid_tgid = bpf_get_current_pid_tgid(); @@ -42,31 +35,31 @@ static __always_inline int golang_crypto_tls_write_uprobe(struct pt_regs *ctx) { return 0; } - struct golang_event *event = NULL; + struct tls_chunk *chunk = NULL; int zero = 0; - event = bpf_map_lookup_elem(&golang_heap, &zero); + chunk = bpf_map_lookup_elem(&heap, &zero); - if (!event) { + if (!chunk) { log_error(ctx, LOG_ERROR_GOLANG_ALLOCATING_EVENT, pid, 0l, 0l); return 0; } - event->pid = pid; - event->fd = s->fd; + 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 - event->conn_addr = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address - event->is_request = true; - event->len = ctx->rcx; - event->cap = ctx->rdi; + chunk->flags = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address + chunk->is_request = true; + chunk->len = ctx->rcx; - status = bpf_probe_read(&event->data, CHUNK_SIZE, (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; } - bpf_perf_event_output(ctx, &golang_events, BPF_F_CURRENT_CPU, event, sizeof(struct golang_event)); + bpf_perf_event_output(ctx, &chunks_buffer, BPF_F_CURRENT_CPU, chunk, sizeof(struct tls_chunk)); return 0; } @@ -88,30 +81,30 @@ static __always_inline int golang_crypto_tls_read_uprobe(struct pt_regs *ctx) { return 0; } - struct golang_event *event = NULL; + struct tls_chunk *chunk = NULL; int zero = 0; - event = bpf_map_lookup_elem(&golang_heap, &zero); + chunk = bpf_map_lookup_elem(&heap, &zero); - if (!event) { + if (!chunk) { log_error(ctx, LOG_ERROR_GOLANG_ALLOCATING_EVENT, pid, 0l, 0l); return 0; } - event->pid = pid; + chunk->type = Golang_type; + chunk->pid = pid; // ctx->rsi is common between golang_crypto_tls_write_uprobe and golang_crypto_tls_read_uprobe - event->conn_addr = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address - event->is_request = false; - event->len = ctx->rcx; - event->cap = ctx->rcx; // no cap info + chunk->flags = ctx->rsi; // go.itab.*net.TCPConn,net.Conn address + chunk->is_request = false; + chunk->len = ctx->rcx; - status = bpf_probe_read(&event->data, CHUNK_SIZE, (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; } - bpf_perf_event_output(ctx, &golang_events, BPF_F_CURRENT_CPU, event, sizeof(struct golang_event)); + bpf_perf_event_output(ctx, &chunks_buffer, BPF_F_CURRENT_CPU, chunk, sizeof(struct tls_chunk)); return 0; } diff --git a/tap/tlstapper/bpf/include/maps.h b/tap/tlstapper/bpf/include/maps.h index c645ad7b4..a04e9d922 100644 --- a/tap/tlstapper/bpf/include/maps.h +++ b/tap/tlstapper/bpf/include/maps.h @@ -21,11 +21,16 @@ Copyright (C) UP9 Inc. #define MAX_ENTRIES_LRU_HASH (1 << 14) // 16384 #define MAX_ENTRIES_RINGBUFF (1 << 24) // 16777216 +enum ChunkType { + OpenSSL_type=1, + Golang_type=2, +}; + // The same struct can be found in chunk.go // // Be careful when editing, alignment and padding should be exactly the same in go/c. // -struct tlsChunk { +struct tls_chunk { __u32 pid; __u32 tgid; __u32 len; @@ -33,6 +38,8 @@ struct tlsChunk { __u32 recorded; __u32 fd; __u32 flags; + enum ChunkType type; + bool is_request; __u8 address[16]; __u8 data[CHUNK_SIZE]; // Must be N^2 }; @@ -64,20 +71,20 @@ struct golang_socket { __u64 conn_addr; }; -struct golang_event { - __u32 pid; - __u32 fd; - __u32 conn_addr; - bool is_request; - __u32 len; - __u32 cap; - __u8 data[CHUNK_SIZE]; -}; - const struct golang_event *unused1 __attribute__((unused)); const struct sys_close *unused2 __attribute__((unused)); +// Heap-like area for eBPF programs - stack size limited to 512 bytes, we must use maps for bigger (chunk) objects. +// +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(max_entries, 1); + __type(key, int); + __type(value, struct tls_chunk); +} heap SEC(".maps"); + + #define BPF_MAP(_name, _type, _key_type, _value_type, _max_entries) \ struct bpf_map_def SEC("maps") _name = { \ .type = _type, \ @@ -99,16 +106,15 @@ const struct sys_close *unused2 __attribute__((unused)); BPF_HASH(pids_map, __u32, __u32); BPF_PERF_OUTPUT(log_buffer); BPF_PERF_OUTPUT(sys_closes); +BPF_PERF_OUTPUT(chunks_buffer); // OpenSSL specific BPF_LRU_HASH(ssl_write_context, __u64, struct ssl_info); BPF_LRU_HASH(ssl_read_context, __u64, struct ssl_info); BPF_LRU_HASH(file_descriptor_to_ipv4, __u64, struct fd_info); -BPF_PERF_OUTPUT(chunks_buffer); // Golang specific BPF_LRU_HASH(golang_dial_to_socket, __u64, struct golang_socket); BPF_LRU_HASH(golang_socket_to_write, __u64, struct golang_socket); -BPF_PERF_OUTPUT(golang_events); #endif /* __MAPS__ */ diff --git a/tap/tlstapper/bpf/openssl_uprobes.c b/tap/tlstapper/bpf/openssl_uprobes.c index d4efa3392..2604ccc14 100644 --- a/tap/tlstapper/bpf/openssl_uprobes.c +++ b/tap/tlstapper/bpf/openssl_uprobes.c @@ -11,14 +11,6 @@ Copyright (C) UP9 Inc. #include "include/logger_messages.h" #include "include/pids.h" -// Heap-like area for eBPF programs - stack size limited to 512 bytes, we must use maps for bigger (chunk) objects. -// -struct { - __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); - __uint(max_entries, 1); - __type(key, int); - __type(value, struct tlsChunk); -} heap SEC(".maps"); static __always_inline int get_count_bytes(struct pt_regs *ctx, struct ssl_info* info, __u64 id) { int returnValue = PT_REGS_RC(ctx); @@ -48,7 +40,7 @@ static __always_inline int get_count_bytes(struct pt_regs *ctx, struct ssl_info* return countBytes; } -static __always_inline int add_address_to_chunk(struct pt_regs *ctx, struct tlsChunk* chunk, __u64 id, __u32 fd) { +static __always_inline int 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; @@ -70,7 +62,7 @@ static __always_inline int add_address_to_chunk(struct pt_regs *ctx, struct tlsC } static __always_inline void send_chunk_part(struct pt_regs *ctx, __u8* buffer, __u64 id, - struct tlsChunk* chunk, int start, int end) { + struct tls_chunk* chunk, int start, int end) { size_t recorded = MIN(end - start, sizeof(chunk->data)); if (recorded <= 0) { @@ -95,10 +87,10 @@ static __always_inline void send_chunk_part(struct pt_regs *ctx, __u8* buffer, _ return; } - bpf_perf_event_output(ctx, &chunks_buffer, BPF_F_CURRENT_CPU, chunk, sizeof(struct tlsChunk)); + bpf_perf_event_output(ctx, &chunks_buffer, BPF_F_CURRENT_CPU, chunk, sizeof(struct tls_chunk)); } -static __always_inline void send_chunk(struct pt_regs *ctx, __u8* buffer, __u64 id, struct tlsChunk* chunk) { +static __always_inline void 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/ @@ -127,7 +119,7 @@ static __always_inline void output_ssl_chunk(struct pt_regs *ctx, struct ssl_inf return; } - struct tlsChunk* chunk; + 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) @@ -140,6 +132,7 @@ static __always_inline void output_ssl_chunk(struct pt_regs *ctx, struct ssl_inf return; } + chunk->type = OpenSSL_type; chunk->flags = flags; chunk->pid = id >> 32; chunk->tgid = id; diff --git a/tap/tlstapper/chunk.go b/tap/tlstapper/chunk.go index 2ffc153aa..006585ec1 100644 --- a/tap/tlstapper/chunk.go +++ b/tap/tlstapper/chunk.go @@ -12,23 +12,7 @@ import ( const FLAGS_IS_CLIENT_BIT uint32 = (1 << 0) const FLAGS_IS_READ_BIT uint32 = (1 << 1) -// The same struct can be found in maps.h -// -// Be careful when editing, alignment and padding should be exactly the same in go/c. -// -type tlsChunk struct { - Pid uint32 // process id - Tgid uint32 // thread id inside the process - Len uint32 // the size of the native buffer used to read/write the tls data (may be bigger than tlsChunk.Data[]) - Start uint32 // the start offset withing the native buffer - Recorded uint32 // number of bytes copied from the native buffer to tlsChunk.Data[] - Fd uint32 // the file descriptor used to read/write the tls data (probably socket file descriptor) - Flags uint32 // bitwise flags - Address [16]byte // ipv4 address and port - Data [4096]byte // actual tls data -} - -func (c *tlsChunk) getAddress() (net.IP, uint16, error) { +func (c *tlsTapperTlsChunk) getAddress() (net.IP, uint16, error) { address := bytes.NewReader(c.Address[:]) var family uint16 var port uint16 @@ -51,31 +35,31 @@ func (c *tlsChunk) getAddress() (net.IP, uint16, error) { return ip, port, nil } -func (c *tlsChunk) isClient() bool { +func (c *tlsTapperTlsChunk) isClient() bool { return c.Flags&FLAGS_IS_CLIENT_BIT != 0 } -func (c *tlsChunk) isServer() bool { +func (c *tlsTapperTlsChunk) isServer() bool { return !c.isClient() } -func (c *tlsChunk) isRead() bool { +func (c *tlsTapperTlsChunk) isRead() bool { return c.Flags&FLAGS_IS_READ_BIT != 0 } -func (c *tlsChunk) isWrite() bool { +func (c *tlsTapperTlsChunk) isWrite() bool { return !c.isRead() } -func (c *tlsChunk) getRecordedData() []byte { +func (c *tlsTapperTlsChunk) getRecordedData() []byte { return c.Data[:c.Recorded] } -func (c *tlsChunk) isRequest() bool { +func (c *tlsTapperTlsChunk) isRequest() bool { return (c.isClient() && c.isWrite()) || (c.isServer() && c.isRead()) } -func (c *tlsChunk) getAddressPair() (addressPair, error) { +func (c *tlsTapperTlsChunk) getAddressPair() (addressPair, error) { ip, port, err := c.getAddress() if err != nil { diff --git a/tap/tlstapper/tls_poller.go b/tap/tlstapper/tls_poller.go index d435445de..f3cd75504 100644 --- a/tap/tlstapper/tls_poller.go +++ b/tap/tlstapper/tls_poller.go @@ -4,7 +4,6 @@ import ( "bufio" "bytes" "fmt" - "log" "sync" "time" "unsafe" @@ -75,12 +74,6 @@ func (p *tlsPoller) init(bpfObjects *tlsTapperObjects, bufferSize int) error { return errors.Wrap(err, 0) } - p.golangReader, err = perf.NewReader(bpfObjects.GolangEvents, bufferSize) - - if err != nil { - return errors.Wrap(err, 0) - } - p.sysCloses, err = perf.NewReader(bpfObjects.SysCloses, bufferSize) if err != nil { @@ -97,9 +90,11 @@ func (p *tlsPoller) close() error { } func (p *tlsPoller) pollSsllib(emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) { - chunks := make(chan *tlsChunk) + // tlsTapperTlsChunk is generated by bpf2go. + chunks := make(chan *tlsTapperTlsChunk) go p.pollChunksPerfBuffer(chunks) + go p.pollSysClose(p.sysCloses) for { select { @@ -108,8 +103,15 @@ func (p *tlsPoller) pollSsllib(emitter api.Emitter, options *api.TrafficFilterin return } - if err := p.handleTlsChunk(chunk, p.extension, emitter, options, streamsMap); err != nil { - LogError(err) + switch chunk.Type { + case 1: + if err := p.handleOpenSslTlsChunk(chunk, p.extension, emitter, options, streamsMap); err != nil { + LogError(err) + } + case 2: + if err := p.handleGolangTlsChunk(chunk, emitter, options, streamsMap); err != nil { + LogError(err) + } } case key := <-p.closedReaders: delete(p.readers, key) @@ -117,91 +119,63 @@ func (p *tlsPoller) pollSsllib(emitter api.Emitter, options *api.TrafficFilterin } } -func (p *tlsPoller) pollGolang(emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) { - go p.pollGolangReadWrite(p.golangReader, emitter, options, streamsMap) - go p.pollSysClose(p.sysCloses) -} - -func (p *tlsPoller) pollGolangReadWrite(rd *perf.Reader, emitter api.Emitter, options *api.TrafficFilteringOptions, - streamsMap api.TcpStreamMap) { - nativeEndian := p.getByteOrder() - // tlsTapperGolangEvent is generated by bpf2go. - var b tlsTapperGolangEvent - for { - record, err := rd.Read() - if err != nil { - if errors.Is(err, perf.ErrClosed) { - return - } - logger.Log.Errorf("reading from Golang tls reader: %s", err) - continue - } - - if record.LostSamples != 0 { - logger.Log.Infof("Golang perf event ring buffer full, dropped %d samples", record.LostSamples) - continue - } - - if err := binary.Read(bytes.NewBuffer(record.RawSample), nativeEndian, &b); err != nil { - logger.Log.Errorf("parsing Golang perf event: %s", err) - continue - } - - if p.golangConnectionMap.Len()+1 > golangMapLimit { - pair := p.golangConnectionMap.Oldest() - pair.Value.(*golangConnection).close() - p.golangConnectionMap.Delete(pair.Key) - } - - pid := uint64(b.Pid) - identifier := pid<<32 + uint64(b.ConnAddr) - - var connection *golangConnection - var _connection interface{} - var ok bool - if _connection, ok = p.golangConnectionMap.Get(identifier); !ok { - tlsEmitter := &tlsEmitter{ - delegate: emitter, - namespace: p.getNamespace(b.Pid), - } - - connection = NewGolangConnection(b.Pid, b.ConnAddr, p.extension, tlsEmitter) - p.golangConnectionMap.Set(identifier, connection) - streamsMap.Store(streamsMap.NextId(), connection.stream) - } else { - connection = _connection.(*golangConnection) - } - - if b.IsRequest { - connection.fd = b.Fd - - err := connection.setAddressBySockfd(p.procfs, b.Pid, b.Fd) - if err != nil { - log.Printf("Error resolving address pair from fd: %s", err) - continue - } - - tcpid := p.buildTcpId(&connection.addressPair) - connection.clientReader.tcpID = &tcpid - connection.serverReader.tcpID = &api.TcpID{ - SrcIP: tcpid.DstIP, - DstIP: tcpid.SrcIP, - SrcPort: tcpid.DstPort, - DstPort: tcpid.SrcPort, - } - - go dissect(p.extension, connection.clientReader, options) - go dissect(p.extension, connection.serverReader, options) - - request := make([]byte, len(b.Data[:b.Len])) - copy(request, b.Data[:b.Len]) - connection.clientReader.send(request) - } else { - response := make([]byte, len(b.Data[:b.Len])) - copy(response, b.Data[:b.Len]) - connection.serverReader.send(response) - } +func (p *tlsPoller) handleGolangTlsChunk(chunk *tlsTapperTlsChunk, emitter api.Emitter, options *api.TrafficFilteringOptions, + streamsMap api.TcpStreamMap) error { + if p.golangConnectionMap.Len()+1 > golangMapLimit { + pair := p.golangConnectionMap.Oldest() + pair.Value.(*golangConnection).close() + p.golangConnectionMap.Delete(pair.Key) } + + pid := uint64(chunk.Pid) + identifier := pid<<32 + uint64(chunk.Flags) + + var connection *golangConnection + var _connection interface{} + var ok bool + if _connection, ok = p.golangConnectionMap.Get(identifier); !ok { + tlsEmitter := &tlsEmitter{ + delegate: emitter, + namespace: p.getNamespace(chunk.Pid), + } + + connection = NewGolangConnection(chunk.Pid, chunk.Flags, p.extension, tlsEmitter) + p.golangConnectionMap.Set(identifier, connection) + streamsMap.Store(streamsMap.NextId(), connection.stream) + } else { + connection = _connection.(*golangConnection) + } + + if chunk.IsRequest { + connection.fd = chunk.Fd + + err := connection.setAddressBySockfd(p.procfs, chunk.Pid, chunk.Fd) + if err != nil { + return fmt.Errorf("Error resolving address pair from fd: %s", err) + } + + tcpid := p.buildTcpId(&connection.addressPair) + connection.clientReader.tcpID = &tcpid + connection.serverReader.tcpID = &api.TcpID{ + SrcIP: tcpid.DstIP, + DstIP: tcpid.SrcIP, + SrcPort: tcpid.DstPort, + DstPort: tcpid.SrcPort, + } + + go dissect(p.extension, connection.clientReader, options) + go dissect(p.extension, connection.serverReader, options) + + request := make([]byte, len(chunk.Data[:chunk.Len])) + copy(request, chunk.Data[:chunk.Len]) + connection.clientReader.send(request) + } else { + response := make([]byte, len(chunk.Data[:chunk.Len])) + copy(response, chunk.Data[:chunk.Len]) + connection.serverReader.send(response) + } + + return nil } func (p *tlsPoller) pollSysClose(rd *perf.Reader) { @@ -239,7 +213,7 @@ func (p *tlsPoller) pollSysClose(rd *perf.Reader) { } } -func (p *tlsPoller) pollChunksPerfBuffer(chunks chan<- *tlsChunk) { +func (p *tlsPoller) pollChunksPerfBuffer(chunks chan<- *tlsTapperTlsChunk) { logger.Log.Infof("Start polling for tls events") for { @@ -263,7 +237,7 @@ func (p *tlsPoller) pollChunksPerfBuffer(chunks chan<- *tlsChunk) { buffer := bytes.NewReader(record.RawSample) - var chunk tlsChunk + var chunk tlsTapperTlsChunk if err := binary.Read(buffer, binary.LittleEndian, &chunk); err != nil { LogError(errors.Errorf("Error parsing chunk %v", err)) @@ -274,7 +248,7 @@ func (p *tlsPoller) pollChunksPerfBuffer(chunks chan<- *tlsChunk) { } } -func (p *tlsPoller) handleTlsChunk(chunk *tlsChunk, extension *api.Extension, emitter api.Emitter, +func (p *tlsPoller) handleOpenSslTlsChunk(chunk *tlsTapperTlsChunk, extension *api.Extension, emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) error { address, err := p.getSockfdAddressPair(chunk) @@ -303,7 +277,7 @@ func (p *tlsPoller) handleTlsChunk(chunk *tlsChunk, extension *api.Extension, em return nil } -func (p *tlsPoller) startNewTlsReader(chunk *tlsChunk, address *addressPair, key string, +func (p *tlsPoller) startNewTlsReader(chunk *tlsTapperTlsChunk, address *addressPair, key string, emitter api.Emitter, extension *api.Extension, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) *tlsReader { @@ -320,7 +294,7 @@ func (p *tlsPoller) startNewTlsReader(chunk *tlsChunk, address *addressPair, key reader := &tlsReader{ key: key, - chunks: make(chan *tlsChunk, 1), + chunks: make(chan *tlsTapperTlsChunk, 1), doneHandler: doneHandler, progress: &api.ReadProgress{}, tcpID: &tcpid, @@ -358,7 +332,7 @@ func (p *tlsPoller) closeReader(key string, r *tlsReader) { p.closedReaders <- key } -func (p *tlsPoller) getSockfdAddressPair(chunk *tlsChunk) (addressPair, error) { +func (p *tlsPoller) getSockfdAddressPair(chunk *tlsTapperTlsChunk) (addressPair, error) { address, err := getAddressBySockfd(p.procfs, chunk.Pid, chunk.Fd) fdCacheKey := fmt.Sprintf("%d:%d", chunk.Pid, chunk.Fd) @@ -434,7 +408,7 @@ func (p *tlsPoller) clearPids() { }) } -func (p *tlsPoller) logTls(chunk *tlsChunk, key string, reader *tlsReader) { +func (p *tlsPoller) logTls(chunk *tlsTapperTlsChunk, key string, reader *tlsReader) { var flagsStr string if chunk.isClient() { diff --git a/tap/tlstapper/tls_reader.go b/tap/tlstapper/tls_reader.go index b76a0008d..b4b8ba5c2 100644 --- a/tap/tlstapper/tls_reader.go +++ b/tap/tlstapper/tls_reader.go @@ -9,7 +9,7 @@ import ( type tlsReader struct { key string - chunks chan *tlsChunk + chunks chan *tlsTapperTlsChunk seenChunks int data []byte doneHandler func(r *tlsReader) @@ -24,14 +24,14 @@ type tlsReader struct { reqResMatcher api.RequestResponseMatcher } -func (r *tlsReader) newChunk(chunk *tlsChunk) { +func (r *tlsReader) newChunk(chunk *tlsTapperTlsChunk) { r.captureTime = time.Now() r.seenChunks = r.seenChunks + 1 r.chunks <- chunk } func (r *tlsReader) Read(p []byte) (int, error) { - var chunk *tlsChunk + var chunk *tlsTapperTlsChunk for len(r.data) == 0 { var ok bool diff --git a/tap/tlstapper/tls_tapper.go b/tap/tlstapper/tls_tapper.go index 534922923..405b63b6d 100644 --- a/tap/tlstapper/tls_tapper.go +++ b/tap/tlstapper/tls_tapper.go @@ -12,7 +12,7 @@ import ( const GLOABL_TAP_PID = 0 -//go:generate go run github.com/cilium/ebpf/cmd/bpf2go@0d0727ef53e2f53b1731c73f4c61e0f58693083a -type golang_event -type sys_close tlsTapper bpf/tls_tapper.c -- -O2 -g -D__TARGET_ARCH_x86 +//go:generate go run github.com/cilium/ebpf/cmd/bpf2go@0d0727ef53e2f53b1731c73f4c61e0f58693083a -type tls_chunk -type sys_close tlsTapper bpf/tls_tapper.c -- -O2 -g -D__TARGET_ARCH_x86 type TlsTapper struct { bpfObjects tlsTapperObjects @@ -59,7 +59,6 @@ func (t *TlsTapper) Init(chunksBufferSize int, logBufferSize int, procfs string, } func (t *TlsTapper) Poll(emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) { - t.poller.pollGolang(emitter, options, streamsMap) t.poller.pollSsllib(emitter, options, streamsMap) } diff --git a/tap/tlstapper/tlstapper_bpfeb.go b/tap/tlstapper/tlstapper_bpfeb.go index 285bb5558..4d85757df 100644 --- a/tap/tlstapper/tlstapper_bpfeb.go +++ b/tap/tlstapper/tlstapper_bpfeb.go @@ -13,29 +13,21 @@ import ( "github.com/cilium/ebpf" ) -type tlsTapperGolangEvent struct { - Pid uint32 - Fd uint32 - ConnAddr uint32 - IsRequest bool - _ [3]byte - Len uint32 - Cap uint32 - Data [4096]uint8 -} - type tlsTapperSysClose struct{ Fd uint32 } type tlsTapperTlsChunk struct { - Pid uint32 - Tgid uint32 - Len uint32 - Start uint32 - Recorded uint32 - Fd uint32 - Flags uint32 - Address [16]uint8 - Data [4096]uint8 + Pid uint32 + Tgid uint32 + Len uint32 + Start uint32 + Recorded uint32 + Fd uint32 + Flags uint32 + Type int32 + IsRequest bool + Address [16]uint8 + Data [4096]uint8 + _ [3]byte } // loadTlsTapper returns the embedded CollectionSpec for tlsTapper. @@ -109,8 +101,6 @@ type tlsTapperMapSpecs struct { ConnectSyscallInfo *ebpf.MapSpec `ebpf:"connect_syscall_info"` FileDescriptorToIpv4 *ebpf.MapSpec `ebpf:"file_descriptor_to_ipv4"` GolangDialToSocket *ebpf.MapSpec `ebpf:"golang_dial_to_socket"` - GolangEvents *ebpf.MapSpec `ebpf:"golang_events"` - GolangHeap *ebpf.MapSpec `ebpf:"golang_heap"` GolangSocketToWrite *ebpf.MapSpec `ebpf:"golang_socket_to_write"` Heap *ebpf.MapSpec `ebpf:"heap"` LogBuffer *ebpf.MapSpec `ebpf:"log_buffer"` @@ -144,8 +134,6 @@ type tlsTapperMaps struct { ConnectSyscallInfo *ebpf.Map `ebpf:"connect_syscall_info"` FileDescriptorToIpv4 *ebpf.Map `ebpf:"file_descriptor_to_ipv4"` GolangDialToSocket *ebpf.Map `ebpf:"golang_dial_to_socket"` - GolangEvents *ebpf.Map `ebpf:"golang_events"` - GolangHeap *ebpf.Map `ebpf:"golang_heap"` GolangSocketToWrite *ebpf.Map `ebpf:"golang_socket_to_write"` Heap *ebpf.Map `ebpf:"heap"` LogBuffer *ebpf.Map `ebpf:"log_buffer"` @@ -162,8 +150,6 @@ func (m *tlsTapperMaps) Close() error { m.ConnectSyscallInfo, m.FileDescriptorToIpv4, m.GolangDialToSocket, - m.GolangEvents, - m.GolangHeap, m.GolangSocketToWrite, m.Heap, m.LogBuffer, diff --git a/tap/tlstapper/tlstapper_bpfeb.o b/tap/tlstapper/tlstapper_bpfeb.o index 0dafbc6b5490f9bd90750627c3d81b5714cc5fe9..059d79f15fc8b0f5043856d8bbcbf257b7b30172 100644 GIT binary patch literal 131640 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 z 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 literal 132824 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