<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>DNS Security on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/dns-security/</link>
        <description>Recent content in DNS Security on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sat, 19 Sep 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/dns-security/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>DNS tunneling: esfiltrare dati dentro le query, e come accorgersene</title>
        <link>https://www.matteobianchi.eu/p/dns-tunneling-detection/</link>
        <pubDate>Sat, 19 Sep 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/dns-tunneling-detection/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/dns-tunneling-detection/cover.png" alt="Featured image of post DNS tunneling: esfiltrare dati dentro le query, e come accorgersene" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Nel &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/dns-security-dnssec-doh/&#34; &gt;capitolo sulla sicurezza DNS&lt;/a&gt; abbiamo visto come
proteggere l&amp;rsquo;integrità e la riservatezza delle query. Ma il DNS ha un&amp;rsquo;altra proprietà sfruttabile:
&lt;strong&gt;passa quasi sempre&lt;/strong&gt;. Anche nelle reti dove ogni altra porta è filtrata, la 53 resta aperta
perché senza risoluzione dei nomi nulla funziona. Gli attaccanti ne fanno un &lt;strong&gt;canale nascosto&lt;/strong&gt;:
codificano dati dentro i nomi di dominio delle query e li fanno uscire sotto forma di traffico DNS
apparentemente normale. È uno dei modi più comuni per il comando-e-controllo (C2) e per
l&amp;rsquo;esfiltrazione di dati da una rete altrimenti chiusa.&lt;/p&gt;
&lt;h2 id=&#34;come-si-nascondono-i-dati-in-una-query&#34;&gt;Come si nascondono i dati in una query
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;idea è semplice: un nome DNS può contenere testo arbitrario nei suoi sottodomini. L&amp;rsquo;attaccante
controlla il name server autoritativo di un dominio, per esempio &lt;code&gt;tunnel.evil.com&lt;/code&gt;, e il malware
sulla macchina compromessa invia i dati come sottodomini:&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;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&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&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ZGF0YS1ydWJhdG8.tunnel.evil.com      &amp;lt;- dati codificati in base32/64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c2Vzc2lvbi1pZC00Mg.tunnel.evil.com
&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;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    M[&amp;#34;Host compromesso&amp;lt;br/&amp;gt;(malware)&amp;#34;] --&amp;gt;|query:&amp;lt;br/&amp;gt;DATI.tunnel.evil.com| R[Resolver interno]
    R --&amp;gt;|risoluzione ricorsiva| NS[&amp;#34;Name server autoritativo&amp;lt;br/&amp;gt;(attaccante)&amp;#34;]
    NS --&amp;gt;|risposta: dati nel record TXT| R
    R --&amp;gt; M
    style NS fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;La query risale la catena DNS fino al name server dell&amp;rsquo;attaccante, che &lt;strong&gt;decodifica&lt;/strong&gt; i dati dal
nome e risponde — spesso in un record &lt;code&gt;TXT&lt;/code&gt; — rimandando indietro comandi. Si crea un canale
bidirezionale completo, costruito interamente con DNS legittimo. Nessuna connessione diretta,
nessuna porta sospetta: solo query.&lt;/p&gt;
&lt;h2 id=&#34;i-segnali-che-lo-tradiscono&#34;&gt;I segnali che lo tradiscono
&lt;/h2&gt;&lt;p&gt;Il tunneling è efficace perché mimetizza, ma lascia tracce statistiche. Il DNS normale ha un
profilo preciso; il tunnel lo rompe:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Volume&lt;/strong&gt;: un host che genera migliaia di query verso lo stesso dominio è anomalo. Il DNS di un
utente reale è sporadico e vario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lunghezza dei nomi&lt;/strong&gt;: i sottodomini del tunnel sono lunghi (devono trasportare dati); i nomi
reali sono corti.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entropia&lt;/strong&gt;: i dati codificati sembrano casuali, mentre i nomi legittimi sono pronunciabili.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipo di record&lt;/strong&gt;: un uso massiccio di &lt;code&gt;TXT&lt;/code&gt; o &lt;code&gt;NULL&lt;/code&gt; verso un singolo dominio è sospetto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;entropia è il segnale più robusto. Per un nome con frequenze dei caratteri $p_i$, l&amp;rsquo;entropia di
Shannon è:&lt;/p&gt;
&lt;p&gt;$$
H = -\sum_{i} p_i \log_2 p_i
$$&lt;/p&gt;
&lt;p&gt;Un sottodominio come &lt;code&gt;www&lt;/code&gt; o &lt;code&gt;mail&lt;/code&gt; ha entropia bassa; una stringa base64 casuale si avvicina al
massimo teorico ($\approx 6$ bit/carattere per base64). Una soglia sull&amp;rsquo;entropia media dei
sottodomini per dominio separa quasi sempre il traffico reale dal tunnel.&lt;/p&gt;
&lt;h2 id=&#34;rilevare-dalla-statistica-alla-regola&#34;&gt;Rilevare: dalla statistica alla regola
&lt;/h2&gt;&lt;p&gt;In pratica si combinano i segnali in logica di detection, idealmente dentro il
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/siem-log-correlation/&#34; &gt;SIEM&lt;/a&gt; che già raccoglie i log DNS:&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;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&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&#34;&gt;&lt;span class=&#34;cl&#34;&gt;regola: possibile DNS tunneling
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  QUANDO  un host interroga lo stesso dominio di 2° livello
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          piu di 100 volte in 10 minuti
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          E entropia media dei sottodomini &amp;gt; 3.5 bit/char
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          E lunghezza media dei sottodomini &amp;gt; 40 caratteri
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ALLORA  allarme, tecnica ATT&amp;amp;CK T1071.004
&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;Nessun singolo criterio basta — esistono servizi legittimi (antivirus, CDN) che generano molte
query. È la &lt;strong&gt;combinazione&lt;/strong&gt; di volume, lunghezza ed entropia verso un unico dominio a distinguere
il tunnel.&lt;/p&gt;
&lt;h2 id=&#34;difese-dirette&#34;&gt;Difese dirette
&lt;/h2&gt;&lt;p&gt;Oltre al rilevamento, alcune misure riducono la superficie:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Forzare un resolver interno&lt;/strong&gt;: bloccare la porta 53 in uscita verso internet e obbligare tutti i
client a usare il resolver aziendale (che logga e ispeziona). Senza questo, il tunneling via
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/dns-security-dnssec-doh/&#34; &gt;DoH&lt;/a&gt; diventa ancora più difficile da vedere,
perché il traffico è cifrato in HTTPS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RPZ (Response Policy Zone)&lt;/strong&gt;: bloccare la risoluzione verso domini noti per tunneling o appena
registrati.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Threat intelligence&lt;/strong&gt;: liste di domini C2 noti, integrate nel resolver.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;lab&#34;&gt;Lab
&lt;/h2&gt;&lt;p&gt;In un ambiente di test isolato (mai verso internet reale):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Avviate uno strumento di tunneling DNS da laboratorio (es. &lt;code&gt;iodine&lt;/code&gt; o &lt;code&gt;dnscat2&lt;/code&gt;) tra due nodi
containerlab, con un dominio di test e un name server controllato.&lt;/li&gt;
&lt;li&gt;Catturate il traffico DNS con &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/packet-analysis-wireshark/&#34; &gt;Wireshark&lt;/a&gt; e
osservate i sottodomini lunghi e ad alta entropia.&lt;/li&gt;
&lt;li&gt;Scrivete uno script che calcoli l&amp;rsquo;entropia di Shannon dei sottodomini dai log del resolver.&lt;/li&gt;
&lt;li&gt;Tarate una soglia che distingua il tunnel dal traffico DNS normale catturato in parallelo.&lt;/li&gt;
&lt;/ol&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se il DNS tunneling è così lento e rumoroso statisticamente, perché gli attaccanti lo usano ancora?&lt;/summary&gt;
&lt;p&gt;Per un motivo che batte ogni svantaggio: funziona dove nient&#39;altro funziona. In una rete segmentata
e filtrata — pensate a un ambiente industriale o a una DMZ ostile — può darsi che l&#39;unica cosa
autorizzata a uscire sia la risoluzione dei nomi, perché bloccarla romperebbe tutto. Lì un canale C2
su HTTP o su una porta custom è semplicemente impossibile, mentre il DNS esce. La lentezza non è un
problema per il C2: comandi e piccole quantità di dati rubati (credenziali, chiavi) stanno in pochi
kilobyte. È rumoroso &lt;em&gt;solo se qualcuno guarda&lt;/em&gt;: in una rete che non ispeziona né correla i log
DNS, il tunnel è invisibile proprio perché somiglia a traffico legittimo. È il classico caso in cui il
rilevamento conta più della prevenzione: non potete chiudere il DNS, ma potete accorgervi di come
viene abusato.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Il DNS tunneling sfrutta l&amp;rsquo;unica porta che quasi nessuno osa chiudere, trasformando le query in un
canale nascosto per C2 ed esfiltrazione. La difesa non può essere bloccare il DNS, ma riconoscerne
l&amp;rsquo;abuso: volume, lunghezza dei nomi ed entropia verso un singolo dominio sono i segnali, e la loro
combinazione — meglio se dentro un SIEM che correla — è ciò che distingue il tunnel dal traffico
reale. A monte, un resolver interno obbligatorio e le RPZ riducono la superficie. Come spesso nella
sicurezza DNS, la chiave è guardare un protocollo che di solito nessuno guarda.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Sicurezza del DNS: DNSSEC e DoH</title>
        <link>https://www.matteobianchi.eu/p/dns-security-dnssec-doh/</link>
        <pubDate>Tue, 08 Sep 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/dns-security-dnssec-doh/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/dns-security-dnssec-doh/cover.png" alt="Featured image of post Sicurezza del DNS: DNSSEC e DoH" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Nel &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/tls-deep-dive/&#34; &gt;capitolo su TLS&lt;/a&gt; abbiamo visto come proteggere una
connessione. Ma prima di aprirla, il client chiede al DNS: &amp;ldquo;qual è l&amp;rsquo;IP di &lt;code&gt;banca.it&lt;/code&gt;?&amp;rdquo;. Se un
attaccante risponde al posto del DNS legittimo — minaccia T7 del
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/threat-modeling-networks/&#34; &gt;threat model&lt;/a&gt; — manda il client su un IP che
controlla lui. TLS su quel sito mostrerebbe un errore di certificato, certo, ma il DNS è il primo
anello, e troppi attacchi partono da lì.&lt;/p&gt;
&lt;p&gt;Il DNS classico ha due difetti indipendenti: non autentica le risposte (chiunque può falsificarle)
e non le cifra (chiunque sulla rete le legge). Vanno risolti separatamente.&lt;/p&gt;
&lt;h2 id=&#34;il-problema-1-autenticità--cache-poisoning&#34;&gt;Il problema 1: autenticità — cache poisoning
&lt;/h2&gt;&lt;p&gt;Una query DNS esce con un ID di transazione a 16 bit e attende la risposta. Chi risponde per primo
con l&amp;rsquo;ID giusto vince — anche un attaccante, se indovina l&amp;rsquo;ID prima del server vero. La risposta
falsa viene &lt;strong&gt;messa in cache&lt;/strong&gt; dal resolver, e da quel momento tutti quelli che usano quel resolver
vengono mandati sull&amp;rsquo;IP sbagliato. È il &lt;strong&gt;cache poisoning&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  sequenceDiagram
    participant C as Client
    participant R as Resolver
    participant A as Attaccante
    participant S as Server DNS vero
    C-&amp;gt;&amp;gt;R: banca.it ?
    R-&amp;gt;&amp;gt;S: banca.it ? (txid 0x3f9a)
    A--&amp;gt;&amp;gt;R: banca.it = 6.6.6.6 (txid indovinato, arriva prima)
    Note over R: mette in cache la risposta falsa
    S-&amp;gt;&amp;gt;R: banca.it = 1.2.3.4 (arriva dopo, scartata)
    R-&amp;gt;&amp;gt;C: banca.it = 6.6.6.6
&lt;/pre&gt;

&lt;h3 id=&#34;la-soluzione-dnssec&#34;&gt;La soluzione: DNSSEC
&lt;/h3&gt;&lt;p&gt;DNSSEC firma le risposte DNS con la crittografia a chiave pubblica. Ogni zona firma i propri record;
la zona superiore firma la chiave di quella inferiore, formando una &lt;strong&gt;catena di fiducia&lt;/strong&gt; che parte
dalla radice &lt;code&gt;.&lt;/code&gt;, esattamente come la PKI di TLS parte dalle CA radice.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    Root[&amp;#34;. (root)&amp;#34;] --&amp;gt;|firma la chiave di| IT[&amp;#34;.it&amp;#34;]
    IT --&amp;gt;|firma la chiave di| Dom[&amp;#34;banca.it&amp;#34;]
    Dom --&amp;gt;|firma i record| A[&amp;#34;A = 1.2.3.4 (RRSIG)&amp;#34;]
&lt;/pre&gt;

&lt;p&gt;Il resolver verifica le firme risalendo la catena. Una risposta falsificata non ha una firma
valida e viene &lt;strong&gt;scartata&lt;/strong&gt;: il cache poisoning fallisce perché l&amp;rsquo;attaccante non possiede la chiave
privata della zona.&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;lnt&#34;&gt;1
&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;lnt&#34;&gt;4
&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# chiedere i record DNSSEC e verificare la firma&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dig banca.it +dnssec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# il flag &amp;#34;ad&amp;#34; (Authenticated Data) nella risposta indica validazione riuscita&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dig @1.1.1.1 banca.it &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -o &lt;span class=&#34;s1&#34;&gt;&amp;#39;flags:.*;&amp;#39;&lt;/span&gt;
&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;Attenzione: DNSSEC &lt;strong&gt;autentica&lt;/strong&gt; ma &lt;strong&gt;non cifra&lt;/strong&gt;. Chiunque sulla rete vede ancora quali domini
chiedete. Risolve il problema 1, non il problema 2.&lt;/p&gt;
&lt;h2 id=&#34;il-problema-2-riservatezza--tutti-leggono-le-query&#34;&gt;Il problema 2: riservatezza — tutti leggono le query
&lt;/h2&gt;&lt;p&gt;Una query DNS classica viaggia in UDP, in chiaro, sulla porta 53. Chiunque sia sul percorso — il
proprietario della rete Wi-Fi, il provider, un uomo nel mezzo — legge l&amp;rsquo;elenco dei siti che
visitate, anche se poi vi collegate in HTTPS. E può ancora intercettarla e rispondere.&lt;/p&gt;
&lt;h3 id=&#34;la-soluzione-dot-e-doh&#34;&gt;La soluzione: DoT e DoH
&lt;/h3&gt;&lt;p&gt;Due standard cifrano il trasporto del DNS dentro TLS:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;DoT (DNS over TLS)&lt;/th&gt;
&lt;th&gt;DoH (DNS over HTTPS)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Porta&lt;/td&gt;
&lt;td&gt;853 (dedicata)&lt;/td&gt;
&lt;td&gt;443 (come il traffico web)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visibilità&lt;/td&gt;
&lt;td&gt;si distingue dal resto del traffico&lt;/td&gt;
&lt;td&gt;indistinguibile dal normale HTTPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocco&lt;/td&gt;
&lt;td&gt;facile da bloccare (porta nota)&lt;/td&gt;
&lt;td&gt;difficile: bloccarlo blocca il web&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uso tipico&lt;/td&gt;
&lt;td&gt;resolver di rete, policy aziendali&lt;/td&gt;
&lt;td&gt;browser, aggiramento della censura&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;lnt&#34;&gt;1
&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;lnt&#34;&gt;4
&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DoT verso un resolver pubblico&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kdig -d @1.1.1.1 +tls banca.it
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DoH: una query DNS dentro una normale richiesta HTTPS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -s -H &lt;span class=&#34;s1&#34;&gt;&amp;#39;accept: application/dns-json&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://1.1.1.1/dns-query?name=banca.it&amp;amp;type=A&amp;#39;&lt;/span&gt;
&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;h2 id=&#34;le-due-soluzioni-sono-complementari&#34;&gt;Le due soluzioni sono complementari
&lt;/h2&gt;&lt;p&gt;È l&amp;rsquo;errore più comune: pensare che DoH &amp;ldquo;renda sicuro&amp;rdquo; il DNS. DoH cifra la query verso il resolver,
ma se quel resolver non valida DNSSEC, può comunque ricevere e inoltrarvi una risposta falsa. E
DNSSEC autentica, ma lascia la query visibile. La configurazione robusta usa &lt;strong&gt;entrambi&lt;/strong&gt;: un
resolver che valida DNSSEC, raggiunto via DoT/DoH.&lt;/p&gt;
&lt;p&gt;Nel lab si costruisce con &lt;code&gt;unbound&lt;/code&gt;:&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;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&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&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    auto-trust-anchor-file: &amp;#34;/var/lib/unbound/root.key&amp;#34;   # abilita la validazione DNSSEC
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    # ... ascolto su localhost ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;forward-zone:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    name: &amp;#34;.&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    forward-tls-upstream: yes                              # inoltra agli upstream via DoT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    forward-addr: 1.1.1.1@853
&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;La prima riga evidenziata attiva la validazione DNSSEC (problema 1); la seconda cifra l&amp;rsquo;inoltro
verso l&amp;rsquo;upstream con DoT (problema 2).&lt;/p&gt;
&lt;h2 id=&#34;lab&#34;&gt;Lab
&lt;/h2&gt;&lt;p&gt;Nel lab containerlab, con un nodo resolver (&lt;code&gt;unbound&lt;/code&gt;) e un nodo client:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configurate &lt;code&gt;unbound&lt;/code&gt; con validazione DNSSEC e upstream in DoT.&lt;/li&gt;
&lt;li&gt;Da client, &lt;code&gt;dig&lt;/code&gt; un dominio firmato DNSSEC e verificate il flag &lt;code&gt;ad&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dig&lt;/code&gt; un dominio con firma deliberatamente rotta (ne esistono di test, es.
&lt;code&gt;dnssec-failed.org&lt;/code&gt;): il resolver deve rispondere &lt;code&gt;SERVFAIL&lt;/code&gt;, non l&amp;rsquo;IP.&lt;/li&gt;
&lt;li&gt;Catturate il traffico tra resolver e upstream: con DoT deve essere illeggibile (TLS sulla 853).&lt;/li&gt;
&lt;/ol&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; perché un dominio con DNSSEC rotto dà SERVFAIL e non l&#39;IP?&lt;/summary&gt;
&lt;p&gt;Perché la validazione è una scelta binaria: o la firma è valida, o la risposta non è fidata. Un
resolver che valida DNSSEC, di fronte a una firma che non torna (scaduta, mancante, manomessa),
non ha modo di sapere se è un errore di configurazione o un attacco in corso, quindi tratta la
risposta come non attendibile e restituisce &lt;code&gt;SERVFAIL&lt;/code&gt;. È un &#34;fallire in sicurezza&#34;:
meglio nessuna risposta che una risposta potenzialmente falsa. Lo svantaggio è che un errore di
firma del gestore del dominio rende il sito irraggiungibile per chi valida — ed è successo a domini
importanti.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Il DNS ha due problemi distinti: autenticità e riservatezza. DNSSEC firma (problema 1), DoT/DoH
cifrano (problema 2). Confonderli porta a configurazioni che sembrano sicure e non lo sono. La
difesa completa li combina: resolver che valida DNSSEC, raggiunto con trasporto cifrato.&lt;/p&gt;
&lt;p&gt;Fin qui abbiamo difeso riservatezza, integrità e autenticità. Resta la terza gamba della
sicurezza: la &lt;strong&gt;disponibilità&lt;/strong&gt;. Nel prossimo capitolo l&amp;rsquo;attacco che la prende di mira: il DDoS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prossimo nella serie:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/ddos-anatomy-and-mitigation/&#34; &gt;08 · Anatomia di un DDoS&lt;/a&gt; ·
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/network-security-roadmap/&#34; &gt;Torna alla roadmap&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>SPF, DKIM e DMARC: autenticare chi invia la posta</title>
        <link>https://www.matteobianchi.eu/p/email-authentication-spf-dkim-dmarc/</link>
        <pubDate>Sat, 29 Aug 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/email-authentication-spf-dkim-dmarc/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/email-authentication-spf-dkim-dmarc/cover.png" alt="Featured image of post SPF, DKIM e DMARC: autenticare chi invia la posta" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Il protocollo SMTP è nato senza alcuna autenticazione del mittente: scrivere &lt;code&gt;From: ceo@azienda.it&lt;/code&gt; è facile come scrivere un indirizzo falso sul retro di una busta. È la base del
phishing e del business email compromise. Tre record DNS — SPF, DKIM e DMARC — costruiscono, strato
su strato, una risposta: &lt;em&gt;questo server può spedire per il dominio?&lt;/em&gt;, &lt;em&gt;il messaggio è integro e
davvero firmato dal dominio?&lt;/em&gt; e infine &lt;em&gt;l&amp;rsquo;indirizzo che l&amp;rsquo;utente vede corrisponde?&lt;/em&gt;. Poggiano tutti
sul DNS, quindi si legano direttamente al &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/dns-security-dnssec-doh/&#34; &gt;capitolo sulla sicurezza DNS&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;spf-quali-server-possono-spedire&#34;&gt;SPF: quali server possono spedire
&lt;/h2&gt;&lt;p&gt;SPF è un record TXT nel DNS del dominio che elenca gli indirizzi IP autorizzati a inviare posta
per quel dominio. Il server ricevente estrae il dominio dal &lt;code&gt;MAIL FROM&lt;/code&gt; (l&amp;rsquo;envelope, non l&amp;rsquo;header
visibile) e controlla se l&amp;rsquo;IP che si è connesso è nella lista.&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;lnt&#34;&gt;1
&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&#34;&gt;&lt;span class=&#34;cl&#34;&gt;azienda.it.  IN TXT  &amp;#34;v=spf1 ip4:203.0.113.0/24 include:_spf.google.com -all&amp;#34;
&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;ul&gt;
&lt;li&gt;&lt;code&gt;ip4:...&lt;/code&gt; e &lt;code&gt;include:...&lt;/code&gt; elencano gli emittenti legittimi.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-all&lt;/code&gt; (hard fail) dice: qualunque altro IP &lt;strong&gt;non&lt;/strong&gt; è autorizzato, rifiuta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il limite di SPF: autentica l&amp;rsquo;envelope, non l&amp;rsquo;indirizzo &lt;code&gt;From:&lt;/code&gt; che l&amp;rsquo;utente legge. E si rompe con
l&amp;rsquo;inoltro, perché il server che inoltra non è nella lista del dominio originale.&lt;/p&gt;
&lt;h2 id=&#34;dkim-firmare-il-messaggio&#34;&gt;DKIM: firmare il messaggio
&lt;/h2&gt;&lt;p&gt;DKIM aggiunge una &lt;strong&gt;firma crittografica&lt;/strong&gt; all&amp;rsquo;email. Il server mittente firma header e corpo con
una chiave privata; la chiave pubblica sta nel DNS. Il ricevente la recupera e verifica la firma.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    M[&amp;#34;Mittente&amp;lt;br/&amp;gt;(chiave privata)&amp;#34;] --&amp;gt;|firma header+corpo| E[Email + header DKIM-Signature]
    E --&amp;gt; R[Ricevente]
    R --&amp;gt;|recupera chiave pubblica| DNS[(record DNS _domainkey)]
    DNS --&amp;gt; V{Firma valida?}
    V --&amp;gt;|sì| OK[Integro e dal dominio]
    V --&amp;gt;|no| X[Alterato o falso]
    style X fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Una firma valida prova due cose: il messaggio &lt;strong&gt;non è stato alterato&lt;/strong&gt; in transito, ed è stato
firmato da chi controlla la chiave del dominio. A differenza di SPF, DKIM sopravvive all&amp;rsquo;inoltro,
perché la firma viaggia con il messaggio.&lt;/p&gt;
&lt;h2 id=&#34;dmarc-allineare-e-decidere&#34;&gt;DMARC: allineare e decidere
&lt;/h2&gt;&lt;p&gt;SPF e DKIM, da soli, autenticano domini che l&amp;rsquo;utente non vede (l&amp;rsquo;envelope, il dominio della firma).
DMARC aggiunge il pezzo mancante: l&amp;rsquo;&lt;strong&gt;allineamento&lt;/strong&gt; con il dominio dell&amp;rsquo;header &lt;code&gt;From:&lt;/code&gt;, quello
visibile. Un&amp;rsquo;email passa DMARC se supera SPF &lt;strong&gt;o&lt;/strong&gt; DKIM &lt;em&gt;e&lt;/em&gt; il dominio corrispondente è allineato a
quello del &lt;code&gt;From:&lt;/code&gt;.&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;/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;_dmarc.azienda.it.  IN TXT  &amp;#34;v=DMARC1; p=reject; rua=mailto:dmarc@azienda.it; pct=100&amp;#34;
&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;La &lt;code&gt;p=&lt;/code&gt; è la decisione sui messaggi che falliscono:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy&lt;/th&gt;
&lt;th&gt;Effetto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p=none&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;non fare nulla, solo monitorare (fase di avvio)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p=quarantine&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;metti in spam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p=reject&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;rifiuta del tutto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Il campo &lt;code&gt;rua=&lt;/code&gt; chiede ai riceventi di inviare &lt;strong&gt;report aggregati&lt;/strong&gt;: chi sta spedendo a nome vostro,
e con quale esito. Sono la bussola per passare da &lt;code&gt;none&lt;/code&gt; a &lt;code&gt;reject&lt;/code&gt; senza bloccare la posta
legittima.&lt;/p&gt;
&lt;h2 id=&#34;il-percorso-di-adozione&#34;&gt;Il percorso di adozione
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;errore classico è partire da &lt;code&gt;p=reject&lt;/code&gt; e scoprire di aver bloccato la newsletter aziendale o il
gestionale che spedisce fatture. Il percorso corretto:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pubblicate SPF e DKIM per tutti gli emittenti legittimi (inclusi i servizi terzi).&lt;/li&gt;
&lt;li&gt;Pubblicate DMARC con &lt;code&gt;p=none&lt;/code&gt; e raccogliete i report &lt;code&gt;rua&lt;/code&gt; per settimane.&lt;/li&gt;
&lt;li&gt;Dai report, trovate e sistemate gli emittenti legittimi non allineati.&lt;/li&gt;
&lt;li&gt;Passate a &lt;code&gt;p=quarantine&lt;/code&gt;, poi a &lt;code&gt;p=reject&lt;/code&gt; solo quando i report sono puliti.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;lab&#34;&gt;Lab
&lt;/h2&gt;&lt;p&gt;Con un dominio di test (o un ambiente mail da laboratorio come Mailu/mailcow):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pubblicate un record SPF e verificatelo con &lt;code&gt;dig TXT azienda.it&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Generate una coppia di chiavi DKIM, pubblicate la pubblica nel DNS e firmate un messaggio.&lt;/li&gt;
&lt;li&gt;Inviate verso un servizio di test (es. un account controllato) e leggete gli header
&lt;code&gt;Authentication-Results&lt;/code&gt;: devono mostrare &lt;code&gt;spf=pass&lt;/code&gt; e &lt;code&gt;dkim=pass&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Aggiungete DMARC &lt;code&gt;p=none&lt;/code&gt; con &lt;code&gt;rua&lt;/code&gt; e osservate i primi report aggregati.&lt;/li&gt;
&lt;/ol&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se ho già SPF e DKIM che passano, DMARC cosa aggiunge davvero?&lt;/summary&gt;
&lt;p&gt;Aggiunge il controllo che manca a entrambi: l&#39;allineamento con l&#39;indirizzo che l&#39;utente
&lt;em&gt;vede&lt;/em&gt;. SPF autentica il dominio dell&#39;envelope (&lt;code&gt;MAIL FROM&lt;/code&gt;), DKIM il dominio della
firma: nessuno dei due guarda l&#39;header &lt;code&gt;From:&lt;/code&gt; mostrato nel client. Un attaccante può
registrare un proprio dominio, configurarci SPF e DKIM perfetti, e poi scrivere nel &lt;code&gt;From:&lt;/code&gt;
visibile &lt;code&gt;ceo@azienda.it&lt;/code&gt;. SPF e DKIM passano — ma sul &lt;em&gt;suo&lt;/em&gt; dominio, non su
azienda.it. DMARC è ciò che esige che il dominio autenticato &lt;em&gt;coincida&lt;/em&gt; con quello visibile, e
dà al dominio legittimo il potere di dire &#34;rifiuta tutto ciò che si spaccia per me ma non lo prova&#34;.
Senza DMARC, SPF e DKIM proteggono un nome che l&#39;utente non legge mai.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Tre record, tre domande in sequenza: SPF chiede se il server è autorizzato, DKIM se il messaggio è
integro e firmato dal dominio, DMARC se tutto questo è allineato all&amp;rsquo;indirizzo che l&amp;rsquo;utente vede — e
cosa fare quando non lo è. Insieme trasformano un &lt;code&gt;From:&lt;/code&gt; falsificabile in un&amp;rsquo;identità verificabile,
e sono la difesa di base contro lo spoofing e il phishing. Come per DNSSEC, la forza sta
nell&amp;rsquo;adozione graduale guidata dai dati: &lt;code&gt;p=none&lt;/code&gt;, i report, poi &lt;code&gt;reject&lt;/code&gt;.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
