Applica codice / firma script

8

Ho entrambi un paio di certificati X.509 Code Signing e una coppia di chiavi GPG che posso usare per firmare contro il codice che eseguo sul mio VPS. Ogni tanto scrivo codice per iOS, OS X e Windows e mi assicuro sempre di firmare i miei binari con i miei certificati X.509. Tuttavia, vorrei assicurarmi che tutto ciò che faccio sul mio VPS (per quanto riguarda gli script PHP / Django e forse anche Javascript che invio a un client) sia anch'esso firmato.

Potrei semplicemente scrivere uno script bash che firma ogni file in una directory con la mia coppia di chiavi GPG, ma il mio problema è il fatto che se il codice era non firmato, non si alza nessun ulteriore errori che se fosse stato firmato correttamente, quindi nell'interesse di proteggere il mio server dall'invio / esecuzione di script dannosi che non ho autorizzato esplicitamente, c'è un modo in cui posso usare la mia coppia di chiavi GPG (o anche i miei certificati X.509!) e ASSICURA tutto il codice in una particolare directory, per esempio è sempre controllato per una firma valida prima dell'esecuzione?

Per gettare una chiave ancora più in là nei lavori, come possiamo "sandbox" in modo efficace in modo che gli script malevoli posti al di fuori dello scopo del controllo forzato non possano interferire? Ad esempio, se una directory è stata contrassegnata come richiesta di firme applicate su tutti i file, sarebbe possibile utilizzare i file all'esterno di questa directory per eludere le firme del codice e interferire con l'applicazione o gli script?

Non sono molto interessato all'algoritmo di firma, agli script rispetto ai binari o al sistema operativo, ma per l'applicazione che applicherei a questo, sarebbe contro python / django o script PHP in esecuzione in un Debian VPS (per il scopi delle applicazioni web).

Solo un pensiero interessante, quello che mi piacerebbe sicuramente perseguire se esiste una soluzione adeguata! Le idee o le discussioni sono molto apprezzate!

    
posta TC Fox 22.01.2012 - 03:21
fonte

2 risposte

3

Per PHP ci sono vari motori di crittografia come codificatore PHP ionCube - funzionano come estensioni PHP che si agganciano a un parser e decodificano il codice che deve essere eseguito, convalidando la firma, controllando le restrizioni di un file di licenza (ad es. indirizzo MAC, nome di dominio, limiti di tempo). Possono essere impostati in modo tale che un codice che non è "crittografato" con la chiave appropriata non possa essere eseguito affatto, quindi è possibile eseguire solo il codice PHP crittografato dall'autore.

Purtroppo, si tratta di soluzioni proprietarie closed source a pagamento e non sono compatibili con GPG per quanto ne so (quindi non è possibile utilizzare la propria chiave GPG per la firma). Tuttavia, possono essere facilmente integrati negli script di compilazione dell'applicazione ecc.

Un altro approccio sarebbe quello di impacchettare l'intera applicazione PHP come un Phar archivio. Phar supporta le funzionalità di firma del codice, ho anche creato una serie di script chiamati PharUtil che lo usa per distribuire in sicurezza il codice firmato. Non è lo stesso caso d'uso che hai, ma potrebbe essere utile per iniziare.

Non conosco soluzioni simili per Python e / o Javascript.

    
risposta data 22.01.2012 - 16:50
fonte
4

Per supportare questa funzionalità, l'interprete dovrà essere ampliato. Fortunatamente questa funzione di codifica del codice probabilmente non richiede un'estensione PHP come hardened-php . In effetti c'è un modo più semplice.

Potresti cambiare il tuo php.ini in auto-anteporre un php script che legge $_SERVER['SCRIPT_FILENAME'] e verifica la firma dello script corrente. Se la verifica della firma fallisce, chiama die(); e non sarà mai in grado di eseguire.

Questa è una soluzione piuttosto semplice. Tuttavia, ciò non impedirà a un utente malintenzionato di sfruttare le vulnerabilità nel codice esistente per ottenere l'esecuzione di codice , incluse ma non limitate a eval() e vulnerabilità RFI / LFI. Inoltre, ogni interprete richiederà la propria soluzione. Ad esempio, JavaScript sul lato client richiederebbe un'estensione specifica del browser come NoScript . "JavaScript non autorizzato" è più frequentemente referenziato come XSS. Un'ottima soluzione per XSS è la politica di sicurezza dei contenuti , perché ti dà il controllo su dove il browser può eseguire JavaScript. Non esiste una taglia adatta a tutte le risposte a questo problema.

    
risposta data 22.01.2012 - 09:23
fonte

Leggi altre domande sui tag