Skip to content

Commit 6a0f8a3

Browse files
roikolrafaeldtinoco
authored andcommitted
signatures: use helpers to get addr argument details
1 parent 2694bdf commit 6a0f8a3

File tree

3 files changed

+148
-26
lines changed

3 files changed

+148
-26
lines changed

signatures/golang/docker_abuse.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,17 @@ func (sig *DockerAbuse) OnEvent(event protocol.Event) error {
7979
return err
8080
}
8181

82-
family, familyExists := addr["sa_family"]
83-
if !familyExists {
84-
return nil
82+
supportedFamily, err := helpers.IsUnixFamily(addr)
83+
if err != nil {
84+
return err
8585
}
86-
if family != "AF_UNIX" {
86+
if !supportedFamily {
8787
return nil
8888
}
8989

90-
sunPath, sunPathExists := addr["sun_path"]
91-
if !sunPathExists {
92-
return nil
90+
sunPath, err := helpers.GetPathFromRawAddr(addr)
91+
if err != nil {
92+
return err
9393
}
9494

9595
path = sunPath

signatures/golang/kubernetes_api_connection.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,21 @@ func (sig *K8sApiConnection) OnEvent(event protocol.Event) error {
7676
return nil
7777
}
7878

79-
remoteAddrArg, err := helpers.GetTraceeArgumentByName(eventObj, "remote_addr")
79+
remoteAddr, err := helpers.GetRawAddrArgumentByName(eventObj, "remote_addr")
8080
if err != nil {
8181
return err
8282
}
83-
ip, err := getIPFromAddr(remoteAddrArg)
84-
if err != nil || ip == "" {
83+
84+
supportedFamily, err := helpers.IsInternetFamily(remoteAddr)
85+
if err != nil {
86+
return err
87+
}
88+
if !supportedFamily {
89+
return nil
90+
}
91+
92+
ip, err := helpers.GetIPFromRawAddr(remoteAddr)
93+
if err != nil {
8594
return err
8695
}
8796

@@ -114,19 +123,3 @@ func getApiAddressFromEnvs(envs []string) string {
114123
}
115124
return ""
116125
}
117-
118-
func getIPFromAddr(addrArg trace.Argument) (string, error) {
119-
120-
addr, isOk := addrArg.Value.(map[string]string)
121-
if !isOk {
122-
return "", fmt.Errorf("couldn't convert arg to addr")
123-
}
124-
125-
if addr["sa_family"] == "AF_INET" {
126-
return addr["sin_addr"], nil
127-
} else if addr["sa_family"] == "AF_INET6" {
128-
return addr["sin6_addr"], nil
129-
}
130-
131-
return "", nil
132-
}

signatures/helpers/helpers.go

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package helpers
22

33
import (
4+
"fmt"
45
"strings"
56
)
67

@@ -44,3 +45,131 @@ func IsElf(bytesArray []byte) bool {
4445

4546
return false
4647
}
48+
49+
func GetFamilyFromRawAddr(addr map[string]string) (string, error) {
50+
51+
family, exists := addr["sa_family"]
52+
if !exists {
53+
return "", fmt.Errorf("family not found in address")
54+
}
55+
56+
return family, nil
57+
}
58+
59+
func IsInternetFamily(addr map[string]string) (bool, error) {
60+
61+
family, err := GetFamilyFromRawAddr(addr)
62+
if err != nil {
63+
return false, err
64+
}
65+
66+
if family == "AF_INET" || family == "AF_INET6" {
67+
return true, nil
68+
}
69+
70+
return false, nil
71+
}
72+
73+
func IsUnixFamily(addr map[string]string) (bool, error) {
74+
75+
family, err := GetFamilyFromRawAddr(addr)
76+
if err != nil {
77+
return false, err
78+
}
79+
80+
if family == "AF_UNIX" {
81+
return true, nil
82+
}
83+
84+
return false, nil
85+
}
86+
87+
func GetIPFromRawAddr(addr map[string]string) (string, error) {
88+
89+
family, err := GetFamilyFromRawAddr(addr)
90+
if err != nil {
91+
return "", err
92+
}
93+
94+
ip := ""
95+
var exists bool
96+
97+
switch family {
98+
99+
case "AF_INET":
100+
ip, exists = addr["sin_addr"]
101+
if !exists {
102+
return "", fmt.Errorf("ip not found in address")
103+
}
104+
105+
case "AF_INET6":
106+
ip, exists = addr["sin6_addr"]
107+
if !exists {
108+
return "", fmt.Errorf("ip not found in address")
109+
}
110+
111+
default:
112+
return "", fmt.Errorf("address family not supported")
113+
114+
}
115+
116+
return ip, nil
117+
}
118+
119+
func GetPortFromRawAddr(addr map[string]string) (string, error) {
120+
121+
family, err := GetFamilyFromRawAddr(addr)
122+
if err != nil {
123+
return "", err
124+
}
125+
126+
port := ""
127+
var exists bool
128+
129+
switch family {
130+
131+
case "AF_INET":
132+
port, exists = addr["sin_port"]
133+
if !exists {
134+
return "", fmt.Errorf("port not found in address")
135+
}
136+
137+
case "AF_INET6":
138+
port, exists = addr["sin6_port"]
139+
if !exists {
140+
return "", fmt.Errorf("port not found in address")
141+
}
142+
143+
default:
144+
return "", fmt.Errorf("address family not supported")
145+
146+
}
147+
148+
return port, nil
149+
}
150+
151+
func GetPathFromRawAddr(addr map[string]string) (string, error) {
152+
153+
family, err := GetFamilyFromRawAddr(addr)
154+
if err != nil {
155+
return "", err
156+
}
157+
158+
path := ""
159+
var exists bool
160+
161+
switch family {
162+
163+
case "AF_UNIX":
164+
path, exists = addr["sun_path"]
165+
if !exists {
166+
return "", fmt.Errorf("path not found in address")
167+
}
168+
169+
default:
170+
return "", fmt.Errorf("address family not supported")
171+
172+
}
173+
174+
return path, nil
175+
}

0 commit comments

Comments
 (0)