Skip to content

Commit cd26823

Browse files
roikolrafaeldtinoco
authored andcommitted
signature: add anti_debugging_ptraceme.go sig
1 parent 071bdfc commit cd26823

File tree

3 files changed

+178
-0
lines changed

3 files changed

+178
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/aquasecurity/tracee/signatures/helpers"
7+
"github.com/aquasecurity/tracee/types/detect"
8+
"github.com/aquasecurity/tracee/types/protocol"
9+
"github.com/aquasecurity/tracee/types/trace"
10+
)
11+
12+
type AntiDebuggingPtraceme struct {
13+
cb detect.SignatureHandler
14+
ptraceTraceMe string
15+
}
16+
17+
func (sig *AntiDebuggingPtraceme) Init(cb detect.SignatureHandler) error {
18+
sig.cb = cb
19+
sig.ptraceTraceMe = "PTRACE_TRACEME"
20+
return nil
21+
}
22+
23+
func (sig *AntiDebuggingPtraceme) GetMetadata() (detect.SignatureMetadata, error) {
24+
return detect.SignatureMetadata{
25+
ID: "TRC-2",
26+
Version: "1",
27+
Name: "Anti-Debugging detected",
28+
Description: "A process used anti-debugging techniques to block a debugger. Malware use anti-debugging to stay invisible and inhibit analysis of their behavior.",
29+
Properties: map[string]interface{}{
30+
"Severity": 1,
31+
"Category": "defense-evasion",
32+
"Technique": "Debugger Evasion",
33+
"Kubernetes_Technique": "",
34+
"id": "attack-pattern--e4dc8c01-417f-458d-9ee0-bb0617c1b391",
35+
"external_id": "T1622",
36+
},
37+
}, nil
38+
}
39+
40+
func (sig *AntiDebuggingPtraceme) GetSelectedEvents() ([]detect.SignatureEventSelector, error) {
41+
return []detect.SignatureEventSelector{
42+
{Source: "tracee", Name: "ptrace", Origin: "*"},
43+
}, nil
44+
}
45+
46+
func (sig *AntiDebuggingPtraceme) OnEvent(event protocol.Event) error {
47+
48+
eventObj, ok := event.Payload.(trace.Event)
49+
if !ok {
50+
return fmt.Errorf("invalid event")
51+
}
52+
53+
switch eventObj.EventName {
54+
55+
case "ptrace":
56+
requestArg, err := helpers.GetTraceeStringArgumentByName(eventObj, "request")
57+
if err != nil {
58+
return err
59+
}
60+
61+
if requestArg == sig.ptraceTraceMe {
62+
metadata, err := sig.GetMetadata()
63+
if err != nil {
64+
return err
65+
}
66+
sig.cb(detect.Finding{
67+
SigMetadata: metadata,
68+
Event: event,
69+
Data: nil,
70+
})
71+
}
72+
73+
}
74+
return nil
75+
}
76+
77+
func (sig *AntiDebuggingPtraceme) OnSignal(s detect.Signal) error {
78+
return nil
79+
}
80+
func (sig *AntiDebuggingPtraceme) Close() {}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package main
2+
3+
import (
4+
"testing"
5+
6+
"github.com/aquasecurity/tracee/signatures/signaturestest"
7+
"github.com/aquasecurity/tracee/types/detect"
8+
"github.com/aquasecurity/tracee/types/trace"
9+
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestAntiDebuggingPtraceme(t *testing.T) {
14+
testCases := []struct {
15+
Name string
16+
Events []trace.Event
17+
Findings map[string]detect.Finding
18+
}{
19+
{
20+
Name: "should trigger detection",
21+
Events: []trace.Event{
22+
{
23+
EventName: "ptrace",
24+
Args: []trace.Argument{
25+
{
26+
ArgMeta: trace.ArgMeta{
27+
Name: "request",
28+
},
29+
Value: interface{}("PTRACE_TRACEME"),
30+
},
31+
},
32+
},
33+
},
34+
Findings: map[string]detect.Finding{
35+
"TRC-2": {
36+
Data: nil,
37+
Event: trace.Event{
38+
EventName: "ptrace",
39+
Args: []trace.Argument{
40+
{
41+
ArgMeta: trace.ArgMeta{
42+
Name: "request",
43+
},
44+
Value: interface{}("PTRACE_TRACEME"),
45+
},
46+
},
47+
}.ToProtocol(),
48+
SigMetadata: detect.SignatureMetadata{
49+
ID: "TRC-2",
50+
Version: "1",
51+
Name: "Anti-Debugging detected",
52+
Description: "A process used anti-debugging techniques to block a debugger. Malware use anti-debugging to stay invisible and inhibit analysis of their behavior.",
53+
Properties: map[string]interface{}{
54+
"Severity": 1,
55+
"Category": "defense-evasion",
56+
"Technique": "Debugger Evasion",
57+
"Kubernetes_Technique": "",
58+
"id": "attack-pattern--e4dc8c01-417f-458d-9ee0-bb0617c1b391",
59+
"external_id": "T1622",
60+
},
61+
},
62+
},
63+
},
64+
},
65+
{
66+
Name: "should not trigger detection - wrong request",
67+
Events: []trace.Event{
68+
{
69+
EventName: "ptrace",
70+
Args: []trace.Argument{
71+
{
72+
ArgMeta: trace.ArgMeta{
73+
Name: "request",
74+
},
75+
Value: interface{}("PTRACE_PEEKTEXT"),
76+
},
77+
},
78+
},
79+
},
80+
Findings: map[string]detect.Finding{},
81+
},
82+
}
83+
84+
for _, tc := range testCases {
85+
t.Run(tc.Name, func(t *testing.T) {
86+
holder := signaturestest.FindingsHolder{}
87+
sig := AntiDebuggingPtraceme{}
88+
sig.Init(holder.OnFinding)
89+
90+
for _, e := range tc.Events {
91+
err := sig.OnEvent(e.ToProtocol())
92+
require.NoError(t, err)
93+
}
94+
assert.Equal(t, tc.Findings, holder.GroupBySigID())
95+
})
96+
}
97+
}

signatures/golang/export.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ var ExportedSignatures = []detect.Signature{
2424
&ProcKcoreRead{},
2525
&ProcMemAccess{},
2626
&HiddenFileCreated{},
27+
&AntiDebuggingPtraceme{},
2728
}

0 commit comments

Comments
 (0)