{"id":50382577,"url":"https://github.com/GSI-Fing-Udelar/tectonic","last_synced_at":"2026-05-30T13:01:20.830Z","repository":{"id":252137301,"uuid":"839528965","full_name":"GSI-Fing-Udelar/tectonic","owner":"GSI-Fing-Udelar","description":"An academic Cyber Range","archived":false,"fork":false,"pushed_at":"2026-05-25T02:14:53.000Z","size":4627,"stargazers_count":22,"open_issues_count":11,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-05-25T04:15:04.266Z","etag":null,"topics":["cyber-range","cybersecurity","cybersecurity-education"],"latest_commit_sha":null,"homepage":"https://www.fing.edu.uy/inco/proyectos/tectonic","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GSI-Fing-Udelar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-07T19:51:06.000Z","updated_at":"2026-05-25T02:14:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"8dae77cc-cb9d-4606-b80c-17aa81b3b499","html_url":"https://github.com/GSI-Fing-Udelar/tectonic","commit_stats":null,"previous_names":["gsi-fing-udelar/tectonic"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/GSI-Fing-Udelar/tectonic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GSI-Fing-Udelar%2Ftectonic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GSI-Fing-Udelar%2Ftectonic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GSI-Fing-Udelar%2Ftectonic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GSI-Fing-Udelar%2Ftectonic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GSI-Fing-Udelar","download_url":"https://codeload.github.com/GSI-Fing-Udelar/tectonic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GSI-Fing-Udelar%2Ftectonic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33692997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cyber-range","cybersecurity","cybersecurity-education"],"created_at":"2026-05-30T13:01:18.670Z","updated_at":"2026-05-30T13:01:20.818Z","avatar_url":"https://github.com/GSI-Fing-Udelar.png","language":"Python","funding_links":[],"categories":["Security"],"sub_categories":[],"readme":"# Tectonic - An Academic Cyber Range\n[![Regression Tests](https://github.com/GSI-Fing-Udelar/tectonic/actions/workflows/test.yml/badge.svg)](https://github.com/GSI-Fing-Udelar/tectonic/actions/workflows/test.yml)\n\n## Overview\nTectonic is a cyber range designed to provide realistic cybersecurity\nscenarios for education and training through the deployment of\nnetworks, systems and applications that can be used to train users on\ncybersecurity topics. Key functionalities include customizable network\nconfigurations, real-time monitoring and automated attack simulations.\n\nIt incorporates existing tools from the infrastructure as code (IaC)\napproach, which allows for the specification of all the components of\na cybersecurity scenario in a declarative manner. This specification\nis made in a high-level language that can be interpreted and allows\nfor the automatic generation of scenarios on the laboratory underlying\nplatform. Declarative descriptions of the scenarios make them easily\nversioned, maintained, and shared, facilitating collaboration with\nother institutions and laboratories of this type.\n\nThe following figure illustrates various components of the cyber range\nsolution, the technologies used in the implementation, and the\ndifferent use cases carried out by student users and instructors. The\ncomponents are organized in five layers, each fulfilling a particular\nfunction in the platform's operation.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/GSI-Fing-Udelar/tectonic/refs/heads/main/docs/architecture.png\" width=\"500\"\u003e\n\u003c/p\u003e\n\nThe underlying infrastructure constitutes the real-world\ninfrastructure on which the systems and networks that form the basis\nof a particular scenario are deployed. Currently deployments on the\nAWS cloud or on-premises using Libvirt are supported, with more\nplanned.\n\nTo achieve the deployment of the infrastructure in an automated\nmanner, \\textit{Infrastructrue as Code} (IaC) tools are used, such as\nPacker, Terraform and Ansible. These tools manage the resources to be\ndeployed and the configurations to be applied to them. Ansible\nplaybooks, in particular, are extensively used for configuration.\n\nA Python component orchestrates these tools and manages the life cycle\nof the scenarios, including their deployment, elimination, powering\non, powering off, and listing information. The scenarios themselves\nare described by a specification that allows users to declare various\naspects, such as the machines to be deployed, the networks used to\nconnect them, and the configurations to be applied to the machines,\namong others.\n\n## Installation Instructions\nThe following are the requirements to run Tectonic:\n\n- SO: Linux or Mac OS\n- Python and pip: version 3.12 or newer.\n- IaC Tools: Terraform and Packer\n- Base platforms: Libvirt or Docker\n- AWS credentials and AWS CLI (for AWS deployment)\n\n\nPlease see the [detailed instructions](https://github.com/GSI-Fing-Udelar/tectonic/blob/main/docs/installation.md) for more\ninformation.\n\n### Tectonic python module\n\nYou can install this module using the following command (preferably inside a [virtual environment](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#create-and-use-virtual-environments)):\n\n```bash\npython3 -m pip install tectonic-cyberrange\n```\n\n\n## Tectonic Configuration File\nTectonic behavior can be configured using an ini file with a\n`config` section. You can find an example configuration file with the\ndefault values [here](https://github.com/GSI-Fing-Udelar/tectonic/blob/main/tectonic.ini). Please see the [ini\nfile documentation](https://github.com/GSI-Fing-Udelar/tectonic/blob/main/docs/ini_config.md) for details on the available\noptions.\n\n\n## Lab Configuration\nThe lab configuration is divided in two: a **scenario specification**\nthat holds a static description of the lab that can be shared and\nreused, and information specific to a particular **lab edition** that\ndefines things such as number of instances to deploy, public SSH keys\nfor the teachers, etc.\n\nThe scenario specification consists of the following resources:\n\n* A scenario description file in YAML syntax (required).\n* Ansible playbooks for *base image* installation and *after-clone*\n  configurations, and optional files in the `ansible` directory.\n* Elastic and Kibana policies and resources, in the `elastic`\n  directory, if using elastic for evaluation.\n* SSH public keys for admin access to the machines in the `ssh`\n  directory.\n\nThe lab edition file \n\nPlease check the [description documentation](https://github.com/GSI-Fing-Udelar/tectonic/blob/main/docs/description.md) for\nmore details. The [examples](https://github.com/GSI-Fing-Udelar/tectonic/blob/main/examples/) directory contains some\nexample scenarios.\n\n## Terraform state syncronization\nTerraform states are stored locally by default. It is possible to\nstore them in a Gitlab repo (see `gitlab_backend_url` option in the\n[ini file configuration](https://github.com/GSI-Fing-Udelar/tectonic/blob/main/docs/ini_config.md)). It is necessary to have\nMaintainer privileges on this repo and a GitLab access token. There\nare two types of access token: personal or project-based. If the\nlatter is used, it must be associated with the project where the\nstates are stored.\n\n## Running Tectonic\n\nTo deploy a scenario run:\n```\ntectonic -c \u003cini_conf_file\u003e \u003clab_edition_file\u003e create-images\n\ntectonic -c \u003cini_conf_file\u003e \u003clab_edition_file\u003e deploy\n```\n\nTo destroy a scenario use the `destroy` command. \n\nSee `tectonic --help` for a full list of options, and `tectonic\n\u003ccommand\u003e -h` for help on individual commands.\n\n## Access the Cyber Range\n\nAccess is via SSH and will depend on the type of platform used. See the [remote access](./docs/remote_access.md) documentation for more details.\n\n## Disclaimer About Platforms\n\nTectonic provides support for scenario deployments using Docker as the base platform. However, it is important to note that using Docker as base platform in production environments is not recommended since Tectonic deploys containers in privileged mode. This means that when a user has root access within a container, they can also gain root access to the host system, which can create significant security issues. Therefore, caution is crucial when using Docker as a base platform, especially in scenarios involving attacks. It is advisable to utilize Docker primarily for the generation and testing of new scenarios. For production environments, we recommend to utilize Libvirt or AWS as base platform, both of which are fully supported by Tectonic.\n\nThe Elastic and Caldera services on the Docker platform for Windows and macOS are not supported.\n\n## Authors\n\nTectonic was created by [Grupo de Seguridad\nInformática](https://www.fing.edu.uy/inco/grupos/gsi) of [Universidad\nde la República Uruguay](https://udelar.edu.uy/).\n\nPlease contact us at \u003ctectonic@fing.edu.uy\u003e.\n\nSee more of our project at [Tectonic: An Academic Cyber Range](https://www.fing.edu.uy/inco/proyectos/tectonic).\n\n## License\n\nTectonic is licensed under the GNU General Public License v3.0 or\nlater. See LICENSE to see the full text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGSI-Fing-Udelar%2Ftectonic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGSI-Fing-Udelar%2Ftectonic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGSI-Fing-Udelar%2Ftectonic/lists"}