Tipi di scansione
Prima di passare agli
indispensabili strumenti per la scansione delle
porte, è
necessario chiarire quali siano le diverse tecniche disponibili. Uno dei
pionieri nell’implementazione di queste tecniche di scansione è Fyodor, che ne
ha implementate un buon numero nel suo Nmap. Molti dei tipi di scansione che
presenteremo qui sono stati elaborati direttamente dallo stesso Fyodor. Molte
delle tecniche esistenti si basano sul protocollo TCP.
TCP
è un protocollo aperto, il che significa semplicemente che le descrizioni
tecniche del protocollo appaiono nei documenti pubblici e quindi chiunque può
creare un TCP/IP sul proprio hardware e software.
Inoltre TCP è un protocollo
connection-oriented e tramite alcuni flag caratterizza i pacchetti che curano
la connessione. Questi flag sono: SYN (richiesta di sincronizzazione),
ACK
(accusa di ricevuta), FIN (termine connessione),
RST (rifiuto di connessione).
Sfrutteremo tali flag allo scopo di sapere se un certo host è on line oppure se
una certa porta è in listening.
- Scan TCP connect()
- Scan TCP SYN
- Scan TCP FIN
- Scan TCP Xmas Tree
- TCP Null Scan
- UDP scan
Scan TCP connect( ) (scansione TCP con connessione).
Questo tipo di scansione si
collega alla porta obiettivo e completa una procedura di hand-shake in tre fasi
(three-way handshake),
SYN,
SYN/ACK e
ACK.
È facilmente rilevabile dal
sistema, che lo subisce, e per questo motivo difficilmente un potenziale intruso
lo usa.
Scan TCP SYN
(scansione TCP via SYN).
Questa tecnica è detta anche
di scansione “semiaperta” (“half-open scanning”), perché non viene realizzata
una connessione TCP completa. Opera come segue:
Supponiamo di avere una porta
P in un nostro host :
Mandando un pacchetto TCP
SYN,
alla porta P dell'host interrogato, se questo risponderà con un messaggio di
SYN/ACK
allora si potrà dedurre che P è in
LISTENING .
Al contrario ricevendo un
messaggio di
RST/ACK potremmo dire con certezza che la porta P non è in
LISTENING.
In questo caso evitiamo di
mandare l’ACK finale per evitare che
l'handshake si completi.
Questa tecnica ha il
vantaggio di essere più discreta rispetto alla connessione TCP completa e
potrebbe non essere registrata sul sistema target.
Scan TCP FIN
(scansione TCP via
FIN).
Questa tecnica prevede
l’invio di un pacchetto
FIN sulla porta obiettivo. Secondo la
RFC-793
funziona in questo modo:
Inviando un pacchetto TCP FIN alla porta P dell'host
obiettivo se si riceve un
RST dalla porta P allora si deduce che
la porta è chiusa.
Solitamente questa tecnica
funziona solo con le implementazioni UNIX di
TCP/IP.
Scan
TCP Xmas Tree (scansione TCP ad albero di Natale).
Questa tecnica prevede
l’invio di un pacchetto
FIN,
URG e
PUSH
alla porta target. Secondo la
RFC-793 il sistema obiettivo
dovrebbe rispondere con
RST per tutte le porte chiuse.
TCP
Null Scan (scansione TCP nulla).
Adoperando questa tecnica
disattiveremo tutti i flag. Secondo la
RFC-793, il sistema
obiettivo dovrebbe rispondere con
RST per tutte le
porte chiuse.
UDP scan (scansione UDP).
Questa tecnica prevede
l’invio di un pacchetto
UDP alla porta target. Se la risposta è
un messaggio “ICMP port unreachable” la porta è chiusa. Se invece non si riceve
tale messaggio si può concludere che la porta è aperta.
Essendo
UDP
un protocollo “connectionless”, cioè non basato sulla connessione, la
precisione di questa tecnica dipende fortemente da numerosi fattori legati al
livello di utilizzo delle risorse della rete e di sistema. Inoltre, la
scansione UDP è un protocollo estremamente lento, specialmente nel caso si
tenti di esaminare un dispositivo che utilizzi intensamente i filtri sui
pacchetti. Se decidete di eseguire delle scansioni UDP su Internet, non
aspettatevi risultati affidabili.