Intro
Anche se questa guida non è di quelle avanzate, ho deciso di partire comunque dalle basi. Creiamo delle fondamenta con i concetti essenziali, capiremo il funzionamento di una rete per poi entrare nel vivo dell'articolo. Inoltre ci sarà un video pratica che spiega come scrivere da zero un port scanner in Python.Ti ricordo che se sei uno alle prime armi nel mondo dell'hacking, o anche se sei un hacker un po' più esperto, ti consiglio il mio video-corso completo che ti guida passo passo, partendo da zero, nel mondo dell'hacking e della sicurezza informatica. Ecco il link: Video-Corso Come Diventare Hacker.
Comunicazione Sicura Fra Due Computer (o Macchine)
Il concetto che sta alla base della sicurezza informatica è senza ombra di dubbio la comunicazione tra due computer.Far comunicare due macchine in maniera veloce e sicura è sempre stato un dilemma per gli informatici. Occorre sempre aggiornarsi e studiare metodi nuovi per rendere la comunicazione sempre più sicura.
Basti pensare che un anno fa è stata resa pubblica una grave falla nel protocollo di comunicazione Wi-Fi WPA2 (che è quello che utilizziamo tutti nelle reti domestiche):
I ricercatori Mathy Vanhoef e Frank Piessens della Katholieke Universiteit di Leuven, hanno recentemente scoperto una grave falla di sicurezza relativa al protocollo di comunicazione Wi-fi Protected Access 2 (comunemente noto come WPA2). Tale scoperta (pubblicata su un articolo scientifico pubblicamente accessibile) dimostra che chiunque si trovi nel raggio di comunicazione della rete wireless attaccata, può implementare il cosiddetto Key Reinstallation AttaCK (KRACK) e leggere il contenuto dei dati scambiati tra il PC e il router/access point. [Fonte: html.it]Infatti è possibile, a causa di questa falla, crackare e scoprire password WiFi in una rete.
Non è semplice, quindi, far parlare due computer senza dare la possibilità ad un hacker di intromettersi.
Tuttavia, almeno per questo articolo non parleremo di come aumentare la sicurezza in una rete o come sfruttare determinate vulnerabilità.
Vogliamo, invece, creare vari tool (in questa e nelle prossime guide) che ci serviranno per due scopi:
- Comprendere in maniera più approfondita come funziona una rete (visto soprattutto dal lato programmatore/hacker)
- Imparare a maneggiare Python per poter creare tool più complessi in futuro
Per fare ciò, dobbiamo capire prima cosa sia una rete.
Cos'è Una Rete
Ecco la fatidica domanda... a cui risponderà Wikipedia (in ogni caso, per comprendere meglio puoi leggere questa guida).In informatica e telecomunicazioni una rete di computer è un insieme di dispositivi hardware e software collegati l'uno con l'altro da appositi canali di comunicazione, che permette il passaggio da un utente all'altro di risorse, informazioni e dati in grado di essere pubblicati e condivisi. [Fonte: Wikipedia]Quindi una rete è "due cose":
- Insieme dei dispositivi
- Canali di comunicazione
Appurato ciò, facciamo un esempio.
Una rete domestica (tipo la rete di casa tua) è composta da:
- Dispositivi: il tuo PC, il tuo cellulare, i dispositivi degli altri abitanti della casa ecc...
- Canali di comunicazione: WiFi (a meno che tu non viva nel paleolitico ed usi il cavo ethernet)
Secondo esempio, rete Internet:
- Dispositivi, il tuo PC, il tuo cellulare, il mio PC, il mio cellulare ecc...(beh non posso elencarli tutti)
- Canali di comunicazione: qui la question si fa più complicata, diciamo che i canali di comunicazione sono gli ISP (Internet Service Provider, per intenderci le aziende che ti danno Internet e linea telefonica) anche se non è propriamente corretto
Ora sorge la questione numero 2: come comunicano queste macchine connesse in rete?
Come Si Comunica In Rete?
Arriviamo al sodo. Innanzitutto c'è bisogno di distinguere un dispositivo dall'altro, quindi ognuno di essi deve avere un codice identificativo univoco.
Per chi non conosce l'italiano: codice univoco vuol dire che non esiste un altro codice uguale. Ovvero se un PC connesso in rete ha un codice X, un altro PC connesso in rete nello stesso momento non potrà avere codice X ma magari avrà Y o Z (o qualsiasi altra lettera che non sia X).
Cosa sono questi codici? Sono gli indirizzi IP: ovvero 4 numeri (compresi tra 0 e 255) divisi da un punto (esempio: 127.0.0.1). In realtà è un po' pià complicato spiegare cosa sia un indirizzo IP, ma per il momento ci basta capire questo.
Prendi il portatile, apri il cmd (o Prompt dei comandi) e digita ipconfig e premi Invio. Dovrebbe apparirti, tra le altre cose, l'indirizzo IP del tuo portatile.
Se fai la stessa cosa dal PC fisso, noterai che esso avrà un IP diverso.
Quindi, se vuoi far comunicare (diciamo tramite WiFi) il portatile col fisso, ognuno di essi dovrà conoscere l'IP dell'altro.
Server e Client
Occorre precisare il "metodo" di comunicazione server/client.
Ecco un'immagine per comprendere al meglio:
Il server è il dispositivo che offre un servizio. Esempio: il sito Google, esso offre come servizio il motore di ricerca.
Il client è il dispositivo che usufruisce del servizio. Esempio: il tuo smartphone, quando cerchi qualcosa su Google stai usufruendo del servizio offerto da Google.
Se voglio conoscere l'indirizzo IP di un server mi basta aprire il cmd e scrivere:
ping dominio
Invece della parola dominio, ovviamente, va scritto il dominio del sito. Nell'esempio di google:
ping google.com
Quando vogliamo comunicare con un server, c'è bisogno di specificare su quale porta vogliamo "connetterci". Infatti, un server può avere più di una porta aperta (ora vedremo cosa significa) e su ognuna di esse è in ascolto un determinato programma che offre uno specifico servizio.
Capiamo meglio questo concetto specificando prima cosa sia una porta:
Immagina che un server sia come un palazzo con vari appartamenti. Ogni appartamento rappresenta un servizio offerto. La gente che passa davanti a questo palazzo rappresenta i client. Ogni persona che vuole un determinato servizio (client) entra nel palazzo (si connette server) e cerca la porta dell'appartamento che offre tale servizio (si collega a quella determinata porta del server). Se la porta è aperta significa che il servizio è disponibile e quindi l'utente può entrare ed usufruirne, se è chiusa vuol dire che il server non sta erogando nessun servizio in quel determinato appartamento e il client torna a casa sconsolato.
Le porte sono numerate. Per i servizi più comuni esse hanno quasi sempre numeri fissi. Ad esempio, la porta http ovvero quella che ci permette di visitare i siti web è solitamente la numero 80.
Schema delle porte di un server (dominio: esempio.com).
Quando vai su Google per cercare qualcosa, infatti ti connetti al server di Google e stabilisci un collegamento sulla porta 80. Una volta che viene stabilito tale collegamento, tu e Google potete comunicare tranquillamente su quella porta. Tu invii richieste a Google (ad esempio la parola o frase che vuoi cercare) e Google ti risponde (ad esempio inviandoti i risultati della ricerca che hai effettuato).
Questa è una spiegazione molto base di come due macchine comunicano in rete.
Capiamo meglio questo concetto specificando prima cosa sia una porta:
Le porte, in informatica nell'ambito delle reti di calcolatori, sono lo strumento utilizzato per realizzare la multiplazione delle connessioni a livello di trasporto, ovvero per permettere ad un calcolatore di effettuare più connessioni contemporanee verso altri calcolatori, facendo in modo che i dati contenuti nei pacchetti in arrivo vengano indirizzati al processo che li sta aspettando. [Fonte: Wikipedia]Questa definizione è un po' complicata per gli inesperti, quindi cerco di spiegare in parole povere.
Immagina che un server sia come un palazzo con vari appartamenti. Ogni appartamento rappresenta un servizio offerto. La gente che passa davanti a questo palazzo rappresenta i client. Ogni persona che vuole un determinato servizio (client) entra nel palazzo (si connette server) e cerca la porta dell'appartamento che offre tale servizio (si collega a quella determinata porta del server). Se la porta è aperta significa che il servizio è disponibile e quindi l'utente può entrare ed usufruirne, se è chiusa vuol dire che il server non sta erogando nessun servizio in quel determinato appartamento e il client torna a casa sconsolato.
Le porte sono numerate. Per i servizi più comuni esse hanno quasi sempre numeri fissi. Ad esempio, la porta http ovvero quella che ci permette di visitare i siti web è solitamente la numero 80.
Schema delle porte di un server (dominio: esempio.com).
Quando vai su Google per cercare qualcosa, infatti ti connetti al server di Google e stabilisci un collegamento sulla porta 80. Una volta che viene stabilito tale collegamento, tu e Google potete comunicare tranquillamente su quella porta. Tu invii richieste a Google (ad esempio la parola o frase che vuoi cercare) e Google ti risponde (ad esempio inviandoti i risultati della ricerca che hai effettuato).
Questa è una spiegazione molto base di come due macchine comunicano in rete.
Cos'è Un Port Scanner
In informatica il port scanning è una tecnica informatica progettata per sondare un server o un host al fine di stabilire quali porte siano in ascolto sulla macchina. [Fonte: Wikipedia]
Port scanner vuol dire appunto "scansionatore delle porte", cioè un programma che ci permette di
capire lo stato delle porte di un server.
Continuando con l'esempio del palazzo, il port scanner è un omino che mandiamo a sondare quali porte del palazzo sono aperte e quali chiuse.
Possiamo mandarlo "alla cieca" senza specificargli le porte che ci interessano, quindi impiegherà molto tempo per controllare tutto il palazzo (a meno che non mandiamo più omini contemporaneamente). Oppure possiamo orinargli di controllare solo un range di porte, ad esempio solo dalla numero 100 alla numero 800, così compierà il suo lavoro in minor tempo.
Lo scopo di questa guida è appunto creare un omino che permette di fare ciò. Per chi non lo avesse capito l'omino rappresenta il programma Python che andremo a creare.
Perché è Utile Un Port Scanner
Esso è utile per svariati motivi in ambito della sicurezza informatica.
Mettiamoci nei panni di un hacker: vogliamo testare la sicurezza di un server. Non abbiamo accesso fisicamente ad esso, quindi l'unico modo è trovare una vulnerabilità a livello comunicativa tra il server e la tua macchina (client). Per comunicare con un server sappiamo che dobbiamo collegarci ad una porta e capire quale servizio è in ascolto su essa, se il servizio è vulnerabile ad un qualche tipo di attacco il gioco è fatto!
Quindi, è essenziale capire quali porte sono aperte (questo sarà il compito del port scanner) e quali servizi sono in ascolto su di esse (questo sarà il compito del banner grabber, che è un port scanner più avanzato, vedremo come crearlo in Python nell'articolo successivo).
Una volta capito che servizio (che altro non è che un programma) in ascolto su una porta e la sua versione, possiamo cercare in rete le sue vulnerabilità e quindi studiare un attacco su quella porta per hackerare il server.
Dunque possiamo dire che un port scanner utilizzato tantissimo nel mondo dell'hacking e del pentesting, infatti il primo step che si fa per testare la sicurezza delle reti e fare la scansione delle porte e capire quali sono aperte e quali chiuse e soprattutto conoscere i programmi in ascolto su di esse.
Come Creare Un Port Scanner In Python
Ecco il video che spiega come creare un port scanner:Port Scanner Più Utilizzati
Ecco una lista dei port scanner più utilizzati in ambito della sicurezza informatica e penetration testing:
- nmap: senza dubbio il migliore, è completo, free, disponibile su Linux, Windows
- Advance Port Scanner: attualmente disponibile solo per Windows
- MiTeC Network Scanner: un po' sottovalutato ma fa il suo dovere
0 commenti:
Posta un commento