Nel capodanno del 1999 l’intero mondo rimase col fiato sospeso temendo l’arrivo del famigerato Millennium Bug che avrebbe danneggiato i dispositivi informatici di tutto il mondo. Per fortuna, il Millennium Bug non è mai arrivato, ma chiunque abbia uno smartphone, un computer o un altro dispositivo informatico almeno una volta nella vita si è ritrovato a fare i conti con almeno un bug. Molto probabilmente con tanti bug.
Ma cosa sono questi “bachi” che provocano malfunzionamenti, problemi di sicurezza e a volte portano addirittura al crash del dispositivo? Fondamentalmente, sono errori nel codice sorgente di un programma, che vanno dai banali errori di ortografia a errori ben più complessi e difficili sia da individuare che da risolvere, tanto che spesso la segnalazione di questi errori arriva dagli utenti che sperimentano il bug in prima persona.
Se poi il bug riguarda la sicurezza del dispositivo, diventa una vulnerabilità che qualunque hacker potrebbe sfruttare per scopi malevoli. Per questo motivo, è molto importante aggiornare sempre il dispositivo con gli update e le patch di sicurezza distribuiti dagli sviluppatori. C’è poi chi, come Google, vigila su queste vulnerabilità e a partire dal 2014 ha lanciato un team che si occupa proprio di scoprirle: il Project Zero. Un progetto che analizza i programmi e segnala la presenza di bug alle società di software, che poi avranno modo di correggerli per tempo.
Bug, un po’ di storia
La parola inglese bug significa letteralmente “piccolo insetto”. A utilizzare per la prima volta questa parola per indicare un bug informatico è stato Grace Hopper, un tenente della marina statunitense, che stava cercando di capire, nel 1947, perché il computer elettromeccanico Mark II che era sotto la sua gestione, non funzionasse correttamente. Smontando la macchina, Hopper scoprì che a causare il malfunzionamento era stata una piccola falena rimasta incastrata tra i circuiti e le bobine. “Primo caso reale di ritrovamento di un bug”, scrisse Hopper sul suo diario corredando la pagina con il piccolo insetto.
Da allora, questa parola iniziò a essere associata agli errori informatici, anche se già a partire dal 1878 l’inventore Thomas Edison la utilizzava per indicare dei generici guasti meccanici che si verificavano nelle sue invenzioni. Il bug ha portato poi alla definizione di un altro termine molto usato nel campo informatico, cioè il debugging, che indica il processo di controllo che gli sviluppatori attuano dopo aver scritto un programma, per verificare che non ci siano errori nel codice sorgente.
Bug: cosa sono e cosa fanno
Un bug, quindi, è definito come un errore nel codice sorgente di un programma che può provocare un malfunzionamento di un software o di una componente hardware. In alcuni casi ci troviamo davanti a errori impercettibili, cioè che non pregiudicano l’utilizzo del dispositivo, e di cui difficilmente ci si accorge. Altri invece sono ben evidenziati dal fatto che il programma che usiamo non è fluido, spesso va rallentando fino ad andare in crash e bloccarsi completamente. I bug più pericolosi di tutti però sono quelli che provocano vulnerabilità nella sicurezza, dato che gli hacker potrebbero utilizzarli per attaccare il computer o lo smartphone.
Esistono tre tipologie di bug a seconda della modalità con cui l’errore viene inserito nella scrittura del programma: errori di sintassi, di logica e di runtime. Gli errori di sintassi sono generalmente causati da errori di “ortografia” nella scrittura del codice o nella sintassi delle istruzioni e impediscono al programma di girare nel compilatore, che esegue la traduzione dal codice sorgente al linguaggio macchina. Questi sono facili da riconoscere e solitamente sono segnalati allo sviluppatore proprio dall’editor dell’ambiente integrato di sviluppo (IDE) quando si compila il programma durante il processo di scrittura.
Ci sono poi gli errori di logica, detti anche errori di semantica, che invece vengono commessi durante la fase di progettazione di un algoritmo. A causarli può essere una mancata comprensione del problema, alcuni vincoli che i dati di input devono rispettare o ancora la valutazione del test dell’algoritmo. Il risultato è che il programma non fornirà l’output richiesto e quindi non farà quello per cui era stato pensato. Individuare questo tipo di errori non è facile e spesso lo sviluppatore è costretto a ricorrere al debugger dell’IDE, un programma che va a caccia dei bug più complicati.
Infine, ci sono gli errori di runtime, che si verificano nella fase di esecuzione del programma. Il codice, anche se formalmente ben scritto, non viene compilato correttamente e questo problema si annida nell’utilizzo della memoria da parte del programma stesso, quindi riguarda solitamente puntatori e programmazione dinamica. Ad esempio, il puntatore sbagliato porterà il programma a tentare di scrivere su una locazione di memoria a cui non ha accesso, oppure un insieme di dati porta a operazioni non lecite, come la divisione di un numero per zero (che restituisce infinito, un numero ovviamente incalcolabile per una macchina).
Bug: dalla prevenzione alla segnalazione
Una volta definite le tipologie di bug esistenti, appare chiaro che un errore di sintassi difficilmente arriverà in un programma rilasciato agli utenti. Gli sviluppatori saranno allertati ben prima che questo possa fare danni, dato che il programma restituirà uno o più avvisi di errore già al momento della compilazione. Gli errori di logica e di runtime, invece, potrebbero sfuggire in fase di compilazione e non essere notati, soprattutto se provocano il malfunzionamento di una funzione non particolarmente utilizzata in modo tale che il programma sembri, ad una prima occhiata, fare bene il suo dovere.
Per prevenire questo tipo di errori si può ricorrere a programmi di debugging, ma se il problema non viene individuato neppure ricorrendo a questi accorgimenti, il software sarà effettivamente rilasciato al pubblico con il bug nel codice. Proprio gli utenti, quindi, potrebbero essere i primi a sperimentare il malfunzionamento, spesso senza rendersene nemmeno conto, a meno che il programma non si blocchi e il dispositivo non vada in crash.
Il consiglio quando si usa un software è di segnalare sempre qualsiasi anomalia si riscontri nel suo funzionamento, anche solo se il programma sembra più lento del solito o se saltuariamente finisce in blocco. Persino dei personaggi distorti o degli oggetti non “congruenti” nel videogame a cui si sta giocando potrebbero essere il sintomo della presenza di un bug da segnalare agli sviluppatori, così che possano correggerlo.
Google Project Zero: caccia alle vulnerabilità
Il Project Zero di Google è un team formato da analisti di sicurezza informatica che danno la caccia ai bug presenti sia nei propri software che in quelli di terze parti e che nasce ufficialmente nel luglio 2014. Gli analisti hanno il compito di individuare bug in grado di provocare vulnerabilità zero-day. Il nome “zero-day” si deve al fatto che, essendo il software impattato già distribuito ed in uso, gli sviluppatori avranno zero giorni per risolvere e distribuire una patch di sicurezza prima che qualche hacker utilizzi la falla per compiere attacchi. In pratica si tratta di una specie di “via” alla gara per arrivare per primi che mette in concorrenza gli sviluppatori del codice e gli hacker che cercheranno di sfruttare quella particolare vulnerabilità.
Dopo aver individuato un bug, il Project Zero lo segnala in forma privata agli sviluppatori chiedendo di rilasciare una patch di sicurezza per risolverlo. Solo dopo che la patch di sicurezza è stata rilasciata, oppure trascorso un periodo di 90 giorni al termine del quale il problema è ancora senza risoluzione, Google rende pubblica la vulnerabilità. La scadenza di 90 giorni è dovuta alla responsible disclosure, con cui Google si impegna a concedere il tempo necessario alla software house per risolvere la vulnerabilità, passato il quale informa gli utenti affinché possano prendere provvedimenti per evitare di essere vittime di attacchi informatici.
Fonte Fastweb.it