Quali sono le implicazioni sulla sicurezza dell'esecuzione di codice non affidabile sul mio server?

2

Vorrei creare un'app che consenta agli utenti di inviare il proprio codice ed eseguirlo sul mio server. Il pensiero di eseguire codice non attendibile mi fa rabbrividire, quindi sto cercando di creare un elenco esaustivo di minacce alla sicurezza che dovrebbero essere affrontate.

Suppongo che dovrei eliminare alcune caratteristiche del linguaggio eseguito, come l'accesso ai file o (forse) il networking. Inoltre, trovo termini come sandboxing o chroot . So cosa significano, ma come dovrei effettivamente usarli?

In breve: quali minacce alla sicurezza dovrei affrontare prima di consentire agli utenti di eseguire il loro codice sul mio computer e come posso farlo?

    
posta rahmu 02.11.2012 - 11:08
fonte

1 risposta

6

Le preoccupazioni più importanti includono:

  • Risorse di sistema (DoS). Se si consente l'esecuzione di codice arbitrario sui propri sistemi, è facile esaurire le risorse di sistema su tale macchina, di proposito o per sbaglio. Scrivere codice che riempie l'intero hdd con la spazzatura è facile, evitarlo senza danneggiare seriamente il sistema è molto più difficile. Lo stesso vale per altre risorse di sistema, come i cicli della CPU, la RAM, la larghezza di banda della rete, ecc.
  • Violazione dei dati. Se altri utenti si trovano sullo stesso server e un utente malintenzionato riesce a leggere i propri dati, si è verificato un problema. Se i dati sono riservati, hai un problema con le dimensioni di un elefante.
  • Integrità della rete. Consentendo l'esecuzione di codice arbitrario, gli utenti possono avviare e accettare connessioni di rete dal proprio server e, a seconda della configurazione della propria rete, ciò potrebbe consentire loro di accedere a cose all'interno della rete che non dovrebbero essere raggiungibili dall'esterno.
  • Attività illegale. Un server che consente il codice arbitrario è un invito per cose oscure: la tua macchina potrebbe essere utilizzata per archiviare dati offensivi, nascondere comunicazioni o, più probabilmente, eseguire attacchi su altri target.

IMO, il modo più semplice per difendersi da questi e mitigare i rischi è l'utilizzo di macchine virtuali: offrire ad ogni utente una VM dedicata con un SO ridotto e nessun accesso root; bloccare l'accesso alla rete (idealmente, la macchina accetta le connessioni ssh in entrata e nient'altro, e non può avviare alcuna connessione in uscita - se devi consentire qualcos'altro, tenerlo il più restrittivo possibile), limitare l'utilizzo delle risorse dell'host e ripristinare regolarmente la macchina a uno stato vuoto. Inoltre, potresti voler monitorare l'attività della VM dall'esterno.

    
risposta data 02.11.2012 - 11:34
fonte

Leggi altre domande sui tag