Proteggi un server su 'localhost' in modo tale che solo gli utenti autorizzati possano connettersi

5

Considera un'applicazione (come un notebook IPython) che esegue un server HTTP e che (in base alla progettazione!) consente l'esecuzione di codice arbitrario da parte di utenti autenticati (questo è l'intero punto di IPython, Jupyter et al , e non è un bug).

Chiaramente, è un disastro per qualsiasi utente essere in grado di autenticare ALTRO rispetto all'utente in cui il server è in esecuzione.

Ciò può essere fatto assicurando che solo l'utente autorizzato possa fornire credenziali adeguate e assicurando che tali credenziali vengano fornite solo al server appropriato.

Mi piacerebbe gestirlo in modo completamente automatico.

La soluzione ideale sembra essere il server TLS e i certificati client. Il problema è che questo richiede una configurazione manuale e scomoda. Voglio che non ci sia alcuna configurazione manuale, solo qualcosa che può essere eseguito dal server stesso.

Nota: il server è in esecuzione come lo stesso utente del client, quindi ha accesso in scrittura alle directory utilizzate dal browser client per memorizzare la configurazione per utente. È non in esecuzione come utente privilegiato, quindi non può modificare le regole del firewall.

Una soluzione perfetta sarebbe un modo per applicare un certificato server specifico e fornire un certificato client specifico per il server, il tutto controllato (esternamente) dal processo del server (che è solo un programma a riga di comando che esegue un server HTTPS).

No, il server non può essere eseguito come utente non privilegiato. È davvero un IDE che usa il browser come interfaccia grafica. ha bisogno di essere in grado di eseguire codice arbitrario con i privilegi dell'utente invocante. Da qui la necessità di un'autenticazione assolutamente sicura.

Sì, posso rifiutare le connessioni che non provengono da 127.0.0.1 . Questo non aiuta gli aggressori locali di altri utenti sullo stesso computer.

È possibile o dovrò integrare un browser? Non credo che il Chromium Embedded Framework possa essere di aiuto, in quanto non gestisce il controllo del trust del certificato TLS.

    
posta Demi 20.04.2016 - 04:15
fonte

1 risposta

2

Supponendo di poter manipolare il codice di entrambe le applicazioni server, è sufficiente rilasciare un valore casuale in un file leggibile dall'utente in esecuzione all'avvio del server, quindi utilizzarlo come token di autenticazione (direttamente o come sale per la risposta a una sfida). Ad esempio, è possibile impostare una password http all'avvio utilizzando un semplice script e rilasciare il testo normale in un file. Ma come il certificato cliente, il processo di acquisizione dei dati nel client rimane manuale.

Il modo solo per ottenere questo funzionamento in modo trasparente per l'utente senza riscrivere il client sarebbe quello di configurare un'applicazione Web per l'utilizzo da parte di tutti gli utenti autorizzati che hanno inserito un token in un cookie sul browser, quindi ha scritto un file di configurazione del server che richiedeva la connessione di un cookie specifico e che ascoltava su una porta assegnata, quindi ha avviato il server in esecuzione come utente identificato che implica quindi la re-autenticazione per primo, utilizzando il meccanismo di autenticazione del sistema operativo. Tuttavia questo significa dare un sacco di privilegi all'istanza del server master e la complicazione dell'autenticazione integrata. Ma gestire le porte e i processi sarà un incubo.

Non puoi semplicemente dargli VM?

    
risposta data 10.10.2016 - 00:45
fonte

Leggi altre domande sui tag