Skip to content

Commit 3bc98a6

Browse files
committed
[CWS] remove hostname fetching logic from rule filter model
1 parent f3b9e83 commit 3bc98a6

File tree

13 files changed

+51
-62
lines changed

13 files changed

+51
-62
lines changed

cmd/system-probe/modules/eventmonitor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func createEventMonitorModule(_ *sysconfigtypes.Config, deps module.FactoryDepen
6464
}
6565

6666
if secconfig.RuntimeSecurity.IsRuntimeEnabled() {
67-
cws, err := secmodule.NewCWSConsumer(evm, secconfig.RuntimeSecurity, deps.WMeta, deps.FilterStore, secmoduleOpts, deps.Compression, deps.Ipc)
67+
cws, err := secmodule.NewCWSConsumer(evm, secconfig.RuntimeSecurity, deps.WMeta, deps.FilterStore, hostname, secmoduleOpts, deps.Compression, deps.Ipc)
6868
if err != nil {
6969
return nil, err
7070
}

pkg/compliance/agent.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121

2222
"github.com/shirou/gopsutil/v4/process"
2323

24-
ipc "github.com/DataDog/datadog-agent/comp/core/ipc/def"
2524
workloadfilter "github.com/DataDog/datadog-agent/comp/core/workloadfilter/def"
2625
workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def"
2726
"github.com/DataDog/datadog-agent/pkg/compliance/aptconfig"
@@ -115,7 +114,7 @@ type Agent struct {
115114
telemetrySender telemetry.SimpleTelemetrySender
116115
wmeta workloadmeta.Component
117116
filterStore workloadfilter.Component
118-
ipc ipc.Component
117+
hostname string
119118
opts AgentOptions
120119

121120
telemetry *telemetry.ContainersTelemetry
@@ -139,7 +138,7 @@ var seclRuleFilterError error
139138
// MakeDefaultRuleFilter implements the default filtering of benchmarks' rules. It
140139
// will exclude rules based on the evaluation context / environment running
141140
// the benchmark.
142-
func MakeDefaultRuleFilter(ipc ipc.Component) RuleFilter {
141+
func MakeDefaultRuleFilter(hostname string) RuleFilter {
143142
isK8s := env.IsKubernetes()
144143
xccdfEnabled := xccdfEnabled()
145144

@@ -158,7 +157,7 @@ func MakeDefaultRuleFilter(ipc ipc.Component) RuleFilter {
158157
}
159158
if len(r.Filters) > 0 {
160159
initSECRulerFilter.Do(func() {
161-
seclRuleFilterValue, seclRuleFilterError = newSECLRuleFilter(ipc)
160+
seclRuleFilterValue, seclRuleFilterError = newSECLRuleFilter(hostname)
162161
})
163162
if seclRuleFilterError != nil {
164163
log.Errorf("failed to apply rule filters: %s", seclRuleFilterError)
@@ -179,7 +178,7 @@ func MakeDefaultRuleFilter(ipc ipc.Component) RuleFilter {
179178
}
180179

181180
// NewAgent returns a new compliance agent.
182-
func NewAgent(telemetrySender telemetry.SimpleTelemetrySender, wmeta workloadmeta.Component, ipc ipc.Component, filterStore workloadfilter.Component, opts AgentOptions) *Agent {
181+
func NewAgent(telemetrySender telemetry.SimpleTelemetrySender, wmeta workloadmeta.Component, filterStore workloadfilter.Component, hostname string, opts AgentOptions) *Agent {
183182
if opts.ConfigDir == "" {
184183
panic("compliance: missing agent configuration directory")
185184
}
@@ -195,7 +194,7 @@ func NewAgent(telemetrySender telemetry.SimpleTelemetrySender, wmeta workloadmet
195194
if opts.CheckIntervalLowPriority <= 0 {
196195
opts.CheckIntervalLowPriority = defaultCheckIntervalLowPriority
197196
}
198-
defaultRuleFilter := MakeDefaultRuleFilter(ipc)
197+
defaultRuleFilter := MakeDefaultRuleFilter(hostname)
199198
if ruleFilter := opts.RuleFilter; ruleFilter != nil {
200199
opts.RuleFilter = func(r *Rule) bool { return defaultRuleFilter(r) && ruleFilter(r) }
201200
} else {
@@ -205,7 +204,7 @@ func NewAgent(telemetrySender telemetry.SimpleTelemetrySender, wmeta workloadmet
205204
telemetrySender: telemetrySender,
206205
wmeta: wmeta,
207206
filterStore: filterStore,
208-
ipc: ipc,
207+
hostname: hostname,
209208
opts: opts,
210209
statuses: make(map[string]*CheckStatus),
211210
}
@@ -424,7 +423,7 @@ func (a *Agent) runKubernetesConfigurationsExport(ctx context.Context) {
424423
}
425424

426425
func (a *Agent) runAptConfigurationExport(ctx context.Context) {
427-
seclRuleFilter, err := newSECLRuleFilter(a.ipc)
426+
seclRuleFilter, err := newSECLRuleFilter(a.hostname)
428427
if err != nil {
429428
log.Errorf("failed to run apt configuration export: %v", err)
430429
return

pkg/compliance/cli/check.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func RunCheck(log log.Component, config config.Component, _ secrets.Component, s
115115
} else if checkArgs.Framework != "" {
116116
benchDir, benchGlob = configDir, checkArgs.Framework+".yaml"
117117
} else {
118-
ruleFilter = compliance.MakeDefaultRuleFilter(ipc)
118+
ruleFilter = compliance.MakeDefaultRuleFilter(hname)
119119
benchDir, benchGlob = configDir, "*.yaml"
120120
}
121121

pkg/compliance/compliance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func StartCompliance(log log.Component,
7878
reporter := NewLogReporter(hostname, "compliance-agent", "compliance", endpoints, context, compression)
7979
telemetrySender := telemetry.NewSimpleTelemetrySenderFromStatsd(statsdClient)
8080

81-
agent := NewAgent(telemetrySender, wmeta, ipc, filterStore, AgentOptions{
81+
agent := NewAgent(telemetrySender, wmeta, filterStore, hostname, AgentOptions{
8282
ResolverOptions: resolverOptions,
8383
ConfigDir: configDir,
8484
Reporter: reporter,

pkg/compliance/rulefilter.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ package compliance
1111
import (
1212
"fmt"
1313

14-
ipc "github.com/DataDog/datadog-agent/comp/core/ipc/def"
1514
"github.com/DataDog/datadog-agent/pkg/security/rules/filtermodel"
1615
"github.com/DataDog/datadog-agent/pkg/security/secl/rules/filter"
1716
)
@@ -22,9 +21,9 @@ type seclRuleFilter struct {
2221
}
2322

2423
// newSECLRuleFilter returns a new agent version based rule filter
25-
func newSECLRuleFilter(ipc ipc.Component) (*seclRuleFilter, error) {
24+
func newSECLRuleFilter(hostname string) (*seclRuleFilter, error) {
2625
cfg := filtermodel.RuleFilterEventConfig{}
27-
model, err := filtermodel.NewRuleFilterModel(cfg, ipc)
26+
model, err := filtermodel.NewRuleFilterModel(cfg, hostname)
2827
if err != nil {
2928
return nil, fmt.Errorf("failed to create default SECL rule filter: %w", err)
3029
}

pkg/security/module/cws.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ type CWSConsumer struct {
7373
}
7474

7575
// NewCWSConsumer initializes the module with options
76-
func NewCWSConsumer(evm *eventmonitor.EventMonitor, cfg *config.RuntimeSecurityConfig, wmeta workloadmeta.Component, filterStore workloadfilter.Component, opts Opts, compression compression.Component, ipc ipc.Component) (*CWSConsumer, error) {
76+
func NewCWSConsumer(evm *eventmonitor.EventMonitor, cfg *config.RuntimeSecurityConfig, wmeta workloadmeta.Component, filterStore workloadfilter.Component, hostname string, opts Opts, compression compression.Component, ipc ipc.Component) (*CWSConsumer, error) {
7777
crtelemcfg := telemetry.ContainersRunningTelemetryConfig{
7878
RuntimeEnabled: cfg.RuntimeEnabled,
7979
FIMEnabled: cfg.FIMEnabled,
@@ -134,7 +134,7 @@ func NewCWSConsumer(evm *eventmonitor.EventMonitor, cfg *config.RuntimeSecurityC
134134
listeners = append(listeners, selfTester)
135135
}
136136

137-
c.ruleEngine, err = rulesmodule.NewRuleEngine(evm, cfg, evm.Probe, c.rateLimiter, c.apiServer, c, c.statsdClient, ipc, listeners...)
137+
c.ruleEngine, err = rulesmodule.NewRuleEngine(evm, cfg, evm.Probe, c.rateLimiter, c.apiServer, c, c.statsdClient, hostname, ipc, listeners...)
138138
if err != nil {
139139
return nil, err
140140
}

pkg/security/rules/engine.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ type RuleEngine struct {
6969
pid uint32
7070
wg sync.WaitGroup
7171
ipc ipc.Component
72+
hostname string
7273

7374
// userspace filtering metrics (avoid statsd calls in event hot path)
7475
noMatchCounters []atomic.Uint64
@@ -82,7 +83,7 @@ type APIServer interface {
8283
}
8384

8485
// NewRuleEngine returns a new rule engine
85-
func NewRuleEngine(evm *eventmonitor.EventMonitor, config *config.RuntimeSecurityConfig, probe *probe.Probe, rateLimiter *events.RateLimiter, apiServer APIServer, sender events.EventSender, statsdClient statsd.ClientInterface, ipc ipc.Component, rulesetListeners ...rules.RuleSetListener) (*RuleEngine, error) {
86+
func NewRuleEngine(evm *eventmonitor.EventMonitor, config *config.RuntimeSecurityConfig, probe *probe.Probe, rateLimiter *events.RateLimiter, apiServer APIServer, sender events.EventSender, statsdClient statsd.ClientInterface, hostname string, ipc ipc.Component, rulesetListeners ...rules.RuleSetListener) (*RuleEngine, error) {
8687
engine := &RuleEngine{
8788
probe: probe,
8889
config: config,
@@ -96,6 +97,7 @@ func NewRuleEngine(evm *eventmonitor.EventMonitor, config *config.RuntimeSecurit
9697
statsdClient: statsdClient,
9798
rulesetListeners: rulesetListeners,
9899
pid: utils.Getpid(),
100+
hostname: hostname,
99101
ipc: ipc,
100102
}
101103

@@ -168,7 +170,7 @@ func (e *RuleEngine) Start(ctx context.Context, reloadChan <-chan struct{}) erro
168170
COREEnabled: e.probe.Config.Probe.EnableCORE,
169171
Origin: e.probe.Origin(),
170172
}
171-
ruleFilterModel, err := filtermodel.NewRuleFilterModel(rfmCfg, e.ipc)
173+
ruleFilterModel, err := filtermodel.NewRuleFilterModel(rfmCfg, e.hostname)
172174
if err != nil {
173175
return fmt.Errorf("failed to create rule filter: %w", err)
174176
}

pkg/security/rules/filtermodel/rule_filters_model.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ package filtermodel
99
import (
1010
"reflect"
1111

12-
ipc "github.com/DataDog/datadog-agent/comp/core/ipc/def"
1312
"github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval"
14-
"github.com/DataDog/datadog-agent/pkg/security/utils/hostnameutils"
1513
)
1614

1715
// RuleFilterEventConfig holds the config used by the rule filter event
@@ -68,11 +66,3 @@ func (m *RuleFilterModel) ValidateRule(_ *eval.Rule) error {
6866
func (m *RuleFilterModel) GetFieldRestrictions(_ eval.Field) []eval.EventType {
6967
return nil
7068
}
71-
72-
func getHostname(ipcComp ipc.Component) string {
73-
hostname, err := hostnameutils.GetHostname(ipcComp)
74-
if err != nil || hostname == "" {
75-
hostname = "unknown"
76-
}
77-
return hostname
78-
}

pkg/security/rules/filtermodel/rule_filters_model_linux.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,52 +12,52 @@ import (
1212
"os"
1313
"runtime"
1414

15-
ipc "github.com/DataDog/datadog-agent/comp/core/ipc/def"
1615
"github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel"
1716
"github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval"
1817
)
1918

2019
// RuleFilterEvent defines a rule filter event
2120
type RuleFilterEvent struct {
22-
kv *kernel.Version
23-
cfg RuleFilterEventConfig
24-
ipc ipc.Component
21+
kv *kernel.Version
22+
cfg RuleFilterEventConfig
23+
hostname string
2524
}
2625

2726
// RuleFilterModel defines a filter model
2827
type RuleFilterModel struct {
29-
kv *kernel.Version
30-
cfg RuleFilterEventConfig
31-
ipc ipc.Component
28+
kv *kernel.Version
29+
cfg RuleFilterEventConfig
30+
hostname string
3231
}
3332

3433
// NewRuleFilterModel returns a new rule filter model
35-
func NewRuleFilterModel(cfg RuleFilterEventConfig, ipc ipc.Component) (*RuleFilterModel, error) {
34+
func NewRuleFilterModel(cfg RuleFilterEventConfig, hostname string) (*RuleFilterModel, error) {
3635
kv, err := kernel.NewKernelVersion()
3736
if err != nil {
3837
return nil, err
3938
}
4039
return &RuleFilterModel{
41-
kv: kv,
42-
cfg: cfg,
43-
ipc: ipc,
40+
kv: kv,
41+
cfg: cfg,
42+
hostname: hostname,
4443
}, nil
4544
}
4645

4746
// NewRuleFilterModelWithKernelVersion returns a new rule filter model
48-
func NewRuleFilterModelWithKernelVersion(cfg RuleFilterEventConfig, kv *kernel.Version) *RuleFilterModel {
47+
func NewRuleFilterModelWithKernelVersion(cfg RuleFilterEventConfig, kv *kernel.Version, hostname string) *RuleFilterModel {
4948
return &RuleFilterModel{
50-
kv: kv,
51-
cfg: cfg,
49+
kv: kv,
50+
cfg: cfg,
51+
hostname: hostname,
5252
}
5353
}
5454

5555
// NewEvent returns a new event
5656
func (m *RuleFilterModel) NewEvent() eval.Event {
5757
return &RuleFilterEvent{
58-
kv: m.kv,
59-
cfg: m.cfg,
60-
ipc: m.ipc,
58+
kv: m.kv,
59+
cfg: m.cfg,
60+
hostname: m.hostname,
6161
}
6262
}
6363

@@ -204,7 +204,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, _ eval.RegisterID, _ in
204204
}, nil
205205
case "hostname":
206206
return &eval.StringEvaluator{
207-
Value: getHostname(m.ipc),
207+
Value: m.hostname,
208208
Field: field,
209209
}, nil
210210
case "kernel.core.enabled":
@@ -283,7 +283,7 @@ func (e *RuleFilterEvent) GetFieldValue(field eval.Field) (interface{}, error) {
283283
case "origin":
284284
return e.cfg.Origin, nil
285285
case "hostname":
286-
return getHostname(e.ipc), nil
286+
return e.hostname, nil
287287
case "kernel.core.enabled":
288288
return e.cfg.COREEnabled && e.kv.SupportCORE(), nil
289289
}

pkg/security/rules/filtermodel/rule_filters_model_other.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,35 +12,34 @@ import (
1212
"os"
1313
"runtime"
1414

15-
ipc "github.com/DataDog/datadog-agent/comp/core/ipc/def"
1615
"github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval"
1716
)
1817

1918
// RuleFilterEvent represents a rule filtering event
2019
type RuleFilterEvent struct {
21-
cfg RuleFilterEventConfig
22-
ipc ipc.Component
20+
cfg RuleFilterEventConfig
21+
hostname string
2322
}
2423

2524
// RuleFilterModel represents a rule fitlering model
2625
type RuleFilterModel struct {
27-
cfg RuleFilterEventConfig
28-
ipc ipc.Component
26+
cfg RuleFilterEventConfig
27+
hostname string
2928
}
3029

3130
// NewRuleFilterModel returns a new rule filtering model
32-
func NewRuleFilterModel(cfg RuleFilterEventConfig, ipc ipc.Component) (*RuleFilterModel, error) {
31+
func NewRuleFilterModel(cfg RuleFilterEventConfig, hostname string) (*RuleFilterModel, error) {
3332
return &RuleFilterModel{
34-
cfg: cfg,
35-
ipc: ipc,
33+
cfg: cfg,
34+
hostname: hostname,
3635
}, nil
3736
}
3837

3938
// NewEvent returns a new rule filtering event
4039
func (m *RuleFilterModel) NewEvent() eval.Event {
4140
return &RuleFilterEvent{
42-
cfg: m.cfg,
43-
ipc: m.ipc,
41+
cfg: m.cfg,
42+
hostname: m.hostname,
4443
}
4544
}
4645

@@ -83,7 +82,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, _ eval.RegisterID, _ in
8382
}, nil
8483
case "hostname":
8584
return &eval.StringEvaluator{
86-
Value: getHostname(m.ipc),
85+
Value: m.hostname,
8786
Field: field,
8887
}, nil
8988
}
@@ -112,7 +111,7 @@ func (e *RuleFilterEvent) GetFieldValue(field eval.Field) (interface{}, error) {
112111
case "origin":
113112
return e.cfg.Origin, nil
114113
case "hostname":
115-
return getHostname(e.ipc), nil
114+
return e.hostname, nil
116115
}
117116

118117
return nil, &eval.ErrFieldNotFound{Field: field}

0 commit comments

Comments
 (0)