Skip to content

Commit 1e951d5

Browse files
committed
fix(filter): Interpolation for arg-based fields
Make it possible to use argument-based filter fields in the rule output.
1 parent dac9381 commit 1e951d5

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

pkg/filter/filter.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,18 @@ func InterpolateFields(s string, evts []*kevent.Kevent) string {
356356
if len(matches) == 0 {
357357
return s
358358
}
359+
360+
split := func(s string) (string, string) {
361+
n, m := strings.Index(s, "["), strings.Index(s, "]")
362+
if n < 0 || m < 0 {
363+
return s, ""
364+
}
365+
if n > m {
366+
return s, ""
367+
}
368+
return s[0:n], s[n+1 : m]
369+
}
370+
359371
for _, m := range matches {
360372
switch {
361373
case len(m) == 3:
@@ -376,8 +388,9 @@ func InterpolateFields(s string, evts []*kevent.Kevent) string {
376388
// extract field value from the event and replace in string
377389
var val any
378390
for _, accessor := range GetAccessors() {
391+
name, arg := split(m[2])
392+
f := Field{Value: m[2], Name: fields.Field(name), Arg: arg}
379393
var err error
380-
f := Field{Value: m[2], Name: fields.Field(m[2])}
381394
val, err = accessor.Get(f, kevt)
382395
if err != nil {
383396
continue

pkg/filter/filter_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,8 +1228,8 @@ func TestInterpolateFields(t *testing.T) {
12281228
evts []*kevent.Kevent
12291229
}{
12301230
{
1231-
original: "Credential discovery via %ps.name and user %ps.sid",
1232-
interpolated: "Credential discovery via VaultCmd.exe and user LOCAL\\tor",
1231+
original: "Credential discovery via %ps.name (%kevt.arg[cmdline]) and user %ps.sid",
1232+
interpolated: "Credential discovery via VaultCmd.exe (VaultCmd.exe /listcreds:Windows Credentials /all) and user LOCAL\\tor",
12331233
evts: []*kevent.Kevent{
12341234
{
12351235
Type: ktypes.CreateProcess,
@@ -1241,6 +1241,9 @@ func TestInterpolateFields(t *testing.T) {
12411241
Ppid: 345,
12421242
SID: "LOCAL\\tor",
12431243
},
1244+
Kparams: kevent.Kparams{
1245+
kparams.Cmdline: {Name: kparams.Cmdline, Type: kparams.UnicodeString, Value: `VaultCmd.exe /listcreds:Windows Credentials /all`},
1246+
},
12441247
},
12451248
},
12461249
},

0 commit comments

Comments
 (0)