Sei sulla pagina 1di 10

8 888888888o .8. 8 8888 88 8 888888888o.

8 8888 `88. .888. 8 8888 88 8 8888 `^888.


8 8888 `88 :88888. 8 8888 88 8 8888 `88.
8 8888 ,88 . `88888. 8 8888 88 8 8888 `88
8 8888. ,88' .8. `88888. 8 8888 88 8 8888 88
8 8888888888 .8`8. `88888. 8 8888 88 8 8888 88
8 8888 `88. .8' `8. `88888. 8 8888 88 8 8888 ,88
8 8888 88 .8' `8. `88888.` 8888 ,8P 8 8888 ,88'
8 8888 ,88'.888888888. `88888. 8888 ,d8P 8 8888 ,o88P'
8 888888888P .8' `8. `88888. `Y88888P' 8 888888888P'

Perchè se non hai una ASCII art da megalomane tutta tua non sei nessuno.

Quindi hai deciso di imbarcarti in questa avventura con l'obiettivo di imparare il


maggior numero di cose possibile riguardo la sicurezza, non è così?
Bene, fa sempre un gran piacere vedere nuove persone avvicinarsi a questo
affascinante e complesso mondo, ed è con grande piacere che inizio con questo file
di testo vecchio stile una lunga (spero) serie di documenti atti ad aiutare te ed
altre persone che come me hanno una gran voglia di imparare e lavorare con
i computer sporcandosi le mani, perchè ci sarà tanto da vedere, da fare, da
discutere, sarà un vero e proprio percorso che spero apprezzerai. Se hai ottenuto
questo file perchè mi conosci di persona saprai anche che se c'è qualsiasi cosa che
non trovi chiara puoi sempre contattarmi in privato per chiedere ulteriori
delucidazioni, siamo tutti qui per imparare, dopotutto. Prima di iniziare a vedere
il primo vero argomento di questo percorso propedeutico, mi sembra opportuno
elencare una piccola lista di prerequisiti che sono ASSOLUTAMENTE necessari per
intraprendere questo viaggio, quindi ti pregherei di leggere con attenzione:

1) Curiosità:
La curiosità è quello che ci permette di nutrire il nostro cervello con
informazioni sempre nuove, tenendolo allenato e in costante sviluppo. Di
conseguenza,
non può esistere un hacker non curioso, un hacker che non sia ansioso di
scoprire come un sistema funzioni nei minimi dettagli, perchè la curiosità sta alla
base della mentalità di ogni vero hacker. Se pensare a come un sistema
operativo possa gestire così tante operazioni complesse per l'utente lasciandolo
fuori
dall'equazione e rendendogli tutto il lavoro più semplice non ti provoca
un'erezione o non ti fa bagnare immediatamente dovresti guardare altrove.

2) Passione:
L'hacking richiede molta dedizione e molto studio, ci sarà tanto da leggere,
da imparare, da scrivere, da imprecare. Ma se avrai la passione dalla tua parte
tutto sarà molto più semplice, piacevole, e soprattutto divertente. L'hacking
è una cosa meravigliosa, se non ti diverte, non fa per te.

3) Altruismo:
Lo stato attuale della sicurezza informatica non si sarebbe mai raggiunto
senza l'immensa mole di conoscenza condivisa da persone ben più abili di noi,
dobbiamo inchinarci in reverenza al cospetto di quegli hacker che ci hanno
portato la conoscenza di cui oggi studiamo i princìpi e che ci permette di
portare avanti la nostra passione, e soprattutto, dobbiamo seguire il loro
esempio e condividere quello che sappiamo, condividere, insegnare, tramandare. La
conoscenza è un bene che dovrebbe essere accessibile a tutti, purtroppo ad
oggi non lo è, e per questo dobbiamo fare la nostra parte.

Piccola premessa, leggere questi documenti non ti renderà un hacker, sarai tu a


dover fare ulteriori ricerche ed approfondimenti per conto tuo, lo scopo di questi
file è di dare un'infarinatura a chi non sa che percorso seguire, e di dare
un'indicazione generale su che temi trattare, ma soprattutto è di far appassionare
e
determinare altre persone a perseguire questi studi. Inoltre, un altro consiglio
dal profondo del mio cuore, studiate tanto l'inglese: senza l'inglese non
andrete lontano, tutte le documentazioni ufficiali, i testi tecnici, le ricerche, i
migliori libri, sono tutti scritti in inglese e le traduzioni italiane
sono così poche che fareste prima a darle per non esistenti. Se non siete ancora in
grado di leggere un testo medio-tecnico in inglese vi conviene allenarvi
il prima possibile, non è una lingua troppo complessa (l'italiano è molto più
articolato e difficile da imparare secondo me), ma come tutto, richiederà tempo
e pazienza per padroneggiarla, ma vedrete che ne trarrete innumerevoli vantaggi.

-------------------- [ LE RETI: QUELLO CHE OGNI ASPIRANTE HACKER DEVE CONOSCERE AD


OGNI COSTO ] --------------------

INTRODUZIONE:
Se il nostro obiettivo è riuscire a trovare e sfruttare falle di sicurezza in
sistemi (spesso) remoti, sarebbe molto utile capire esattamente come
questi dispositivi così diversi e distanti l'un l'altro possano comunicare in
maniera di potersi capire e per darci quell'immenso e fantastico mondo
che chiamiamo Internet: Internet non è altro che un'immensa rete di router che
comunicano a vicenda, scambiandosi informazioni e re-indirizzando
dati da un punto all'altro per permettergli di raggiungere la meta desiderata. Ma
come funziona tutto ciò? Bene, è il momento di capirci qualcosa.

LE RETI:
Ci sarebbe così tanto da dire riguardo alle reti, per questo alla fine del
documento citerò il nome di un libro eccellente da cui potrete imparare ben
di più se quello che avete trovato qui ha stuzzicato il vostro interesse, cosa in
cui spero vivamente. Per ora, partiamo dalla definizione vera e propria
di una rete: per rete di calcolatori intendiamo un insieme di dispositivi connessi
tra di loro tramite degli appositi canali di comunicazione, che gli
permette di interagire e condividere risorse. Il tipo di rete che noi tutti usiamo
in casa si chiama LAN, Local Area Network, e si tratta di un tipo di
rete di piccola grandezza, tipicamente usata esclusivamente in case e piccoli
uffici, mentre un altro tipo molto comune di reti la Wide Area Network (WAN),
ovvero quelle reti che si estendono coprendo grandi distanze, anche inglobando reti
più piccole al suo interno. I sopracitati canali di connessione possono
includere elementi fisici come cavi Ethernet o meno come nel caso di connessioni
Wireless.

INDIRIZZI:
In base al tipo di configurazione è possibile avere diversi dispositivi collegati
alla stessa rete. Un router
è un dispositivo hardware che, come suggerisce il nome, "instrada" i pacchetti di
rete verso la corretta destinazione, ovvero... se vogliamo inviare un
pacchetto (vedremo sotto cosa sono i pacchetti) ad un altro computer, dovremo prima
inviarlo al router, e lui lo instraderà verso la destinazione
corretta per noi, riportandoci se necessario anche il tipo di risposta causata dal
pacchetto che abbiamo inviato. Quello che dobbiamo conoscere riguardo
alla macchina con cui vogliamo comunicare è il suo "indirizzo" di rete, ovvero quel
numero identificativo che descrive dove trovare un determinato
dispositivo, e che quindi ci permette di raggiungerlo tramite una più o meno lunga
sequenza di "salti" (hops) da un cosiddetto nodo ad un altro. Questi
indirizzi sono i famigerati indirizzi IP, ovvero gli indirizzi Internet Protocol.
Senza entrare troppo nei dettagli (per ora) IP è un protocollo che permette
di mappare una rete seguendo una struttura ben precisa basata ad indirizzi. Il tipo
di indirizzi più comune ad oggi è quello della versione 4 del protocollo,
ovvero IPv4, questi indirizzi seguono una struttura come quella seguente:

192.168.1.254 ----> un classico indirizzo IPv4

Come puoi vedere si tratta di 4 numeri diversi separati da un punto, ebbene, questi
quattro numeri possono andare da 0 a 255, quindi ciascun "campo" (ovvero
ciascuno dei quattro numeri) può avere 256 combinazioni diverse, ovvero 2^8
combinazioni. È meglio che vi abituate a vedere molte potenze del 2 d'ora in
avanti,
perchè sono i numeri che regolano tutte le tecnologie informatiche, ma su questo ci
torneremo più avanti quando vedremo le rappresentazioni numeriche in base 2
e base 16. Tornando ai nostri indirizzi... possiamo quindi dire che l'indirizzo più
"basso" rappresentabile è 0.0.0.0 mentre il più alto è 255.255.255.255
Ed è matematicamente vero... se non fosse che alcuni indirizzi speciali sono
riservati e non possono essere usati se non in speciali condizioni. Per esempio,
l'indirizzo 127.0.0.1 è speciale e non può essere assegnato a nessuna macchina
perchè viene usato per indicare letteralmente il "localhost", cioè la nostra
macchina. Cosa vuol dire? Che se avessimo un web server installato sulla nostra
macchina, aprire un browser e caricare l'indirizzo 127.0.0.1 ci collegherà al
server della nostra stessa macchina. Quindi tenetelo bene a mente, ogni volta che
vedrete "localhost" o 127.0.0.1 ci si sta riferendo alla macchina in utilizzo.

ROUTING:
Entrando più in dettaglio sul funzionamento di questi indirizzi, possiamo dividere
ogni indirizzo IP in due parti, una prima parte chiamata "net address"
descrive l'indirizzo di base di una rete, mentre la seconda, l'"host address", è il
numero specifico di un dispositivo collegato a suddetta rete. Come
facciamo a distinguerli? E perchè ci serve? Rispondiamo prima alla seconda domanda.
La maggior parte delle volte saremo interessati a comunicare con macchine
al di fuori della nostra rete locale, per fare ciò ci affidiamo ad un dispositivo
chiamato router, che ha il compito di instradare i nostri pacchetti verso la
destinazione corretta. Come fa però un router a sapere dove trovare questa macchina
esterna se non fare parte della nostra rete? Ecco che ci vengono in aiuto
gli indirizzi IP. Un IP è strutturato apposta per descrivere la topologia della
rete a cui un dispositivo è connesso, se sappiamo a che rete è connesso un
dispositivo possiamo interrogare uno o più router lontani e quindi più vicini a
quella rete per vedere se loro sanno esattamente dove trovare la nostra
destinazione, questi sono gli "hops" che ho citato prima, un hop, o salto, è il
passaggio di un pacchetto da un router ad un altro allo scopo di andare
sempre più vicino all'indirizzo di destinazione. Per fare questo ogni router fa uso
delle routing table, delle vere e proprie tabelle di percorsi consigliati
per un certo range di indirizzi, così il router sa dove inviare i pacchetti in base
al loro indirizzo, in tal modo il pacchetto arriverà a destinazione dopo
un certo numero di salti in base alla sua distanza.

Ma come fa un router a sapere in che rete si trova questa macchina esterna? Grazie
ad un parametro molto importante chiamato "subnet mask", probabilmente ne
avrete sentito parlare o persino visto nelle schermate dei comadi ipconfig di
Windows e ifconfig di Linux/*nix. La subnet mask è un indirizzo IP che ci permette
di separare l'indirizzo della rete da quello del dispositivo grazie ad una semplice
operazione matematica, l'AND logico. Se non siete ancora familiari con le
operazioni con i bit non preoccupatevi, le vedremo in dettaglio in futuro, ma
giusto per darvi un'idea: l'operatore AND ci dà come risultato 1 (vero) se entrambi
gli operatori sono 1, mentre il risultato sarà 0 (falso) in tutti gli altri casi.
Tutto qui. La subnet mask di una rete dipende dal tipo di rete stesso, nel caso
della maggior parte delle reti casalinghe la subnet mask sarà 255.255.255.0. Se vi
chiedete come mai è presto detto:

CLASSI DI IPv4:
Esistono cinque classi di indirizzi IP che coprono range ben specifici, si chiamano
semplicemente classi A, B, C, D, ed E. Le tre più comuni sono le prime tre
appunto, e ciascuna è usata per scopi diversi. Il range che cambia è quello del
primo campo dell'indirizzo, anche chiamato primo ottetto, in quanto ciascun campo
di un indirizzo può essere espresso in binario con 8 cifre ciascuno, ovvero 8 bit
(ricordate 2^8 combinazioni), quindi un indirizzo IP occuperà 4 byte,
uno per campo (8 bit = 1 byte):

1) Classe A --> 1 - 126 --> subnet mask: 255.0.0.0


2) Classe B --> 128 - 192 --> subnet mask: 255.255.0.0
3) Classe C --> 192 - 223 --> subnet mask: 255.255.255.0

Possiamo verificare la nostra subnet mask e di conseguenza la classe della nostra


rete controllando l'output dei comandi ifconfig (Linux/*nix) e ipconfig (Windows),
quello che troveremo come detto in precedenza sotto la voce subnet mask sarà
255.255.255.0. Abbiamo visto come questo indirizzo serva a distinguere l'indirizzo
specifico di una rete da quello del dispositivo a cui ci si vuole connettere,
grazie a questa separazione possiamo anche capire il numero di dispositivi massimo
che la rete può tenere collegati, facciamo un semplice calcolo: prendiamo
l'indirizzo locale 192.168.1.52 e convertiamolo in binario per fare una semplice
operazione
sui bit, otterremo: 11000000.10101000.0000001.00110100 il che è un numero
difficilmente leggibile da un umano, ma ricordiamo che quello che conta sono i
valori
individuali di 0 e 1. Ora convertiamo anche la nostra subnet mask in binario e
mettiamo i due indirizzi convertiti in colonna:

11000000.10101000.00000001.00110100 ---> indirizzo del dispositivo: 192.168.1.52


11111111.11111111.11111111.00000000 ---> subnet mask: 255.255.255.0
___________________________________ ---> facendo un AND logico su ciascun bit
otterremo:

11000000.10101000.00000001.00000000 ---> il risultato è l'indirizzo di base della


nostra rete, ovvero: 192.168.1.0

Interessante, no? Adesso abbiamo l'indirizzo di base che tutti i dispositivi


collegati alla nostra rete avranno in comune, l'ultimo ottetto, che vale 0 nell'
indirizzo della rete, sarà quello a cambiare da un dispositivo all'altro e potrà
variare da 1 a 254, 0 e 255 sono numeri riservati, 0 si usa per le network mask
mentre 255 si usa in quei pacchetti chiamati di broadcasting, ovvero pacchetti che
devono essere inviati a tutti i computer in una rete.

PACCHETTI:
Si è parlato molto di pacchetti fino ad adesso ma non ho ancora dato una vera e
propria spiegazione su di cosa si tratti esattamente, meglio rimediare prima
di create ulteriori confusioni. Un pacchetto di rete è un insieme di informazioni
che vengono formattate seguendo degli standard specifici per fare in modo
che il destinatario sia in grado di comprenderne il contenuto indipendentemente da
differenze di design, hardware, software, implementazioni e altro. Questi
standard vengono scelti in base alla natura delle informazioni da venire trasmesse,
questi pacchetti sono le informazioni che attraversano una rete e quindi
contengono tutto quello che due o più dispositivi si dicono. Esistono tipi diversi
di pacchetti in base al tipo di servizio da cui devono essere letti ed usati,
ad esempio, abbiamo pacchetti IP, pacchetti Ethernet, pacchetti TCP, e così via. Se
vogliamo scendere a basso livello, un pacchetto non è altro che un insieme di
byte che vengono trasmessi in una rete e che definiscono una struttura e dei
contenuti ben precisi.

PROTOCOLLI:
Ma come sono fatti internamente i pacchetti? Come è possibile capirli e crearne di
nuovi? Come abbiamo detto sopra il formato interno di un pacchetto dipende
dal suo tipo, ed il "tipo" di pacchetto stabilisce il cosiddetto protocollo che
utilizza. Un "protocollo di rete" è semplicemente un insieme di regole a cui
due macchine devono sottostare per capirsi a vicenda, i due devono riuscire a
parlare la stessa lingua se vogliono comunicare e questa lingua cambia in base
a quello che devono fare. Queste lingue sono i protocolli, e come ogni lingua ha il
suo lessico, ogni protocollo ha la sua struttura da seguire per la creazione
di un pacchetto. Prima di vedere qualcuno di questi protocolli parliamo delle due
famiglie di cui possono fare parte: TCP e UDP.

TCP e UDP:
L'acronimo TCP sta per Transmission Control Protocol mentre UDP sta per User
Datagram Protocol, e seppur abbia definito questi due come delle "famiglie",
tecnicamente parlando si tratta di protocolli veri e propri, detti protocolli di
trasporto perchè altri protocolli gli si appoggiano per inviare le proprie
informazioni all'interno dei pacchetti TCP/UDP. Le differenze tra i due sono molto
sostanziali: Le connessioni TCP cercano di essere affidabili e di garantire
l'integrità dei dati in transito, le connessioni UDP puntano più alla velocità ed
immediatezza, non ci sono controlli di integrità e non vengono nemmeno iniziate
delle connessioni vere e proprie, ma vengono semplicemente inviati i pacchetti
senza controllare che siano effettivamente arrivati a destinazione, mentre il TCP
inizia delle connessioni seguendo degli step precisi e i dati vengono inviati solo
una volta stabilita una connessione (teoricamente) sicura. Inoltre, mentre con
TCP i dati vengono inviati in un "flusso", UDP trasmette i dati in un singolo
"datagramma".

Un concetto molto importante è quello dell'incapsulamento, o degli strati, ovvero


il concetto di avere un pacchetto all'interno dell'altro per fare
in modo di inviare tanti tipi di informazioni diverse allo stesso tempo, ma questo
lo vedremo più in dettaglio tra poco. Quello che ci serve sapere è che
quando parliamo di protocolli di rete ne esistono tanti e di diverso tipo, il loro
tipo descrive che funzionalità abbiano all'interno di una rete, e adesso
vedremo come diversi protocolli funzionino contemporaneamente per garantire una
connessione tra dispositivi e per inviare dati di natura diversa. Un'astrazione
molto comoda dei diversi tipi di protocolli di rete è data dal modello OSI: Open
System Interconnection. Il modello OSI definisce diversi livelli che
descrivono lo scopo generale di ciascun protocollo, ed è anche utile nel
rappresentare bene il concetto di stratificazione.

IL MODELLO OSI:
Innanzitutto, cosa intendiamo esattamente per modello? Intendiamo uno standard che
descrive come una serie di protocolli collaborano insieme per effettuare
il trasporto di pacchetti in una rete. Il modello OSI consiste in 7 strati diversi,
uno strato può essere pensato come una famiglia di protocolli specializzati
in un compito molto specifico. Questi 7 livello hanno un ordine, solitamente si
studiano o dal più basso al più alto, o viceversa. Non ci interessa più di tanto
quale dei due ordini usare, ma i nomi e le funzioni di tali livelli. Vediamoli
insieme dal più alto al più basso, spiegando di cosa si occupano. Una piccola
nota, più il livello è "basso" più avrà a che fare con funzionalità hardware e di
rete non visibili all'utente, in quanto questi sistemi sono già implementati
nel sistema operativo. Invece un livello "alto" indica un protocollo con cui
l'utente può interagire personalmente:

--------------- -------------------
---------------------------------------------------------------
-----------------------
| [LIVELLO] | [NOME] |
[FUNZIONALITA'] | [ESEMPIO]
|
|---------------|-------------------|----------------------------------------------
-----------------|-----------------------|
| 7 | Applicazione | Comprende i protocolli che
dipendono strettamente dei | FTP, HTTP, SMTP |
| | | programmi usati dagli
utenti |
|
|---------------|-------------------|----------------------------------------------
-----------------|-----------------------|
| 6 | Presentazione | Protocolli che gestiscono il
modo in cui vengono | XDR, LPP |
| | | visualizzati i dati,
tramite formattazione, crittografia, | |
| | | compressione
|
|
|---------------|-------------------|----------------------------------------------
-----------------|-----------------------|
| 5 | Sessione | Un livello per gestire la
creazione, mantenimento, e | SOCKS, NetBIOS |
| | | terminazione di una
connessione (o sessione) tra servizi | |
|---------------|-------------------|----------------------------------------------
-----------------|-----------------------|
| 4 | Trasporto | Si occupa di gestire in
sicurezza il trasporto di dati in | TCP, UDP |
| | | maniera affidabile e
trasparente ai livelli superiori | |
|---------------|-------------------|----------------------------------------------
-----------------|-----------------------|
| 3 | Rete | È il livello che si prende
carico del corretto invio dei | IP, ICMP |
| | | dati a destinazione, che
quindi comprende compiti come | |
| | | il routing
|
|
|---------------|-------------------|----------------------------------------------
-----------------|-----------------------|
| 2 | Collegamento | Gestisce il trasferimento di
dati attraverso il livello | ARP, PPP, |
| | | fisico in maniera di
risolvere eventuali problemi e di | Ethernet |
| | | rendere le connessioni
equilibrate e sincronizzate | |
|---------------|-------------------|----------------------------------------------
-----------------|-----------------------|
| 1 | Fisico | Comprende le procedure
elettroniche e meccaniche per la | DSL, 802.11, |
| | | trasmissione di dati
attraverso un mezzo fisico, come un | Bluetooth |
| | | semplice cavo Ethernet o
l'aria per le comunicazioni | |
| | | wireless come Wi-Fi e
Bluetooth |
|
--------------- -------------------
---------------------------------------------------------------
-----------------------

Gli esempi fatti sopra sono molto pochi e decisamente poco esaustivi, inoltre non
preoccupatevi se non conoscete tutti quei protocolli, i più importanti
li approfondiremo in dettaglio più avanti ma è sempre bene fare una ricerca sul
vostro motore di ricerca preferito ogni volta che vedete un termine nuovo,
ricordate, più cose si imparano meglio è, cercate di non trascurare nulla per non
correre il rischio di non rimanere indietro. Il modello OSI in sè non è
un argomento semplice da trattare quindi consiglio di cercare altre informazioni al
riguardo per conto vostro su apposite guide più approfondite, specialmente
riguardo la descrizione di ciascun livello, ho dovuto fare un riassunto molto
sintetico per problemi di spazio (avete visto già quante informazioni contiene
questo singolo file, non voglio farli troppo lunghi o uno può fare fatica a
studiare) ma non per questo vi dovete fermare qui, perchè come ho già detto nell'
introduzione del file non dovete mai limitarvi a leggere solo quello che trovate
qui, cercate altre risorse, imparate imparate e imparate!

MODELLO A STRATI:
Per concludere la discussione sul modello OSI spieghiamo esattamente come mai si
dice sia un modello stratificato, in maniera semplice e abbastanza sintetica
senza tralasciare troppi dettagli. Prendiamo per esempio Gino, il nostro caro
utente ingenuotto che sta navigando sul web, spulciando tra i siti di news
politico-economiche pretendendo di capirci qualcosa, andiamo ad esaminare come fa
il suo browser web a creare ed inviare un pacchetto di rete, e come fa
a raggiungere la meta sano e salvo:

- APPLICAZIONE:
Gigino apre il link di una notizia, in quel momento il browser deve chiedere
al server del sito web il contenuto della pagina della notizia desiderata, per
fare ciò naturalmente deve create un pacchetto, e come fa? Prima di tutto,
visto che stiamo partendo dal livello più alto, il browser web creerà una richiesta
HTTP contenente tutti i dettagli necessari, tra cui versione del protocollo,
host, user-agent, il nome della risorsa desiderata, e diversi dati aggiuntivi
utili al server web per capire come rispondere alla richiesta.

- PRESENTAZIONE:
Una volta preparata la richiesta HTTP sarà meglio formattarla in un formato
trasmissibile in maniera sicura, magari crittografandola, questo avviene
attraverso protocolli specifici al livello della presentazione, il risultato
sarà sempre la richiesta di sopra, ma in un formato leggermente diverso.

- SESSIONE:
Nel caso Gigino stia utilizzando un proxy SOCKS, la sua macchina e il proxy
comunicheranno attraverso questo livello. Tenete sempre a mente che i livelli non
sono vere strutture concrete, ma sono delle astrazioni sulla gerarchia delle
funzionalità delle tecnologie in questione.
- TRASPORTO:
È ora di aprire una connessione per inviare il nostro pacchetto, come fare?
Il sistema operativo, che si occupa delle azioni di rete a basso livello,
aggiungerà alla nostra richiesta delle informazioni che detteranno il modo in
cui verrà inviata, se tramite TCP o UDP, la porta di
destinazione, e così via. Descrivere i pacchetti TCP richiederebbe molto
tempo quindi li vedremo molto più in dettaglio quando ci occuperemo di scansioni.

- RETE:
È qui che vengono finalmente aggiunti gli indirizzi IP del mittente e del
destinatario del pacchetto, tutti questi dati vengono aggiunti all'inizio della
richiesta ottenuta dal livello soprastante, quindi abbiamo una richiesta HTTP
all'interno di una richiesta TCP all'interno di un pacchetto IP. Capito da
dove arrivano gli strati? Il livello di rete si occupa di aggiungere tutte le
informazioni necessarie per un corretto routing, ovvero quello che serve ai
router in giro per il mondo per trovare il server di destinazione, che
potrebbe essere più o meno lontano da noi, richiedendo anche diversi salti diversi.

- CONNESSIONE:
A questo livello vengono tipicamente inviati i pacchetti tra nodi di una
stessa LAN, ad esempio pacchetti ARP (li vedremo più avanti!) ed Ethernet, mentre
quando un pacchetto viene ricevuto dal livello fisico questo è il livello che
si occupa di fare il controllo di eventuali errori, ma nel nostro caso stiamo
inviando un pacchetto quindi vediamo l'ultimo passaggio:

- FISICO:
Ci troviamo di fronte al livello più complesso, quello fisico: qui i nostri
dati digitali vengono trasformati in flussi di elettroni che navigano all'interno
di fili conduttori o attraverso l'aria tramite le onde elettromagnetiche,
quindi è qui che troviamo i dispositivi hardware che effettuano questa conversione,
le schede di rete. È la scheda di rete ad inviare il pacchetto ormai già
pronto e completo ad un altro dispositivo nella forma di impulsi elettrici o
elettromagnetici, in base al metodo di comunicazione scelto. Dall'altra parte
del mondo, dopo un lungo ma veloce processo di routing consistente nello scambio
di dati tra un router remoto e l'altro, il pacchetto di Gigino arriva al
server del sito di news, che lo riceve tramite la sua scheda di rete, viene
convertito
da impulsi elettrici a una struttura di dati digitale con cui è possibile
lavorare a livello software, ed uno alla volta gli strati vengono rimossi nel senso
inverso, fino ad avere solo più la nostra richiesta HTTP fatta dal browser di
Gigino che chiedeva la pagina web di una notizia, richiesta che viene passata
al server web, analizzata, e gli viene creata un'apposita risposta seguendo
lo stesso procedimento che abbiamo appena visto, per essere inviata dritto al
computer del buon vecchio Gigino, ignaro di tutta la magia che sta dietro a
quei pochi click che gli permettono di fingersi colto con gli amici dopo aver letto
la recensione di un libro, per non doverselo leggere tutto da sè.

INDIRIZZI MAC:
Sicuramente ne avrete già sentito parlare, gli indirizzi MAC sono altri di quei
componenti fondamentali che ci permettono di mettere su una rete funzionante. Ma
a cosa servono esattamente? Questa è la domanda fondamentale a cui non tutti sanno
rispondere. Essenzialmente, l'indirizzo MAC non serve ad altro che a fornire
informazioni riguardo l'hardware di un dispositivo, tra cui il produttore, il
modello dell'hardware, e la presenza o meno di alcune funzionalità. Il nome è la
versione breve di Media Access Control, e vedrete molto spesso in discussioni
tecniche il termine NIC, ovvero Network Interface Controller, con cui ci si
riferisce
al dispositivo a cui appartiene il MAC, quindi è corretto dire che il MAC non
appartiene ad un computer o ad un telefono, ma alla sua interfaccia di rete.

Diversamente dagli indirizzi IP, i MAC sono composti da 6 diversi ottetti che
vengono rappresentati in notazione esadecimale, ovvero in base 16, come questo:

00-FF-8C-DF-51-B4

Gli indirizzi MAC vengono usati al livello 2 del modello OSI, quindi da protocolli
come Ethernet, e talvolta vengono usati come un modo (stupido) per restringere
l'accesso ad una risorsa solo a determinate macchine, basandosi sugli indirizzi MAC
di queste ultime. Come è facile intuire, per bypassare questo demenziale
sistema tutto ciò che serve è ottenere il MAC di una macchina con accesso alla
risorsa che ci interessa (si può ottenere tramite sniffing in meno di un minuto)
e cambiare il nostro per spacciarci come la macchina autorizzata. Questo è
possibile perchè mentre una volta i MAC non erano modificabili in quanto
implementati
direttamente nell'hardware delle schede di rete, adesso per la maggior parte è il
sistema operativo ad occuparsi anche dei MAC, quindi modificarlo è una
stupidaggine. Mai usare i MAC per verificare l'identità di una macchina.

PORTE E SERVIZI:
Come ultimo argomento da affrontare insieme per questa piccola "lezione" vediamo
uno degli aspetti più importanti delle reti, i servizi e le porte. Che differenza
c'è tra di loro? E a cosa servono precisamente? Innanzitutto diciamo che le porte
sono numeri interi (di tipo "integer") che possono assumere un valore da 1 a
65535, e possono essere usate per mappare i servizi in un sistema operativo. Cosa
vuol dire? Vuol dire che per permettere ad un sistema operativo di poter
gestire più servizi di rete allo stesso tempo (ad esempio sia un server HTTP che
uno FTP ed un login SSH) ha bisogno di molti canali di comunicazione diversi
per poter distinguere ciascuna sessione e per rendere ciascun servizio disponibile
in maniera univoca, permettendo chiunque di sapere come connettersi ad una
macchina per usare un determinato servizio piuttosto che un altro. Quindi possiamo
dire che un servizio è un programma (e di conseguenza il suo processo) che
utilizza una (o più) porte per interfacciarsi all'esterno e rendersi disponibile
per l'uso.

È importante sottolineare come le porte non sono componenti fisici di un computer,


il tutto avviene digitalmente: il numero della porta a cui un utente si vuole
connettere viene aggiunto ai pacchetti di rete nel livello di trasporto del modello
OSI, quindi all'interno dell'header TCP o UDP. Come vedremo più avanti un header
è un blocco di byte che esplicita proprietà del pacchetto e dei dati da esso
trasportato, nel caso degli header TCP avremo tra queste informazioni la porta del
servizio cercato dall'utente, che, quando ricevuto dal destinatario del pacchetto,
ne leggerà il numero e verificherà se tale porta è stata assegnata a qualche
servizio in esecuzione, se esiste effettivamente un servizio mappato per utilizzare
quella porta allora il pacchetto gli verrà inviato e il processo ne farà uso.

Molte porte hanno dei valori predefiniti per rendere l'accesso ai loro servizi
veloce ed intuitivo, ma in sistemi dove la sicurezza diviene importante si possono
trovare diversi servizi, o addirittura tutti, in esecuzione su porte completamente
diverse da quelle di default, solitamente usando numeri molto alti per rendere
le scansioni di porte più superficiali inefficaci. Per finire, ecco un piccolo
elenco di porte molto comuni che ci troveremo ad utilizzare molto spesso:

PORTA PROTOCOLLO
21 FTP
22 SSH
23 Telnet
25 SMTP
53 DNS
69 TFTP
80 HTTP
88 Kerberos
110 POP3
123 NTP
389 LDAP
443 HTTPS
445 SMB
3389 RDP

Direi che come primo documento può essere abbastanza, non vorrei caricarvi con
troppo informazioni da studiare quindi per ora mi fermerò qui. Altri
argomenti relativi alle reti verranno analizzati in futuro quando si parlerà di
privacy, information gathering, ma soprattutto di scansioni di host
e servizi, questa è solo una prima e riassuntiva infarinatura di alcuni concetti
fondamentali dell'immenso mondo delle reti che qualunque hacker
dovrebbe saper padroneggiare. Come promesso, vi do il nome di un libro molto
interessante (e molto spesso) da cui potrete imparare molte, moltissime
altre cose se questo documento vi ha interessato: "Reti di Calcolatori", di Larry
Peterson e Bruce Davie.

Per ora questo è tutto, ci vediamo al prossimo documento. Mi auguro tutto questo vi
stia appassionando almeno un quarto di quanto io ami l'informatica.