[{"data":1,"prerenderedAt":1457},["ShallowReactive",2],{"page-\u002Fthreat-patterns\u002Fmodelling-checklist":3,"navigation":1134},{"id":4,"title":5,"body":6,"description":1126,"extension":1127,"meta":1128,"navigation":1129,"path":1130,"seo":1131,"stem":1132,"__hash__":1133},"docs\u002F06.threat-patterns\u002F01.modelling-checklist.md","Modelling Checklist",{"type":7,"value":8,"toc":1112},"minimark",[9,13,21,30,42,47,61,92,110,140,144,158,194,214,218,223,229,248,275,279,288,417,429,432,570,582,623,627,632,729,739,743,754,793,806,813,817,838,849,877,886,907,911,918,1028,1035,1050,1054,1071,1080,1105],[10,11,5],"h1",{"id":12},"modelling-checklist",[14,15,16,17,20],"p",{},"Threat Patterns decides a leg only from what your model states. An unanswered attribute or field is undetermined, never read as \"no\". This checklist lists the facts and drawings the analysis asks for most often. For each one it says where to set it and which leg it settles. Attribute names are shown as they appear on the class, in ",[18,19,18],"code",{},".",[14,22,23,24,29],{},"If you are modelling an agentic system from scratch, start with the training ",[25,26,28],"a",{"href":27},"\u002Fagentic-modelling","Model an agentic architecture",": it teaches these facts in the order to draw them.",[14,31,32,33,37,38,20],{},"Start from the ",[34,35,36],"strong",{},"Facts to establish"," tab. It asks each question once, naming the exact element and fact for your model. Use this page to understand what each one means. Back to the ",[25,39,41],{"href":40},"\u002Fthreat-patterns","user guide",[43,44,46],"h2",{"id":45},"step-1-state-the-origin-of-untrusted-content","Step 1: State the origin of untrusted content",[14,48,49,52,53,56,57,60],{},[34,50,51],{},"Where:"," the data item's ",[34,54,55],{},"Origin"," field (",[18,58,59],{},"origin",").",[14,62,63,66,67,70,71,74,75,78,79,70,82,70,85,74,88,91],{},[34,64,65],{},"Set:"," who can write the content. ",[34,68,69],{},"Third party",", ",[34,72,73],{},"Arbitrary public"," and ",[34,76,77],{},"Not assessed"," count as untrusted. ",[34,80,81],{},"Authenticated first party",[34,83,84],{},"Curated internal",[34,86,87],{},"Agent relayed",[34,89,90],{},"Model generated"," do not.",[14,93,94,97,98,101,102,105,106,109],{},[34,95,96],{},"Settles:"," ",[34,99,100],{},"U"," (lethal trifecta), ",[34,103,104],{},"untrusted input"," (injection to action), ",[34,107,108],{},"untrusted content at the delegator"," (delegation hop).",[14,111,112,113,116,117,120,121,124,125,128,129,132,133,135,136,139],{},"You do not always need the field. Content carried from an element in an ",[34,114,115],{},"UNTRUSTED"," zone, or from an ",[34,118,119],{},"Untrusted Content Source"," or ",[34,122,123],{},"Public AI Artifact Hub",", already counts as untrusted. For this to work, the data items must be drawn on the flow. When they are missing, Facts to establish asks you to \"Draw the data items on\" that flow. What the agent reads back over a Context Ingress from a ",[34,126,127],{},"Vector Database"," or an ",[34,130,131],{},"Agent Memory Service"," counts as untrusted when a party in an ",[34,134,115],{}," zone writes into it, or when one of its write-access answers, such as ",[18,137,138],{},"memory_write_gated_from_untrusted_content",", is false; answered true, those answers settle nothing on their own.",[43,141,143],{"id":142},"step-2-mark-credentials-and-sensitive-data","Step 2: Mark credentials and sensitive data",[14,145,146,52,148,56,151,154,155,20],{},[34,147,51],{},[34,149,150],{},"Credential",[18,152,153],{},"is_credential"," in a model file), and its ",[34,156,157],{},"Sensitivity",[14,159,160,97,162,164,165,120,168,171,172,174,175,70,178,74,181,184,185,188,189,191,192,20],{},[34,161,65],{},[34,163,150],{}," to ",[34,166,167],{},"Yes — a credential",[34,169,170],{},"No",". Set ",[34,173,157],{}," on other data. ",[34,176,177],{},"Internal",[34,179,180],{},"Confidential",[34,182,183],{},"Restricted"," count as private. ",[34,186,187],{},"Public"," counts as not private only when ",[34,190,150],{}," is ",[34,193,170],{},[14,195,196,198,199,202,203,206,207,210,211,213],{},[34,197,96],{}," which data items are credentials, the subjects of ",[34,200,201],{},"credential chain",". Also ",[34,204,205],{},"P"," (lethal trifecta) and ",[34,208,209],{},"delegate holds the rest"," (delegation hop), because a credential is private data. A credential held by an MCP server with ",[34,212,150],{}," unanswered leaves P undetermined for the agents that call it.",[43,215,217],{"id":216},"step-3-connect-each-credential-to-its-holder-and-to-what-it-unlocks","Step 3: Connect each credential to its holder and to what it unlocks",[14,219,220,222],{},[34,221,51],{}," on the canvas.",[14,224,225,228],{},[34,226,227],{},"Draw:"," add the credential as a data item of the component or boundary that holds it. Put it on the flow that carries it to the system it unlocks.",[14,230,231,97,233,236,237,240,241,244,245,20],{},[34,232,96],{},[34,234,235],{},"reach"," (holder route) and ",[34,238,239],{},"unlock"," (credential chain). Without the unlock flow, a chain stays ",[34,242,243],{},"Not ruled out"," and the rotate list shows nothing under ",[34,246,247],{},"Unlocks",[14,249,250,253,254,257,258,70,261,70,264,74,267,270,271,274],{},[34,251,252],{},"Optional:"," on an ",[34,255,256],{},"Agent Credential",", answer ",[18,259,260],{},"credential_expiry_enforced",[18,262,263],{},"key_rotation_enabled",[18,265,266],{},"resource_scope_restricted",[18,268,269],{},"permission_scope_minimized",". These settle ",[34,272,273],{},"weak credential",", which makes a chain worse but never decides it.",[43,276,278],{"id":277},"step-4-answer-the-agents-tool-attributes","Step 4: Answer the agent's tool attributes",[14,280,281,283,284,287],{},[34,282,51],{}," the ",[34,285,286],{},"Agent Service"," element's attributes.",[289,290,296],"div",{"className":291,"tabIndex":293,"role":294,"ariaLabel":295},[292],"table-frame",0,"region","Table: Step 4: Answer the agent's tool attributes",[297,298,299,312],"table",{},[300,301,302],"thead",{},[303,304,305,309],"tr",{},[306,307,308],"th",{},"Attribute",[306,310,311],{},"Settles",[313,314,315,342,351,374,392,404],"tbody",{},[303,316,317,323],{},[318,319,320],"td",{},[18,321,322],{},"code_execution_tools_present",[318,324,325,328,329,331,332,74,335,337,338,341],{},[34,326,327],{},"action tools"," (injection to action). Answered true, the agent can read files in its shared space: ",[34,330,205],{}," (trifecta), ",[34,333,334],{},"foothold",[34,336,235],{}," (credential chain), unless ",[18,339,340],{},"code_execution_sandboxed"," is true. Answered false, it is not asked again, but it does not rule out file reads: running no code is not holding no tool that reads files. Draw the Agent Tool Call to the tool or harness that reads files, if the agent has one",[303,343,344,348],{},[318,345,346],{},[18,347,340],{},[318,349,350],{},"Answered true only when four things hold: the sandbox the agent's code runs in mounts none of the agent's files or working directory, receives none of its secrets or environment variables, holds no cloud or host credentials of its own, and its network cannot reach the cloud metadata endpoint (169.254.169.254) or the agent's own services. The code then reads nothing of the agent's shared space and reaches no metadata endpoint. File reads are then asked as for an agent that runs no code, the question ending \"(its code runs sandboxed)\": draw the Agent Tool Call to the harness that reads files, if there is one. A drawn call to such a harness still gives the agent file reads",[303,352,353,358],{},[318,354,355],{},[18,356,357],{},"consequential_tools_present",[318,359,360,362,363,365,366,369,370,373],{},[34,361,327],{},", and together with ",[18,364,322],{},", whether ",[34,367,368],{},"W"," applies at all. It does not only when both are false and no MCP server the agent calls answers ",[18,371,372],{},"destructive_tools_exposed"," true",[303,375,376,384],{},[318,377,378,70,381],{},[18,379,380],{},"consequential_tools_all_require_approval",[18,382,383],{},"approval_gate_present",[318,385,386,331,388,391],{},[34,387,368],{},[34,389,390],{},"no gate"," (injection to action)",[303,393,394,399],{},[318,395,396],{},[18,397,398],{},"tool_credentials_least_privilege_user_context",[318,400,401,391],{},[34,402,403],{},"broad identity",[303,405,406,411],{},[318,407,408],{},[18,409,410],{},"network_egress_default_deny_allowlist",[318,412,413,416],{},[34,414,415],{},"X"," on the agent's own route (trifecta)",[14,418,419,420,422,423,425,426,428],{},"With ",[18,421,357],{}," false, ",[18,424,380],{}," true cannot settle ",[34,427,368],{}," absent: it is about consequential tools, not about code execution or a called MCP server's destructive tools.",[14,430,431],{},"On the elements and flows around the agent:",[289,433,435],{"className":434,"tabIndex":293,"role":294,"ariaLabel":295},[292],[297,436,437,448],{},[300,438,439],{},[303,440,441,444,446],{},[306,442,443],{},"Where",[306,445,308],{},[306,447,311],{},[313,449,450,469,484,505,521,537,553],{},[303,451,452,460,464],{},[318,453,454,70,457],{},[34,455,456],{},"Local MCP Server",[34,458,459],{},"Remote MCP Server",[318,461,462],{},[18,463,372],{},[318,465,466,468],{},[34,467,327],{}," through the server",[303,470,471,475,480],{},[318,472,473],{},[34,474,456],{},[318,476,477],{},[18,478,479],{},"server_network_egress_restricted",[318,481,482,468],{},[34,483,415],{},[303,485,486,492,500],{},[318,487,488,491],{},[34,489,490],{},"Context Ingress"," flow",[318,493,494,70,497],{},[18,495,496],{},"human_approval_for_actions_after_untrusted_ingress",[18,498,499],{},"untrusted_ingress_can_trigger_consequential_actions",[318,501,502,504],{},[34,503,390],{},", per path (see below)",[303,506,507,512,517],{},[318,508,509,491],{},[34,510,511],{},"Agent Tool Call",[318,513,514],{},[18,515,516],{},"human_approval_for_sensitive_tool_calls",[318,518,519,504],{},[34,520,390],{},[303,522,523,527,532],{},[318,524,525,491],{},[34,526,511],{},[318,528,529],{},[18,530,531],{},"agent_egress_restricted",[318,533,534,536],{},[34,535,415],{}," through the tool call",[303,538,539,543,548],{},[318,540,541,491],{},[34,542,511],{},[318,544,545],{},[18,546,547],{},"handoff_permission_mode_not_widened",[318,549,550],{},[34,551,552],{},"open delegation",[303,554,555,560,565],{},[318,556,557],{},[34,558,559],{},"Agent Chat Frontend",[318,561,562],{},[18,563,564],{},"markdown_image_rendering_policy",[318,566,567,569],{},[34,568,415],{}," through the rendered chat",[14,571,572,573,575,576,578,579,581],{},"The paths are every ",[34,574,490],{}," that may carry untrusted content into the agent, and every ",[34,577,511],{}," out of it. Their approval answers settle ",[34,580,390],{},":",[289,583,585],{"className":584,"tabIndex":293,"role":294,"ariaLabel":295},[292],[297,586,587,597],{},[300,588,589],{},[303,590,591,594],{},[306,592,593],{},"Path answers",[306,595,596],{},"No gate",[313,598,599,607,615],{},[303,600,601,604],{},[318,602,603],{},"Any one path answered unapproved",[318,605,606],{},"present",[303,608,609,612],{},[318,610,611],{},"Every path answered approved",[318,613,614],{},"absent, unless untrusted content also reaches the agent through an MCP server or a knowledge item, the agent runs code with no drawn Agent Tool Call to the harness or executor it runs on, or the agent's own answers say an action runs unapproved (that action is then on a path not drawn)",[303,616,617,620],{},[318,618,619],{},"Otherwise",[318,621,622],{},"the agent's own answers decide",[43,624,626],{"id":625},"step-5-draw-the-flows-the-agent-really-has","Step 5: Draw the flows the agent really has",[14,628,629,631],{},[34,630,51],{}," on the canvas, from and to the agent.",[289,633,636],{"className":634,"tabIndex":293,"role":294,"ariaLabel":635},[292],"Table: Step 5: Draw the flows the agent really has",[297,637,638,647],{},[300,639,640],{},[303,641,642,645],{},[306,643,644],{},"Draw",[306,646,311],{},[313,648,649,662,674,684,693,707],{},[303,650,651,656],{},[318,652,653,655],{},[34,654,490],{}," flows into the agent, with their data items",[318,657,658,70,660],{},[34,659,100],{},[34,661,104],{},[303,663,664,669],{},[318,665,666,668],{},[34,667,511],{}," flows to the harness, to code executors and to MCP servers",[318,670,671,673],{},[34,672,327],{},", the shared-space read, and which harness runs the agent",[303,675,676,679],{},[318,677,678],{},"Every outbound flow of the agent",[318,680,681,683],{},[34,682,415],{},". An agent with none drawn is counted in the model gap \"agents have no declared outbound flows\"",[303,685,686,689],{},[318,687,688],{},"The data items the agent handles",[318,690,691],{},[34,692,205],{},[303,694,695,702],{},[318,696,697,698,701],{},"The agent's tool targets, and their data or ",[34,699,700],{},"crown jewel"," marking",[318,703,704],{},[34,705,706],{},"sensitive target",[303,708,709,718],{},[318,710,711,712,714,715,717],{},"A ",[34,713,490],{}," from agent A into agent B, or an ",[34,716,511],{}," from A to B",[318,719,720,721,724,725,728],{},"the ",[34,722,723],{},"delegation hop"," between them. Both ends must be agents. A ",[34,726,727],{},"Remote A2A Agent"," can be the sender",[14,730,731,732,734,735,738],{},"Place outside parties in an ",[34,733,115],{}," zone and a vendor's elements in a ",[34,736,737],{},"VENDOR"," boundary. Zones decide who can read what the agent sends. Who holds each fix is a separate answer; see step 7.",[43,740,742],{"id":741},"step-6-say-how-the-harness-approves-actions","Step 6: Say how the harness approves actions",[14,744,745,283,747,750,751,20],{},[34,746,51],{},[34,748,749],{},"Agent Harness"," element, ",[18,752,753],{},"harness_approval_mode",[14,755,756,758,759,74,762,765,766,70,769,70,772,70,775,74,778,781,782,74,785,788,789,792],{},[34,757,65],{}," the mode the harness runs in. ",[18,760,761],{},"default",[18,763,764],{},"plan"," mean the agent does not write without approval. ",[18,767,768],{},"acceptEdits",[18,770,771],{},"auto",[18,773,774],{},"dontAsk",[18,776,777],{},"bypassPermissions",[18,779,780],{},"never"," mean it does. ",[18,783,784],{},"on-request",[18,786,787],{},"granular"," do not decide; also answer the approval attributes on the agent (section 4). ",[18,790,791],{},"dangerously_skip_permissions_in_use"," set to true means the agent writes without approval, whatever the mode.",[14,794,795,798,799,802,803,805],{},[34,796,797],{},"Tie the agent to one harness."," Put both in the same ",[34,800,801],{},"Agent Runtime"," boundary, or draw an ",[34,804,511],{}," from the agent to the harness. With several candidates, Facts to establish asks you to draw which harness runs the agent.",[14,807,808,97,810,812],{},[34,809,96],{},[34,811,368],{}," (trifecta), and the model gaps \"W depends on an unanswered harness mode\" and \"no hosting harness drawn\".",[43,814,816],{"id":815},"step-7-say-who-runs-each-element","Step 7: Say who runs each element",[14,818,819,821,822,825,826,829,830,833,834,837],{},[34,820,51],{}," the element's ",[34,823,824],{},"Operated by"," field, in the last panel of its ",[34,827,828],{},"Attributes"," tab: ",[34,831,832],{},"Operation & version"," on a component, ",[34,835,836],{},"Operation"," on a boundary. The panel shows once the element has a class.",[14,839,840,97,842,120,845,848],{},[34,841,65],{},[34,843,844],{},"You (your organisation)",[34,846,847],{},"A vendor",", and only when you know.",[850,851,852,865,871],"ul",{},[853,854,855,858,859,861,862,864],"li",{},[34,856,857],{},"On a component:"," who builds or runs the element's own software. A hosted service you only configure is ",[34,860,847],{},". Something you build or run is ",[34,863,844],{},", also when you build it on a vendor's platform.",[853,866,867,870],{},[34,868,869],{},"On a boundary:"," who runs the environment of what is drawn directly in it. Draw each element directly in the boundary that runs its environment. The canvas itself never counts.",[853,872,873,876],{},[34,874,875],{},"Product:"," the vendor and product name, where you know it. A fix the vendor holds names it.",[14,878,879,882,883,885],{},[34,880,881],{},"Leave it empty unless you know."," Do not guess. An empty field is read from the zone: an element in a ",[34,884,737],{}," zone counts as the vendor's, any other as yours. Each fix whose holder depends on it then asks \"who holds it depends on: …\", so the open answer stays visible. A guess removes the question and puts the fix on the wrong owner.",[14,887,888,890,891,894,895,898,899,902,903,20],{},[34,889,96],{}," who holds each fix: you (a ",[34,892,893],{},"change","), you in part through the vendor's settings (",[34,896,897],{},"partial","), or the vendor (",[34,900,901],{},"compensate or accept","). It changes no leg and no finding. A setting is always yours, so a fix on a setting asks nothing. A flow has no field: it counts as the vendor's only when every element it connects is. A data item is always yours. See ",[25,904,906],{"href":905},"\u002Fthreat-patterns#fixes-on-a-finding","Fixes on a finding",[43,908,910],{"id":909},"step-8-use-the-assertion-only-where-the-model-cannot-say-it","Step 8: Use the assertion only where the model cannot say it",[14,912,913,97,915,917],{},[34,914,51],{},[34,916,36],{},", as a second button on a question that offers one.",[289,919,922],{"className":920,"tabIndex":293,"role":294,"ariaLabel":921},[292],"Table: Step 8: Use the assertion only where the model cannot say it",[297,923,924,939],{},[300,925,926],{},[303,927,928,931,934,937],{},[306,929,930],{},"Button",[306,932,933],{},"Appears when",[306,935,936],{},"You state",[306,938,311],{},[313,940,941,959,988],{},[303,942,943,948,951,954],{},[318,944,945],{},[34,946,947],{},"Assert outbound flows complete",[318,949,950],{},"The element's class has no attribute that could state its egress",[318,952,953],{},"Every outbound flow of the element is drawn",[318,955,956,958],{},[34,957,415],{}," at that element",[303,960,961,971,974,983],{},[318,962,963],{},[34,964,965,966,970],{},"Assert not a hand-off, and ",[967,968,969],"em",{},"B","'s model never reads it",[318,972,973],{},"A flow between agents is drawn so that it may be a hand-off, and the question asks whether it is one or how it scopes permissions. With several receiving agents, the button names them all",[318,975,976,977,979,980,982],{},"The flow hands no work on to ",[967,978,969],{},", and ",[967,981,969],{},"'s model never reads what it carries",[318,984,985,986],{},"The routes that rest on a hand-off over that flow, such as the ",[34,987,723],{},[303,989,990,1003,1012,1020],{},[318,991,992],{},[34,993,994,995,998,999,1002],{},"Assert ",[967,996,997],{},"H"," is not assigned to ",[967,1000,1001],{},"F","'s compute",[318,1004,1005,1006,1008,1009,1011],{},"The question asks whether identity ",[967,1007,997],{}," serves the compute that ",[967,1010,1001],{}," runs on. Each identity gets its own button",[318,1013,1014,1016,1017,1019],{},[967,1015,997],{}," is not assigned to the compute ",[967,1018,1001],{}," runs on",[318,1021,1022,1024,1025,1027],{},[34,1023,235],{}," through ",[967,1026,997],{},"'s token (credential chain)",[14,1029,1030,1031,1034],{},"Write a justification; it is required. The next run settles those routes absent and names your assertion as the evidence. ",[34,1032,1033],{},"Outbound flows complete"," still follows the element's drawn flows: an assertion on the element where a route leads in settles only that element, and a dead end or a route continuing past it is still asked about.",[14,1036,1037,1038,1041,1042,1045,1046,20],{},"An assertion lives on this analysis only. It does not change the model, and a new analysis of the same model starts without it. If what it is on changes, it turns ",[34,1039,1040],{},"stale"," and is no longer applied. Prefer an attribute or a drawing whenever the model has one. The dialog, the server's refusals and the ",[34,1043,1044],{},"Assertions"," list are in the user guide, under ",[25,1047,1049],{"href":1048},"\u002Fthreat-patterns#act-on-a-question","Act on a question",[43,1051,1053],{"id":1052},"step-9-generate-again","Step 9: Generate again",[14,1055,1056,1057,1060,1061,1064,1065,1068,1069,20],{},"After you change the model, the banner reads ",[34,1058,1059],{},"The model changed since this run."," (on a result generated before Threat Patterns engine 0.1.5, ",[34,1062,1063],{},"The model or Threat Patterns changed since this run.","). Click ",[34,1066,1067],{},"Generate again",", then check that the facts you answered have left ",[34,1070,36],{},[14,1072,1073,1076,1077,1079],{},[34,1074,1075],{},"Example."," In one model, the Facts to establish tab asked one question, to set ",[18,1078,322],{}," on the main agent. It settled two credentials at once. After that one attribute was answered true and the analysis was generated again:",[850,1081,1082,1092,1095,1102],{},[853,1083,1084,1085,1088,1089,1091],{},"two credential chains appeared, one ",[34,1086,1087],{},"Confirmed"," and one ",[34,1090,243],{}," (its unlock flow was not drawn);",[853,1093,1094],{},"both credentials joined the rotate list;",[853,1096,1097,1098,1101],{},"new fixes appeared on the ",[34,1099,1100],{},"Fixes"," tab;",[853,1103,1104],{},"the question left Facts to establish.",[14,1106,1107,1108,1111],{},"The Not ruled out chain now has its own open question on Facts to establish, the remaining ",[34,1109,1110],{},"to settle"," line: draw the flow that carries the second credential to what it unlocks. That is the next step in that model.",{"title":1113,"searchDepth":1114,"depth":1114,"links":1115},"",3,[1116,1118,1119,1120,1121,1122,1123,1124,1125],{"id":45,"depth":1117,"text":46},2,{"id":142,"depth":1117,"text":143},{"id":216,"depth":1117,"text":217},{"id":277,"depth":1117,"text":278},{"id":625,"depth":1117,"text":626},{"id":741,"depth":1117,"text":742},{"id":815,"depth":1117,"text":816},{"id":909,"depth":1117,"text":910},{"id":1052,"depth":1117,"text":1053},"Threat Patterns decides a leg only from what your model states. An unanswered attribute or field is undetermined, never read as \"no\". This checklist lists the facts and drawings the analysis asks for most often. For each one it says where to set it and which leg it settles. Attribute names are shown as they appear on the class, in code.","md",{},true,"\u002Fthreat-patterns\u002Fmodelling-checklist",{"title":5,"description":1126},"06.threat-patterns\u002F01.modelling-checklist","ZX3qB6VfRCMgAy9srQIHhMuL8n1rZp4oaKCw9dS1Y-k",[1135,1190,1225,1280,1314,1358,1368,1437],{"title":1136,"description":1137,"path":1138,"stem":1139,"children":1140,"page":-1},"Platform","Modelling, analysis, findings and controls in the Dethernety platform.","\u002Fplatform","01.platform",[1141,1145,1150,1155,1160,1165,1170,1175,1180,1185],{"title":1142,"path":1138,"stem":1143,"description":1144},"Dethernety User Documentation","01.platform\u002Findex","User guide for the Dethernety threat modeling platform",{"title":1146,"path":1147,"stem":1148,"description":1149},"Quick Start","\u002Fplatform\u002Fquick-start","01.platform\u002F01.quick-start","Install Dethernety on your own machine, draw a four-element model and read its first threat finding.",{"title":1151,"path":1152,"stem":1153,"description":1154},"Building Your First Model","\u002Fplatform\u002Fbuilding-your-first-model","01.platform\u002F02.building-your-first-model","Build a threat model of an online store in about 30 minutes, run a Threat Report on it, and raise an issue from a finding.",{"title":1156,"path":1157,"stem":1158,"description":1159},"Security Analysis Workflow","\u002Fplatform\u002Fsecurity-analysis-workflow","01.platform\u002F03.security-analysis-workflow","How to run security analysis and interpret results to improve your threat models.",{"title":1161,"path":1162,"stem":1163,"description":1164},"Managing Findings","\u002Fplatform\u002Fmanaging-findings","01.platform\u002F04.managing-findings","Record decisions on system-generated exposures and countermeasures — affirm them as confirmed live risk, or mute them as not applicable, false positive, waived, or superseded — instead of deleting them.",{"title":1166,"path":1167,"stem":1168,"description":1169},"Working with Security Controls","\u002Fplatform\u002Fworking-with-security-controls","01.platform\u002F05.working-with-security-controls","Learn how to create, manage, and assign reusable security controls in Dethernety to protect your threat models.",{"title":1171,"path":1172,"stem":1173,"description":1174},"Issue Management Guide","\u002Fplatform\u002Fissue-management-guide","01.platform\u002F06.issue-management-guide","Issue tracking, filtering, and management in Dethernety.",{"title":1176,"path":1177,"stem":1178,"description":1179},"Boundary Trust Zones","\u002Fplatform\u002Fboundary-trust-zones","01.platform\u002F07.boundary-trust-zones","Record each security boundary's trust zone, business domains, operational role, and approved channels to document how your system is meant to be segmented.",{"title":1181,"path":1182,"stem":1183,"description":1184},"Understanding Modules","\u002Fplatform\u002Funderstanding-modules","01.platform\u002F08.understanding-modules","How Dethernety's module system extends your threat modeling capabilities.",{"title":1186,"path":1187,"stem":1188,"description":1189},"Component Configuration Guide","\u002Fplatform\u002Fcomponent-configuration-guide","01.platform\u002F09.component-configuration-guide","Detailed guide on configuring different types of components and their security implications.",{"title":1191,"description":1192,"path":1193,"stem":1194,"children":1195,"page":-1},"BYODt cloud","Deploying the platform yourself and connecting it to the BYODt cloud.","\u002Fbyodt-cloud","02.byodt-cloud",[1196,1200,1205,1210,1215,1220],{"title":1197,"path":1193,"stem":1198,"description":1199},"BYODt Deployment","02.byodt-cloud\u002Findex","Run Dethernety on your own machine: install, configure, operate, and recover",{"title":1201,"path":1202,"stem":1203,"description":1204},"Installing the BYODt Deployment","\u002Fbyodt-cloud\u002Finstallation","02.byodt-cloud\u002F01.installation","Install Dethernety on your own machine: check the requirements, download and verify the signed bundle, start it, and confirm the deployment is healthy",{"title":1206,"path":1207,"stem":1208,"description":1209},"Configuring the BYODt Deployment","\u002Fbyodt-cloud\u002Fconfiguration","02.byodt-cloud\u002F02.configuration","The .env settings reference, the generated secret file, database storage, and how to apply a change",{"title":1211,"path":1212,"stem":1213,"description":1214},"Operating the BYODt Deployment","\u002Fbyodt-cloud\u002Foperations","02.byodt-cloud\u002F03.operations","The byodt command reference and the day-to-day tasks: start, stop, inspect, back up, restore, TLS, upgrade, remove",{"title":1216,"path":1217,"stem":1218,"description":1219},"Connecting the BYODt Deployment to the Cloud","\u002Fbyodt-cloud\u002Fcloud","02.byodt-cloud\u002F04.cloud","Add cloud sign-in and content packages from the operator console, and disconnect again",{"title":1221,"path":1222,"stem":1223,"description":1224},"Troubleshooting the BYODt Deployment","\u002Fbyodt-cloud\u002Ftroubleshooting","02.byodt-cloud\u002F05.troubleshooting","Symptom, cause, and fix for the failures this deployment reports",{"title":1226,"description":1227,"path":1228,"stem":1229,"children":1230,"page":-1},"Dethereal","The Claude Code plugin: build a threat model in conversation and publish it to the platform.","\u002Fdethereal","03.dethereal",[1231,1235,1240,1245,1250,1255,1260,1265,1270,1275],{"title":1232,"path":1228,"stem":1233,"description":1234},"Dethereal — Claude Code Plugin for Threat Modeling","03.dethereal\u002Findex","Comprehensive documentation for the Dethereal threat modeling plugin",{"title":1236,"path":1237,"stem":1238,"description":1239},"Getting Started with Dethereal","\u002Fdethereal\u002Fgetting-started","03.dethereal\u002F01.getting-started","Install the plugin, authenticate, and create your first threat model",{"title":1241,"path":1242,"stem":1243,"description":1244},"The 11-Step Guided Workflow","\u002Fdethereal\u002Fguided-workflow","03.dethereal\u002F02.guided-workflow","Complete walkthrough of the \u002Fdethereal:threat-model guided process",{"title":1246,"path":1247,"stem":1248,"description":1249},"Command Reference","\u002Fdethereal\u002Fcommand-reference","03.dethereal\u002F03.command-reference","Complete reference for all 14 Dethereal slash commands",{"title":1251,"path":1252,"stem":1253,"description":1254},"Threat Model Concepts","\u002Fdethereal\u002Fmodel-concepts","03.dethereal\u002F04.model-concepts","Components, boundaries, data flows, classes, attributes, and quality scoring",{"title":1256,"path":1257,"stem":1258,"description":1259},"Discovery and Enrichment","\u002Fdethereal\u002Fdiscovery-and-enrichment","03.dethereal\u002F05.discovery-and-enrichment","Infrastructure scanning, security attributes, MITRE ATT&CK, credentials, and compliance",{"title":1261,"path":1262,"stem":1263,"description":1264},"Sync and Version Control","\u002Fdethereal\u002Fsync-and-version-control","03.dethereal\u002F06.sync-and-version-control","Push\u002Fpull workflow, conflict handling, git integration, and multi-model projects",{"title":1266,"path":1267,"stem":1268,"description":1269},"Review and Attack Surface Analysis","\u002Fdethereal\u002Freview-and-analysis","03.dethereal\u002F07.review-and-analysis","Quality review, attack surface summary, and platform analysis integration",{"title":1271,"path":1272,"stem":1273,"description":1274},"Agents, Tools, and Hooks","\u002Fdethereal\u002Fagents-and-architecture","03.dethereal\u002F08.agents-and-architecture","How the 5 AI agents, 22 MCP tools, and 3 lifecycle hooks work together",{"title":1276,"path":1277,"stem":1278,"description":1279},"Dethereal Glossary","\u002Fdethereal\u002Fglossary","03.dethereal\u002F09.glossary","Definitions for Dethereal-specific terminology",{"title":1281,"description":1282,"path":1283,"stem":1284,"children":1285,"page":-1},"Threat Report","The residual-risk report over a threat model: reading it, filtering it and exporting it.","\u002Fthreat-report","04.threat-report",[1286,1289,1294,1299,1304,1309],{"title":1281,"path":1283,"stem":1287,"description":1288},"04.threat-report\u002Findex","Read, filter, drill into, and export a residual-risk report over a threat model",{"title":1290,"path":1291,"stem":1292,"description":1293},"Getting Started with the Threat Report","\u002Fthreat-report\u002Fgetting-started","04.threat-report\u002F01.getting-started","Generate, open, refresh, and export a threat report over a model",{"title":1295,"path":1296,"stem":1297,"description":1298},"Reading the Report","\u002Fthreat-report\u002Freading-the-report","04.threat-report\u002F02.reading-the-report","Navigating the report, the shared visual language, and the Posture and Boundary Crossings views",{"title":1300,"path":1301,"stem":1302,"description":1303},"Understanding Coverage and Gaps","\u002Fthreat-report\u002Funderstanding-coverage","04.threat-report\u002F03.understanding-coverage","Reading the MITRE ATT&CK coverage matrix: tiers, prevent vs detect, off-grid notes, and what coverage does and does not mean",{"title":1305,"path":1306,"stem":1307,"description":1308},"Reachability and Flow Routes","\u002Fthreat-report\u002Freachability","04.threat-report\u002F04.reachability","Exploring flow routes to crown-jewel assets and between any two elements — and what the analysis does and does not model",{"title":1310,"path":1311,"stem":1312,"description":1313},"Working with Findings","\u002Fthreat-report\u002Fworking-with-findings","04.threat-report\u002F05.working-with-findings","The Residual Risk ledger, triaging findings, filtering, and the per-element Component Profile",{"title":1315,"description":1316,"path":1317,"stem":1318,"children":1319,"page":-1},"Risk assessment","The risk assessment module: the register, the reports and the method behind them.","\u002Frisk-assessment","05.risk-assessment",[1320,1324,1329,1334,1339,1344,1348,1353],{"title":1321,"path":1317,"stem":1322,"description":1323},"Dethernety Risk Assessment User Guide","05.risk-assessment\u002Findex","Dethernety Risk Assessment turns a threat model you have built on the Dethernety platform into a grounded, board-ready draft risk report. From one point-in-time assessment of your model you get a prioritized worklist, a likelihood × impact risk matrix, a security-coverage posture, ten kinds of finding, a management risk register your team authors and maintains, and audience-tiered stakeholder reports — Board, Risk Committee, and Technical — plus machine-readable data exports.",{"title":1325,"path":1326,"stem":1327,"description":1328},"FAQ and Troubleshooting","\u002Frisk-assessment\u002Ffaq","05.risk-assessment\u002F01.faq","Short answers to the questions analysts, risk managers, and compliance officers ask most often about the Risk Assessment. Each answer links to the guide that covers it in full.",{"title":1330,"path":1331,"stem":1332,"description":1333},"Findings","\u002Frisk-assessment\u002Ffindings","05.risk-assessment\u002F02.findings","A finding is a specific observation the Risk Assessment makes about your threat model. Every finding is grounded in something concrete you have declared — an element, a data flow, a trust zone, a crown jewel — and it points you at a place worth a closer look. This guide is the reference to open when you see a finding and want to know what it means and what to do about it.",{"title":1335,"path":1336,"stem":1337,"description":1338},"Getting Started","\u002Frisk-assessment\u002Fgetting-started","05.risk-assessment\u002F03.getting-started","Risk Assessment turns a threat model you have built on the Dethernety platform into a grounded, board-ready draft risk report — a prioritized worklist, a likelihood × impact matrix, a security-coverage posture, ten kinds of finding, a risk register your team authors, and audience-tiered stakeholder reports and exports.",{"title":1340,"path":1341,"stem":1342,"description":1343},"Methodology and Trust","\u002Frisk-assessment\u002Fmethodology-and-trust","05.risk-assessment\u002F04.methodology-and-trust","Every number in a Risk Assessment is meant to survive scrutiny. This chapter explains why you can trust the report and — just as importantly — what it deliberately declines to claim, so you can put it in front of your board, a regulator, or an external auditor and defend every line.",{"title":1295,"path":1345,"stem":1346,"description":1347},"\u002Frisk-assessment\u002Freading-the-report","05.risk-assessment\u002F05.reading-the-report","The Risk Assessment turns your threat model into a single, scannable draft risk report: an executive summary at the top and a set of analytical tabs below it. This guide explains how to read what you see — what a matrix cell means, how coverage is stated, what a severity band is (and is not), and how to interpret each tab.",{"title":1349,"path":1350,"stem":1351,"description":1352},"Stakeholder Reports and Exports","\u002Frisk-assessment\u002Fstakeholder-reports","05.risk-assessment\u002F06.stakeholder-reports","One assessment produces reporting for every audience you answer to. From a single generated Risk Assessment you can hand your board a one-page brief, give your risk committee the full reconciliation, keep the complete technical detail for your own team, and export the underlying data into your GRC tool — without ever re-running anything or reconciling one document against another.",{"title":1354,"path":1355,"stem":1356,"description":1357},"The Risk Register","\u002Frisk-assessment\u002Fthe-risk-register","05.risk-assessment\u002F07.the-risk-register","The Risk Register is where your team records and manages the real risks your organisation is carrying — on top of, but separate from, what the analysis computed for you. Each entry is written by a person: a plain-language risk statement, your own assessment of how likely it is and how much it would hurt, the findings and elements from the analysis that back it up, a treatment decision, an owner, a review date, and a reference handle you can quote in a ticket or a board pack.",{"title":1359,"description":1360,"path":40,"stem":1361,"children":1362,"page":-1},"Threat Patterns","The Threat Patterns module and its modelling checklist.","06.threat-patterns",[1363,1367],{"title":1364,"path":40,"stem":1365,"description":1366},"Threat Patterns User Guide","06.threat-patterns\u002Findex","Threat Patterns finds threats in your model that no single element shows on its own. Each one appears only when several elements line up. For example, an agent may read content anyone can write, hold private data, and be able to send data where an outsider reads it. Each element can look acceptable alone, but together they form a path an attacker can use.",{"title":5,"path":1130,"stem":1132,"description":1126},{"title":1369,"description":1370,"path":27,"stem":1371,"children":1372,"page":-1},"Agentic modelling","A hands-on training: model one agentic system step by step, with Threat Patterns after each step.","07.agentic-modelling",[1373,1377,1382,1387,1392,1397,1402,1407,1412,1417,1422,1427,1432],{"title":1374,"path":27,"stem":1375,"description":1376},"Model an Agentic Architecture","07.agentic-modelling\u002Findex","A hands-on training in modelling systems that run AI agents, so that Threat Patterns can analyse them. You build one system, a fictional customer-support copilot, in eleven short lessons. Each lesson adds one thing to the model, and you run Threat Patterns after each one to see what the change did.",{"title":1378,"path":1379,"stem":1380,"description":1381},"Lesson 1: Draw the Agent and What It Talks To","\u002Fagentic-modelling\u002F01-draw-the-agent","07.agentic-modelling\u002F01.01-draw-the-agent","Training overview · Lesson 1 of 11 · Next: Say what data moves",{"title":1383,"path":1384,"stem":1385,"description":1386},"Lesson 2: Say What Data Moves","\u002Fagentic-modelling\u002F02-say-what-data-moves","07.agentic-modelling\u002F02.02-say-what-data-moves","Training overview · Lesson 2 of 11 · Previous: Draw the agent · Next: Mark who is outside",{"title":1388,"path":1389,"stem":1390,"description":1391},"Lesson 3: Mark Who Is Outside","\u002Fagentic-modelling\u002F03-mark-who-is-outside","07.agentic-modelling\u002F03.03-mark-who-is-outside","Training overview · Lesson 3 of 11 · Previous: Say what data moves · Next: Draw a tool that reaches any host",{"title":1393,"path":1394,"stem":1395,"description":1396},"Lesson 4: Draw a Tool That Reaches Any Host","\u002Fagentic-modelling\u002F04-draw-a-tool-that-reaches-any-host","07.agentic-modelling\u002F04.04-draw-a-tool-that-reaches-any-host","Training overview · Lesson 4 of 11 · Previous: Mark who is outside · Next: State what the agent can do",{"title":1398,"path":1399,"stem":1400,"description":1401},"Lesson 5: State What the Agent Can Do","\u002Fagentic-modelling\u002F05-state-what-the-agent-can-do","07.agentic-modelling\u002F05.05-state-what-the-agent-can-do","Training overview · Lesson 5 of 11 · Previous: Draw a tool that reaches any host · Next: Fix a finding with a fact",{"title":1403,"path":1404,"stem":1405,"description":1406},"Lesson 6: Fix a Finding With a Fact","\u002Fagentic-modelling\u002F06-fix-a-finding-with-a-fact","07.agentic-modelling\u002F06.06-fix-a-finding-with-a-fact","Training overview · Lesson 6 of 11 · Previous: State what the agent can do · Next: Record a compensating control",{"title":1408,"path":1409,"stem":1410,"description":1411},"Lesson 7: Record a Compensating Control","\u002Fagentic-modelling\u002F07-record-a-compensating-control","07.agentic-modelling\u002F07.07-record-a-compensating-control","Training overview · Lesson 7 of 11 · Previous: Fix a finding with a fact · Next: Leave what you don't know open",{"title":1413,"path":1414,"stem":1415,"description":1416},"Lesson 8: Leave What You Don't Know Open","\u002Fagentic-modelling\u002F08-leave-unknowns-open","07.agentic-modelling\u002F08.08-leave-unknowns-open","Training overview · Lesson 8 of 11 · Previous: Record a compensating control · Next: Follow a credential",{"title":1418,"path":1419,"stem":1420,"description":1421},"Lesson 9: Follow a Credential","\u002Fagentic-modelling\u002F09-follow-a-credential","07.agentic-modelling\u002F09.09-follow-a-credential","Training overview · Lesson 9 of 11 · Previous: Leave what you don't know open · Next: Watch what gets into knowledge and memory",{"title":1423,"path":1424,"stem":1425,"description":1426},"Lesson 10: Watch What Gets Into Knowledge and Memory","\u002Fagentic-modelling\u002F10-what-gets-in","07.agentic-modelling\u002F10.10-what-gets-in","Training overview · Lesson 10 of 11 · Previous: Follow a credential · Next: Draw tools from others and hand-offs",{"title":1428,"path":1429,"stem":1430,"description":1431},"Lesson 11: Draw Tools From Others and Hand-offs","\u002Fagentic-modelling\u002F11-tools-and-handoffs","07.agentic-modelling\u002F11.11-tools-and-handoffs","Training overview · Lesson 11 of 11 · Previous: Watch what gets into knowledge and memory",{"title":1433,"path":1434,"stem":1435,"description":1436},"The recipe at a glance","\u002Fagentic-modelling\u002Frecipe-at-a-glance","07.agentic-modelling\u002F12.recipe-at-a-glance","The ten steps of the training on one page. Each lesson teaches one or two of them.",{"title":1438,"description":1439,"path":1440,"stem":1441,"children":1442,"page":-1},"BYODt subscription","Subscribing on the BYODt Portal, and moving a deployment you already run to a new team.","\u002Fbyodt-subscription","08.byodt-subscription",[1443,1447,1452],{"title":1444,"path":1440,"stem":1445,"description":1446},"BYODt Subscription","08.byodt-subscription\u002Findex","Buy content for the deployment you run yourself, and decide where that deployment goes when you buy a team edition",{"title":1448,"path":1449,"stem":1450,"description":1451},"Your Subscription","\u002Fbyodt-subscription\u002Fyour-subscription","08.byodt-subscription\u002F01.your-subscription","Create an account, subscribe by card, and find the values your deployment needs on the portal",{"title":1453,"path":1454,"stem":1455,"description":1456},"Moving a Deployment to a New Team","\u002Fbyodt-subscription\u002Fmoving-a-deployment-to-a-new-team","08.byodt-subscription\u002F02.moving-a-deployment-to-a-new-team","What to do with the deployment you already run once you buy a team edition: three ways forward, best first",1793748186815]