Domanda:
Vantaggi nell'uccidere le sessioni dopo 5 minuti?
jpmc26
2016-04-28 01:01:23 UTC
view on stackexchange narkive permalink

Ho a che fare con un server che non è mio da configurare. Qualcosa da qualche parte tra me e questo server interrompe qualsiasi connessione dopo 5 minuti se non passa traffico tra le due macchine. Ciò include le connessioni attive in cui un comando è in esecuzione sul server; in particolare, ho dimostrato che questa disconnessione avviene utilizzando una connessione SSH (eseguendo un comando bash che non stampa alcun output per più di 5 minuti) e un database SQL (eseguendo un comando SQL che dura più di 5 minuti). Si disconnette anche se vado a leggere qualcosa e non invio alcun comando per 5 minuti, ovviamente.

Per l'impostazione SSH, il gruppo responsabile del server ha raccomandato di abilitare Keep Alive lato client. Non hanno fornito alcun suggerimento per le connessioni al database.

Sono completamente confuso, però. Qual è il vantaggio per la sicurezza qui? Per SSH, posso ignorare completamente le loro impostazioni dal lato client e loro consigliano di farlo. (Quest'ultimo significa che non può esserci nemmeno un argomento "sicurezza attraverso l'oscurità", dal momento che non sarà oscuro perché ogni utente dovrà saperlo. Non che penso che questo sventerebbe un attacco anche se fosse oscuro, soprattutto perché L'ho scoperto da solo prima ancora che me lo raccomandassero). Per entrambi, questo riduce in modo dimostrabile la disponibilità. Potrei potenzialmente vedere che disconnettere le sessioni attive dopo alcune ore di inattività potrebbe essere vantaggioso (sebbene le possibili minacce di lunghe sessioni aperte non mi siano immediatamente chiare), ma ogni 5 minuti ? Ciò significa che non posso nemmeno leggere un post DBA.SE mentre sto elaborando il mio SQL senza essere disconnesso. È così ridicolo come sembra a me o c'è qualcosa che mi manca?

Chiarimenti

Alcuni punti sono stati menzionati nei commenti, quindi vorrei chiarire un poco.

  • Sono in grado di riprodurre costantemente il timeout a 5 minuti. Ho usato comandi che registrano un timestamp lato server ogni pochi secondi e, dopo una disconnessione, l'ultimo timestamp registrato era sempre esattamente 5 minuti dopo il primo timestamp. Quindi le disconnessioni non sono mai state sporadiche.
  • Poco dopo aver scritto questo post, gli amministratori di sistema / rete hanno risposto che questo è davvero intenzionale. Cito: "Altre ricadute dal limite di tempo di 5 minuti fissato sugli F5 qualche settimana fa?" Non sono sicuro di cosa sia un F5; alcuni googling suggeriscono che si tratta di uno switch molto costoso, che corrisponde a qualcuno che stava cercando di trovare una soluzione alternativa per le mie connessioni DB in seguito menzionando le impostazioni dello switch.

(non credo che questa informazione invalidi qualsiasi risposta.)

Perché pensi che sia stato fatto intenzionalmente?
@NickBastin A causa della risposta degli amministratori di sistema.Apparentemente, questa è una modifica implementata di recente e non sono il primo a parlarne.
Ti sei stancato di impostare le opzioni `ServerAliveInterval` [.ssh / config] (http://linux.die.net/man/5/ssh_config)?Ciò induce messaggi "ping" periodici a livello dell'applicazione che passano attraverso il canale crittografato, quindi il proxy non dovrebbe essere in grado di distinguerli dai dati effettivi che continuano, lentamente, a scorrere.Questo dovrebbe aggirare il problema.
Inoltre ho notato che `TCPKeepAlive` [opzione ssh] (http://linux.die.net/man/5/ssh_config) è attiva per impostazione predefinita.Se non è disattivato dalla tua parte, significa che terminare le connessioni è davvero intenzionale, perché i firewall / mascherate _non_ termineranno le connessioni che inviano keepalive TCP.I proxy lo faranno, tuttavia, perché TCP keepalive invia pacchetti vuoti che non sono visibili a livello di socket.
@JanHudec Sono a conoscenza di "ServerAliveInterval", ma come ho detto, questo non è il mio server da gestire.Quello che dici è ovviamente l'equivalente lato server delle impostazioni lato client che ho citato.Tuttavia, il database non passa attraverso SSH, per quanto ne so, il che indica che l'uccisione della connessione è più generale di SSH.Non sono del tutto chiaro su * dove * esattamente lo stanno imponendo, motivo per cui ho cercato di non essere eccessivamente specifico nella domanda e di concentrarmi solo sulla terminazione della connessione stessa.
@jpmc26, no, `ServerAliveInterval` è un'opzione _client_.`ServerAliveInterval` e` TCPKeepAlive` sono opzioni _molto diverse_.Inoltre, se puoi SSH al server e se puoi evitare che SSH scada, puoi usare la sua funzione di inoltro per incanalare la connessione al database attraverso di esso per proteggerlo.
@JanHudec: l'intervallo di keepalive predefinito è di 2 ore su Linux e MSWindows.
Potrebbe essere in atto per liberare risorse se si tratta di un server condiviso o di un server con molto traffico.
Non correlato all'effettiva domanda incentrata sulla sicurezza del perché è stato creato un tale scenario: se il server ha tmux o screen, quei comandi possono supportare la ripresa di una sessione scollegata, il che può essere un modo efficace per non perdere il lavoro.
Cinque risposte:
Steve Sether
2016-04-28 02:21:15 UTC
view on stackexchange narkive permalink

Sono completamente confuso, però. Qual è il vantaggio per la sicurezza qui?

Niente. Lo scenario più probabile è che qualcosa di intermedio interrompa la connessione dopo 5 minuti per risparmiare risorse. Potrebbe essere un firewall, un acceleratore WAN, un acceleratore SSL, ecc. Oppure potrebbe essere solo una cattiva impostazione predefinita. Chi lo sa?

Gli amministratori di rete hanno spesso preoccupazioni diverse da tutti gli altri, che spesso possono entrare in conflitto con gli altri. Lavoriamo in un mondo a compartimenti stagni in cui l'immagine olistica non viene presa in considerazione.

Non dare per scontato che ci sia una ragione particolarmente valida per ogni impostazione, ma lascia spazio alla possibilità che il timeout di 5 minuti sia stato una soluzione rapida per qualche altro problema che stanno avendo e il problema dell'applicazione è stato un contraccolpo .

Ho notato che SSH per impostazione predefinita abilita TCP keepalive.Ciò impedirebbe al firewall o al masquerade di interrompere la connessione.Un proxy potrebbe ancora farlo, perché non vedrebbe i keepalive TCP.
Il "router" che ho ricevuto dal mio provider Internet via cavo ha disconnesso ogni connessione dopo 15 minuti.Fa schifo se devi usare SSH.Ho scoperto che questo pezzo di plastica economica non poteva davvero gestire più di ~ 5000 connessioni aperte senza crash, quindi probabilmente è per questo che l'hanno implementato.
IME, la causa più probabile non è il timeout della connessione ma un firewall configurato male con una tabella di stato in overflow.
@symcbean Anche molto possibile.Ma ti aspetteresti che questo sia meno regolare di 5 minuti.
Rory McCune
2016-04-28 01:18:43 UTC
view on stackexchange narkive permalink

Questo sembra un buon esempio di "culto del carico" della sicurezza. Un controllo di sicurezza è stato implementato alla cieca senza comprendere il contesto coinvolto o addirittura implementarlo correttamente.

In generale nella sicurezza il punto di un timeout di inattività per ridurre il rischio di situazioni in cui una macchina client viene lasciata incustodita e un utente malintenzionato raggiunge la macchina ed esegue comandi non autorizzati su di essa. L'equilibrio in questi timeout tende ad essere quello dell'usabilità (che favorisce timeout più lunghi o meno) e della sicurezza (che favorisce timeout più brevi).

A volte puoi individuare il culto del carico di sicurezza esattamente con ciò che hai menzionato, ovvero che gli operatori del sistema ti stanno effettivamente aiutando a bypassare il controllo nominale (nel tuo caso raccomandando l'uso di keep-alive)

Il rischio di macchine client lasciate incustodite dovrebbe essere mitigato assicurandosi che abbiano configurato il blocco schermo automatico.Su Windows può essere forzato tramite criteri di gruppo.
Questa è ovviamente una buona idea in cui controlli tutte le macchine client e puoi applicare la policy su di esse, anche se di nuovo ho visto ambienti in cui le persone insistono per applicarlo a livello di applicazione e di sistema operativo indipendentemente ...
Stai trascurando il chiaro vantaggio di questo approccio: se accedi a un sistema, blocchi lo schermo locale, prendi una tazza di caffè, tornerai e scoprirai che la tua sessione è scaduta, quindi puoi accedere di nuovo eche ti costringe a ridigitare la tua password che costruisce la memoria muscolare in modo che gli amministratori possano iniziare ad alzare il livello per includere password di 64 caratteri con 4 emoticon
Steffen Ullrich
2016-04-28 01:25:39 UTC
view on stackexchange narkive permalink

Sono completamente confuso, però. Qual è il vantaggio per la sicurezza qui?

Potrebbe non essere una questione di sicurezza ma avere una ragione diversa. Sfortunatamente la tua domanda offre solo la tua visione, quindi possiamo solo ipotizzare quale potrebbe essere la vera ragione.

Una spiegazione potrebbe essere che esiste un semplice filtro di pacchetti con stato in cui gli stati scadono dopo 120 secondi di inattività. Ciò significa che tutti i dati trasferiti dopo questa inattività verranno bloccati perché non esiste più uno stato aperto. La ragione di ciò potrebbe essere un dispositivo che ha solo risorse molto limitate e quindi non può mantenere aperti troppi stati allo stesso tempo, ad esempio un firewall progettato pensando a 10 utenti ma ora utilizzato da 100 utenti.

Ovviamente potrebbe anche essere che un BOFH stia eseguendo il sistema che probabilmente è più la tua opinione sul problema :) Ma questo è difficile da dire senza avere maggiori informazioni sul sistema reale .

Prego che non sia un problema di carico.Non ho menzionato questo nella domanda (quindi capisco perché prendi nota della possibilità), ma si suppone che questo sia un intero ambiente "cloud privato" che ospiterà dozzine di applicazioni per molti team di sviluppo.E questa restrizione è in vigore anche per i server dedicati allo * sviluppo *.
Un buon punto sui filtri dei pacchetti: senza un timeout, un utente malintenzionato può DoS con un tipo di attacco SYN flood.Il timeout fornisce un limite al tempo che rimane efficace dopo l'arresto dell'attacco.
slebetman
2016-04-29 11:22:54 UTC
view on stackexchange narkive permalink

Come avrai notato, questo non ha nulla a che fare con la sicurezza. Invece, la pratica di eliminare le connessioni TCP dormienti di lunga durata ha a che fare con i bug: è una soluzione per il software difettoso.

Uno degli esempi più famosi di software che lascia sospese le sessioni TCP è Internet Explorer ( almeno fino alla versione 7). IE aveva l'abitudine di non terminare correttamente le sessioni TCP, quindi mentre sul PC / laptop / telefono client il socket è considerato chiuso, il server vede ancora la connessione come aperta. E IE è solo uno degli esempi più noti. Ci sono molti software difettosi là fuori.

Allora perché dovrebbe interessare un server? Perché ogni socket aperto è anche un descrittore di file aperto. Non gestire questa situazione fa sì che il server esaurisca il descrittore di file. In teoria il server può anche esaurire l'ID del socket, ma quel numero è molto, molto più alto del numero di descrittori di file aperti che un sistema operativo può gestire.

Per questo motivo, varie implementazioni dello stack TCP includono un timeout su prese morte. Su alcuni sistemi operativi è possibile configurare questo timeout.

Serge Ballesta
2016-04-29 14:11:40 UTC
view on stackexchange narkive permalink

Hai quasi sempre un timeout su una sessione TCP inattiva implementata in router, switch e tutti quei macchinari di rete di basso livello. Ha poco a che fare con la sicurezza nel senso di protezione contro un attacco deliberato, ma cerca solo di non esaurire le risorse a causa del software difettoso che non riesce a chiudere la connessione o di altri errori hardware nella rete esterna che impediscono al pacchetto di chiusura di raggiungere la sua destinazione.

A causa di questi possibili guasti transitori, un dispositivo di rete (normalmente mai ripristinato a meno che non venga interrotto) che non interrompa mai la connessione inattiva finirebbe con la carenza di risorse e genererà esso stesso un rifiuto del servizio ...

Il peggio è che spesso sono sistemi con poche risorse (a basso costo) e per questo motivo, gli amministratori di rete si sforzano di ridurre il rischio che la loro parte si blocchi sotto carico e come tali tendono a utilizzare timeout aggressivi. Questo è il motivo per cui si utilizza la connessione TCP keep alive (se il pacchetto keep alive passa c'è qualcosa dall'altra parte) combinato con brevi timeout di rete.

Ma il vero problema qui è che gli sviluppatori di applicazioni sanno poco di low usi di rete di livello e che gli amministratori di rete non si preoccupano molto delle applicazioni di alto livello. La vita è così ...



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...