Skip to content

Real-time, collaborative, threat modeling tool. / Un outil collaboratif de modélisation des menaces en temps réel.

License

Notifications You must be signed in to change notification settings

canada-ca/valentine

Repository files navigation

🍁 Valentine

La version française suit.

Lint, format, and test workflow

Valentine is a real-time collaborative threat modeling tool that combines human expertise with generative AI to streamline the security design process while maintaining simplicity and rigor.

Screenshot of a data flow diagram in Valentine

IMPORTANT: This project is undergoing active development and may experience breaking changes. This project is also still missing feature and has bugs. Please review the issues for more information. If you have any specific questions, please contact max.neuvians@tbs-sct.gc.ca.

Features

  1. Threat modeling with STRIDE based on a pre-defined threat grammar. For more information see Threat Composer.

  2. Collaborative, real-time editing of threat models, data flow diagrams, and application architecture.

  3. Generative AI to help assist threat modeling and explain architectures and data flow.

  4. Mapping of assumptions and mitigations to NIST controls for easy compliance documentation.

  5. Use of shareable reference packs to help establish common assumptions, threats, and mitigation across teams in an organization.

If you prefer images over text you can look at the gallery.

Rationale

Valentine offers an alternative to the compliance-driven security approach commonly practiced in large organizations. In teams following agile development practices, compliance-driven security often creates a bottleneck: controls must either be determined before development begins or after it concludes. This paradigm positions security as an obstacle to development rather than a collaborative partner in the process.

Valentine is built on the premise that a system's attack surface expands primarily through the addition of features and their interactions. While the most secure system might be the one that does nothing, real-world applications must balance security with functionality. As new features are implemented or system components evolve, the threat model should adapt to reflect both direct threats from new capabilities and emergent threats from feature interactions, environmental changes, and dependencies.

Threat modeling, particularly the STRIDE methodology, provides teams with an accessible framework for identifying and understanding threats throughout the development lifecycle. Through an iterative process, teams can build and maintain a comprehensive threat model that reflects their system's actual architecture, interactions, and environmental context, rather than relying solely on upfront design assumptions.

While Valentine streamlines the threat modeling process, it recognizes that compliance documentation remains a necessary business requirement. Rather than treating compliance as an afterthought or barrier, a key design goal has been to automatically generate documentation from the ongoing threat modeling process. Teams can map assumptions and mitigations to specific NIST controls, and export the resulting documentation for security assessments, making compliance a natural outcome of good security practices.

Valentine's flexibility allows it to be used for threat modeling both individual features and entire systems, without imposing a rigid workflow on teams. This adaptability enables organizations to integrate security thinking into their development process in a way that suits their specific needs and maturity level.

Quickstart using codespaces

  1. Open in GitHub Codespaces
  2. make setup
  3. make dev

Note: It is normal to see warnings during the setup process. Also depending on the amount of memory available to the codespace, the setup process may take longer than usual.

Running with docker compose

You can run the app locally using docker compose. It is not recommended to use this in production.

docker compose up

will build the latest image and run the app on http://localhost:4000. If you would like to use the LLM functionality, you need to provide your own OPENAI API key for gpt-4o-mini.

OPENAI_API_KEY=sk-proj... docker compose up

If you make changes to the source code, then you need to rebuild the image:

docker compose up -d --no-deps --build app

Setup for development

cd valentine
mix deps.get
mix ecto.create
mix ecto.migrate
mix run priv/repo/seeds.exs
cd assets
npm i 

OpenAI on Azure

You can also use OpenAI on Azure. You need to provide the following environment variables:

AZURE_OPENAI_ENDPOINT=
AZURE_OPENAI_KEY=

Optional Google Auth

You can use Google as your IDP if you set the following environment variables:

GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret

You can get these by creating a new project in the Google Developer Console and creating OAuth 2.0 credentials.

In this case to access the /workspaces route you need to be authenticated with Google, but visiting /auth/google. Currently nothing is done with the user information from Google, but you can use it to restrict access to the app.

License

MIT 2025

---------------------------------------------------------------------

Valentine 🍁

Valentine est un outil collaboratif de modélisation des menaces en temps réel qui associe l’expertise humaine à l’IA générative pour rationaliser le processus de conception de la sécurité tout en conservant simplicité et rigueur.

Capture d’écran d’un diagramme de flux de données dans Valentine

IMPORTANT : Ce projet est en cours de développement et peut subir des modifications importantes. Il manque encore des fonctionnalités à ce projet et il comporte des bogues. Veuillez examiner les problèmes pour plus de renseignements. Si vous avez des questions spécifiques, veuillez contacter : max.neuvians@tbs-sct.gc.ca.

Fonctionnalités

  1. Modélisation des menaces à l’aide de STRIDE sur la base d’une grammaire des menaces prédéfinie. Pour de plus amples renseignements, consultez : Threat Composer.

  2. Édition collaborative et en temps réel des modèles de menaces, des diagrammes de flux de données et de l’architecture des applications.

  3. L’IA générative pour aider à la modélisation des menaces et expliquer les architectures et les flux de données.

  4. Mise en correspondance des hypothèses et des mesures d’atténuation avec les contrôles NIST afin de faciliter les documents de la conformité.

  5. Utilisation de dossiers de référence partageables pour aider à établir des hypothèses communes, des menaces et des mesures d’atténuation au sein des équipes d’une organisation.

Si vous préférez les images au lieu des textes, vous pouvez consulter la [galerie].

Justification

Valentine offre une autre option que l’approche de la sécurité axée sur la conformité, souvent pratiquée dans les grandes organisations. Dans les équipes qui suivent des pratiques de développement agiles, la sécurité axée sur la conformité crée souvent un goulot d’étranglement : les contrôles doivent être déterminés soit avant le début du développement, soit après sa conclusion. Ce paradigme place la sécurité comme un obstacle au développement plutôt que comme un partenaire de collaboration dans le processus.

Valentine repose sur le principe que la surface d’attaque d’un système s’étend principalement par l’ajout de fonctionnalités et leurs interactions. Si le système le plus sécurisé peut-être celui qui ne fait rien, les applications du monde réel doivent trouver un équilibre entre la sécurité et la fonctionnalité. Au fur et à mesure que de nouvelles fonctionnalités sont mises en œuvre ou que les composants du système évoluent, le modèle de menace devrait s’adapter pour refléter à la fois les menaces directes provenant des nouvelles capacités et les menaces émergentes provenant des interactions entre les fonctionnalités, des changements environnementaux et des dépendances.

La modélisation des menaces, en particulier la méthodologie de STRIDE, fournit aux équipes un cadre accessible pour identifier et comprendre les menaces tout au long du cycle de vie du développement. Grâce à un processus itératif, les équipes peuvent construire et maintenir un modèle de menace complet qui reflète l’architecture, les interactions et le contexte environnemental réels de leur système, plutôt que de se fier uniquement à des hypothèses de conception initiales.

Si Valentine rationalise le processus de modélisation des menaces, cet outil reconnaît que les documents de conformité restent une nécessité pour l’organisation. Plutôt que de traiter la conformité comme une réflexion après coup ou comme un obstacle, l’un des principaux objectifs de la conception a été de générer automatiquement des documents à partir du processus de modélisation des menaces en cours. Les équipes peuvent faire correspondre les hypothèses et les mesures d’atténuation aux contrôles précis du NIST et exporter les documents qui en résultent pour les évaluations de sécurité, ce qui fait de la conformité un résultat naturel des bonnes pratiques de sécurité.

La flexibilité de Valentine lui permet d’être utilisé pour la modélisation des menaces, qu’il s’agisse de fonctionnalités individuelles ou de systèmes entiers, sans imposer un flux de travail rigide aux équipes. Cette adaptabilité permet aux organisations d’intégrer l’approche de la sécurité dans leur processus de développement d’une manière qui corresponde à leurs besoins spécifiques et à leur niveau de maturité.

Relance de système en utilisant GitHub Codespaces

  1. Ouvrir dans GitHub Codespaces
  2. make setup
  3. make dev

Note : Il est normal de voir apparaître des avertissements au cours de la procédure d’installation. En outre, cela dépend de la capacité de mémoire disponible dans le Codespace, la procédure d’installation peut prendre plus de temps que d’habitude.

Exécuter avec docker compose

Vous pouvez exécuter l’application localement en utilisant docker compose. Il n’est pas recommandé de l’utiliser dans le cadre de la production.

docker compose up

construira la dernière image et exécutera l'application sur http://localhost:4000. Si vous souhaitez utiliser la fonctionnalité LLM, vous devez fournir votre propre OPENAI API clé pour gpt-4o-mini.

OPENAI_API_KEY=sk-proj... docker compose up

Si vous apportez des modifications au code source, vous devez alors reconstruire l'image :

docker compose up -d --no-deps --build app

Configuration pour le développement

cd valentine
mix deps.get
mix ecto.create
mix ecto.migrate
mix run priv/repo/seeds.exs
cd assets
npm i 

OpenAI sur Azure

Vous pouvez également utiliser OpenAI sur Azure. Vous devez fournir les variables d'environnement suivantes :

AZURE_OPENAI_ENDPOINT=
AZURE_OPENAI_KEY=

Authentification facultative avec Google Authentification

Vous pouvez utiliser Google comme fournisseur d'identité si vous définissez les variables d'environnement suivantes :

GOOGLE_CLIENT_ID=votre-client-id
GOOGLE_CLIENT_SECRET=votre-client-secret

Vous pouvez les obtenir en créant un nouveau projet sur Google Developer Console et en créant des identifiants OAuth 2.0.

Dans ce cas, pour accéder à la route /workspaces, voous devez vous authentifier avec Google en visitant /auth/google. Actuellement, rien n’est fait avec l’information utilisateur provenant de Google, mais vous pouvez l’utiliser pour limiter l’accès à l’application.

Licence

MIT 2025

About

Real-time, collaborative, threat modeling tool. / Un outil collaboratif de modélisation des menaces en temps réel.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published