honeyquest

Honeyquest is a cyber security game that asks humans to distinguish neutral, risky, and deceptive payloads. Honeyquest presents participants with realistic web application vignettes ("queries"). Participants are asked to think like a hacker and tell us their next move.

https://github.com/dynatrace-oss/honeyquest

Science Score: 57.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.4%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

Honeyquest is a cyber security game that asks humans to distinguish neutral, risky, and deceptive payloads. Honeyquest presents participants with realistic web application vignettes ("queries"). Participants are asked to think like a hacker and tell us their next move.

Basic Info
Statistics
  • Stars: 6
  • Watchers: 2
  • Forks: 0
  • Open Issues: 9
  • Releases: 1
Created about 3 years ago · Last pushed 7 months ago
Metadata Files
Readme Contributing License Code of conduct Citation Codeowners Security

README.md

Honeyquest Logo

Honeyquest

Honeyquest is a cyber security game that asks humans to distinguish neutral, risky, and deceptive payloads. Honeyquest presents participants with realistic web application vignettes ("queries"). Participants are asked to think like a hacker and tell us their next move.

Honeyquest can be used to evaluate what vulnerabilities and cyber traps are most attractive to attackers.

Honeyquest user interface

🐳 Quickstart

Use the Docker image to start Honeyquest. Append the --help argument to see all available options.

sh docker run -p 3000:3000 ghcr.io/dynatrace-oss/honeyquest -u https://raw.githubusercontent.com/dynatrace-oss/honeyquest/main/.github/hostedfiles/querydb.tar.gz

Then, navigate to 🌍 localhost:3000 in your browser.

📦 Project Structure

  • 🚀 Want to TRY OUT Honeyquest? Visit our live demo at honeyquest.cns.research.dynatracelabs.com today.
  • 📊 Want to ANALYZE the results from our human subject experiment? Navigate to the 📂 ./dataset directory.
  • 🎨 Want to CREATE your own query database? Start with the 📄 QUERY_DATABASE document.
  • 💻 Want to DEVELOP the Honeyquest application locally? Follow the Developer Guide below.
  • ☁️ Want to DEPLOY Honeyquest to AWS? Refer to the 📄 DEPLOYMENT document.
  • ⚖️ Want to CITE Honeyquest, our datasets, or our paper? Head to the License and Attribution section.

Honeyquest needs a query database to run. The query database contains the questions that are presented to the users. Our queries are stored in the 📂 ./querydb directory. You can also create your own queries. Queries are just YAML files with a specific structure that is described in the 📄 QUERY_DATABASE document. To automate the creation of queries, we also provide a few Dagster jobs which are described in the 📄 QUERY_CREATION document. Some queries are created by "patching" existing queries with our separate 📂 ./src/honeypatch tool. Find a bit of information about Honeypatch in the 📄 HONEYPATCH document.

The Honeyquest application consists of a frontend and a backend process. The frontend is a React application that serves the user interface. The backend is a Python application that exposes a REST API with FastAPI and does all the heavy lifting. Our Docker container bundles both the frontend and the backend into a single container for easy deployment.

During our study we ran a human subject experiment with 47 participants, who submitted a total of 3,669 responses to our queries (and placed 6,659 individual marks). We dataset is freely available for further research and analysis. The dataset and a description of it is stored in the 📂 ./dataset directory. Also, we provide a few Jupyter notebooks and Python scripts that we used to analyze the results in the 📂 ./src/honeyback/honeyquest/data/notebooks directory.

```mermaid graph TB; subgraph RESULTS ANALYSIS dataset["/dataset\nHUMAN SUBJECT\nSTUDY RESULTS"] notebooks["/src/honeyback\n/honeyquest/data/notebooks\nJupyter Notebooks"] end

subgraph "HONEYQUEST" direction TB frontend["/src/honeyfront\nReact Frontend"] backend["/src/honeyback\nPython Backend"] frontend -->|/api| backend; end

subgraph QUERY CREATION queries["/querydb\nQUERY DATABASE"] dagster["/src/honeyback\n/honeyquest/data/jobs\nCreate New Queries"] honeypatch["/src/honeypatch\nInject Traps"] end ```

💻 Developer Guide

Planning to make changes to the source code or just want to run Honeyquest locally? Read on.

Prerequisites

You need the following toolchain installed:

First, install Honeyfront (frontend for Honeyquest) dependencies.

sh cd ./src/honeyfront npm install

Then, install Honeyback (backend for Honeyquest) dependencies. Backend dependencies are split into multiple groups:

  • main covers everything for Honeyquest and Dagster to run
  • hooks (optional) contains pre-commit hooks, linters, formatters, and type checkers
  • analytics (optional) contains packages to analyze the data and create figures
  • docker (optional) contains a process manager needed only inside the Docker container

sh cd ./src/honeyback poetry shell poetry install --with hooks,analytics

Then, install Honeypatch dependencies. Note that this is a separate Poetry environment.

sh cd ./src/honeypatch poetry shell poetry install

Then, back in the root directory, install the pre-commit hooks.

sh pre-commit install

Start Honeyquest

The backend exposes a REST API to serve the queries. Don't forget to specify the folder that holds the query database. For more options, take a look at the CLI help or head to the Configuration section. Start the backend API with the following command:

sh cd ./src/honeyback poetry run honeyquest --data ../../querydb

The frontend serves the user interface. During development, Vite will transparently proxy requests to /api to the backend REST API. During production, an NGINX server in the Docker container will route these requests instead. Start the frontend with the following command:

sh cd ./src/honeyfront npm run dev

Then, navigate to 🌍 localhost:3000 in your browser.

Answers from users are stored in a tempory directory that is printed to the console. Refer to the Configuration section to specify a different location.

Start Honeypatch

Honeypatch is stand-alone tool to inject traps into arbitrary, text-based payload. Start the program and read the help message.

sh cd ./src/honeypatch poetry run honeypatch --help

For more usage instructions, refer to the 📄 HONEYPATCH.md document.

⚙️ Configuration

Configure the query database

The backend API needs to be told where to find the query database. The query database contains the questions that are presented to the users.

The easiest way is to tell Honeyquest to download a .tar.gz compressed dataset from a public URL and extract it on the fly with the --data-url argument (or the HONEYQUEST_DATA_URL environment variable). The following command downloads our query database from GitHub and starts the backend:

sh honeyquest --data-url https://raw.githubusercontent.com/dynatrace-oss/honeyquest/main/.github/hostedfiles/querydb.tar.gz

You can also pass the --data argument (or the HONEYQUEST_DATA environment variable) to the CLI with the path to the query database. The following command uses our query database and starts the backend:

sh honeyquest --data ./querydb

If you want to create your own query database, refer to the 📄 QUERY_DATABASE.md document.

List of available arguments and environment variables

| Environment Variable | CLI Argument | Description | Default | | ----------------------------------------------- | -------------------- | ---------------------------------------------------- | ------------ | | HONEYQUEST_DATA (required) 1 | -d or --data | Directory with the query database | not set | | HONEYQUEST_DATA_URL (required) 1 | -u or --data-url | URL with the query database as a .tar.gz file | not set | | HONEYQUEST_RESULTS | -r or --results | Directory for user profiles, responses, and feedback | temporary | | HONEYQUEST_INDEX | -i or --index | Name of the query index 2 | main | | ADMIN_TOKEN (recommended) | --admin-token | Token for the admin panel | random token | | COOKIE_SECRET (recommended) | --cookie-secret | Secret to sign session cookies 3 | random token | | COMPRESS_RESULTS | --compress | Compress results with gzip | false | | SAMPLE_DUPLICATES | --duplicates | Sample duplicate queries 4 | false | | COOKIE_EXPIRE_DAYS | | Maximum age of the browser cookie | 365 | | SESSION_TIMEOUT_MINS | | Clusters user responses in multiple (session) files | 60 | | API_BURST_LIMIT | | Capacity of the leaky bucket for rate limiting | 10 | | API_RATE_LIMIT | | Refill rate of the leaky bucket for rate limiting | 1 | | | --debug | Enable development mode | false | | | --help | Shows the help text on the console | |

1 You must set only one of HONEYQUEST_DATA or HONEYQUEST_DATA_URL to start Honeyquest, not both.

2 The query database not only contains the questions but also one or more query indices. Query indices define what questions are shown to the user, and in what order. This argument allows to select a different index from the query database. If not set, the default index main is used. If no main index is found, but there is only one index, that index is used. Otherwise, an error is thrown. Refer to the 📄 QUERY_DATABASE.md document for more information.

3 You should set some secret to sign the session cookies to prevent session tampering. If you do not set this, a random token is generated on startup and printed to the console. If you ever change this, all existing sessions will be invalidated.

4 Allows users to submit the answers to the same query multiple times. This is useful during development with only a small example dataset to test the application.

⚖️ License and Attribution

Please note certain portions of source code, as identified in remarks, are provided under the Creative Commons BY-SA or the MIT license. In each of the remarks, we have provided attribution to the original creators and other attribution parties.

If you use Honeyquest, our query database, or our experimental results, please cite the following work:

Mario Kahlhofer, Stefan Achleitner, Stefan Rass, and René Mayrhofer. 2024. Honeyquest: Rapidly Measuring the Enticingness of Cyber Deception Techniques with Code-based Questionnaires. In The 27th International Symposium on Research in Attacks, Intrusions and Defenses (RAID 2024), September 30-October 02, 2024, Padua, Italy. ACM, New York, NY, USA, 20 pages. https://doi.org/10.1145/3678890.3678897


Note: Honeyquest is not officially supported by Dynatrace.

Owner

  • Name: Dynatrace Open Source
  • Login: dynatrace-oss
  • Kind: organization
  • Email: opensource@dynatrace.com

This organization contains Open Source projects maintained by Dynatrace. If not stated differently, these projects are not officially supported.

Citation (CITATION.cff)

cff-version: 1.2.0
title: Honeyquest
license: Apache-2.0
type: software
identifiers:
  - type: url
    value: "https://github.com/dynatrace-oss/honeyquest"
authors:
  - given-names: Mario
    family-names: Kahlhofer
    orcid: https://orcid.org/0000-0002-6820-4953
message: If you use Honeyquest, please cite our research paper.
preferred-citation:
  type: conference-paper
  title: "Honeyquest: Rapidly Measuring the Enticingness of Cyber Deception Techniques with Code-based Questionnaires"
  doi: 10.1145/3678890.3678897
  year: 2024
  collection-title: Proceedings of the 27th International Symposium on Research in Attacks, Intrusions and Defenses
  conference:
    name: 27th International Symposium on Research in Attacks, Intrusions and Defenses
    city: Padua
    country: IT
    date-start: 2024-09-30
    date-end: 2024-10-02
  publisher:
    name: ACM
    city: New York, NY, USA
  authors:
    - given-names: Mario
      family-names: Kahlhofer
      orcid: https://orcid.org/0000-0002-6820-4953
    - given-names: Stefan
      family-names: Achleitner
      orcid: https://orcid.org/0000-0002-5499-6101
    - given-names: Stefan
      family-names: Rass
      orcid: https://orcid.org/0000-0003-2821-2489
    - given-names: René
      family-names: Mayrhofer
      orcid: https://orcid.org/0000-0003-1566-4646

GitHub Events

Total
  • Watch event: 1
  • Delete event: 1
  • Push event: 7
  • Pull request event: 1
Last Year
  • Watch event: 1
  • Delete event: 1
  • Push event: 7
  • Pull request event: 1

Issues and Pull Requests

Last synced: 11 months ago

All Time
  • Total issues: 10
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 1
  • Total pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 10
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • blu3r4y (9)
Pull Request Authors
Top Labels
Issue Labels
debt (5) enhancement (3) bug (1)
Pull Request Labels

Dependencies

.github/workflows/build-honeyquest.yml actions
  • actions/cache v4 composite
  • actions/checkout v4 composite
  • docker/build-push-action v6 composite
  • docker/login-action v3 composite
  • docker/metadata-action v5 composite
  • docker/setup-buildx-action v3 composite
Dockerfile docker
  • bitnami/git 2.45.2 build
  • docker.io/nikolaik/python-nodejs python3.10-nodejs20@sha256 build
src/honeypatch/Dockerfile docker
  • docker.io/nikolaik/python-nodejs python3.10-nodejs20@sha256 build
src/honeyfront/package-lock.json npm
  • 486 dependencies
src/honeyfront/package.json npm
  • @eslint/js ^8.57.0 development
  • @types/bootstrap ^5.2.10 development
  • @types/eslint__js ^8.42.3 development
  • @types/js-cookie ^3.0.6 development
  • @types/node ^20.14.11 development
  • @types/react ^18.3.3 development
  • @types/react-dom ^18.3.0 development
  • @vitejs/plugin-react ^4.2.1 development
  • eslint ^8.57.0 development
  • eslint-config-prettier ^9.1.0 development
  • eslint-plugin-react ^7.35.0 development
  • prettier 3.3.3 development
  • typescript ^5.5.4 development
  • typescript-eslint ^7.17.0 development
  • vite ^5.3.5 development
  • @fontsource-variable/fira-code ^5.0.18
  • @fontsource/fira-code ^5.0.18
  • bootstrap ^5.3.3
  • bootstrap-icons ^1.11.3
  • dayjs ^1.11.12
  • js-cookie ^3.0.5
  • react ^18.3.1
  • react-dom ^18.3.1
  • react-markdown ^9.0.1
  • react-query ^3.39.3
  • react-select ^5.8.0
  • tuplerone ^3.3.3
  • usehooks-ts ^3.1.0
src/honeyback/poetry.lock pypi
  • 207 dependencies
src/honeyback/pyproject.toml pypi
  • ipywidgets ^8.1.3 analytics
  • matplotlib ^3.9.1 analytics
  • numpy ^1.26.4 analytics
  • pandas ^1.5.3 analytics
  • pylatex ^1.4.2 analytics
  • rpy2 ^3.5.16 analytics
  • scipy ^1.14.0 analytics
  • seaborn ^0.13.2 analytics
  • circus * docker
  • black * hooks
  • boto3-stubs ^1.34 hooks
  • flake8 * hooks
  • flake8-docstrings * hooks
  • flake8-rst-docstrings * hooks
  • isort * hooks
  • mypy * hooks
  • pandas-stubs ^1.5 hooks
  • pre-commit * hooks
  • pylint * hooks
  • types-PyYAML ^6.0 hooks
  • types-Pygments ^2.18 hooks
  • types-cffi ^1.16 hooks
  • types-colorama ^0.4 hooks
  • types-croniter ^2.0 hooks
  • types-decorator ^5.1 hooks
  • types-jsonschema ^4.23 hooks
  • types-protobuf ^3.20 hooks
  • types-psutil ^6.0 hooks
  • types-python-dateutil ^2.9 hooks
  • types-pytz ^2024 hooks
  • types-pywin32 ^306 hooks
  • types-requests ^2.32 hooks
  • types-setuptools ^71.1 hooks
  • types-six ^1.16 hooks
  • types-toposort ^1.10 hooks
  • types-tqdm ^4.66 hooks
  • PyYAML ^6.0.1
  • boto3 ^1.34.149
  • dagit ^0.14.20
  • dagster ^0.14.20
  • fastapi ^0.111.1
  • ipykernel ^6.29.5
  • itsdangerous ^1.1.0
  • loguru ^0.7.2
  • lxml 5.1.1
  • mistune ^3.0.2
  • pendulum ^2.1.2
  • pydantic ^2.8.2
  • pydantic-settings ^2.3.4
  • python ~3.10
  • python-dotenv *
  • requests *
  • sqlalchemy ^1.4.44
  • typer ^0.12.3
src/honeypatch/poetry.lock pypi
  • annotated-types 0.7.0
  • astroid 3.2.4
  • black 24.4.2
  • cfgv 3.4.0
  • click 8.1.7
  • colorama 0.4.6
  • coverage 7.6.0
  • dill 0.3.8
  • distlib 0.3.8
  • docutils 0.21.2
  • exceptiongroup 1.2.2
  • filelock 3.15.4
  • flake8 7.1.0
  • flake8-docstrings 1.7.0
  • flake8-rst-docstrings 0.3.0
  • identify 2.6.0
  • iniconfig 2.0.0
  • isort 5.13.2
  • loguru 0.7.2
  • markdown-it-py 3.0.0
  • mccabe 0.7.0
  • mdurl 0.1.2
  • mypy 1.11.0
  • mypy-extensions 1.0.0
  • nodeenv 1.9.1
  • packaging 24.1
  • pathspec 0.12.1
  • platformdirs 4.2.2
  • pluggy 1.5.0
  • pre-commit 3.8.0
  • pycodestyle 2.12.0
  • pydantic 2.8.2
  • pydantic-core 2.20.1
  • pydocstyle 6.3.0
  • pyflakes 3.2.0
  • pygments 2.18.0
  • pylint 3.2.6
  • pytest 8.3.2
  • pytest-cov 5.0.0
  • pyyaml 6.0.1
  • restructuredtext-lint 1.4.0
  • rich 13.7.1
  • shellingham 1.5.4
  • snowballstemmer 2.2.0
  • tomli 2.0.1
  • tomlkit 0.13.0
  • typer 0.12.3
  • types-pyyaml 6.0.12.20240724
  • typing-extensions 4.12.2
  • virtualenv 20.26.3
  • win32-setctime 1.1.0
src/honeypatch/pyproject.toml pypi
  • black * develop
  • flake8 * develop
  • flake8-docstrings * develop
  • flake8-rst-docstrings * develop
  • isort * develop
  • mypy * develop
  • pre-commit * develop
  • pylint * develop
  • pytest * develop
  • pytest-cov * develop
  • types-PyYAML ^6.0 develop
  • PyYAML ^6.0.1
  • loguru ^0.7.2
  • pydantic ^2.8.2
  • python ~3.10
  • typer ^0.12.3