bug software

La parola bug, (che letteralmente si traduce “insetto“), viene usata in informatica per indicare gli errori di programmazione.

Una delle prime cause che minano la nostra sicurezza su Internet è data proprio dalle falle nella programmazione del sistema operativo o degli applicativi software  che usiamo per lavorare e navigare.

Tali anomalie, oltre a creare difetti di funzionamento possono aprire dei varchi nelle connessioni (chiamati backdoor), tali da rendere insicura la navigazione sul web.

Per questo è sempre consigliato di installare prontamente tutti gli aggiornamenti rilasciati dal produttore del software stesso. Esistono virus informatici proprio allo scopo di sfruttare i bug di sistema per intrufolarsi nei nostri device.

Ma quali sono i rischi per la sicurezza informatica dovuti a queste anomalie nella programmazione?

In questo articolo ci occuperemo di chiarirne natura, possibili soluzioni e best practice per impedire che gli hacker possano sfruttarle a proprio favore.

Cos’è un bug

La definizione di bug informatico può avere una duplice accezione, riferendosi sia

  • a un errore nella scrittura del codice sorgente di un applicativo software
  • o a un difetto di progettazione in una periferica hardware.

In linea generale, dunque, si tratta di anomalie di varia natura che compromettono il corretto funzionamento di un programma informatico.

Gli errori di programmazione più diffusi sono quelli

  • di sintassi
  • di logica
  • o di runtime, ovvero quelli che si verificano durante la fase di esecuzione del programma.

Non tutti i bug sono immediatamente rilevabili: tant’è vero che le aziende produttrici rilasciano periodicamente aggiornamenti  per fornire nuove implementazioni, ma soprattutto per correggere gli errori presenti nelle precedenti versioni.

Altri, invece, si manifestano esplicitamente

  • rendendo l’applicativo più lento
  • e portando, nei casi peggiori, ad un crash e/o un blocco del software.

I più pericolosi di tutti sono i cosiddetti bug di sicurezza, che pregiudicano la sicurezza stessa del programma e rendono i device più vulnerabili ai cyberattacchi.

Le versioni più recenti dei sistemi operativi in circolazione sono senz’altro molto più sicure delle precedenti. Tuttavia, non passa giorno senza che vengano diffusi allarmi per nuove e imminenti minacce che sfruttano bug non ancora risolti.

Da alcuni siti web, proprio a causa di errori di programmazione che ne compromettono la sicurezza, può accadere di  scaricare file eseguibili senza nemmeno rendersene conto. Questi si avvieranno in automatico al primo riavvio del pc e  infetteranno l’intero sistema.

E non è finita: utilizzando alcuni bug di Outlook è possibile mandare in esecuzione automatica alcuni virus non appena questi vengono scaricati dal server.

Tipologie di bug software

Come già accennato, i bug si possono distinguere in quattro principali categorie:

  • errori di sintassi
  • errori in esecuzione o di runtime
  • errori nella logica del programma
  • errori di hardware
  • bug d’interfaccia

Gli errori di sintassi

Sono gli errori che si commettono nella fase di scrittura del codice. Si tratta di  errori di ortografia  dovuti al mancato rispetto delle regole sintattiche dello specifico linguaggio di programmazione  che si sta utilizzando.

Gli errori di sintassi vengono generalmente segnalati dal compilatore in fase di traduzione del codice sorgente in linguaggio macchina. Sarà lo stesso debugger, infatti, a segnalarli proprio perché impossibilitato a farlo” girare” a causa dei bug .

Questa tipologia di falla è spesso di facile individuazione e soluzione.

Gli errori di runtime

Spesso può accadere che il codice sia correttamente implementato  e l’algoritmo del programma sia perfettamente corretto e che, tuttavia, il bug si presenti in fase di esecuzione (o runtime).

Il più delle volte, questo tipo di problematica, detto appunto bug di runtime, è legato al fatto che il software  gestisce in modo erroneo l’utilizzo della memoria, allocandosi in uno spazio di memoria al quale non ha accesso.

Gli errori di logica

Questi sono gli errori che si commettono nella fase di implementazione dell’algoritmo.

Possono essere causati da:

  • un errato impiego del linguaggio di programmazione, che prescinde dagli errori di sintassi
  • una mancata comprensione del problema che ha originato l’anomalia

Come si può immaginare, l’errore logico è quello più complicato da riconoscere, in quanto non viene emesso alcun messaggio di errore.

Lo si può individuare solo nel momento in cui l’algoritmo ottiene risultati in output diversi da quelli previsti. In alternativa, si deve ricorrere al debugging, letteralmente l’eliminazione dei bug dal codice.

Gli errori di Hardware

A volte il termine bug può indicare anche un difetto di progettazione in un componente hardware che ne causa un comportamento imprevisto o comunque diverso da quello specificato dal produttore.

I bug d’interfaccia

Se un errore viene classificato come bug d’interfaccia significa che è stata riscontrata incompatibilità tra il device in uso e

  • l’API (Application Programming Interface)
  • la gestione dell’hardware
  • un’implementazione del protocollo.

Come rintracciare un bug

Come già specificato, il debug (o debugging) consiste nella rimozione degli errori dal programma.

Quest’operazione può essere effettuata

  • direttamente in fase di programmazione
  • in fase di testing
  • durante l’utilizzo. In questo caso saranno gli stessi utenti a segnalare la presenza di anomalie  alla software house.

In linea generale, le operazioni di debugging si dividono in 5 fasi:

  • identificazione del bug
  • individuazione della componente (hardware o software) in cui esso è presente
  • ricerca delle cause che lo hanno originato
  • implementazione di una patch di sicurezza, ovvero un aggiornamento volto a correggere l’errore
  • strutturazione di test per verificare l’efficacia della patch implementata

Per effettuare il debugging del software se ne esegue il tracing, ovvero si segue il flusso del codice in esecuzione.

Come dice la parola stessa, quest’operazione viene svolta attraverso appositi tool noti come debugger, ognuno specifico per ogni linguaggio di programmazione.

Grazie al debugger,  il programmatore è in grado di visualizzare in tempo reale le operazioni compiute dalle istruzioni scritte nel codice e può, quindi, rendersi conto di eventuali anomalie.

Un altro importante aspetto legato al debugging è quello di assegnare

  • un livello di severity, ovvero di gravità
  • un livello di priority, che indica quanto urgentemente deve essere risolto

specifico per ogni bug.

In particolare il livello di severity può essere inquadrato secondo le seguenti tipologie:

  • critico, determinato dai cosiddetti bug bloccanti che impediscono il ripristino delle condizioni di sistema
  • alto, dovuto a  bug che impattano sul funzionamento dell’applicativo
  • medio, legato a funzionalità errate nella componente nel processo
  • minore, dovuto a errori di compilazione.

In effetti, ricercare singoli errori, la maggior parte delle volte, può essere molto più complicato della scrittura stessa del codice

Su internet sono inoltre disponibili strumenti di tracciamento dei bug gratuiti. Tra essi quali si annoverano:

  • Backlog,
  • YouTrac
  • Shortcut
  • Jira 
  • GoodDay, ecc..

Effetti di un bug

La presenza di bug nel sistema può dar vita ai più svariati effetti: si va da

  • errori che, non comportando gravi compromissioni alle funzionalità del programma, possono rimanere silenti ed essere ignorati per lungo tempo
  • a falle in grado di bloccare o mandare in crash l’intero programma
  • passando per i già citati bug della sicurezza, che consentono ai pirati informatici di aggirare i controlli di accesso al fine di ottenere privilegi di amministrazioneA

Un esempio lo troviamo nei bug riscontrati negli aggiornamenti di Windows 10 risalenti a inizio 2021. che comportavano:

  • un processo di installazione che non andava a buon fine,
  • messaggi di errore
  • rimozione dei file temporanei
  • ritorno alla release precedente
  • malfunzionamenti nella libreria DirectPlay, che comprometteva la corretta esecuzione dei videogiochi.

Altre tipologie di bug presenti proprio nei videogiochi possono comportare scenari con oggetti insoliti o personaggi deformati.

I bug sono gli errori più pericolosi che possono essere riscontrati. Ad esempio, un bug nel software nei siti di e-commerce potrebbe causare ripetute richieste di pagamento, le quali potrebbero potenzialmente tradursi in:

  • nessun’operazione andata a buon fine
  • tanti addebiti quanti sono stati i tentativi di pagamento effettuati.

Nonostante le più avanzate tecniche di debugging e un’attenzione a 360° da parte del programmatore, è praticamente impossibile prevedere ogni singolo bug che si potrebbe verificare in tutti i possibili casi d’utilizzo del software.

La presenza di un bug nel software o nel sistema, come già menzionato, causa gravi falle nella sicurezza. Per i cybercriminali la presenza di bug consente di sfruttare appositi script, ossia liste di comandi che vengono eseguiti senza compilatore, per attaccare più facilmente il device. Questo processo, chiamato exploit, comporta pesanti  conseguenze, tra cui:

  • l’avvio di attacchi Dos o DDoS, che impediscono l’accesso al dispositivo o al servizio web che è stato attaccato
  • l’assunzione di controllo del sistema da parte del pirata informatico

Gli autori di attacchi informatici sono in grado di rilevare vulnerabilità nel sistema e venderle per denaro attraverso il dark web. Una volta infettato un portale, potrebbero persino hackerare tutti gli altri siti web presenti sullo stesso host.

In sintesi, dunque, la presenza di bug amplifica l’esposizione agli attacchi informatici proprio perché, a causa della sua intrinseca vulnerabilità, costituisce una porta di accesso privilegiata a vantaggio dei pirati informatici.

L’importanza degli aggiornamenti

Lo strumento di difesa principale che l’utente o l’amministratore di rete possono attivare sarà il costante aggiornamento de sistema operativo e degli applicativi software con le release di mantenimento o i service pack emessi periodicamente dalle case produttrici.

Come evidenziato lungo il corso della trattazione, fornire la giusta attenzione agli aggiornamenti è d’importanza cruciale per una corretta gestione dei bug.

Un consiglio è quello di non installare subito l’aggiornamento appena questo viene reso pubblico, ma di attendere invece alcuni giorni o settimane per essere sicuri che esso funzioni come dovuto e che altri utenti non abbiano lamentato malfunzionamenti derivanti dalla sua installazione.

Come difendersi

Come in medicina, anche nella sicurezza informatica la miglior cura è la prevenzione.

Ecco che, anche per quanto riguarda i bug, è stata sviluppata tutta una serie di tool in grado di segnalare già in fase di compilazione la loro eventuale presenza e coadiuvare il processo di correzione.

Gli approcci e i metodi più comuni in tal senso sono:

  • stile di programmazione: se si incontra un’incoerenza dei dati in un programma durante la sua esecuzione, esso è in grado di fermarsi immediatamente, in modo che il bug sia localizzato. In alternativa il programma può semplicemente informare l’utente, attendere la correzione e continuare l’esecuzione;
  • metodologie di sviluppo: quest’attività rientra nella disciplina di ingegneria del software e il suo scopo è eliminare il bug già in fase di progettazione del software;
  • ausilio del linguaggio di programmazione: i linguaggi di programmazione spesso includono funzionalità che segnalano la presenza di eventuali errori di battitura o di logica;
  • analisi del codice: attraverso l’ausilio di strumenti per l’analisi del codice gli sviluppatori sono in grado di effettuare un check dell’intero testo del programma.

Conclusioni

Come abbiamo visto, la presenza di bug è un fattore di rischio informatico da non sottovalutare in alcun modo.

Per questo è necessaria una figura esperta in cybersicurezza, interna o esterna all’azienda ,con le competenze necessarie per

  • aggiornare i programmi
  • segnalare bug
  • o effettuare un corretto debugging.

Cyberment

Azienda per il monitoraggio e la prevenzione degli attacchi informatici

Siamo un’azienda specializzata in consulenza di sicurezza informatica.

Il nostro team di specialisti cybersecurity vanta un’esperienza decennale nel settore: ci occupiamo di identificare le vulnerabilità nei sistemi informatici e nelle applicazioni web.

Cyberment ha 3 sedi dalle quali studia con costanza l’evoluzione delle minacce informatiche, tra cui: Milano, Mantova e Londra.

Se desideri conoscere in modo approfondito i nostri servizi di prevenzione, contattaci e parlaci dei problemi della tua azienda.