Bow Tie Kreative SECURITY Grammar

JSON Schemas

LAKA Threat and Control Graph

threat-model 8 required 10 properties

Required properties

  • version
  • model_id
  • client_id
  • scope
  • nodes
  • edges
  • scenarios
  • review_triggers

The schema in full

schemas/threat-model.schema.json · draft 2020-12
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bowtiekreative.example/schemas/laka-security/threat-model.schema.json",
  "title": "LAKA Threat and Control Graph",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "version",
    "model_id",
    "client_id",
    "scope",
    "nodes",
    "edges",
    "scenarios",
    "review_triggers"
  ],
  "properties": {
    "version": {
      "type": "string"
    },
    "model_id": {
      "type": "string",
      "minLength": 3
    },
    "client_id": {
      "type": "string",
      "minLength": 1
    },
    "title": {
      "type": "string"
    },
    "scope": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "environments",
        "assets",
        "authorization_id"
      ],
      "properties": {
        "environments": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "assets": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "authorization_id": {
          "type": "string"
        },
        "exclusions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "assumptions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "nodes": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "node_id",
          "kind",
          "name",
          "environment",
          "owner",
          "criticality",
          "trust_boundary"
        ],
        "properties": {
          "node_id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "environment": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "criticality": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
          },
          "classification": {
            "type": "string"
          },
          "trust_boundary": {
            "type": "string"
          },
          "internet_exposed": {
            "type": "boolean"
          },
          "evidence_freshness": {
            "type": "string"
          },
          "attributes": {
            "type": "object"
          }
        }
      }
    },
    "edges": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "edge_id",
          "from",
          "relation",
          "to",
          "condition",
          "confidence",
          "evidence"
        ],
        "properties": {
          "edge_id": {
            "type": "string"
          },
          "from": {
            "type": "string"
          },
          "relation": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "condition": {
            "type": "string"
          },
          "privilege": {
            "type": "string"
          },
          "data_class": {
            "type": "string"
          },
          "confidence": {
            "enum": [
              "observed",
              "inferred",
              "hypothesized",
              "refuted",
              "stale"
            ]
          },
          "evidence": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "expires": {
            "type": "string"
          }
        }
      }
    },
    "scenarios": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "scenario_id",
          "title",
          "actor",
          "entry_point",
          "preconditions",
          "attack_path",
          "effects",
          "volume",
          "control_links",
          "verification",
          "owner",
          "status"
        ],
        "properties": {
          "scenario_id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "actor": {
            "type": "string"
          },
          "entry_point": {
            "type": "string"
          },
          "preconditions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "technique_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "weakness_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "attack_path": {
            "type": "array",
            "minItems": 2,
            "items": {
              "type": "string"
            }
          },
          "effects": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string"
            }
          },
          "volume": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "magnitude",
              "rate",
              "direction",
              "scope",
              "depth",
              "duration",
              "frequency",
              "acceleration",
              "variability",
              "detectability",
              "reversibility",
              "propagation",
              "amplification",
              "accumulation"
            ],
            "properties": {
              "magnitude": {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              },
              "rate": {
                "type": "string"
              },
              "direction": {
                "type": "string"
              },
              "scope": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "depth": {
                "type": "string"
              },
              "duration": {
                "type": "string"
              },
              "frequency": {
                "type": "string"
              },
              "acceleration": {
                "type": "string"
              },
              "variability": {
                "type": "string"
              },
              "detectability": {
                "type": "integer",
                "minimum": 0,
                "maximum": 5
              },
              "reversibility": {
                "type": "string"
              },
              "propagation": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "amplification": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "accumulation": {
                "type": "string"
              }
            }
          },
          "control_links": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "control_id",
                "relation",
                "target",
                "expected_effect",
                "verification"
              ],
              "properties": {
                "control_id": {
                  "type": "string"
                },
                "relation": {
                  "enum": [
                    "prevent",
                    "reduce",
                    "isolate",
                    "observe",
                    "attribute",
                    "contain",
                    "recover",
                    "prove"
                  ]
                },
                "target": {
                  "type": "string"
                },
                "expected_effect": {
                  "type": "string"
                },
                "verification": {
                  "type": "string"
                },
                "failure_signal": {
                  "type": "string"
                }
              }
            }
          },
          "verification": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "next_uncertain_edge",
              "least_invasive_method",
              "mode",
              "evidence_required"
            ],
            "properties": {
              "next_uncertain_edge": {
                "type": "string"
              },
              "least_invasive_method": {
                "type": "string"
              },
              "mode": {
                "enum": [
                  "inventory",
                  "passive",
                  "audit",
                  "active",
                  "change",
                  "containment",
                  "recovery"
                ]
              },
              "evidence_required": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "stop_conditions": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "owner": {
            "type": "string"
          },
          "status": {
            "enum": [
              "draft",
              "current",
              "testing",
              "mitigated",
              "accepted",
              "refuted",
              "stale"
            ]
          }
        }
      }
    },
    "review_triggers": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    }
  }
}

Validate against it

curl -X POST https://security.bowtiekreative.com/v1/validate \
  -H 'content-type: application/json' \
  --data '{"schema": "threat-model", "document": { … }}'

This schema as JSON →