Home
Le minacce hacker basate su prevedibilità e casualità

05 Febbraio 2024

Le minacce hacker basate su prevedibilità e casualità

di

Per paradosso, avere il software bene organizzato e temporizzato, capace di gestirsi gli automatismi in autonomia, presta il fianco a minacce molto serie.

Minacce insospettabili e subdole

Gli ingegneri amano la prevedibilità. Sarebbe difficile costruire una Morte Nera se a metà dell’allestimento della sovrastruttura la gravità entrasse in azione come un raggio traente. Ma la prevedibilità piace anche agli hacker. Se il tuo programma principale esegue i comandi contenuti in /tmp/setup.sh, allora un hacker che possa creare quel file potrà eseguire i propri comandi e avrà fatto tombola. Se il tuo gioco Sabacc imposta l’ordine delle carte in base alla data ogni notte a mezzanotte, allora un hacker che scopra tale meccanismo sarà a cavallo.

È importante capire l’importanza dell’imprevedibilità o della casualità ed è anche importante capire che, prevedibilmente, sono cose differenti. Puoi avere numeri difficili da prevedere avendo alcuni esempi, oppure puoi avere numeri casuali. Per ora, definiamo casuale una situazione in cui anche una perfetta conoscenza del sistema non ti aiuterà ad anticipare il prossimo output. Per esempio, un nuovo lancio di dadi ben agitati è effettivamente casuale; se invece seguono regole e successioni attentamente progettate, possono dare alla casa un vantaggio prevedibile e pagare profumatamente.

Leggi anche: Wireshark e framework di ricognizione

I computer, tuttavia, sono prevedibili. Tale prevedibilità porta a minacce dovute a supposizioni o informate o dovute alla pura forza bruta e a scoprire alcune verità sulle probabilità che tali supposizioni abbiano successo.

Minacce basate sulla prevedibilità

Gli hacker adorano imitare l’Imperatore e ridacchiare dicendo: Tutto quanto procede come avevo previsto!. Potrebbero prevedere un nome file in modo che possano scriverlo prima di te, un numero sequenziale su un protocollo di rete in modo che possano falsificare i pacchetti o come cambierai la tua password incrementando una cifra finale in modo che soddisfi i requisiti di aggiornamento della password stessa.

Indovinare e verificare

Alcune cose sono prevedibili: qual è il numero successivo nella sequenza 1, 4, 9, 16? (è 25). Altre cose sono indovinabili: sto pensando a un numero compreso tra 1 e 5 (sto pensando a π). Che cosa dici? Scegliere π è barare? È certamente un numero, un numero reale, per la precisione, ed è compreso tra 1 e 5. Abituati al fatto che le tue supposizioni vengano infrante. Ora sto pensando a un numero intero compreso tra 1 e un milione, inclusi gli estremi. Niente trucchi sciocchi, ma ti sto dando solo un’ipotesi. Posso applicare personalmente la regola della singola ipotesi, ma farlo fare a un computer può essere complicato.

Ogni ipotesi richiede del tempo, così come la sua verifica, il che significa che gli hacker intelligenti cercano di ottimizzare le loro ipotesi, mentre i difensori intelligenti rendono impossibile ogni ottimizzazione.

Usare dizionari e indovinare

Quale di queste è più probabile che sia la password di qualcuno: RememberAlderaan o dg1298L;dsaf4lt? Potremmo sperare che siano ugualmente probabili, o anche che le persone cerchino di evitare le password prevedibili; RememberAlderaan sembra più probabile dell’altra stringa, altrettanto lunga. E forse RememberAlderaan1 o anche Remember­Alderaan1! sono ancora più probabili, poiché le persone vi sono spinte dalle regole di composizione delle password. Gli hacker intelligenti si costruiranno così dei dizionari, elenchi di possibili risposte; poi li organizzeranno per criteri di verosimiglianza, li useranno per strutturare le loro supposizioni e magari li pubblicheranno in Internet.

I dizionari sono possibili grazie a tre cose: uno spazio di ricerca limitato, una mancanza di vera casualità e i limiti umani. Lo spazio di ricerca è il numero di possibilità totali. Un lucchetto con tre quadranti numerati (da 0 a 9) rotanti ha 1.000 combinazioni possibili. Il lucchetto di un armadietto scolastico, con tre numeri compresi tra 1 e 36, potrebbe avere 363, ovvero 46.656 combinazioni possibili, il che sembra molto. Se devi provarli tutti uno dopo l’altro e riesci a provarne uno al secondo, ti ci vorrebbero quasi 13 ore, il che sarebbe piuttosto noioso (supponendo che il lucchetto sia silenzioso e che quindi uno stetoscopio non ti aiuterà, e che abbia una tolleranza fisicamente ridotta, quindi che non accetti un 32 al posto di un 33).

Per la precisione, per mancanza di vera casualità intendo che la distribuzione delle risposte non è uniforme. Alcune risposte sono più probabili di altre. I limiti umani includono la memoria e la volontà o capacità di digitare lunghe stringhe casuali in modo affidabile.

Indovinare senza informazioni (forza bruta)

I computer eccellono nel lavoro noioso e ripetitivo e 13 ore non sono uno spazio di ricerca poi così grande. Le chiavi crittografiche tendono a essere di 128 bit o più proprio per creare artificialmente uno spazio di ricerca molto grande. In media un hacker proverà metà delle chiavi perfettamente casuali prima di trovare quella giusta per un messaggio. In questo caso, sarebbe più o meno un trilione di trilioni di trilioni – ovvero circa 170 seguito da ben 37 zeri. Anche per i computer pur bravi a svolgere un compito ripetitivo, questo è un problema impossibile. Questa forma di ipotesi, dove ogni risposta è altrettanto probabile, si chiama forza bruta.

La differenza tra la forza bruta e la Forza è che la prima non richiede né poteri magici né un duro addestramento. In effetti, la forza bruta viene solitamente eseguita da un software che svolgerà tutto quel lavoro noioso e ripetitivo.

Per definizione, un’ipotesi in un sistema crittografico si applica a una sola tupla di testo in chiaro: chiave e testo cifrato. Se devi verificare se una password ti fa accedere al mio account sul mio server di posta, stai controllando una combinazione nome-utente/password. Se disponi di un elenco di password codificate con una funzione hash, potresti essere in grado di eseguire un algoritmo come il seguente (arriveremo al motivo per cui sto usando il termine hash tra un minuto):

Lista dizionario[parole]   // Un insieme di password candidate
Lista password[hash]   // Un set di password in codifica hash
Per ogni parola in dizionario
{
	Candidato = hash(parola);
	Se Candidato è in password: mostra Candidato
}

Dal punto di vista dell’hacker, questo non è male, perché l’output di ogni operazione di hash viene confrontata con ogni voce nell’elenco delle password. Se l’elenco contiene 50 password in codifica hash, basta calcolare il codice hash una sola volta e poi confrontare il risultato con le 50 password memorizzate.

Utilizziamo un algoritmo di hash perché, se abbiamo crittografato l’elenco delle password, chiunque rubi la chiave di crittografia potrà decifrare con facilità l’intero elenco. E infatti usiamo quello che viene chiamato hash con sale. Il sale (salt) è un piccolo valore casuale che cambia in base alla password; noi sottoponiamo ad hash salt, password e memorizziamo salt, hash. Per essere concreti, con piccolo si intende sufficientemente piccolo da essere univoco per ciascun elemento di un elenco, di solito 32 bit o più, ed è difficile aver ragione di 128 o addirittura 256 bit.

Quindi, come mostra la tabella, anche se due utenti hanno la stessa password, i valori memorizzati saranno differenti (per semplicità, qui sto usando salt brevi e hash troncati).

Tabella: password e salt

Password

Salt

Valore memorizzato

RememberAlderaan

abc

abc,d2224c78779

RememberAlderaan

cde

cde,eea78a17ab5f

Il risultato finale è che il lavoro dell’hacker per eseguire l’hashing di una potenziale combinazione di password e salt rivela al massimo una password, piuttosto che un codice hash che porta a rivelare ogni utente la cui password è RememberAlderaan (la galassia brulica di simpatizzanti dei ribelli). Se ipotizziamo che le ricerche su tabelle siano più veloci dei calcoli hash, allora è una buona cosa per chi difende il sistema. In effetti, progettiamo algoritmi hash in modo che non possano essere accelerati.

Un attacco a forza bruta funzionerà sempre, dato abbastanza tempo, motivo per cui i sistemi crittografici sono costretti ad avere spazi di ricerca (lunghezze delle chiavi) molto ampi.

Indovinare in modo informato

Ora, se RememberAlderaan è ritenuta una password comune, magari gli hacker ordineranno i loro dizionari in modo che venga prima di altri candidati di 16 caratteri. L’hacker può porre il proprio dizionario nell’ordine desiderato e oggi tale ordine deriva dalle grandi violazioni che hanno esposto decine di milioni di password. Gli hacker generalmente ipotizzano uno spazio di ricerca parziale. Poiché prendono di mira una persona ben determinata, conoscere le altre password che quella persona ha utilizzato o i suoi hobby, i nomi e cognomi di chi la circonda e date importanti come compleanni e anniversari, può aumentare enormemente le probabilità di indovinare.

Certe stringhe sono molto più facili da ricordare e da digitare, e ciò contribuisce all’efficacia dei dizionari. Per inciso, se stai ancora digitando le tue password come un Ewok preindustriale, procurati un gestore di password.

Compromessi di tempo/memoria, comprese le tabelle arcobaleno

Se hai un’operazione costosa, i risultati della memorizzazione in cache possono essere utili. Se tale operazione consiste nell’hashing delle password, gli hacker potrebbero archiviare i codici hash dei più comuni miliardi o più di password possibili o combinazioni password-salt. Se un salt è di soli 12 bit (come nel caso dell’archiviazione delle password Unix), si tratta solo di un’espansione di 4.096 volte delle esigenze di archiviazione. Sì, ho scritto solo. Sembra molto, e lo è, ma se hai un miliardo di sequenze da 8 byte e un miliardo di hash da 16 byte, sono 24 miliardi di byte, ovvero 24 GB. Un’espansione di 4.096 volte richiederebbe circa 100 TB. Ma stiamo parlando di memorizzare un miliardo di password, circa due per ogni persona residente in Unione Europea.

Nel pensare a che cosa conservare, dobbiamo ragionare in termini di compromessi di tempo e memoria. Se i salt non ci sono o sono piccoli, puoi precalcolare i valori per le password più popolari (diciamo alcuni milioni). Invece di ricalcolarli, puoi memorizzare i risultati. È un compromesso: più spazio di memorizzazione ma meno tempo di calcolo poi.

Sono disponibili ottimizzazioni molto più intelligenti, incluse le tabelle arcobaleno, le quali offrono compromessi flessibili tra lo spazio di memorizzazione e il costo di una ricerca.

Il problema del compleanno

Ci sono attacchi in cui l’hacker deve essere molto specifico; altre volte la difesa ha maglie molto più larghe. Dimenticare questo secondo caso è facile e porterà a guai.

Per esempio, supponiamo che tu abbia un server web e io desideri trovare il numero (grande) corretto per accedere alle foto, quindi creo URL come /pictures/19800521/photo1, /pictures/19800521/photo2 e così via. Ora, potrei non indovinare il numero giusto per vedere le foto caricate da George Lucas. Se /pictures/19800522/ sono le foto di Lawrence Kasdan, regista di L’Impero colpisce ancora, potrei avere fortuna. Certo, è un banale incremento di uno, ma è peggio dei piccoli numeri casuali, che è peggio dei grandi numeri casuali.

Se stai cercando di indovinare la mia password, devi trovare una singola riga nell’elenco delle password memorizzate. Ma se funziona una password qualsiasi, il tuo impegno si riduce.

Il lato oscuro del software, di Adam Shostack

Chi sviluppa software deve dare importanza alla sicurezza, all’usabilità e alla consegna in tempi rapidi: per questa ragione l’ingegneria informatica è una disciplina così critica.

C’è un importante concetto relativo alle statistiche: il problema del compleanno. È un problema semplice: quante persone devono essere poste in una stanza prima che ci sia una probabilità del 50 percento che due siano nate lo stesso giorno dell’anno? Spero che a questo punto percepirai una trappola. E se non l’hai percepita, considerati avvertito. Dopo questo avvertimento, prova a ipotizzare un numero. Alcuni avranno ipotizzato 182, un numero intuitivamente ovvio, ma molto sbagliato. La prima persona ha una possibilità certa di non condividere il compleanno con altri. La seconda persona ha una probabilità di 364/365 di non condividere il compleanno con l’unica persona già presente. La terza persona ha una probabilità di 363/365 di non condividere il compleanno e le probabilità complessive sono 1 × 364 / 365 × 363 / 365. Man mano che aggiungiamo persone, le probabilità scendono a poco meno di 1 su 2 con sole 23 persone. Ora, quali sono le probabilità che con 23 persone nella stanza qualcuno abbia il tuo stesso compleanno? Si riparte da 1 su 365, ancora una volta la differenza tra la necessità di indovinare un valore valido e la necessità di indovinarne uno specifico.

L’attacco a compleanno è importante, perché a volte un hacker deve trovare un determinato compleanno, a volte un qualsiasi compleanno, e le probabilità di farlo aumentano in modo sorprendentemente rapido. Per esempio, magari hanno bisogno di un file che esegue l’hashing su un determinato valore SHA-2, o forse di un file che esegue l’hashing su qualsiasi valore SHA-2 che è stato firmato dalla tua chiave? (SHA-2 è uno standard hash crittografico.)

Torna all’inizio.

Questo articolo richiama contenuti da Il lato oscuro del software.

Immagine di apertura originale di Robert Stump su Unsplash.

L'autore

  • Adam Shostack
    Adam Shostack è esperto di tecnologia, imprenditore e game designer. Professore associato presso l'Università di Washington, è membro del BlackHat Review Board e fondatore di Shostack + Associates, una società di consulenza specializzata in sicurezza dedicata ad aiutare le organizzazioni a fornire sistemi sicuri.

Iscriviti alla newsletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.

Libri che potrebbero interessarti

Tutti i libri

Il lato oscuro del software

Insegnamenti da Star Wars per jedi della sicurezza

32,75

46,99€ -30%

26,60

28,00€ -5%

18,99

di Adam Shostack