HackerProgrammingBook Part 03

download HackerProgrammingBook Part 03

of 167

Transcript of HackerProgrammingBook Part 03

  • 7/31/2019 HackerProgrammingBook Part 03

    1/167

    Hacker programmino Book

    Parte IIILa rete e i protocolli

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    2/167

    Hacker programmino Book

    Concetti generaliUn Network Operating System (NOS) controlla interazione tra tutte ble macchine di unarete.Il sistema operativo di rete il responsabile del controllo relativo al mezzo con cui i dativengono trasmessi sulla rete stessa e gestisce il modo con cui una macchina invia questi

    verso un'altra.Il NOS ha anche la responsabilit di gestire il tempismo con cui I pacchetti di dati vengonoinseriti sulla rete.La Network Interface Card (NIC) invece ladattatore che generalmemnte alloggiatodentro ad uno slot dei PC che gestisce la comunicazione sulla rete stessa.

    Tutti i sistemi che devono trasmettere e ricevere sulla rete devono disporre di questeinterfacce.Nel modello Client-Server un client una macchina inizializza un richiesta verso un server.

    Una Local Resource qualsiasi periferica (optical drive, printer, scanner, modem, e cosivia) che connessa alla vostra macchina.

    Un Nodo qualsiasi device sulla rete (server, workstation, printer, scanner, o qualsiasi altrotipo di periferica) a cui si accede direttamente dalla rete.Un nodo possiede un nome unico o un IP mediante il quale la rete lo pu identificare.

    Un Concentratore un device che pu concentrare diverse reti

    UnHub un device di rete multiscopo che dsi trova al centro di una rete a stella.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    3/167

    Hacker programmino Book

    Un Bridge un device che serve a connettere reti che utilizzano protocolli simili.

    Un Router un device di rete che connette dverse LAN a cui affidata la gestione dellestrade che I pacchetti devono fare per passare da un sistema ad un altro.

    Un Gateway esegue il forward di dati tra reti IP.

    Un Backbone un set di nodi e links connessi tra loroUna rete a stella non possiede backbone.

    I protocolli di InternetIn genere una trattazione troppo teorica complica notevolmente la comprensione di certiargomenti e in questo caso il sistema completo legato al funzionamento della rete veramente complesso anche perch dotato di un infinit di meccanismi distribuiti su un certonumeri di livelli.Ogni livello si interessa di una certa problematica e per fare questo deve utilizzare un certonumero di protocolli alcuni dei quali legati al funzionamento generale mentre altri relativi aservizi specifici.Chiaramente questi ultimi pur non essendo considerati fondamentali possiedono una certaimportanza anche perch sono di fatto molto utilizzati.Mi riferisco a certi protocolli essenziali legati al basso livello come nel caso del TCP e IP e diquelli a pi alto livello come per quanto riguarda FTP, http, SMTP ecc.Questi saranno gli argomenti di questo capitolo e dato che dal punto di vista dellacomprensione sono sicuramente tra le cose pi complesse sar meglio prima fare duechiacchere sul metodo da utilizzare per affrontare questi argomenti.Come tutte le problematiche legate allinformatica la buona comprensione dipende dallacapacit di astrazione che una persona possiede.Un trucco di fatto esiste ed quello di cercare di portare come esempi alcuni reali cheriescano a creare dei modelli mentali sufficientemente validi.Ma partiamo dallinizio dicendo solo due cose su quelle che sono state le origini di Internet.Lidea originale del meccanismo che sta alla base del tutto fu quella di Donald Davies dicreare un sistema che permettesse in una rete pubblica di scambiare in modo veloce edaffidabile delle risorse esistenti su diversi computer.La sua idea fu quella di suddividere queste informazioni in messaggi uniformi in modo taleche ciascun computer potesse gestire contemporaneamente la ricezione e linvio di diversimessaggi suddividendo il tempo di elaborazione per ciascuno di questi.Queste parti di messaggio furono definite con il termine di pacchetto.Le prime implementazioni di un meccanismo utilizzabile per una gestione di questo tipo fuquella che pass dalla fase teorica a quella pratica verso la fine degli anni 60 allinterno diquella che venne chiamata Arpanet.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    4/167

    Hacker programmino Book

    Nel frattempo erano comparse un certo numero di reti differenti le quali fecero subito sentirela necessit di creare un protocollo che permettesse il dialogo di queste.Arpanet come protocollo aveva introdotto alcuni concetti fondamentali per quello che avrebbedovuto essere linternetworking e precisamente il layering, o stratificazione, e lavirtualizzazione.Tutte le varie problematiche presenti nellambito di quello che dovrebbe essere il meccanismo

    di trasferimento delle informazioni in un ambito di internetworking possono essere suddivisein un certo numero di strati di rete.Ciascuno di questi strati dispone di sistemi particolari ciascuno dei quali regola certefunzionalit.Come vedrete successivamente almeno le conoscenze di base su quelle che sono questestratificazioni non possono essere bypassate in quanto spesso questi concetti vengonoinclusi in altre argomentazioni.Ad esempio quando tratteremo la libreria LIBNET ci accorgeremo che necessario saperecosa sono questi livelli, layers o strati o come li si vuole chiamare.In effetti anche dal punto di vista della ricerca dei metodi di interazione con i protocolli sarnecessario avere ben presente questa suddivisione.Oltre ai concetti funzionali legati a questi strati esistono legami specifici anche con i protocolliin quanto allinterno di ciascun strato ne esistono di particolari molti dei quali tutti conoscono.

    La descrizione precisa viene fatta dentro ai files RFC i quali sono esposti su appositi sitiinternet.La rete come abbiamo detto di fatto un sistema adatto al trasferimento delle informazioni traun sistema ed un altro e quindi la cosa che risulta essere sicuramente necessaria unmeccanismo che permetta di identificare in modo univoco ogni singolo sistema collegato aquesta.

    Questo numero quello che di regola siamo abituati a chiamare IP il quale legato a quelliche a sua volta chiamiamo con il termine di HOST.Un host di fatto qualsiasi cosa che agganciato ad una rete in grado di ricevere etrasmettere dei pacchetti IP come ad esempio un router, una workstation e cos via.Un indirizzo IP un numero a 32 BITS composto da due parti e precisamente da unidentificatore di rete e da un numero di sistema su questa.Nei sistemi in cui esisteva una sola rete sarebbe stato possibile usare un semplicissimonumero per identificare il sistema.

    La possibilit di dialogo tra reti differenti ha reso necessaria limplementazione anche di unidentificatore che permettesse non solo di identificare il sistema ma anche la rete stessa.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    5/167

    Hacker programmino Book

    Di regola siamo abituati a vedere gli IP espressi come quattro numeri di tre cifre al massimocome ad esempio :

    212.210.165.131

    Gli indirizzi validi in teoria potrebbero essere tutti i numeri compresi tra 0.0.0.0 e

    255.255.255.255 ovvero 4.3 miliardi di numeri ma poi in pratica solo un parte di questipossono essere usati in sistemi come ad esempio Internet.

    Chiaramente in un sistema dove una parte viene destinata allidentificazione della rete mentrelaltra a quella del host il numero di sistemi rappresentabili in un ambito di un'unica rete puvariare in base a quanti bits vengono riservati per la rappresentazione di una parte edellaltra.Questi dimensionamenti differenti permettono la creazione di reti di classe differente conciascuna di queste dotata della possibilit di supportare un certo numero di hosts.A seconda dell esigenza di una certa societ di supportare un certo numero di sistemi possibile adottare reti di una certa classe.Lente che assegna gli indirizzi il NIC.In base alla grandezza della societa gli viene assegnata una rete di classe differente.In base al numero dei segmenti che costituiscono la rete ed al numero dei nodi esistono treclassi di reti e precisamente :

    CLASSE FORMATO NUM. MAX RETI NUM. MAX NODI

    CLASSE A Rete.Nodo.Nodo.Nodo 127 16.777.216CLASSE B Rete.Rete.Nodo.Nodo 16.384 65.534CLASSE C Rete.Rete.Rete.Nodo 2.097.152 254

    Nel caso di una rete di classe A i primi otto bits, quelli assegnati, corrispondenti al numero delsegmento di rete possono assumere valori compresi tra 0 e 126 (vedremo che gli altrivengono utilizzati per motivi particolari) per cui e possibile implementare 127 reti di classe A.Le societa con reti appartenenti a questa classe sono IBM, HP, APPLE ecc. (considerate chece ne sono solo 127 indirizzi di classe A).Microsoft sono invece esempi di indirizzi di reti di classe B.Gli indirizzi di classe C possiedono invece le prime tre quartine assegnate dal NIC.Di fatto esiste anche una classe D i cui indirizzi sono utilizzati per il multicast.Un indirizzo multicast e un intervallo compreso tra 224.0.0.0 e 239.255.255.255.

    La trasmissione multicast si basa sull identificazione di tutti i router di una rete ed efinalizzata ad inviare i dati verso piu destinazioni.Esistono alcuni indirizzi che possiedono scopi particolari come ad esempio :

    127.0.0.1 Funzione di circuito chiuso in cui ogni messaggio viene rispedito al mittente.x.y.z.255 Valore di broadcast che viene utilizzato per inviare un pacchetto a tutti i sistemi di una sotto rete.x.y.z.1 E l indirizzo del router di una sotto rete.

    Normalmente quasi tutte le reti sono in classe C ovvero con la possibilit di supportare 255hosts nella stessa rete ma in ogni caso esistono anche reti di dimensioni maggiori, come adesempio quella IBM, che sono appartenenti a classi differenti come appunto in classe A.Il numero di rete e di sistemi supportati sono per ciascuna classe :

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

    Class Prefix Network Number Host NumberA 0 Bits 0-7 Bits 8-31B 10 Bits 1-15 Bits 16-31C 110 Bits 2-24 Bits 25-31D 1110 N/AE 1111 N/A

    Class Range of Net Numbers Range of Host NumbersA 0 to 126 0.0.1 to 255.255.254B 128.0 to 191.255 0.1 to 255.254C 192.0.0 to 254.255.255 1 to 254

  • 7/31/2019 HackerProgrammingBook Part 03

    6/167

    Hacker programmino Book

    Qualsiasi indirizzo che parte con il numero 127 considerato come indirizzo di loopback enon deve essere utilizzato per lindirizzamento al di fuori dellhost.

    Un numero dhost composto in binario da tutti numero 1 detto indirizzo di broadcast e servead inviare quel pacchetto a tutti i sistemi connessi a quella particolare rete.Una rete di quelle in genere utilizziamo adottano il formato Ethernet il quale a livello di schedautilizzano un indirizzo composto da sei numeri esadecimali separati dal segno - come adesempio 02-FE-87-4A-8C-A9.

    Figura 1 Indirizzo in classe A

    Figura 2 Indirizzo in classe B

    Figura 3 Indirizzo in classe C

    Le maschere di sottorete indicano quali bit di un indirizzo IP rappresentano la porzione dellarete e quali rappresentano invece la porzione dellhost.Con gli indirizzi IP di Classe A,B, e C si utilizzano maschere di sottorete predefinite, nel modo

    che segue:

    - Classe A 255.0.0.0- Classe B 255.255.0.0- Classe C 255.255.255.0-La maschera di sottorete di Classe A dice che i primi 8 bit dellindirizzo IP rappresentano laporzione della rete dellindirizzo.I rimanenti 24 bit rappresentano la porzione dellhost dellindirizzo.Diciamo che un host abbia lindirizzo IP 11.25.65.32.Usando la maschera di sottorete predefinita, lindirizzo della rete sarebbe 11.0.0.0 e lacomponente dellhost sarebbe 25.65.32.La maschera di sottorete di Classe B dice che i primi 16 bit dellindirizzo IP rappresentano la

    porzione della rete dellindirizzo.I rimanenti 16 bit rappresentano lindirizzo dellhost allinterno della rete.Se un host avesse lindirizzo IP 172.16.33.33, la porzione della rete dellindirizzo sarebbe172.16.0.0 e la componente dellhost sarebbe 33.33.La maschera di sottorete di Classe C dice che i primi 24 bit dellindirizzo IP rappresentano laporzione della rete dellindirizzo.I rimanenti 8 bit rappresentano lindirizzo dellhost allinterno della rete.Se un host avesse lindirizzo IP 192.168.2.3, la porzione della rete dellindirizzo sarebbe192.168.2.0 e la componente dellhost sarebbe 3.Quando un host mittente cerca di comunicare con un host destinatario, usa la sua mascheradi sottorete per determinare se l'host destinatario si trova sulla rete locale o su di una reteremota.Questo processo conosciuto con il nome di messa in AND.

    La funzione di messa in AND gode delle seguenti propriet:

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    7/167

    Hacker programmino Book

    se i due valori confrontati sono entrambi 1, il risultato 1; se uno dei due valori 0 e l'altro 1, il risultato zero; se entrambi i valori confrontati sono 0, il risultato zero.

    Come si pu facilmente notare, il funzionamento il medesimo dell'AND operatorenell'algebra booleana.

    Gli indirizzi IP dell'origine e della destinazione, sono confrontati con la maschera di sottoretedell'origine per mezzo del processo di messa in AND.Per ciascuno dei due indirizzi, si crea un risultato AND.Se questi sono uguali significa che gli host si trovano sulla stessa rete.Se invece questi risultati AND sono diversi, significa che l'host destinatario si trova su unarete remota.Tutto il traffico destinato a quell'host remoto,dovrebbe dirigersi verso il router indicato nella tabella di instradamento (routing)

    dell'host origine.Per fare un esempio supponiamo di avere due host.

    Host AIP (dec): 172.16.2.4IP (bin): 10101100 00010000 00000010 00000100SNM: 255.255.0.0Host BIP (dec): 172.16.3.5IP (bin): 10101100 00010000 00000011 00000101SNM: ? (255.255.0.0)

    Se si effettua il processo di messa in AND, il risultato per l'host A (utilizzando la suamaschera di sottorete 255.255.0.0) ci che segue:

    Indirizzo IP dellhost A 10101100 00010000 00000010 00000100Maschera di sottorete dellhost A 11111111 11111111 00000000 00000000Risultato della messa in AND 10101100 00010000 00000000 00000000

    Il risultato per lhost B, si pu vedere invece qui sotto

    Indirizzo IP dellhost B 10101100 00010000 00000011 00000101Maschera di sottorete dellhost A 11111111 11111111 00000000 00000000Risultato della messa in AND 10101100 00010000 00000000 00000000

    Come si pu facilmente notare, i due risultati corrispondono.Questo indica che, per quanto riguarda l'host A, i due host si trovano sulla stessa rete fisica.Le comunicazioni possono quindi svolgersi direttamente tra i due host.La maschera di sottorete dellhost B, infatti, la medesima dellhost A.Per riuscire ad eseguire labbinamento del numero di IP usato dal protocollo IP e questoindirizzo Ethernet viene utilizzato il protocollo ARP il quale significa Address ResolutionProtocol.Questo protocollo tiene in una cache la tabella di abbinamento di questi due metodi dispecifica degli indirizzi.

    ------------------------------------|IP address Ethernet address |------------------------------------|223.1.2.1 08-00-39-00-2F-C3||223.1.2.3 08-00-5A-21-A7-22||223.1.2.4 08-00-10-99-AC-54|------------------------------------

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    8/167

    Hacker programmino Book

    Supponiamo di gestire una rete con tre host collegati.Quando inizialmente il primo host cerca di inviare un pacchetto IP al terzo, il protocollo ARPsu questo sistema cerca di trovare lindirizzo Ethernet abbinato a questo IP non trovandolo inquanto fino ad ora non ce stato nessun altro tentativo di comunicare.Il protocollo ARP invia un pacchetto con un indirizzo di broadcast che tutti i sistemi sulla retericevono.

    Se il sistema che riceve questo pacchetto ha lIP specificato, che in questo caso il terzo,restituisce al primo sistema un pacchetto di replica in cui ce lindirizzo Ethernet il quale loprende e lo salva dentro alla tabella per poi successivamente utilizzarlo per inviare i pacchettidal primo sistema al terzo.Questa tabella in molti casi salvata in modo statico e viene mantenuta fino a quando perqualche motivo non viene svuotata.Consideriamo ora il caso di due reti separate connesse insieme da un PC il quale ha afunzione del router.

    La funzione del router quella di selezionare un percorso da fare prendere ad un pacchettoanalizzando lindirizzo di destinazione e la tabella di instradamento di questo ovvero ilpercorso che deve essere fatto fare a questo per raggiungere un determinato sistema.Essendo due reti separate ciascuna di queste possiede allinterno del proprio IP il numeroche la identifica.Questa scelta necessaria in quanto il router deve sapere quale interfaccia utilizzare perraggiungere un nodo specifico e di fatto ogni numero di rete abbinato ad una di queste.Se il sistema A vuole inviare un pacchetto al sistema E dovr prima inviarlo al sistema C ilquale eseguir il forward di questo al sistema E.Il sistema C invier il pacchetto ad E usando il suo indirizzo Ethernet presente dentro allacache del protocollo ARP.Sono stati riservati tre gruppi di indirizzi IP per luso sulle reti locali, dietro ai firewall ed aiserver proxy.

    Eccoli elencati qui di seguito:

    da 10.0.0.0 a 10.255.255.255; da 172.16.0.0 a 172.31.255.255; da 192.168.0.0 a 192.168.255.255.

    Questi indirizzi sono stati creati per fornire alle reti non collegate ad Internet, un gruppo diindirizzi IP che non fossero in conflitto con quelli attualmente in uso sulla Rete.Qualora le reti che si servono di questi indirizzi riservati dovessero un domani sllacciarsi adInternet, non avrebbero da preoccuparsi del fatto che qualche indirizzo possa essereconflittuale con qualche altra rete su Internet.

    Inizialmente abbiamo detto che la rete pu essere considerata una stratificazione di diversi

    protocolli ciascuno dei quali si interessa di gestire una determinata funzionalit.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    9/167

    Hacker programmino Book

    Sicuramente una di quelle fondamentali quella che gestisce linstradamento dei pacchetti didati detto normalmente IP ROUTING.Infatti quello che generalmente pensiamo essere un solo protocollo, TCP/IP, di fatto composto da due protocolli tra i quali IP che appunto il protocollo di instradamento.Quella che noi siamo abituati a definire con il termine di rete di fatto un insieme di strati suciascuno dei quali determinati protocolli svolgono le funzioni necessarie per il corretto

    funzionamento di tutti i servizi che siamo abituati ad utilizzare come ad esempio quelli dinavigazione, della posta elettronica e cos via.Indipendentemente dal tipo di questi, una cosa che necessario comprendere che leinformazioni trasmesse vengono spedite a blocchi allinterno di quelli che vengono definiticome pacchetti i quali partono da un sistema dorigine e passando attraverso un certonumero di altri raggiungono la destinazione sulla quale vengono ricomposti e utilizzati per loscopo per cui sono stati originati.Questa definizione porta a comprendere che di fatto i pacchetti seguono un percorso, per cuiallinterno del sistema di rete deve necessariamente esistere un meccanismo che permette digestire quello chiamato con il termine di instradamento o routing.I meccanismi presenti ai livelli pi bassi sono quelli che regolano il funzionamento legato altrasferimento delle informazioni indipendentemente dalla tipologia di servizio a cui questesono relative.

    Normalmente siamo abituati a riferirci al protocollo TCP/IP che di fatto una suite di diversialtri, tra cui IP il quale quello che si interessa di instradare i pacchetti di dati.I routers di fatto sono i meccanismi hardware che si interessano di gestire le stradetelematiche che i pacchetti seguono per passare da un sistema mittente ad uno didestinazione.Questi prendono la decisione di dove inviare i pacchetti, analizzando la loro testatacontenente le informazioni e valutando le tabelle di instradamento gestite dai routers stessi.Mentre fino ad un po di tempo fa gli hackers prendevano di mira i WEB servers ora hannospostato la mira verso i routers e quello definito con il termine di BGP (Border GatewayProtocol) il quale si interessa di traslare le tabelle di routing tra i vari sistemi venduti dadiverse societ.Esiste un comando allinterno dei sistemi operativi che permette di stampare la tabella dirouting e precisamente :

    route print

    Il risultato d una tabella come la seguente :

    C:\>route print===============================================================Interface List0x1 ........................... MS TCP Loopback interface0x2 ...00 a0 24 e9 cf 45 ...... 3Com 3C90x Ethernet Adapter0x3 ...00 53 45 00 00 00 ...... NDISWAN Miniport0x4 ...00 53 45 00 00 00 ...... NDISWAN Miniport0x5 ...00 53 45 00 00 00 ...... NDISWAN Miniport

    0x6 ...00 53 45 00 00 00 ...... NDISWAN Miniport==================================================================Active Routes:Network Destination Netmask Gateway Interface Metric0.0.0.0 0.0.0.0 10.99.99.254 10.99.99.1 110.99.99.0 255.255.255.0 10.99.99.1 10.99.99.1 110.99.99.1 255.255.255.255 127.0.0.1 127.0.0.1 110.255.255.255 255.255.255.255 10.99.99.1 10.99.99.1 1127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1224.0.0.0 224.0.0.0 10.99.99.1 10.99.99.1 1255.255.255.255 255.255.255.255 10.99.99.1 10.99.99.1 1Default Gateway: 10.99.99.254=================================================================

    Persistent Routes:None

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    10/167

    Hacker programmino Book

    Il CERT (Computer Emergency Response Team) ha recentemente rilasciato un documentodove veniva mostrato come sta diventando sempre maggiore linteresse degli hackers neiconfronti di questo dispositivo.Compromettere il funzionamento di uno di questi sistemi significa in pratica coinvolgere unaserie di meccanismi il cui scorretto funzionamento potrebbe causare problemi di sicurezza o

    anche solo di prestazioni della rete stessa.Gi normalmente, senza parlare di cattivi funzionamenti, la corretta programmazione di unrouter porta a migliorare notevolmente le prestazioni nellambito dei trasferimenti deipacchetti.Quando si utilizza uno di questi, la lettura e la comprensione dei documenti forniti insieme ilprimo passo per una corretta configurazione e quindi di conseguenza la limitazione delleprobabilit che questi siano causa di certi problemi.Alcune volte gli hacker possiedono effettivamente la capacit di teorizzare e successivamentedi realizzare degli attacchi ma nella maggior parte dei casi gli accessi indesiderati ocomunque le manomissioni dei sistemi informatici avvengono a causa della presenza di bugsnellambito dei sistemi operativi, dei servers e dei sistemi hardware che li gestiscono.Avere laccortezza di seguire giorno dopo giorno le informazioni rilasciate dalle casecostruttrici e il fatto dinstallare prontamente le hotfix e le patchs significa evitare un

    grossissima percentuale di problemi di questo tipo.Spesso quando si acquistano linee dedicate da societ come Interbusiness, del gruppoTelecom, i routers vengono forniti da queste e la loro programmazione diventa impossibile inquanto laccesso alle funzioni di configurazione non sono consentite se non ai centri digestione della societ stessa.Questi aggiornamenti non sono solo da considerare nellambito dei servers, dei sistemioperativi o comunque di software che girano sui sistemi in rete ma anche nei sistemi digestione di questi strati.Avrete sicuramente sentito parlare di bugs del software BIND, delle varie versioni di Ipv4 eIpv6.Insomma spesso le problematiche possono essere presenti anche nei software chegestiscono i protocolli a qualsiasi livello questi siano.Ma la rete, ritornando al discorso vero e proprio legato allargomento di questo capitolo, di

    quanti protocolli composta ?Internet un packet-switched network alla quale esistono due tipi di approcci comuni.Il primo un circuito virtuale su cui avviene il packet switching anche conosciuto comeservizio di rete orientato alla connessione.Il secondo invece quello dello switching di datagrammi che al contrario di quello precedentecostituisce un tipo di servizio di rete non basato sulla connessione.Nel primo caso il sistema che garantisce la connessione sempre attivo mentre nel secondoLinvio dei pacchetti pu avvenire in qualsiasi istante anche in modo completamenteasincrono.Nel primo tipo di circuito, ovvero quello definito con il termine di Virtual Circuit PacketNetwork, viene utilizzata una fase iniziale per settare un instradamento fisso tra i nodiintermedi per tutti i pacchetti che vengono scambiati durante una sessione tra nodi terminali,come ad esempio avviene nelle reti telefoniche.

    Questa tipologia di circuito opera stabilendo una connessione tra dure devices nellacomunicazione.Quando un device inizia una sessione negozia i parametri di comunicazione come adesempio la massima dimensione di un messaggio, la dimensione di una finestra e il percorsodi rete.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    11/167

    Hacker programmino Book

    Il discorso della dimensione di una finestra collegato al concetto di quelle cohe sono lefinestre rotanti allinterno di certi protocolli di comunicazione.In pratica la connessione viene suddivisa in un certo numero di spicchi o finestre dentro alle

    quali vengono memorizzati i dati ricevuti in modo tale che poi questi possano esserericomposti nella giusta sequenza.In caso di errore della trasmissione di certi dati solo la finestra interessata verr richiestanuovamente.Spesso i protocolli che gestiscono questo meccanismo sono in grado di alteraredinamicamente le dimensioni di queste finestre in base alla valutazione statistiche legate aglierrori ricevuti.Maggiore la quantit di errori minore la dimensione delle finestre in modo tale che i datiche devono essere ritrasmessi possano statisticamente essere di quantit inferiore del casoin cui a causa di un solo errore debba invece essere ritrasmessa una quantit moltomaggiore.Questa negoziazione stabilisce un circuito virtuale con percorso ottimale nella,mbitodellinternetworking.

    Questo tipo di circuito ottimizza luso della banda abilitando molti devices sugli stessi canalidella rete per instradare i pacchetti.

    In qualsiasi momento uno switch pu instradare i pacchetti verso differenti devices didestinazione aggiustando il percorso al fine di ottenere le prestazioni migliori.Su ogni nodo intermedio presente una voce, in una tabella, che possiede lo scopo diindicare la strada per la connessione creata.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    12/167

    Hacker programmino Book

    I pacchetti possono utilizzare una testata corta in quanto necessaria solo lindicazione diquale circuito virtuale deve utilizzare al posto degli indirizzi completi del destinatario.I nodi intermedi processano ogni pacchetto in accordo con le informazioni che sono salvatenel nodo nel momento in cui la connessione stata stabilita.Possono essere anche presenti delle migliorie indirizzate a rendere pi affidabili alcune cose.E anche garantita la spedizione dei pacchetti in una giusta sequenza e senza errori oltre alfatto che venga eseguito un controllo per evitare il congestionamento.I ritardi sono maggiormente variabili di quelli gestiti tramite circuiti dedicati, tuttavia differenticircuiti virtuali possono competere per la stessa risorsa. necessaria una fase di setup alla connessione e alla sconnessione prima del data transfert.Il network pi comune di questo tipo quello X25 il quale utilizzato in molte reti pubbliche.Le trasmissioni a datagramma utilizzano schemi differenti per determinare linstradamentoattraverso una rete di links.

    Utilizzando la trasmissione a datagramma ogni pacchetto viene trattato come un entitseparata la quale contiene una testata o header con dentro le informazioni complete relativeal destinatario desiderato.I nodi intermedi esaminano questa testata per selezionare lapposito link pi prossimo aldestinatario.Con questo sistema i pacchetti non seguono un preciso una strada prestabilita ed i nodiintermedi, quelli denominati con il termine di routers, non richiedono di conoscere prima lastrada che dovr essere utilizzata.Un network a datagramma analogo al fatto di spedire un messaggio come se questo fosseuna serie di cartoline inviate tramite il normale circuito postale.Ogni cartolina inviata al sistema di destinazione in modo indipendente.Per ricevere lintero messaggio il destinatario deve ricevere tutte le cartoline e poi rimetterlenel giusto ordine.

    Non tutte queste cartoline devono essere spedite usando lo stesso metodo postale e tuttenon sono obbligate a metterci lo stesso tempo per giungere e a destinazione.Sempre in questo tipo di network I pacchetti possono seguire strade differenti per raggiungerela loro destinazione e loro spedizione non viene garantita.Generalmente sono richieste delle migliorie rispetto al servizio di base e queste devonoessere fornite dai sistemi utilizzando software aggiuntivi.Il pi comune network a datagramma internet la quale utilizza il protocollo IP.Ci sono delle differenze sostanziali tra le reti a circuiti virtuali e i network a datagramma.La cosa che influisce maggiormente sulla complessit la tipologia dei nodi intermedi in

    quanto nelle reti a datagramma il protocollo di collegamento relativamente semplicementre la creazione dei nodi terminali particolarmente costosa nel caso in cui sivoglia attenere un circuiti end-to-end nei sistemi a circuiti virtuali.

    Internet trasmette i datagrammi attraverso nodi intermedi utilizzando il protocollo IP.

    Molti user di Internet utilizzano funzioni aggiuntive come quelli ad esempio per migliorare laqualit nellambito del controllo delle sequenze e degli errori nei sistemi end-to-end.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    13/167

    Hacker programmino Book

    Questa miglioria quella che viene fornita mediante luso di un altro protocollo eprecisamente TCP che sta per Trasmission Control Protocol.Avevamo gi detto prima che d fatto labitudine di considerare un solo protocollo TCP/IP unfatto derivato da falsi concetti che girano sulla rete.Ci sono alcune situazioni importanti nelle quali meglio raggiungere dei compromessi tra ilservizio a datagramma e quello a circuiti virtuali.

    Questo esempio portato dalla trasmissione della voce digitalizzata.Utilizzare dei sistemi per la correzione di errori e la ricostruzione della sequenzialit puessere molto pi dannoso nel caso in cui vi siano degli errori di qualche bits nellatrasmissione.Infatti in questo caso la perdita di qualit sarebbe un danno molto minore rispetto alla perditadi tempo che potrebbe insorgere arrecando danno alla tonalit con cui verrebbe ricostruito ilsuono.Lasciando perdere per adesso questa visione della rete a basso livello possiamo iniziare avedere i vari livelli che la compongono.Abbiamo accennato ai protocolli di base ovvero IP utilizzato per il routing e il TCP usato per ilcontrollo della trasmissione.

    Il protocollo TCP/IP, come daltra parte molti altri protocolli , modellato su un certo numerodi strati o di layers e precisamente sui seguenti:

    Strato applicazione

    Questo strato fornito dalla applicazioni che utilizzano TCP/IP per le comunicazioni.Per applicazione si intende un processo il quale comunica con qualche altro processopresente su un host differente.

    Un esempio di applicazione potrebbe essere TELNET oppure FTP.L interfacciamento tra lapplicazione e lo strato di trasporto definito da un numero di porta edai sockets.

    Strato di trasporto

    Questo strato quello che provvede al trasferimento dati end-to-end mediante linvio di questida un applicazione ad un peer remoto.Possono essere supportate pi applicazioni simultaneamente .Lo strato di trasporto pi comune quello che normalmente chiamiamo con il termine di TCPovvero Trasmission Control Protocol il quale fornisce un sistema per linvio dei dati orientatoalla connessione.Un altro protocollo collegato a questo strato UDP il quale al contrario di TCP non basato

    sulla connessione me pu essere utilizzato per inviare datagrammi di dati in modocompletamente asincrono.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    14/167

    Hacker programmino Book

    Strato di internetworking

    Questo strato quello definito anche con il termine di strato di internet o strato di rete.Questo viene utilizzato per fornire un immagine di una virtual network su un internet.Il protocollo IP quello pi importante di questo strato il quale di fatto uno di quelli non

    orientati alla connessione e che non possiede neppure un sistema per il controllo degli errori.Queste funzionalit non previste allinterno del protocollo IP devono essere implementate inaltri livelli pi alti.Le funzionalit di routing sono eseguite da questo protocollo.

    Strato dellinterfaccia di rete.

    Questo strato quello definito anche con il nome di strato di link.Questa interfaccia pu o non pu provvedere ad una funzione di spedizione affidabile e puessere racket o stream oriented.Esistono un infinita di protocolli destinati a problematiche e ad ambienti differenti.Molti protocolli sono particolari per ambienti LAN (Local Area Network reti locali), altri perambienti WAN (Wide Area Network reti geografiche) mentre altri ancora, come il TCP/IP,

    sono in grado di offrire ottime prestazioni in ambedue gli ambienti.La forza di TCP/IP e dovuta proprio all equilibrio che questo ha in ambe due gli ambienti.Inoltre TCP/IP funziona in modo egregio in ambiente multi piattaforma e questo costituisce unaltro dei suoi punti di forza.La sua origine, come moltissime altre tecnologie legate al campo del software e dellhardware, e legata al Ministero della Difesa USA come protocollo per l interconnessione digrandi mainframe.Inizialmente la comunicazione tra i vari sistemi della ricerca finanziata dal Pentagono era infunzione di una rete telematica battezzata ARPANET la quale sfruttava il protocollo NCP(Network Control Protocol) per l interconnessione dei sistemi.Il passaggio dell uso del protocollo da NCP a TCP su ARPANET sanc l atto di nascita diInternet (nei primi mesi del 1983).Inizialmente TCP/IP era solo un insieme di protocolli che permettevano la connessione di

    computer differenti e di trasmettere dati tra di loro.I principi del protocollo TCP/IP erano stati comunque posti verso la meta degli anno 70 daVinton Cerf e Robert Kahn.Una volta sentii dire : gli standards sono belli perch ce ne sono tanti dovrebbe peroesserci uno standard per gli standards.Anche nel caso delle reti si e tentato di definire degli standards e per fare questo sono natidegli appositi enti competenti.L autorit indiscussa nel campo delle reti e l ISO la quale ha emanato un modello di

    riferimento per regolare le comunicazioni tra computer mediante protocolli.Questo modello prende il nome di OSI (Open Systems Interconnection).Il modello OSI e stato progettato per aiutare i programmatori a creare applicazioni compatibilicon diverse linee di prodotti multivendor e per fare questo prevede sette strati ognuno deiquali si interessa di una determinata tipologia di problematiche.I sette strati OSI sono i seguenti :

    strato applicazionestrato di presentazionestrato di sessionestrato di trasportostrato di retestrato di collegamento datistrato fisico

    Esiste un altro modello di riferimento che costituisce in un certo senso la versione condensatadel modello OSI che si chiama DoD e che contempla quattro strati anzi che sette.

    Gli strati del modello DoD sono :

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    15/167

    Hacker programmino Book

    strato processo/applicazionestrato host-to-hoststrato internetstrato accesso alla rete

    Diamo nuovamente un occhiata sommaria ai sette strati del modello OSI

    Livello applicazioneIl livello di applicazione del modello OSI e quello in cui ritroviamo molti degli applicativi chesfruttano i componenti concernenti le comunicazioni.Tra le varie applicazioni che sfruttano questo strato troviamo i software WWW, le BBS e imotori di ricerca Internet come Altavista, Yahoo etc.

    Il livello di presentazioneIl livello di presentazione OSI ha lo scopo di presentare i dati al livello applicazione e questoviene fatto mediante alcuni standard che riguardano i contenuti multimediali come adesempio le immagini.

    JPEG, MPEG, MIDI ecc. sono appunto alcuni di questi standard.Una nota lo merita il sistema Java per la definizione dei gestori di contenuto e di protocollo

    Livello di sessioneNello strato di sessione OSI la comunicazione viene organizzata in base a tre diversemodalit ovvero la Simplex (uno trasmette e un altro riceve), la Half Duplex (invio e ricezionedati a turno) e la Full Duplex (mediante un controllo del flusso dei dati tutti inviano e ricevono).Sono inoltre gestite a questo strato l apertura della connessione, il trasferimento dei dati e lachiusura della connessione. I servizi del livello di trasporto hanno il compito di suddividere edi riassemblare le informazioni trattate a livello superiore e di convogliarle in un unico flusso didati.

    Livello di trasportoA questo livello ritroviamo funzionalit quali quella di inviare al mittente un avviso di ricevutadei pacchetti arrivati, di ritrasmettere ogni pacchetto non ritenuto valido, ricostruire la giustasequenza dei pacchetti al loro arrivo, mantenere un corretto flusso di dati per impedirecongestioni ecc.Da come e intuibile da quanto appena detto e di questo livello il sistema di controllo deglierrori.Questo strato assegna ad ogni pacchetto di dati un numero di controllo che consente di

    eseguire la verifica dei dati giunti a destinazione.Tra i protocolli non OSI che troviamo a questo livello ci sono :

    TCP, Novell SPX, Banyan VICP, Microsoft NetBios/NetBEUI, UDP

    Questo strato offre un livello di controllo dello spostamento delle informazioni tra

    sistemi.

    Strato di reteDefinisce i protocolli di gestione del percorso sulla rete.Questo strato pu analizzare l indirizzo dei pacchetti per determinare il metodo diinstradamento pi corretto.Se un pacchetto e destinato ad una stazione sulla rete locale viene inviato direttamente.Se invece il pacchetto e indirizzato ad un sistema presente su una rete posta su un altrosegmento il pacchetto viene inviato ad un dispositivo chiamato router che si occupa diimmetterlo in rete.

    I router, in breve, sono dispositivi che collegano la rete locale a quella geograficaI protocolli che utilizzano questo strato sono :

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    16/167

    Hacker programmino Book

    IP (Internet Protocol), X 25, Novell IPX, Banyan VIP

    Ogni segmento che appartiene ad una rete (per segmento possiamo concepirla come una sotto rete) haalmeno un router che gli permette di dialogare con altre sotto reti.

    Strato di collegamentoA questo livello vengono definite le regole per la trasmissione e la ricezione delleinformazioni.Il fine di questo strato e quello di garantire che i messaggi vengano consegnati al dispositivogiusto e di tradurre i dati in bits in modo tale da poterli far trasferire dal livello fisico.Possiamo concepire questo strato come la porta tra il mondo hardware e software.Tra i protocolli pi comuni che utilizzano questo strato ritroviamo HDLC, reti geograficheATM, Microsoft NDIS ecc.

    Strato fisicoLe uniche due funzioni a questo livello sono quelle di trasmettere e ricevere bit tramitedifferenti tipi di infrastrutture e di dispositivi di trasmissione.

    Riassumendo potremmo fare una panoramica su tutte le operazioni che vengono fatte aciascun livello sul pacchetto originale dei dati

    STRATO APPLICAZIONE Aggiunta indirizzo del nodo

    STRATO PRESENTAZIONE Aggiunta informazioni codiceSTRATO SESSIONE Aggiunta informazioni di comunicazione

    STRATO DI TRASPORTO Aggiunta intestazione e checksumSTRATO DI RETE Aggiunta informazioni quantita e sequenza

    pacchetti

    STRATO DI LINK Aggiunta checksum finale

    STRATO FISICO Invio dati some sequenza di bit

    Ad ogni strato sono definite delle serie di funzioni specifiche con le quali l applicativointeragisce nell istante in cui ha bisogno di inviare delle informazioni ad un altro sistema dellarete.La richiesta e le informazioni vengono impacchettate e inviate allo strato successivo il qualeaggiunge al pacchetto le informazioni relative alle funzioni gestite a quel livello.Vediamo ora i quattro starti del modello DoD

    Strato di processoQuesto strato corrisponde ai primi tre del modello OSI.

    Gran parte del lavoro di trasmissione viene svolto a questo livello per cui vengono coinvolti ungran numero di protocolli.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    17/167

    Hacker programmino Book

    Tra i nomi piu comuni dei protocolli ritroviamo TELNET, FTP, SMTP, NFS, X WINDOW ecc.Telnet ad esempio e in pratica un emulazione di terminale.Tramite Telnet un client puo accedere ad un'altra macchina su cui e in esecuzione un serverTelnet e lavorare come se fosse un terminale collegato direttamente.FTP (File Transfer Protocol) e essenzialmente un protocollo di trasferimento files.Questo protocollo puo essere utilizzato da un altro software per il trasferimento di softwares

    oppure pu fungere come programma indipendente e quindi eseguire la navigazione nelledirectories del sistema a cui si e connessi, gestire il trasferimento files ecc.Vedremo successivamente le funzioni implementate nella libreria sun.net.ftp presente inJava.Ne programma di esempio utilizzeremo anche le classi di sun.net.smtp che sono quelle chegestiscono il protocollo che si interessa della gestione della posta elettronica (SMTP).

    Strato di hostLe funzioni di questo livello sono paragonabili a quelle dello strato di trasporto del modelloOSI.A questo livello vengono gestiti il controllo di integrita e della sequenza dei pacchettitrasmessi.

    Infatti e proprio a questo strato che incontriamo i protocolli TCP e UDP.Il protocollo viene caricato come si trattasse di un driver software.

    Protocollo TCPIl protocollo TCP (Transmission Control Protocol) suddivide in segmenti i blocchi diinformazioni generati da un software, li numera, li ordina in modo da permettere ilriassemblaggio degli stessi una volta giunti a destinazione.La trasmissione di questi segmenti e subordinata alla ricezione di segnali di conferma atti asegnalare la corretta ricezione degli stessi.TCP e definito come protocollo orientato alla connessione in quanto prima di inviare i daticontatta il destinatario per stabilire la connessione creando un circuito virtuale.La trasmissione dei dati avviene, sommariamente, come avevamo visto precedentemente

    ovvero particolari algoritmi si interessano di verificare la correttezza dei pacchetti di dati percui prima di eseguire un successivo invio il protocollo richiede conferma al destinatario.La comunicazione avviene in full duplex.

    Protocollo UDPEsistono alcune classi in Java che necessitano della conoscenza di un altro protocolloIl protocollo UDP (User Datagram Protocol) e un protocollo piu leggero che viene utilizzatoin alternativa a TCP.UDP invia in modo indipendente dei pacchetti di dati, chiamati datagrammi, da unapplicazione ad un'altra senza garantirne l arrivo.In questo caso l ordine di invio non e importante in quanto ogni messaggio e indipendenteuno dall altro.

    Esistono delle applicazioni in cui il ricevimento dei pacchetti non e importante.Prendete ad esempio un sistema che invia in continuazioni informazioni sulla temperaturarilevata in una certa citta.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    18/167

    Hacker programmino Book

    Se un sistema che desidera ricevere tali informazioni si perde un pacchetto non e una cosacosi critica in quanto potra attendere un altro invio.Mentre TCP e basato sulla connessione UDP ne e indipendente ed e facile comprenderloda quanto detto.

    Strato di InternetQuesto strato corrisponde a quello di rete del modello OSI.In questo livello vengono gestiti gli indirizzi IP degli host.Una panoramica sui metodi di indirizzamento e di instradamento verranno visti tra breve.Tra i protocolli di questo strato ritroviamo IP (Internet Protocol), ARP (Address ResolutionProtocol), RARP (Reverse Address Resolution Protocol) ecc.

    Strato di accesso alla reteAnche a questo livello del modello DoD avviene una gestione simile a quella del livello fisicodel OSI.In pratica i pacchetti vengono tramutati in sequenze di bits.In questo strato viene anche fornita una supervisione sugli indirizzi hardware.Le seguenti sono alcune delle tecnologie utilizzate per implementare questo strato :

    X25, PPP, EIA

    Per fare maggiore chiarezza su quelli che sono i concetti di protocolli oritentati allaconnessione e quelli che invece funzionano in modo completamente asincrono possiamovedere qualche metodo che permetta di usare praticamente i concetti.Questi esempi sono relativi alla chiamate di base necessarie per creare un sistema dicomunicazione tra servers e clients.

    Abbiamo detto che un server un processo che attende perch un certo numero di client siconnetta per eseguire le funzionalit proprie del software.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    19/167

    Hacker programmino Book

    ---------------- ----------------| Application || Application ||--------------| |--------------|| TCP || TCP ||--------------| ----------------- |--------------|| IP || IP || IP |

    |--------------| |-------+-------| |--------------|| Subnetwork 1 ||Subnet1|Subnet2|| Subnetwork 2 |---------------- --------+-------- ----------------

    HOST GATEWAY HOST

    I servers devono mettersi in ascolto di quello che il sistema di identificazione del client ilquale, nel caso del TCP, di fatto lindirizzo e la porta dellinterfaccia.Allinterno dei nostri applicativi possiamo richiedere una comunicazione con questa medianteluso delle funzioni di socket.Nel caso di Windows abbiamo a che fare con le funzioni Winsock le quali per essere utilizzatedevono eseguire come primo passo quello di creare un socket utilizzante un determinato

    protocollo relativo a questo indirizzo/porta.Sempre parlando del server, il secondo passo quello di fare mettere in ascolto il socket inattesa di un tentativo di comunicazione da parte del client.La funzione bind() definita come segue :

    int bind(SOCKET s, const struct sockaddr FAR *name, int namelen);

    Una connessione veien eseguita come segue :

    SOCKET s;struct sockaddr_in tcpaddr;int port = 2222;

    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);tcpaddr.sin_family = AF_INET;tcpaddr.sin_port = htons(port);tcpaddr.sin_addr.s_addr = htonl(INADDR_ANY) ;bind(s, (SOCKADDR) &tcpaddr, sizeof(tcpaddr));

    La struttura sockaddr_in ha la seguente struttura:

    struct sockaddr_in {short sin_family;u_short sin_port;struct in_addr sin_addr;

    char sin_zeeo[8];};

    L uso di C++Builder rende luso dei socket semplicissimo in quanto sia le connessioni TCPche UDP sono presenti tra i componenti visuali allinterno della toolbar e quindi basta inseriredentro ad un form quello relativo al tipo di connessione che si vuole gestire.Continuando la panoramica sulle funzioni necessarie per la comunicazione client/servertroviamo la funzione listen utilizzata per mettere il socket in modalit di ascolto.

    int listen(SOCKET s, int backlog);

    Il parametro backlog indica la lunghezza massima della coda relativa alle connessioni inattesa.

    Questo parametro asume una particolare importanza quando potrebbero essere iniate alserver un numero multiplo di richieste di connessione.Il primo argomento chiaramente il socket a cui ci si riferisce.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    20/167

    Hacker programmino Book

    Un'altra funzione necessaria per accettare una connessione client accept oppure laWSAAccept in ambiente windows il cui prototipo :

    SOCKET accept(SOCKET s. struct sockaddr FAR* addr, int FAR* addrlen);

    Il parametro s il socket in ascolto mentre il secondo deve essere lindirizzo di una struttura

    SOCKADDR_IN valida con addrlen relativo alla sua lunghezza.Se vi trovaste la necessit di usare le funzioni con un altro protocollo sar sufficiente chesostituiate la struttura SOCKADDR_IN con la SOCKADDR relativa a quello scelto.Quando la funzione ritorna la struttura SOCKADDR_IN contiene lindirizzo IP del client che haeseguito la richiesta di collegamento fino a quando addrlen indica la presenza mediante ladimensione della struttura.WINSOCK 2 ha introdotto la funzione WSAccept la quale possiede la seguente sintassi:

    SOCKET WSAAccept(SOCKET s, struct sockaddr FAR *addr, LPINT addrlen,LPCONDICTIONPROC lpfnCondiction, DWORD dwCallbackData);

    I primi tre parametri sono gli stessi della funzione acept() di WINSOCK 1 mentrelpfnCondiction un puntatoread una funzione che viene chiamata a seguito di una richiesta

    del client.Questa funzione determina se accettare la richiesta di connessione del client.Il prototipo della funzione :

    int CALLBACK CondictionFunction( LPWSABUF lpCallerId,LPWSABUF lpCallerId,LPQOS lpSQOS,LPQOS lpGQOS,LPWSABUF lpCalledId,LPWSABUF lpCalleeData,GROUP far *g,DWORD dwCallbackData);

    Il paramentro lpCallerId in pratica lindirizzo dellentit che si connette rappresentato da unastruttura comunemente usata con WINSOCK 2 dichiarata come :

    typedef struct __WSABUF {u_long len;char FAR *buf;

    } WSABUF, FAR * LPWSABUF;

    A seconda delluso il parametro len st ad indicare la dimnsione del buffer puntato da bufoppure il totale dei dati contenuti dentro al buffer dati buf.Usato dentro al parametro lpCallerId il puntatore buf punta allindirizzo della struttura per ilprotocollo scelto nella quale la connessione viene creata.

    Per un corretto accesso alle informazioni il punatore buf viene forzato con un casyt allacoretta tipologia SOCKADDR.Il parametro lpCallerData contiene qualsiasi dato inviato dal client durante la richiesta diconnessione.I successivi due parametri lpSQOS e lpGQOS specificano la qualit del servizio.Ambedue i parametri si riferiscono ad una struttura QOS che contiene informazioni relativealla banda richiestasia per quello che riguarda i dati ricevuti che quelli trasmessi.LpCaledId contiene lindirizzo locale al quale il client stato connesso.

    Il livello pi elevato quello applicazione nel quale troviamo una serie di altri protocolli qualiSMTP, FTP, HTTP, TELNET anche se di fatto il numero di questi potrebbe essereelevatissimo.

    TCP un protocollo peer-to-peer orientato alla connessione.Le applicazioni normalmente utilizzano per le comunicazioni il modello client/server.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    21/167

    Hacker programmino Book

    Un server un applicazione che offre una serie di servizi agli utenti internet mentre un client un richiedente di questi.Un applicazione costituita da una parte client e da un'altra server le quali possono giraresugli stessi sistemi o su sistemi differenti.Detto in altre parole un server un programma che riceve da un client determinate richieste,le esegue ed invia indietro le risposte opportunamente elaborate.

    In un sistema client/server devono esistere determinate entit necessarie al funzionamento eal trasferimento dei pacchetti.Esistono diversi metodi che permettono laccesso ad altri network.In un sistema di internetworking questa funzionalit viene eseguita da dei routers.Si devono distinguere quelli che sono i routers da quelli che sono i bridges e quelli che sono igateways.l bridge interconnette segmenti di rete allo strato delle interfacce e invia i frames tra queste.Un bridge esegue le funzionalit di relay degli indirizzi MAC ed indipendente da qualsiasistato dei protocolli superiore.Questo fatto per essere trasparente al protocollo IP.I routers invece interconnettono i networks a livello di strato di internetworking ed instradano ipacchetti tra questi.Questi impianti devono essere in grado di analizzare i pacchetti di dati che percorrono la rete

    in quanto in base a degli indirizzi riportati dentro alle strutture di testa devono prendere delledecisioni relative alla strada che i pacchetti devono percorrere per arrivare da un mittente adun destinatario.Come abbiamo detto prima le basi per linstradamento dei pacchetti viene fornito dalprotocollo IP.I gateways invece forniscono un sistema di connessione di reti ad un livello pi alto rispetto irouters e i bridge..Questi supportano normalmente la mappatura degli indirizzi da un network ad un altro epossono inoltre provvedere ad una trasformazione dei dati tra ambienti per permettere laconnessione delle applicazioni end-to-end.Sicuramente il livello di internetworking quello in cui possibile eseguire le manipolazionidei pacchetti pi complesse da individuare in quanto tali manomissioni possono interagire conquello che di fatto un dei meccanismi pi delicati di tutta la rete.

    Abbiamo gi detto che a questo livello troviamo il protocollo IP il quale ha come funzionequella di instradare i pacchetti su un determinato percorso.Gli indirizzi visti allinizio di questo capitolo erano relativi al metodo di gestione conosciuto conil termine di Ipv4.Lesplosione e il successo avuto da Internet ha fatto si che il corpo dingegneria della retedovesse prendere in considerazione un metodo pi evoluto capace di rappresentare unnumero di sistemi molto maggiore di quello rappresentabile con il protocollo Ipv4.In pratica questo quello conosciuto con Ipv6.Ma che cos questo Ipv6 ?In pratica si tratta della nuova versione del protocollo IP il cui studio iniziato nel 1991 e dicui la prima parte fondamentale stata completata nel 1996.Come dicevamo prima internat stata vittima del suo stesso successo per cui il numero disistemi diventato talmente grosso da mettere in seria difficolt il metodo di numerazione

    convenzionale.Ipv6 assegna un numero da 128 bits ad ogni interfaccia di rete contro i 32 bits usati da Ipv4anche se di fatto la differenza pi grossa sta nel fatto che Ipv4 utilizzava una NETMASK, perdistinguere la parte della numerazione relativa alla rappresentazione della rete da quellalegata invece al sistema, mentre Ipv6 inserisce davanti alla numerazione un prefisso il qualeindica quanti bits vengono usati per rappresentare la sottorete.Volendo visualizzare lindirizzo in formato IPV6 possibile utilizzare la struttura definita in#include

    struct in6_addr {u_char s6_addr[16];

    }

    Questa struttura viene utilizzata per la creazione della nuova struttura socket:

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    22/167

    Hacker programmino Book

    struct sockaddr_in6 {u_short sin6_family;u_short sin6_port;u_long sin6flowinfo;struct in6_addr sin6_addr;

    };

    Lheader di Ipv4 costituito da 24 BYTES di cui 8 relativi ad indirizzi mentre gli altri 16adoperati per 12 campi aggiuntivi.Nel caso dellheader di Ipv6 i bytes totali sono 40 di cui 32v sono relativi ad indirizzi mentre irimanti 8 bytes vengono utilizzati per 6 campi aggiuntivi.Avevamo visto prima il comando route print che mostrava il contenuto della routing tablerelativa a Ipv4.Nel caso di Ipv6 questa tabella contiene una voce per ogni sottorete raggiungibile dal routerstesso. Un esempio di organizzazione la seguente:

    Subnetwork Next Hop Type Cost Age StatusAlpha - Direct 1 - UP

    Tau - Direct 1 - DOWNBeta - Direct 1 - UP

    Delta Router-27 RIP 10 27 UPOmega Router-5 OSPF 5 13 UPGamma Router-4 Static 2 - UP

    Il campo tipo indica la raggiungibilit associata alla sottorete.Static indica che la voce stata aggiunta manualmente;RIP e OSPF indicano che laraggiungibilit stata appresa dal router tramite appositi protocolli.Il campo Age indica invece la validit in secondi.Infine il campo Status indica appunto lo stato della voce.I pacchetti applicativi usano la funzione socket() per creare un descrittore socket relativo adun punto finale di una comunicazione.I parametri passati indicano il protocollo usato insieme allindirizzo specificato.In Ipv4 la sintassi di chiamata di una funzione socket la seguente :

    s = socket(PF_INET, SOCK_STREAM, 0);

    In Ipv6 la funzione viene invece chiamata con :

    s = socket(PF_INET6, SOCK_STREAM, 0);

    Un indirizzo Ipv6 ha la seguente forma :

    4321:0:1:2:3:4:567:89ab

    Tutto questo visto fino ad ora e quanto riguarda la strutturazione di una rete.

    Esistono alcuni concetti che invece riguardano l utente (client) che accede ad un host pernavigare sulla rete.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    23/167

    Hacker programmino Book

    Infatti il termine Socket esprime un terminale di comunicazione ovvero uno dei due estremi diuna connessione.A questo riguardo bisogna ancora dare un occhiata al concetto di porta.Normalmente un computer dispone di un solo accesso fisico sulla rete.Tutti i dati destinati ad un sistema arrivano mediante questa connessione.In ogni caso i dati potrebbero essere destinati a diverse applicazioni in esecuzione sul

    sistema.Come puo il computer capire a quale applicazione e destinato il pacchetto di dati ricevuto.Semplice. Tramite il concetto di porta !I dati trasmessi su Internet sono identificati, come abbiamo gia visto, dall indirizzo a 32 bitsche identifica il sistema destinatario e dal numero di porta.Il numero di porta e costituito da un numero a 16 bits che i protocolli TCP e UDP utilizzanoper identificare l applicazione alla quale sono destinati i dati inviati.In una connessione il protocollo crea un Socket collegato ad un numero specifico di porta.Alcuni numeri di porta hanno degli scopi predefiniti come ad esempio :

    Porta Servizio

    7 Echo

    13 Daytime

    Ftp

    Telnet

    Smtp

    79 Finger

    80 Http

    110 Pop3

    Ad esempio se si creasse un Socket utilizzando la porta 25 e si inviassero dei dati tramite unostream creato su questo socket questi verrebbero utilizzati dal demone per l invio della posta.Infatti andando ad analizzare i sorgenti della classe sun.net.smtp, come vedremosuccessivamente, ci accorgeremmo che la gestione dell invio della mail viene appuntogestita in questo modo.Un po del tipo :

    Socket sock = new Socket(www.bernardotti.al.it, 25);PrintStream outStream = new PrintStream(sock.getOutputStream());

    I formati dei pacchettiI vari protocolli utilizzano dei formati specifici in quanto questi servono a definire una grannumero di caratteristiche tra le quali molte importantissime come ad esempio gli indirizzi delmittente, quello di destinazione, la lunghezza della parte dei dati e cosi via.In questa parte vedremo solo il formato fisico rimandando ad altri capitoli la descrizionespecifica di questi.La comprensione di questi formati alla base di alcune tecniche di hacking particolari comead esempio quelle di spoofing in cui si eseguono alcune alterazioni legate agli indirizziriportati allinterno di questi.Ogni protocollo dispone del suo formato il quale adatto alla funzionalit propria delprotocollo.Non in tutti i casi linsieme completo delle informazii viene utilizzato tant vero che in alcunicasi le zone inutilizzate di questi pacchetti vengono usate per la messa a punto di sistemiparticolari come quello che vedremo successivamente relativo alla trasmissione segreta delleinformazioni.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    24/167

    Hacker programmino Book

    TCP

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    Source Port Destination Port

    Sequence Number

    Acknowledgement Number

    D.

    OffsetReserved Control Window

    Checksum Urgent Pointer

    Options Padding

    UDP

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    Source Port Destination Port

    Message Length Checksum

    IPv.4

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    Version HLen Service Type Total Length

    Identification Flags Fragment Offset

    Time To Live Protocol Header Checksum

    Source IP Address

    Destination IP Address

    Options (variable dimension) PAD

    IPv.6

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    Version Priority Flow Label

    Payload Length Next Header Hop Limit

    Source Address

    Source Address

    Source Address

    Source Address

    Destination Address

    Destination Address

    Destination Address

    Destination Address

    ARP

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    Hardware Type Protocol Type

    HLEN PLEN Operation

    Source HW Address

    Source HW Address Source IP Address

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    25/167

    Hacker programmino Book

    Source IP Address Target HW Address

    Target HW Address

    Target IP Address

    ICMP

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    Type Code Checksum

    Identifier Sequence Number

    Address Mask

    ICMPv.6

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    Type Code Checksum

    Message Body

    USO DEIL TCP-IP PER LA TRASMISSIONE SEGRETA DELLE INFORMAZIONI.

    In molti casi esistono sui sistemi dei software di analisi che cercano di evitare le fughe dinotizie.Le attivit degli hackers spesso sono indirizzate a attivit in cui diventa necessario farpassare le informazioni sotto il naso dei programmi di analisi.Ad esempio alcuni sistemi permettono di identificare le fughe di notizie da sistemi in cui sonomemorizzati segreti industriali od altro.A questo punto i software che spediscono le informazioni devono necessariamente utilizzaresistemi per la codifica e locultamento delle informazioni trasmesse.La comunicazione tra hosts permette di creare alcune condizioni particolari che sfruttando imetodo classici della trasmissione permettono di generare sistemi su cui possibile fareviaggiare certi tipi di informazioni.Tali meccanismi sono anche importanti in quanto TCP sfrutta anche certe particolarit perpoter controllare che i dati trasmessi siano corretti come ad esempio un numero sequenzialeallinterno della trasmissione dei pacchetti tra un host ed un altro.Un canale nascosto descritto come: qualsiasi canale che pu essere sfruttato da unprocesso per trasferire informazioni in modo da violare la linea di sicurezza di un sistema.Essenzialmente questo un metodo di comunicazione che non fa parte dei disegni deinormali sistemi ma che pu essere utilizzato per trasferire informazioni ad un utente o ad unprocesso di un sistema che normalmente non potrebbe accedere alle informazioni.Nel caso del TCP/IP esistono un certo numero di metodi disponibili mediante i quali possonoessere stabiliti canali nascosti con i quali i dati possono essere passati in modo subdolo trahosts.Questi metodi possono essere usati in una variet di settori come ad esempio :

    Filtri di pacchetti deviati, sniffers di rete e motori di ricerca definiti con il termine di dirty word.Incapsulamento di informazioni cryptate e no con altri pacchetti per la trasmissione segretasu reti che normalmente impedirebbero questa attivit (TCP Steganografia).

    Locazioni segrete di dati trasmessi mediante robusti pacchetti con informazioni incapsulateinsieme a dati di siti innocui.

    Come abbiamo gi detto il TCP/IP un protocollo che utilizza tre stati per la trasmissione eprecisamente :

    Passo uno: Invio di un pacchetto di sincronizazione iniziale (SYNC) e numero di di sequenza.

    Lhost a desidera stabilire la connessione con lhost b.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    26/167

    Hacker programmino Book

    Lhost a invia un pacchetto solitario allhost b con il bit di sincronismo settato (SYN) atto adannunciare la nuova connessione e con allinterno quello definito con il termine di InitialSequenze Number (ISN) il quale ha come scopo quello di tracciare i pacchetti trasmessi tragli hosts.

    Host A ------- SYN (ISN) --------- Host B

    Passo due: Abilitazione dellhost remoto a rispondere con un acknowledgment (ACK).

    Lhost B risponde alla richiesta inviando un pacchetto con allinterno il bit di sincronismo(SYNC) e con ACK..Questo pacchetto contiene non solo il numero di sequenza proprio del client che risponde maanche il valore specificato da ISN incrementato di un unit (ISN + 1) per indicare che ilpacchetto stato ricevuto in modo corretto e che quindi in attesa di una successivatrasmissione.

    Host A----- SYN (ISN+1)/ACK ----------- Host B

    Passo tre: Completamento della negoziazione inviando un acknowledgment finale allhostremoto.

    A questo punto lhost a invia indietro un ACK finale e il numero di sequenza per indicare laricezione corretta e quindi la connessione completa.

    Host A ------------------ ACK ----------------- Host B

    Tutto questo processo di connessione dura una manciata di millisecondi e ciascun pacchetoa partire da questo punto gestito da acknoledgment da ambedue la parti.Questo metodo di hadshake assicura una connessione chiara tra gli host.La sequenza completa la seguente.

    CLIENT SERVER

    syn, SEQ=800 1---------------------------------------------------> 1src_port=1967, dst_port=110 1 1

    syn, ack, SEQ=1567, ACK=801 1 CONNECTION 1src_port=1967, dst_port=110 1

    ack, SEQ=1568, ACK=801 2 2src_port=1967, dst_port=110 2DataLen=5 (quit\n) 2 DATA 2 EXCHANGE

    ack, SEQ=1586, ACK=806 2 2

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    27/167

    Hacker programmino Book

    src_port=1967, dst_port=110 2

    fin, ack, SEQ=806, ACK=1595 3---------------------------------------------------> 3src_port=1967, dst_port=110 3

    3

    ack, SEQ=1595, ACK=807 3

  • 7/31/2019 HackerProgrammingBook Part 03

    28/167

    Hacker programmino Book

    Questi pacchetti possono non contenere dati oppure possono contenerne certi inseriti inmodo di sembrare dati innocenti.Sempre gli stessi pacchetti possono conteneredati relativi ad IP di indirizzi sorgente o didestinazione oppure possono anche contenere i numeri di porta.In ogni caso questi metodi possono essere utilizzati per eseguire il tunneling di informazioniattraverso certi filtri di pacchetti o possono anche essere utilizzati per per inizializzare

    sessioni anonime TCP di pacchetti rimbalzanti attraverso siti che utilizzano soluzioni dicontrollo.Il primo metodo di manipolazione relativo allalterazione del campo di identificazione delprotocollo IP.Questo campo aiuta il riassemblaggio dei pacchetti di dati da parte dei routers e dei sistemihost.Il suo scopo quello di fornire un valore unico ai pacchetti in modo che quando avviene laframmentazione strada facendo questi possano essere accuratamente riassemblati.Il primo metodo di codifica permette di sostituire questo valore contenuto in questo campo diidentificazione con un valore relativo alla codifica ASCII del carattere che deve esserecodificato.Questo permette una facile trasmissione verso lhost il quale legger questo campo e loricodificher nel carattere corretto.

    La visualizzazione con il formato di TCPDUMP quello che segue:

    PACCHETTO UNO

    18:45:13.551117 host.websitek.com.7180 >host2.websitek.com.www: S 537657344:537657344(0)win 512 (ttl 64, id 18432)

    Decodifica.(ttl 64, id 18432/256)[ASCII: 72h]

    PACCHETTO DUE

    18:45:13.551117 host.websitek.com.71727 >

    host2.websitek.com.www: S 13897679854:139457344(0)win 512 (ttl 64, id 17664)

    Decodifica.(ttl 64, id 17664/256)[ASCII: 69h]

    Il secondo metodo invece manipola il valore di ISN ovvero quello definito come InitialSequence Number utilizzato dal TCP per creare una connessione sicura tra cliuent e server.Abbiamo visto che il sistema di negoziazione utilizza un handshake a tre vie.Il campo usato per contenere questo numero potrebbe essere invece usato per inserirci leinformazioni da contrabbandare.Questo campo di 32 bits per cui potrebbe essere utilizzato per salvarci dentro uninformazione descritta da un numero dimensioni massime di un long oppure medianteopportune tecniche di codifica potrebbero esserci salvati dentro anche 4 caratteri di 8bits

    ciascuno.Il terzo metodo utilizza il campo riservato per il Acknowledge Sequenze Number.In questo caso lheader diventa cos composto :

    IP SorgentePORTA SorgenteIP DestinazionePORTA DestinazioneTCP SYN number con i dati codificati

    Chiaramente lutilizzo di questi metodi di codifica e decodifica pretende software client/serverfatti appositamente.Riassumendo quanto detto possiamo dire che questi metodi di alterare i contenuti dei

    pacchetti possono essere utilizzati per bypassare i controlli fatti da certi firewall.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    29/167

    Hacker programmino Book

    In alcuni casi i programmi creati con questi sistemi funzionano come dei normalissimiTELNET con la sola differenza che non eseguono il normale TCP handshake.Un esempio completo quello che segue:

    // Telnet-acker.c

    #include #include #include #include #include #include #include #include #include #include #include #include

    #define QLEN 5#define MY_PASS "passme"#define SERV_TCP_PORT 33333/*"Telnet to address/port. Hit 1x [ENTER], password,"*//*"Host and port 23 for connection."*/

    char sbuf[2048], cbuf[2048];extern int errno;extern char *sys_errlist[];void reaper();int main();void telcli();

    int main(argc, argv)int argc;char *argv[];{

    int srv_fd, rem_fd, rem_len, opt = 1;struct sockaddr_in rem_addr, srv_addr;bzero((char *) &rem_addr, sizeof(rem_addr));bzero((char *) &srv_addr, sizeof(srv_addr));srv_addr.sin_family = AF_INET;srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);srv_addr.sin_port = htons(SERV_TCP_PORT);srv_fd = socket(PF_INET, SOCK_STREAM, 0);

    if (bind(srv_fd, (struct sockaddr *) &srv_addr, sizeof(srv_addr))== -1) {perror("bind");exit(-1);

    }listen(srv_fd, QLEN);close(0); close(1); close(2);

    #ifdef TIOCNOTTYif ((rem_fd = open("/dev/tty", O_RDWR)) >= 0) {

    ioctl(rem_fd, TIOCNOTTY, (char *)0);close(rem_fd);

    }#endif

    if (fork()) exit(0);while (1) {rem_len = sizeof(rem_addr);

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    30/167

    Hacker programmino Book

    rem_fd=accept(srv_fd, (struct sockaddr *) &rem_addr,&rem_len);

    if (rem_fd < 0) {if (errno == EINTR) continue;exit(-1);

    }

    switch(fork()) {case 0:close(srv_fd);telcli(rem_fd);close(rem_fd);exit(0);break;

    default:close(rem_fd);if (fork()) exit(0);break;

    case -1:fprintf(stderr, "\n\rfork: %s\n\r", sys_errlist[errno]);

    break;}}

    }void telcli(source)int source;{

    int dest;int found;struct sockaddr_in sa;struct hostent *hp;struct servent *sp;char gethost[100];

    char getport[100];char string[100];

    bzero(gethost, 100);read(source, gethost, 100);sprintf(string, "");write(source, string, strlen(string));read(source, gethost, 100);

    gethost[(strlen(gethost)-2)] = '\0'; /* kludge alert - killthe \r\n */

    if (strcmp(gethost, MY_PASS) != 0) {close(source);exit(0);

    }do {

    found = 0;bzero(gethost,100);

    sprintf(string, "telnet bouncer ready.\n");write(source, string, strlen(string));sprintf(string, "Host: ");write(source, string, strlen(string));read(source, gethost, 100);gethost[(strlen(gethost)-2)] = '\0';hp = gethostbyname(gethost);if (hp) {

    found++;#if !defined(h_addr) /* In 4.3, this is a #define */#if defined(hpux) || defined(NeXT) || defined(ultrix) ||defined(POSIX)

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    31/167

    Hacker programmino Book

    memcpy((caddr_t)&sa.sin_addr, hp->h_addr_list[0], hp->h_length);#else

    bcopy(hp->h_addr_list[0], &sa.sin_addr, hp->h_length);#endif#else /* defined(h_addr) */

    #if defined(hpux) || defined(NeXT) || defined(ultrix) ||defined(POSIX)memcpy((caddr_t)&sa.sin_addr, hp->h_addr, hp->h_length);

    #elsebcopy(hp->h_addr, &sa.sin_addr, hp->h_length);

    #endif#endif /* defined(h_addr) */

    sprintf(string, "Found address for %s\n", hp->h_name);write(source, string, strlen(string));

    } else {if (inet_addr(gethost) == -1) {

    found = 0;sprintf(string, "Didnt find address for %s\n",

    gethost); write(source, string, strlen(string));} else {

    found++;sa.sin_addr.s_addr = inet_addr(gethost);

    }}

    } while (!found);sa.sin_family = AF_INET;sprintf(string, "Port: ");write(source, string, strlen(string));read(source, getport, 100);gethost[(strlen(getport)-2)] = '\0';

    sa.sin_port = htons((unsigned) atoi(getport));if (sa.sin_port == 0) {sp = getservbyname(getport, "tcp");if (sp)

    sa.sin_port = sp->s_port;else {

    sprintf(string, "%s: bad port number\n", getport);write(source, string, strlen(string));return;

    }}

    sprintf(string, "Trying %s...\n", (char *)inet_ntoa(sa.sin_addr));

    write(source, string, strlen(string));if ((dest = socket(AF_INET, SOCK_STREAM, 0)) < 0) {

    perror("telcli: socket");exit(1);

    }connect(dest, (struct sockaddr *) &sa, sizeof(sa));

    sprintf(string, "Connected to %s port %d...\n",inet_ntoa(sa.sin_addr),ntohs(sa.sin_port));

    write(source, string, strlen(string));#ifdef FNDELAY

    fcntl(source,F_SETFL,fcntl(source,F_GETFL,0)|FNDELAY);fcntl(dest,F_SETFL,fcntl(dest,F_GETFL,0)|FNDELAY);

    #elsefcntl(source,F_SETFL,O_NDELAY);fcntl(dest,F_SETFL,O_NDELAY);

    #endif

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    32/167

    Hacker programmino Book

    communicate(dest,source);close(dest);exit(0);

    }communicate(sfd,cfd) {

    char *chead, *ctail, *shead, *stail;

    int num, nfd, spos, cpos;extern int errno;fd_set rd, wr;

    chead = ctail = cbuf;cpos = 0;shead = stail = sbuf;spos = 0;while (1) {

    FD_ZERO(&rd);FD_ZERO(&wr);if (spos < sizeof(sbuf)-1) FD_SET(sfd, &rd);if (ctail > chead) FD_SET(sfd, &wr);

    if (cpos < sizeof(cbuf)-1) FD_SET(cfd, &rd);if (stail > shead) FD_SET(cfd, &wr);nfd = select(256, &rd, &wr, 0, 0);if (nfd 0) {

    spos += num;stail += num;if (!--nfd) continue;

    }

    }if (FD_ISSET(cfd, &rd)) {num=read(cfd,ctail,sizeof(cbuf)-cpos);if ((num==-1) && (errno != EWOULDBLOCK)) return;if (num==0) return;if (num>0) {

    cpos += num;ctail += num;if (!--nfd) continue;

    }}if (FD_ISSET(sfd, &wr)) {

    num=write(sfd,chead,ctail-chead);if ((num==-1) && (errno != EWOULDBLOCK)) return;if (num>0) {

    chead += num;if (chead == ctail) {

    chead = ctail = cbuf;cpos = 0;

    }if (!--nfd) continue;

    }}if (FD_ISSET(cfd, &wr)) {

    num=write(cfd,shead,stail-shead);if ((num==-1) && (errno != EWOULDBLOCK)) return;if (num>0) {

    shead += num;if (shead == stail) {

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    33/167

    Hacker programmino Book

    shead = stail = sbuf;spos = 0;

    }if (!--nfd) continue;

    }}

    }}

    I routers

    Quella che noi siamo abituati a definire con il termine di rete di fatto un insieme di strati suciascuno dei quali determinati protocolli svolgono le funzioni necessarie per il correttofunzionamento di tutti i servizi che siamo abituati ad utilizzare come ad esempio quelli dinavigazione, della posta elettronica e cos via.Indipendentemente dal tipo di questi, una cosa che necessario comprendere che leinformazioni trasmesse vengono spedite a blocchi allinterno di quelli che vengono definiticome pacchetti i quali partono da un sistema dorigine e passando attraverso un certo

    numero di altri raggiungono la destinazione sulla quale vengono ricomposti e utilizzati per loscopo per cui sono stati originati.Questa definizione porta a comprendere che di fatto i pacchetti seguono un percorso, per cuiallinterno del sistema di rete deve necessariamente esistere un meccanismo che permette digestire quello chiamato con il termine di instradamento o routing.I meccanismi presenti ai livelli pi bassi sono quelli che regolano il funzionamento legato altrasferimento delle informazioni indipendentemente dalla tipologia di servizio a cui questesono relative.Normalmente siamo abituati a riferirci al protocollo TCP/IP che di fatto una suite di diversialtri, tra cui IP il quale quello che si interessa di instradare i pacchetti di dati.I routers di fatto sono i meccanismi hardware che si interessano di gestire le stradetelematiche che i pacchetti seguono per passare da un sistema mittente ad uno didestinazione.

    Questi prendono la decisione di dove inviare i pacchetti, analizzando la loro testatacontenente le informazioni e valutando le tabelle di instradamento gestite dai routers stessi.Mentre fino ad un po di tempo fa gli hackers prendevano di mira i WEB servers ora hannospostato la mira verso i routers e quello definito con il termine di BGP (Border GatewayProtocol) il quale si interessa di traslare le tabelle di routing tra i vari sistemi venduti dadiverse societ.Il CERT (Computer Emergency Response Team) ha recentemente rilasciato un documentodove veniva mostrato come sta diventando sempre maggiore linteresse degli hackers neiconfronti di questo dispositivo.Compromettere il funzionamento di uno di questi sistemi significa in pratica coinvolgere unaserie di meccanismi il cui scorretto funzionamento potrebbe causare problemi di sicurezza oanche solo di prestazioni della rete stessa.Gi normalmente, senza parlare di cattivi funzionamenti, la corretta programmazione di un

    router porta a migliorare notevolmente le prestazioni nellambito dei trasferimenti deipacchetti.

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    34/167

    Hacker programmino Book

    Quando si utilizza uno di questi la lettura e la comprensione dei documenti forniti insieme ilprimo passo per una corretta configurazione e quindi di conseguenza la limitazione delleprobabilit che questi siano causa di certi problemi.Alcune volte gli hacker possiedono effettivamente la capacit di teorizzare e successivamentedi realizzare degli attacchi ma nella maggior parte dei casi gli accessi indesiderati ocomunque le manomissioni dei sistemi informatici avvengono a causa della presenza di bugsnellambito dei sistemi operativi, dei servers e dei sistemi hardware che li gestiscono.Avere laccortezza di seguire giorno dopo giorno le informazioni rilasciate dalle casecostruttrici e il fatto dinstallare prontamente le hotfix e le patchs significa evitare ungrossissima percentuale di problemi di questo tipo.Spesso quando si acquistano linee dedicate da societ come Interbusiness, del gruppoTelecom, i routers vengono forniti da queste e la loro programmazione diventa impossibile inquanto laccesso alle funzioni di configurazione non sono consentite se non ai centri di

    gestione della societ stessa.

    Gli attacchiNellambito dei routers si possono avere un certo numero di tipologie differenti di attacchi inparticolar modo quelli a basso livello che vengono eseguiti alterando i contenuti dei pacchetti.Essendo il settaggio del router vincolato ad una password il primo dei problemi di sicurezza senzaltro quello legato allindividuazione di questa.Altri tipi di attacchi sono quelli legati alle manomissioni relative alle informazioni usate per linstradamento eseguito dai protocolli, a quelli legati al protocollo SNMP, agli attacchi RIP, aquelli in cui si usa la frammentazione dei pacchetti, alla redirezione per giungere allaredirezione circolare nel caso di quegli attacchi definiti con il termine di denial of service.Spesso questi non hanno come scopo quello di impossessarsi delle risorse ma

    semplicemente di metterle fuori uso.Indipendentemente dallobbiettivo che si pongono i metodi usati, i mezzi per eseguirlipossono variare anche se di fatto la tecnica fondamentale comunque sempre legata allamanipolazione delle informazioni contenute allinterno delle testate dei pacchetti.Abbiamo detto prima che linstradamento viene eseguita da parte del router analizzando leinformazioni contenute dentro agli headers dei pacchetti.Questa che segue una testata relativa ad un pacchetto gestito dal protocollo IP e comepotrete notare al suo interno sono presenti lindirizzo di partenza e quello di destinazione.

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Version| IHL |Type of Service| Total Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Identification |Flags| Fragment Offset |

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Time to Live | Protocol | Header Checksum |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    35/167

    Hacker programmino Book

    | Source Address |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Destination Address |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| TCP header, then your data ...... || |

    Uno degli attacchi perpetuati con la tecnica del mascheramento viene eseguito falsificando gliindirizzi contenuti dentro ai pacchetti IP spediti dal di fuori del network ma con valori cheporterebbero a credere che questi di fatto provengano dal di dentro di questo.Questo tipo di attacco viene utilizzato per ottenere laccesso a certe risorse o per introdurrenella rete dei dati alterati.Il metodo, nel caso in cui non si voglia solo creare problemi funzionali, non poi cosisemplice in quanto la tecnica, oltre alla manipolazione dei dati dentro al pacchetto, devepossedere una metodologia che permette di individuare un numero di sequenza che ilsistema utilizza per verificare la correttezza dei pacchetti trasmessi.Alcune volte gli attacchi vengono eseguiti registrando le sequenze di pacchetti o di comandidelle applicazioni.Dopo aver eseguito la registrazione e manipolato le informazioni, queste vengono

    ritrasmesse simulando il comportamento dei meccanismi originali.Un tipo di attacco eseguito nei confronti dei routers, uno dei pi recenti nellambito di quelli abasso livello, quello definito con il nome di Smurf.In pratica lattaccante invia verso il router un grosso numero di PING (funzioni Echo delprotocollo ICMP) verso un indirizzo di broadcast usando come indirizzo del mittente uno falso.Il router invia questo pacchetto allindirizzo di broadcast raggiungendo potenzialmente in unarete/24 fino a 255 sistemi.La riuscita dipende chiaramente da come sono configurati gli hosts i quali nella peggiore delleipotesi cercano di rispondere al falso indirizzo riuscendo a generare in una rete con 200 hostsun traffico di circa 80 Mbps.In questo modo lattaccante riesce a creare un amplificazione dei pacchetti inviati arrivandoad occupare una quantit molto grossa di banda a disposizione della vittima.Come vedremo successivamente la protezione in questo caso consiste nel disabilitare un

    servizio del router e precisamente quello definito con il termine di IP directed broadcasts.La falsificazione degli indirizzi dentro alla struttura che abbiamo visto precedentemente allabase di un grosso numero di attacchi.

    I metodi di protezioneLargomento complesso anche alla luce del fatto che le configurazioni di rete possonoessere moltissime e quindi anche i metodi adottati per la sicurezza devono essere escogitatiin funzione di ciascuna di queste.Questi coinvolgono diversi livelli a partire da quello che il livello fisico.Uno dei punti cruciali la memoria in quanto alcuni tipi di attacchi del tipo definito con iltermine di denial of service tendono a fare esaurire le risorse a disposizione.Un router di fatto pu essere paragonato a molti computer sui quali sono mantenuti in

    funzione alcuni servizi molti dei quali non sono necessari e addirittura possono essereutilizzati dagli hackers per ottenere certi tipi di informazioni.Questi servizi possono essere abilitati o disabilitati a seconda delle prestazioni e dellefunzioni che si desiderano avere dal router.I servizi sono del tipo del finger, dell IP source routing, IP redirect ecc.Per sapere come sono questi di default necessario consultare il manuale fornito dalcostruttore oppure possibile interrogare il sistema con le apposite utilities fornite con questooppure acquistati a parte come ad esempio Solarwinds.Una delle cose scontate sono relative al fatto che le funzioni di settaggio dei routers in generesono accessibili tramite dei login che vengono fatti sul dispositivo a seguito dellinserimento diuna password.Questa deve essere sufficientemente lunga e complessa per fare in modo che non possaessere facilmente individuata.

    Un'altra cosa relativa alle password che necessario ricordarsi che spesso questi sistemipossiedono delle password di default per cui prima di attivarli in rete necessario cambiarle

    Copyright 2002 Flavio Bernardotti Tel. (39) 380 7097051

  • 7/31/2019 HackerProgrammingBook Part 03

    36/167

    Hacker programmino Book

    senza contare che in passato alcuni routers possedevano delle backdoor fornite daicostruttori per aiutare le societ che si dimenticavano la password a reinserirsi nel sistema.In alcuni casi sono stati segnalati dei problemi legati alloverflow dei buffers legati allepasswords come nel caso dei routers Cisco della serie 7xx.In questi casi necessario fare quello che abbiamo detto inizialmente ovvero informarsi suisiti dei costruttori per vedere se esistono delle patchs per questi problemi.

    In ogni caso un router pu essere utilizzato per rafforzare la sicurezza nellambito di una rete.In genere questa deve sempre essere curata mediante un sistema indispensabile per questiscopi e precisamente il firewall anche se di fatto i routers possono essere settati perfunzionare come tali.Questi sono sistemi software o hardware che analizzano i pacchetti ad uno ad uno e chesono capaci di identificare lorigine e la destinazione e quindi di applicare determinate regoleche ne permettono o ne negano il passaggio sulla rete.I firewall possono essere creati mediante funzioni implementate dentro ai sistemi operativi,come ad esempio la funzione ipchains interna al kernel di Linux, oppure possono esseresistemi hardware dotati di certi tipi di algoritmi come ad esempio quelli di tipo adattivo presentinei firewalls Cisco PIX.Un metodo di protezione, conosciuto con il termine di screening router, crea una lineastatica di routing usata per passare al firewall tutte le connessioni relative al network protetto.

    Un altro meccanismo utilizza due routers e precisamente uno tra il mondo internet e il firewalled un altro tra questo e la rete protetta.Normalmente alcuni tipi di firewall hardware permettono di creare, grazie alla presenza dimolte interfacce, diverse zone a differenti livelli di protezione definite con il termine di DMZ(de-militarized zone).I tentativi di attacchi in ogni caso possono essere anche identificati dallanalisi dei files di log.I routers impl