Port forwarding verso un server web su Raspberry Pi

3

Di recente ho creato un relativamente semplice albero di Natale intelligente che è una striscia a LED Raspberry PI Zero W .

Per controllarlo tramite i webhook IFTTT , ho avviato un server di flask leggero sul Raspberry Pi - su una porta specifica con diversi endpoint per diverse animazioni / pattern. Quindi, sul router di casa, ho configurato il port forwarding al server di flask avviato su Raspberry Pi.

Al momento, l'API del pallone è completamente aperta, anche se, per poterlo utilizzare, è necessario conoscere l'indirizzo IP ei valori della porta.

I rischi in termini di sicurezza in questo caso particolare sono, ovviamente, minimi, ma quali sono i modi generali per migliorare la sicurezza di questa configurazione di automazione domestica? Dovrei andare a fare un vero e proprio server web come Apache?

Stavo pensando di richiedere almeno una chiave "segreta" in un cookie, che le ricette IFTTT e il server dei flask saprebbero solo. Dal momento che le risorse del dispositivo sono limitate, suppongo, prestazioni e amp; la sicurezza deve essere attentamente bilanciata.

    
posta alecxe 23.12.2017 - 06:13
fonte

1 risposta

5

Il problema è meno l'accesso aperto a un server con qualche attività non importante. Il problema è più che questo server si trova probabilmente nella stessa rete dei sistemi più importanti (a meno che il router di casa non fornisca la separazione dalla rete, la maggior parte no). Pertanto, se un utente malintenzionato riesce a penetrare in questo server non importante, ottiene l'accesso all'intera rete importante.

Ci sono diversi modi per renderlo più difficile:

  • Se il router di casa fornisce una separazione di rete, metti questo server in una rete separata dal resto del tuo sistema. Ci sono molte informazioni online su questo.
  • Limita l'accesso al server richiedendo un qualche tipo di autenticazione. Potrebbe trattarsi di autenticazione in testo semplice con nome utente e password, alcuni token di autenticazione segreti o certificati client se viene utilizzato HTTPS. Quello che usi qui dipende molto da come devi accedere al server (browser da qualsiasi sistema, browser da sistema specifico, app mobile ...). In caso di IFTTT vedi qui per le possibilità che hai.
  • Assicurati che nessuno possa annusare il traffico e quindi acquisire qualsiasi autenticazione di testo normale o modificare il traffico utilizzando HTTPS.
  • Anche se l'autore dell'attacco ottiene l'accesso autenticato all'API, assicurati che non possa sfruttarlo ulteriormente utilizzando buone pratiche di programmazione e rafforzando l'impostazione come descritto di seguito.
  • Nessuna invocazione diretta dei comandi della shell con parametri arbitrari controllati dall'utente, vale a dire limitare i parametri a valori specifici nel server (non fidarsi del client) o disinfettare i parametri se i valori arbitrari dovrebbero essere possibili.
  • Non eseguire il server come root ma eseguirlo come utente con privilegi bassi. Se è necessario disporre delle autorizzazioni di root per controllare l'hardware, scrivere un servizio locale separato con un'API piccola e sicura e lasciarlo comunicare con il servizio Web esternamente raggiungibile (vedere separazione dei privilegi ).
  • Idealmente aggiungi un po 'di sandboxing aggiuntivo, ad esempio utilizza contenitori, chroot, seccomp ecc per rendere difficile l'interruzione del server. Ad esempio, i contenitori possono anche essere utilizzati per limitare l'accesso alla rete, in modo che l'autore dell'attacco non possa accedere alla rete interna anche quando si interrompe correttamente nel servizio web.
  • Proteggi il tuo sistema operativo con il minimo software installato e mantenendo aggiornato questo software e kernel. Gli attacchi di escalation dei privilegi sono purtroppo ancora comuni in Linux, quindi una volta che l'utente malintenzionato ha accesso a privilegi ridotti irrompendo nel servizio Web, potrebbe essere in grado di ottenere la root. Mantenere aggiornato il sistema rende molto più difficile.
risposta data 23.12.2017 - 07:23
fonte

Leggi altre domande sui tag