cyberchallenge-modem/keygen
2020-09-20 13:50:20 +02:00
..
keygen.c keygen: added gen_update_key() in main 2020-09-20 13:50:20 +02:00
Readme.md Documentation update 2020-07-19 11:59:13 +02:00

Keygen

Il codice responsabile per la generazione della chiave WPA di ogni dispostivo. Scrive il seriale in /etc/serial, il nome della rete in /etc/ssid e ila chiave WPA in /etc/wpa. E' poi uno script bash a inserirli nella conf di Hostapd.

Per ottenere una chiave i partecipanti hanno due opzioni:

  1. Effettuare il reverse engineering dell'algoritmo e reimplementarlo di nuovo. Non essendo il codice ne' offuscato ne' particolarmente lungo, premesso che riconoscano la funzione di md5 dovrebbe essere fattibile in un tempo ragionevole.
  2. Nel caso che il binario sia per un target x86 occorre danneggiarlo (ad esempio rimuoverne gli header) in modo che non sia direttamente eseguibile. Allo stesso tempo per altre architetture, occorre introdurre qualche limitazione per cui non sia semplicemente eseguibile con qemu-static (ad esempio verificare gli hash di alcuni file nel filesystem, o aggiungere dipendenze a cui l'attaccante non ha accesso).

Pseudocode

function gen_password(mac, serial) {
	string password
	seed1 = hex(md5(mac))
	seed2 = hex(md5(serial))
	len = 32

	xorshift(seed1[0:8], seed1[8:16], seed1[16:24], seed1[24:32])

	for (i = 0; i < len; i++) {
			password += seed2[xorshift_get()%20]
	}

	return password
}