Anatomia di una connessione internet - TCP e UDP - prima parte

15 Maggio 2008 by ciambellasenzabuco

Primo, non me ne vogliano i puristi… non userò un linguaggio tecnico, sarò volutamente poco preciso ed accurato nelle descrizioni, infatti lo scopo è di cercare di capire come funzionano le comunicazioni in rete senza per questo che chi legge sia un tecnico.
Bene, detto ciò veniamo al dunque. Come si comunica su internet? La risposta è banale, si instaura una comunicazione tra due sistemi, dei quali uno funge da client e uno da server (se odiate gli anglicismi possiamo chiamarli cliente e servente, ma onestamente mi fa un po’ senso…). Chiaro, però come parlano questi due sistemi? Ci sono degli standard, a seconda della tipologia di comunicazione richiesta e delle necessità operative vengono utilizzati protocolli (e quindi standard) diversi. Esistono diversi tipi di protocollo, alcuni specializzati altri invece generici. I principali sono tcp, udp e icmp.
I primi due sono tipicamente utilizzati per lo scambio di informazioni, il terzo in genere viene utilizzato per testare le reti e gli eventuali problemi connessi.
Caratteristiche principali:
TCP: Il protocollo TCP offre il servizio di trasporto di un flusso di byte. Questo flusso viene spezzettato in una serie di blocchi (la dimensione è variabile in funzione di diversi parametri) ed inviato all’altro sistema. TCP è orientato alla connessione, vuol dire che prima di operare una trasmissione è richiesto che si instauri una connessione tra il client ed il server, connessione che viene esplicitamente chiusa quando non è più necessaria. Il protocollo è strutturato in modo di trasmettere i dati in maniera tale che sia possibile ricostruire l’intero flusso da parte del sistema ricevente anche quando qualche blocco venga perso (mediante ritrasmissione) o qualora i dati arrivino in un ordine casuale. Accenno poi al fatto che TCP è in grado di determinare lo stato di congestione di una rete, suddividendo così i dati in blocchi di dimensione diversa a seconda ella capacità stessa della rete.
UDP: è un protocollo per molti versi meno sofisticato rispetto a TCP. Non è orientato alla connessione e per questo è un protocollo “inaffidabile” (ciò significa che ad esempio il server invia un pacchetto UDP senza curarsi del fatto che il destinatario lo stia aspettando e che comunque ci sia qualcuno a processare l’informazione). UDP non trasporta una sequenza di dati come TCP, bensì il singolo datagram cioè il singolo frammento che il livello applicativo fa trasmettere. Questo vuol dire che, ad esempio, il server trasmetterà una serie di datagram verso il client e né l’uno né l’altro si interesseranno del fatto che tutti i datagram giungano a destinazione o del fatto che giungano nell’ordine corretto. Fondamentalmente, quindi, UDP offre solo i servizi basilari del livello di trasporto, e cioè l’utilizzo delle porte (multiplazione delle connessioni) e verifica degli errori del singolo datagram (checksum). TCP, oltre a questi, offre come detto anche il controllo di flusso (sequenza dei pacchetti) e il controllo di congestione della rete.
Dopo questa breve introduzione credo che la domanda sia spontanea: e allora quale di questi protocolli si usano in internet? La risposta è tutti e due, dipende dalle necessità.
TCP viene utilizzato quando è importante non solo la trasmissione dei dati, ma anche l’ordine di trasmissione e di ricezione, si usa quando è fondamentale ricevere tutti i pacchetti inviati o ancora quando ci sia la necessità di stabilire una connessione tra server e client. Le connessioni di trasferimento file sono in genere TCP. UDP si usa, invece, quando è fondamentale l’invio di una certa quantità di dati per unità di tempo, anche se magari non è fondamentale ricevere tutti i datagram inviati dal server. Ad esempio il broadcast audio e video di solito utilizza UDP in quanto la perdita di qualche datagram non è rilevante nella riproduzione del flusso multimediale.

Il port scanning

9 Maggio 2008 by ciambellasenzabuco

Riporto uno degli articoli che avevo postato in un mio precedente blog… vediamo se riprendo il filo :)

Il port scanning è una tecnica informatica utilizzata per stabilire quali porte siano aperte su un sistema connesso ad una rete. Consiste nell’inviare dei pacchetti (TCP, UDP, ICMP …) appositamente assemblati ad una o più porte per determinare lo stato della porta. A seconda della risposta da parte del sistema bersaglio lo scanner può determinare se la porta è:

  • aperta (ovvero c’è un servizio in ascolto su quella porta)
  • chiusa (il sistema risponde che non vengono accettate connessioni su quella porta)
  • filtrata (un firewall o un apparato di rete impedisce allo scanner di determinare lo stato della porta)
  • bloccata (non c’è risposta da parte del sistema)

Al solito wikipedia è una ottima fonte di informazioni, tanto per cominciare. A mio avviso il più potente scanner ad ora presente è nmap, che permette di eseguire oltre alla scansione tradizionale (instaurando o cercando di instaurare una vera e propria connessione al sistema bersaglio) altri tipi di scansione più raffinata che consentono di rimanere ragionevolmente invisibili ai sistemi di rilevamento intrusioni (IDS) e di bypassare (…non sempre…) mediante tecniche di frammentazione i filtri firewall.

Nmap è un tool open source, è liberamente scaricabile qui mentre qui trovate il manuale in italiano. Come sempre, prima di utilizzare qualsiasi tool si dovrebbe leggere la documentazione per capire di cosa si tratti… :-)

Ci sono altri port scanner in giro, basta cercare :-) tuttavia credo che nessuno possa competere con nmap sia in termini di velocità di esecuzione che in termini di tipi di scan possibili. Esiste la versione di nmap anche per windows, tuttavia per alcune limitazioni nella costruzione dei paccheti ip raw, vi consiglio di usarlo sotto linux (peraltro sotto linux per poter costruire un pacchetto raw è necessario essere root, quindi è necessario lanciare nmap come root ma solo per determinati tipi di scansione…)

E’ bene tenere a mente che, mentre per un vuoto legislativo dovuto alla classica ignoranza tecnologica del legislatore non è reato effettuare un port scan (lo fanno anche gli amministratori di rete) è un reato tentare di connettersi in maniera abusiva a un sistema. Pertanto le informazioni che si possono collezionare con uno scanner di questo tipo non dovrebbero essere utilizzate per cercare di penetrare in un sistema sul quale non si hanno i permessi di accesso.

Ciao

8 Maggio 2008 by ciambellasenzabuco

eh lo so… a che numero di blog aperti e poi lasciati orfani sono arrivato? Boh… vediamo che succede sta volta.
Quel che è certo che almeno ora non mi voglio limitare… speriamo bene :)