<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Design on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/design/</link>
        <description>Recent content in Design on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 31 Mar 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/design/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Threat modeling nel ciclo di sviluppo</title>
        <link>https://www.matteobianchi.eu/p/threat-modeling-nel-ciclo/</link>
        <pubDate>Tue, 31 Mar 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/threat-modeling-nel-ciclo/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/threat-modeling-nel-ciclo/cover.png" alt="Featured image of post Threat modeling nel ciclo di sviluppo" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Il &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/secure-sdlc/&#34; &gt;Secure SDLC&lt;/a&gt; colloca il threat modeling nel design, la fase
più economica in assoluto: qui un difetto costa una gomma su una lavagna. Lo stesso ragionamento
l&amp;rsquo;abbiamo già applicato alle reti nel post sul &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/threat-modeling-networks/&#34; &gt;threat modeling delle reti&lt;/a&gt;;
qui lo portiamo dentro il ciclo di sviluppo del software, dove diventa un&amp;rsquo;abitudine ricorrente e non
un documento scritto una volta e mai più aperto.&lt;/p&gt;
&lt;h2 id=&#34;i-quattro-passi&#34;&gt;I quattro passi
&lt;/h2&gt;&lt;p&gt;Il threat modeling risponde a quattro domande, nell&amp;rsquo;ordine:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    Q1[&amp;#34;1. Cosa stiamo&amp;lt;br/&amp;gt;costruendo?&amp;#34;] --&amp;gt; Q2[&amp;#34;2. Cosa può&amp;lt;br/&amp;gt;andare storto?&amp;#34;]
    Q2 --&amp;gt; Q3[&amp;#34;3. Cosa facciamo&amp;lt;br/&amp;gt;al riguardo?&amp;#34;]
    Q3 --&amp;gt; Q4[&amp;#34;4. Abbiamo fatto&amp;lt;br/&amp;gt;un buon lavoro?&amp;#34;]
    Q4 -.rivaluta a ogni&amp;lt;br/&amp;gt;cambio di design.-&amp;gt; Q1
    style Q2 fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cosa costruiamo&lt;/strong&gt;: un diagramma di flusso dei dati (DFD) con i confini di fiducia — dove i dati
attraversano una frontiera tra componenti con privilegi diversi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosa può andare storto&lt;/strong&gt;: si enumerano le minacce, tipicamente con STRIDE.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosa facciamo&lt;/strong&gt;: per ogni minaccia una mitigazione, un rischio accettato o un trasferimento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Com&amp;rsquo;è andata&lt;/strong&gt;: si verifica che le mitigazioni esistano davvero nel codice e nei test.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;stride-una-lente-per-le-minacce&#34;&gt;STRIDE: una lente per le minacce
&lt;/h2&gt;&lt;p&gt;STRIDE è una checklist mnemonica per non dimenticare categorie di minaccia:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S  Spoofing        → identità falsificata        → autenticazione
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;T  Tampering       → dati/codice alterati        → integrità, firme
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;R  Repudiation     → &amp;#34;non sono stato io&amp;#34;         → log a prova di manomissione
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I  Info disclosure → fuga di dati                → cifratura, controllo accessi
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;D  Denial of svc   → risorsa resa indisponibile  → rate limit, quote
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;E  Elevation       → privilegi oltre il dovuto   → least privilege, validazione
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si scorre ogni elemento del DFD e, per ciascuno, si chiede: può essere vittima di spoofing? di
tampering? e così via. La forza non è la completezza teorica, ma il fatto che &lt;em&gt;struttura&lt;/em&gt; una
conversazione che altrimenti dipende da chi è il più paranoico nella stanza.&lt;/p&gt;
&lt;h2 id=&#34;renderlo-leggero-e-continuo&#34;&gt;Renderlo leggero e continuo
&lt;/h2&gt;&lt;p&gt;Il threat modeling fallisce quando diventa un rito pesante: un documento di 40 pagine, redatto una
volta da un consulente, ignorato da chi scrive il codice. Le pratiche che funzionano in DevSecOps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Incrementale&lt;/strong&gt;: si modella la &lt;em&gt;modifica&lt;/em&gt;, non tutto il sistema, a ogni design significativo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Di squadra&lt;/strong&gt;: chi costruisce partecipa; il modello vive nelle loro teste, non in un PDF.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracciato come codice&lt;/strong&gt;: le minacce diventano issue e test, così &amp;ldquo;l&amp;rsquo;abbiamo mitigata&amp;rdquo; è
verificabile e non un&amp;rsquo;affermazione.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;dallabuse-case-al-test&#34;&gt;Dall&amp;rsquo;abuse case al test
&lt;/h2&gt;&lt;p&gt;Ogni minaccia identificata dovrebbe generare qualcosa di eseguibile: un &lt;em&gt;abuse case&lt;/em&gt; (&amp;ldquo;un utente non
autenticato tenta di leggere l&amp;rsquo;ordine di un altro&amp;rdquo;) che diventa un test di sicurezza automatico. Così
il modello non invecchia in silenzio: se qualcuno reintroduce la falla, il test fallisce. È il ponte
tra il design e i controlli di build dei prossimi capitoli.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; con pipeline che rilasciano dieci volte al giorno, come si fa threat modeling senza bloccare ogni deploy?&lt;/summary&gt;
&lt;p&gt;Non si modella ogni deploy: si modella ogni &lt;em&gt;decisione di design&lt;/em&gt;, che è molto più rara di un
deploy. La maggior parte dei rilasci sono cambi incrementali dentro un&#39;architettura già modellata — una
nuova colonna, un fix, un endpoint in più su un pattern esistente — e non spostano confini di fiducia:
non richiedono nulla. Il trigger non è il tempo né il commit, è il &lt;em&gt;cambio strutturale&lt;/em&gt;: un nuovo
componente, un nuovo flusso di dati verso l&#39;esterno, una nuova integrazione di terze parti, un cambio nel
modello di autenticazione. Quando succede, un threat model leggero di trenta minuti sulla sola modifica
basta, e si fa in fase di design, giorni prima del deploy, non nel percorso critico della pipeline. Alcuni
team lo agganciano alla pull request con una checklist automatica (&#34;questo cambio tocca autenticazione,
dati personali, confini di rete?&#34;): se tutte le risposte sono no, non serve una sessione; se una è sì,
si convoca. Così il controllo pesa solo quando il rischio c&#39;è davvero, e i dieci deploy al giorno di
routine non vengono toccati.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Il threat modeling è il controllo più economico perché agisce prima della prima riga di codice:
quattro domande, la lente STRIDE, e minacce trasformate in test che non invecchiano. Ma il design
sicuro vale poco se poi il codice lascia una chiave API in chiaro nel repository. Il primo difetto
concreto da eliminare nel flusso di sviluppo è proprio questo: la gestione dei segreti, prossimo
capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
