Lili (Tlapka) b1650ed07d | ||
---|---|---|
adaptive_game_module | ||
resources | ||
.gitignore | ||
LICENSE | ||
README.md | ||
assistant.py | ||
python-requirements.txt |
README.md
Adaptive game assistant
The adaptive game assistant is a Python program allowing easy deployment and playing of adaptive cybersecurity games.
The assistant was originally made as a part of my bachelor's thesis, then improved for the PA197 Secure Network Design course.
Unlike the original assistant, this version allows players to play through the game completely on their own. (The original required some input and help from a course instructor).
The games the assistant can run must be made with Vagrant and Ansible (as other games at KYPO).
The Ansible playbooks need to have all tasks tagged, and
there need to be game-specific config files in the resources/
subfolder.
Usage
The adaptive game assistant is ran by running ./assistant.py
or python assistant.py
in the project folder.
It automatically runs Vagrant commands to prepare levels of the game,
checks flags when player completes level and provides hints when needed.
Basic assistant commands:
- (S)tart - starts the game from level 1.
- (N)ext - continues the game to the next level.
- (E)xit - properly ends the game and exits the assistant.
- (C)eck - checks versions of all required apps.
- (H)elp - displays a full list of commands.
- hin(T) - displays hints, offers new hints.
- (L)og - saves data from the game into a file.
The project's wiki also has a detailed user guide with examples: Assistant guide
Requirements
The assistant requires Python 3.7 or higher to run.
It also requires the PyYAML package of version 5.1 or higher.
(You can install it with pip install -r python-requirements.txt
)
The game the assistant sets up will require Vagrant and VirtualBox to be installed. Virtualbox 6.0 or higher and Vagrant 2.2.5 or higher are recommended. (The exact requirements of individual games may differ.)
Python module structure
The main file, assistant.py
, wraps around several classes the adaptive_game_module
folder,
and transforms the user's commands into method calls on the objects.
The adaptive game module contains:
adaptive_game.py
. TheGame
class represents the state of the game.flag_checker.py
. TheFlagChecker
class checks if flags are correct.hint_giver.py
. TheHintGiver
class keeps tracks of taken hints and gives new ones.level_selector.py
. TheLevelSelector
class helps decide which level to go to next.
Game config files
Besides tagged ansible playbooks, each adaptive game needs a few config files to work.
The config files are mostly YAML lists and dicts.
assistant.py
looks for config files in the resources/
folder.
The needed files are:
levels.yml
hints.yml
level_keys.yml
level_requirements.yml
tools.yml
More about the config files and their format is on the wiki: Config files
I want to try out the assistant, but I don't have an adaptive game
The simplest way to try the assistant out with no access to another adaptive game is:
- Download the thesis archive of my Adaptive Cybersecurity Games thesis.
- In the archive, replace the
assistant/
folder with the folder of this repository. (The assistant included with the thesis is an earlier version.) - Make sure that the sample files in the
resources/
subfolder are present.
The assistant should run the game included with my thesis using the sample resources files.
The level instructions for that game are included in the wiki/
subfolder of the thesis archive you downloaded.
Troubleshooting
All known common problems are in the troubleshooting doc on the repository wiki.