Quali precauzioni sono sufficienti per creare una sandbox per un linguaggio di scripting?


0

Abbiamo un discussione in corso aggiungere alcune funzionalità a un progetto aggiungendo il supporto per gli script ed è bloccato ai problemi di sicurezza.

Pensa che verrà utilizzata una lingua per scopi di configurazione, quindi deve essere abbastanza sicura come .ini file dal punto di vista degli utenti finali. Le azioni non dipenderanno da binari esterni, saranno consentiti solo gli strumenti nativi della lingua.

Non le seguenti restrizioni lo rendono abbastanza sicuro da eseguire codice non affidabile:

  • Limita l'accesso alla rete
  • Disabilitare completamente l'accesso in scrittura
  • Fornire l'accesso in lettura per la directory corrente
  • Fornire accesso in lettura solo per l'inclusione di librerie globali

Cos'altro è necessario per utilizzare un linguaggio di scripting come "uno strumento di configurazione"?

Risposte:


1

No.

Tra le altre cose, non hai alcuna protezione contro la manipolazione della cache, l'avvelenamento della proroga dei rami e gli attacchi in stile a martello pneumatico, tutti possibili dal linguaggio che la discussione collegata sembra implicare usando (Python).

Supponendo che tu stia effettivamente parlando di usare Python, devi anche considerare il fatto che il codice Python può caricare librerie e file eseguibili arbitrari attraverso meccanismi multipli, alcuni dei quali non dipendono dall'accesso in lettura. Tutto ciò deve essere limitato e probabilmente si dovrebbe anche limitare l'accesso a molti dei moduli della libreria standard (le macro dei documenti non hanno business che parli con il demone syslog o di recuperare informazioni sull'account, ad esempio).

Oltre a tutto ciò, è necessario anche: in qualche modo per l'utente disabilitare esplicitamente l'esecuzione automatica di questo codice, con la situazione ideale in cui devono esplicitamente opt-in per eseguirlo (se questo era stato il comportamento predefinito in MS Office da l'inizio per le macro, quindi alcuni grandi virus non avrebbero superato le decine di sistemi infetti). Inoltre, fai assolutamente certo che la protezione da scrittura include il documento a cui è associata la macro, altrimenti esiste ancora un meccanismo di estrazione dei dati.

TBH, Python in realtà non è eccezionale per questo tipo di cose. Se non fosse il punto della discussione in primo luogo, in realtà suggerirei di usare Lua, è molto meglio progettato per questo tipo di utilizzo, ed è molto più facile da proteggere (anche se le cose menzionate nella parte superiore di la mia risposta è ancora un problema per Lua).


Per essere in grado di chiarire i confini: ignorando i bug dell'hardware, sarebbe sicuro inviare il codice a una macchina virtuale (o un hardware separato che coprirebbe i bug dell'hardware), eseguirlo lì e ottenere i risultati?
ceremcem

Supponendo che il software VM non abbia bug, allora sì, probabilmente. Tuttavia, ci sono stati parecchi bug in molti gestori VM che non erano specifici dell'hardware e consentivano l'escaping della VM (o almeno l'esecuzione di un attacco DoS contro l'host).
Austin Hemmelgarn

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.