1+ package main
2+
3+ import (
4+ "bytes"
5+ _ "embed"
6+ "encoding/binary"
7+ "fmt"
8+ "log"
9+ "os"
10+
11+ "github.com/cilium/ebpf"
12+ "github.com/cilium/ebpf/link"
13+ "github.com/cilium/ebpf/ringbuf"
14+ "golang.org/x/sys/unix"
15+ )
16+
17+ //go:embed ssl_read.o
18+ var bpfBytecode []byte
19+
20+ type sslEvent struct {
21+ PidTgid uint64
22+ SslPtr uint64
23+ Buffer uint64
24+ Num int32
25+ _ [4 ]byte // padding
26+ }
27+
28+ func main () {
29+ spec , err := ebpf .LoadCollectionSpecFromReader (bytes .NewReader (bpfBytecode ))
30+ if err != nil {
31+ log .Fatalf ("loading spec: %v" , err )
32+ }
33+
34+ objs := struct {
35+ SslReadEnterV3 * ebpf.Program `ebpf:"ssl_read_enter_v3"`
36+ Events * ebpf.Map `ebpf:"events"`
37+ }{}
38+
39+ if err := spec .LoadAndAssign (& objs , nil ); err != nil {
40+ log .Fatalf ("loading objects: %v" , err )
41+ }
42+ defer objs .SslReadEnterV3 .Close ()
43+ defer objs .Events .Close ()
44+
45+ // Change this path based on your system's OpenSSL path
46+ libssl := "/usr/lib/x86_64-linux-gnu/libssl.so.1.1"
47+
48+ up , err := link .OpenExecutable (libssl )
49+ if err != nil {
50+ log .Fatalf ("open executable: %v" , err )
51+ }
52+
53+ // Attach uprobe to SSL_read
54+ uprober , err := up .Uprobe ("SSL_read" , objs .SslReadEnterV3 , nil )
55+ if err != nil {
56+ log .Fatalf ("attach uprobe: %v" , err )
57+ }
58+ defer uprober .Close ()
59+
60+ // Read events
61+ rd , err := ringbuf .NewReader (objs .Events )
62+ if err != nil {
63+ log .Fatalf ("create ringbuf reader: %v" , err )
64+ }
65+ defer rd .Close ()
66+
67+ log .Println ("Waiting for SSL_read calls..." )
68+
69+ for {
70+ record , err := rd .Read ()
71+ if err != nil {
72+ log .Fatalf ("read ringbuf: %v" , err )
73+ }
74+
75+ var evt sslEvent
76+ if err := binary .Read (bytes .NewBuffer (record .RawSample ), binary .LittleEndian , & evt ); err != nil {
77+ log .Printf ("decode event: %v" , err )
78+ continue
79+ }
80+
81+ pid := evt .PidTgid >> 32
82+ fmt .Printf ("SSL_read: pid=%d ssl=0x%x buf=0x%x num=%d\n " , pid , evt .SslPtr , evt .Buffer , evt .Num )
83+ }
84+ }
0 commit comments