Coder Social home page Coder Social logo

rpetrich / deciduous Goto Github PK

View Code? Open in Web Editor NEW
175.0 8.0 16.0 1.05 MB

App that simplifies building decision trees to model adverse scenarios

Home Page: https://deciduous.app

License: GNU General Public License v2.0

HTML 71.59% JavaScript 3.23% TypeScript 25.18%
security chaos-engineering resilience

deciduous's Introduction

Deciduous

A web app that simplifies building decision trees to model adverse scenarios. Hosted at https://www.deciduous.app/

It allows you to document your assumptions about how a system, service, app, etc. will respond to adverse events. Its heritage is in helping defenders anticipate attacker behavior and prepare mitigations accordingly, but it also applies to anticipating reliability-related failures, too.

It is especially useful as a foundation to conduct resilience stress testing / chaos experimentation, allowing you to continually refine your mental models of a system with reality. The end goal of using decision trees is to document your beliefs about how failure will unfold across your system in a given scenario, which can inform design improvements to better sustain resilience to that failure.

Getting started guide: https://kellyshortridge.com/blog/posts/deciduous-attack-tree-app/

Theme options include:

  • theme: default - the default tree styling
  • theme: accessible - for more color differentiation between attack and mitigation nodes
  • theme: classic - classic Graphviz styling
  • theme: dark - dark mode

For a more detailed write-up of using decision trees in practice, refer to the book Security Chaos Engineering: Sustaining Resilience in Software and Systems.

Examples

Example trees for #inspo are hosted in /examples.

Security

Reliability

Surrealism

deciduous's People

Contributors

dfaranha avatar rpetrich avatar swagitda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deciduous's Issues

Use as VSCode extension

As a person who uses VSCode and wants to version the graph.

I wanted to be able to preview graph changes in a window and also use standard version control tools to diagram.

Rename Reality option

I am using Deciduous for some slightly different types of flowcharts than intended, so I understand if this request is not accepted, but I was wondering if there might be an option added allowing you to rename the "Reality" box at the very top of the screen to something more specific to the flow being diagrammed. In my case, I am using Deciduous to map out all of the security actions that our mail systems can take as a message flows through them, and it would be helpful if I could rename the top box to say "Incoming Email" or something similar.

multi-line commenting

when building a decision tree, I want to comment out multiple lines at a time. This may be due to active discussions with collaborators where we aren't sure whether we want to include something, needing to download an image for a subset of branches, or wanting to show the difference between the tree with and without proposed mitigations.

Right now, commenting out must be performed line by line, which can be tedious with trees of a sufficient size.

save YAML

when I've finished a draft decision tree, I want to save the YAML I've created, not just the DOT file. Ideally, I'd like to export the YAML into a gist or otherwise version it in GitHub

Feature request: PNG export

I can convert from SVG to PNG, but most places I want to display an attack tree in documentation, I'll want it in a PNG. Is that possible to add?

Direction flow option

As most attack trees flow from the attack / threat being at the top, it would be beneficial to provide an option to control which direction is used in the diagram. Top> bottom or bottom > top.

Autocomplete suggestions in text editor

As a threat modeler, I want to have suggestions provided for nodes as I type that match the text so that I can quickly select and reference other graph nodes without having to find the exact string name by scrolling up and down.

Fix legend: true causing memory corruption inside graphviz's webassembly sandbox

          Try this, I tried it in Chrome, Vivaldi and Firefox, in private mode and normal mode. also tried clearing cache.

First, paste the below example. It should look like this:

image

Once pasted, put a new line under the title: entry. As you start to type legend: true, you will see the odd characters once you complete the word true.

title: Test attack tree

facts:
- t_a: Type A
  from:
  - reality
- t_b: Type B
  from:
  - reality
- t_c: Type C
  from:
  - reality
- t_d: Type D
  from:
  - reality
- t_e: Type E
  from:
  - reality

attacks:
- attack_1: Attack number 1
  from:
  - t_a
- attack_2: Attack number 2
  from:
  - t_a
- attack_3: Attack number 3
  from:
  - t_a
- attack_4: Attack number 4
  from:
  - t_b
- attack_5: Attack number 5
  from:
  - t_c
- attack_6: Attack number 6
  from:
  - t_d
- attack_7: Attack number 7
  from:
  - t_d
- attack_8: Attack number 8
  from:
  - t_d
- attack_9: Attack number 9
  from:
  - t_e

mitigations:
- mitigation: Mitigation?
  from:
  - attack_1
  - attack_2
  - attack_3
  - attack_4
  - attack_5
  - attack_6
  - attack_7
  - attack_8
  - attack_9

goals:
- goal_1: Goal number 1
  from:
  - attack_1
  - attack_2
  - attack_3
- goal_2: Goal number 2
  from:
  - attack_4
- goal_3: Goal number 3
  from:
  - attack_5
- goal_4: Goal number 4
  from:
  - attack_6
  - attack_7
  - attack_8
- goal_5: Goal number 5
  from:
  - attack_9

Originally posted by @huornlmj in #56 (comment)

Accessibility: color blind friendliness

I love the tool, but for folks who are red blind, the difference between attacks and mitigations can be difficult to tell the difference:
Screen Shot 2022-01-26 at 11 09 45 AM

vs

Screen Shot 2022-01-26 at 10 33 55 AM

I did a cursory web search, and entered the current color values to show how they render to different folks.
Screen Shot 2022-01-26 at 11 17 27 AM

That site also has good recommendations for accessible pallets. You could also consider using different shapes/corners to differentiate nodes in the graph

Provide a legend option

It would be beneficial to have a legend option available. If the material is exported into SVG or PDF with no legend, clarity is lost to the audience if they do not know what the node colour codes mean.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.