Conosciamo PING, fondamentale tool per test di rete e diagnosi delle problematiche

Questo tool ci fornisce un vero e proprio Sonar per caratterizzare le reti effettuando test e misurazioni specifiche
By Admin | Luglio 28, 2023

In questo breve articolo parleremo dell'utility di rete noto sotto il nome di PING, Packet internet groper, sviluppato nel 1983 da Mike Muuss. L'idea alla base derivante dal campo militare in cui Muuss lavorava era quella di riprodurre il funzionamento del sonar a livello informatico. Ossia un modo per verificare tramite la rete se una infrastruttura come ad esempio un PC risultava online, ossia visibile e raggiungibile tramite protocolli di comunicazione in rete.In questo breve articolo parleremo dell'utility di rete noto sotto il nome di PING, Packet internet groper, sviluppato nel 1983 da Mike Muuss. L'idea alla base derivante dal campo militare in cui Muuss lavorava era quella di riprodurre il funzionamento del sonar a livello informatico. Ossia un modo per verificare tramite la rete se una infrastruttura come ad esempio un PC risultava online, ossia visibile e raggiungibile tramite protocolli di comunicazione in rete.

Questa utility, ormai ampiamente diffusa e usata giornalmente nel campo informatico da decenni, funziona in maniera molto semplice. Invia un pacchetto echo request verso una macchina dotata di IP o FQDN attendendo in risposta un pacchetto echo reply. Il tutto avviene tecnicamente tramite l'invio di un pacchetto ICMP (Internet Control Message Protocol) specifico, che agisce a livello di stack TCP/IP, ossia un protocollo specifico ideato per monitoraggio di rete, misurazione delle performance ed annessi.

Figura 1

PING ci permette di ottenere alcune informazioni su macchine target, senza però garantire che la realtà sia esattamente così, nel senso che le macchine possono essere programmate per ignorare, ad esempio, i pacchetti ICMP impedendo quindi a PING di fare il suo mestiere. Tralasciano un attimo casi specifici, l'utilità di PING non consiste solo nella verifica della raggiungibilità di una macchina ma anche nella valutazione della risposta della rete in termini di velocità, cioè il tempo in millisecondi che un pacchetto ICMP impiega andata-e-ritorno dalla macchina target. Di conseguenza PING è prevalentemente uno strumento utile a misurare le latenze di rete, ossia la velocità nell'instradamento e transito dei pacchetti.

PING fin dal suo sviluppo ha avuto una caratteristica che ha apportato sia vantaggi che svantaggi. Le macchine sono programmate di default a rispondere automaticamente ai ping ma questa caratteristica le ha esposte nel tempo ad importanti rischi relativi alla sicurezza dei sistemi in quanto sono stati elaborati nel tempo attacchi che fanno ampio uso di PING, come attacchi DoS e DDoS, oppure attacchi "a riflessione" con successivo flooding favoriti dai limiti "storici" di PING (successivamente corretti col tempo). Come caso tipico basta pensare alla circostanza in cui è possibile alterare facilmente il reale indirizzo IP di spedizione di un pacchetto ICMP impersonificando un IP diverso.

Passiamo adesso alla revisione dei principali comandi e all'interpretazione del relativo output. Un semplice ping verso google.com restituisce:

root@mypc:~# ping google.com
PING google.com (142.251.209.46) 56(84) bytes of data.
64 bytes from mil04s51-in-f14.1e100.net (142.251.209.46): icmp_seq=1 ttl=113 time=32.5 ms
64 bytes from mil04s51-in-f14.1e100.net (142.251.209.46): icmp_seq=2 ttl=113 time=32.3 ms
64 bytes from mil04s51-in-f14.1e100.net (142.251.209.46): icmp_seq=3 ttl=113 time=32.4 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 32.260/32.364/32.476/0.088 ms
		

Veniamo all'interpretazione dei dati, pingando google.com viene raggiunta (in questo caso e dall'Italia, parametri che sicuramente varieranno per altre connessioni e da altri paesi del Mondo) la macchina 142.251.209.46. Al terzo pacchetto abbiamo interrotto la sequenza come si vede da terminale dando un Ctrl+C. Come si può vedere dal summary presente in fondo sono stati inviati 3 pacchetti e ricevuti 3, con una perdita di pacchetti pari a zero, quindi con lo 0% di packet loss. Il tempo impiegato dai pacchetti è stato nel caso minimo) 32.260 ms (transito più veloce), 32.476 ms (transito più lento) e 32.364 di valore medio.

Ovviamente avremmo ottenuto (quasi) lo stesso risultato pingando direttamente un IP di una macchina specifico, risparmiando qualcosa in termini di ms dalla mancata traduzione del FQDN a IP:

root@mypc:~# ping 142.251.209.46
PING 142.251.209.46 (142.251.209.46) 56(84) bytes of data.
64 bytes from 142.251.209.46: icmp_seq=1 ttl=113 time=32.4 ms
64 bytes from 142.251.209.46: icmp_seq=2 ttl=113 time=30.5 ms
64 bytes from 142.251.209.46: icmp_seq=3 ttl=113 time=32.4 ms
64 bytes from 142.251.209.46: icmp_seq=4 ttl=113 time=31.0 ms
^C
--- 142.251.209.46 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 30.460/31.553/32.401/0.854 ms
		

Nel caso in cui provassimo a pingare una macchina che non esiste o impostata per non rispondere a specifiche comunicazioni di questo tipo otterremo (ping test di una macchina nella nostra rete locale):

root@mypc:~# ping 192.168.1.12
PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data.
From 192.168.1.3 icmp_seq=1 Destination Host Unreachable
From 192.168.1.3 icmp_seq=2 Destination Host Unreachable
From 192.168.1.3 icmp_seq=3 Destination Host Unreachable
...
		

Vediamo di seguito altre opzioni importanti di PING adattabili ad esigenze specifiche.

Ping di un FQDN su indirizzi IPv4 e IPv6:

$ ping -4 google.com
$ ping -6 google.com

Oppure pingando direttamente un IPv6 (es. Google Public DNS 8.8.8.8):

$ ping -6 2001:4860:4860::8888

Invio numero prestabilito (es. 5 pacchetti) di pacchetti senza continuare "all'infinito":

$ ping -n 5

Invio pacchetti specificando tempo massimo di attesa della risposta in millisecondi (es. 500 ms):

$ ping -w 500

Settare dimensione pacchetto diversa dal valore dafault (32 bytes) impostandola tramite parametro (es. 128 bytes):

$ ping -l 128

Ping da specifica interfaccia di rete, supponendo di essere connessi a diverse reti, per questo caso, via cavo ethernet e wifi (supponiamo eth0 e wlan0):

$ ping -I eth0 (ping destinazione via interfaccia di rete eth0)
$ ping -I wlan0 (ping destinazione via interfaccia di rete wlan0)

Appare subito evidente che questa funzionalità può essere usata per verificare la presenza di rete sulle diverse interfacce di nostro interesse.

Infine, per tutte le numerose opzioni di utilizzo di PING rimandiamo come sempre al manuale ufficiale.

$ man ping

In precedenza abbiamo già sottolineato come la grande utilità e versatilità di PING può essere usata come arma a doppio taglio in quanto fornisce da una parte informazioni utili sugli host sondati, ad esempio propedeutici alla raccolta di informazioni nella pianificazione di attacchi informatici, nello stesso tempo il medesimo PING può essere usato come vero e proprio veicolo per operazioni specifiche, spesso volutamente malevoli.

Ebbene a conclusione di questo articolo vediamo come settare opportunamente delle impostazioni affinché una macchina o un server UNIX rigetti in automatico le richieste arrivate tramite ping.

Possiamo farlo agiamo sulle impostazioni di sistema modificando o aggiungendo al file /etc/sysctl.conf la seguente istruzione:

net.ipv4.icmp_echo_ignore_all=1

Che risulta auto-esplicativa alla lettura, il valore 1 sta a significare l'attivazione della regola, se volessimo disattivarla invece dovremmo settarla a zero (accettazione pacchetti echo request). Ricordiamo che questa regola diventerà effettiva al prossimo reboot. In alternativa possiamo dare il comando:

$ sysctl -p

Per renderla effettiva immediatamente, soprattutto se non abbiamo la possibilità di effettuare un reboot.

Viceversa possiamo, ad esempio, intervenire a livello di firewall tramite iptables:

$ iptables -I INPUT -p icmp --icmp-type echo-request -j DROP

Attenzione tuttavia a rendere definitiva questa regola tramite ulteriori passaggi dato che rimarrà in essere solo fino al prossimo reboot del sistema.

In questo modo il sistema target raggiunto dall'invio di pacchetti ICMP semplicemente non risponderà non fornendo informazioni utili a chi sta effettuando il ping.

PING è una utility presente praticamente dovunque sulla maggior parte dei sistemi, analoghe considerazioni valgono ovviamente per l'ambito Windows, Mac, FreeBSD, ecc. su cui potremmo sfruttare questa utility oltre alle opportune contromisure per disattivare le echo reply in ambito PC e server.

Qualsivoglia richiesta può essere inviata a NAOSDATA che offre servizi di consulenza, implementazione e managment specifico sulle infrastrutture ICT.

Ci auguriamo che questo articolo vi sia piaciuto e vi possa essere d'aiuto nell'utilizzo di PING. Se apprezzate il nostro lavoro seguite i nostri profili su Facebook e LinkedIn.

Creative Commons License
Questo lavoro è offerto tramite licenza Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.


Risorse e Link: