DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Esecuzione di Codice Remoto

Esecuzione di Codice Remoto

Immagine del contenuto dell'Esecuzione di Codice Remoto

Che Cos’è l’Esecuzione di Codice Remoto (RCE)?

L’Esecuzione di Codice Remoto, spesso abbreviata come RCE, è un tipo di cyber attack che consente a un attaccante di eseguire codice arbitrario su una macchina o in un ambiente bersaglio. Questo concede all’attaccante il pieno controllo sull’applicazione o sistema vulnerabile. Gli attacchi RCE sono estremamente pericolosi poiché consentono a un avversario di eseguire qualsiasi azione per cui l’applicazione compromessa o l’utente hanno permessi.

Le vulnerabilità RCE spesso sorgono a causa di una validazione e sanitizzazione input insufficienti nelle applicazioni che elaborano input utente non affidabili. Se l’input fornito dall’utente non viene adeguatamente validato prima di essere utilizzato in operazioni sensibili alla sicurezza come query di database, operazioni su file system o comandi di sistema, un attaccante potrebbe essere in grado di iniettare ed eseguire codice dannoso.

Impatto degli Attacchi di Esecuzione di Codice Remoto

L’impatto di un attacco RCE riuscito può essere grave, a seconda dei privilegi dell’applicazione sfruttata. Nel peggiore dei casi, RCE può consentire a un attaccante di prendere completamente il controllo del sistema vulnerabile e accedere a dati sensibili, installare malware e utilizzare la macchina compromessa per ulteriori attacchi. Alcune conseguenze potenziali di RCE includono:

  • Furto di dati sensibili: L’attaccante può accedere ed esfiltrare informazioni sensibili memorizzate sul sistema o accessibili all’applicazione, come dati dei clienti, registri finanziari, proprietà intellettuale, ecc.
  • Installazione di malware: RCE spesso consente l’installazione di malware come ransomware, spyware, trojan, rootkit e bot, consentendo all’attaccante di mantenere l’accesso e il controllo anche dopo l’attacco iniziale.
  • Movimento laterale: Una macchina compromessa può essere utilizzata come testa di ponte per lanciare ulteriori attacchi contro altri sistemi sulla stessa rete, consentendo all’attaccante di muoversi lateralmente e compromettere ulteriori risorse.
  • Danno alla reputazione: Gli attacchi RCE che portano a violazioni dei dati o interruzioni del servizio possono danneggiare gravemente la reputazione di un’organizzazione e portare alla perdita di fiducia dei clienti.

Tipi di Attacchi di Esecuzione di Codice Remoto

Gli attacchi RCE possono assumere varie forme a seconda della vulnerabilità sfruttata. Alcuni tipi comuni di RCE includono:

SQL Injection

SQL injection è un tipo di attacco RCE che prende di mira applicazioni che costruiscono query SQL basate sull’input dell’utente senza una corretta validazione. Un attaccante crea un input dannoso contenente codice SQL, che viene poi eseguito dal database. Per esempio:



SELECT * FROM users WHERE username = '' OR 1=1--' AND password = '';

Questo input porta la query SQL a diventare:


SELECT * FROM users WHERE username = '' OR 1=1-- AND password = '';

I due trattini (–) commentano il resto della query, eliminando effettivamente il controllo della password. La condizione 1=1 è sempre vera, quindi questo fa accedere l’attaccante come primo utente nel database.

Per abilitare questo attacco, l’applicazione dovrebbe costruire la query interpolando direttamente l’input dell’utente, tipo:


$query = "SELECT * FROM users WHERE username = '$_POST[username]' AND password = '$_POST[password]'";

Per prevenire SQL injection, l’input dell’utente non dovrebbe mai essere incluso direttamente nelle query SQL. Invece, dovrebbero essere utilizzate query parametrizzate o dichiarazioni preparate.

Command Injection

Il command injection RCE si verifica quando un’applicazione passa input utente non sicuri a una shell di sistema. Gli attaccanti possono iniettare comandi di shell che vengono poi eseguiti con i privilegi dell’applicazione vulnerabile. Ad esempio, consideriamo un’applicazione web che consente agli utenti di eseguire il ping di un indirizzo che essi forniscono:


system("ping -c 4 " . $_POST['address']);

Un attaccante potrebbe fornire un input del tipo:


127.0.0.1 && cat /etc/passwd

Questo risulterebbe nel seguente comando eseguito:


ping -c 4 127.0.0.1 && cat /etc/passwd

Dopo aver eseguito il ping a localhost, il comando iniettato dall’attaccante (cat /etc/passwd) verrebbe eseguito, mostrando informazioni sensibili del sistema.

Per prevenire il command injection, la funzionalità applicativa che richiede comandi di shell dovrebbe essere ri-implementata in modi più sicuri se possibile. Se i comandi di shell sono inevitabili, l’input dell’utente dovrebbe essere rigorosamente validato contro una whitelist di valori sicuri.

Attacchi di Deserializzazione

Molti linguaggi di programmazione consentono di serializzare oggetti in stringhe che possono essere deserializzate di nuovo in oggetti in un secondo momento. Se un’applicazione deserializza dati controllabili dall’utente senza sufficiente validazione, un attaccante potrebbe essere in grado di manipolare la stringa serializzata per iniettare codice dannoso che viene eseguito durante la deserializzazione.

Ad esempio, consideriamo un’applicazione Java che deserializza i cookie di sessione forniti dall’utente:


Cookie sessionCookie = request.getCookies()[0];
byte[] serializedObject = Base64.getDecoder().decode(sessionCookie.getValue());
ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(serializedObject));
Object deserializedObject = objectInputStream.readObject();

Un attaccante potrebbe creare attentamente un oggetto serializzato dannoso che, una volta deserializzato, esegue codice arbitrario tramite il metodo readObject, ottenendo RCE.

Per prevenire gli attacchi di deserializzazione, evitare di deserializzare dati non affidabili se possibile. Se la deserializzazione è necessaria, utilizzare caratteristiche di sicurezza specifiche del linguaggio come il ValidatingObjectInputStream in Java. Gli oggetti deserializzati dovrebbero essere trattati come non affidabili e validati accuratamente.

Riepilogo e Conclusioni

Gli attacchi di Esecuzione di Codice Remoto consentono agli attaccanti di eseguire codice arbitrario su sistemi bersaglio, potenzialmente dando loro il pieno controllo. RCE spesso risulta da una gestione impropria dell’input non affidabile nelle applicazioni. I principali tipi di RCE includono SQL injection, che prende di mira query del database non sicure; command injection, che sfrutta composizioni improprie di comandi di shell; e deserializzazione non sicura, che abusa delle vulnerabilità di serializzazione per iniettare codice dannoso.

L’impatto di un RCE può essere grave, inclusi l’esposizione di dati sensibili, l’installazione di malware, il movimento laterale verso altri sistemi e il danno alla reputazione. Per proteggersi contro RCE, le applicazioni devono validare e sanitizzare tutti gli input non affidabili prima di utilizzarli in qualsiasi operazione sensibile. Le misure di prevenzione specifiche dipendono dal tipo di vulnerabilità ma possono includere l’utilizzo di query parametrizzate, la validazione contro whitelist rigorose e l’evitamento di deserializzazione non sicura.

Per soluzioni che aiutino a proteggere i dati e i sistemi contro RCE e altre minacce, consideri gli strumenti user-friendly e flessibili di DataSunrise per la sicurezza del database, la scoperta di dati sensibili (incluso OCR per trovare dati sensibili nelle immagini) e la conformità. Contatti il nostro team per pianificare una demo online e scoprire come DataSunrise può aiutare a proteggere la Sua organizzazione.

Successivo

Policy di Cancellazione

Policy di Cancellazione

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]