Skip to main content
  1. Concetti/

IP Header e IPv4

·4 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

IPv4 e' il protocollo di Layer 3 responsabile dell'indirizzamento e del routing tra reti diverse. Ogni dispositivo connesso a internet ha un indirizzo IPv4 a 32 bit. L'header IPv4 contiene le informazioni necessarie per instradare il pacchetto dalla sorgente alla destinazione attraverso qualsiasi numero di router.

TL;DR
#

MAC  → identifica chi sei FISICAMENTE sulla LAN (Layer 2)
       cambia ad ogni hop, non esce dalla subnet

IP   → identifica dove sei nella RETE (Layer 3)
       rimane invariato per tutto il viaggio

ARP  → traduce IP in MAC quando sei nella stessa LAN

MAC vs IP — due livelli distinti
#

LAN A (192.168.1.x)          Internet          LAN B (10.0.0.x)
  PC ──────► Router A ─────────────────── Router B ──────► Server

  Tra PC e Router A:    MAC (stessa LAN) + IP
  Su internet:          solo IP — i MAC non escono dalla LAN
  Tra Router B e Server: MAC (stessa LAN) + IP

Internet e' una collezione di milioni di LAN collegate da router. La subnet mask definisce i confini di ogni LAN:

IP: 10.10.1.22
Mask: 255.255.0.0

In binario:
  IP:   00001010.00001010.00000001.00010110
  Mask: 11111111.11111111.00000000.00000000
                ─────────────────────────────
                Network portion   Host portion
                (10.10)           (1.22)

I bit a 1 nella mask = parte di rete (stessa LAN) I bit a 0 nella mask = parte host (dispositivo specifico)


Struttura header IPv4
#

┌─────────┬──────────┬─────────────────┬──────────────────────┐
│ Version │  Header  │ Type of Service │    Total Length      │
(4b)   │  Length  │     (8b)(16b)├─────────┴──────────┴─────────────────┴──────────────────────┤
│         Identification (16b)         │ Flags │ Frag Offset  │
├──────────────────┬───────────────────┴───────┴──────────────┤
│   Time to Live   │    Protocol (8b)  │   Header Checksum    │
(8b)        │                   │       (16b)├──────────────────┴───────────────────┴──────────────────────┤
│                   Source IP Address (32b)├──────────────────────────────────────────────────────────────┤
│                Destination IP Address (32b)├──────────────────────────────────────────────────────────────┤
│                       Options                                │
├──────────────────────────────────────────────────────────────┤
│                        Data                                  │
└──────────────────────────────────────────────────────────────┘

Campi principali:

CampoCosa contieneNote Blue Team
Version4 (IPv4) o 6 (IPv6)
TTLTime to Live — hop rimanentiDecrementato di 1 ad ogni router. A 0 → scartato + ICMP Time Exceeded
ProtocolCosa c'e' dentro6=TCP, 17=UDP, 1=ICMP
Source IPIP mittenteFalsificabile → IP spoofing
Destination IPIP destinatario
Header ChecksumIntegrita' headerVerifica SOLO l'header IP, non i dati
Flags + Fragment OffsetFrammentazioneVedi sezione sotto

TTL — Time to Live
#

Il TTL previene i loop di routing: se un pacchetto girasse in loop infinito, consumerebbe tutta la banda → DoS.

Partenza:  TTL = 64 (Linux) o 128 (Windows)
           decrementato di 1 ad ogni router

hop 1TTL = 63
hop 2TTL = 62
...
hop 64TTL = 0 → router scarta + manda ICMP Time Exceeded

Come riconosci il sistema operativo dal TTL iniziale:

TTL 64  → Linux/macOS
TTL 128 → Windows
TTL 255 → router/dispositivi di rete
Tip

Se vedi un TTL di 127 o 63 in una cattura, il pacchetto ha gia' attraversato 1 router. Puoi stimare quanti hop ha fatto: TTL iniziale - TTL attuale = hop attraversati


IP Fragmentation
#

Ethernet ha un MTU (Maximum Transmission Unit) di 1500 byte. Se il pacchetto e' piu' grande, viene frammentato:

Dati originali: 4000 byte
MTU Ethernet:   1500 byte (payload massimo)

Frammento 1: Fragment Offset = 0     → byte 0-1479
Frammento 2: Fragment Offset = 1480  → byte 1480-2959
Frammento 3: Fragment Offset = 2960  → byte 2960-3999

Come appare in Wireshark:

Packet 1: Fragment Offset: 0,    More Fragments: 1
Packet 2: Fragment Offset: 1480, More Fragments: 1
Packet 3: Fragment Offset: 2960, More Fragments: 0  ← ultimo

Il destinatario riassembla i frammenti usando Fragment Offset per rimettere i dati nell'ordine corretto.

Warning

La frammentazione IP e' stata usata per attacchi classici:

  • Teardrop attack: frammenti con offset sovrapposti che crashano il sistema operativo durante il riassemblaggio
  • IDS/firewall evasion: payload malevolo spezzato in frammenti che l'IDS non riconosce come attacco perche' li vede separati

I firewall moderni riassemblano i frammenti PRIMA dell'ispezione per difendersi da questi attacchi.


IPv4 vs IPv6
#

IPv4:  32 bit  → ~4 miliardi di indirizzi → esauriti
IPv6: 128 bit  → 340 undecilioni di indirizzi

IPv4: 192.168.1.1
IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334

IPv4 e' ancora il protocollo dominante su internet. IPv6 e' in adozione progressiva ma non ha ancora sostituito IPv4.


Scenario Reale Blue Team
#

Un analista SOC vede traffico con frammenti IP anomali: molti frammenti con Fragment Offset che si sovrappongono verso lo stesso host interno. Possibile Teardrop attack o tentativo di evasione IDS.

# Filtra frammenti IP in tcpdump
sudo tcpdump -i eth0 'ip[6] & 0x20 != 0'
# ip[6] & 0x20 = bit "More Fragments" nell'header IP

# In Wireshark
ip.frag_offset > 0    # mostra tutti i frammenti non-primo
ip.flags.mf == 1      # mostra frammenti con "More Fragments" attivo
Tip

In una rete normale la frammentazione e' rara — la maggior parte dei sistemi usa Path MTU Discovery per evitarla. Vedere molti frammenti IP e' gia' di per se' un segnale da investigare.


Collegato a
#

  • network — categoria
  • osi-model — Layer 3 nel contesto OSI
  • routing-hop-ttl — TTL e routing approfonditi
  • icmp-mac-ip — IP vs MAC, ICMP Time Exceeded
  • arp — traduce IP in MAC nella LAN
  • tcp-udp — protocolli Layer 4 trasportati da IP

Related