Controlla lo script python caricato per problemi di sicurezza prima di eseguirlo

1

Vorrei consentire a un utente di caricare gli script Python e li eseguirli sul mio server. L'applicazione di base è in Java e sto usando ProcessBuilder per far eseguire Python dalla mia applicazione Java. Come potrei fare per testare le minacce alla sicurezza da parte dell'utente finale, quando caricano il loro script per l'esecuzione sul mio server.

    
posta Rowana Ravenclaw 15.09.2018 - 01:58
fonte

2 risposte

2

Mi spiace dirlo, ma questa sembra una cosa davvero discutibile da fare. Periodo.

C'è un famoso blog di Microsoft chiamato " Dieci leggi di sicurezza immutabili ". La legge n. 1 è:

Law #1: If a bad guy can persuade you to run his program on your computer, it's not solely your computer anymore.

C'è una ragione per cui è il numero 1; creare un elenco di "cose brutte" da bloccare è un gioco perdente: per un linguaggio completo e complesso come Python, ci saranno sempre modi più creativi di fare cose cattive che non sono nella tua lista.

Vorrei incoraggiarti a considerare il motivo per cui è necessario consentire agli utenti di caricare script e se è possibile ottenere la stessa funzionalità attraverso un insieme di interfacce utente, API REST o altri metodi standard in cui la sicurezza è ben compresa .

Se è assolutamente necessario consentire script (Python o qualsiasi altro linguaggio), quindi vorrei capire la quantità minima di sintassi python che gli utenti devono realizzare qualunque sia il tuo sito e rifiutare qualsiasi script che usi qualcosa non su quello elenco. Fai la tua ricerca su ogni elemento di quella lista e se potrebbe essere usato per effettuare una chiamata di sistema o altrimenti cambiare i file sul tuo filesystem. Se quell'elenco include import , allora sai di essere affondato subito, perché poi stai cercando di enumerare tutto sul sys.path e bloccare le "cose cattive", o provare ad enumerare quali moduli utenti bisogno, quali metodi all'interno di quei moduli di cui hanno bisogno, e verificando manualmente che nulla potrebbe essere fatto con loro. Anche supponendo che tu abbia dei buoni elenchi ben studiati, costruire le espressioni regolari per applicare correttamente l'elenco è probabilmente un compito difficile di per sé.

L'altro approccio è assumere che il server sia totalmente compromesso tutto il tempo, non usarlo per nient'altro, tenerlo nella propria rete di isolamento lontano da qualsiasi altro server a cui tieni, firewall da qualsiasi traffico in uscita, e abbattetelo e alzatene uno nuovo ogni tanto.

L'idea di permettere agli utenti di caricare ed eseguire script sul tuo server sembra un po 'come lasciare che i ragazzi a caso sperimentino i fuochi d'artificio nel tuo salotto.

    
risposta data 15.09.2018 - 02:48
fonte
1

Come nota Mike, questa è generalmente una pessima idea. Tuttavia, se si è pronti a farlo, ciò che si potrebbe fare è creare una VM separata responsabile dell'esecuzione del codice Python non attendibile e quindi porre delle restrizioni sulle risorse a cui la VM può accedere - e pregano che nessuno carichi qualcosa che può aggirare queste restrizioni.

Provare a scansionare il codice Python per problemi, che è quello che sembra avere in mente, non è un modo affidabile per determinare se ha problemi di sicurezza.

Per avere un'idea del tipo di pericolo che stai prendendo in considerazione, controlla i seguenti link:

risposta data 19.09.2018 - 20:08
fonte

Leggi altre domande sui tag