From aebcf9c181bf17721c224e3e29f742689f27111f Mon Sep 17 00:00:00 2001 From: Christoph Wurm Date: Mon, 17 Dec 2018 17:50:24 +0000 Subject: [PATCH] [Auditbeat] Add system module (#9546) Adds the system module to Auditbeat, with four metricsets: host, process, socket, and user. A fifth metricset - packages - is disabled for now. Host collects general host information, e.g. boottime, timezone, OS, network interfaces. Processes collects information about currently running, started, and stopped processes. Socket collects information about open sockets. User detects new users, deleted users, changes to users (e.g. groups), and - as a special distinct category - password changes. --- .travis.yml | 4 + CHANGELOG.asciidoc | 2 + Makefile | 10 +- Vagrantfile | 5 +- auditbeat/Dockerfile | 21 +- auditbeat/Makefile | 32 +- auditbeat/auditbeat.yml | 1 - auditbeat/core/eventmod.go | 6 + auditbeat/docker-compose.yml | 6 +- auditbeat/docs/fields.asciidoc | 282 ++++ auditbeat/docs/modules/auditd.asciidoc | 1 + auditbeat/docs/modules_list.asciidoc | 4 +- auditbeat/include/list.go | 5 +- auditbeat/magefile.go | 249 ++-- auditbeat/module/auditd/_meta/config.yml.tmpl | 2 +- .../file_integrity/_meta/config.yml.tmpl | 2 +- auditbeat/scripts/docs_collector.py | 71 +- auditbeat/scripts/generate_config.go | 141 -- auditbeat/scripts/mage/config.go | 105 ++ auditbeat/scripts/mage/docs.go | 101 ++ auditbeat/scripts/mage/package.go | 114 ++ auditbeat/tests/system/auditbeat.py | 7 +- auditbeat/tests/system/test_base.py | 2 +- .../module_include_list.go | 2 +- dev-tools/mage/common.go | 11 + dev-tools/mage/crossbuild.go | 26 +- dev-tools/mage/fields.go | 42 +- dev-tools/mage/fmt.go | 8 +- dev-tools/mage/integtest.go | 9 + dev-tools/mage/kibana.go | 32 + dev-tools/mage/pkgspecs.go | 38 +- dev-tools/mage/pkgtypes.go | 13 +- dev-tools/mage/pytest.go | 6 +- dev-tools/make/xpack.mk | 9 +- dev-tools/packaging/packages.yml | 59 +- libbeat/common/file/fileinfo.go | 6 + libbeat/common/file/fileinfo_unix.go | 4 + libbeat/common/file/fileinfo_windows.go | 4 + libbeat/generator/fields/fields.go | 34 +- .../fields/module_fields_collector.go | 26 +- libbeat/scripts/Makefile | 9 +- libbeat/scripts/generate_fields_docs.py | 8 +- libbeat/tests/system/beat/beat.py | 17 +- libbeat/tests/system/test_base.py | 7 +- .../system => helper}/socket/listeners.go | 0 .../socket/listeners_test.go | 0 metricbeat/helper/socket/netlink.go | 54 + .../system => helper}/socket/ptable.go | 0 metricbeat/module/system/socket/socket.go | 28 +- metricbeat/tests/system/metricbeat.py | 8 +- x-pack/auditbeat/.gitignore | 4 + x-pack/auditbeat/Makefile | 3 + x-pack/auditbeat/auditbeat.docker.yml | 21 + x-pack/auditbeat/auditbeat.reference.yml | 1278 +++++++++++++++++ x-pack/auditbeat/auditbeat.yml | 195 +++ x-pack/auditbeat/cache/cache.go | 59 + x-pack/auditbeat/cache/cache_test.go | 55 + x-pack/auditbeat/cmd/root.go | 5 +- x-pack/auditbeat/docker-compose.yml | 13 + x-pack/auditbeat/docs/modules/system.asciidoc | 148 ++ .../docs/modules/system/host.asciidoc | 21 + .../docs/modules/system/process.asciidoc | 21 + .../docs/modules/system/socket.asciidoc | 21 + .../docs/modules/system/user.asciidoc | 21 + x-pack/auditbeat/include/fields.go | 22 + x-pack/auditbeat/include/list.go | 16 + x-pack/auditbeat/magefile.go | 173 +++ x-pack/auditbeat/main_test.go | 30 + .../module/system/_meta/config.yml.tmpl | 41 + .../module/system/_meta/docs.asciidoc | 92 ++ .../auditbeat/module/system/_meta/fields.yml | 10 + .../module/system/host/_meta/data.json | 54 + .../module/system/host/_meta/docs.asciidoc | 7 + .../module/system/host/_meta/fields.yml | 71 + x-pack/auditbeat/module/system/host/config.go | 28 + x-pack/auditbeat/module/system/host/host.go | 469 ++++++ .../auditbeat/module/system/host/host_test.go | 32 + .../module/system/packages/_meta/data.json | 30 + .../packages/_meta/docs.asciidoc.disabled | 8 + .../system/packages/_meta/fields.yml.disabled | 50 + .../module/system/packages/config.go | 19 + .../module/system/packages/packages.go | 338 +++++ .../module/system/packages/packages_test.go | 28 + .../module/system/process/_meta/data.json | 29 + .../module/system/process/_meta/docs.asciidoc | 7 + .../auditbeat/module/system/process/config.go | 31 + .../module/system/process/process.go | 326 +++++ .../module/system/process/process_test.go | 37 + .../module/system/socket/_meta/data.json | 38 + .../module/system/socket/_meta/docs.asciidoc | 7 + .../auditbeat/module/system/socket/config.go | 31 + .../auditbeat/module/system/socket/socket.go | 414 ++++++ .../module/system/socket/socket_other.go | 29 + .../module/system/socket/socket_test.go | 125 ++ .../module/system/user/_meta/data.json | 48 + .../module/system/user/_meta/docs.asciidoc | 7 + .../module/system/user/_meta/fields.yml | 60 + x-pack/auditbeat/module/system/user/config.go | 30 + x-pack/auditbeat/module/system/user/user.go | 534 +++++++ .../auditbeat/module/system/user/user_test.go | 38 + .../module/system/user/users_linux.go | 225 +++ .../module/system/user/users_other.go | 29 + .../auditbeat/tests/system/auditbeat_xpack.py | 55 + .../auditbeat/tests/system/test_metricsets.py | 92 ++ x-pack/filebeat/include/list.go | 2 +- x-pack/filebeat/magefile.go | 2 +- x-pack/functionbeat/magefile.go | 2 +- x-pack/metricbeat/include/list.go | 2 +- x-pack/metricbeat/magefile.go | 2 +- 109 files changed, 6671 insertions(+), 547 deletions(-) delete mode 100644 auditbeat/scripts/generate_config.go create mode 100644 auditbeat/scripts/mage/config.go create mode 100644 auditbeat/scripts/mage/docs.go create mode 100644 auditbeat/scripts/mage/package.go rename metricbeat/{module/system => helper}/socket/listeners.go (100%) rename metricbeat/{module/system => helper}/socket/listeners_test.go (100%) create mode 100644 metricbeat/helper/socket/netlink.go rename metricbeat/{module/system => helper}/socket/ptable.go (100%) create mode 100644 x-pack/auditbeat/.gitignore create mode 100644 x-pack/auditbeat/Makefile create mode 100644 x-pack/auditbeat/auditbeat.docker.yml create mode 100644 x-pack/auditbeat/auditbeat.reference.yml create mode 100644 x-pack/auditbeat/auditbeat.yml create mode 100644 x-pack/auditbeat/cache/cache.go create mode 100644 x-pack/auditbeat/cache/cache_test.go create mode 100644 x-pack/auditbeat/docker-compose.yml create mode 100644 x-pack/auditbeat/docs/modules/system.asciidoc create mode 100644 x-pack/auditbeat/docs/modules/system/host.asciidoc create mode 100644 x-pack/auditbeat/docs/modules/system/process.asciidoc create mode 100644 x-pack/auditbeat/docs/modules/system/socket.asciidoc create mode 100644 x-pack/auditbeat/docs/modules/system/user.asciidoc create mode 100644 x-pack/auditbeat/include/fields.go create mode 100644 x-pack/auditbeat/include/list.go create mode 100644 x-pack/auditbeat/magefile.go create mode 100644 x-pack/auditbeat/main_test.go create mode 100644 x-pack/auditbeat/module/system/_meta/config.yml.tmpl create mode 100644 x-pack/auditbeat/module/system/_meta/docs.asciidoc create mode 100644 x-pack/auditbeat/module/system/_meta/fields.yml create mode 100644 x-pack/auditbeat/module/system/host/_meta/data.json create mode 100644 x-pack/auditbeat/module/system/host/_meta/docs.asciidoc create mode 100644 x-pack/auditbeat/module/system/host/_meta/fields.yml create mode 100644 x-pack/auditbeat/module/system/host/config.go create mode 100644 x-pack/auditbeat/module/system/host/host.go create mode 100644 x-pack/auditbeat/module/system/host/host_test.go create mode 100644 x-pack/auditbeat/module/system/packages/_meta/data.json create mode 100644 x-pack/auditbeat/module/system/packages/_meta/docs.asciidoc.disabled create mode 100644 x-pack/auditbeat/module/system/packages/_meta/fields.yml.disabled create mode 100644 x-pack/auditbeat/module/system/packages/config.go create mode 100644 x-pack/auditbeat/module/system/packages/packages.go create mode 100644 x-pack/auditbeat/module/system/packages/packages_test.go create mode 100644 x-pack/auditbeat/module/system/process/_meta/data.json create mode 100644 x-pack/auditbeat/module/system/process/_meta/docs.asciidoc create mode 100644 x-pack/auditbeat/module/system/process/config.go create mode 100644 x-pack/auditbeat/module/system/process/process.go create mode 100644 x-pack/auditbeat/module/system/process/process_test.go create mode 100644 x-pack/auditbeat/module/system/socket/_meta/data.json create mode 100644 x-pack/auditbeat/module/system/socket/_meta/docs.asciidoc create mode 100644 x-pack/auditbeat/module/system/socket/config.go create mode 100644 x-pack/auditbeat/module/system/socket/socket.go create mode 100644 x-pack/auditbeat/module/system/socket/socket_other.go create mode 100644 x-pack/auditbeat/module/system/socket/socket_test.go create mode 100644 x-pack/auditbeat/module/system/user/_meta/data.json create mode 100644 x-pack/auditbeat/module/system/user/_meta/docs.asciidoc create mode 100644 x-pack/auditbeat/module/system/user/_meta/fields.yml create mode 100644 x-pack/auditbeat/module/system/user/config.go create mode 100644 x-pack/auditbeat/module/system/user/user.go create mode 100644 x-pack/auditbeat/module/system/user/user_test.go create mode 100644 x-pack/auditbeat/module/system/user/users_linux.go create mode 100644 x-pack/auditbeat/module/system/user/users_other.go create mode 100644 x-pack/auditbeat/tests/system/auditbeat_xpack.py create mode 100644 x-pack/auditbeat/tests/system/test_metricsets.py diff --git a/.travis.yml b/.travis.yml index 60282e2c955e..7ea410b0bfe6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -62,6 +62,10 @@ jobs: env: TARGETS="-C auditbeat crosscompile" go: $GO_VERSION stage: test + - os: linux + env: TARGETS="-C x-pack/auditbeat testsuite" + go: $GO_VERSION + stage: test # Libbeat - os: linux diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 62790272e476..11e8a3ac5290 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -97,6 +97,8 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha1...master[Check the HEAD d *Auditbeat* +- Add system module. {pull}9546[9546] + *Filebeat* - Added `detect_null_bytes` selector to detect null bytes from a io.reader. {pull}9210[9210] diff --git a/Makefile b/Makefile index 20af5832d580..ce6953c2c4d5 100644 --- a/Makefile +++ b/Makefile @@ -13,11 +13,15 @@ REVIEWDOG_OPTIONS?=-diff "git diff master" REVIEWDOG_REPO=github.com/haya14busa/reviewdog/cmd/reviewdog XPACK_SUFFIX=x-pack/ +# PROJECTS_XPACK_PKG is a list of Beats that have independent packaging support +# in the x-pack directory (rather than having the OSS build produce both sets +# of artifacts). This will be removed once we complete the transition. +PROJECTS_XPACK_PKG=x-pack/auditbeat # PROJECTS_XPACK_MAGE is a list of Beats whose primary build logic is based in # Mage. For compatibility with CI testing these projects support a subset of the # makefile targets. After all Beats converge to primarily using Mage we can # remove this and treat all sub-projects the same. -PROJECTS_XPACK_MAGE=x-pack/filebeat x-pack/metricbeat +PROJECTS_XPACK_MAGE=x-pack/filebeat x-pack/metricbeat $(PROJECTS_XPACK_PKG) # Runs complete testsuites (unit, system, integration) for all beats with coverage and race detection. # Also it builds the docs and the generators @@ -156,8 +160,8 @@ snapshot: # Builds a release. .PHONY: release release: beats-dashboards - @$(foreach var,$(BEATS),$(MAKE) -C $(var) release || exit 1;) - @$(foreach var,$(BEATS), \ + @$(foreach var,$(BEATS) $(PROJECTS_XPACK_PKG),$(MAKE) -C $(var) release || exit 1;) + @$(foreach var,$(BEATS) $(PROJECTS_XPACK_PKG), \ test -d $(var)/build/distributions && test -n "$$(ls $(var)/build/distributions)" || exit 0; \ mkdir -p build/distributions/$(subst $(XPACK_SUFFIX),'',$(var)) && mv -f $(var)/build/distributions/* build/distributions/$(subst $(XPACK_SUFFIX),'',$(var))/ || exit 1;) diff --git a/Vagrantfile b/Vagrantfile index 310e5e097596..b795898812db 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -37,7 +37,7 @@ cmd /c mklink /d C:\\Gopath\\src\\github.com\\elastic\\beats \\\\vboxsvr\\vagran echo "Installing gvm to manage go version" [Net.ServicePointManager]::SecurityProtocol = "tls12" -Invoke-WebRequest -URI https://github.com/andrewkroh/gvm/releases/download/v0.0.5/gvm-windows-amd64.exe -Outfile C:\Windows\System32\gvm.exe +Invoke-WebRequest -URI https://github.com/andrewkroh/gvm/releases/download/v0.1.0/gvm-windows-amd64.exe -Outfile C:\Windows\System32\gvm.exe C:\Windows\System32\gvm.exe --format=powershell #{GO_VERSION} | Invoke-Expression go version @@ -72,8 +72,9 @@ SCRIPT $linuxGvmProvision = <