Skip to content

Commit

Permalink
load network probes on packet rules
Browse files Browse the repository at this point in the history
  • Loading branch information
YoannGh committed Oct 18, 2024
1 parent 53d7246 commit b202890
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 25 deletions.
35 changes: 16 additions & 19 deletions pkg/security/ebpf/probes/event_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
manager "github.com/DataDog/ebpf-manager"

"github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval"
"github.com/DataDog/datadog-agent/pkg/security/secl/model"
"github.com/DataDog/datadog-agent/pkg/security/utils"
)

Expand Down Expand Up @@ -449,24 +450,6 @@ func GetSelectorsPerEventType(fentry bool) map[eval.EventType][]manager.ProbesSe
&manager.BestEffort{Selectors: ExpandSyscallProbesSelector(SecurityAgentUID, "bind", fentry, EntryAndExit)},
},

// List of probes required to capture DNS events
"dns": {
&manager.AllOf{Selectors: []manager.ProbesSelector{
&manager.AllOf{Selectors: NetworkSelectors()},
&manager.AllOf{Selectors: NetworkVethSelectors()},
kprobeOrFentry("security_socket_bind"),
}},
},

// List of probes required to capture IMDS events
"imds": {
&manager.AllOf{Selectors: []manager.ProbesSelector{
&manager.AllOf{Selectors: NetworkSelectors()},
&manager.AllOf{Selectors: NetworkVethSelectors()},
kprobeOrFentry("security_socket_bind"),
}},
},

// List of probes required to capture chdir events
"chdir": {
&manager.AllOf{Selectors: []manager.ProbesSelector{
Expand All @@ -477,11 +460,25 @@ func GetSelectorsPerEventType(fentry bool) map[eval.EventType][]manager.ProbesSe
},
}

// Add probes required to track network interfaces and map network flows to processes
// networkEventTypes: dns, imds, packet
networkEventTypes := model.GetEventTypePerCategory(model.NetworkCategory)[model.NetworkCategory]
for _, networkEventType := range networkEventTypes {
selectorsPerEventTypeStore[networkEventType] = []manager.ProbesSelector{
&manager.AllOf{Selectors: []manager.ProbesSelector{
&manager.AllOf{Selectors: NetworkSelectors()},
&manager.AllOf{Selectors: NetworkVethSelectors()},
}},
}
}

// add probes depending on loaded modules
loadedModules, err := utils.FetchLoadedModules()
if err == nil {
if _, ok := loadedModules["nf_nat"]; ok {
selectorsPerEventTypeStore["dns"] = append(selectorsPerEventTypeStore["dns"], NetworkNFNatSelectors()...)
for _, networkEventType := range networkEventTypes {
selectorsPerEventTypeStore[networkEventType] = append(selectorsPerEventTypeStore[networkEventType], NetworkNFNatSelectors()...)
}
}
}

Expand Down
14 changes: 8 additions & 6 deletions pkg/security/probe/probe_ebpf.go
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ func (p *EBPFProbe) unmarshalContexts(data []byte, event *model.Event) (int, err
}

func eventWithNoProcessContext(eventType model.EventType) bool {
return eventType == model.DNSEventType || eventType == model.IMDSEventType || eventType == model.LoadModuleEventType || eventType == model.UnloadModuleEventType
return eventType == model.DNSEventType || eventType == model.IMDSEventType || eventType == model.RawPacketEventType || eventType == model.LoadModuleEventType || eventType == model.UnloadModuleEventType
}

func (p *EBPFProbe) unmarshalProcessCacheEntry(ev *model.Event, data []byte) (int, error) {
Expand Down Expand Up @@ -1255,11 +1255,13 @@ func (p *EBPFProbe) isNeededForSecurityProfile(eventType eval.EventType) bool {
}

func (p *EBPFProbe) validEventTypeForConfig(eventType string) bool {
if eventType == "dns" && !p.config.Probe.NetworkEnabled {
return false
}
if eventType == "imds" && (!p.config.Probe.NetworkEnabled || !p.config.Probe.NetworkIngressEnabled) {
return false
switch eventType {
case "dns":
return p.probe.IsNetworkEnabled()
case "imds":
return p.probe.IsNetworkEnabled() && p.config.Probe.NetworkIngressEnabled
case "packet":
return p.probe.IsNetworkRawPacketEnabled()
}
return true
}
Expand Down

0 comments on commit b202890

Please sign in to comment.