Esame settembre 2021

Domanda 1
...

Descrivere l’attacco “Man in The Middle” applicato alla firma elettronica

Risposta 1
...

Con attacco Man In The Middle si intende che tra due utenti che comunicano si interpone un terzo utente, con cattive intenzioni. Immaginiamo che tali utenti siano A e B. E supponiamo che A firma digitalmente (con la sua chiave privata) dei dati da inviare a B. C, l'attaccante si interpone nella comunicazione e ottiene il dato cifrato da A con la chiave privata di A, C lo decifra (essendo la chiave pubblica di B nota) e modifica il messaggio. Fatto ciò firma il messaggio con la sua chiave privata e lo invia a B. Nel frattempo C, deve convincere con l'inganno, B che la chiave pubblica di A è la sua (di C), se B cade nell'inganno, utilizza la chiave pubblica di C per verificare la firma considerando autentica un firma contraffatta da C. A questo tipo di attacco si può porre rimedio cifrando il messaggio e la firma con la chiave pubblica del destinatario, o utilizzando un HMAC (firmato) per il messaggio.

Domanda 2
...

Il sequence number utilizzato in IPSEC serve per contare:
A) i byte al fine di eliminare pacchetti ripetuti
==B) i pacchetti al fine di eliminare pacchetti ripetuti ==
C) le connessioni TCP al fine di bloccare collegamenti pericolosi
D) i byte al fine di ritrasmettere pacchetti persi
E) i pacchetti al fine di ritrasmettere pacchetti persi
F) le connessioni TCP al fine di riaprire connessioni interrotte

Domanda 3
...

Il cifrario noto come ‘one time pad’:
A) è un cifrario asimmetrico completamente sicuro
B) usa chiavi asimmetriche della stessa lunghezza
C) usa chiavi asimmetriche lunghe quanto il testo da cifrare
==D) usa chiavi simmetriche lunghe quanto il testo da cifrare ==
E) usa chiavi simmetriche di qualsiasi lunghezza e da utilizzarsi una volta sola

Domanda 4
...

Descrivere il funzionamento delle chiamate di funzione, con riferimento all’architettura IA32

Risposta 4
...

Le chiamate di funzione avvengono con l'allocazione dei cosiddetti frame di chiamata all'interno dello stack. Prima che una funzione venga chiamata vengono posizionati sullo stack i parametri che si vogliono passare alla funzione, poi si salva il valore dell'indirizzo di ritorno e infine si salva il vecchio valore del frame pointer. A questo punto il frame pointer si fa puntare al valore corrente dello stack pointer.
Prologo:

push ebp     # salvataggio frame pointer
mov ebp, esp # spostamento frame pointer all'inizio del frame 
sub esp, n   # per allocare spazio nello stack
asm

Epilogo:

mv esp, ebp
pop ebp
ret
asm

Domanda 5
...

Fare un esempio di codice vulnerabile rispetto ad attacchi di buffer overflow e spiegare il funzionamento dell’attacco riferito a quello specifico esempio di codice, per l’architettura IA32.

Risposta 5
...

Un esempio potrebbe essere:

int auth(){
	char[10] secret;
	gets(secret); // funzione vulnerabile
	if(secret == "topsecret0"){
		loginOK();
		return 0;
	}else return -1;
}

void loginOK(){
	printf("Login succeded");
}

int main(){
	auth();
}
C

In questo codice il main chiama la funzione auth(), la funzione auth() alloca un buffer che deve essere riempito dall'utente. All'utente viene lasciata la possibilità di riempire il buffer quanto vuole. L'utente, quind, può riempire il buffer per accedere ad altre aree di memoria dello stack.
L'attaccante potrebbe accedere alla funzione loginOK modificando l'indirizzo di ritorno e inserendo l'indirizzo della funzione loginOK.

Domanda 6
...

Discutere il paradosso del compleanno, generalizzato per un anno di N giorni e per un gruppo di K persone.

Risposta 6
...

Il paradosso del compleanno è un risultato probabilistico che suggerisce che per avere una probabilità maggiore del 50% affinché vi siano due persone che abbiano la stessa data di nascita in un certo gruppo di persone è sufficiente che tale gruppo sia composto da persone.
Generalizziamo il problema, diciamo di avere un anno di giorni e un gruppo di persone.
Chiamiamo la probabilità che tutti gli elementi del gruppo compiano gli anni in giorni diversi.
Abbiamo: Mentre è uguale a : Se vogliamo che sia pari almeno al 50%:
Per grande: