Utente:Fanto13/Sandbox

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Port scan Introduzione[modifica | modifica wikitesto]

Un port scanner è un'applicazione realizzata per sondare un server o un host alla ricerca di porte aperte, tutti i dispositivi online utilizzano delle porte per permettere ai servizi di funzionare.

Questo è spesso utilizzato dagli amministratori per verificare la sicurezza e la funzionalità delle loro reti, inoltre può essere utilizzato da degli attaccanti, che vogliono identificare i servizi di rete attivi su un host, e sfruttarne le vulnerabilità.

Un portscan, è un processo che invia delle richieste, (attraverso un pacchetto confezionato appositamente) ad un range di porte ed indirizzi su un host, con l'obbiettivo di trovare una porta aperta in ascolto, può essere lanciato anche da un servizio online.

Suddivisione del range di porte[modifica | modifica wikitesto]

Esistono dei range di porte standardizzate, tuttavia non c'è nessun vincolo che obbliga gli utenti a utilizzare una specifica porta, infatti la scelta della porta ha validità soltanto all'interno del sistema informatico in uso.

Tuttavia è considerata una buona pratica utilizzare le porte preposte per ogni servizio.

Queste porte sono state assegnate dalla ICANN, precedentemente le porte venivano assegnate dalla IANA,

  • porte conosciute: "well known ports", dalla porta 0 alla porta 1023

Porte considerate standard, utilizzate da servizi e processi comuni e ben noti, in molti sistemi per utilizzare per utilizzare queste porte bisogna eseguire il programma come utente privilegiato, i client non dovrebbero utilizzare queste porte normalmente.

  • porte registrate: "registred ports", dalla 1024 alla 49151.

l'utilizzo di questo inseme di porte è generalmente libero, In molti casi non sono necessari i privilegi di root per utilizzare queste porte, queste porte vengono solitamente utilizzare dai client per collegarsi ad un sistema remoto,

  • porte dinamiche o private: "dynamic and/or private ports", dalla 49152 alla 65535

Porte liberamente utilizzabili dall'utente o dall'amministratore di sistema, nessun servizio noto è registrato su queste porte, sono solitamente utilizzate da software proprietari o aziendali.

Uno dei programmi più utilizzati per eseguire un portscan è NMAP (esiste anche la sua versione con interfaccia grafica: Zenmap), ma ne esistono molti altri.

Solitamente, durante i pentest si utilizzano scansioni TCP/SYN e scansioni UDP, anche se i firewall moderni sono in grado di capire se si sta eseguendo una routine portscan, infatti molti delle tecniche supportate da NMAP sono state sviluppate principalmente come metodi temporanei per aggirare le difese del firewall.

Three-way handshake[modifica | modifica wikitesto]

Per stabilire una connessione TCP, bisogna eseguire l'handshake a tre vie, che si compone di:

A invia a B un pacchetto TCP con il flag SYN ed un numero di sequenza casuale.

B riceve la richiesta e risponde ad A con un pacchetto con i flag SYN e ACK impostati, nel pacchetto è presente anche il numero di sequenza ricevuto incrementato e un altro numero di sequenza casuale.

A riceve il pacchetto, verifica che il numero di pacchetto sia incrementato e risponde con un nuovo pacchetto con il numero di sequenza incrementato ed un nuovo numero di sequenza con il flag ACK impostato.

A questo punto A e B hanno riconosciuto l'intenzione reciproca di connettersi e sincronizzano i numeri di sequenza TCP, a questo punto fino a che la connessione non viene interrotta o sia necessaria una risincronizzazione (ad esempio se i numeri di sequenza non rispettano le condizioni di sincronizzazione) si invieranno pacchetti con il flag ACK impostato.

Risultati della scansione[modifica | modifica wikitesto]

in caso la porta sia aperta[modifica | modifica wikitesto]

Un port scanner, dopo ever eseguito la connessione a tre vie può considerare la porta come aperta, i dati secondari di una porta prendono il nome di banner, una risposta testuale che include il tipo e a volte la versione del server in uso, queste informazioni sono utilizzate solitamente dagli amministratori di rete per scoprire i servizi in esecuzione su una rete, tuttavia un attaccante eseguire degli attacchi mirati alla versione in uso dal server.

In caso la porta sia chiusa[modifica | modifica wikitesto]

Durante l'handshake può succedere che la porta che si vuole utilizzare sia chiusa, in questo caso, dopo aver ricevuto il pacchetto SYN iniziale, il destinatario B dovrebbe rispondere con un pacchetto TCP con il flag RST e ACK settati, poichè la comunicazione non dovrebbe continuare il numero di sequenza dovrebbe essere impostato su zero, questo solitamente indica che la connessione è consentita dal firewall ma la porta è chiusa.

in caso la porta sia filtrata[modifica | modifica wikitesto]

In caso sia presente un firewall tra il computer A e il computer B, è possibile che non vi sia il pacchetto SYN in risposta, perchè viene eliminato dal firewall, la risposta potrebbe variare anche in base al sistema operativo, ad esempio potrebbero esserci differenze nel valore IP TTL tra i sistemi Unix e Windows, in questo caso la porta si dice filtrata.

Nmap comandi e opzioni più utilizzati[modifica | modifica wikitesto]

Nmap(contrazione di Network Mapper) è un software libero con licenza GNU GPL, prodotto dal team insecure.org, è in grado di scansionare un singolo indirizzo ip oppure un range specifico di porte.

Le tecniche che si utilizzano per ipotizzare il sistema operativo utilizzato dal computer bersaglio prendono il nome di fingerprint ad esempio lanciando il comando "nmap -A 192.168.1.1"

sintassi generale:

nmap <opzioni> <indirizzo target, può essere un host o un IP>

//è possibile specificare i dns server da utilizzare con l'opzione 
nmap --dns-servers <ns1[ ,ns2],...>

//prende in input una lista di host da un file
nmap -iL target.txt         

//è possibile utilizzare * per scansionare un range di indirizzi:
nmap -sP 192.168.0.*

//oppure un intervallo di IP 
nmap 192.168.1.0-24

//oppure una sottorete
nmap 192.168.1.0/24


    Tipi di scansioni più frequenti:
● List Scan:             nmap -v -sL target
● Ping Scan:             nmap -v -sn target
● Version Scan:          nmap -v -sV target
● Script Scan:           nmap -v -sC target
● Aggressive Scan:       nmap -v -A target
● SYN Scan:              nmap -sS < target >  
●TCP FIN/XMAS/Null scan: nmap -sF Host | nmap -sX Host | nmap -sN Host
●TCP connect scan:       nmap -sT Host
●TCP ACK scan:           nmap -sA Host
●TCP Idle scan:          nmap -sI Host
●UDP scan:               nmap -sU Host
●TCP Maimon scan:        nmap -sM Host
●TCP Idle scan:          nmap -sI Host

Per ulteriori comandi ed opzioni consultare la documentazione ufficiale, può risultare comodo utilizzare un tool grafico come Zenmap per lanciare il comando che più si avvicina allo scopo desiderati.

Scansioni più popolari:[modifica | modifica wikitesto]

SYN TCP

È la forma più comune di scansione delle porte TCP in uso, consiste nell'inviare un pacchetto TCP con il flag SYN settato, se la risposta è SYN/ACK la porta è aperta, se il flag è RST/ACK la porta invece è chiusa, se non si riceve alcuna risposta si riproverà un certo numero di volte prima di considerare la porta come filtrata.

Siccome questa tecnica usa i socket RAW(cioè il programma ha bisogno di un maggiore controllo sui socket o di alcune funzionalità del sistema operativo), per eseguirla fornire al programma i permessi di root sui sistemi operativi basati su Unix.

TCP CONNECT

Una TCP connect instaura una connessione completa per ogni porta con cui ha effettuato la connessione, in uesto caso si possono utilizzare le chiamate standard del sistema operativo per creare connessioni, questa scansione, per sua natura è più lenta rispetto alla connessione SYN TCP, è possibile che connessioni di questo tipo portino a condizioni di denial of service.

TCP ACK

Una scansione TCP ACK invia un pacchetto TCP con il flag ACK impostato su ciascun indirizzo e porta di destinazione, quando questo pacchetto viene ricevuto, il sistema ricevente suppone che l'host di origine stia tentando di continuare una connessione corrente e quindi risponderà con un pacchetto TCP con il flag RST impostato.

In caso tra i due computer non sia presente un firewall il computer che esegue la scansione riceverà un pacchetto con il flag RST impostato, in questo caso la porta e il protocollo possono essere considerati non filtrati.

Nel caso invece sia presente un firewall che monitora lo stato delle connessioni, il sistema scansionato potrebbe inviare un messaggio ICMP di risposta.

SCANSIONE NULL

Una scansione null non ha nessun flag impostato, se il destinatario ha una porta chiusa il pacchetto dovrebbe venire eliminato altrimenti quest'ultimo dovrebbe inviare un pacchetto RST.

SCANSIONE FIN

Questa scansione utilizza pacchetti con il flag FIN impostato, questo dovrebbe produrre le stesse risposte di una scansione con nessun flag impostato.

CHRISTMAS TREE SCAN

Questa tecnica consiste nell'inviare un pacchetto con i flag FIN, PSH e URG impostati, e dovrebbe avere come riposta lo stesso delle scansioni FIN e NULL

MAIMON SCAN

Una scansione MAIMON (prende il nome dal suo creatore Uriel Maimon) utilizza un pacchetto FIN/ACK , in questo caso ci si aspetta di ricevere un pacchetto con il flag RST come risposta o in alternativa nessuna risposta o un messaggio ICMP 3, come dell resto i tre tipi di scansione precedenti.

La maggior parte dei firewall moderni sono in grado di rilevare questi tipi di scansione, ma il sistema operativo potrebbe rispondere in modo diverso a seconda di come implementa il protocollo [RFC793].

TCP WINDOWS SCAN

Si tratta di una versione modificata della scansione ACK, che utilizza il campo TCP window per determinare se una porta è aperta oppure no, in sostanza controlla se il campo TCP Window del pacchetto RST di ritorno è stato modificato, se il valore di ritorno è diverso da 0 significa che la porta è aperta..

il campo TCP WINDOW viene utilizzato per controlare il flusso TCP, per gestire il volume di trasmissione dei dati.

Questo metodo è poco affidabile in quanto funziona soltanto su alcuni sistemi, inoltre è obsoleto.

UDP SCAN

Il protocollo UDP è stateless, a differenza del protocollo TCP non c'è alcun controllo di flusso quindi non esistono pacchetti di SYN o RST, tuttavia se la porta è chiusa viene inviato un pacchetto ICMP di tipo 3, oppure il sistema sottoposto a scansione può rispondere con altri messaggi ICMP ad esempio se è presente un firewall.

Per determinare se una porta è aperta o chiusa tramite il protocollo UDP solitamente si invia una pacchetto ad un determinato indirizzo e ad una certa porta, se non si riceve risposta si riproverà un certo numero di volte, poi si passerà alla porta successiva, in generale se non si riceve alcuna risposta non si ha la garanzia che la porta sia aperta, mentre se si riceve un pacchetto ICMP come risposta allora possiamo stabilire che la porta è chiusa.

Inoltre c'è da considerare che alcuni sistemi operativi implementano un limite di frequenza al numero di messaggi di errore ICMP che possono essere inviati ad un host (timeout).

Per questi motivi una scansione tramite UDP è molto lenta e può richiedere diverse ore.

Aspetto legale[modifica | modifica wikitesto]

La procedura di port scanning al momento in Italia non è illegale tuttavia un port scaning può precedere una aggressione informatica, molti sistemi sono in grado di rilevare alcune di queste scansioni e conservare l'indirizzo ip che esegue la scansione e le richieste ricevute all'interno dei file di log.

Vedi anche[modifica | modifica wikitesto]