inspec-core 2.1.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3136 -0
- data/Gemfile +56 -0
- data/LICENSE +14 -0
- data/MAINTAINERS.md +33 -0
- data/MAINTAINERS.toml +52 -0
- data/README.md +453 -0
- data/bin/inspec +12 -0
- data/docs/.gitignore +2 -0
- data/docs/README.md +40 -0
- data/docs/dev/control-eval.md +62 -0
- data/docs/dsl_inspec.md +258 -0
- data/docs/dsl_resource.md +100 -0
- data/docs/glossary.md +99 -0
- data/docs/habitat.md +192 -0
- data/docs/inspec_and_friends.md +114 -0
- data/docs/matchers.md +169 -0
- data/docs/migration.md +293 -0
- data/docs/platforms.md +119 -0
- data/docs/plugin_kitchen_inspec.md +50 -0
- data/docs/profiles.md +378 -0
- data/docs/reporters.md +105 -0
- data/docs/resources/aide_conf.md.erb +76 -0
- data/docs/resources/apache.md.erb +67 -0
- data/docs/resources/apache_conf.md.erb +68 -0
- data/docs/resources/apt.md.erb +71 -0
- data/docs/resources/audit_policy.md.erb +47 -0
- data/docs/resources/auditd.md.erb +79 -0
- data/docs/resources/auditd_conf.md.erb +68 -0
- data/docs/resources/bash.md.erb +75 -0
- data/docs/resources/bond.md.erb +90 -0
- data/docs/resources/bridge.md.erb +57 -0
- data/docs/resources/bsd_service.md.erb +67 -0
- data/docs/resources/chocolatey_package.md.erb +58 -0
- data/docs/resources/command.md.erb +138 -0
- data/docs/resources/cpan.md.erb +79 -0
- data/docs/resources/cran.md.erb +64 -0
- data/docs/resources/crontab.md.erb +89 -0
- data/docs/resources/csv.md.erb +54 -0
- data/docs/resources/dh_params.md.erb +205 -0
- data/docs/resources/directory.md.erb +30 -0
- data/docs/resources/docker.md.erb +219 -0
- data/docs/resources/docker_container.md.erb +103 -0
- data/docs/resources/docker_image.md.erb +94 -0
- data/docs/resources/docker_service.md.erb +114 -0
- data/docs/resources/elasticsearch.md.erb +242 -0
- data/docs/resources/etc_fstab.md.erb +125 -0
- data/docs/resources/etc_group.md.erb +75 -0
- data/docs/resources/etc_hosts.md.erb +78 -0
- data/docs/resources/etc_hosts_allow.md.erb +74 -0
- data/docs/resources/etc_hosts_deny.md.erb +74 -0
- data/docs/resources/file.md.erb +526 -0
- data/docs/resources/filesystem.md.erb +41 -0
- data/docs/resources/firewalld.md.erb +107 -0
- data/docs/resources/gem.md.erb +79 -0
- data/docs/resources/group.md.erb +61 -0
- data/docs/resources/grub_conf.md.erb +101 -0
- data/docs/resources/host.md.erb +86 -0
- data/docs/resources/http.md.erb +197 -0
- data/docs/resources/iis_app.md.erb +122 -0
- data/docs/resources/iis_site.md.erb +135 -0
- data/docs/resources/inetd_conf.md.erb +94 -0
- data/docs/resources/ini.md.erb +76 -0
- data/docs/resources/interface.md.erb +58 -0
- data/docs/resources/iptables.md.erb +64 -0
- data/docs/resources/json.md.erb +63 -0
- data/docs/resources/kernel_module.md.erb +120 -0
- data/docs/resources/kernel_parameter.md.erb +53 -0
- data/docs/resources/key_rsa.md.erb +85 -0
- data/docs/resources/launchd_service.md.erb +57 -0
- data/docs/resources/limits_conf.md.erb +75 -0
- data/docs/resources/login_defs.md.erb +71 -0
- data/docs/resources/mount.md.erb +69 -0
- data/docs/resources/mssql_session.md.erb +60 -0
- data/docs/resources/mysql_conf.md.erb +99 -0
- data/docs/resources/mysql_session.md.erb +74 -0
- data/docs/resources/nginx.md.erb +79 -0
- data/docs/resources/nginx_conf.md.erb +138 -0
- data/docs/resources/npm.md.erb +60 -0
- data/docs/resources/ntp_conf.md.erb +60 -0
- data/docs/resources/oneget.md.erb +53 -0
- data/docs/resources/oracledb_session.md.erb +52 -0
- data/docs/resources/os.md.erb +141 -0
- data/docs/resources/os_env.md.erb +91 -0
- data/docs/resources/package.md.erb +120 -0
- data/docs/resources/packages.md.erb +67 -0
- data/docs/resources/parse_config.md.erb +103 -0
- data/docs/resources/parse_config_file.md.erb +138 -0
- data/docs/resources/passwd.md.erb +141 -0
- data/docs/resources/pip.md.erb +67 -0
- data/docs/resources/port.md.erb +137 -0
- data/docs/resources/postgres_conf.md.erb +79 -0
- data/docs/resources/postgres_hba_conf.md.erb +93 -0
- data/docs/resources/postgres_ident_conf.md.erb +76 -0
- data/docs/resources/postgres_session.md.erb +69 -0
- data/docs/resources/powershell.md.erb +102 -0
- data/docs/resources/processes.md.erb +109 -0
- data/docs/resources/rabbitmq_config.md.erb +41 -0
- data/docs/resources/registry_key.md.erb +158 -0
- data/docs/resources/runit_service.md.erb +57 -0
- data/docs/resources/security_policy.md.erb +47 -0
- data/docs/resources/service.md.erb +121 -0
- data/docs/resources/shadow.md.erb +146 -0
- data/docs/resources/ssh_config.md.erb +73 -0
- data/docs/resources/sshd_config.md.erb +83 -0
- data/docs/resources/ssl.md.erb +119 -0
- data/docs/resources/sys_info.md.erb +42 -0
- data/docs/resources/systemd_service.md.erb +57 -0
- data/docs/resources/sysv_service.md.erb +57 -0
- data/docs/resources/upstart_service.md.erb +57 -0
- data/docs/resources/user.md.erb +140 -0
- data/docs/resources/users.md.erb +127 -0
- data/docs/resources/vbscript.md.erb +55 -0
- data/docs/resources/virtualization.md.erb +57 -0
- data/docs/resources/windows_feature.md.erb +47 -0
- data/docs/resources/windows_hotfix.md.erb +53 -0
- data/docs/resources/windows_task.md.erb +95 -0
- data/docs/resources/wmi.md.erb +81 -0
- data/docs/resources/x509_certificate.md.erb +151 -0
- data/docs/resources/xinetd_conf.md.erb +156 -0
- data/docs/resources/xml.md.erb +85 -0
- data/docs/resources/yaml.md.erb +69 -0
- data/docs/resources/yum.md.erb +98 -0
- data/docs/resources/zfs_dataset.md.erb +53 -0
- data/docs/resources/zfs_pool.md.erb +47 -0
- data/docs/ruby_usage.md +203 -0
- data/docs/shared/matcher_be.md.erb +1 -0
- data/docs/shared/matcher_cmp.md.erb +43 -0
- data/docs/shared/matcher_eq.md.erb +3 -0
- data/docs/shared/matcher_include.md.erb +1 -0
- data/docs/shared/matcher_match.md.erb +1 -0
- data/docs/shell.md +217 -0
- data/examples/README.md +8 -0
- data/examples/inheritance/README.md +65 -0
- data/examples/inheritance/controls/example.rb +14 -0
- data/examples/inheritance/inspec.yml +15 -0
- data/examples/kitchen-ansible/.kitchen.yml +25 -0
- data/examples/kitchen-ansible/Gemfile +19 -0
- data/examples/kitchen-ansible/README.md +53 -0
- data/examples/kitchen-ansible/files/nginx.repo +6 -0
- data/examples/kitchen-ansible/tasks/main.yml +16 -0
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -0
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -0
- data/examples/kitchen-chef/.kitchen.yml +20 -0
- data/examples/kitchen-chef/Berksfile +3 -0
- data/examples/kitchen-chef/Gemfile +19 -0
- data/examples/kitchen-chef/README.md +27 -0
- data/examples/kitchen-chef/metadata.rb +7 -0
- data/examples/kitchen-chef/recipes/default.rb +6 -0
- data/examples/kitchen-chef/recipes/nginx.rb +30 -0
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -0
- data/examples/kitchen-puppet/.kitchen.yml +23 -0
- data/examples/kitchen-puppet/Gemfile +20 -0
- data/examples/kitchen-puppet/Puppetfile +25 -0
- data/examples/kitchen-puppet/README.md +53 -0
- data/examples/kitchen-puppet/manifests/site.pp +33 -0
- data/examples/kitchen-puppet/metadata.json +11 -0
- data/examples/kitchen-puppet/modules/.gitkeep +0 -0
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -0
- data/examples/meta-profile/README.md +37 -0
- data/examples/meta-profile/controls/example.rb +13 -0
- data/examples/meta-profile/inspec.yml +13 -0
- data/examples/profile-attribute.yml +2 -0
- data/examples/profile-attribute/README.md +14 -0
- data/examples/profile-attribute/controls/example.rb +11 -0
- data/examples/profile-attribute/inspec.yml +8 -0
- data/examples/profile-sensitive/README.md +29 -0
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -0
- data/examples/profile-sensitive/controls/sensitive.rb +9 -0
- data/examples/profile-sensitive/inspec.yml +8 -0
- data/examples/profile/README.md +48 -0
- data/examples/profile/controls/example.rb +23 -0
- data/examples/profile/controls/gordon.rb +36 -0
- data/examples/profile/controls/meta.rb +34 -0
- data/examples/profile/inspec.yml +10 -0
- data/examples/profile/libraries/gordon_config.rb +59 -0
- data/inspec-core.gemspec +43 -0
- data/lib/bundles/README.md +3 -0
- data/lib/bundles/inspec-artifact.rb +7 -0
- data/lib/bundles/inspec-artifact/README.md +1 -0
- data/lib/bundles/inspec-artifact/cli.rb +277 -0
- data/lib/bundles/inspec-compliance.rb +16 -0
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -0
- data/lib/bundles/inspec-compliance/README.md +193 -0
- data/lib/bundles/inspec-compliance/api.rb +360 -0
- data/lib/bundles/inspec-compliance/api/login.rb +193 -0
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -0
- data/lib/bundles/inspec-compliance/cli.rb +260 -0
- data/lib/bundles/inspec-compliance/configuration.rb +103 -0
- data/lib/bundles/inspec-compliance/http.rb +125 -0
- data/lib/bundles/inspec-compliance/images/cc-token.png +0 -0
- data/lib/bundles/inspec-compliance/support.rb +36 -0
- data/lib/bundles/inspec-compliance/target.rb +106 -0
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -0
- data/lib/bundles/inspec-habitat.rb +12 -0
- data/lib/bundles/inspec-habitat/cli.rb +36 -0
- data/lib/bundles/inspec-habitat/log.rb +10 -0
- data/lib/bundles/inspec-habitat/profile.rb +391 -0
- data/lib/bundles/inspec-init.rb +8 -0
- data/lib/bundles/inspec-init/README.md +31 -0
- data/lib/bundles/inspec-init/cli.rb +97 -0
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -0
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -0
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -0
- data/lib/bundles/inspec-init/templates/profile/libraries/.gitkeep +0 -0
- data/lib/bundles/inspec-supermarket.rb +13 -0
- data/lib/bundles/inspec-supermarket/README.md +45 -0
- data/lib/bundles/inspec-supermarket/api.rb +84 -0
- data/lib/bundles/inspec-supermarket/cli.rb +73 -0
- data/lib/bundles/inspec-supermarket/target.rb +34 -0
- data/lib/fetchers/git.rb +163 -0
- data/lib/fetchers/local.rb +74 -0
- data/lib/fetchers/mock.rb +35 -0
- data/lib/fetchers/url.rb +247 -0
- data/lib/inspec.rb +24 -0
- data/lib/inspec/archive/tar.rb +29 -0
- data/lib/inspec/archive/zip.rb +19 -0
- data/lib/inspec/backend.rb +93 -0
- data/lib/inspec/base_cli.rb +368 -0
- data/lib/inspec/cached_fetcher.rb +66 -0
- data/lib/inspec/cli.rb +292 -0
- data/lib/inspec/completions/bash.sh.erb +45 -0
- data/lib/inspec/completions/fish.sh.erb +34 -0
- data/lib/inspec/completions/zsh.sh.erb +61 -0
- data/lib/inspec/control_eval_context.rb +179 -0
- data/lib/inspec/dependencies/cache.rb +72 -0
- data/lib/inspec/dependencies/dependency_set.rb +92 -0
- data/lib/inspec/dependencies/lockfile.rb +115 -0
- data/lib/inspec/dependencies/requirement.rb +123 -0
- data/lib/inspec/dependencies/resolver.rb +86 -0
- data/lib/inspec/describe.rb +27 -0
- data/lib/inspec/dsl.rb +66 -0
- data/lib/inspec/dsl_shared.rb +33 -0
- data/lib/inspec/env_printer.rb +157 -0
- data/lib/inspec/errors.rb +14 -0
- data/lib/inspec/exceptions.rb +12 -0
- data/lib/inspec/expect.rb +45 -0
- data/lib/inspec/fetcher.rb +45 -0
- data/lib/inspec/file_provider.rb +275 -0
- data/lib/inspec/formatters.rb +3 -0
- data/lib/inspec/formatters/base.rb +259 -0
- data/lib/inspec/formatters/json_rspec.rb +20 -0
- data/lib/inspec/formatters/show_progress.rb +12 -0
- data/lib/inspec/library_eval_context.rb +58 -0
- data/lib/inspec/log.rb +11 -0
- data/lib/inspec/metadata.rb +247 -0
- data/lib/inspec/method_source.rb +24 -0
- data/lib/inspec/objects.rb +14 -0
- data/lib/inspec/objects/attribute.rb +75 -0
- data/lib/inspec/objects/control.rb +61 -0
- data/lib/inspec/objects/describe.rb +92 -0
- data/lib/inspec/objects/each_loop.rb +36 -0
- data/lib/inspec/objects/list.rb +15 -0
- data/lib/inspec/objects/or_test.rb +40 -0
- data/lib/inspec/objects/ruby_helper.rb +15 -0
- data/lib/inspec/objects/tag.rb +27 -0
- data/lib/inspec/objects/test.rb +87 -0
- data/lib/inspec/objects/value.rb +27 -0
- data/lib/inspec/plugins.rb +60 -0
- data/lib/inspec/plugins/cli.rb +24 -0
- data/lib/inspec/plugins/fetcher.rb +86 -0
- data/lib/inspec/plugins/resource.rb +135 -0
- data/lib/inspec/plugins/secret.rb +15 -0
- data/lib/inspec/plugins/source_reader.rb +40 -0
- data/lib/inspec/polyfill.rb +12 -0
- data/lib/inspec/profile.rb +513 -0
- data/lib/inspec/profile_context.rb +208 -0
- data/lib/inspec/profile_vendor.rb +66 -0
- data/lib/inspec/reporters.rb +60 -0
- data/lib/inspec/reporters/automate.rb +76 -0
- data/lib/inspec/reporters/base.rb +25 -0
- data/lib/inspec/reporters/cli.rb +356 -0
- data/lib/inspec/reporters/json.rb +116 -0
- data/lib/inspec/reporters/json_min.rb +48 -0
- data/lib/inspec/reporters/junit.rb +78 -0
- data/lib/inspec/require_loader.rb +33 -0
- data/lib/inspec/resource.rb +190 -0
- data/lib/inspec/rule.rb +280 -0
- data/lib/inspec/runner.rb +345 -0
- data/lib/inspec/runner_mock.rb +41 -0
- data/lib/inspec/runner_rspec.rb +175 -0
- data/lib/inspec/runtime_profile.rb +26 -0
- data/lib/inspec/schema.rb +213 -0
- data/lib/inspec/secrets.rb +19 -0
- data/lib/inspec/secrets/yaml.rb +30 -0
- data/lib/inspec/shell.rb +220 -0
- data/lib/inspec/shell_detector.rb +90 -0
- data/lib/inspec/source_reader.rb +29 -0
- data/lib/inspec/version.rb +8 -0
- data/lib/matchers/matchers.rb +339 -0
- data/lib/resources/aide_conf.rb +151 -0
- data/lib/resources/apache.rb +48 -0
- data/lib/resources/apache_conf.rb +149 -0
- data/lib/resources/apt.rb +149 -0
- data/lib/resources/audit_policy.rb +63 -0
- data/lib/resources/auditd.rb +231 -0
- data/lib/resources/auditd_conf.rb +46 -0
- data/lib/resources/bash.rb +35 -0
- data/lib/resources/bond.rb +69 -0
- data/lib/resources/bridge.rb +122 -0
- data/lib/resources/chocolatey_package.rb +78 -0
- data/lib/resources/command.rb +73 -0
- data/lib/resources/cpan.rb +58 -0
- data/lib/resources/cran.rb +64 -0
- data/lib/resources/crontab.rb +169 -0
- data/lib/resources/csv.rb +56 -0
- data/lib/resources/dh_params.rb +77 -0
- data/lib/resources/directory.rb +25 -0
- data/lib/resources/docker.rb +236 -0
- data/lib/resources/docker_container.rb +89 -0
- data/lib/resources/docker_image.rb +83 -0
- data/lib/resources/docker_object.rb +57 -0
- data/lib/resources/docker_service.rb +90 -0
- data/lib/resources/elasticsearch.rb +169 -0
- data/lib/resources/etc_fstab.rb +94 -0
- data/lib/resources/etc_group.rb +154 -0
- data/lib/resources/etc_hosts.rb +66 -0
- data/lib/resources/etc_hosts_allow_deny.rb +112 -0
- data/lib/resources/file.rb +298 -0
- data/lib/resources/filesystem.rb +31 -0
- data/lib/resources/firewalld.rb +143 -0
- data/lib/resources/gem.rb +70 -0
- data/lib/resources/groups.rb +215 -0
- data/lib/resources/grub_conf.rb +227 -0
- data/lib/resources/host.rb +306 -0
- data/lib/resources/http.rb +253 -0
- data/lib/resources/iis_app.rb +101 -0
- data/lib/resources/iis_site.rb +148 -0
- data/lib/resources/inetd_conf.rb +54 -0
- data/lib/resources/ini.rb +29 -0
- data/lib/resources/interface.rb +129 -0
- data/lib/resources/iptables.rb +80 -0
- data/lib/resources/json.rb +111 -0
- data/lib/resources/kernel_module.rb +107 -0
- data/lib/resources/kernel_parameter.rb +58 -0
- data/lib/resources/key_rsa.rb +63 -0
- data/lib/resources/limits_conf.rb +46 -0
- data/lib/resources/login_def.rb +57 -0
- data/lib/resources/mount.rb +88 -0
- data/lib/resources/mssql_session.rb +101 -0
- data/lib/resources/mysql.rb +82 -0
- data/lib/resources/mysql_conf.rb +127 -0
- data/lib/resources/mysql_session.rb +85 -0
- data/lib/resources/nginx.rb +96 -0
- data/lib/resources/nginx_conf.rb +226 -0
- data/lib/resources/npm.rb +48 -0
- data/lib/resources/ntp_conf.rb +51 -0
- data/lib/resources/oneget.rb +71 -0
- data/lib/resources/oracledb_session.rb +139 -0
- data/lib/resources/os.rb +36 -0
- data/lib/resources/os_env.rb +86 -0
- data/lib/resources/package.rb +370 -0
- data/lib/resources/packages.rb +111 -0
- data/lib/resources/parse_config.rb +112 -0
- data/lib/resources/passwd.rb +76 -0
- data/lib/resources/pip.rb +130 -0
- data/lib/resources/platform.rb +109 -0
- data/lib/resources/port.rb +771 -0
- data/lib/resources/postgres.rb +131 -0
- data/lib/resources/postgres_conf.rb +114 -0
- data/lib/resources/postgres_hba_conf.rb +90 -0
- data/lib/resources/postgres_ident_conf.rb +79 -0
- data/lib/resources/postgres_session.rb +71 -0
- data/lib/resources/powershell.rb +67 -0
- data/lib/resources/processes.rb +204 -0
- data/lib/resources/rabbitmq_conf.rb +51 -0
- data/lib/resources/registry_key.rb +297 -0
- data/lib/resources/security_policy.rb +180 -0
- data/lib/resources/service.rb +794 -0
- data/lib/resources/shadow.rb +159 -0
- data/lib/resources/ssh_conf.rb +97 -0
- data/lib/resources/ssl.rb +99 -0
- data/lib/resources/sys_info.rb +28 -0
- data/lib/resources/toml.rb +32 -0
- data/lib/resources/users.rb +654 -0
- data/lib/resources/vbscript.rb +68 -0
- data/lib/resources/virtualization.rb +247 -0
- data/lib/resources/windows_feature.rb +84 -0
- data/lib/resources/windows_hotfix.rb +35 -0
- data/lib/resources/windows_task.rb +102 -0
- data/lib/resources/wmi.rb +110 -0
- data/lib/resources/x509_certificate.rb +137 -0
- data/lib/resources/xinetd.rb +106 -0
- data/lib/resources/xml.rb +46 -0
- data/lib/resources/yaml.rb +43 -0
- data/lib/resources/yum.rb +180 -0
- data/lib/resources/zfs_dataset.rb +60 -0
- data/lib/resources/zfs_pool.rb +49 -0
- data/lib/source_readers/flat.rb +39 -0
- data/lib/source_readers/inspec.rb +75 -0
- data/lib/utils/command_wrapper.rb +27 -0
- data/lib/utils/convert.rb +12 -0
- data/lib/utils/database_helpers.rb +77 -0
- data/lib/utils/enumerable_delegation.rb +9 -0
- data/lib/utils/erlang_parser.rb +192 -0
- data/lib/utils/file_reader.rb +25 -0
- data/lib/utils/filter.rb +273 -0
- data/lib/utils/filter_array.rb +27 -0
- data/lib/utils/find_files.rb +47 -0
- data/lib/utils/hash.rb +41 -0
- data/lib/utils/json_log.rb +18 -0
- data/lib/utils/latest_version.rb +22 -0
- data/lib/utils/modulator.rb +12 -0
- data/lib/utils/nginx_parser.rb +105 -0
- data/lib/utils/object_traversal.rb +49 -0
- data/lib/utils/parser.rb +274 -0
- data/lib/utils/pkey_reader.rb +15 -0
- data/lib/utils/plugin_registry.rb +93 -0
- data/lib/utils/simpleconfig.rb +120 -0
- data/lib/utils/spdx.rb +13 -0
- data/lib/utils/spdx.txt +344 -0
- metadata +713 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
# Advanced Auditing:
|
5
|
+
# As soon as you start applying Advanced Audit Configuration Policy, legacy policies will be completely ignored.
|
6
|
+
# reference: https://technet.microsoft.com/en-us/library/cc753632.aspx
|
7
|
+
# use:
|
8
|
+
# - list all categories: Auditpol /list /subcategory:* /r
|
9
|
+
# - list parameters: Auditpol /get /category:"System" /subcategory:"IPsec Driver"
|
10
|
+
# - list specific parameter: Auditpol /get /subcategory:"IPsec Driver"
|
11
|
+
#
|
12
|
+
# @link: http://blogs.technet.com/b/askds/archive/2011/03/11/getting-the-effective-audit-policy-in-windows-7-and-2008-r2.aspx
|
13
|
+
#
|
14
|
+
# Valid values are:
|
15
|
+
#
|
16
|
+
# - "No Auditing"
|
17
|
+
# - "Not Specified"
|
18
|
+
# - "Success"
|
19
|
+
# - "Success and Failure"
|
20
|
+
# - "Failure"
|
21
|
+
#
|
22
|
+
# Further information is available at: https://msdn.microsoft.com/en-us/library/dd973859.aspx
|
23
|
+
|
24
|
+
module Inspec::Resources
|
25
|
+
class AuditPolicy < Inspec.resource(1)
|
26
|
+
name 'audit_policy'
|
27
|
+
supports platform: 'windows'
|
28
|
+
desc 'Use the audit_policy InSpec audit resource to test auditing policies on the Microsoft Windows platform. An auditing policy is a category of security-related events to be audited. Auditing is disabled by default and may be enabled for categories like account management, logon events, policy changes, process tracking, privilege use, system events, or object access. For each enabled auditing category property, the auditing level may be set to No Auditing, Not Specified, Success, Success and Failure, or Failure.'
|
29
|
+
example "
|
30
|
+
describe audit_policy do
|
31
|
+
its('parameter') { should eq 'value' }
|
32
|
+
end
|
33
|
+
"
|
34
|
+
|
35
|
+
def method_missing(method)
|
36
|
+
key = method.to_s
|
37
|
+
|
38
|
+
# expected result:
|
39
|
+
# Machine Name,Policy Target,Subcategory,Subcategory GUID,Inclusion Setting,Exclusion Setting
|
40
|
+
# WIN-MB8NINQ388J,System,Kerberos Authentication Service,{0CCE9242-69AE-11D9-BED3-505054503030},No Auditing,
|
41
|
+
result ||= inspec.command("Auditpol /get /subcategory:'#{key}' /r").stdout
|
42
|
+
|
43
|
+
# find line
|
44
|
+
target = nil
|
45
|
+
result.each_line do |s|
|
46
|
+
target = s.strip if s =~ /\b.*#{key}.*\b/
|
47
|
+
end
|
48
|
+
|
49
|
+
# extract value
|
50
|
+
values = nil
|
51
|
+
unless target.nil?
|
52
|
+
# split csv values and return value
|
53
|
+
values = target.split(',')[4]
|
54
|
+
end
|
55
|
+
|
56
|
+
values
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_s
|
60
|
+
'Audit Policy'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
require 'utils/filter_array'
|
5
|
+
require 'utils/filter'
|
6
|
+
require 'utils/parser'
|
7
|
+
|
8
|
+
module Inspec::Resources
|
9
|
+
class AuditDaemon < Inspec.resource(1)
|
10
|
+
extend Forwardable
|
11
|
+
attr_accessor :lines
|
12
|
+
attr_reader :params
|
13
|
+
|
14
|
+
name 'auditd'
|
15
|
+
supports platform: 'unix'
|
16
|
+
desc 'Use the auditd InSpec audit resource to test the rules for logging that exist on the system. The audit.rules file is typically located under /etc/audit/ and contains the list of rules that define what is captured in log files. These rules are output using the auditcl -l command.'
|
17
|
+
example "
|
18
|
+
describe auditd.syscall('chown').where {arch == 'b32'} do
|
19
|
+
its('action') { should eq ['always'] }
|
20
|
+
its('list') { should eq ['exit'] }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe auditd.where {key == 'privileged'} do
|
24
|
+
its('permissions') { should include ['x'] }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe auditd do
|
28
|
+
its('lines') { should include %r(-w /etc/ssh/sshd_config) }
|
29
|
+
end
|
30
|
+
"
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
@content = inspec.command('/sbin/auditctl -l').stdout.chomp
|
34
|
+
@params = []
|
35
|
+
|
36
|
+
if @content =~ /^LIST_RULES:/
|
37
|
+
return skip_resource 'The version of audit is outdated. The `auditd` resource supports versions of audit >= 2.3.'
|
38
|
+
end
|
39
|
+
parse_content
|
40
|
+
end
|
41
|
+
|
42
|
+
filter = FilterTable.create
|
43
|
+
filter.add_accessor(:where)
|
44
|
+
.add_accessor(:entries)
|
45
|
+
.add(:file, field: 'file')
|
46
|
+
.add(:list, field: 'list')
|
47
|
+
.add(:action, field: 'action')
|
48
|
+
.add(:fields, field: 'fields')
|
49
|
+
.add(:fields_nokey, field: 'fields_nokey')
|
50
|
+
.add(:syscall, field: 'syscall')
|
51
|
+
.add(:key, field: 'key')
|
52
|
+
.add(:arch, field: 'arch')
|
53
|
+
.add(:path, field: 'path')
|
54
|
+
.add(:permissions, field: 'permissions')
|
55
|
+
.add(:exit, field: 'exit')
|
56
|
+
|
57
|
+
filter.connect(self, :params)
|
58
|
+
|
59
|
+
def status(name = nil)
|
60
|
+
@status_content ||= inspec.command('/sbin/auditctl -s').stdout.chomp
|
61
|
+
@status_params ||= Hash[@status_content.scan(/^([^ ]+) (.*)$/)]
|
62
|
+
|
63
|
+
return @status_params[name] if name
|
64
|
+
@status_params
|
65
|
+
end
|
66
|
+
|
67
|
+
def parse_content
|
68
|
+
@lines = @content.lines.map(&:chomp)
|
69
|
+
|
70
|
+
lines.each do |line|
|
71
|
+
if is_file_syscall_syntax?(line)
|
72
|
+
file_syscall_syntax_rules_for(line)
|
73
|
+
end
|
74
|
+
|
75
|
+
if is_syscall?(line)
|
76
|
+
syscall_rules_for(line)
|
77
|
+
|
78
|
+
elsif is_file?(line)
|
79
|
+
file_rules_for(line)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def file_syscall_syntax_rules_for(line)
|
85
|
+
file = file_syscall_syntax_for(line)
|
86
|
+
action, list = action_list_for(line)
|
87
|
+
fields = rule_fields_for(line)
|
88
|
+
key_field, fields_nokey = remove_key_from(fields)
|
89
|
+
key = key_in(key_field.join(''))
|
90
|
+
perms = perms_in(fields)
|
91
|
+
|
92
|
+
@params.push(
|
93
|
+
{
|
94
|
+
'file' => file,
|
95
|
+
'list' => list,
|
96
|
+
'action' => action,
|
97
|
+
'fields' => fields,
|
98
|
+
'permissions' => perms,
|
99
|
+
'key' => key,
|
100
|
+
'fields_nokey' => fields_nokey,
|
101
|
+
},
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
def syscall_rules_for(line)
|
106
|
+
syscalls = syscalls_for(line)
|
107
|
+
action, list = action_list_for(line)
|
108
|
+
fields = rule_fields_for(line)
|
109
|
+
key_field, fields_nokey = remove_key_from(fields)
|
110
|
+
key = key_in(key_field.join(''))
|
111
|
+
arch = arch_in(fields)
|
112
|
+
path = path_in(fields)
|
113
|
+
perms = perms_in(fields)
|
114
|
+
exit_field = exit_in(fields)
|
115
|
+
|
116
|
+
syscalls.each do |s|
|
117
|
+
@params.push(
|
118
|
+
{
|
119
|
+
'syscall' => s,
|
120
|
+
'list' => list,
|
121
|
+
'action' => action,
|
122
|
+
'fields' => fields,
|
123
|
+
'key' => key,
|
124
|
+
'arch' => arch,
|
125
|
+
'path' => path,
|
126
|
+
'permissions' => perms,
|
127
|
+
'exit' => exit_field,
|
128
|
+
'fields_nokey' => fields_nokey,
|
129
|
+
},
|
130
|
+
)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def file_rules_for(line)
|
135
|
+
file = file_for(line)
|
136
|
+
perms = permissions_for(line)
|
137
|
+
key = key_for(line)
|
138
|
+
|
139
|
+
@params.push(
|
140
|
+
{
|
141
|
+
'file' => file,
|
142
|
+
'key' => key,
|
143
|
+
'permissions' => perms,
|
144
|
+
},
|
145
|
+
)
|
146
|
+
end
|
147
|
+
|
148
|
+
def to_s
|
149
|
+
'Auditd Rules'
|
150
|
+
end
|
151
|
+
|
152
|
+
private
|
153
|
+
|
154
|
+
def is_syscall?(line)
|
155
|
+
line.match(/-S /)
|
156
|
+
end
|
157
|
+
|
158
|
+
def is_file?(line)
|
159
|
+
line.match(/-w /)
|
160
|
+
end
|
161
|
+
|
162
|
+
def is_file_syscall_syntax?(line)
|
163
|
+
line.match(/-F path=/)
|
164
|
+
end
|
165
|
+
|
166
|
+
def syscalls_for(line)
|
167
|
+
line.scan(/-S ([^ ]+)\s?/).flatten.first.split(',')
|
168
|
+
end
|
169
|
+
|
170
|
+
def action_list_for(line)
|
171
|
+
line.scan(/-a ([^,]+),([^ ]+)\s?/).flatten
|
172
|
+
end
|
173
|
+
|
174
|
+
def key_for(line)
|
175
|
+
line.match(/-k ([^ ]+)\s?/)[1] if line.include?('-k ')
|
176
|
+
end
|
177
|
+
|
178
|
+
def file_for(line)
|
179
|
+
line.match(/-w ([^ ]+)\s?/)[1]
|
180
|
+
end
|
181
|
+
|
182
|
+
def file_syscall_syntax_for(line)
|
183
|
+
line.match(/-F path=(\S+)\s?/)[1]
|
184
|
+
end
|
185
|
+
|
186
|
+
def permissions_for(line)
|
187
|
+
line.match(/-p ([^ ]+)/)[1].scan(/\w/)
|
188
|
+
end
|
189
|
+
|
190
|
+
def rule_fields_for(line)
|
191
|
+
line.gsub(/-[aS] [^ ]+ /, '').split('-F ').map { |l| l.split(' ') }.flatten
|
192
|
+
end
|
193
|
+
|
194
|
+
def arch_in(fields)
|
195
|
+
fields.each do |field|
|
196
|
+
return field.match(/arch=(\S+)\s?/)[1] if field.start_with?('arch=')
|
197
|
+
end
|
198
|
+
nil
|
199
|
+
end
|
200
|
+
|
201
|
+
def perms_in(fields)
|
202
|
+
fields.each do |field|
|
203
|
+
return field.match(/perm=(\S+)\s?/)[1].scan(/\w/) if field.start_with?('perm=')
|
204
|
+
end
|
205
|
+
nil
|
206
|
+
end
|
207
|
+
|
208
|
+
def path_in(fields)
|
209
|
+
fields.each do |field|
|
210
|
+
return field.match(/path=(\S+)\s?/)[1] if field.start_with?('path=')
|
211
|
+
end
|
212
|
+
nil
|
213
|
+
end
|
214
|
+
|
215
|
+
def exit_in(fields)
|
216
|
+
fields.each do |field|
|
217
|
+
return field.match(/exit=(\S+)\s?/)[1] if field.start_with?('exit=')
|
218
|
+
end
|
219
|
+
nil
|
220
|
+
end
|
221
|
+
|
222
|
+
def key_in(field)
|
223
|
+
_, v = field.split('=')
|
224
|
+
v
|
225
|
+
end
|
226
|
+
|
227
|
+
def remove_key_from(fields)
|
228
|
+
fields.partition { |x| x.start_with? 'key' }
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
require 'utils/simpleconfig'
|
5
|
+
require 'utils/file_reader'
|
6
|
+
|
7
|
+
module Inspec::Resources
|
8
|
+
class AuditDaemonConf < Inspec.resource(1)
|
9
|
+
name 'auditd_conf'
|
10
|
+
supports platform: 'unix'
|
11
|
+
desc "Use the auditd_conf InSpec audit resource to test the configuration settings for the audit daemon. This file is typically located under /etc/audit/auditd.conf' on UNIX and Linux platforms."
|
12
|
+
example "
|
13
|
+
describe auditd_conf do
|
14
|
+
its('space_left_action') { should eq 'email' }
|
15
|
+
end
|
16
|
+
"
|
17
|
+
|
18
|
+
include FileReader
|
19
|
+
|
20
|
+
def initialize(path = nil)
|
21
|
+
@conf_path = path || '/etc/audit/auditd.conf'
|
22
|
+
@content = read_file_content(@conf_path)
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_missing(name)
|
26
|
+
read_params[name.to_s]
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
'Audit Daemon Config'
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def read_params
|
36
|
+
return @params if defined?(@params)
|
37
|
+
|
38
|
+
# parse the file
|
39
|
+
conf = SimpleConfig.new(
|
40
|
+
@content,
|
41
|
+
multiple_values: false,
|
42
|
+
)
|
43
|
+
@params = conf.params
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'utils/command_wrapper'
|
4
|
+
require 'resources/command'
|
5
|
+
|
6
|
+
module Inspec::Resources
|
7
|
+
class Bash < Cmd
|
8
|
+
name 'bash'
|
9
|
+
supports platform: 'unix'
|
10
|
+
desc 'Run a command or script in BASH.'
|
11
|
+
example "
|
12
|
+
describe bash('ls -al /') do
|
13
|
+
its('stdout') { should match /bin/ }
|
14
|
+
its('stderr') { should eq '' }
|
15
|
+
its('exit_status') { should eq 0 }
|
16
|
+
end
|
17
|
+
|
18
|
+
# Specify the path of the executable:
|
19
|
+
bash('...', path: '/bin/bash')
|
20
|
+
|
21
|
+
# Specify arguments (defaults to -c)
|
22
|
+
bash('...', args: '-x -c')
|
23
|
+
"
|
24
|
+
|
25
|
+
def initialize(command, options = {})
|
26
|
+
@raw_command = command
|
27
|
+
options[:shell] = 'bash' if options.is_a?(Hash)
|
28
|
+
super(CommandWrapper.wrap(command, options))
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
"Bash command #{@raw_command}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'resources/file'
|
4
|
+
require 'utils/file_reader'
|
5
|
+
|
6
|
+
module Inspec::Resources
|
7
|
+
class Bond < FileResource
|
8
|
+
name 'bond'
|
9
|
+
supports platform: 'unix'
|
10
|
+
desc 'Use the bond InSpec audit resource to test a logical, bonded network interface (i.e. "two or more network interfaces aggregated into a single, logical network interface"). On Linux platforms, any value in the /proc/net/bonding directory may be tested.'
|
11
|
+
example "
|
12
|
+
describe bond('bond0') do
|
13
|
+
it { should exist }
|
14
|
+
end
|
15
|
+
"
|
16
|
+
|
17
|
+
include FileReader
|
18
|
+
|
19
|
+
def initialize(bond)
|
20
|
+
@bond = bond
|
21
|
+
@path = "/proc/net/bonding/#{bond}"
|
22
|
+
@file = inspec.file(@path)
|
23
|
+
@content = read_file_content(@path, allow_empty: true)
|
24
|
+
@params = {}
|
25
|
+
@loaded = false
|
26
|
+
end
|
27
|
+
|
28
|
+
def read_content
|
29
|
+
@params = SimpleConfig.new(
|
30
|
+
@content,
|
31
|
+
assignment_regex: /^\s*([^:]*?)\s*:\s*(.*?)\s*$/,
|
32
|
+
multiple_values: true,
|
33
|
+
).params if @file.exist?
|
34
|
+
@loaded = true
|
35
|
+
@content
|
36
|
+
end
|
37
|
+
|
38
|
+
# ensures the content is loaded before we return the params
|
39
|
+
def params
|
40
|
+
read_content if @loaded == false
|
41
|
+
@params
|
42
|
+
end
|
43
|
+
|
44
|
+
def content
|
45
|
+
read_content if @loaded == false
|
46
|
+
@content
|
47
|
+
end
|
48
|
+
|
49
|
+
def exist?
|
50
|
+
@file.exist?
|
51
|
+
end
|
52
|
+
|
53
|
+
def has_interface?(interface)
|
54
|
+
params['Slave Interface'].include?(interface)
|
55
|
+
end
|
56
|
+
|
57
|
+
def interfaces
|
58
|
+
params['Slave Interface']
|
59
|
+
end
|
60
|
+
|
61
|
+
def mode
|
62
|
+
params['Bonding Mode'].first
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_s
|
66
|
+
"Bond #{@bond}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Usage:
|
4
|
+
# describe bridge('br0') do
|
5
|
+
# it { should exist }
|
6
|
+
# it { should have_interface 'eth0' }
|
7
|
+
# end
|
8
|
+
|
9
|
+
module Inspec::Resources
|
10
|
+
class Bridge < Inspec.resource(1)
|
11
|
+
name 'bridge'
|
12
|
+
supports platform: 'unix'
|
13
|
+
desc 'Use the bridge InSpec audit resource to test basic network bridge properties, such as name, if an interface is defined, and the associations for any defined interface.'
|
14
|
+
example "
|
15
|
+
describe bridge 'br0' do
|
16
|
+
it { should exist }
|
17
|
+
it { should have_interface 'eth0' }
|
18
|
+
end
|
19
|
+
"
|
20
|
+
|
21
|
+
def initialize(bridge_name)
|
22
|
+
@bridge_name = bridge_name
|
23
|
+
|
24
|
+
@bridge_provider = nil
|
25
|
+
if inspec.os.linux?
|
26
|
+
@bridge_provider = LinuxBridge.new(inspec)
|
27
|
+
elsif inspec.os.windows?
|
28
|
+
@bridge_provider = WindowsBridge.new(inspec)
|
29
|
+
else
|
30
|
+
return skip_resource 'The `bridge` resource is not supported on your OS yet.'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def exists?
|
35
|
+
!bridge_info.nil? && !bridge_info[:name].nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
def has_interface?(interface)
|
39
|
+
return skip_resource 'The `bridge` resource does not provide interface detection for Windows yet' if inspec.os.windows?
|
40
|
+
bridge_info.nil? ? false : bridge_info[:interfaces].include?(interface)
|
41
|
+
end
|
42
|
+
|
43
|
+
def interfaces
|
44
|
+
bridge_info.nil? ? nil : bridge_info[:interfaces]
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_s
|
48
|
+
"Bridge #{@bridge_name}"
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def bridge_info
|
54
|
+
return @cache if defined?(@cache)
|
55
|
+
@cache = @bridge_provider.bridge_info(@bridge_name) if !@bridge_provider.nil?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class BridgeDetection
|
60
|
+
attr_reader :inspec
|
61
|
+
def initialize(inspec)
|
62
|
+
@inspec = inspec
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Linux Bridge
|
67
|
+
# If /sys/class/net/{interface}/bridge exists then it must be a bridge
|
68
|
+
# /sys/class/net/{interface}/brif contains the network interfaces
|
69
|
+
# @see http://www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge.html
|
70
|
+
# @see http://unix.stackexchange.com/questions/40560/how-to-know-if-a-network-interface-is-tap-tun-bridge-or-physical
|
71
|
+
class LinuxBridge < BridgeDetection
|
72
|
+
def bridge_info(bridge_name)
|
73
|
+
# read bridge information
|
74
|
+
bridge = inspec.file("/sys/class/net/#{bridge_name}/bridge").directory?
|
75
|
+
return nil unless bridge
|
76
|
+
|
77
|
+
# load interface names
|
78
|
+
interfaces = inspec.command("ls -1 /sys/class/net/#{bridge_name}/brif/")
|
79
|
+
interfaces = interfaces.stdout.chomp.split("\n")
|
80
|
+
{
|
81
|
+
name: bridge_name,
|
82
|
+
interfaces: interfaces,
|
83
|
+
}
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Windows Bridge
|
88
|
+
# select netadapter by adapter binding for windows
|
89
|
+
# Get-NetAdapterBinding -ComponentID ms_bridge | Get-NetAdapter
|
90
|
+
# @see https://technet.microsoft.com/en-us/library/jj130921(v=wps.630).aspx
|
91
|
+
# RegKeys: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
|
92
|
+
class WindowsBridge < BridgeDetection
|
93
|
+
def bridge_info(bridge_name)
|
94
|
+
# find all bridge adapters
|
95
|
+
cmd = inspec.command('Get-NetAdapterBinding -ComponentID ms_bridge | Get-NetAdapter | Select-Object -Property Name, InterfaceDescription | ConvertTo-Json')
|
96
|
+
|
97
|
+
# filter network interface
|
98
|
+
begin
|
99
|
+
bridges = JSON.parse(cmd.stdout)
|
100
|
+
rescue JSON::ParserError => _e
|
101
|
+
return nil
|
102
|
+
end
|
103
|
+
|
104
|
+
# ensure we have an array of groups
|
105
|
+
bridges = [bridges] if !bridges.is_a?(Array)
|
106
|
+
|
107
|
+
# select the requested interface
|
108
|
+
bridges = bridges.each_with_object([]) do |adapter, adapter_collection|
|
109
|
+
# map object
|
110
|
+
info = {
|
111
|
+
name: adapter['Name'],
|
112
|
+
interfaces: nil,
|
113
|
+
}
|
114
|
+
adapter_collection.push(info) if info[:name].casecmp(bridge_name) == 0
|
115
|
+
end
|
116
|
+
|
117
|
+
return nil if bridges.empty?
|
118
|
+
warn "[Possible Error] detected multiple bridges interfaces with the name #{bridge_name}" if bridges.size > 1
|
119
|
+
bridges[0]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|