[{"data":1,"prerenderedAt":2790},["ShallowReactive",2],{"page-\u002Fplatform\u002Fbuilding-your-first-model":3,"navigation":2487},{"id":4,"title":5,"body":6,"description":2471,"extension":2472,"meta":2473,"navigation":2482,"path":2483,"seo":2484,"stem":2485,"__hash__":2486},"docs\u002F01.platform\u002F02.building-your-first-model.md","Building Your First Model",{"type":7,"value":8,"toc":2442},"minimark",[9,13,22,25,28,33,44,51,54,136,139,270,272,276,329,341,343,347,358,364,443,458,472,474,477,613,619,622,725,731,744,746,750,760,850,855,927,942,945,1009,1025,1029,1084,1087,1093,1096,1104,1112,1114,1118,1121,1277,1280,1317,1332,1348,1352,1359,1375,1383,1389,1408,1410,1414,1417,1553,1555,1577,1580,1586,1594,1598,1605,1637,1643,1667,1669,1673,1676,1720,1722,1726,1733,1777,1780,1786,1812,1816,1831,1837,1840,1907,1922,1928,1958,1960,1964,1971,2043,2049,2056,2076,2112,2116,2119,2151,2169,2176,2178,2181,2184,2188,2210,2213,2219,2232,2236,2289,2292,2294,2298,2301,2362,2366,2438],[10,11,5],"h1",{"id":12},"building-your-first-model",[14,15,16,17,21],"p",{},"This tutorial walks you through your first threat model from an empty platform to a finished report. You draw an online store as a data flow diagram, place its parts in trust zones, let the platform derive the exposures, run a ",[18,19,20],"strong",{},"Threat Report",", and turn one finding into a tracked issue. Plan on about 30 minutes.",[14,23,24],{},"Every step names exactly what to click and what to type, so you can follow along with the platform open in another tab. Your model will look like the screenshots.",[26,27],"hr",{},[29,30,32],"h2",{"id":31},"what-you-will-build","What you will build",[14,34,35,36,39,40,43],{},"You model ",[18,37,38],{},"E-commerce Platform",": a small online store. Customers browse and buy through a public web server. Behind it, an API server runs the business logic, a payment service authorises cards with an outside payment processor, and two data stores hold customer records and login sessions. Because the store takes card payments, it falls under ",[18,41,42],{},"PCI-DSS",".",[14,45,46],{},[47,48],"img",{"alt":49,"src":50},"The finished E-commerce Platform model in the data flow editor. A Customer on the left sends \"Shopping\" to a Web Server inside a DMZ boundary. \"API requests\" flow on to an API Server inside an Internal Network boundary, which sends \"Payments\" to a Payment Service, which sends \"Card authorisation\" to an external Payment Gateway. Inside Internal Network, a nested Database Zone holds a Customer Database, outlined in gold, and a Session Cache. Each boundary shows its trust zone chip: DMZ, Internal, and Restricted.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fmodel-complete.webp",[14,52,53],{},"The model has three kinds of building blocks:",[55,56,62],"div",{"className":57,"tabIndex":59,"role":60,"ariaLabel":61},[58],"table-frame",0,"region","Table: What you will build",[63,64,65,81],"table",{},[66,67,68],"thead",{},[69,70,71,75,78],"tr",{},[72,73,74],"th",{},"Building block",[72,76,77],{},"What it represents",[72,79,80],{},"In this model",[82,83,84,98,123],"tbody",{},[69,85,86,92,95],{},[87,88,89],"td",{},[18,90,91],{},"Boundary",[87,93,94],{},"A trust boundary: a network segment, a tier, or a data layer that groups elements",[87,96,97],{},"DMZ, Internal Network, Database Zone",[69,99,100,105,120],{},[87,101,102],{},[18,103,104],{},"Component",[87,106,107,108,111,112,115,116,119],{},"Something in the system: a ",[18,109,110],{},"process",", a data ",[18,113,114],{},"store",", or an ",[18,117,118],{},"external entity"," outside your control",[87,121,122],{},"Web Server, API Server, Payment Service, Customer Database, Session Cache, Customer, Payment Gateway",[69,124,125,130,133],{},[87,126,127],{},[18,128,129],{},"Data flow",[87,131,132],{},"Data moving from one component to another",[87,134,135],{},"Six flows, from \"Shopping\" to \"Sessions\"",[14,137,138],{},"Here is the plan you build from. Each boundary shows the trust zone you give it.",[140,141,146],"pre",{"className":142,"code":143,"language":144,"meta":145,"style":145},"language-mermaid shiki shiki-themes github-light github-dark-dimmed","flowchart LR\n  Customer[Customer]\n  Gateway[Payment Gateway]\n  subgraph DMZ[\"DMZ: Behind the front door\"]\n    Web((Web Server))\n  end\n  subgraph Internal[\"Internal Network: Internal\"]\n    API((API Server))\n    Pay((Payment Service))\n    subgraph DB[\"Database Zone: Restricted\"]\n      CDB[(Customer Database)]\n      Cache[(Session Cache)]\n    end\n  end\n  Customer -- Shopping --> Web\n  Web -- API requests --> API\n  API -- Payments --> Pay\n  Pay -- Card authorisation --> Gateway\n  API -- Customer data --> CDB\n  API -- Sessions --> Cache\n","mermaid","",[147,148,149,157,163,169,175,181,187,193,199,205,211,217,223,229,234,240,246,252,258,264],"code",{"__ignoreMap":145},[150,151,154],"span",{"class":152,"line":153},"line",1,[150,155,156],{},"flowchart LR\n",[150,158,160],{"class":152,"line":159},2,[150,161,162],{},"  Customer[Customer]\n",[150,164,166],{"class":152,"line":165},3,[150,167,168],{},"  Gateway[Payment Gateway]\n",[150,170,172],{"class":152,"line":171},4,[150,173,174],{},"  subgraph DMZ[\"DMZ: Behind the front door\"]\n",[150,176,178],{"class":152,"line":177},5,[150,179,180],{},"    Web((Web Server))\n",[150,182,184],{"class":152,"line":183},6,[150,185,186],{},"  end\n",[150,188,190],{"class":152,"line":189},7,[150,191,192],{},"  subgraph Internal[\"Internal Network: Internal\"]\n",[150,194,196],{"class":152,"line":195},8,[150,197,198],{},"    API((API Server))\n",[150,200,202],{"class":152,"line":201},9,[150,203,204],{},"    Pay((Payment Service))\n",[150,206,208],{"class":152,"line":207},10,[150,209,210],{},"    subgraph DB[\"Database Zone: Restricted\"]\n",[150,212,214],{"class":152,"line":213},11,[150,215,216],{},"      CDB[(Customer Database)]\n",[150,218,220],{"class":152,"line":219},12,[150,221,222],{},"      Cache[(Session Cache)]\n",[150,224,226],{"class":152,"line":225},13,[150,227,228],{},"    end\n",[150,230,232],{"class":152,"line":231},14,[150,233,186],{},[150,235,237],{"class":152,"line":236},15,[150,238,239],{},"  Customer -- Shopping --> Web\n",[150,241,243],{"class":152,"line":242},16,[150,244,245],{},"  Web -- API requests --> API\n",[150,247,249],{"class":152,"line":248},17,[150,250,251],{},"  API -- Payments --> Pay\n",[150,253,255],{"class":152,"line":254},18,[150,256,257],{},"  Pay -- Card authorisation --> Gateway\n",[150,259,261],{"class":152,"line":260},19,[150,262,263],{},"  API -- Customer data --> CDB\n",[150,265,267],{"class":152,"line":266},20,[150,268,269],{},"  API -- Sessions --> Cache\n",[26,271],{},[29,273,275],{"id":274},"before-you-start","Before you start",[55,277,280],{"className":278,"tabIndex":59,"role":60,"ariaLabel":279},[58],"Table: Before you start",[63,281,282,292],{},[66,283,284],{},[69,285,286,289],{},[72,287,288],{},"You need",[72,290,291],{},"Why",[82,293,294,309,319],{},[69,295,296,301],{},[87,297,298],{},[18,299,300],{},"A running Dethernety deployment",[87,302,303,304,43],{},"The tutorial runs on a stock install. To set one up, see ",[305,306,308],"a",{"href":307},"\u002Fbyodt-cloud\u002Finstallation","Installing the BYODt Deployment",[69,310,311,316],{},[87,312,313],{},[18,314,315],{},"A modern web browser",[87,317,318],{},"Chrome, Edge, Firefox, or Safari, with the platform open (signed in, if your deployment uses sign-in).",[69,320,321,326],{},[87,322,323],{},[18,324,325],{},"About 30 minutes",[87,327,328],{},"You can stop at any point. Everything saves as you go.",[330,331,335],"blockquote",{"className":332},[333,334],"callout","callout-tip",[14,336,337,340],{},[18,338,339],{},"Tip:"," When you model your own system later, start the same way: a rough sketch. List the trust boundaries (what is reachable from the internet, what is internal, where the sensitive data lives), the components inside each one, and the data that moves between them. You don't need every detail. Classes and exposures fill in the security picture once the shape is right.",[26,342],{},[29,344,346],{"id":345},"the-editor-at-a-glance","The editor at a glance",[14,348,349,350,353,354,43],{},"You'll do most of your work in the ",[18,351,352],{},"data flow editor",". Here are its parts, so the steps below make sense. You open it for the first time in ",[305,355,357],{"href":356},"#create-your-model","Create your model",[14,359,360],{},[47,361],{"alt":362,"src":363},"The empty data flow editor for E-commerce Platform, with eight numbered callouts. 1 marks the model name at the top left. 2 to 5 mark the four buttons stacked under it. 6 marks the palette on the right with Process, Store, External Entity, and Boundary. 7 marks the \"Select an item\" bar along the bottom. 8 marks the zoom controls at the bottom right.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Feditor-tour.webp",[365,366,367,374,380,395,401,407,427,437],"ol",{},[368,369,370,373],"li",{},[18,371,372],{},"Model name",": the model you're editing.",[368,375,376,379],{},[18,377,378],{},"Model settings",": opens the model dialog, where you edit the name, description, and compliance drivers, or export the model.",[368,381,382,385,386,390,391,394],{},[18,383,384],{},"Edit lock",": switches between edit mode (open padlock, tooltip ",[387,388,389],"em",{},"Edit mode (click to lock)",") and view mode (closed padlock, tooltip ",[387,392,393],{},"View mode (click to edit)",").",[368,396,397,400],{},[18,398,399],{},"Zoning overview",": lists every boundary and its trust zone.",[368,402,403,406],{},[18,404,405],{},"Analyses"," (sparkle icon): creates and runs analyses on the model.",[368,408,409,412,413,416,417,416,420,423,424,426],{},[18,410,411],{},"Palette",": the four element types, ",[18,414,415],{},"Process",", ",[18,418,419],{},"Store",[18,421,422],{},"External Entity",", and ",[18,425,91],{},". Click its header to collapse or expand it.",[368,428,429,432,433,436],{},[18,430,431],{},"Properties panel",": shows the settings of whatever you select. It reads ",[387,434,435],{},"Select an item"," until you select something. Use the chevron at its right end to expand or collapse it.",[368,438,439,442],{},[18,440,441],{},"Canvas controls",": zoom in, zoom out, fit view, and the interactivity lock.",[14,444,445,446,449,450,453,454,457],{},"The canvas is a boundary too. It is the model's ",[18,447,448],{},"Default Boundary",", the outermost container that holds everything else. Click an empty spot on the canvas and the panel reads ",[387,451,452],{},"Boundary: Default Boundary",". It has no ",[18,455,456],{},"Zoning"," tab, so you give trust zones to the boundaries you draw inside it.",[330,459,462],{"className":460},[333,461],"callout-note",[14,463,464,467,468,471],{},[18,465,466],{},"Important:"," When you reopen a model later, it opens in ",[18,469,470],{},"view mode",": the padlock (3) is closed and the palette (6) is collapsed. Nothing you drag or click changes the model. Click the padlock to start editing, then click the palette header to expand it. A brand-new model opens ready to edit.",[26,473],{},[29,475,357],{"id":476},"create-your-model",[365,478,479,494,497,533,606],{},[368,480,481,482,485,486,489,490,493],{},"In the left rail, click ",[18,483,484],{},"Browser",". The ",[18,487,488],{},"Home"," folder opens. On a new install, the models row shows a ",[18,491,492],{},"No models yet — create one"," card.",[368,495,496],{},"Optional: open the folder you want the model in. A new model is created in the folder you have open.",[368,498,499,500,503,504,507,508,511,512,514,515,518,522,524,525,528,529,532],{},"Click the round ",[18,501,502],{},"+"," button (tooltip ",[18,505,506],{},"Create or import","). A speed dial opens with three options. Click ",[18,509,510],{},"New model",", the diagram icon. Clicking the ",[18,513,492],{}," card does the same thing.",[516,517],"br",{},[47,519],{"alt":520,"src":521},"The Browser with the Create or import speed dial open. The pointer rests on the top option, the diagram icon, whose tooltip reads \"New model\".","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fbrowser-new-model.webp",[516,523],{},"A model named ",[387,526,527],{},"New Model"," is created straight away, and its dialog opens on the ",[18,530,531],{},"General"," tab.",[368,534,535,536,590,592,593,595,596,416,599,602,603,43],{},"Fill in the fields:",[55,537,540],{"className":538,"tabIndex":59,"role":60,"ariaLabel":539},[58],"Table: Create your model",[63,541,542,552],{},[66,543,544],{},[69,545,546,549],{},[72,547,548],{},"Field",[72,550,551],{},"Enter",[82,553,554,565,577],{},[69,555,556,561],{},[87,557,558],{},[18,559,560],{},"Name",[87,562,563],{},[147,564,38],{},[69,566,567,572],{},[87,568,569],{},[18,570,571],{},"Description",[87,573,574],{},[147,575,576],{},"Online store: storefront, API, payment processing and data stores.",[69,578,579,584],{},[87,580,581],{},[18,582,583],{},"Compliance drivers",[87,585,586,587,589],{},"Pick ",[18,588,42],{}," from the list. It is added as a chip.",[516,591],{},"In ",[18,594,583],{}," you can pick a recommended framework or type your own and press Enter. Each recommendation carries a label for how much the platform does with that driver, such as ",[387,597,598],{},"Full enrichment",[387,600,601],{},"Data classification",", or ",[387,604,605],{},"Declared only",[368,607,608,609,612],{},"Click the ",[18,610,611],{},"Open data flow editor"," button (6 in the figure below). It saves your changes and opens the empty model in the editor.",[14,614,615],{},[47,616],{"alt":617,"src":618},"The model dialog, here reopened after saving and titled \"Model: E-commerce Platform\", with Name, Description, and Compliance drivers filled in for E-commerce Platform and a PCI-DSS chip. Six numbered callouts mark the buttons along the bottom.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fmodel-dialog.webp",[14,620,621],{},"The buttons along the bottom of the dialog have icons but no tooltips:",[55,623,625],{"className":624,"tabIndex":59,"role":60,"ariaLabel":539},[58],[63,626,627,640],{},[66,628,629],{},[69,630,631,634,637],{},[72,632,633],{},"#",[72,635,636],{},"Button",[72,638,639],{},"What it does",[82,641,642,655,669,687,700,713],{},[69,643,644,647,652],{},[87,645,646],{},"1",[87,648,649],{},[18,650,651],{},"Add Issue",[87,653,654],{},"Raises an issue against the whole model.",[69,656,657,660,666],{},[87,658,659],{},"2",[87,661,662,665],{},[18,663,664],{},"Save"," (green)",[87,667,668],{},"Saves the dialog and keeps it open.",[69,670,671,674,680],{},[87,672,673],{},"3",[87,675,676,679],{},[18,677,678],{},"Export"," (download icon)",[87,681,682,683,43],{},"Saves, then exports the model as a ZIP archive. See ",[305,684,686],{"href":685},"#export-and-import-your-model","Export and import your model",[69,688,689,692,697],{},[87,690,691],{},"4",[87,693,694],{},[18,695,696],{},"Move to folder",[87,698,699],{},"Moves the model to another folder.",[69,701,702,705,710],{},[87,703,704],{},"5",[87,706,707],{},[18,708,709],{},"Delete",[87,711,712],{},"Deletes the model, after you confirm by typing its name.",[69,714,715,718,722],{},[87,716,717],{},"6",[87,719,720],{},[18,721,611],{},[87,723,724],{},"Saves, then opens the model on the canvas.",[14,726,727,728,730],{},"To come back to this dialog later, click ",[18,729,378],{}," (2) in the editor, or click the settings icon on the model's tile in the Browser. Right-clicking the tile also works.",[330,732,734],{"className":733},[333,461],[14,735,736,739,740,43],{},[18,737,738],{},"Note:"," The model has no module step. The classes you pick for boundaries, components, and data flows come from the modules installed on your deployment, and every model gets the same set. See ",[305,741,743],{"href":742},"\u002Fplatform\u002Funderstanding-modules#where-the-classes-you-can-pick-come-from","Where the classes you can pick come from",[26,745],{},[29,747,749],{"id":748},"set-up-security-boundaries","Set up security boundaries",[14,751,752,753,756,757,43],{},"Start with the boundaries, because components belong to the boundary you drop them into. For each boundary, you pick a ",[18,754,755],{},"class"," (what kind of boundary it is), give it a name and description, and set its ",[18,758,759],{},"trust zone",[55,761,764],{"className":762,"tabIndex":59,"role":60,"ariaLabel":763},[58],"Table: Set up security boundaries",[63,765,766,783],{},[66,767,768],{},[69,769,770,772,775,778,781],{},[72,771,560],{},[72,773,774],{},"Class",[72,776,777],{},"Place it",[72,779,780],{},"Trust zone",[72,782,571],{},[82,784,785,806,826],{},[69,786,787,792,795,798,801],{},[87,788,789],{},[18,790,791],{},"DMZ",[87,793,794],{},"Network Segment",[87,796,797],{},"On the canvas, left of center",[87,799,800],{},"Behind the front door (DMZ)",[87,802,803],{},[147,804,805],{},"Public-facing services, reachable from the internet",[69,807,808,813,815,818,821],{},[87,809,810],{},[18,811,812],{},"Internal Network",[87,814,794],{},[87,816,817],{},"On the canvas, right of the DMZ. Make it large.",[87,819,820],{},"Internal",[87,822,823],{},[147,824,825],{},"Private network for application services",[69,827,828,833,836,842,845],{},[87,829,830],{},[18,831,832],{},"Database Zone",[87,834,835],{},"Data Layer",[87,837,838,841],{},[18,839,840],{},"Inside"," Internal Network",[87,843,844],{},"Restricted",[87,846,847],{},[147,848,849],{},"Databases holding customer and payment data",[851,852,854],"h3",{"id":853},"add-the-dmz","Add the DMZ",[365,856,857,865,878,899,924],{},[368,858,859,860,862,863,532],{},"Drag ",[18,861,91],{}," from the palette onto the canvas. The new boundary is selected, and the properties panel opens on its ",[18,864,531],{},[368,866,867,868,871,872,874,875,877],{},"In the ",[18,869,870],{},"Boundary Class"," field, type ",[147,873,794],{}," and pick ",[18,876,794],{}," from the list. The class applies straight away. A message confirms the change and reports how many exposures it generated, and a class card appears showing the class's category, module, and description.",[368,879,880,881,883,884,886,887,889,890,892,893,895],{},"Replace the placeholder ",[18,882,560],{}," with ",[147,885,791],{}," and the ",[18,888,571],{}," with the text from the table, then click ",[18,891,664],{}," on the right side of the panel.",[516,894],{},[47,896],{"alt":897,"src":898},"The properties panel for the DMZ boundary, open on the General tab. The Name and Description are filled in, and a class card for Network Segment shows its category, module, and description.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fboundary-class-assigned.webp",[368,900,901,902,904,905,907,908,910,911,913,914,917,918,920],{},"Open the ",[18,903,456],{}," tab. In the ",[18,906,780],{}," list, choose ",[18,909,800],{},", then click ",[18,912,664],{},". The message ",[387,915,916],{},"Zoning saved successfully"," appears, and the boundary gets a coloured stripe down its left edge and a zone chip.",[516,919],{},[47,921],{"alt":922,"src":923},"The Zoning tab of a boundary with the Trust zone list open. Under \"Your tiers\" are Internet-facing, Behind the front door (DMZ), Internal, and Restricted, each with a one-line description. Under \"Outside\" is Open internet.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fboundary-trust-zones.webp",[368,925,926],{},"Drag a corner handle of the selected boundary to make it big enough for one component.",[330,928,930],{"className":929},[333,334],[14,931,932,934,935,938,939,394],{},[18,933,339],{}," ",[18,936,937],{},"Pick the class first",", then edit the name and description and save. If you change the name or description and then pick a class before saving, the class pick can be lost. Following the class-first order avoids this. Name and description also save on their own when you click out of the field (",[387,940,941],{},"Item updated successfully",[14,943,944],{},"The trust zones you can choose from:",[55,946,949],{"className":947,"tabIndex":59,"role":60,"ariaLabel":948},[58],"Table: Add the DMZ",[63,950,951,960],{},[66,952,953],{},[69,954,955,957],{},[72,956,780],{},[72,958,959],{},"Meaning",[82,961,962,972,981,990,999],{},[69,963,964,969],{},[87,965,966],{},[18,967,968],{},"Internet-facing",[87,970,971],{},"Reachable directly from the internet",[69,973,974,978],{},[87,975,976],{},[18,977,800],{},[87,979,980],{},"Reachable only through a public edge",[69,982,983,987],{},[87,984,985],{},[18,986,820],{},[87,988,989],{},"Reachable only from trusted zones, with no untrusted ingress",[69,991,992,996],{},[87,993,994],{},[18,995,844],{},[87,997,998],{},"Cardholder data environments, secrets, domain controllers, regulated-data stores",[69,1000,1001,1006],{},[87,1002,1003],{},[18,1004,1005],{},"Open internet",[87,1007,1008],{},"Outside your estate entirely",[14,1010,1011,1012,1015,1016,1019,1020,1024],{},"A boundary with no zone of its own inherits its parent's zone. At the top of the chain it falls back to ",[18,1013,1014],{},"Internal (default)"," and counts as unclassified. A zone is declared design intent, not verified evidence. Everything else on the Zoning tab, such as tags and ",[18,1017,1018],{},"Approved channels",", is optional, and you can skip it for this tutorial. ",[305,1021,1023],{"href":1022},"\u002Fplatform\u002Fboundary-trust-zones","Boundary Trust Zones"," covers all of it.",[851,1026,1028],{"id":1027},"add-internal-network-and-database-zone","Add Internal Network and Database Zone",[365,1030,1031,1049,1059,1068,1081],{},[368,1032,1033,1034,1036,1037,1039,1040,1042,1043,1045,1046,1048],{},"Add ",[18,1035,812],{}," the same way: drag ",[18,1038,91],{}," onto the canvas to the right of the DMZ, pick ",[18,1041,794],{},", enter the name and description, save, and set the trust zone to ",[18,1044,820],{}," on the ",[18,1047,456],{}," tab. Resize it so that it fills most of the right side of the canvas, leaving room for a nested boundary.",[368,1050,1051,1052,1054,1055,1058],{},"Drag another ",[18,1053,91],{}," and drop it ",[18,1056,1057],{},"inside"," Internal Network. Dropping it there makes it a child of Internal Network.",[368,1060,1061,1062,1064,1065,1067],{},"Pick the ",[18,1063,835],{}," class, name it ",[147,1066,832],{},", add the description, and save.",[368,1069,1070,1071,1073,1074,1077,1078,1080],{},"On the ",[18,1072,456],{}," tab, the trust zone reads ",[387,1075,1076],{},"Internal (inherited from Internal Network)",". Choose ",[18,1079,844],{}," and save.",[368,1082,1083],{},"Resize Database Zone so that it can hold two stores.",[14,1085,1086],{},"The animation below shows steps 2 to 5.",[14,1088,1089],{},[47,1090],{"alt":1091,"src":1092},"Animation: a Boundary is dragged from the palette into Internal Network. In the properties panel, the Data Layer class is picked, the boundary is named Database Zone and saved, Restricted is chosen on the Zoning tab, and the boundary is resized by its corner handle.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fadd-boundary.webp",[14,1094,1095],{},"Your boundary structure is now:",[140,1097,1102],{"className":1098,"code":1100,"language":1101,"meta":145},[1099],"language-text","Default Boundary (the canvas)\n├── DMZ                    Behind the front door (DMZ)\n└── Internal Network       Internal\n    └── Database Zone      Restricted\n","text",[147,1103,1100],{"__ignoreMap":145},[330,1105,1107],{"className":1106},[333,334],[14,1108,1109,1111],{},[18,1110,339],{}," To move an element or a boundary into a different boundary later, drag it there. Drag it out onto the open canvas to take it out of every boundary you drew.",[26,1113],{},[29,1115,1117],{"id":1116},"add-the-components","Add the components",[14,1119,1120],{},"Each component works like a boundary: drop it where it belongs, pick its class, then name, describe, and save it.",[55,1122,1125],{"className":1123,"tabIndex":59,"role":60,"ariaLabel":1124},[58],"Table: Add the components",[63,1126,1127,1143],{},[66,1128,1129],{},[69,1130,1131,1133,1136,1138,1141],{},[72,1132,560],{},[72,1134,1135],{},"Palette type",[72,1137,774],{},[72,1139,1140],{},"Drop it in",[72,1142,571],{},[82,1144,1145,1165,1184,1202,1221,1239,1258],{},[69,1146,1147,1152,1154,1157,1160],{},[87,1148,1149],{},[18,1150,1151],{},"Customer",[87,1153,422],{},[87,1155,1156],{},"End User",[87,1158,1159],{},"The canvas, outside every boundary",[87,1161,1162],{},[147,1163,1164],{},"Anonymous or signed-in shopper on the internet",[69,1166,1167,1172,1174,1177,1179],{},[87,1168,1169],{},[18,1170,1171],{},"Payment Gateway",[87,1173,422],{},[87,1175,1176],{},"Payment Service Provider",[87,1178,1159],{},[87,1180,1181],{},[147,1182,1183],{},"Third-party card processor (for example Stripe)",[69,1185,1186,1191,1193,1195,1197],{},[87,1187,1188],{},[18,1189,1190],{},"Web Server",[87,1192,415],{},[87,1194,1190],{},[87,1196,791],{},[87,1198,1199],{},[147,1200,1201],{},"Serves the storefront to customers over HTTPS",[69,1203,1204,1209,1211,1214,1216],{},[87,1205,1206],{},[18,1207,1208],{},"API Server",[87,1210,415],{},[87,1212,1213],{},"Application Service",[87,1215,812],{},[87,1217,1218],{},[147,1219,1220],{},"Business logic: catalogue, accounts, orders",[69,1222,1223,1228,1230,1232,1234],{},[87,1224,1225],{},[18,1226,1227],{},"Payment Service",[87,1229,415],{},[87,1231,1213],{},[87,1233,812],{},[87,1235,1236],{},[147,1237,1238],{},"Authorises and records card payments",[69,1240,1241,1246,1248,1251,1253],{},[87,1242,1243],{},[18,1244,1245],{},"Customer Database",[87,1247,419],{},[87,1249,1250],{},"Relational Database",[87,1252,832],{},[87,1254,1255],{},[147,1256,1257],{},"PostgreSQL: customer accounts, orders and payment records",[69,1259,1260,1265,1267,1270,1272],{},[87,1261,1262],{},[18,1263,1264],{},"Session Cache",[87,1266,419],{},[87,1268,1269],{},"Cache \u002F In-Memory Store",[87,1271,832],{},[87,1273,1274],{},[147,1275,1276],{},"Redis: login sessions and carts",[14,1278,1279],{},"For each row:",[365,1281,1282,1288,1307],{},[368,1283,1284,1285,43],{},"Drag the palette type onto the canvas, or into the boundary named in the table. The component is selected, and its properties panel opens with a placeholder name such as ",[387,1286,1287],{},"New Process",[368,1289,867,1290,1293,1294,1297,1298,43,1301,1303],{},[18,1291,1292],{},"Component Class"," field, type the class name and pick it. The list shows exact name matches first, followed by related classes labelled ",[18,1295,1296],{},"Suggested",". If you're unsure what a class is called, click ",[18,1299,1300],{},"Browse all classes →",[516,1302],{},[47,1304],{"alt":1305,"src":1306},"The properties panel of a new process with \"Web Server\" typed into the Component Class field. The list shows Web Server, then Reverse Proxy \u002F WAF Appliance and Application Service, both labelled Suggested, and a \"Browse all classes →\" link at the bottom.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fcomponent-class-picker.webp",[368,1308,1309,1310,1312,1313,910,1315,43],{},"Enter the ",[18,1311,560],{}," and ",[18,1314,571],{},[18,1316,664],{},[330,1318,1320],{"className":1319},[333,461],[14,1321,1322,1324,1325,1328,1329,1331],{},[18,1323,738],{}," On a freshly installed deployment, the class search may show ",[387,1326,1327],{},"Semantic search is unavailable on this deployment — showing name-based matches."," That happens while the deployment is still setting up its search model. Typing the class name still finds it. The ",[18,1330,1296],{}," matches appear once setup finishes.",[330,1333,1335],{"className":1334},[333,334],[14,1336,1337,1339,1340,1343,1344,1347],{},[18,1338,339],{}," An element with no class shows an orange ",[18,1341,1342],{},"?"," badge. Hover over it for the reason: ",[387,1345,1346],{},"No class assigned. Open Settings to assign one."," Select the element and pick a class to clear the badge.",[851,1349,1351],{"id":1350},"mark-the-crown-jewel","Mark the crown jewel",[14,1353,1354,1355,1358],{},"A ",[18,1356,1357],{},"crown jewel"," is an asset an attacker would most want to reach. The Threat Report checks which of your crown jewels can be reached, and how. In this store, that's the customer database.",[365,1360,1361,1366],{},[368,1362,1363,1364,43],{},"Select ",[18,1365,1245],{},[368,1367,867,1368,1370,1371,1374],{},[18,1369,531],{}," tab, click the crown button to the left of the ",[18,1372,1373],{},"Inherited from a Class"," switch.",[14,1376,1377,1378,1382],{},"The crown fills in and the node gets a gold outline. Click the crown again to unmark it. See ",[305,1379,1381],{"href":1380},"\u002Fplatform\u002Fcomponent-configuration-guide#marking-crown-jewels","Marking crown jewels"," for more.",[14,1384,1385],{},[47,1386],{"alt":1387,"src":1388},"The properties panel of Customer Database with the crown button switched on. On the canvas behind it, the Customer Database node has a gold outline.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fcrown-jewel.webp",[330,1390,1392],{"className":1391},[333,461],[14,1393,1394,1396,1397,1399,1400,1403,1404,43],{},[18,1395,738],{}," The ",[18,1398,1373],{}," switch also has a second setting, ",[18,1401,1402],{},"Represents a Model",". With it, a component stands for another model on the platform instead of a class, which is useful for drawing a large system as linked sub-models. You don't need it for this tutorial. See the ",[305,1405,1407],{"href":1406},"\u002Fplatform\u002Fcomponent-configuration-guide","Component Configuration Guide",[26,1409],{},[29,1411,1413],{"id":1412},"connect-the-data-flows","Connect the data flows",[14,1415,1416],{},"A data flow is an arrow from one component to another. Its direction is the direction the data travels in.",[55,1418,1421],{"className":1419,"tabIndex":59,"role":60,"ariaLabel":1420},[58],"Table: Connect the data flows",[63,1422,1423,1439],{},[66,1424,1425],{},[69,1426,1427,1430,1433,1435,1437],{},[72,1428,1429],{},"From",[72,1431,1432],{},"To",[72,1434,560],{},[72,1436,774],{},[72,1438,571],{},[82,1440,1441,1460,1479,1498,1516,1535],{},[69,1442,1443,1445,1447,1452,1455],{},[87,1444,1151],{},[87,1446,1190],{},[87,1448,1449],{},[147,1450,1451],{},"Shopping",[87,1453,1454],{},"HTTP\u002FS Request",[87,1456,1457],{},[147,1458,1459],{},"Browsing, cart and checkout over HTTPS",[69,1461,1462,1464,1466,1471,1474],{},[87,1463,1190],{},[87,1465,1208],{},[87,1467,1468],{},[147,1469,1470],{},"API requests",[87,1472,1473],{},"API Call",[87,1475,1476],{},[147,1477,1478],{},"REST calls carrying the customer's session token",[69,1480,1481,1483,1485,1490,1493],{},[87,1482,1208],{},[87,1484,1227],{},[87,1486,1487],{},[147,1488,1489],{},"Payments",[87,1491,1492],{},"Internal Service Communication",[87,1494,1495],{},[147,1496,1497],{},"Order total and card token for authorisation",[69,1499,1500,1502,1504,1509,1511],{},[87,1501,1227],{},[87,1503,1171],{},[87,1505,1506],{},[147,1507,1508],{},"Card authorisation",[87,1510,1473],{},[87,1512,1513],{},[147,1514,1515],{},"HTTPS to the processor's API, authenticated with an API key",[69,1517,1518,1520,1522,1527,1530],{},[87,1519,1208],{},[87,1521,1245],{},[87,1523,1524],{},[147,1525,1526],{},"Customer data",[87,1528,1529],{},"Database Query",[87,1531,1532],{},[147,1533,1534],{},"SQL over TLS with a pooled service account",[69,1536,1537,1539,1541,1546,1548],{},[87,1538,1208],{},[87,1540,1264],{},[87,1542,1543],{},[147,1544,1545],{},"Sessions",[87,1547,1529],{},[87,1549,1550],{},[147,1551,1552],{},"Session and cart reads and writes",[14,1554,1279],{},[365,1556,1557,1560,1563,1569],{},[368,1558,1559],{},"Point at the source component. Small round connection handles appear on its edges.",[368,1561,1562],{},"Drag from a handle on the source to a handle on the target, and release. The flow is created, and its properties panel opens.",[368,1564,867,1565,1568],{},[18,1566,1567],{},"Data Flow Class"," field, pick the class from the table.",[368,1570,1309,1571,1312,1573,910,1575,43],{},[18,1572,560],{},[18,1574,571],{},[18,1576,664],{},[14,1578,1579],{},"The animation below shows the first flow, from Customer to Web Server.",[14,1581,1582],{},[47,1583],{"alt":1584,"src":1585},"Animation: the pointer drags from a handle on Customer to a handle on Web Server, creating an arrow. In the properties panel, the HTTP\u002FS Request class is picked, the flow is named Shopping, and the panel is saved.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fadd-data-flow.webp",[330,1587,1589],{"className":1588},[333,334],[14,1590,1591,1593],{},[18,1592,339],{}," The editor draws each flow's name as a label on the canvas. Short names keep the diagram readable, so put the detail in the description.",[851,1595,1597],{"id":1596},"see-what-the-platform-found","See what the platform found",[14,1599,1600,1601,1604],{},"Each class you picked comes with policies that derive ",[18,1602,1603],{},"exposures",": weaknesses that could be exploited on that element, each linked to the MITRE ATT&CK techniques that exploit it. You've been generating them all along. That's what the message after each class pick counted.",[365,1606,1607,1620,1627],{},[368,1608,1363,1609,1611,1612,1615,1616,1619],{},[18,1610,1245],{}," and open its ",[18,1613,1614],{},"Exposures"," tab. The tab shows a count, such as ",[18,1617,1618],{},"EXPOSURES (9)",", and a table with each exposure's name, description, and the techniques that exploit it.",[368,1621,1622,1623,1626],{},"Click the tab's expand button. The ",[18,1624,1625],{},"Exposures of Customer Database"," dialog opens.",[368,1628,1629,1630,1633,1634,43],{},"Click an exposure to see its score, attack vector, and the techniques that exploit it, such as ",[387,1631,1632],{},"Network Sniffing (T1040)"," or ",[387,1635,1636],{},"Adversary-in-the-Middle (T1557)",[14,1638,1639],{},[47,1640],{"alt":1641,"src":1642},"The \"Exposures of Customer Database\" dialog. A list of exposures, each marked pending, is on the left. On the right is the selected exposure's detail: a score, the ADJACENT attack vector, a tag, the techniques that exploit it, and the Affirm, Dispose, and Customize buttons.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fexposures-dialog.webp",[14,1644,1645,1646,1649,1650,1653,1654,1657,1658,1661,1662,1666],{},"New exposures are ",[18,1647,1648],{},"pending",": nobody has reviewed them yet. ",[18,1651,1652],{},"Affirm"," confirms one as a real risk, ",[18,1655,1656],{},"Dispose"," mutes one that doesn't apply (with a reason), and ",[18,1659,1660],{},"Customize"," makes an editable copy. You can leave them all pending for now. You review them in bulk in the Threat Report. ",[305,1663,1665],{"href":1664},"\u002Fplatform\u002Fmanaging-findings","Managing Findings"," explains each decision.",[26,1668],{},[29,1670,1672],{"id":1671},"check-your-work","Check your work",[14,1674,1675],{},"Before you run the report, make sure the model is complete.",[365,1677,1678,1687,1710],{},[368,1679,1680,1683,1684,1686],{},[18,1681,1682],{},"Every element has a class."," No orange ",[18,1685,1342],{}," badges are left on the canvas.",[368,1688,1689,1692,1693,1695,1696,1699,1700,1703,1704,1706],{},[18,1690,1691],{},"Every boundary has a trust zone."," Click ",[18,1694,399],{}," (4). The dialog lists each boundary with its trust zone, role, and channels. The chip at the top reads ",[18,1697,1698],{},"0 unclassified",". If it doesn't, turn on ",[18,1701,1702],{},"Show only unclassified"," to find the boundary you missed.",[516,1705],{},[47,1707],{"alt":1708,"src":1709},"The Zoning overview dialog. A \"0 unclassified\" chip and a \"Show only unclassified\" switch are at the top. The table lists DMZ, Internal Network, and Database Zone with their declared trust zones, the role Undecided, and their channels.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fzoning-overview.webp",[368,1711,1712,1715,1716,1719],{},[18,1713,1714],{},"The diagram matches the plan."," Compare your canvas with the figure in ",[305,1717,32],{"href":1718},"#what-you-will-build",": seven components, three boundaries with their zone chips, six flows, and a gold outline on Customer Database.",[26,1721],{},[29,1723,1725],{"id":1724},"run-the-threat-report","Run the Threat Report",[14,1727,1728,1729,1732],{},"Analyses come from modules, not from the core platform, so the analysis types you can run depend on the modules your deployment has installed. ",[18,1730,1731],{},"A stock install has one analysis type, Threat Report."," It reads your model as it stands and summarises its residual risk: which exposures are open, which crown jewels can be reached, and where flows cross boundaries. It runs in seconds, asks you no questions, and never changes the model. Additional modules can add other analysis types.",[365,1734,1735,1745,1753,1766],{},[368,1736,1737,1738,1740,1741,1744],{},"Click ",[18,1739,405],{}," (5), the sparkle icon. A dialog titled ",[387,1742,1743],{},"Analysis: E-commerce Platform"," opens.",[368,1746,1737,1747,1750,1751,43],{},[18,1748,1749],{},"+ New Analysis",". A menu lists one entry for each available analysis type. Click ",[18,1752,20],{},[368,1754,1755,1756,1758,1759,1762,1763,43],{},"A row appears, named ",[387,1757,20],{},", with the status ",[18,1760,1761],{},"Ready",". Click ",[18,1764,1765],{},"Run",[368,1767,1768,1769,1772,1773,1776],{},"Within a few seconds, the status changes to ",[18,1770,1771],{},"Done"," and the button changes to ",[18,1774,1775],{},"View results",". Click it.",[14,1778,1779],{},"The animation below shows these steps.",[14,1781,1782],{},[47,1783],{"alt":1784,"src":1785},"Animation: in the Analysis dialog, New Analysis is clicked and Threat Report is chosen from the menu. A Threat Report row appears with status Ready. Run is clicked, the status turns to Done, and View results is clicked.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Frun-analysis.webp",[330,1787,1789],{"className":1788},[333,334],[14,1790,1791,1793,1794,1796,1797,1800,1801,1804,1805,1808,1809,1811],{},[18,1792,339],{}," A new analysis takes the analysis type's name. To tell runs apart later, rename the row: click its ",[18,1795,560],{}," cell and type over it, or use ",[18,1798,1799],{},"Rename"," in the row's ",[18,1802,1803],{},"⋮"," menu. ",[18,1806,1807],{},"Re-run",", also in the ",[18,1810,1803],{}," menu, replaces that row's result. To keep a result for comparison, create a new analysis instead.",[851,1813,1815],{"id":1814},"read-the-report","Read the report",[14,1817,1818,1819,1822,1823,1826,1827,1830],{},"The report opens on its ",[18,1820,1821],{},"Posture"," tab. The header reads ",[387,1824,1825],{},"Analysis Results: Threat Report - E-commerce Platform",", with the time of the snapshot and a green ",[18,1828,1829],{},"Fresh"," marker.",[14,1832,1833],{},[47,1834],{"alt":1835,"src":1836},"The Threat Report Posture tab for E-commerce Platform. It reads \"7 components · 4 boundaries\" and shows live exposures of 26 Critical, 84 High, and 16 Medium, a coverage summary, 126 open and 0 dispositioned findings, and 5 boundary crossings carrying data or posture. Recreate, Export JSON, and Export HTML buttons are at the top right.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fthreat-report-posture.webp",[14,1838,1839],{},"For this model, expect about seven components and four boundaries (the count includes the Default Boundary), a hundred or more open exposures spread across the Critical, High, and Medium bands, and five boundary crossings. Your numbers may differ, depending on the module versions on your deployment.",[55,1841,1844],{"className":1842,"tabIndex":59,"role":60,"ariaLabel":1843},[58],"Table: Read the report",[63,1845,1846,1856],{},[66,1847,1848],{},[69,1849,1850,1853],{},[72,1851,1852],{},"Tab",[72,1854,1855],{},"What it shows",[82,1857,1858,1867,1877,1887,1897],{},[69,1859,1860,1864],{},[87,1861,1862],{},[18,1863,1821],{},[87,1865,1866],{},"A roll-up of the model's residual risk. Click a number to jump to a filtered view.",[69,1868,1869,1874],{},[87,1870,1871],{},[18,1872,1873],{},"Coverage & Gaps",[87,1875,1876],{},"Your MITRE ATT&CK coverage and where the gaps are.",[69,1878,1879,1884],{},[87,1880,1881],{},[18,1882,1883],{},"Reachability",[87,1885,1886],{},"Which crown jewels can be reached over your flows, and what lies on the way.",[69,1888,1889,1894],{},[87,1890,1891],{},[18,1892,1893],{},"Boundary Crossings",[87,1895,1896],{},"Where flows cross boundaries, and how each crossing compares with your trust zones.",[69,1898,1899,1904],{},[87,1900,1901],{},[18,1902,1903],{},"Residual Risk",[87,1905,1906],{},"Every finding, grouped by element, which you can filter and act on.",[14,1908,1909,1910,1912,1913,416,1915,416,1917,423,1919,43],{},"Open ",[18,1911,1903],{},". Each row shows a finding's band, score, the MITRE techniques that exploit it, its attack vector, and its source, plus four actions: ",[18,1914,1652],{},[18,1916,1656],{},[18,1918,1660],{},[18,1920,1921],{},"Issue",[14,1923,1924],{},[47,1925],{"alt":1926,"src":1927},"The Residual Risk tab. Filter chips for bands, finding source, review state, and element type are at the top. Below, findings are grouped by element, each row showing a band, score, finding name, MITRE technique chips, vector, source, and the Affirm, Dispose, Customize, and Issue actions.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fthreat-report-residual-risk.webp",[14,1929,1930,1931,1933,1934,1762,1937,1940,1941,1312,1944,1947,1948,1952,1953,1957],{},"The report is a snapshot. If you change the model afterwards, the marker changes from ",[18,1932,1829],{}," to ",[18,1935,1936],{},"Stale",[18,1938,1939],{},"Recreate"," to bring the report up to date. ",[18,1942,1943],{},"Export JSON",[18,1945,1946],{},"Export HTML"," save the report to share. ",[305,1949,1951],{"href":1950},"\u002Fthreat-report\u002Fgetting-started","Getting Started with the Threat Report"," covers all of this in depth, and the ",[305,1954,1956],{"href":1955},"\u002Fthreat-report","Threat Report guide"," covers every tab.",[26,1959],{},[29,1961,1963],{"id":1962},"raise-an-issue-from-a-finding","Raise an issue from a finding",[14,1965,1966,1967,1970],{},"An ",[18,1968,1969],{},"issue"," is a unit of tracked work: it gives a finding a place on a board, a severity, and a status that outlive the next report.",[365,1972,1973,1985,2001,2020,2033],{},[368,1974,1070,1975,1977,1978,1980,1981,1984],{},[18,1976,1903],{}," tab, find a finding you want to act on. Click its ",[18,1979,1921],{}," action (the flag icon). A dialog titled ",[18,1982,1983],{},"Raise an issue from this finding"," opens, with the finding's name under the title.",[368,1986,1987,1988,1991,1992,43,1995,1997],{},"Under ",[387,1989,1990],{},"Or create an issue:",", click ",[18,1993,1994],{},"Vulnerability",[516,1996],{},[47,1998],{"alt":1999,"src":2000},"The \"Raise an issue from this finding\" dialog. The finding's name is under the title, followed by an \"Add to Issue board\" button, then \"Or create an issue:\" with six issue classes: Architecture anti-pattern, Configuration Error, Missing Security Control, Other, Threat Vector, and Vulnerability.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fraise-issue-dialog.webp",[368,2002,2003,2004,2013,2014,2016],{},"The issue is created straight away and its card opens. It is named after the finding and the element, in the form ",[387,2005,2006,2009,2010],{},[147,2007,2008],{},"\u003Cfinding>"," Issue on ",[147,2011,2012],{},"\u003Celement>",", and its description is copied from the finding. Rename it to something you'll recognise later.",[516,2015],{},[47,2017],{"alt":2018,"src":2019},"The issue card for a new Vulnerability issue named \"JWT signature bypass (alg=none \u002F alg-confusion) Issue on API requests\", with its description copied from the finding. The General, Attributes, Associated Elements, and Comments tabs are along the top, and Close Issue and delete buttons are at the bottom.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fissue-card.webp",[368,2021,901,2022,2025,2026,2029,2030,43],{},[18,2023,2024],{},"Attributes"," tab and fill in the fields the issue's class defines. Each class defines its own fields, and every class that ships with the platform has a ",[18,2027,2028],{},"severity"," and a ",[18,2031,2032],{},"status",[368,2034,481,2035,2038,2039,2042],{},[18,2036,2037],{},"Issues",". Your new issue is listed under the default ",[18,2040,2041],{},"Open"," filter.",[14,2044,2045],{},[47,2046],{"alt":2047,"src":2048},"The Issues page listing the new issue under the Open filter, with a query search bar and filter chips for Class, Issue status, Status, Severity, and Likelihood.","\u002Fguides\u002Fplatform\u002Fimages\u002Ffirst-model\u002Fissues-page.webp",[14,2050,2051,2052,43],{},"The six issue classes come from the platform's general module. A deployment with more modules installed may offer more. See ",[305,2053,2055],{"href":2054},"\u002Fplatform\u002Fissue-management-guide#where-issue-classes-come-from","Where issue classes come from",[330,2057,2059],{"className":2058},[333,461],[14,2060,2061,2063,2064,2067,2068,2071,2072,43],{},[18,2062,738],{}," The issue links to the finding, the element it was raised on, and the model, but ",[18,2065,2066],{},"not"," to the analysis that showed the finding. To record which report it came from, add the analysis yourself on the issue's ",[18,2069,2070],{},"Associated Elements"," tab. See ",[305,2073,2075],{"href":2074},"\u002Fplatform\u002Fissue-management-guide#what-actually-gets-associated","What actually gets associated",[330,2077,2079],{"className":2078},[333,461],[14,2080,2081,2083,2084,2087,2088,2091,2092,2094,2095,2097,2098,416,2101,423,2104,2107,2108,43],{},[18,2082,466],{}," Two different things are called \"status\". The ",[18,2085,2086],{},"Close Issue"," \u002F ",[18,2089,2090],{},"Open Issue"," button sets the platform's open or closed flag. The ",[18,2093,2032],{}," attribute on the ",[18,2096,2024],{}," tab moves through the values the class defines, such as ",[147,2099,2100],{},"confirmed",[147,2102,2103],{},"mitigating",[147,2105,2106],{},"verified",". Changing one doesn't change the other. See ",[305,2109,2111],{"href":2110},"\u002Fplatform\u002Fissue-management-guide#status-two-different-things","Status: two different things",[851,2113,2115],{"id":2114},"add-another-finding-to-the-same-issue","Add another finding to the same issue",[14,2117,2118],{},"Related findings often belong on one issue. To add a finding to an issue that already exists:",[365,2120,2121,2133,2136,2142],{},[368,2122,867,2123,2125,2126,2129,2130,2132],{},[18,2124,1983],{}," dialog, click ",[18,2127,2128],{},"Add to Issue board",". The finding is copied to the platform's clipboard, and the ",[18,2131,2037],{}," page opens.",[368,2134,2135],{},"Click the target issue's row to expand its card.",[368,2137,1737,2138,2141],{},[18,2139,2140],{},"Add from clipboard",". The finding is linked to the issue, and a comment records what was added.",[368,2143,1737,2144,2150],{},[18,2145,2146,2147],{},"Return to ",[147,2148,2149],{},"\u003Cpage>"," to go back to where you were.",[330,2152,2155],{"className":2153},[333,2154],"callout-warning",[14,2156,2157,2160,2161,2164,2165,43],{},[18,2158,2159],{},"Warning:"," The clipboard holds ",[18,2162,2163],{},"one"," item, and it expires after 30 minutes. Copying a second finding replaces the first. To collect several findings on one issue, repeat the whole loop for each one: copy, add, return. See ",[305,2166,2168],{"href":2167},"\u002Fplatform\u002Fissue-management-guide#adding-elements-to-an-existing-issue","Adding elements to an existing issue",[14,2170,2171,2172,43],{},"Issues live on the platform. Dethernety ships with no tracker integration, so nothing you do here reaches Jira, GitHub, or any other tracker. See ",[305,2173,2175],{"href":2174},"\u002Fplatform\u002Fissue-management-guide#external-system-integration","External system integration",[26,2177],{},[29,2179,686],{"id":2180},"export-and-import-your-model",[14,2182,2183],{},"You can save a model as a portable ZIP archive, for a backup, to share with a colleague, or to keep under version control beside your code.",[851,2185,2187],{"id":2186},"export-a-model","Export a model",[365,2189,2190,2196,2204],{},[368,2191,2192,2193,2195],{},"Open the model dialog: click ",[18,2194,378],{}," (2) in the editor, or click the settings icon on the model's tile in the Browser.",[368,2197,1737,2198,2200,2201,43],{},[18,2199,678],{}," (3, the download icon). The dialog saves the model and opens ",[18,2202,2203],{},"Export Model",[368,2205,2206,2207,43],{},"Click the download button. Your browser saves ",[147,2208,2209],{},"\u003Cmodel name>-export.zip",[14,2211,2212],{},"The archive holds the model as a set of JSON files:",[140,2214,2217],{"className":2215,"code":2216,"language":1101,"meta":145},[1099],"\u003Cmodel name>-export.zip\n├── manifest.json        Model metadata and module references\n├── structure.json       Boundary and component hierarchy\n├── dataflows.json       Data flow connections\n├── data-items.json      Data classification items\n└── attributes\u002F          Per-element configuration\n    ├── boundaries\u002F\n    │   └── \u003Cid>.json\n    ├── components\u002F\n    │   └── \u003Cid>.json\n    ├── dataFlows\u002F\n    │   └── \u003Cid>.json\n    └── dataItems\u002F\n        └── \u003Cid>.json\n",[147,2218,2216],{"__ignoreMap":145},[14,2220,2221,2222,2226,2227,2231],{},"This is the same split-file format the ",[305,2223,2225],{"href":2224},"\u002Fdethereal","Dethereal Claude Code plugin"," uses, so you can export a model, enrich it with the plugin (see ",[305,2228,2230],{"href":2229},"\u002Fdethereal\u002Fdiscovery-and-enrichment","Discovery and enrichment","), and import it again.",[851,2233,2235],{"id":2234},"import-a-model","Import a model",[365,2237,2238,2250,2260,2277,2283],{},[368,2239,2240,2241,2243,2244,2246,2247,43],{},"In the Browser, open the folder to import into. Click the ",[18,2242,502],{}," button (",[18,2245,506],{},") and choose ",[18,2248,2249],{},"Import model",[368,2251,1737,2252,2255,2256,2259],{},[18,2253,2254],{},"Select File"," and choose a ",[147,2257,2258],{},".zip"," archive.",[368,2261,2262,2263,2265,2266,1633,2271,2276],{},"Check the ",[18,2264,372],{}," field. It is filled in with the model's name from the archive. If the folder already holds a model with that name, the field suggests the next free one, such as ",[387,2267,2268],{},[147,2269,2270],{},"\u003Cname> (2)",[387,2272,2273],{},[147,2274,2275],{},"\u003Cname> (3)",", and a hint under the field says why. Only models in the same folder count. If the folder's models can't be listed, the field keeps the archive's name, and the hint says the name couldn't be checked. You can type a different name, but the field can't be empty.",[368,2278,608,2279,2282],{},[18,2280,2281],{},"Import"," button at the bottom of the dialog. A progress bar steps through the eight stages of the import.",[368,2284,2285,2286,43],{},"When it finishes, a success message appears, the model shows up in the folder, and the button changes to ",[18,2287,2288],{},"Close",[14,2290,2291],{},"The archive itself is never changed. If the import hits problems it can work around, warnings appear beside the success message. If it hits a critical error, the error is shown in red and nothing is imported.",[26,2293],{},[29,2295,2297],{"id":2296},"what-you-learned","What you learned",[14,2299,2300],{},"You built a complete threat model and worked it through to a tracked issue. Along the way, you:",[2302,2303,2304,2307,2316,2328,2338,2343,2349,2355],"ul",{},[368,2305,2306],{},"created a model and recorded its compliance driver",[368,2308,2309,2310,2313,2314],{},"drew ",[18,2311,2312],{},"boundaries",", nested one inside another, and placed each one in a ",[18,2315,759],{},[368,2317,2318,2319,2322,2323,2325,2326],{},"added ",[18,2320,2321],{},"components",", gave every element a ",[18,2324,755],{},", and marked a ",[18,2327,1357],{},[368,2329,2330,2331,2334,2335,2337],{},"connected components with ",[18,2332,2333],{},"data flows",", and saw the ",[18,2336,1603],{}," the classes derived",[368,2339,2340,2341],{},"checked the model with the ",[18,2342,399],{},[368,2344,2345,2346,2348],{},"ran a ",[18,2347,20],{}," and read its posture and residual risk",[368,2350,2351,2352,2354],{},"raised an ",[18,2353,1969],{}," from a finding",[368,2356,2357,2358,2361],{},"learned how to ",[18,2359,2360],{},"export and import"," a model as a ZIP archive",[29,2363,2365],{"id":2364},"next-steps","Next steps",[2302,2367,2368,2377,2384,2396,2405,2412,2421,2430],{},[368,2369,2370,2374,2375,532],{},[18,2371,2372],{},[305,2373,1023],{"href":1022},": declare which boundaries may talk to each other with approved channels, then see the result on the report's ",[18,2376,1893],{},[368,2378,2379,2383],{},[18,2380,2381],{},[305,2382,1665],{"href":1664},": affirm the risks that are real and dispose of the ones that aren't.",[368,2385,2386,2392,2393,2395],{},[18,2387,2388],{},[305,2389,2391],{"href":2390},"\u002Fthreat-report\u002Fworking-with-findings","Working with Findings",": triage the ",[18,2394,1903],{}," ledger in the Threat Report.",[368,2397,2398,2404],{},[18,2399,2400],{},[305,2401,2403],{"href":2402},"\u002Fplatform\u002Fworking-with-security-controls","Working with Security Controls",": add the controls that counter your exposures.",[368,2406,2407,2411],{},[18,2408,2409],{},[305,2410,1407],{"href":1406},": fill in class attributes and classify the data your components handle.",[368,2413,2414,2420],{},[18,2415,2416],{},[305,2417,2419],{"href":2418},"\u002Fplatform\u002Fsecurity-analysis-workflow","Security Analysis Workflow",": how analyses run, and what other analysis types can offer.",[368,2422,2423,2429],{},[18,2424,2425],{},[305,2426,2428],{"href":2427},"\u002Fplatform\u002Fissue-management-guide","Issue Management Guide",": filter, merge, and track issues with your team.",[368,2431,2432,2437],{},[18,2433,2434],{},[305,2435,2436],{"href":2224},"Dethereal plugin",": build and enrich models in conversation with Claude Code.",[2439,2440,2441],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":145,"searchDepth":165,"depth":165,"links":2443},[2444,2445,2446,2447,2448,2452,2455,2458,2459,2462,2465,2469,2470],{"id":31,"depth":159,"text":32},{"id":274,"depth":159,"text":275},{"id":345,"depth":159,"text":346},{"id":476,"depth":159,"text":357},{"id":748,"depth":159,"text":749,"children":2449},[2450,2451],{"id":853,"depth":165,"text":854},{"id":1027,"depth":165,"text":1028},{"id":1116,"depth":159,"text":1117,"children":2453},[2454],{"id":1350,"depth":165,"text":1351},{"id":1412,"depth":159,"text":1413,"children":2456},[2457],{"id":1596,"depth":165,"text":1597},{"id":1671,"depth":159,"text":1672},{"id":1724,"depth":159,"text":1725,"children":2460},[2461],{"id":1814,"depth":165,"text":1815},{"id":1962,"depth":159,"text":1963,"children":2463},[2464],{"id":2114,"depth":165,"text":2115},{"id":2180,"depth":159,"text":686,"children":2466},[2467,2468],{"id":2186,"depth":165,"text":2187},{"id":2234,"depth":165,"text":2235},{"id":2296,"depth":159,"text":2297},{"id":2364,"depth":159,"text":2365},"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.","md",{"category":2474,"position":177,"tags":2475},"modeling",[2476,2477,2474,2312,2478,2321,2479,2480,2481],"getting-started","tutorial","trust-zones","data-flows","threat-report","issues",true,"\u002Fplatform\u002Fbuilding-your-first-model",{"title":5,"description":2471},"01.platform\u002F02.building-your-first-model","RjpKtIegeshRnZgmwli2Ixp5gOmQTu7oNsVOkY0TPVA",[2488,2527,2560,2613,2641,2685,2700,2770],{"title":2489,"description":2490,"path":2491,"stem":2492,"children":2493,"page":-1},"Platform","Modelling, analysis, findings and controls in the Dethernety platform.","\u002Fplatform","01.platform",[2494,2498,2503,2504,2507,2510,2513,2516,2519,2524],{"title":2495,"path":2491,"stem":2496,"description":2497},"Dethernety User Documentation","01.platform\u002Findex","User guide for the Dethernety threat modeling platform",{"title":2499,"path":2500,"stem":2501,"description":2502},"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":5,"path":2483,"stem":2485,"description":2471},{"title":2419,"path":2418,"stem":2505,"description":2506},"01.platform\u002F03.security-analysis-workflow","How to run security analysis and interpret results to improve your threat models.",{"title":1665,"path":1664,"stem":2508,"description":2509},"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":2403,"path":2402,"stem":2511,"description":2512},"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":2428,"path":2427,"stem":2514,"description":2515},"01.platform\u002F06.issue-management-guide","Issue tracking, filtering, and management in Dethernety.",{"title":1023,"path":1022,"stem":2517,"description":2518},"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":2520,"path":2521,"stem":2522,"description":2523},"Understanding Modules","\u002Fplatform\u002Funderstanding-modules","01.platform\u002F08.understanding-modules","How Dethernety's module system extends your threat modeling capabilities.",{"title":1407,"path":1406,"stem":2525,"description":2526},"01.platform\u002F09.component-configuration-guide","Detailed guide on configuring different types of components and their security implications.",{"title":2528,"description":2529,"path":2530,"stem":2531,"children":2532,"page":-1},"BYODt cloud","Deploying the platform yourself and connecting it to the BYODt cloud.","\u002Fbyodt-cloud","02.byodt-cloud",[2533,2537,2540,2545,2550,2555],{"title":2534,"path":2530,"stem":2535,"description":2536},"BYODt Deployment","02.byodt-cloud\u002Findex","Run Dethernety on your own machine: install, configure, operate, and recover",{"title":308,"path":307,"stem":2538,"description":2539},"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":2541,"path":2542,"stem":2543,"description":2544},"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":2546,"path":2547,"stem":2548,"description":2549},"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":2551,"path":2552,"stem":2553,"description":2554},"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":2556,"path":2557,"stem":2558,"description":2559},"Troubleshooting the BYODt Deployment","\u002Fbyodt-cloud\u002Ftroubleshooting","02.byodt-cloud\u002F05.troubleshooting","Symptom, cause, and fix for the failures this deployment reports",{"title":2561,"description":2562,"path":2224,"stem":2563,"children":2564,"page":-1},"Dethereal","The Claude Code plugin: build a threat model in conversation and publish it to the platform.","03.dethereal",[2565,2569,2574,2579,2584,2589,2593,2598,2603,2608],{"title":2566,"path":2224,"stem":2567,"description":2568},"Dethereal — Claude Code Plugin for Threat Modeling","03.dethereal\u002Findex","Comprehensive documentation for the Dethereal threat modeling plugin",{"title":2570,"path":2571,"stem":2572,"description":2573},"Getting Started with Dethereal","\u002Fdethereal\u002Fgetting-started","03.dethereal\u002F01.getting-started","Install the plugin, authenticate, and create your first threat model",{"title":2575,"path":2576,"stem":2577,"description":2578},"The 11-Step Guided Workflow","\u002Fdethereal\u002Fguided-workflow","03.dethereal\u002F02.guided-workflow","Complete walkthrough of the \u002Fdethereal:threat-model guided process",{"title":2580,"path":2581,"stem":2582,"description":2583},"Command Reference","\u002Fdethereal\u002Fcommand-reference","03.dethereal\u002F03.command-reference","Complete reference for all 14 Dethereal slash commands",{"title":2585,"path":2586,"stem":2587,"description":2588},"Threat Model Concepts","\u002Fdethereal\u002Fmodel-concepts","03.dethereal\u002F04.model-concepts","Components, boundaries, data flows, classes, attributes, and quality scoring",{"title":2590,"path":2229,"stem":2591,"description":2592},"Discovery and Enrichment","03.dethereal\u002F05.discovery-and-enrichment","Infrastructure scanning, security attributes, MITRE ATT&CK, credentials, and compliance",{"title":2594,"path":2595,"stem":2596,"description":2597},"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":2599,"path":2600,"stem":2601,"description":2602},"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":2604,"path":2605,"stem":2606,"description":2607},"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":2609,"path":2610,"stem":2611,"description":2612},"Dethereal Glossary","\u002Fdethereal\u002Fglossary","03.dethereal\u002F09.glossary","Definitions for Dethereal-specific terminology",{"title":20,"description":2614,"path":1955,"stem":2615,"children":2616,"page":-1},"The residual-risk report over a threat model: reading it, filtering it and exporting it.","04.threat-report",[2617,2620,2623,2628,2633,2638],{"title":20,"path":1955,"stem":2618,"description":2619},"04.threat-report\u002Findex","Read, filter, drill into, and export a residual-risk report over a threat model",{"title":1951,"path":1950,"stem":2621,"description":2622},"04.threat-report\u002F01.getting-started","Generate, open, refresh, and export a threat report over a model",{"title":2624,"path":2625,"stem":2626,"description":2627},"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":2629,"path":2630,"stem":2631,"description":2632},"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":2634,"path":2635,"stem":2636,"description":2637},"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":2391,"path":2390,"stem":2639,"description":2640},"04.threat-report\u002F05.working-with-findings","The Residual Risk ledger, triaging findings, filtering, and the per-element Component Profile",{"title":2642,"description":2643,"path":2644,"stem":2645,"children":2646,"page":-1},"Risk assessment","The risk assessment module: the register, the reports and the method behind them.","\u002Frisk-assessment","05.risk-assessment",[2647,2651,2656,2661,2666,2671,2675,2680],{"title":2648,"path":2644,"stem":2649,"description":2650},"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":2652,"path":2653,"stem":2654,"description":2655},"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":2657,"path":2658,"stem":2659,"description":2660},"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":2662,"path":2663,"stem":2664,"description":2665},"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":2667,"path":2668,"stem":2669,"description":2670},"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":2624,"path":2672,"stem":2673,"description":2674},"\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":2676,"path":2677,"stem":2678,"description":2679},"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":2681,"path":2682,"stem":2683,"description":2684},"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":2686,"description":2687,"path":2688,"stem":2689,"children":2690,"page":-1},"Threat Patterns","The Threat Patterns module and its modelling checklist.","\u002Fthreat-patterns","06.threat-patterns",[2691,2695],{"title":2692,"path":2688,"stem":2693,"description":2694},"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":2696,"path":2697,"stem":2698,"description":2699},"Modelling Checklist","\u002Fthreat-patterns\u002Fmodelling-checklist","06.threat-patterns\u002F01.modelling-checklist","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.",{"title":2701,"description":2702,"path":2703,"stem":2704,"children":2705,"page":-1},"Agentic modelling","A hands-on training: model one agentic system step by step, with Threat Patterns after each step.","\u002Fagentic-modelling","07.agentic-modelling",[2706,2710,2715,2720,2725,2730,2735,2740,2745,2750,2755,2760,2765],{"title":2707,"path":2703,"stem":2708,"description":2709},"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":2711,"path":2712,"stem":2713,"description":2714},"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":2716,"path":2717,"stem":2718,"description":2719},"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":2721,"path":2722,"stem":2723,"description":2724},"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":2726,"path":2727,"stem":2728,"description":2729},"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":2731,"path":2732,"stem":2733,"description":2734},"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":2736,"path":2737,"stem":2738,"description":2739},"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":2741,"path":2742,"stem":2743,"description":2744},"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":2746,"path":2747,"stem":2748,"description":2749},"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":2751,"path":2752,"stem":2753,"description":2754},"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":2756,"path":2757,"stem":2758,"description":2759},"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":2761,"path":2762,"stem":2763,"description":2764},"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":2766,"path":2767,"stem":2768,"description":2769},"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":2771,"description":2772,"path":2773,"stem":2774,"children":2775,"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",[2776,2780,2785],{"title":2777,"path":2773,"stem":2778,"description":2779},"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":2781,"path":2782,"stem":2783,"description":2784},"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":2786,"path":2787,"stem":2788,"description":2789},"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",1793748184212]