Che cos’è un attacco RCE (Remote Code Execution)?
L’esecuzione di codice remoto viene utilizzata per esporre una forma di vulnerabilità che può essere sfruttata quando l’input dell’utente viene iniettato in un file o una stringa e l’intero pacchetto viene eseguito sul parser del linguaggio di programmazione. Questo non è il tipo di comportamento che viene esposto dallo sviluppatore dell’applicazione web. Un attacco di esecuzione di codice remoto può portare a un attacco su vasta scala che comprometterebbe un’intera applicazione Web e il server Web. Si dovrebbe anche notare che praticamente tutti i linguaggi di programmazione hanno diverse funzioni di valutazione del codice.
Può verificarsi anche una valutazione del codice se si consentono agli input dell’utente di accedere alle funzioni che stanno valutando il codice nello stesso linguaggio di programmazione. Questo tipo di misura può essere appositamente implementato per ottenere l’accesso o le funzioni matematiche del linguaggio di programmazione o per caso perché l’input controllato dall’utente è progettato dallo sviluppatore per essere all’interno di una qualsiasi di queste funzioni. Non è consigliabile eseguire questa linea di azione. Molte persone trovano dannoso anche utilizzare la valutazione del codice.
Esempio di codice
Diamo un’occhiata a un esempio di un attacco di valutazione del codice.
Potrebbe sembrare un’idea migliore avere nomi di variabili generati dinamicamente per ogni utente e memorizzare la data di registrazione. Questo è un esempio di come si può fare in PHP
eval("$$user = '$regdate');As long as the username is controlled by the user's input, an attacker may create a name like this:x = 'y';phpinfo();//
Il codice PHP generato sarebbe simile a questo:
$x = 'y';phpinfo();// = 2016';
ora È possibile vedere che la variabile è definita come x, ma ha il valore di y. Quando il malintenzionato può assegnare un valore alla variabile, egli sarà in grado di creare un nuovo comando con un punto e virgola (;). Ora può riempire il resto della stringa. In questo modo, non otterrà alcun errore di sintassi nel suo lavoro. Non appena esegue questo codice, l’output di phpinfo verrebbe visualizzato sulla pagina. Dovresti sempre ricordare che è possibile in PHP e in altri linguaggi con funzionalità che possono valutare l’input.
Organizzare l’esecuzione di codice remoto per origine
La maggior parte dei punti deboli RCE distinti sono a causa di alcune cause di base che possono essere seguite al suo punto di partenza. Il raggruppamento dell’esecuzione di codice remoto per inizio viene esaminato come segue.
Esecuzione di codice dinamico
L’esecuzione di codice dinamico è da tutti i conti il motivo di base più ampiamente riconosciuto che richiede un assalto di esecuzione di codice. Molti dialetti di programmazione sono pianificati a tal punto da poter produrre codice con un altro codice ed eseguirlo immediatamente. Questa idea è sorprendente che gestisce vari problemi complessi. Comunque sia, un aggressore malevolo può controllare questa idea per acquisire accesso e capacità RCE.
Normalmente, il codice prodotto rapidamente dipende da determinati input del client. Di solito, il codice incorpora le informazioni che sono state ricordate per una struttura specifica. Quando un aggressore maligno capisce che la potente età del codice utilizzerà determinate informazioni, potrebbe fare un codice sostanziale come un tipo di accesso per separare l’applicazione. Se i contributi dei clienti non vengono esaminati, il codice verrà eseguito sul suo obiettivo.
Nel momento in cui si sceglie di guardare attentamente, l’esecuzione dinamica del codice è responsabile per due tipi di assalti basati su RCE; immediato e tortuoso.
Diretto
Quando si gestisce un’illustrazione di esecuzione tributo unico diretto, l’aggressore si rende conto che il loro feedback sarebbe utilizzato per produrre codice.
Indiretto
In modo aberrante, è preoccupato per la potente età del codice con gli input del client. L’input del client è in genere soggetto ad almeno un livello. Una parte dei livelli potrebbe essere responsabile per la modifica del contributo prima che finisca con l’età del codice dinamico. Inoltre, l’età del codice dinamico potrebbe essere un impatto successivo e non l’utilizzo immediato delle informazioni. Questo è il motivo per cui potrebbe non essere chiaro al client che sta dando le informazioni che verranno compilate come un blocco di struttura in uno scarto di codice che verrebbe eseguito a distanza.
Deserializzazione
La deserializzazione è una guida incredibile per descrivere la circostanza presente. Nessuna età di codice potente dovrebbe verificarsi durante la deserializzazione. A intermittenza, questa è la situazione che si verifica quando l’oggetto serializzato contiene campi di informazioni grezze o oggetti di un tipo comparabile. Le cose diventano più confuse quando gli elementi dell’articolo sono serializzati. La deserializzazione incorporerebbe anche un certo grado di età del codice dinamico.
Potrebbe sembrare che i dialetti potenti siano gli unici influenzati dalla serializzazione del lavoro. A condizione che ciò sia vero, la questione sarebbe molto limitata. Comunque sia, questa situazione è molto utile anche nei dialetti statici. È più difficile da realizzare con il linguaggio statico, ma non è certamente fattibile.
A intermittenza, l’esecuzione di questa idea gestisce le capacità intermedie prodotte dalla deserializzazione. Gli oggetti Age in fase di runtime sono concepibili solo con l’età del codice dinamico. Ciò implica che se le informazioni che saranno deserializzate sono fatte in una sollecitazione fatta a distanza, un assalitore malevolo potrebbe requisirla e regolarla. Tutti i bit di codice pianificati potrebbero allo stesso modo conoscere la potente età del codice per eseguire la capacità quando è incorporata come un pezzo della deserializzazione.
Sicurezza della memoria
Un altro motivo fondamentale per gli assalti RCE si identifica con la sicurezza della memoria o la sicurezza API. Il benessere della memoria allude al contrasto del codice dall’arrivare a pezzi fondamentali di memoria che non ha instato. È normale aspettarsi che una mancanza di sicurezza della memoria provochi un accesso non autorizzato alle informazioni. In ogni caso, il framework e le apparecchiature di lavoro dipendono dalla memoria per memorizzare il codice eseguibile. I metadati che si identificano con l’esecuzione del codice sono conservati nella memoria. L’accesso a questo pezzo di memoria potrebbe richiedere ACE e RCE. In questo modo, quali sono una parte delle ragioni per problemi di benessere della memoria?
Le imperfezioni del piano del prodotto
Le imperfezioni nella configurazione del prodotto sono un tipo di debolezza del benessere della memoria che si verifica quando c’è un errore di pianificazione in una specifica parte nascosta. A intermittenza, la parte mancante potrebbe essere un compilatore, un traduttore, una macchina virtuale o anche la parte o la libreria del framework di lavoro. Ci sono vari difetti in questa classe. Una parte del incorporare;
Buffer Overflow
Buffer overflow inoltre alluso come buffer overread, può essere utilizzato per alludere a un metodo di base e famoso che viene utilizzato per rompere il benessere della memoria. Questo assalto sfrutta un difetto specifico piano o un bug per tenersi in contatto con le celle di memoria che si trovano verso la fine del cuscino di memoria. Il supporto verrebbe recuperato da una chiamata autentica all’API pubblica. Tuttavia, cradle allude solo a una minaccia di punto di partenza viene utilizzata per registrare le posizioni di memoria effettive di un contatore di articoli o programmi specifico. La loro separazione dalla culla è notevole o può indubbiamente essere ipotizzata. Indagare sul codice ogni volta che è reso accessibile o risolvere l’intera esecuzione del programma in fase di runtime può finire per essere utile a un aggressore che ha bisogno di esaminare le posizioni relative.
Ciò implica che un cradle flood consentirebbe di modificare la memoria in una certa misura non disponibile. La culla potrebbe essere trovata nello spazio di posizione di un’altra macchina e verrà modificata chiamando un’API distante. Ciò renderà l’ammissione alla memoria della macchina remota. Ci sono numerosi approcci per utilizzare questo tipo di accesso nel fare un doppio affare RCE. C’è un sospetto generale che supponendo che ci sia una debolezza dell’inondazione del cuscino, un assalto basato su RCE non è fuori dalle carte. Ciò implica che i proprietari del codice sono invocati per correggere tempestivamente le inondazioni di supporto prima che si verifichi un assalto RCE.
Difetti di progettazione delle apparecchiature
Gli assalti al benessere della memoria possono anche essere dovuti a difetti di configurazione delle apparecchiature. Non sono normali come gli assalti di programmazione e sono molto più difficili da riconoscere. Eppure, questo tipo di assalto influenza enormemente il quadro.
Impatti della vulnerabilità di valutazione del codice remoto
Un utente malintenzionato che può eseguire un attacco basato su codice remoto su un sistema con successo sarebbe in grado di eseguire altri comandi sfruttando il linguaggio di programmazione o il server Web. Su molti linguaggi di programmazione, l’utente malintenzionato sarebbe in grado di comandare al sistema di scrivere, leggere o eliminare i file. Potrebbe anche essere possibile connettersi a diversi database con il sistema attaccato.
Perché gli aggressori lanciano attacchi RCE?
Mentre non vi è alcun motivo particolare per cui gli aggressori scelgono di utilizzare lo sfruttamento RCE per attaccare un’applicazione web, non vi è alcun motivo particolare. È solo che alcuni malintenzionati trovano facile approfittare di questa esecuzione di codice per accedere ai tuoi sistemi.
Come prevenire gli attacchi di esecuzione di codice remoto?
PER cominciare, dovresti evitare l’uso dell’input dell’utente all’interno del codice valutato. L’opzione migliore in questa situazione sarebbe quella di evitare completamente l’uso di funzioni come eval. È considerato una forma di cattiva pratica e può essere facilmente evitato. Si consiglia inoltre di non lasciare mai che un utente modifichi il contenuto dei file che potrebbero essere stati analizzati dal linguaggio di programmazione in questione. Spesso, questo include lasciare che un utente crei il nome e le estensioni di file che desidera caricare o creare nell’applicazione Web.
Queste sono alcune delle cose che non dovresti fare per evitare attacchi basati su RCE. Essi includono:
- Disinfettare l’input dell’utente. Spesso, questo è difficile da raggiungere perché c’è una grande quantità di bypass e restrizioni preinstallate.
- Consente a un utente di decidere o creare l’estensione o il contenuto dei file da utilizzare sul server web. Deve usare molte pratiche sicure quando gestisce i caricamenti di file o rischiare che le informazioni vitali cadano nelle mani sbagliate.
- Passa qualsiasi input controllato dall’utente in callback di sistema o funzioni di valutazione
- Attiva la blacklist di eventuali caratteri speciali o nomi di funzioni. Questo dovrebbe essere evitato proprio come disinfettare l’input dell’utente. Ma è incredibilmente difficile da implementare.