Spesso e volentieri, nel momento in cui assistiamo ad un attacco hacker da parte di attori malevoli, si sente parlare di Arbitrary Code Execution.
Definita dai più come un attacco della massima gravità dagli esperti di cybersecurity, essa ruota attorno proprio all’exploiting di vulnerabilità note nel sistema bersaglio, per fargli eseguire interi set di istruzioni in maniera completamente arbitraria.
Ma come sempre andiamo con ordine e affrontiamo per gradi l’argomenti.

- Cos’è l’Arbitrary Code Execution?
- Come funziona l’Arbitrary Code Execution?
- Arbitrary Code Execution non malevola
- Come si possono mitigare i danni in caso di attacco?
Cos’è l’Arbitrary Code Execution?
Per esecuzione arbitraria di codice (Arbitrary Code Execution – ACE) si intende un grave errore di sistema provocato da una manipolazione del codice di cui il software è costituito. Si tratta di una forma di attacco in grado di spingersi perfino oltre ciò che è normalmente previsto da un malware, o un ransomware, poiché intacca direttamente l’esecuzione stessa di un programma senza mezzi esterni, ma tramite una vulnerabilità intrinseca al codice sorgente stesso.
Ciò accade principalmente per un motivo: qualsiasi computer è incapace di distinguere la differenza tra input validi e comandi.
Nel momento in cui un utente digita una sequenza precisa di caratteri alfanumerici e il sistema è programmato per accettarla, qualsiasi input può trasformarsi in un potenziale attacco.
Il metodo di attacco solitamente è realizzato tramite l’exploiting di una vulnerabilità presente sul bersaglio designato e dal file system che si occupa della creazione di shotcut o link simbolici. In tal modo un attore malevolo può eseguire un software da remoto senza la necessità di entrare in possesso dell’eseguibile. Pur di realizzarla, gli attori malevoli sono alla costante di ricerca di vulnerabilità nascoste presenti in applicazioni software, sistemi e perfino hardware.
Tale metodo risulta non solo estremamente efficace, ma immensamente pericoloso sia per i PC basati su Windows, che perfino sui server Linux che eseguono web services Apache.
L’hacker che esegue l’esecuzione arbitraria di codice mira all’alterazione diretta del codice sorgente mentre lo stesso è già in esecuzione su un processo attivo.
Lo scenario risultante è la manipolazione del valore dei singoli bit di memoria RAM allocati dal sistema operativo stesso.
In tal modo, l’attacco risultante rappresenta il peggior scenario possibile per chiunque lo subisca.
Come funziona l’Arbitrary Code Execution?

La realizzazione di un attacco basato sull’esecuzione arbitraria di codice prevede come prima fase l’analisi approfondita del sistema preso di mira, al fine di individuare delle vulnerabilità adatte al proprio scopo. Tra quelle più note si citano:
- Buffer overflow e over-reads;
- Deserializzazione di dati non attendibili;
- Type confusion;
- SQL Injection;
- Cross-Site Scripting (XSS);
- GNU LDD;
L’obiettivo principale dell’attore malevolo nel momento in cui realizza l’exploiting di tali vulnerabilità, comporta il suo accesso diretto al sistema, senza che avvenga alcuna convalida degli input prima dell’invio dei dati ai flussi di lavoro sensibili lato server. Ciò avviene principalmente con l’acquisizione del controllo dell’instruction pointer, che può essere un’istruzione di salto, o un branch, presente in un processo attualmente in esecuzione sul bersaglio.
Per sua natura un puntatore deve sempre puntare alla successiva istruzione da eseguire, tuttavia, nel momento in cui se ne acquisisce il controllo, è possibile reindirizzare il flusso dati verso istruzioni completamente diverse.
In altre parole, chi controlla il puntatore, controlla il sistema, poiché è in grado di stabilire autonomamente quali saranno le successive istruzioni da far eseguire al programma. In tal modo, l’attore malevolo può iniettare del software esterno direttamente nel processo, sfruttando direttamente la vulnerabilità nota e cambiare il valore dell’instruction pointer, affinché punti al codice malevolo, piuttosto che a quello già in esecuzione. Per cui, il programma non segue più il regolare flusso previsto dal suo codice, ma è costretto a seguirne uno non valido e a cui non può sottrarsi in nessun modo. L’esempio più comune di iniezione di codice, è l’invio di input non previsti che saranno successivamente immagazzinati nell’input buffer della RAM.
L’attore malevolo diventa quindi invisibile al sistema ed è libero di agire indisturbato, scalando i privilegi amministrativi e impossessandosi quindi di tutto ciò che è presente sullo stesso. Ma le cose non si fermano di certo qui, in quanto l’aggressore potrebbe perfino decidere di includere nelle sue istruzioni del codice macchina, realizzando così un payload specifico per essere eseguito nei buffer di memoria heap, che si sovrascrivono in fase di overflow dei dati. Oppure gli stessi possono essere forzati a eseguire un codice specifico da remoto, realizzando così una Remote Code Execution (RCE).
In entrambi gli scenari, se il payload è eseguito con lo stesso livello di privilegi amministrativi del processo di cui si è acquisito il pieno controllo, l’attaccante può arbitrariamente eseguire qualsiasi tipo di codice sul sistema preso di mira, con risultati devastanti. Tra i principali si possono citare:
- Creazione di backdoor;
- Estrazione e/o cancellazione di dati sensibili;
- Escalation di privilegi amministrativi;
- Interruzioni di sistema impreviste;
Arbitrary Code Execution non malevola
Finora abbiamo affrontato gli effetti malevoli dell’esecuzione arbitraria di codice, tuttavia è necessario evidenziare che esiste un settore in cui la stessa viene realizzata per scopi non malevoli, ovvero il retrogaming. Gli appassionati di videogiochi retro e gli speedrunners la sfruttano per raggiungere dei risultati normalmente non ottenibili in sessioni di gioco normali, come tempi di completamento record (speedrun appunto), o elementi di gioco isolati dal codice stesso.
Tra gli esempi più famosi si ricordano il caso del 2014 alla convention Awesome Games Done Quick, in cui un gruppo di appassionati è stato in grado di eseguire i videogiochi Pong e Snake all’interno di un altro videogioco: Super Mario World.
Un altro esempio molto famoso è legato ai videogiochi Pokémon Rosso, Blu e Giallo per Game Boy, al cui interno è presente una creatura resa di proposito inottenibile dagli stessi sviluppatori, in modo da distribuirla solo tramite eventi sponsorizzati a tempo limitato: Mew. Gli appassionati si sono quindi coalizzati e, una volta scoperta la vulnerabilità, hanno realizzato un’iniezione di codice, che ha portato all’ottenimento legittimo del Pokémon misterioso da parte dei giocatori.
Come si possono mitigare i danni in caso di attacco?
Una procedura univoca per prevenire un attacco di questo genere, è pressoché impossibile, ma restano sempre dei consigli su come poter evitare una possibile infezione e mitigare i danni.
- Aggiornare sempre e costantemente i software di sistema e i protocolli di sicurezza
Ci si deve assicurare che la propria organizzazione e i clienti ad essa associati adottino robuste politiche di sicurezza. Tutti i sistemi, l’hardware e i software in uso devono essere costantemente aggiornati con puntualità. Ciò riduce di molto le possibilità di un’infezione da ransomware. - Implementare un piano di monitoraggio degli endpoint affidabile
Senza alcun endpoint sicuro e monitorato, gli aggressori possono identificare immediatamente le vulnerabilità presenti nella rete della compagnia. Una rete con endpoint rafforzati e monitoraggio costante scoraggia i collettivi a tentare un attacco e permette all’organizzazione di individuare potenziali falle in maniera proattiva. - Investire in software antivirus affidabile
Spesso e volentieri l’infiltrazione mirata ad un attacco non avviene tramite l’azienda stessa, ma tramite i clienti ad essa associati, che rappresentano i soggetti più esposti a tali pratiche. Per cui è necessario doverli istruire con pratiche di sicurezza base e spingerli all’uso dell’autenticazione in due fattori sui loro dispositivi. Questo non solo permette alla propria organizzazione di rafforzare la propria cybersecurity, ma aiuta anche i clienti a proteggersi. - Effettuare un backup del database e dei propri servizi online
Le operazioni di backup sono sempre una delle migliori soluzioni per mitigare i danni e non perdere le informazioni sensibili dei propri clienti. Tuttavia, l’immagine di ripristino risultante deve essere conservata su un server lontano dalla rete principale, in quanto una sua eventuale compromissione vanificherebbe tutti gli sforzi condotti. - Investire in software antivirus professionale
Le soluzioni gratuite presenti in rete, o integrate nei sistemi operativi Microsoft, non garantiscono un livello di protezione sufficiente, poiché estremamente limitate e sprovviste di moduli adeguati per affrontare gli scenari d’attacco. Ecco perché è necessario investire in antivirus professionali con opzioni di abbonamento annuale dotati di moduli completi e costantemente aggiornati.
In conclusione
Stando a quanto abbiamo discusso, l’Arbitrary Code Execution si conferma come il problema più grave che si possa riscontrare nell’ambito di sicurezza informatica. Costringere il sistema bersaglio a eseguire istruzioni, codici e oprazioni normalmente non previste dai processi che sono in uso in quel momento, rappresenta una minaccia di proporzioni incredibili, in quanto si viene a perdere il controllo che si aveva senza alcun preavviso, né senza che vi sia stata effettivamente l’azione di un software malevolo creato ad hoc.
Supervisionare i processi e imporsi un controllo completo e costante sulle vulnerabilità note presenti nei sistemi che si usano quotidianamente, deve essere resa una normalità. Altrimenti non sarà possibile né contrastare la minaccia, né tantomeno arginare i danni da questa derivanti.
