Fast and efficient osquery management.
Random collection of tools/scripts that all have been used at some point during the development of osctrl
Comprehensive Python3 test suite for the osctrl-api service. Tests all API endpoints systematically and provides detailed pass/fail reporting. Useful for regression testing after making changes to the API.
Basic usage:
# With login credentials
$ python3 api_tester.py http://localhost:9002 --username admin --password admin --env <env-uuid>
# With existing token
$ python3 api_tester.py http://localhost:9002 --token <api-token> --env <env-uuid>
# Skip authentication tests
$ python3 api_tester.py http://localhost:9002 --skip-auth
# Verbose output
$ python3 api_tester.py http://localhost:9002 --token <token> --env <env-uuid> --verbose
# Disable SSL verification (for self-signed certs)
$ python3 api_tester.py https://api.example.com --token <token> --env <env-uuid> --insecureOptions:
--username, -u: Username for authentication--password, -p: Password for authentication--env, -e: Environment UUID for testing (required for most tests)--token, -t: Use existing API token instead of logging in--skip-auth: Skip authentication tests--verbose, -v: Show detailed request/response information--insecure, -k: Disable SSL certificate verification
The script tests all API endpoints including:
- Health checks and status endpoints
- Authentication (login)
- Environments, platforms, nodes
- Tags, settings, users
- Queries and carves (if enabled)
- Audit logs (if enabled)
It requires to install requests with pip install requests.
Console-native load harness for osctrl-tls and osctrl-api.
steadymode keeps a fixed load running until interrupted withCtrl+C,q, orQsweepmode ramps node count by stage and stops on the first threshold breach, or exits early withCtrl+C,q, orQdashboarddisplay mode renders a densetermuiterminal dashboard- writes
fake_news_report.jsonafter sweep completion or steady shutdown - uses
fake_news_state.jsonas the default persisted node-state file - can auto-discover environment UUIDs and enroll secrets from
osctrl-apiwith--discover-envs - simulates distributed-query write results internally, without shelling out to
osqueryi
Quick example:
$ go run ./tools/fake_news_go --tls-url http://localhost:9000 --env <env-uuid> --secret <secret> --display-mode dashboardAutomatic discovery from osctrl-api:
$ go run ./tools/fake_news_go \
--tls-url http://localhost:9000 \
--api-url http://localhost:9002 \
--api-username admin \
--api-password admin \
--discover-envs \
--display-mode dashboardMixed TLS + API sweep:
$ go run ./tools/fake_news_go \
--tls-url http://localhost:9000 \
--api-url http://localhost:9002 \
--api-username admin \
--api-password admin \
--env <env-uuid> \
--secret <secret> \
--mode sweep \
--display-mode dashboardHelper targets from tools/fake_news_go:
$ make -C tools/fake_news_go dashboard ENV_UUID=<env-uuid> SECRET=<secret>
$ make -C tools/fake_news_go dashboard DISCOVER_ENVS=1 API_URL=http://localhost:9002 API_USERNAME=admin API_PASSWORD=admin
$ make -C tools/fake_news_go sweep ENV_UUID=<env-uuid> SECRET=<secret>See tools/fake_news_go/README.md for details.
Go tool to convert the old (pre 0.5.0) osctrl JSON configuration files into the single YAML configuration file used by osctrl-tls, osctrl-admin and osctrl-api since the YAML migration. The old configuration was split in multiple JSON files (tls.json/admin.json/api.json, db.json, redis.json, jwt.json, plus optional SAML, logger and carver files), each wrapped in a top-level JSON key.
# Convert an old TLS configuration with graylog logger and S3 carver
$ go run ./tools/json2yaml-config -service tls \
-config config/tls.json \
-db config/db.json \
-redis config/redis.json \
-logger config/graylog.json \
-carver config/carver_tls.json \
-output tls.yml
# Convert an old admin configuration with SAML auth
$ go run ./tools/json2yaml-config -service admin \
-config config/admin.json \
-db config/db.json \
-redis config/redis.json \
-jwt config/jwt.json \
-saml config/saml.json \
-output admin.yml
# Convert an old API configuration and print to stdout
$ go run ./tools/json2yaml-config -service api \
-config config/api.json \
-db config/db.json \
-redis config/redis.json \
-jwt config/jwt.json \
-output -Options:
-service: Service to convert the configuration for:tls,adminorapi. Required.-config: Path to the old service JSON file (tls.json,admin.jsonorapi.json). Required.-db: Path to the olddb.jsonfile (optional, defaults are used if omitted)-redis: Path to the oldredis.jsonfile (optional, defaults are used if omitted)-jwt: Path to the oldjwt.jsonfile (optional,admin/apionly)-saml: Path to the oldsaml.jsonfile (optional,adminonly)-logger: Path to the old logger JSON file, keyed by logger type:graylog,splunk,elastic,logstash,kinesis,s3orkafka(optional)-carver: Path to the old S3 carver JSON file (optional)-output: Path to write the YAML output to (default:<service>.yml, use-for stdout)
Fields that did not exist in the old JSON configuration (osquery, osctrld, TLS termination, debug, OIDC...) are filled with the same defaults as the sample files in deploy/config/. Review the generated file before using it, in particular auditLog (emitted as false since the option did not exist pre 0.5.0) and the osquery section.
Script to simulate HTTP logging services (Graylog, Splunk...) for osctrl and check if logs are being sent. It is just an HTTP catchall service.
$ python3 fake_logging.py 1234Script to simulate load for osctrl. It can effectively simulate thousands of osquery nodes, generating fake status and result logs, generate results for on-demand queries and it re-enrolls nodes if they have been removed.
$ python3 fake_news.py -h
usage: fake_news.py [-h] [--secret SECRET] [--url URL] [--nodes NODES] [--status STATUS] [--result RESULT] [--config CONFIG] [--query QUERY] [--read [READ]] [--write [WRITE]] [--verbose]
Script to simulate load for osctrl
optional arguments:
-h, --help show this help message and exit
--url URL, -u URL URL for osctrl-tls used to enroll nodes (default: http://localhost:9000/)
--nodes NODES, -n NODES
Number of random nodes to simulate (default: 5)
--status STATUS, -S STATUS
Interval in seconds for status requests to osctrl (default: 60)
--result RESULT, -R RESULT
Interval in seconds for result requests to osctrl (default: 60)
--config CONFIG, -c CONFIG
Interval in seconds for config requests to osctrl (default: 45)
--query QUERY, -q QUERY
Interval in seconds for query requests to osctrl (default: 30)
--read [READ], -r [READ]
JSON file to read nodes from
--write [WRITE], -w [WRITE]
JSON file to write nodes to
--verbose, -v Enable verbose output (default: False)
required arguments:
--secret SECRET, -s SECRET
Secret to enroll nodes for osctrl-tls (default: None)It requires to install requests with pip install requests.
Script to repack the osquery DEB package with the osctrl configuration files to be used with the osctrl-tls service. It is recommended to execute as root to avoid permission issues with the tar command and the existing permissions of the osquery DEB package.
$ ./build-osctrl-deb.sh -h
Usage: ./tools/build-osctrl-deb.sh [-h|--help] [PARAMETER [ARGUMENT]] [PARAMETER [ARGUMENT]] ...
Options:
-h Show this help message and exit
-c CERT Path to the osquery certificate file
-s SECRET Path to the osquery secret file (default: osquery.secret)
-f FLAGS Path to the osquery flags file (default: osquery.flags)
-i DEB Path to the osquery DEB file. Required.
-o DEB Path to the osctrl DEB file. Required.
-x Clear the temporary directory after the process
-v Enable verbose mode with 'set -x'
Example:
./tools/build-osctrl-deb.sh -i osquery_5.23.1-1.linux.amd64.deb -o osquery-osctrl_5.23.1-1_amd64.deb
Script to repack the osquery PKG package with the osctrl configuration files to be used with the osctrl-tls service.
$ ./build-osctrl-pkg.sh -h
Usage: ./build-osctrl-pkg.sh [-h|--help] [PARAMETER [ARGUMENT]] [PARAMETER [ARGUMENT]] ...
Options:
-h Show this help message and exit
-n NAME Name to use for the package (default: osctrl)
-V VERSION Version to use for the package (default: 1.0)
-c CERT Path to the osquery certificate file
-s SECRET Path to the osquery secret file (default: osquery.secret)
-f FLAGS Path to the osquery flags file (default: osquery.flags)
-i PKG Path to the osquery PKG file. Required.
-o PKG Path to the osctrl PKG file. Required.
-k Generate a PKG without osquery. Only osctrl files.
-x Clear the temporary directory after the process
-v Enable verbose mode with 'set -x'
Example:
./tools/build-osctrl-pkg.sh -i osquery_5.23.1.pkg -o osquery-osctrl_5.23.1.pkg