From efd523865dff574bd3689a2130535edf701286cd Mon Sep 17 00:00:00 2001 From: rcohencyberarmor Date: Thu, 2 Feb 2023 16:34:30 +0200 Subject: [PATCH 01/18] ebpf engine + accumulate ebpf engtine data Signed-off-by: rcohen --- .gitignore | 1 + .vscode/launch.json | 21 + README.md | 28 +- configuration/SneefferConfigurationFile.txt | 5 + core/accumulator/accumulator.go | 234 ++++++ .../data_sturcture.go | 14 + core/config/config.go | 150 ++++ core/config/config_test.go | 40 ++ core/ebpf_engine/cilium_sniffer_engine.go | 85 +++ core/ebpf_engine/falco_sniffer_engine.go | 200 ++++++ core/ebpf_engine/sniffer_engine_interface.go | 7 + core/validator/validator.go | 59 ++ core/validator/validator_test.go | 9 + go.mod | 105 +++ go.sum | 666 ++++++++++++++++++ install_dependencies.sh | 15 + main.go | 71 ++ 17 files changed, 1709 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 configuration/SneefferConfigurationFile.txt create mode 100644 core/accumulator/accumulator.go create mode 100644 core/accumulator_data_structure/data_sturcture.go create mode 100644 core/config/config.go create mode 100644 core/config/config_test.go create mode 100644 core/ebpf_engine/cilium_sniffer_engine.go create mode 100644 core/ebpf_engine/falco_sniffer_engine.go create mode 100644 core/ebpf_engine/sniffer_engine_interface.go create mode 100644 core/validator/validator.go create mode 100644 core/validator/validator_test.go create mode 100644 go.mod create mode 100644 go.sum create mode 100755 install_dependencies.sh create mode 100644 main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..ab62e12a48 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +sniffer \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..be6fa8a260 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}", + "env": { + "SNEEFFER_CONF_FILE_PATH": "${workspaceFolder}/configuration/SneefferConfigurationFile.txt", + "HOME": "/home/raziel" + }, + "console": "integratedTerminal", + "asRoot": true + } + ] +} diff --git a/README.md b/README.md index a658d6a700..7c52af1deb 100644 --- a/README.md +++ b/README.md @@ -1 +1,27 @@ -# sniffer +## sniffer + +1. Compile relevant binaries by running the following script: + +```sh +./install_dependencies.sh +``` + +This step can take ~15 minutes depending on your machine. + +2. Build Sneeffer + +``` +go build -o sniffer . +``` + +3. Run minikube: + +``` +minikube start +``` + +4. Run Sneeffer: + +``` +sudo SNEEFFER_CONF_FILE_PATH=./configuration/SneefferConfigurationFile.txt HOME= ./kubescape_sneeffer +``` \ No newline at end of file diff --git a/configuration/SneefferConfigurationFile.txt b/configuration/SneefferConfigurationFile.txt new file mode 100644 index 0000000000..e7105b587c --- /dev/null +++ b/configuration/SneefferConfigurationFile.txt @@ -0,0 +1,5 @@ +kernelObjPath=./resources/ebpf/kernel_obj.o +snifferEngineLoaderPath=./resources/ebpf/falco_ebpf_engine +myNode=minikube +enableRelaventCVEsService=true +ebpfEngine=cilium \ No newline at end of file diff --git a/core/accumulator/accumulator.go b/core/accumulator/accumulator.go new file mode 100644 index 0000000000..8ff56b2254 --- /dev/null +++ b/core/accumulator/accumulator.go @@ -0,0 +1,234 @@ +package accumulator + +import ( + "fmt" + "strings" + "sync" + "time" + + "sniffer/core/accumulator_data_structure" + "sniffer/core/config" + "sniffer/core/ebpf_engine" + + logger "github.com/kubescape/go-logger" + "github.com/kubescape/go-logger/helpers" +) + +type AccumulatorInterface interface { + accumulateSnifferData() +} + +type containersAccumalator struct { + accumultorDataPerContainer map[string]chan accumulator_data_structure.SnifferEventData + registerContainerState bool + unregisterContainerState bool + registerMutex sync.Mutex +} + +type CacheAccumulator struct { + accumultorData []map[string][]accumulator_data_structure.SnifferEventData + syncReaderWriterAccumulatorData sync.Mutex + firstMapKeysOfAccumultorData []string + CacheAccumulatorSize int + mainDataChannel chan *accumulator_data_structure.SnifferEventData + containersData containersAccumalator + falcoEbpfEngine ebpf_engine.FalcoSnifferEngine + ciliumEbpfEngine ebpf_engine.CiliumSnifferEngine +} + +type ContainerAccumulator struct { + dataChannel chan accumulator_data_structure.SnifferEventData + containerID string +} + +var cacheAccumuator *CacheAccumulator + +func CreateCacheAccumulator(CacheAccumulatorSize int) *CacheAccumulator { + cacheAccumuator = &CacheAccumulator{ + CacheAccumulatorSize: CacheAccumulatorSize, + accumultorData: make([]map[string][]accumulator_data_structure.SnifferEventData, CacheAccumulatorSize), + firstMapKeysOfAccumultorData: make([]string, CacheAccumulatorSize), + mainDataChannel: make(chan *accumulator_data_structure.SnifferEventData), + containersData: containersAccumalator{ + accumultorDataPerContainer: make(map[string]chan accumulator_data_structure.SnifferEventData), + registerContainerState: false, + unregisterContainerState: false, + }, + } + + return cacheAccumuator +} + +func CreateContainerAccumulator(containerID string, dataChannel chan accumulator_data_structure.SnifferEventData) *ContainerAccumulator { + return &ContainerAccumulator{ + dataChannel: dataChannel, + containerID: containerID, + } +} + +func (acc *CacheAccumulator) findIndexByTimestampWhenAccumultorDataIsFull(t time.Time) (int, bool) { + index := 0 + minTimestamp := acc.accumultorData[0][acc.firstMapKeysOfAccumultorData[0]][0].Timestamp + for i := range acc.accumultorData { + if i == 0 { + continue + } + if acc.accumultorData[i][acc.firstMapKeysOfAccumultorData[i]][0].Timestamp.Before(minTimestamp) { + minTimestamp = acc.accumultorData[i][acc.firstMapKeysOfAccumultorData[i]][0].Timestamp + index = i + } + } + return index, true +} + +func (acc *CacheAccumulator) findIndexByTimestamp(t time.Time) (int, bool) { + for i := range acc.accumultorData { + if len(acc.accumultorData[i]) == 0 { + return i, true + } + firstKey := acc.firstMapKeysOfAccumultorData[i] + if t.Sub((acc.accumultorData[i])[firstKey][0].Timestamp) < time.Second { + return i, false + } + } + index, createNewMap := acc.findIndexByTimestampWhenAccumultorDataIsFull(t) + if index != -1 { + return index, createNewMap + } + // logger.L().Debug("findIndexByTimestamp: failed to find index, sniffer data will not saved") + return -1, false +} + +func (acc *CacheAccumulator) accumulateSnifferData() { + for { + metadataAcc := <-acc.mainDataChannel + logger.L().Info("metadataAcc ", helpers.String("", fmt.Sprintf("%v", metadataAcc))) + if strings.Contains(metadataAcc.ContainerID, config.GetMyContainerID()) { + continue + } + if metadataAcc != nil { + if metadataAcc.Cmd == "drop event occured\n" { + if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { + acc.containersData.registerMutex.Lock() + } + if len(acc.containersData.accumultorDataPerContainer) > 0 { + for contID := range acc.containersData.accumultorDataPerContainer { + acc.containersData.accumultorDataPerContainer[contID] <- *metadataAcc + } + } + if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { + acc.containersData.registerMutex.Unlock() + } + } else { + index, createNewMap := acc.findIndexByTimestamp(metadataAcc.Timestamp) + if index == -1 { + // logger.L().Debug("metadataAcc %v\n", metadataAcc) + continue + } + acc.syncReaderWriterAccumulatorData.Lock() + if createNewMap { + slice := make([]accumulator_data_structure.SnifferEventData, 0) + m := make(map[string][]accumulator_data_structure.SnifferEventData) + m[metadataAcc.ContainerID] = slice + acc.accumultorData[index] = m + acc.firstMapKeysOfAccumultorData[index] = metadataAcc.ContainerID + } + a := acc.accumultorData[index] + a[metadataAcc.ContainerID] = append(a[metadataAcc.ContainerID], *metadataAcc) + acc.accumultorData[index][metadataAcc.ContainerID] = append(acc.accumultorData[index][metadataAcc.ContainerID], *metadataAcc) + acc.syncReaderWriterAccumulatorData.Unlock() + + if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { + acc.containersData.registerMutex.Lock() + } + if containerAccumalatorChan, exist := acc.containersData.accumultorDataPerContainer[metadataAcc.ContainerID]; exist { + containerAccumalatorChan <- *metadataAcc + } + if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { + acc.containersData.registerMutex.Unlock() + } + } + } + } +} + +func (acc *CacheAccumulator) getSnifferData() { + if config.IsFalcoEbpfEngine() { + acc.falcoEbpfEngine.GetSnifferData(acc.mainDataChannel) + } else { + acc.ciliumEbpfEngine.GetSnifferData(acc.mainDataChannel) + } +} + +func (acc *CacheAccumulator) getEbpfEngineError(errChan chan error) { + if config.IsFalcoEbpfEngine() { + errChan <- acc.falcoEbpfEngine.GetEbpfEngineError() + } else { + errChan <- acc.ciliumEbpfEngine.GetEbpfEngineError() + } +} + +func (acc *CacheAccumulator) StartCacheAccumalator(errChan chan error, syscallFilter []string, includeHost bool, sniffMainThreadOnly bool) error { + if config.IsFalcoEbpfEngine() { + acc.falcoEbpfEngine = *ebpf_engine.CreateFalcoSnifferEngine(syscallFilter, includeHost, sniffMainThreadOnly, "") + err := acc.falcoEbpfEngine.StartSnifferEngine() + if err != nil { + logger.L().Error("fail to create sniffer agent process\n") + return err + } + } else { + acc.ciliumEbpfEngine = *ebpf_engine.CreateCiliumSnifferEngine() + err := acc.ciliumEbpfEngine.StartSnifferEngine() + if err != nil { + logger.L().Error("fail to create sniffer agent process") + return err + } + } + + go acc.accumulateSnifferData() + go acc.getSnifferData() + go acc.getEbpfEngineError(errChan) + return nil +} + +func (acc *ContainerAccumulator) registerContainerAccumalator() { + cacheAccumuator.containersData.registerContainerState = true + cacheAccumuator.containersData.registerMutex.Lock() + cacheAccumuator.containersData.accumultorDataPerContainer[acc.containerID] = acc.dataChannel + cacheAccumuator.containersData.registerMutex.Unlock() + cacheAccumuator.containersData.registerContainerState = false +} + +func (acc *ContainerAccumulator) unregisterContainerAccumalator() { + cacheAccumuator.containersData.unregisterContainerState = true + cacheAccumuator.containersData.registerMutex.Lock() + delete(cacheAccumuator.containersData.accumultorDataPerContainer, acc.containerID) + cacheAccumuator.containersData.registerMutex.Unlock() + cacheAccumuator.containersData.unregisterContainerState = false +} + +func (acc *ContainerAccumulator) StartContainerAccumalator() { + acc.registerContainerAccumalator() +} + +func (acc *ContainerAccumulator) StopWatching() { + acc.unregisterContainerAccumalator() +} + +func GetCacheAccumaltor() *CacheAccumulator { + return cacheAccumuator +} + +func (acc *CacheAccumulator) AccumulatorByContainerID(aggregationData *[]accumulator_data_structure.SnifferEventData, containerID string, containerStartTime interface{}) { + for i := range acc.accumultorData { + logger.L().Debug("", helpers.String("index ", fmt.Sprintf("%d:%v", i, acc.accumultorData[i]))) + } + for i := range acc.accumultorData { + for j := range acc.accumultorData[i][containerID] { + acc.syncReaderWriterAccumulatorData.Lock() + *aggregationData = append(*aggregationData, acc.accumultorData[i][containerID][j]) + acc.syncReaderWriterAccumulatorData.Unlock() + } + } + logger.L().Debug("data ", helpers.String("", fmt.Sprintf("%v", aggregationData))) +} diff --git a/core/accumulator_data_structure/data_sturcture.go b/core/accumulator_data_structure/data_sturcture.go new file mode 100644 index 0000000000..abcf3aff3d --- /dev/null +++ b/core/accumulator_data_structure/data_sturcture.go @@ -0,0 +1,14 @@ +package accumulator_data_structure + +import "time" + +type SnifferEventData struct { + Timestamp time.Time + ContainerID string + SyscallCategory string + Ppid string + Pid string + SyscallType string + Exe string + Cmd string +} diff --git a/core/config/config.go b/core/config/config.go new file mode 100644 index 0000000000..d00c138688 --- /dev/null +++ b/core/config/config.go @@ -0,0 +1,150 @@ +package config + +import ( + "bufio" + "fmt" + "log" + "os" + "strings" + + logger "github.com/kubescape/go-logger" +) + +const ( + RELAVENT_CVES_SERVICE = "RELAVENT_CVES_SERVICE" + CONTAINER_PROFILING_SERVICE = "CONTAINER_PROFILING_SERVICE" +) + +const ( + EBPF_ENGINE_FALCO = "falco" + EBPF_ENGINE_CILIUM = "cilium" +) + +var myContainerID string + +var sycscallFilterForRelaventCVES []string +var manadatoryConfigurationVars []string +var relaventCVEService bool +var ebpfEngine string + +func init() { + manadatoryConfigurationVars = append(manadatoryConfigurationVars, "myNode") + relaventCVEService = false + myContainerID = "111111111111111111" +} + +func parseConfigurationFile(configurationFilePath string) error { + readFile, err := os.Open(configurationFilePath) + if err != nil { + return err + } + + fileScanner := bufio.NewScanner(readFile) + fileScanner.Split(bufio.ScanLines) + for fileScanner.Scan() { + line := fileScanner.Text() + confData := strings.Split(line, "=") + if confData[0] == line { + log.Printf("ParseConfigurationFile: seperator = is not exist in configuration file line: %s\n", line) + continue + } + if os.Setenv(confData[0], confData[1]) != nil { + log.Printf("ParseConfigurationFile: fail to set env %s=%s", confData[0], confData[1]) + } + } + readFile.Close() + return nil +} + +func validateMandatoryConfigurationn() error { + for i := range manadatoryConfigurationVars { + if _, exist := os.LookupEnv(manadatoryConfigurationVars[i]); !exist { + return fmt.Errorf("validateMandatoryConfigurationn: %s not exist", manadatoryConfigurationVars[i]) + } + } + return nil +} + +func ebpfEngineConfig() bool { + val, exist := os.LookupEnv("ebpfEngine") + if exist { + if val != EBPF_ENGINE_FALCO && val != EBPF_ENGINE_CILIUM { + return false + } + ebpfEngine = val + } else { + ebpfEngine = EBPF_ENGINE_FALCO + } + if ebpfEngine != EBPF_ENGINE_FALCO { + manadatoryConfigurationVars = append(manadatoryConfigurationVars, "kernelObjPath") + manadatoryConfigurationVars = append(manadatoryConfigurationVars, "snifferEngineLoaderPath") + sycscallFilterForRelaventCVES = append(sycscallFilterForRelaventCVES, []string{"execve", "execveat", "open", "openat"}...) + } + return true +} + +func servicesConfig() error { + serviceExist := false + + val, exist := os.LookupEnv("enableRelaventCVEsService") + if exist { + if val == "true" || val == "True" { + relaventCVEService = true + serviceExist = true + logger.L().Info("sneeffer service find relavent CVEs is enabled\n") + } + } + if !serviceExist { + return fmt.Errorf("no service is configured to use, please look in the configuration file that one of the services mark as true or True") + } + return nil +} + +func afterConfigurationParserActions() error { + ebpfEngineConfig() + return servicesConfig() +} + +func ParseConfiguration() error { + configurationFilePath, exist := os.LookupEnv("SNEEFFER_CONF_FILE_PATH") + if !exist { + return fmt.Errorf("env var SNEEFFER_CONF_FILE_PATH is not exist") + } + + err := parseConfigurationFile(configurationFilePath) + if err != nil { + return err + } + + err = validateMandatoryConfigurationn() + if err != nil { + return err + } + + err = afterConfigurationParserActions() + if err != nil { + return err + } + + return nil +} + +func GetSyscallFilter() []string { + return sycscallFilterForRelaventCVES +} + +func IsRelaventCVEServiceEnabled() bool { + return relaventCVEService +} + +func IsFalcoEbpfEngine() bool { + return ebpfEngine == EBPF_ENGINE_FALCO +} + +func SetMyContainerID(ContainerID string) { + myContainerID = ContainerID +} + +func GetMyContainerID() string { + return myContainerID +} diff --git a/core/config/config_test.go b/core/config/config_test.go new file mode 100644 index 0000000000..01b8564ac9 --- /dev/null +++ b/core/config/config_test.go @@ -0,0 +1,40 @@ +package config + +import ( + "os" + "testing" +) + +func TestGetMyContainerID(test *testing.T) { + if GetMyContainerID() != "111111111111111111" { + test.Errorf("TestGetMyContainerID") + } +} + +func TestConfigurationFile(test *testing.T) { + wd, err := os.Getwd() + if err != nil { + test.Errorf("ParseConfigurationFile os.Getwd() %v", err) + } + if err := parseConfigurationFile(wd + "/../../configuration/SneefferConfigurationFile.txt"); err != nil { + test.Errorf("ParseConfigurationFile err %v", err) + } + if err := validateMandatoryConfigurationn(); err != nil { + test.Errorf("ParseConfigurationFile err %v", err) + } +} + +func TestFullTestConfigurationFile(test *testing.T) { + wd, err := os.Getwd() + if err != nil { + test.Errorf("TestFullTestConfigurationFile os.Getwd() %v", err) + } + err = os.Setenv("SNEEFFER_CONF_FILE_PATH", wd+"/../../configuration/SneefferConfigurationFile.txt") + if err != nil { + test.Errorf("TestFullTestConfigurationFile os.Setenv() %v", err) + } + err = ParseConfiguration() + if err != nil { + test.Errorf("TestFullTestConfigurationFile ParseConfiguration %v", err) + } +} diff --git a/core/ebpf_engine/cilium_sniffer_engine.go b/core/ebpf_engine/cilium_sniffer_engine.go new file mode 100644 index 0000000000..04044cfaa0 --- /dev/null +++ b/core/ebpf_engine/cilium_sniffer_engine.go @@ -0,0 +1,85 @@ +package ebpf_engine + +import ( + "strconv" + "time" + + "sniffer/core/accumulator_data_structure" + + "github.com/slashben/kubescape-ebpf/core/common" + fileaccessmonitor "github.com/slashben/kubescape-ebpf/core/file-access-monitor" +) + +type ciliumEbpfEngineClient struct { + eventChannel chan fileaccessmonitor.FileActivityEvent +} + +type CiliumSnifferEngine struct { + ebpfEngineClient *fileaccessmonitor.FileActivityMonitor + ciliumEbpfEngineClientData ciliumEbpfEngineClient +} + +func CreateCiliumSnifferEngine() *CiliumSnifferEngine { + client := ciliumEbpfEngineClient{ + eventChannel: make(chan fileaccessmonitor.FileActivityEvent), + } + return &CiliumSnifferEngine{ + ebpfEngineClient: fileaccessmonitor.CreateFileActivityMonitor(&client), + ciliumEbpfEngineClientData: client, + } +} + +func (ciliumSnifferEngine *CiliumSnifferEngine) StartSnifferEngine() error { + ciliumSnifferEngine.ebpfEngineClient.Start() + return nil +} + +func parseTime(t uint64) (*time.Time, error) { + time_str, err := strconv.ParseInt(strconv.FormatUint(t, 10), 10, 64) + if err != nil { + return nil, err + } + tm := time.Unix(time_str, 0) + return &tm, nil +} + +func parseEvent(event fileaccessmonitor.FileActivityEvent) (*accumulator_data_structure.SnifferEventData, error) { + cid, err := common.GetContainerIdForNsMntId(event.NsMntId) + if err != nil { + return nil, err + } + + t, err := parseTime(event.Timestamp) + if err != nil { + return nil, err + } + + return &accumulator_data_structure.SnifferEventData{ + Timestamp: *t, + ContainerID: cid[:12], + SyscallCategory: "", + SyscallType: event.File, + Ppid: "", + Pid: strconv.Itoa(event.Pid), + Exe: event.Comm, + Cmd: "", + }, nil +} + +func (ciliumSnifferEngine *CiliumSnifferEngine) GetSnifferData(ebpfEngineDataChannel chan *accumulator_data_structure.SnifferEventData) { + for { + data, err := parseEvent(<-ciliumSnifferEngine.ciliumEbpfEngineClientData.eventChannel) + if err != nil { + continue + } + ebpfEngineDataChannel <- data + } +} + +func (client *ciliumEbpfEngineClient) Notify(event fileaccessmonitor.FileActivityEvent) { + client.eventChannel <- event +} + +func (ciliumSnifferEngine *CiliumSnifferEngine) GetEbpfEngineError() error { + return nil +} diff --git a/core/ebpf_engine/falco_sniffer_engine.go b/core/ebpf_engine/falco_sniffer_engine.go new file mode 100644 index 0000000000..ab1e8463e1 --- /dev/null +++ b/core/ebpf_engine/falco_sniffer_engine.go @@ -0,0 +1,200 @@ +package ebpf_engine + +import ( + "bufio" + "fmt" + "io" + "os" + "os/exec" + "strconv" + "strings" + "time" + + "sniffer/core/accumulator_data_structure" + + logger "github.com/kubescape/go-logger" + "github.com/kubescape/go-logger/helpers" +) + +type FalcoSnifferEngine struct { + kernelObjPath string + syscallFilterString string + includeHost bool + sniffMainThreadOnly bool + containerID string + reader io.ReadCloser + pid int + cmd *exec.Cmd +} + +func createSyscallFilterString(syscallFilter []string) string { + filterString := "" + + for i := range syscallFilter { + filterString += "evt.type=" + syscallFilter[i] + if i < len(syscallFilter)-1 { + filterString += " or " + } + } + return filterString +} + +func CreateFalcoSnifferEngine(syscallFilter []string, includeHost bool, sniffMainThreadOnly bool, containerID string) *FalcoSnifferEngine { + kernelObjPath := os.Getenv("kernelObjPath") + syscallFilterString := createSyscallFilterString(syscallFilter) + + return &FalcoSnifferEngine{ + kernelObjPath: kernelObjPath, + syscallFilterString: syscallFilterString, + includeHost: includeHost, + sniffMainThreadOnly: sniffMainThreadOnly, + containerID: containerID, + } +} + +func (FalcoSnifferEngine *FalcoSnifferEngine) snifferEngineCMDWithParams() []string { + var fullSnifferEngineCMD []string + + if FalcoSnifferEngine.syscallFilterString != "" { + fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-f") + fullSnifferEngineCMD = append(fullSnifferEngineCMD, FalcoSnifferEngine.syscallFilterString) + } + if FalcoSnifferEngine.includeHost { + fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-o") + } + if FalcoSnifferEngine.sniffMainThreadOnly { + fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-m") + } + if FalcoSnifferEngine.containerID != "" { + fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-c") + fullSnifferEngineCMD = append(fullSnifferEngineCMD, FalcoSnifferEngine.containerID) + } + fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-e") + fullSnifferEngineCMD = append(fullSnifferEngineCMD, FalcoSnifferEngine.kernelObjPath) + + return fullSnifferEngineCMD +} + +func (FalcoSnifferEngine *FalcoSnifferEngine) StartSnifferEngine() error { + snifferEngineLoaderPath := os.Getenv("snifferEngineLoaderPath") + if snifferEngineLoaderPath == "" { + return fmt.Errorf("startSnifferEngine: the env var snifferEngineLoaderPath is not set") + } + + fullSnifferEngineCMD := FalcoSnifferEngine.snifferEngineCMDWithParams() + cmd := exec.Command(snifferEngineLoaderPath, fullSnifferEngineCMD...) + logger.L().Debug("", helpers.String("cmd.Args %v", fmt.Sprintf("%v", cmd.Args))) + stdout, err := cmd.StdoutPipe() + if err != nil { + return err + } + err = cmd.Start() + if err != nil { + logger.L().Debug("", helpers.String("StartSnifferEngine: fail with err %v", fmt.Sprintf("%v", err))) + return err + } + FalcoSnifferEngine.cmd = cmd + FalcoSnifferEngine.reader = stdout + FalcoSnifferEngine.pid = cmd.Process.Pid + return nil +} + +func convertStrigTimeToTimeOBJ(Timestamp string) (*time.Time, error) { + dateAndTime := strings.Split(Timestamp, "T") + date := strings.Split(dateAndTime[0], "-") + tm := strings.Split(dateAndTime[1], ":") + + year, err := strconv.Atoi(date[0]) + if err != nil { + logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) + return nil, err + } + month, err := strconv.Atoi(date[1]) + if err != nil { + logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) + return nil, err + } + day, err := strconv.Atoi(date[2]) + if err != nil { + logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) + return nil, err + } + + hour, err := strconv.Atoi(tm[0]) + if err != nil { + logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) + return nil, err + } + minute, err := strconv.Atoi(tm[1]) + if err != nil { + logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) + return nil, err + } + seconds := strings.Split(tm[2], "+") + secs := strings.Split(seconds[0], ".") + + sec, err := strconv.Atoi(secs[0]) + if err != nil { + logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) + return nil, err + } + + nsec, err := strconv.Atoi(secs[1]) + if err != nil { + logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) + return nil, err + } + + t := time.Date(year, time.Month(month), day, hour, minute, sec, nsec, time.Now().Location()) + return &t, nil +} + +func parseLine(line string) (*accumulator_data_structure.SnifferEventData, error) { + if strings.Contains(line, "drop event occured") { + return &accumulator_data_structure.SnifferEventData{ + Cmd: "drop event occured\n", + }, nil + } + lineParts := strings.Split(line, "]::[") + if len(lineParts) != 8 { + logger.L().Error("", helpers.String("we have got unknown line format, line is ", fmt.Sprintf("%s", line))) + return nil, fmt.Errorf("we have got unknown line format, line is %s", line) + } + Timestamp, err := convertStrigTimeToTimeOBJ(lineParts[0]) + if err != nil { + logger.L().Error("", helpers.String("parseLine Timestamp fail line is ", fmt.Sprintf("%s, err %v", line, err))) + return nil, fmt.Errorf("parseLine Timestamp fail line is %s, err %v", line, err) + } + return &accumulator_data_structure.SnifferEventData{ + Timestamp: *Timestamp, + ContainerID: lineParts[1], + SyscallCategory: lineParts[2], + Ppid: lineParts[3], + Pid: lineParts[4], + SyscallType: lineParts[5], + Exe: lineParts[6], + Cmd: lineParts[7], + }, nil +} + +func (FalcoSnifferEngine *FalcoSnifferEngine) GetSnifferData(ebpfEngineDataChannel chan *accumulator_data_structure.SnifferEventData) { + for { + scanner := bufio.NewScanner(FalcoSnifferEngine.reader) + for scanner.Scan() { + fullLine := scanner.Text() + // logger.L().Info("", helpers.String("line ", fmt.Sprintf("%v", fullLine))) + if fullLine != "" { + data, err := parseLine(fullLine) + if err != nil { + continue + } + ebpfEngineDataChannel <- data + } + } + logger.L().Info("", helpers.String("CacheAccumulator accumulateSnifferData scanner.Err(): ", fmt.Sprintf("%v", scanner.Err()))) + } +} + +func (FalcoSnifferEngine *FalcoSnifferEngine) GetEbpfEngineError() error { + return FalcoSnifferEngine.cmd.Wait() +} diff --git a/core/ebpf_engine/sniffer_engine_interface.go b/core/ebpf_engine/sniffer_engine_interface.go new file mode 100644 index 0000000000..3b07927ed9 --- /dev/null +++ b/core/ebpf_engine/sniffer_engine_interface.go @@ -0,0 +1,7 @@ +package ebpf_engine + +type SnifferEngineClient interface { + Notify(event interface{}) + GetSnifferData() + GetEbpfEngineError() error +} diff --git a/core/validator/validator.go b/core/validator/validator.go new file mode 100644 index 0000000000..d13b2e0fd9 --- /dev/null +++ b/core/validator/validator.go @@ -0,0 +1,59 @@ +package validator + +import ( + "fmt" + "sniffer/core/config" + "syscall" + + logger "github.com/kubescape/go-logger" + "github.com/kubescape/go-logger/helpers" +) + +var minKernelVersion string + +func int8ToStr(arr []int8) string { + b := make([]byte, 0, len(arr)) + for _, v := range arr { + if v == 0x00 { + break + } + b = append(b, byte(v)) + } + return string(b) +} + +func checkKernelVersion() error { + var uname syscall.Utsname + if err := syscall.Uname(&uname); err != nil { + return fmt.Errorf("checkKernelVersion: fail to detect the kernel version") + } + kernelVersion := int8ToStr(uname.Sysname[:]) + "," + int8ToStr(uname.Release[:]) + "," + int8ToStr(uname.Version[:]) + logger.L().Debug("", helpers.String("kernelVersion: %s", kernelVersion)) + + if int8ToStr(uname.Release[:]) < minKernelVersion { + return fmt.Errorf("checkKernelVersion: the current kernel version %s is less than the min kernel version support %s", int8ToStr(uname.Release[:]), minKernelVersion) + } + + return nil +} + +func checkNodePrerequsits() error { + if config.IsFalcoEbpfEngine() { + minKernelVersion = "4.14" + } else { + minKernelVersion = "5.1" + } + err := checkKernelVersion() + if err != nil { + return err + } + return nil +} + +func CheckPrerequsits() error { + err := checkNodePrerequsits() + if err != nil { + return err + } + return nil +} diff --git a/core/validator/validator_test.go b/core/validator/validator_test.go new file mode 100644 index 0000000000..4da305e052 --- /dev/null +++ b/core/validator/validator_test.go @@ -0,0 +1,9 @@ +package validator + +// func TestCheckKernelVersion(test *testing.T) { +// minKernelVersion = "3.1" +// err := checkKernelVersion() +// if err != nil { +// test.Errorf("checkKernelVersion lower %v", err) +// } +// } diff --git a/go.mod b/go.mod new file mode 100644 index 0000000000..3f9b6e6fed --- /dev/null +++ b/go.mod @@ -0,0 +1,105 @@ +module sniffer + +go 1.19 + +replace github.com/slashben/kubescape-ebpf => /home/raziel/armo/go/src/kubescape-ebpf + +require ( + github.com/kubescape/go-logger v0.0.8 + github.com/slashben/kubescape-ebpf v0.1.1 +) + +require ( + cloud.google.com/go/compute/metadata v0.2.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.27 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/Microsoft/go-winio v0.5.1 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/cilium/ebpf v0.10.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker v20.10.17+incompatible // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-units v0.4.0 // indirect + github.com/emicklei/go-restful/v3 v3.8.0 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/swag v0.19.14 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.2.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect + github.com/inspektor-gadget/inspektor-gadget v0.12.1 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/mattn/go-colorable v0.1.9 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect + github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/s3rj1k/go-fanotify/fanotify v0.0.0-20210917134616-9c00a300bb7a // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + github.com/uptrace/opentelemetry-go-extra/otelutil v0.1.18 // indirect + github.com/uptrace/opentelemetry-go-extra/otelzap v0.1.18 // indirect + github.com/uptrace/uptrace-go v1.11.8 // indirect + go.opentelemetry.io/contrib/instrumentation/runtime v0.37.0 // indirect + go.opentelemetry.io/otel v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.11.2 // indirect + go.opentelemetry.io/otel/metric v0.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.11.2 // indirect + go.opentelemetry.io/otel/sdk/metric v0.34.0 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect + golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d // indirect + golang.org/x/net v0.5.0 // indirect + golang.org/x/oauth2 v0.3.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/term v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 // indirect + google.golang.org/grpc v1.51.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.25.4 // indirect + k8s.io/apimachinery v0.25.4 // indirect + k8s.io/client-go v0.25.4 // indirect + k8s.io/cri-api v0.23.1 // indirect + k8s.io/klog/v2 v2.70.1 // indirect + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000000..ac79eebef0 --- /dev/null +++ b/go.sum @@ -0,0 +1,666 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute/metadata v0.2.0 h1:nBbNSZyDpkNlo3DepaaLKVuO7ClyifSAmNloSCZrHnQ= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.10.0 h1:nk5HPMeoBXtOzbkZBWym+ZWq1GIiHUsBFXxwewXAHLQ= +github.com/cilium/ebpf v0.10.0/go.mod h1:DPiVdY/kT534dgc9ERmvP8mWA+9gvwgKfRvk4nNWnoE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= +github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 h1:1JYBfzqrWPcCclBwxFCPAou9n+q86mfnu7NAeHfte7A= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0/go.mod h1:YDZoGHuwE+ov0c8smSH49WLF3F2LaWnYYuDVd+EWrc0= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inspektor-gadget/inspektor-gadget v0.12.1 h1:rJDc86ls4J3N4e9eWmiOSsIGt35ZBxzQoa9WBEQxkr8= +github.com/inspektor-gadget/inspektor-gadget v0.12.1/go.mod h1:nHHmmKxDgVoKm8ePfG2Z2OP2AZBCllwgwDrhfibcbDE= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kubescape/go-logger v0.0.8 h1:YHC5WmOy2AegJkUeuEw93hssa5VcgM55EkzWbaPviVs= +github.com/kubescape/go-logger v0.0.8/go.mod h1:FOCfZgMK/QC2CY1rJnzb72x29PAjjlzYmw19SUe6MEI= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec= +github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/s3rj1k/go-fanotify/fanotify v0.0.0-20210917134616-9c00a300bb7a h1:np2nR32/A/VcOG9Hn+IOPA8kMk1gbBzK5LpSsgq5pJI= +github.com/s3rj1k/go-fanotify/fanotify v0.0.0-20210917134616-9c00a300bb7a/go.mod h1:wiP6GQ2T378F+YIyuNw7yXtBxJZR+fqrrn1Z6UHZi0Q= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/uptrace/opentelemetry-go-extra/otelutil v0.1.18 h1:zsEhOhAfpNejDoJQi0gLsnN1bf3x2h7dTF7XNS2MJPE= +github.com/uptrace/opentelemetry-go-extra/otelutil v0.1.18/go.mod h1:7le+eIjcOjMMZ7QJqmzZFxcmZNvIK1qBdsYkHzaYuMU= +github.com/uptrace/opentelemetry-go-extra/otelzap v0.1.18 h1:1M7tdDwIAXimqH1Eo+Re9zwji681VVI6oNsVabXO4lA= +github.com/uptrace/opentelemetry-go-extra/otelzap v0.1.18/go.mod h1:Ux2p9lgCZv1xZpyphwEbs/lzvwQausHmini8crmf8Eg= +github.com/uptrace/uptrace-go v1.11.8 h1:ygxM4FGmqoN1M5YVvnJ3ZKO+fZBiKzhkoKTEnZV38cY= +github.com/uptrace/uptrace-go v1.11.8/go.mod h1:LXkrmQ18ZrF6SdovJnxG29hcWGtRxnE1zfSw1AU3Uwo= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/contrib/instrumentation/runtime v0.37.0 h1:qQFY3137vMggSJH0SNspUnmFuNB5grGufD736hycOtI= +go.opentelemetry.io/contrib/instrumentation/runtime v0.37.0/go.mod h1:TxACGypA1hiXE9Gy8gNFXgBO2AeiaihNLOSvF5+GOKk= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0/go.mod h1:4+x3i62TEegDHuzNva0bMcAN8oUi5w4liGb1d/VgPYo= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0/go.mod h1:3x00m9exjIbhK+zTO4MsCSlfbVmgvLP0wjDgDKa/8bw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 h1:fqR1kli93643au1RKo0Uma3d2aPQKT+WBKfTSBaKbOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2/go.mod h1:5Qn6qvgkMsLDX+sYK64rHb1FPhpn0UtxF+ouX1uhyJE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 h1:ERwKPn9Aer7Gxsc0+ZlutlH1bEEAUXAUhqm3Y45ABbk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2/go.mod h1:jWZUM2MWhWCJ9J9xVbRx7tzK1mXKpAlze4CeulycwVY= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.11.2 h1:BhEVgvuE1NWLLuMLvC6sif791F45KFHi5GhOs1KunZU= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.11.2/go.mod h1:bx//lU66dPzNT+Y0hHA12ciKoMOH9iixEwCqC1OeQWQ= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= +go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d h1:vtUKgx8dahOomfFzLREU8nSv25YHnTgLBn4rDnWZdU0= +golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 h1:3wPBShTLWQnEkZ9VW/HZZ8zT/9LLtleBtq7l8SKtJIA= +google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= +k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= +k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= +k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= +k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= +k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= +k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/install_dependencies.sh b/install_dependencies.sh new file mode 100755 index 0000000000..e12e1d9f51 --- /dev/null +++ b/install_dependencies.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +sudo apt install git curl clang-12 -y + +mkdir dependencies + +git clone git@github.com:rcohencyberarmor/kubescape-ebpf-engine.git dependencies/kubescape_ebpf_engine_sc +cd dependencies/kubescape_ebpf_engine_sc +./install_dependencies.sh +mkdir build && cd ./build +cmake .. +make all +cd ../../../ +cp dependencies/kubescape_ebpf_engine_sc/dependencies/falco-libs/build/driver/bpf/probe.o ./resources/ebpf/kernel_obj.o +cp dependencies/kubescape_ebpf_engine_sc/build/main ./resources/ebpf/sniffer diff --git a/main.go b/main.go new file mode 100644 index 0000000000..b57ba3650f --- /dev/null +++ b/main.go @@ -0,0 +1,71 @@ +package main + +import ( + "fmt" + "os" + + "sniffer/core/accumulator" + "sniffer/core/config" + "sniffer/core/validator" + + logger "github.com/kubescape/go-logger" + "github.com/kubescape/go-logger/helpers" +) + +func waitOnCacheAccumulatorProccessErrorCode(cacheAccumulatorErrorChan chan error) { + err := <-cacheAccumulatorErrorChan + if err != nil { + logger.L().Error("", helpers.String("Global Sniffer failed on error ", fmt.Sprintf("%v", err))) + os.Exit(1) + } +} + +func startingOperations() error { + // if config.IsRelaventCVEServiceEnabled() { + // err := vuln.DownloadVulnDB() + // if err != nil { + // return err + // } + // } + // err := DB.CreateCRDs() + // if err != nil { + // return err + // } + return nil +} + +func main() { + + err := config.ParseConfiguration() + if err != nil { + logger.L().Fatal("", helpers.String("error during parsing configuration: ", fmt.Sprintf("%v", err))) + } + + err = validator.CheckPrerequsits() + if err != nil { + logger.L().Fatal("", helpers.String("error during check prerequisites: ", fmt.Sprintf("%v", err))) + } + + err = startingOperations() + if err != nil { + logger.L().Fatal("", helpers.String("error during starting operations: ", fmt.Sprintf("%v", err))) + } + + cacheAccumulatorErrorChan := make(chan error) + cachAccumulator := accumulator.CreateCacheAccumulator(10) + err = cachAccumulator.StartCacheAccumalator(cacheAccumulatorErrorChan, config.GetSyscallFilter(), false, false) + if err != nil { + logger.L().Fatal("", helpers.String("fail to create cache watcher ", fmt.Sprintf("%v", err))) + } + go waitOnCacheAccumulatorProccessErrorCode(cacheAccumulatorErrorChan) + + fmt.Scanln() + // containerWatcher, err := k8s_watcher.CreateContainerWatcher() + // if err != nil { + // log.Fatalf("fail to create container watcher %v", err) + // } + // err = containerWatcher.StartWatchingOnNewContainers() + // if err != nil { + // log.Fatalf("StartWatchingOnNewContainers fail on error %v", err) + // } +} From 7e6110758463150acda53432fe1bb940024b99de Mon Sep 17 00:00:00 2001 From: rcohencyberarmor Date: Thu, 2 Feb 2023 16:39:47 +0200 Subject: [PATCH 02/18] readme correction Signed-off-by: rcohen --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7c52af1deb..bf564233f9 100644 --- a/README.md +++ b/README.md @@ -23,5 +23,5 @@ minikube start 4. Run Sneeffer: ``` -sudo SNEEFFER_CONF_FILE_PATH=./configuration/SneefferConfigurationFile.txt HOME= ./kubescape_sneeffer +sudo SNEEFFER_CONF_FILE_PATH=./configuration/SneefferConfigurationFile.txt HOME= ./sniffer ``` \ No newline at end of file From 88cc335f46579ba950aa65ff2c5d333e8263ddd5 Mon Sep 17 00:00:00 2001 From: rcohencyberarmor Date: Sun, 5 Feb 2023 16:10:20 +0200 Subject: [PATCH 03/18] interfaces Signed-off-by: rcohen --- .gitignore | 3 +- cmd/main.go | 69 ++++++ core/accumulator/accumulator.go | 234 ------------------ .../data_sturcture.go | 14 -- core/config/config.go | 150 ----------- core/config/config_test.go | 40 --- core/ebpf_engine/cilium_sniffer_engine.go | 85 ------- core/ebpf_engine/falco_sniffer_engine.go | 200 --------------- core/ebpf_engine/sniffer_engine_interface.go | 7 - core/validator/validator.go | 59 ----- core/validator/validator_test.go | 9 - go.mod | 2 - go.sum | 2 + internal/config/config_interface.go | 17 ++ internal/validator/validator_interface.go | 5 + internal/version/version_interface.go | 6 + main.go | 71 ------ pkg/accumulator/accumulator_interface.go | 7 + .../container_aggregator_interface.go | 7 + pkg/conthandler/container_main_handler.go | 5 + .../container_watcher_interface.go | 5 + pkg/ebpfeng/ebpf_engine_interface.go | 7 + pkg/ebpfev/event_interface.go | 14 ++ pkg/sbom/go.mod | 3 + pkg/sbom/sbom_interface.go | 7 + 25 files changed, 156 insertions(+), 872 deletions(-) create mode 100644 cmd/main.go delete mode 100644 core/accumulator/accumulator.go delete mode 100644 core/accumulator_data_structure/data_sturcture.go delete mode 100644 core/config/config.go delete mode 100644 core/config/config_test.go delete mode 100644 core/ebpf_engine/cilium_sniffer_engine.go delete mode 100644 core/ebpf_engine/falco_sniffer_engine.go delete mode 100644 core/ebpf_engine/sniffer_engine_interface.go delete mode 100644 core/validator/validator.go delete mode 100644 core/validator/validator_test.go create mode 100644 internal/config/config_interface.go create mode 100644 internal/validator/validator_interface.go create mode 100644 internal/version/version_interface.go delete mode 100644 main.go create mode 100644 pkg/accumulator/accumulator_interface.go create mode 100644 pkg/conthandler/container_aggregator_interface.go create mode 100644 pkg/conthandler/container_main_handler.go create mode 100644 pkg/conthandler/container_watcher_interface.go create mode 100644 pkg/ebpfeng/ebpf_engine_interface.go create mode 100644 pkg/ebpfev/event_interface.go create mode 100644 pkg/sbom/go.mod create mode 100644 pkg/sbom/sbom_interface.go diff --git a/.gitignore b/.gitignore index ab62e12a48..161eb1631a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -sniffer \ No newline at end of file +sniffer +temp \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000000..f7313aded0 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,69 @@ +package cmd + +import ( + "fmt" + "os" + "sniffer/internal/config" + "sniffer/internal/validator" + "sniffer/internal/version" + "sniffer/pkg/accumulator" + "sniffer/pkg/conthandler" + + logger "github.com/kubescape/go-logger" + helpers "github.com/kubescape/go-logger/helpers" +) + +func waitOnCacheAccumulatorErrorCode(cacheAccumulatorErrorChan chan error) { + err := <-cacheAccumulatorErrorChan + if err != nil { + logger.L().Error("", helpers.String("Global Sniffer failed on error ", fmt.Sprintf("%v", err))) + os.Exit(1) + } +} + +func startingOperations() error { + return nil +} + +func main() { + configData, err := config.GetConfigurutionData() + if err != nil { + logger.L().Fatal("", helpers.String("error during getting configuration data: ", fmt.Sprintf("%v", err))) + } + + err = config.ParseConfiguration(configData) + if err != nil { + logger.L().Fatal("", helpers.String("error during parsing configuration: ", fmt.Sprintf("%v", err))) + } + + err = validator.CheckPrerequsits() + if err != nil { + logger.L().Fatal("", helpers.String("error during check prerequisites: ", fmt.Sprintf("%v", err))) + } + + err = version.GetVersion() + if err != nil { + logger.L().Fatal("", helpers.String("error during check prerequisites: ", fmt.Sprintf("%v", err))) + } + logger.L().Info("", helpers.String("sniffer version is: ", fmt.Sprintf("%v", err))) + + err = startingOperations() + if err != nil { + logger.L().Fatal("", helpers.String("error during starting operations: ", fmt.Sprintf("%v", err))) + } + + cacheAccumulatorErrorChan := make(chan error) + cachAccumulator := accumulator.CreateCacheAccumulator() + err = cachAccumulator.StartCacheAccumulator() + if err != nil { + logger.L().Fatal("", helpers.String("fail to create cache watcher ", fmt.Sprintf("%v", err))) + } + go waitOnCacheAccumulatorErrorCode(cacheAccumulatorErrorChan) + + mainHandler := conthandler.CreateMainHandler() + if err != nil { + logger.L().Fatal("", helpers.String("fail to create cache watcher ", fmt.Sprintf("%v", err))) + } + + mainHandler.StartMainHandler() +} diff --git a/core/accumulator/accumulator.go b/core/accumulator/accumulator.go deleted file mode 100644 index 8ff56b2254..0000000000 --- a/core/accumulator/accumulator.go +++ /dev/null @@ -1,234 +0,0 @@ -package accumulator - -import ( - "fmt" - "strings" - "sync" - "time" - - "sniffer/core/accumulator_data_structure" - "sniffer/core/config" - "sniffer/core/ebpf_engine" - - logger "github.com/kubescape/go-logger" - "github.com/kubescape/go-logger/helpers" -) - -type AccumulatorInterface interface { - accumulateSnifferData() -} - -type containersAccumalator struct { - accumultorDataPerContainer map[string]chan accumulator_data_structure.SnifferEventData - registerContainerState bool - unregisterContainerState bool - registerMutex sync.Mutex -} - -type CacheAccumulator struct { - accumultorData []map[string][]accumulator_data_structure.SnifferEventData - syncReaderWriterAccumulatorData sync.Mutex - firstMapKeysOfAccumultorData []string - CacheAccumulatorSize int - mainDataChannel chan *accumulator_data_structure.SnifferEventData - containersData containersAccumalator - falcoEbpfEngine ebpf_engine.FalcoSnifferEngine - ciliumEbpfEngine ebpf_engine.CiliumSnifferEngine -} - -type ContainerAccumulator struct { - dataChannel chan accumulator_data_structure.SnifferEventData - containerID string -} - -var cacheAccumuator *CacheAccumulator - -func CreateCacheAccumulator(CacheAccumulatorSize int) *CacheAccumulator { - cacheAccumuator = &CacheAccumulator{ - CacheAccumulatorSize: CacheAccumulatorSize, - accumultorData: make([]map[string][]accumulator_data_structure.SnifferEventData, CacheAccumulatorSize), - firstMapKeysOfAccumultorData: make([]string, CacheAccumulatorSize), - mainDataChannel: make(chan *accumulator_data_structure.SnifferEventData), - containersData: containersAccumalator{ - accumultorDataPerContainer: make(map[string]chan accumulator_data_structure.SnifferEventData), - registerContainerState: false, - unregisterContainerState: false, - }, - } - - return cacheAccumuator -} - -func CreateContainerAccumulator(containerID string, dataChannel chan accumulator_data_structure.SnifferEventData) *ContainerAccumulator { - return &ContainerAccumulator{ - dataChannel: dataChannel, - containerID: containerID, - } -} - -func (acc *CacheAccumulator) findIndexByTimestampWhenAccumultorDataIsFull(t time.Time) (int, bool) { - index := 0 - minTimestamp := acc.accumultorData[0][acc.firstMapKeysOfAccumultorData[0]][0].Timestamp - for i := range acc.accumultorData { - if i == 0 { - continue - } - if acc.accumultorData[i][acc.firstMapKeysOfAccumultorData[i]][0].Timestamp.Before(minTimestamp) { - minTimestamp = acc.accumultorData[i][acc.firstMapKeysOfAccumultorData[i]][0].Timestamp - index = i - } - } - return index, true -} - -func (acc *CacheAccumulator) findIndexByTimestamp(t time.Time) (int, bool) { - for i := range acc.accumultorData { - if len(acc.accumultorData[i]) == 0 { - return i, true - } - firstKey := acc.firstMapKeysOfAccumultorData[i] - if t.Sub((acc.accumultorData[i])[firstKey][0].Timestamp) < time.Second { - return i, false - } - } - index, createNewMap := acc.findIndexByTimestampWhenAccumultorDataIsFull(t) - if index != -1 { - return index, createNewMap - } - // logger.L().Debug("findIndexByTimestamp: failed to find index, sniffer data will not saved") - return -1, false -} - -func (acc *CacheAccumulator) accumulateSnifferData() { - for { - metadataAcc := <-acc.mainDataChannel - logger.L().Info("metadataAcc ", helpers.String("", fmt.Sprintf("%v", metadataAcc))) - if strings.Contains(metadataAcc.ContainerID, config.GetMyContainerID()) { - continue - } - if metadataAcc != nil { - if metadataAcc.Cmd == "drop event occured\n" { - if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { - acc.containersData.registerMutex.Lock() - } - if len(acc.containersData.accumultorDataPerContainer) > 0 { - for contID := range acc.containersData.accumultorDataPerContainer { - acc.containersData.accumultorDataPerContainer[contID] <- *metadataAcc - } - } - if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { - acc.containersData.registerMutex.Unlock() - } - } else { - index, createNewMap := acc.findIndexByTimestamp(metadataAcc.Timestamp) - if index == -1 { - // logger.L().Debug("metadataAcc %v\n", metadataAcc) - continue - } - acc.syncReaderWriterAccumulatorData.Lock() - if createNewMap { - slice := make([]accumulator_data_structure.SnifferEventData, 0) - m := make(map[string][]accumulator_data_structure.SnifferEventData) - m[metadataAcc.ContainerID] = slice - acc.accumultorData[index] = m - acc.firstMapKeysOfAccumultorData[index] = metadataAcc.ContainerID - } - a := acc.accumultorData[index] - a[metadataAcc.ContainerID] = append(a[metadataAcc.ContainerID], *metadataAcc) - acc.accumultorData[index][metadataAcc.ContainerID] = append(acc.accumultorData[index][metadataAcc.ContainerID], *metadataAcc) - acc.syncReaderWriterAccumulatorData.Unlock() - - if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { - acc.containersData.registerMutex.Lock() - } - if containerAccumalatorChan, exist := acc.containersData.accumultorDataPerContainer[metadataAcc.ContainerID]; exist { - containerAccumalatorChan <- *metadataAcc - } - if acc.containersData.unregisterContainerState || acc.containersData.registerContainerState { - acc.containersData.registerMutex.Unlock() - } - } - } - } -} - -func (acc *CacheAccumulator) getSnifferData() { - if config.IsFalcoEbpfEngine() { - acc.falcoEbpfEngine.GetSnifferData(acc.mainDataChannel) - } else { - acc.ciliumEbpfEngine.GetSnifferData(acc.mainDataChannel) - } -} - -func (acc *CacheAccumulator) getEbpfEngineError(errChan chan error) { - if config.IsFalcoEbpfEngine() { - errChan <- acc.falcoEbpfEngine.GetEbpfEngineError() - } else { - errChan <- acc.ciliumEbpfEngine.GetEbpfEngineError() - } -} - -func (acc *CacheAccumulator) StartCacheAccumalator(errChan chan error, syscallFilter []string, includeHost bool, sniffMainThreadOnly bool) error { - if config.IsFalcoEbpfEngine() { - acc.falcoEbpfEngine = *ebpf_engine.CreateFalcoSnifferEngine(syscallFilter, includeHost, sniffMainThreadOnly, "") - err := acc.falcoEbpfEngine.StartSnifferEngine() - if err != nil { - logger.L().Error("fail to create sniffer agent process\n") - return err - } - } else { - acc.ciliumEbpfEngine = *ebpf_engine.CreateCiliumSnifferEngine() - err := acc.ciliumEbpfEngine.StartSnifferEngine() - if err != nil { - logger.L().Error("fail to create sniffer agent process") - return err - } - } - - go acc.accumulateSnifferData() - go acc.getSnifferData() - go acc.getEbpfEngineError(errChan) - return nil -} - -func (acc *ContainerAccumulator) registerContainerAccumalator() { - cacheAccumuator.containersData.registerContainerState = true - cacheAccumuator.containersData.registerMutex.Lock() - cacheAccumuator.containersData.accumultorDataPerContainer[acc.containerID] = acc.dataChannel - cacheAccumuator.containersData.registerMutex.Unlock() - cacheAccumuator.containersData.registerContainerState = false -} - -func (acc *ContainerAccumulator) unregisterContainerAccumalator() { - cacheAccumuator.containersData.unregisterContainerState = true - cacheAccumuator.containersData.registerMutex.Lock() - delete(cacheAccumuator.containersData.accumultorDataPerContainer, acc.containerID) - cacheAccumuator.containersData.registerMutex.Unlock() - cacheAccumuator.containersData.unregisterContainerState = false -} - -func (acc *ContainerAccumulator) StartContainerAccumalator() { - acc.registerContainerAccumalator() -} - -func (acc *ContainerAccumulator) StopWatching() { - acc.unregisterContainerAccumalator() -} - -func GetCacheAccumaltor() *CacheAccumulator { - return cacheAccumuator -} - -func (acc *CacheAccumulator) AccumulatorByContainerID(aggregationData *[]accumulator_data_structure.SnifferEventData, containerID string, containerStartTime interface{}) { - for i := range acc.accumultorData { - logger.L().Debug("", helpers.String("index ", fmt.Sprintf("%d:%v", i, acc.accumultorData[i]))) - } - for i := range acc.accumultorData { - for j := range acc.accumultorData[i][containerID] { - acc.syncReaderWriterAccumulatorData.Lock() - *aggregationData = append(*aggregationData, acc.accumultorData[i][containerID][j]) - acc.syncReaderWriterAccumulatorData.Unlock() - } - } - logger.L().Debug("data ", helpers.String("", fmt.Sprintf("%v", aggregationData))) -} diff --git a/core/accumulator_data_structure/data_sturcture.go b/core/accumulator_data_structure/data_sturcture.go deleted file mode 100644 index abcf3aff3d..0000000000 --- a/core/accumulator_data_structure/data_sturcture.go +++ /dev/null @@ -1,14 +0,0 @@ -package accumulator_data_structure - -import "time" - -type SnifferEventData struct { - Timestamp time.Time - ContainerID string - SyscallCategory string - Ppid string - Pid string - SyscallType string - Exe string - Cmd string -} diff --git a/core/config/config.go b/core/config/config.go deleted file mode 100644 index d00c138688..0000000000 --- a/core/config/config.go +++ /dev/null @@ -1,150 +0,0 @@ -package config - -import ( - "bufio" - "fmt" - "log" - "os" - "strings" - - logger "github.com/kubescape/go-logger" -) - -const ( - RELAVENT_CVES_SERVICE = "RELAVENT_CVES_SERVICE" - CONTAINER_PROFILING_SERVICE = "CONTAINER_PROFILING_SERVICE" -) - -const ( - EBPF_ENGINE_FALCO = "falco" - EBPF_ENGINE_CILIUM = "cilium" -) - -var myContainerID string - -var sycscallFilterForRelaventCVES []string -var manadatoryConfigurationVars []string -var relaventCVEService bool -var ebpfEngine string - -func init() { - manadatoryConfigurationVars = append(manadatoryConfigurationVars, "myNode") - relaventCVEService = false - myContainerID = "111111111111111111" -} - -func parseConfigurationFile(configurationFilePath string) error { - readFile, err := os.Open(configurationFilePath) - if err != nil { - return err - } - - fileScanner := bufio.NewScanner(readFile) - fileScanner.Split(bufio.ScanLines) - for fileScanner.Scan() { - line := fileScanner.Text() - confData := strings.Split(line, "=") - if confData[0] == line { - log.Printf("ParseConfigurationFile: seperator = is not exist in configuration file line: %s\n", line) - continue - } - if os.Setenv(confData[0], confData[1]) != nil { - log.Printf("ParseConfigurationFile: fail to set env %s=%s", confData[0], confData[1]) - } - } - readFile.Close() - return nil -} - -func validateMandatoryConfigurationn() error { - for i := range manadatoryConfigurationVars { - if _, exist := os.LookupEnv(manadatoryConfigurationVars[i]); !exist { - return fmt.Errorf("validateMandatoryConfigurationn: %s not exist", manadatoryConfigurationVars[i]) - } - } - return nil -} - -func ebpfEngineConfig() bool { - val, exist := os.LookupEnv("ebpfEngine") - if exist { - if val != EBPF_ENGINE_FALCO && val != EBPF_ENGINE_CILIUM { - return false - } - ebpfEngine = val - } else { - ebpfEngine = EBPF_ENGINE_FALCO - } - if ebpfEngine != EBPF_ENGINE_FALCO { - manadatoryConfigurationVars = append(manadatoryConfigurationVars, "kernelObjPath") - manadatoryConfigurationVars = append(manadatoryConfigurationVars, "snifferEngineLoaderPath") - sycscallFilterForRelaventCVES = append(sycscallFilterForRelaventCVES, []string{"execve", "execveat", "open", "openat"}...) - } - return true -} - -func servicesConfig() error { - serviceExist := false - - val, exist := os.LookupEnv("enableRelaventCVEsService") - if exist { - if val == "true" || val == "True" { - relaventCVEService = true - serviceExist = true - logger.L().Info("sneeffer service find relavent CVEs is enabled\n") - } - } - if !serviceExist { - return fmt.Errorf("no service is configured to use, please look in the configuration file that one of the services mark as true or True") - } - return nil -} - -func afterConfigurationParserActions() error { - ebpfEngineConfig() - return servicesConfig() -} - -func ParseConfiguration() error { - configurationFilePath, exist := os.LookupEnv("SNEEFFER_CONF_FILE_PATH") - if !exist { - return fmt.Errorf("env var SNEEFFER_CONF_FILE_PATH is not exist") - } - - err := parseConfigurationFile(configurationFilePath) - if err != nil { - return err - } - - err = validateMandatoryConfigurationn() - if err != nil { - return err - } - - err = afterConfigurationParserActions() - if err != nil { - return err - } - - return nil -} - -func GetSyscallFilter() []string { - return sycscallFilterForRelaventCVES -} - -func IsRelaventCVEServiceEnabled() bool { - return relaventCVEService -} - -func IsFalcoEbpfEngine() bool { - return ebpfEngine == EBPF_ENGINE_FALCO -} - -func SetMyContainerID(ContainerID string) { - myContainerID = ContainerID -} - -func GetMyContainerID() string { - return myContainerID -} diff --git a/core/config/config_test.go b/core/config/config_test.go deleted file mode 100644 index 01b8564ac9..0000000000 --- a/core/config/config_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package config - -import ( - "os" - "testing" -) - -func TestGetMyContainerID(test *testing.T) { - if GetMyContainerID() != "111111111111111111" { - test.Errorf("TestGetMyContainerID") - } -} - -func TestConfigurationFile(test *testing.T) { - wd, err := os.Getwd() - if err != nil { - test.Errorf("ParseConfigurationFile os.Getwd() %v", err) - } - if err := parseConfigurationFile(wd + "/../../configuration/SneefferConfigurationFile.txt"); err != nil { - test.Errorf("ParseConfigurationFile err %v", err) - } - if err := validateMandatoryConfigurationn(); err != nil { - test.Errorf("ParseConfigurationFile err %v", err) - } -} - -func TestFullTestConfigurationFile(test *testing.T) { - wd, err := os.Getwd() - if err != nil { - test.Errorf("TestFullTestConfigurationFile os.Getwd() %v", err) - } - err = os.Setenv("SNEEFFER_CONF_FILE_PATH", wd+"/../../configuration/SneefferConfigurationFile.txt") - if err != nil { - test.Errorf("TestFullTestConfigurationFile os.Setenv() %v", err) - } - err = ParseConfiguration() - if err != nil { - test.Errorf("TestFullTestConfigurationFile ParseConfiguration %v", err) - } -} diff --git a/core/ebpf_engine/cilium_sniffer_engine.go b/core/ebpf_engine/cilium_sniffer_engine.go deleted file mode 100644 index 04044cfaa0..0000000000 --- a/core/ebpf_engine/cilium_sniffer_engine.go +++ /dev/null @@ -1,85 +0,0 @@ -package ebpf_engine - -import ( - "strconv" - "time" - - "sniffer/core/accumulator_data_structure" - - "github.com/slashben/kubescape-ebpf/core/common" - fileaccessmonitor "github.com/slashben/kubescape-ebpf/core/file-access-monitor" -) - -type ciliumEbpfEngineClient struct { - eventChannel chan fileaccessmonitor.FileActivityEvent -} - -type CiliumSnifferEngine struct { - ebpfEngineClient *fileaccessmonitor.FileActivityMonitor - ciliumEbpfEngineClientData ciliumEbpfEngineClient -} - -func CreateCiliumSnifferEngine() *CiliumSnifferEngine { - client := ciliumEbpfEngineClient{ - eventChannel: make(chan fileaccessmonitor.FileActivityEvent), - } - return &CiliumSnifferEngine{ - ebpfEngineClient: fileaccessmonitor.CreateFileActivityMonitor(&client), - ciliumEbpfEngineClientData: client, - } -} - -func (ciliumSnifferEngine *CiliumSnifferEngine) StartSnifferEngine() error { - ciliumSnifferEngine.ebpfEngineClient.Start() - return nil -} - -func parseTime(t uint64) (*time.Time, error) { - time_str, err := strconv.ParseInt(strconv.FormatUint(t, 10), 10, 64) - if err != nil { - return nil, err - } - tm := time.Unix(time_str, 0) - return &tm, nil -} - -func parseEvent(event fileaccessmonitor.FileActivityEvent) (*accumulator_data_structure.SnifferEventData, error) { - cid, err := common.GetContainerIdForNsMntId(event.NsMntId) - if err != nil { - return nil, err - } - - t, err := parseTime(event.Timestamp) - if err != nil { - return nil, err - } - - return &accumulator_data_structure.SnifferEventData{ - Timestamp: *t, - ContainerID: cid[:12], - SyscallCategory: "", - SyscallType: event.File, - Ppid: "", - Pid: strconv.Itoa(event.Pid), - Exe: event.Comm, - Cmd: "", - }, nil -} - -func (ciliumSnifferEngine *CiliumSnifferEngine) GetSnifferData(ebpfEngineDataChannel chan *accumulator_data_structure.SnifferEventData) { - for { - data, err := parseEvent(<-ciliumSnifferEngine.ciliumEbpfEngineClientData.eventChannel) - if err != nil { - continue - } - ebpfEngineDataChannel <- data - } -} - -func (client *ciliumEbpfEngineClient) Notify(event fileaccessmonitor.FileActivityEvent) { - client.eventChannel <- event -} - -func (ciliumSnifferEngine *CiliumSnifferEngine) GetEbpfEngineError() error { - return nil -} diff --git a/core/ebpf_engine/falco_sniffer_engine.go b/core/ebpf_engine/falco_sniffer_engine.go deleted file mode 100644 index ab1e8463e1..0000000000 --- a/core/ebpf_engine/falco_sniffer_engine.go +++ /dev/null @@ -1,200 +0,0 @@ -package ebpf_engine - -import ( - "bufio" - "fmt" - "io" - "os" - "os/exec" - "strconv" - "strings" - "time" - - "sniffer/core/accumulator_data_structure" - - logger "github.com/kubescape/go-logger" - "github.com/kubescape/go-logger/helpers" -) - -type FalcoSnifferEngine struct { - kernelObjPath string - syscallFilterString string - includeHost bool - sniffMainThreadOnly bool - containerID string - reader io.ReadCloser - pid int - cmd *exec.Cmd -} - -func createSyscallFilterString(syscallFilter []string) string { - filterString := "" - - for i := range syscallFilter { - filterString += "evt.type=" + syscallFilter[i] - if i < len(syscallFilter)-1 { - filterString += " or " - } - } - return filterString -} - -func CreateFalcoSnifferEngine(syscallFilter []string, includeHost bool, sniffMainThreadOnly bool, containerID string) *FalcoSnifferEngine { - kernelObjPath := os.Getenv("kernelObjPath") - syscallFilterString := createSyscallFilterString(syscallFilter) - - return &FalcoSnifferEngine{ - kernelObjPath: kernelObjPath, - syscallFilterString: syscallFilterString, - includeHost: includeHost, - sniffMainThreadOnly: sniffMainThreadOnly, - containerID: containerID, - } -} - -func (FalcoSnifferEngine *FalcoSnifferEngine) snifferEngineCMDWithParams() []string { - var fullSnifferEngineCMD []string - - if FalcoSnifferEngine.syscallFilterString != "" { - fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-f") - fullSnifferEngineCMD = append(fullSnifferEngineCMD, FalcoSnifferEngine.syscallFilterString) - } - if FalcoSnifferEngine.includeHost { - fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-o") - } - if FalcoSnifferEngine.sniffMainThreadOnly { - fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-m") - } - if FalcoSnifferEngine.containerID != "" { - fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-c") - fullSnifferEngineCMD = append(fullSnifferEngineCMD, FalcoSnifferEngine.containerID) - } - fullSnifferEngineCMD = append(fullSnifferEngineCMD, "-e") - fullSnifferEngineCMD = append(fullSnifferEngineCMD, FalcoSnifferEngine.kernelObjPath) - - return fullSnifferEngineCMD -} - -func (FalcoSnifferEngine *FalcoSnifferEngine) StartSnifferEngine() error { - snifferEngineLoaderPath := os.Getenv("snifferEngineLoaderPath") - if snifferEngineLoaderPath == "" { - return fmt.Errorf("startSnifferEngine: the env var snifferEngineLoaderPath is not set") - } - - fullSnifferEngineCMD := FalcoSnifferEngine.snifferEngineCMDWithParams() - cmd := exec.Command(snifferEngineLoaderPath, fullSnifferEngineCMD...) - logger.L().Debug("", helpers.String("cmd.Args %v", fmt.Sprintf("%v", cmd.Args))) - stdout, err := cmd.StdoutPipe() - if err != nil { - return err - } - err = cmd.Start() - if err != nil { - logger.L().Debug("", helpers.String("StartSnifferEngine: fail with err %v", fmt.Sprintf("%v", err))) - return err - } - FalcoSnifferEngine.cmd = cmd - FalcoSnifferEngine.reader = stdout - FalcoSnifferEngine.pid = cmd.Process.Pid - return nil -} - -func convertStrigTimeToTimeOBJ(Timestamp string) (*time.Time, error) { - dateAndTime := strings.Split(Timestamp, "T") - date := strings.Split(dateAndTime[0], "-") - tm := strings.Split(dateAndTime[1], ":") - - year, err := strconv.Atoi(date[0]) - if err != nil { - logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) - return nil, err - } - month, err := strconv.Atoi(date[1]) - if err != nil { - logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) - return nil, err - } - day, err := strconv.Atoi(date[2]) - if err != nil { - logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) - return nil, err - } - - hour, err := strconv.Atoi(tm[0]) - if err != nil { - logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) - return nil, err - } - minute, err := strconv.Atoi(tm[1]) - if err != nil { - logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) - return nil, err - } - seconds := strings.Split(tm[2], "+") - secs := strings.Split(seconds[0], ".") - - sec, err := strconv.Atoi(secs[0]) - if err != nil { - logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) - return nil, err - } - - nsec, err := strconv.Atoi(secs[1]) - if err != nil { - logger.L().Error("", helpers.String("fail strconv %v", fmt.Sprintf("%v", err))) - return nil, err - } - - t := time.Date(year, time.Month(month), day, hour, minute, sec, nsec, time.Now().Location()) - return &t, nil -} - -func parseLine(line string) (*accumulator_data_structure.SnifferEventData, error) { - if strings.Contains(line, "drop event occured") { - return &accumulator_data_structure.SnifferEventData{ - Cmd: "drop event occured\n", - }, nil - } - lineParts := strings.Split(line, "]::[") - if len(lineParts) != 8 { - logger.L().Error("", helpers.String("we have got unknown line format, line is ", fmt.Sprintf("%s", line))) - return nil, fmt.Errorf("we have got unknown line format, line is %s", line) - } - Timestamp, err := convertStrigTimeToTimeOBJ(lineParts[0]) - if err != nil { - logger.L().Error("", helpers.String("parseLine Timestamp fail line is ", fmt.Sprintf("%s, err %v", line, err))) - return nil, fmt.Errorf("parseLine Timestamp fail line is %s, err %v", line, err) - } - return &accumulator_data_structure.SnifferEventData{ - Timestamp: *Timestamp, - ContainerID: lineParts[1], - SyscallCategory: lineParts[2], - Ppid: lineParts[3], - Pid: lineParts[4], - SyscallType: lineParts[5], - Exe: lineParts[6], - Cmd: lineParts[7], - }, nil -} - -func (FalcoSnifferEngine *FalcoSnifferEngine) GetSnifferData(ebpfEngineDataChannel chan *accumulator_data_structure.SnifferEventData) { - for { - scanner := bufio.NewScanner(FalcoSnifferEngine.reader) - for scanner.Scan() { - fullLine := scanner.Text() - // logger.L().Info("", helpers.String("line ", fmt.Sprintf("%v", fullLine))) - if fullLine != "" { - data, err := parseLine(fullLine) - if err != nil { - continue - } - ebpfEngineDataChannel <- data - } - } - logger.L().Info("", helpers.String("CacheAccumulator accumulateSnifferData scanner.Err(): ", fmt.Sprintf("%v", scanner.Err()))) - } -} - -func (FalcoSnifferEngine *FalcoSnifferEngine) GetEbpfEngineError() error { - return FalcoSnifferEngine.cmd.Wait() -} diff --git a/core/ebpf_engine/sniffer_engine_interface.go b/core/ebpf_engine/sniffer_engine_interface.go deleted file mode 100644 index 3b07927ed9..0000000000 --- a/core/ebpf_engine/sniffer_engine_interface.go +++ /dev/null @@ -1,7 +0,0 @@ -package ebpf_engine - -type SnifferEngineClient interface { - Notify(event interface{}) - GetSnifferData() - GetEbpfEngineError() error -} diff --git a/core/validator/validator.go b/core/validator/validator.go deleted file mode 100644 index d13b2e0fd9..0000000000 --- a/core/validator/validator.go +++ /dev/null @@ -1,59 +0,0 @@ -package validator - -import ( - "fmt" - "sniffer/core/config" - "syscall" - - logger "github.com/kubescape/go-logger" - "github.com/kubescape/go-logger/helpers" -) - -var minKernelVersion string - -func int8ToStr(arr []int8) string { - b := make([]byte, 0, len(arr)) - for _, v := range arr { - if v == 0x00 { - break - } - b = append(b, byte(v)) - } - return string(b) -} - -func checkKernelVersion() error { - var uname syscall.Utsname - if err := syscall.Uname(&uname); err != nil { - return fmt.Errorf("checkKernelVersion: fail to detect the kernel version") - } - kernelVersion := int8ToStr(uname.Sysname[:]) + "," + int8ToStr(uname.Release[:]) + "," + int8ToStr(uname.Version[:]) - logger.L().Debug("", helpers.String("kernelVersion: %s", kernelVersion)) - - if int8ToStr(uname.Release[:]) < minKernelVersion { - return fmt.Errorf("checkKernelVersion: the current kernel version %s is less than the min kernel version support %s", int8ToStr(uname.Release[:]), minKernelVersion) - } - - return nil -} - -func checkNodePrerequsits() error { - if config.IsFalcoEbpfEngine() { - minKernelVersion = "4.14" - } else { - minKernelVersion = "5.1" - } - err := checkKernelVersion() - if err != nil { - return err - } - return nil -} - -func CheckPrerequsits() error { - err := checkNodePrerequsits() - if err != nil { - return err - } - return nil -} diff --git a/core/validator/validator_test.go b/core/validator/validator_test.go deleted file mode 100644 index 4da305e052..0000000000 --- a/core/validator/validator_test.go +++ /dev/null @@ -1,9 +0,0 @@ -package validator - -// func TestCheckKernelVersion(test *testing.T) { -// minKernelVersion = "3.1" -// err := checkKernelVersion() -// if err != nil { -// test.Errorf("checkKernelVersion lower %v", err) -// } -// } diff --git a/go.mod b/go.mod index 3f9b6e6fed..f69a77cc08 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module sniffer go 1.19 -replace github.com/slashben/kubescape-ebpf => /home/raziel/armo/go/src/kubescape-ebpf - require ( github.com/kubescape/go-logger v0.0.8 github.com/slashben/kubescape-ebpf v0.1.1 diff --git a/go.sum b/go.sum index ac79eebef0..aa38c576a6 100644 --- a/go.sum +++ b/go.sum @@ -260,6 +260,8 @@ github.com/s3rj1k/go-fanotify/fanotify v0.0.0-20210917134616-9c00a300bb7a/go.mod github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/slashben/kubescape-ebpf v0.1.1 h1:s/QfYmo2Ib9Zx0J2Ecdm/iR25CdIsQRzuMO0PozzE6U= +github.com/slashben/kubescape-ebpf v0.1.1/go.mod h1:suGUjD7qrfXgdpwHzfJ73YvYqdovl5ClmxIyQ1VFZO8= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= diff --git a/internal/config/config_interface.go b/internal/config/config_interface.go new file mode 100644 index 0000000000..4f827dc889 --- /dev/null +++ b/internal/config/config_interface.go @@ -0,0 +1,17 @@ +package config + +type configClient interface { + // global configuration + GetConfigurutionData() ([]byte, error) + ParseConfiguration() error + + //ebpf engine based on falco configuration + GetFalcoEngineBinaryPath() string + GetFalcoEngineKernelObjPath() string + GetFalcoSyscallFilter() []string + IsFalcoEbpfEngineMonitorHostMachine() []string + IsFalcoEbpfEngine() bool + + // services configuration + IsRelaventCVEServiceEnabled() bool +} diff --git a/internal/validator/validator_interface.go b/internal/validator/validator_interface.go new file mode 100644 index 0000000000..9d1a72d42d --- /dev/null +++ b/internal/validator/validator_interface.go @@ -0,0 +1,5 @@ +package validator + +type validatorClient interface { + CheckPrerequsits() error +} diff --git a/internal/version/version_interface.go b/internal/version/version_interface.go new file mode 100644 index 0000000000..eb02767d07 --- /dev/null +++ b/internal/version/version_interface.go @@ -0,0 +1,6 @@ +package version + +type versionClient interface { + SetVersion() + GetVersion() +} diff --git a/main.go b/main.go deleted file mode 100644 index b57ba3650f..0000000000 --- a/main.go +++ /dev/null @@ -1,71 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "sniffer/core/accumulator" - "sniffer/core/config" - "sniffer/core/validator" - - logger "github.com/kubescape/go-logger" - "github.com/kubescape/go-logger/helpers" -) - -func waitOnCacheAccumulatorProccessErrorCode(cacheAccumulatorErrorChan chan error) { - err := <-cacheAccumulatorErrorChan - if err != nil { - logger.L().Error("", helpers.String("Global Sniffer failed on error ", fmt.Sprintf("%v", err))) - os.Exit(1) - } -} - -func startingOperations() error { - // if config.IsRelaventCVEServiceEnabled() { - // err := vuln.DownloadVulnDB() - // if err != nil { - // return err - // } - // } - // err := DB.CreateCRDs() - // if err != nil { - // return err - // } - return nil -} - -func main() { - - err := config.ParseConfiguration() - if err != nil { - logger.L().Fatal("", helpers.String("error during parsing configuration: ", fmt.Sprintf("%v", err))) - } - - err = validator.CheckPrerequsits() - if err != nil { - logger.L().Fatal("", helpers.String("error during check prerequisites: ", fmt.Sprintf("%v", err))) - } - - err = startingOperations() - if err != nil { - logger.L().Fatal("", helpers.String("error during starting operations: ", fmt.Sprintf("%v", err))) - } - - cacheAccumulatorErrorChan := make(chan error) - cachAccumulator := accumulator.CreateCacheAccumulator(10) - err = cachAccumulator.StartCacheAccumalator(cacheAccumulatorErrorChan, config.GetSyscallFilter(), false, false) - if err != nil { - logger.L().Fatal("", helpers.String("fail to create cache watcher ", fmt.Sprintf("%v", err))) - } - go waitOnCacheAccumulatorProccessErrorCode(cacheAccumulatorErrorChan) - - fmt.Scanln() - // containerWatcher, err := k8s_watcher.CreateContainerWatcher() - // if err != nil { - // log.Fatalf("fail to create container watcher %v", err) - // } - // err = containerWatcher.StartWatchingOnNewContainers() - // if err != nil { - // log.Fatalf("StartWatchingOnNewContainers fail on error %v", err) - // } -} diff --git a/pkg/accumulator/accumulator_interface.go b/pkg/accumulator/accumulator_interface.go new file mode 100644 index 0000000000..b206ca07ac --- /dev/null +++ b/pkg/accumulator/accumulator_interface.go @@ -0,0 +1,7 @@ +package accumulator + +type AcccumulatorClient interface { + StartCacheAccumulator() error + StartContainerAccumalator() error + StopContainerAccumulator() error +} diff --git a/pkg/conthandler/container_aggregator_interface.go b/pkg/conthandler/container_aggregator_interface.go new file mode 100644 index 0000000000..594e766950 --- /dev/null +++ b/pkg/conthandler/container_aggregator_interface.go @@ -0,0 +1,7 @@ +package conthandler + +type ContainerAggregatorClient interface { + StartAggregate() error + StopAggregate() error + GetContainerRealtimeFileList() []string +} diff --git a/pkg/conthandler/container_main_handler.go b/pkg/conthandler/container_main_handler.go new file mode 100644 index 0000000000..1a3d1df668 --- /dev/null +++ b/pkg/conthandler/container_main_handler.go @@ -0,0 +1,5 @@ +package conthandler + +type ContainerMainHandlerClient interface { + StartMainHandler() error +} diff --git a/pkg/conthandler/container_watcher_interface.go b/pkg/conthandler/container_watcher_interface.go new file mode 100644 index 0000000000..e9cb165000 --- /dev/null +++ b/pkg/conthandler/container_watcher_interface.go @@ -0,0 +1,5 @@ +package conthandler + +type containerWatcherClient interface { + StartWatchedOnNewContainers() +} diff --git a/pkg/ebpfeng/ebpf_engine_interface.go b/pkg/ebpfeng/ebpf_engine_interface.go new file mode 100644 index 0000000000..d01c36785e --- /dev/null +++ b/pkg/ebpfeng/ebpf_engine_interface.go @@ -0,0 +1,7 @@ +package ebpfeng + +type EbpfEngineClient interface { + StartEbpfEngine() error + GetEbpfEngineData(chan *ebpfev.EventData) + GetEbpfEngineError(chan error) +} diff --git a/pkg/ebpfev/event_interface.go b/pkg/ebpfev/event_interface.go new file mode 100644 index 0000000000..cc5ee1fbfa --- /dev/null +++ b/pkg/ebpfev/event_interface.go @@ -0,0 +1,14 @@ +package ebpfev + +import "time" + +type EventData struct { + Timestamp time.Time + ContainerID string + Ppid string + Pid string + SyscallOp string + SyscallArgs []string + Exe string + Cmd string +} diff --git a/pkg/sbom/go.mod b/pkg/sbom/go.mod new file mode 100644 index 0000000000..b896c62a11 --- /dev/null +++ b/pkg/sbom/go.mod @@ -0,0 +1,3 @@ +module sniffer/pkg/sbom + +go 1.19 diff --git a/pkg/sbom/sbom_interface.go b/pkg/sbom/sbom_interface.go new file mode 100644 index 0000000000..a9d996806e --- /dev/null +++ b/pkg/sbom/sbom_interface.go @@ -0,0 +1,7 @@ +package sbom + +type SbomClient interface { + GetSbom(imageID) + FilterSbom() + PostFilterSbom(key inteface{}, data []byte) +} \ No newline at end of file From a0ec181eff10f40281359ada6298da57d7f51041 Mon Sep 17 00:00:00 2001 From: rcohencyberarmor Date: Sun, 5 Feb 2023 16:12:07 +0200 Subject: [PATCH 04/18] remove former config file Signed-off-by: rcohen --- configuration/SneefferConfigurationFile.txt | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 configuration/SneefferConfigurationFile.txt diff --git a/configuration/SneefferConfigurationFile.txt b/configuration/SneefferConfigurationFile.txt deleted file mode 100644 index e7105b587c..0000000000 --- a/configuration/SneefferConfigurationFile.txt +++ /dev/null @@ -1,5 +0,0 @@ -kernelObjPath=./resources/ebpf/kernel_obj.o -snifferEngineLoaderPath=./resources/ebpf/falco_ebpf_engine -myNode=minikube -enableRelaventCVEsService=true -ebpfEngine=cilium \ No newline at end of file From e7372fce11c67f102c9882c6f18c35ca7df6171c Mon Sep 17 00:00:00 2001 From: rcohen Date: Sun, 5 Feb 2023 21:44:37 +0200 Subject: [PATCH 05/18] PR corrections Signed-off-by: rcohen --- .gitignore | 3 +- .vscode/launch.json | 3 +- README.md | 45 +++++++++++++------ cmd/main.go | 4 +- docs/BUILD.md | 13 ++++++ internal/config/config_interface.go | 10 ----- internal/validator/validator_interface.go | 2 +- internal/version/version_interface.go | 3 +- pkg/accumulator/accumulator_interface.go | 1 + .../container_aggregator_interface.go | 2 +- .../container_watcher_interface.go | 2 +- pkg/ebpfeng/ebpf_engine_interface.go | 4 +- pkg/{ebpfev => ebpfev_v1}/event_interface.go | 2 +- pkg/sbom/go.mod | 3 -- 14 files changed, 57 insertions(+), 40 deletions(-) create mode 100644 docs/BUILD.md rename pkg/{ebpfev => ebpfev_v1}/event_interface.go (92%) delete mode 100644 pkg/sbom/go.mod diff --git a/.gitignore b/.gitignore index 161eb1631a..67412c18be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ sniffer -temp \ No newline at end of file +temp +.vscode \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index be6fa8a260..06616dade0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,8 +11,7 @@ "mode": "auto", "program": "${workspaceFolder}", "env": { - "SNEEFFER_CONF_FILE_PATH": "${workspaceFolder}/configuration/SneefferConfigurationFile.txt", - "HOME": "/home/raziel" + "SNEEFFER_CONFIG": "${workspaceFolder}/configuration/SnifferConfigurationFile.json" }, "console": "integratedTerminal", "asRoot": true diff --git a/README.md b/README.md index bf564233f9..c6b11efcbf 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,44 @@ ## sniffer -1. Compile relevant binaries by running the following script: +1. Run minikube: -```sh -./install_dependencies.sh ``` - -This step can take ~15 minutes depending on your machine. - -2. Build Sneeffer - -``` -go build -o sniffer . +minikube start ``` -3. Run minikube: +2. Run Sneeffer: ``` -minikube start +sudo SNIFFER_CONFIG=./configuration/SnifferConfigurationFile.json ./sniffer ``` -4. Run Sneeffer: +## Limitations: +1. This feature is using EBPF technology that is implemented only on linux. +2. the linux kernel version that supported it 4.14 + +## Debugging +# file for vscode: ``` -sudo SNEEFFER_CONF_FILE_PATH=./configuration/SneefferConfigurationFile.txt HOME= ./sniffer +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}", + "env": { + "SNEEFFER_CONFIG": "${workspaceFolder}/configuration/SnifferConfigurationFile.json" + }, + "console": "integratedTerminal", + "asRoot": true + } + ] +} + ``` \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go index f7313aded0..4a4d490232 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,7 +2,6 @@ package cmd import ( "fmt" - "os" "sniffer/internal/config" "sniffer/internal/validator" "sniffer/internal/version" @@ -16,8 +15,7 @@ import ( func waitOnCacheAccumulatorErrorCode(cacheAccumulatorErrorChan chan error) { err := <-cacheAccumulatorErrorChan if err != nil { - logger.L().Error("", helpers.String("Global Sniffer failed on error ", fmt.Sprintf("%v", err))) - os.Exit(1) + logger.L().Fatal("", helpers.String("ebpf engine failed on error ", fmt.Sprintf("%v", err))) } } diff --git a/docs/BUILD.md b/docs/BUILD.md new file mode 100644 index 0000000000..45a16d0e69 --- /dev/null +++ b/docs/BUILD.md @@ -0,0 +1,13 @@ +1. Compile relevant binaries by running the following script: + +```sh +./install_dependencies.sh +``` + +> This step can take ~15 minutes depending on your machine. + +2. Build Sneeffer + +``` +go build -o sniffer . +``` diff --git a/internal/config/config_interface.go b/internal/config/config_interface.go index 4f827dc889..c60131433f 100644 --- a/internal/config/config_interface.go +++ b/internal/config/config_interface.go @@ -4,14 +4,4 @@ type configClient interface { // global configuration GetConfigurutionData() ([]byte, error) ParseConfiguration() error - - //ebpf engine based on falco configuration - GetFalcoEngineBinaryPath() string - GetFalcoEngineKernelObjPath() string - GetFalcoSyscallFilter() []string - IsFalcoEbpfEngineMonitorHostMachine() []string - IsFalcoEbpfEngine() bool - - // services configuration - IsRelaventCVEServiceEnabled() bool } diff --git a/internal/validator/validator_interface.go b/internal/validator/validator_interface.go index 9d1a72d42d..767158ce20 100644 --- a/internal/validator/validator_interface.go +++ b/internal/validator/validator_interface.go @@ -1,5 +1,5 @@ package validator -type validatorClient interface { +type ValidatorClient interface { CheckPrerequsits() error } diff --git a/internal/version/version_interface.go b/internal/version/version_interface.go index eb02767d07..a4576eda35 100644 --- a/internal/version/version_interface.go +++ b/internal/version/version_interface.go @@ -1,6 +1,5 @@ package version -type versionClient interface { - SetVersion() +type VersionClient interface { GetVersion() } diff --git a/pkg/accumulator/accumulator_interface.go b/pkg/accumulator/accumulator_interface.go index b206ca07ac..e06d125f0d 100644 --- a/pkg/accumulator/accumulator_interface.go +++ b/pkg/accumulator/accumulator_interface.go @@ -1,6 +1,7 @@ package accumulator type AcccumulatorClient interface { + // this function StartCacheAccumulator will store the data from the ebpf engine StartCacheAccumulator() error StartContainerAccumalator() error StopContainerAccumulator() error diff --git a/pkg/conthandler/container_aggregator_interface.go b/pkg/conthandler/container_aggregator_interface.go index 594e766950..0f67731779 100644 --- a/pkg/conthandler/container_aggregator_interface.go +++ b/pkg/conthandler/container_aggregator_interface.go @@ -3,5 +3,5 @@ package conthandler type ContainerAggregatorClient interface { StartAggregate() error StopAggregate() error - GetContainerRealtimeFileList() []string + ListContainerRealTimeFiles() []string } diff --git a/pkg/conthandler/container_watcher_interface.go b/pkg/conthandler/container_watcher_interface.go index e9cb165000..56624a521c 100644 --- a/pkg/conthandler/container_watcher_interface.go +++ b/pkg/conthandler/container_watcher_interface.go @@ -1,5 +1,5 @@ package conthandler -type containerWatcherClient interface { +type ContainerWatcherClient interface { StartWatchedOnNewContainers() } diff --git a/pkg/ebpfeng/ebpf_engine_interface.go b/pkg/ebpfeng/ebpf_engine_interface.go index d01c36785e..0783af8b54 100644 --- a/pkg/ebpfeng/ebpf_engine_interface.go +++ b/pkg/ebpfeng/ebpf_engine_interface.go @@ -1,7 +1,9 @@ package ebpfeng +import "sniffer/pkg/ebpfev_v1" + type EbpfEngineClient interface { StartEbpfEngine() error - GetEbpfEngineData(chan *ebpfev.EventData) + GetData(chan *ebpfev_v1.EventData) GetEbpfEngineError(chan error) } diff --git a/pkg/ebpfev/event_interface.go b/pkg/ebpfev_v1/event_interface.go similarity index 92% rename from pkg/ebpfev/event_interface.go rename to pkg/ebpfev_v1/event_interface.go index cc5ee1fbfa..09a9422095 100644 --- a/pkg/ebpfev/event_interface.go +++ b/pkg/ebpfev_v1/event_interface.go @@ -1,4 +1,4 @@ -package ebpfev +package ebpfev_v1 import "time" diff --git a/pkg/sbom/go.mod b/pkg/sbom/go.mod deleted file mode 100644 index b896c62a11..0000000000 --- a/pkg/sbom/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module sniffer/pkg/sbom - -go 1.19 From bcf821d29060e19a7932e8001fd264639e7c103e Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 6 Feb 2023 09:48:55 +0200 Subject: [PATCH 06/18] PR corrections Signed-off-by: rcohen --- .vscode/launch.json | 20 ------------------- install_dependencies.sh | 2 +- internal/config/config_interface.go | 4 ++-- cmd/main.go => main.go | 0 pkg/ebpfeng/ebpf_engine_interface.go | 4 ++-- .../v1}/event_interface.go | 2 +- pkg/sbom/sbom_interface.go | 6 +++--- 7 files changed, 9 insertions(+), 29 deletions(-) delete mode 100644 .vscode/launch.json rename cmd/main.go => main.go (100%) rename pkg/{ebpfev_v1 => ebpfev/v1}/event_interface.go (92%) diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 06616dade0..0000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Launch Package", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${workspaceFolder}", - "env": { - "SNEEFFER_CONFIG": "${workspaceFolder}/configuration/SnifferConfigurationFile.json" - }, - "console": "integratedTerminal", - "asRoot": true - } - ] -} diff --git a/install_dependencies.sh b/install_dependencies.sh index e12e1d9f51..d435d93e33 100755 --- a/install_dependencies.sh +++ b/install_dependencies.sh @@ -4,7 +4,7 @@ sudo apt install git curl clang-12 -y mkdir dependencies -git clone git@github.com:rcohencyberarmor/kubescape-ebpf-engine.git dependencies/kubescape_ebpf_engine_sc +git clone git@github.com:kubescape/kubescape-ebpf-engine.git dependencies/kubescape_ebpf_engine_sc cd dependencies/kubescape_ebpf_engine_sc ./install_dependencies.sh mkdir build && cd ./build diff --git a/internal/config/config_interface.go b/internal/config/config_interface.go index c60131433f..e50fa55c24 100644 --- a/internal/config/config_interface.go +++ b/internal/config/config_interface.go @@ -2,6 +2,6 @@ package config type configClient interface { // global configuration - GetConfigurutionData() ([]byte, error) - ParseConfiguration() error + GetConfigurationData() ([]byte, error) + ParseConfiguration(data []byte) error } diff --git a/cmd/main.go b/main.go similarity index 100% rename from cmd/main.go rename to main.go diff --git a/pkg/ebpfeng/ebpf_engine_interface.go b/pkg/ebpfeng/ebpf_engine_interface.go index 0783af8b54..9daae97d11 100644 --- a/pkg/ebpfeng/ebpf_engine_interface.go +++ b/pkg/ebpfeng/ebpf_engine_interface.go @@ -1,9 +1,9 @@ package ebpfeng -import "sniffer/pkg/ebpfev_v1" +import "sniffer/pkg/ebpfev" type EbpfEngineClient interface { StartEbpfEngine() error - GetData(chan *ebpfev_v1.EventData) + GetData(chan *ebpfev.EventData) GetEbpfEngineError(chan error) } diff --git a/pkg/ebpfev_v1/event_interface.go b/pkg/ebpfev/v1/event_interface.go similarity index 92% rename from pkg/ebpfev_v1/event_interface.go rename to pkg/ebpfev/v1/event_interface.go index 09a9422095..cc5ee1fbfa 100644 --- a/pkg/ebpfev_v1/event_interface.go +++ b/pkg/ebpfev/v1/event_interface.go @@ -1,4 +1,4 @@ -package ebpfev_v1 +package ebpfev import "time" diff --git a/pkg/sbom/sbom_interface.go b/pkg/sbom/sbom_interface.go index a9d996806e..44c70cc89b 100644 --- a/pkg/sbom/sbom_interface.go +++ b/pkg/sbom/sbom_interface.go @@ -1,7 +1,7 @@ package sbom type SbomClient interface { - GetSbom(imageID) - FilterSbom() - PostFilterSbom(key inteface{}, data []byte) + GetSBOM(imageID) + FilterSBOM() + PostFilterSBOM(key inteface{}, data []byte) } \ No newline at end of file From 970a87a019f5c2084f112266957ad88ae02cb08c Mon Sep 17 00:00:00 2001 From: rcohen Date: Tue, 7 Feb 2023 15:17:46 +0200 Subject: [PATCH 07/18] getter for event Signed-off-by: rcohen --- pkg/ebpfev/v1/event_interface.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/pkg/ebpfev/v1/event_interface.go b/pkg/ebpfev/v1/event_interface.go index cc5ee1fbfa..50b7661f04 100644 --- a/pkg/ebpfev/v1/event_interface.go +++ b/pkg/ebpfev/v1/event_interface.go @@ -3,12 +3,23 @@ package ebpfev import "time" type EventData struct { - Timestamp time.Time - ContainerID string - Ppid string - Pid string - SyscallOp string - SyscallArgs []string - Exe string - Cmd string + timestamp time.Time + containerID string + ppid string + pid string + syscallOp string + syscallArgs string + exe string + cmd string +} + +type EventClient interface { + GetEventTimestamp(ev EventData) time.Time + GetEventContainerID(ev EventData) string + GetEventPPID(ev EventData) string + GetEventPID(ev EventData) string + GetEventSyscallOp(ev EventData) string + GetEventSyscallArgs(ev EventData) string + GetEventEXE(ev EventData) string + GetEventCMD(ev EventData) string } From dca17bb2baaa32e21a577094d740a87c67fa1ca8 Mon Sep 17 00:00:00 2001 From: rcohen Date: Tue, 7 Feb 2023 15:58:09 +0200 Subject: [PATCH 08/18] PR corrections Signed-off-by: rcohen --- internal/config/config_interface.go | 2 +- pkg/conthandler/container_aggregator_interface.go | 6 +++--- pkg/ebpfeng/ebpf_engine_interface.go | 6 +++--- pkg/ebpfev/v1/event_interface.go | 15 +++------------ pkg/sbom/sbom_interface.go | 6 +++--- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/internal/config/config_interface.go b/internal/config/config_interface.go index e50fa55c24..799a48d3c4 100644 --- a/internal/config/config_interface.go +++ b/internal/config/config_interface.go @@ -1,6 +1,6 @@ package config -type configClient interface { +type ConfigClient interface { // global configuration GetConfigurationData() ([]byte, error) ParseConfiguration(data []byte) error diff --git a/pkg/conthandler/container_aggregator_interface.go b/pkg/conthandler/container_aggregator_interface.go index 0f67731779..825a347667 100644 --- a/pkg/conthandler/container_aggregator_interface.go +++ b/pkg/conthandler/container_aggregator_interface.go @@ -1,7 +1,7 @@ package conthandler type ContainerAggregatorClient interface { - StartAggregate() error - StopAggregate() error - ListContainerRealTimeFiles() []string + StartAggregate(containerID string) error + StopAggregate(containerID string) error + ListContainerRealTimeFiles(containerID string) []string } diff --git a/pkg/ebpfeng/ebpf_engine_interface.go b/pkg/ebpfeng/ebpf_engine_interface.go index 9daae97d11..6e8bd5e1f8 100644 --- a/pkg/ebpfeng/ebpf_engine_interface.go +++ b/pkg/ebpfeng/ebpf_engine_interface.go @@ -1,9 +1,9 @@ package ebpfeng -import "sniffer/pkg/ebpfev" +import ebpfev "sniffer/pkg/ebpfev/v1" type EbpfEngineClient interface { - StartEbpfEngine() error + StartEbpfEngine(chan error) error GetData(chan *ebpfev.EventData) - GetEbpfEngineError(chan error) + GetEbpfEngineError() error } diff --git a/pkg/ebpfev/v1/event_interface.go b/pkg/ebpfev/v1/event_interface.go index 50b7661f04..fa9b3e2158 100644 --- a/pkg/ebpfev/v1/event_interface.go +++ b/pkg/ebpfev/v1/event_interface.go @@ -1,17 +1,8 @@ package ebpfev -import "time" - -type EventData struct { - timestamp time.Time - containerID string - ppid string - pid string - syscallOp string - syscallArgs string - exe string - cmd string -} +import ( + "time" +) type EventClient interface { GetEventTimestamp(ev EventData) time.Time diff --git a/pkg/sbom/sbom_interface.go b/pkg/sbom/sbom_interface.go index 44c70cc89b..f817ac2d2b 100644 --- a/pkg/sbom/sbom_interface.go +++ b/pkg/sbom/sbom_interface.go @@ -1,7 +1,7 @@ package sbom type SbomClient interface { - GetSBOM(imageID) + GetSBOM(imageID string) FilterSBOM() - PostFilterSBOM(key inteface{}, data []byte) -} \ No newline at end of file + PostFilterSBOM(key interface{}, data []byte) +} From 826f2e861dab8a97cfabd776e2f445eb2759c131 Mon Sep 17 00:00:00 2001 From: rcohen Date: Thu, 9 Feb 2023 17:46:12 +0200 Subject: [PATCH 09/18] PR corrections Signed-off-by: rcohen --- pkg/ebpfeng/ebpf_engine_interface.go | 2 +- pkg/ebpfev/event_interface.go | 16 ++++++++++++++++ pkg/sbom/sbom_interface.go | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 pkg/ebpfev/event_interface.go diff --git a/pkg/ebpfeng/ebpf_engine_interface.go b/pkg/ebpfeng/ebpf_engine_interface.go index 6e8bd5e1f8..6fb1bbbb0f 100644 --- a/pkg/ebpfeng/ebpf_engine_interface.go +++ b/pkg/ebpfeng/ebpf_engine_interface.go @@ -3,7 +3,7 @@ package ebpfeng import ebpfev "sniffer/pkg/ebpfev/v1" type EbpfEngineClient interface { - StartEbpfEngine(chan error) error + StartEbpfEngine() error GetData(chan *ebpfev.EventData) GetEbpfEngineError() error } diff --git a/pkg/ebpfev/event_interface.go b/pkg/ebpfev/event_interface.go new file mode 100644 index 0000000000..722829f452 --- /dev/null +++ b/pkg/ebpfev/event_interface.go @@ -0,0 +1,16 @@ +package ebpfev + +import ( + "time" +) + +type EventClient interface { + GetEventTimestamp() time.Time + GetEventContainerID() string + GetEventPPID() string + GetEventPID() string + GetEventSyscallOp() string + GetEventSyscallArgs() string + GetEventEXE() string + GetEventCMD() string +} diff --git a/pkg/sbom/sbom_interface.go b/pkg/sbom/sbom_interface.go index f817ac2d2b..bb3612fda6 100644 --- a/pkg/sbom/sbom_interface.go +++ b/pkg/sbom/sbom_interface.go @@ -2,6 +2,6 @@ package sbom type SbomClient interface { GetSBOM(imageID string) - FilterSBOM() - PostFilterSBOM(key interface{}, data []byte) + FilterSBOM(sbomFileRelevantMap map[string]bool) + PostFilterSBOM() } From 33a73bc3f950b2caa7faa6b31dfed516e2bea2d9 Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 10:12:26 +0200 Subject: [PATCH 10/18] remove interface from version + change function name Signed-off-by: rcohen --- pkg/ebpfev/v1/event_interface.go | 16 ---------------- pkg/sbom/sbom_interface.go | 2 +- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 pkg/ebpfev/v1/event_interface.go diff --git a/pkg/ebpfev/v1/event_interface.go b/pkg/ebpfev/v1/event_interface.go deleted file mode 100644 index fa9b3e2158..0000000000 --- a/pkg/ebpfev/v1/event_interface.go +++ /dev/null @@ -1,16 +0,0 @@ -package ebpfev - -import ( - "time" -) - -type EventClient interface { - GetEventTimestamp(ev EventData) time.Time - GetEventContainerID(ev EventData) string - GetEventPPID(ev EventData) string - GetEventPID(ev EventData) string - GetEventSyscallOp(ev EventData) string - GetEventSyscallArgs(ev EventData) string - GetEventEXE(ev EventData) string - GetEventCMD(ev EventData) string -} diff --git a/pkg/sbom/sbom_interface.go b/pkg/sbom/sbom_interface.go index bb3612fda6..03a238bfdb 100644 --- a/pkg/sbom/sbom_interface.go +++ b/pkg/sbom/sbom_interface.go @@ -3,5 +3,5 @@ package sbom type SbomClient interface { GetSBOM(imageID string) FilterSBOM(sbomFileRelevantMap map[string]bool) - PostFilterSBOM() + StoreFilterSBOM() } From be804b793e09eecd2ea659d78a58cd8144daf0eb Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 10:15:37 +0200 Subject: [PATCH 11/18] go mod + go sum - fit only to the interfaces Signed-off-by: rcohen --- go.mod | 64 +------------------ go.sum | 190 +-------------------------------------------------------- 2 files changed, 2 insertions(+), 252 deletions(-) diff --git a/go.mod b/go.mod index f69a77cc08..be9b31398a 100644 --- a/go.mod +++ b/go.mod @@ -2,60 +2,17 @@ module sniffer go 1.19 -require ( - github.com/kubescape/go-logger v0.0.8 - github.com/slashben/kubescape-ebpf v0.1.1 -) +require github.com/kubescape/go-logger v0.0.8 require ( - cloud.google.com/go/compute/metadata v0.2.0 // indirect - github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.27 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/Microsoft/go-winio v0.5.1 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/cenkalti/backoff/v4 v4.2.0 // indirect - github.com/cilium/ebpf v0.10.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.17+incompatible // indirect - github.com/docker/go-connections v0.4.0 // indirect - github.com/docker/go-units v0.4.0 // indirect - github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/fatih/color v1.13.0 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect - github.com/inspektor-gadget/inspektor-gadget v0.12.1 // indirect - github.com/josharian/intern v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/mailru/easyjson v0.7.6 // indirect github.com/mattn/go-colorable v0.1.9 // indirect github.com/mattn/go-isatty v0.0.14 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect - github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/s3rj1k/go-fanotify/fanotify v0.0.0-20210917134616-9c00a300bb7a // indirect - github.com/sirupsen/logrus v1.8.1 // indirect github.com/uptrace/opentelemetry-go-extra/otelutil v0.1.18 // indirect github.com/uptrace/opentelemetry-go-extra/otelzap v0.1.18 // indirect github.com/uptrace/uptrace-go v1.11.8 // indirect @@ -75,29 +32,10 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.9.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect - golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d // indirect golang.org/x/net v0.5.0 // indirect - golang.org/x/oauth2 v0.3.0 // indirect golang.org/x/sys v0.4.0 // indirect - golang.org/x/term v0.4.0 // indirect golang.org/x/text v0.6.0 // indirect - golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect - google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 // indirect google.golang.org/grpc v1.51.0 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.25.4 // indirect - k8s.io/apimachinery v0.25.4 // indirect - k8s.io/client-go v0.25.4 // indirect - k8s.io/cri-api v0.23.1 // indirect - k8s.io/klog/v2 v2.70.1 // indirect - k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect - k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index aa38c576a6..663ed98541 100644 --- a/go.sum +++ b/go.sum @@ -19,8 +19,6 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute/metadata v0.2.0 h1:nBbNSZyDpkNlo3DepaaLKVuO7ClyifSAmNloSCZrHnQ= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -33,33 +31,9 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= -github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= -github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= -github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= -github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= -github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= -github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= @@ -70,8 +44,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.10.0 h1:nk5HPMeoBXtOzbkZBWym+ZWq1GIiHUsBFXxwewXAHLQ= -github.com/cilium/ebpf v0.10.0/go.mod h1:DPiVdY/kT534dgc9ERmvP8mWA+9gvwgKfRvk4nNWnoE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -80,21 +52,8 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -104,31 +63,15 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= -github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= @@ -161,8 +104,6 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -173,10 +114,6 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -188,8 +125,6 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -199,79 +134,29 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0/go.mod h1:YDZoGHuwE+ov0c8smSH4 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inspektor-gadget/inspektor-gadget v0.12.1 h1:rJDc86ls4J3N4e9eWmiOSsIGt35ZBxzQoa9WBEQxkr8= -github.com/inspektor-gadget/inspektor-gadget v0.12.1/go.mod h1:nHHmmKxDgVoKm8ePfG2Z2OP2AZBCllwgwDrhfibcbDE= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kubescape/go-logger v0.0.8 h1:YHC5WmOy2AegJkUeuEw93hssa5VcgM55EkzWbaPviVs= github.com/kubescape/go-logger v0.0.8/go.mod h1:FOCfZgMK/QC2CY1rJnzb72x29PAjjlzYmw19SUe6MEI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= -github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/s3rj1k/go-fanotify/fanotify v0.0.0-20210917134616-9c00a300bb7a h1:np2nR32/A/VcOG9Hn+IOPA8kMk1gbBzK5LpSsgq5pJI= -github.com/s3rj1k/go-fanotify/fanotify v0.0.0-20210917134616-9c00a300bb7a/go.mod h1:wiP6GQ2T378F+YIyuNw7yXtBxJZR+fqrrn1Z6UHZi0Q= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/slashben/kubescape-ebpf v0.1.1 h1:s/QfYmo2Ib9Zx0J2Ecdm/iR25CdIsQRzuMO0PozzE6U= -github.com/slashben/kubescape-ebpf v0.1.1/go.mod h1:suGUjD7qrfXgdpwHzfJ73YvYqdovl5ClmxIyQ1VFZO8= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/uptrace/opentelemetry-go-extra/otelutil v0.1.18 h1:zsEhOhAfpNejDoJQi0gLsnN1bf3x2h7dTF7XNS2MJPE= @@ -283,8 +168,6 @@ github.com/uptrace/uptrace-go v1.11.8/go.mod h1:LXkrmQ18ZrF6SdovJnxG29hcWGtRxnE1 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -329,10 +212,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -343,8 +222,6 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d h1:vtUKgx8dahOomfFzLREU8nSv25YHnTgLBn4rDnWZdU0= -golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -357,7 +234,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -366,7 +242,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -379,7 +254,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -394,11 +268,7 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -407,8 +277,6 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= -golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -417,8 +285,6 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -429,8 +295,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -447,36 +311,24 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -514,12 +366,9 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -546,8 +395,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -578,8 +425,6 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 h1:3wPBShTLWQnEkZ9VW/HZZ8zT/9LLtleBtq7l8SKtJIA= google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= @@ -618,23 +463,11 @@ google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -642,27 +475,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= -k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= -k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= -k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= -k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= -k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= -k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= -k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= From 27519e9c8097e88b500e23e8e532c8bdb93f0add Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 10:21:57 +0200 Subject: [PATCH 12/18] define kernel event v1 Signed-off-by: rcohen --- pkg/ebpfev/v1/event.go | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 pkg/ebpfev/v1/event.go diff --git a/pkg/ebpfev/v1/event.go b/pkg/ebpfev/v1/event.go new file mode 100644 index 0000000000..52932678ef --- /dev/null +++ b/pkg/ebpfev/v1/event.go @@ -0,0 +1,52 @@ +package ebpfev + +import "time" + +type EventData struct { + timestamp time.Time + containerID string + ppid string + pid string + syscallOp string + syscallArgs string + exe string + cmd string +} + +func CreateKernelEvent(timestamp *time.Time, containerID string, ppid string, pid string, syscallOp string, syscallArgs string, exe string, cmd string) *EventData { + return &EventData{ + timestamp: *timestamp, + containerID: containerID, + ppid: ppid, + pid: pid, + syscallOp: syscallOp, + syscallArgs: syscallArgs, + exe: exe, + cmd: cmd, + } +} + +func (ev *EventData) GetEventTimestamp() time.Time { + return ev.timestamp +} +func (ev *EventData) GetEventContainerID() string { + return ev.containerID +} +func (ev *EventData) GetEventPPID() string { + return ev.ppid +} +func (ev *EventData) GetEventPID() string { + return ev.pid +} +func (ev *EventData) GetEventSyscallOp() string { + return ev.syscallOp +} +func (ev *EventData) GetEventSyscallArgs() string { + return ev.syscallArgs +} +func (ev *EventData) GetEventEXE() string { + return ev.exe +} +func (ev *EventData) GetEventCMD() string { + return ev.cmd +} From 0806d43e5d646ae5a4f614cb21d9fc1863c37496 Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 10:27:09 +0200 Subject: [PATCH 13/18] remove main logic - wait after implementation Signed-off-by: rcohen --- main.go | 65 +-------------------------------------------------------- 1 file changed, 1 insertion(+), 64 deletions(-) diff --git a/main.go b/main.go index 4a4d490232..da29a2cadf 100644 --- a/main.go +++ b/main.go @@ -1,67 +1,4 @@ -package cmd - -import ( - "fmt" - "sniffer/internal/config" - "sniffer/internal/validator" - "sniffer/internal/version" - "sniffer/pkg/accumulator" - "sniffer/pkg/conthandler" - - logger "github.com/kubescape/go-logger" - helpers "github.com/kubescape/go-logger/helpers" -) - -func waitOnCacheAccumulatorErrorCode(cacheAccumulatorErrorChan chan error) { - err := <-cacheAccumulatorErrorChan - if err != nil { - logger.L().Fatal("", helpers.String("ebpf engine failed on error ", fmt.Sprintf("%v", err))) - } -} - -func startingOperations() error { - return nil -} +package main func main() { - configData, err := config.GetConfigurutionData() - if err != nil { - logger.L().Fatal("", helpers.String("error during getting configuration data: ", fmt.Sprintf("%v", err))) - } - - err = config.ParseConfiguration(configData) - if err != nil { - logger.L().Fatal("", helpers.String("error during parsing configuration: ", fmt.Sprintf("%v", err))) - } - - err = validator.CheckPrerequsits() - if err != nil { - logger.L().Fatal("", helpers.String("error during check prerequisites: ", fmt.Sprintf("%v", err))) - } - - err = version.GetVersion() - if err != nil { - logger.L().Fatal("", helpers.String("error during check prerequisites: ", fmt.Sprintf("%v", err))) - } - logger.L().Info("", helpers.String("sniffer version is: ", fmt.Sprintf("%v", err))) - - err = startingOperations() - if err != nil { - logger.L().Fatal("", helpers.String("error during starting operations: ", fmt.Sprintf("%v", err))) - } - - cacheAccumulatorErrorChan := make(chan error) - cachAccumulator := accumulator.CreateCacheAccumulator() - err = cachAccumulator.StartCacheAccumulator() - if err != nil { - logger.L().Fatal("", helpers.String("fail to create cache watcher ", fmt.Sprintf("%v", err))) - } - go waitOnCacheAccumulatorErrorCode(cacheAccumulatorErrorChan) - - mainHandler := conthandler.CreateMainHandler() - if err != nil { - logger.L().Fatal("", helpers.String("fail to create cache watcher ", fmt.Sprintf("%v", err))) - } - - mainHandler.StartMainHandler() } From 42b5f28b468fec2f5f128b07766e14700ddac770 Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 11:18:06 +0200 Subject: [PATCH 14/18] typo Signed-off-by: rcohen --- pkg/accumulator/accumulator_interface.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/accumulator/accumulator_interface.go b/pkg/accumulator/accumulator_interface.go index e06d125f0d..c9f43d3cc7 100644 --- a/pkg/accumulator/accumulator_interface.go +++ b/pkg/accumulator/accumulator_interface.go @@ -3,6 +3,6 @@ package accumulator type AcccumulatorClient interface { // this function StartCacheAccumulator will store the data from the ebpf engine StartCacheAccumulator() error - StartContainerAccumalator() error + StartContainerAccumulator() error StopContainerAccumulator() error } From f6e1d17e9cb9584b35b337485da2632995427129 Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 11:20:15 +0200 Subject: [PATCH 15/18] change function name Signed-off-by: rcohen --- pkg/accumulator/accumulator_interface.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/accumulator/accumulator_interface.go b/pkg/accumulator/accumulator_interface.go index c9f43d3cc7..f7b58fd261 100644 --- a/pkg/accumulator/accumulator_interface.go +++ b/pkg/accumulator/accumulator_interface.go @@ -1,8 +1,8 @@ package accumulator type AcccumulatorClient interface { - // this function StartCacheAccumulator will store the data from the ebpf engine - StartCacheAccumulator() error + // this function StartAccumulator will store the data from the ebpf engine + StartAccumulator() error StartContainerAccumulator() error StopContainerAccumulator() error } From b6e94f607bdc787c060d1aec8e3329cf5d103106 Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 11:29:44 +0200 Subject: [PATCH 16/18] remove BUILD.md - we will create it later(form PR corrections) Signed-off-by: rcohen --- docs/BUILD.md | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 docs/BUILD.md diff --git a/docs/BUILD.md b/docs/BUILD.md deleted file mode 100644 index 45a16d0e69..0000000000 --- a/docs/BUILD.md +++ /dev/null @@ -1,13 +0,0 @@ -1. Compile relevant binaries by running the following script: - -```sh -./install_dependencies.sh -``` - -> This step can take ~15 minutes depending on your machine. - -2. Build Sneeffer - -``` -go build -o sniffer . -``` From 1a9a35faf42e09952e6f95d936d504b66698b3cc Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 13:34:40 +0200 Subject: [PATCH 17/18] add storage client interface Signed-off-by: rcohen --- pkg/strageclient/storage_client_interface.go | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 pkg/strageclient/storage_client_interface.go diff --git a/pkg/strageclient/storage_client_interface.go b/pkg/strageclient/storage_client_interface.go new file mode 100644 index 0000000000..2b690ef6be --- /dev/null +++ b/pkg/strageclient/storage_client_interface.go @@ -0,0 +1,7 @@ +package storageclient + +type StorageClient interface { + GetData(key string) (interface{}, error) + PutData(key string, data interface{}) error + PostData(key string, data interface{}) error +} From 87e4310fb0cce3fad1b2a2392fae04b49b5d5c40 Mon Sep 17 00:00:00 2001 From: rcohen Date: Mon, 13 Feb 2023 15:33:35 +0200 Subject: [PATCH 18/18] PR corrections Signed-off-by: rcohen --- Makefile | 5 +++++ README.md | 4 ++-- deps/install_dependencies.sh | 16 ++++++++++++++++ install_dependencies.sh | 15 --------------- internal/config/config_interface.go | 6 ++++-- internal/validator/validator_interface.go | 2 +- internal/version/version_interface.go | 2 +- pkg/conthandler/container_watcher_interface.go | 2 +- pkg/sbom/sbom_interface.go | 8 ++++---- 9 files changed, 34 insertions(+), 26 deletions(-) create mode 100644 Makefile create mode 100755 deps/install_dependencies.sh delete mode 100755 install_dependencies.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..ceb73cd889 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +install-deps: + ./deps/install_dependencies.sh + +build: + go build -o sniffer . \ No newline at end of file diff --git a/README.md b/README.md index c6b11efcbf..e3a5acab6d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ minikube start ``` -2. Run Sneeffer: +2. Run Sniffer: ``` sudo SNIFFER_CONFIG=./configuration/SnifferConfigurationFile.json ./sniffer @@ -33,7 +33,7 @@ sudo SNIFFER_CONFIG=./configuration/SnifferConfigurationFile.json ./sniffer "mode": "auto", "program": "${workspaceFolder}", "env": { - "SNEEFFER_CONFIG": "${workspaceFolder}/configuration/SnifferConfigurationFile.json" + "SNIFFER_CONFIG": "${workspaceFolder}/configuration/SnifferConfigurationFile.json" }, "console": "integratedTerminal", "asRoot": true diff --git a/deps/install_dependencies.sh b/deps/install_dependencies.sh new file mode 100755 index 0000000000..10089df1f4 --- /dev/null +++ b/deps/install_dependencies.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +sudo apt install git curl clang-12 -y + +mkdir dependencies +pwd + +git clone git@github.com:kubescape/ebpf-engine.git deps/dependencies/kubescape_ebpf_engine_sc +cd deps/dependencies/kubescape_ebpf_engine_sc +./install_dependencies.sh +mkdir build && cd ./build +cmake .. +make all +cd ../../../ +cp deps/dependencies/kubescape_ebpf_engine_sc/deps/dependencies/falco-libs/build/driver/bpf/probe.o ../resources/ebpf/kernel_obj.o +cp deps/dependencies/kubescape_ebpf_engine_sc/build/main ../resources/ebpf/sniffer diff --git a/install_dependencies.sh b/install_dependencies.sh deleted file mode 100755 index d435d93e33..0000000000 --- a/install_dependencies.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -sudo apt install git curl clang-12 -y - -mkdir dependencies - -git clone git@github.com:kubescape/kubescape-ebpf-engine.git dependencies/kubescape_ebpf_engine_sc -cd dependencies/kubescape_ebpf_engine_sc -./install_dependencies.sh -mkdir build && cd ./build -cmake .. -make all -cd ../../../ -cp dependencies/kubescape_ebpf_engine_sc/dependencies/falco-libs/build/driver/bpf/probe.o ./resources/ebpf/kernel_obj.o -cp dependencies/kubescape_ebpf_engine_sc/build/main ./resources/ebpf/sniffer diff --git a/internal/config/config_interface.go b/internal/config/config_interface.go index 799a48d3c4..95937a7fee 100644 --- a/internal/config/config_interface.go +++ b/internal/config/config_interface.go @@ -1,7 +1,9 @@ package config +import "io" + type ConfigClient interface { // global configuration - GetConfigurationData() ([]byte, error) - ParseConfiguration(data []byte) error + GetConfigurationData() (io.Reader, error) + ParseConfiguration(data io.Reader) error } diff --git a/internal/validator/validator_interface.go b/internal/validator/validator_interface.go index 767158ce20..a070f6b12e 100644 --- a/internal/validator/validator_interface.go +++ b/internal/validator/validator_interface.go @@ -1,5 +1,5 @@ package validator type ValidatorClient interface { - CheckPrerequsits() error + CheckPrerequisites() error } diff --git a/internal/version/version_interface.go b/internal/version/version_interface.go index a4576eda35..c9de9b7e33 100644 --- a/internal/version/version_interface.go +++ b/internal/version/version_interface.go @@ -1,5 +1,5 @@ package version type VersionClient interface { - GetVersion() + GetVersion() string } diff --git a/pkg/conthandler/container_watcher_interface.go b/pkg/conthandler/container_watcher_interface.go index 56624a521c..8fb5bffd91 100644 --- a/pkg/conthandler/container_watcher_interface.go +++ b/pkg/conthandler/container_watcher_interface.go @@ -1,5 +1,5 @@ package conthandler type ContainerWatcherClient interface { - StartWatchedOnNewContainers() + StartWatchedOnNewContainers() error } diff --git a/pkg/sbom/sbom_interface.go b/pkg/sbom/sbom_interface.go index 03a238bfdb..a847dba9e4 100644 --- a/pkg/sbom/sbom_interface.go +++ b/pkg/sbom/sbom_interface.go @@ -1,7 +1,7 @@ package sbom -type SbomClient interface { - GetSBOM(imageID string) - FilterSBOM(sbomFileRelevantMap map[string]bool) - StoreFilterSBOM() +type SBOMClient interface { + GetSBOM(imageID string) error + FilterSBOM(sbomFileRelevantMap map[string]bool) error + StoreFilterSBOM() error }