Skip to content

Commit ac9cc7f

Browse files
authored
feat(kevent): VirtualAlloc and VirtualFree events (#171)
* Collecting telemetry for VirtualAlloc and VirtualFree events. VirtualAlloc events are additionally enriched with page protection and page type parameters. If the region type is mapped, then we also retrieve the name of the mapped image file. Filter fields and rule macros are provided as part of this PR. * Fix linter warning * Fix mem filter test after moving the flags declaration to kevent package
1 parent 8d31d81 commit ac9cc7f

38 files changed

+722
-10
lines changed

cmd/fibratus/app/capture/capture_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func capture(cmd *cobra.Command, args []string) error {
6262
app, err := bootstrap.NewApp(cfg, bootstrap.WithSignals(), bootstrap.WithDebugPrivilege(),
6363
bootstrap.WithHandleSnapshotFn(fn))
6464
if err != nil {
65-
return multierror.Wrap(err, app.Shutdown())
65+
return err
6666
}
6767
<-wait
6868
if err := app.WriteCapture(args); err != nil {

cmd/fibratus/app/replay/replay_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func init() {
4444
func replay(cmd *cobra.Command, args []string) error {
4545
app, err := bootstrap.NewApp(cfg, bootstrap.WithSignals(), bootstrap.WithCaptureReplay())
4646
if err != nil {
47-
return multierror.Wrap(err, app.Shutdown())
47+
return err
4848
}
4949
ctx, cancel := context.WithCancel(context.Background())
5050
defer cancel()

cmd/fibratus/app/run_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func run(cmd *cobra.Command, args []string) error {
6060
ver.Set(version)
6161
app, err := bootstrap.NewApp(cfg, bootstrap.WithSignals(), bootstrap.WithDebugPrivilege())
6262
if err != nil {
63-
return multierror.Wrap(err, app.Shutdown())
63+
return err
6464
}
6565
if err := app.Run(args); err != nil {
6666
return multierror.Wrap(err, app.Shutdown())

configs/fibratus.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ kstream:
181181
# collected by Kernel Logger provider
182182
#enable-handle: false
183183

184+
# Determines whether memory manager kernel events are collected by Kernel Logger provider
185+
#enable-mem: true
186+
184187
# Determines whether kernel Audit API calls events are collected
185188
#enable-audit-api: true
186189

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ require (
7070
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect
7171
golang.org/x/crypto v0.1.0 // indirect
7272
golang.org/x/net v0.7.0 // indirect
73+
golang.org/x/time v0.3.0 // indirect
7374
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
7475
gopkg.in/ini.v1 v1.51.0 // indirect
7576
gopkg.in/yaml.v2 v2.3.0 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
269269
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
270270
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
271271
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
272+
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
273+
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
272274
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
273275
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
274276
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

pkg/config/config_windows.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ func (c *Config) addFlags() {
342342
c.flags.Bool(enableFileIOKevents, true, "Determines whether disk I/O kernel events are collected by Kernel Logger provider")
343343
c.flags.Bool(enableImageKevents, true, "Determines whether file I/O kernel events are collected by Kernel Logger provider")
344344
c.flags.Bool(enableHandleKevents, false, "Determines whether object manager kernel events (handle creation/destruction) are collected by Kernel Logger provider")
345+
c.flags.Bool(enableMemKevents, true, "Determines whether memory manager kernel events are collected by Kernel Logger provider")
345346
c.flags.Bool(enableAuditAPIEvents, true, "Determines whether kernel audit API calls events are published")
346347
c.flags.Bool(enableAntimalwareEngineEvents, true, "Determines whether antimalware engine events are published")
347348
c.flags.Int(bufferSize, int(maxBufferSize), "Represents the amount of memory allocated for each event tracing session buffer, in kilobytes. The buffer size affects the rate at which buffers fill and must be flushed (small buffer size requires less memory but it increases the rate at which buffers must be flushed)")

pkg/config/kstream.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const (
3838
enableFileIOKevents = "kstream.enable-fileio"
3939
enableImageKevents = "kstream.enable-image"
4040
enableHandleKevents = "kstream.enable-handle"
41+
enableMemKevents = "kstream.enable-mem"
4142
enableAuditAPIEvents = "kstream.enable-audit-api"
4243
enableAntimalwareEngineEvents = "kstream.enable-antimalware-engine"
4344
bufferSize = "kstream.buffer-size"
@@ -71,6 +72,8 @@ type KstreamConfig struct {
7172
EnableImageKevents bool `json:"enable-image" yaml:"enable-image"`
7273
// EnableHandleKevents indicates whether handle creation/disposal events are enabled.
7374
EnableHandleKevents bool `json:"enable-handle" yaml:"enable-handle"`
75+
// EnableMemKevents indicates whether memory manager events are enabled.
76+
EnableMemKevents bool `json:"enable-memory" yaml:"enable-memory"`
7477
// EnableAuditAPIEvents indicates if kernel audit API calls events are enabled
7578
EnableAuditAPIEvents bool `json:"enable-audit-api" yaml:"enable-audit-api"`
7679
// EnableAntimalwareEngineEvents indicates if Antimalware Engine events are enabled
@@ -101,6 +104,7 @@ func (c *KstreamConfig) initFromViper(v *viper.Viper) {
101104
c.EnableFileIOKevents = v.GetBool(enableFileIOKevents)
102105
c.EnableImageKevents = v.GetBool(enableImageKevents)
103106
c.EnableHandleKevents = v.GetBool(enableHandleKevents)
107+
c.EnableMemKevents = v.GetBool(enableMemKevents)
104108
c.EnableAuditAPIEvents = v.GetBool(enableAuditAPIEvents)
105109
c.EnableAntimalwareEngineEvents = v.GetBool(enableAntimalwareEngineEvents)
106110
c.BufferSize = uint32(v.GetInt(bufferSize))

pkg/config/schema_windows.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ var schema = `
161161
"enable-fileio": {"type": "boolean"},
162162
"enable-handle": {"type": "boolean"},
163163
"enable-net": {"type": "boolean"},
164+
"enable-mem": {"type": "boolean"},
164165
"enable-audit-api": {"type": "boolean"},
165166
"enable-antimalware-engine": {"type": "boolean"},
166167
"min-buffers": {"type": "integer", "minimum": 1, "maximum": {{ .MinBuffers }}},

pkg/filter/accessor.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ func (f *filter) narrowAccessors() {
128128
removeNetworkAccessor = true
129129
removeHandleAccessor = true
130130
removePEAccessor = true
131+
removeMemAccessor = true
131132
)
132133
allFields := make([]fields.Field, 0)
133134
allFields = append(allFields, f.fields...)
@@ -154,6 +155,8 @@ func (f *filter) narrowAccessors() {
154155
removeHandleAccessor = false
155156
case field.IsPeField():
156157
removePEAccessor = false
158+
case field.IsMemField():
159+
removeMemAccessor = false
157160
}
158161
}
159162
if removeKevtAccessor {
@@ -183,6 +186,9 @@ func (f *filter) narrowAccessors() {
183186
if removePEAccessor {
184187
f.removeAccessor(&peAccessor{})
185188
}
189+
if removeMemAccessor {
190+
f.removeAccessor(&memAccessor{})
191+
}
186192
}
187193

188194
func (f *filter) removeAccessor(removed accessor) {

0 commit comments

Comments
 (0)