Reenvío de puertos a un servidor web en Raspberry Pi

2

Recientemente he creado un árbol de Navidad inteligente relativamente simple, que es una tira de LED potenciada por Raspberry PI Zero W .

Para controlarlo mediante IFTTT webhooks , inicié un servidor de frascos livianos en la Raspberry Pi, en un puerto específico con varios puntos finales para diferentes animaciones / patrones. Luego, en el enrutador doméstico, he configurado el reenvío de puertos al servidor del matraz iniciado en la Raspberry Pi.

Actualmente, la API del matraz está completamente abierta, aunque, para poder usarla, es necesario conocer la dirección IP y los valores del puerto.

Los riesgos en términos de seguridad en este caso particular son, por supuesto, mínimos, pero ¿cuáles son las formas generales de mejorar la seguridad de esta configuración de automatización del hogar? ¿Debo buscar un servidor web completo como Apache?

Estaba pensando en al menos requerir una clave "secreta" en una cookie, que las recetas de IFTTT y el servidor del matraz solo sabrían. Dado que los recursos del dispositivo son limitados, supongo, rendimiento y amplificación; La seguridad debe ser cuidadosamente equilibrada.

    
pregunta alecxe 23.12.2017 - 06:13
fuente

1 respuesta

4

El problema es menos el acceso abierto a un servidor con alguna tarea sin importancia. El problema es que este servidor probablemente se encuentre en la misma red que los sistemas más importantes (a menos que el enrutador de su hogar proporcione separación de red, la mayoría no lo hace). Por lo tanto, si un atacante logra piratear este servidor sin importancia, obtiene acceso a toda su red importante.

Hay varias maneras de hacer esto más difícil:

  • Si el enrutador de su hogar proporciona separación de red, coloque este servidor en una red separada del resto de su sistema. Hay mucha información en línea sobre esto.
  • Limite el acceso al servidor al requerir algún tipo de autenticación. Esto podría ser una autenticación de texto simple con nombre de usuario y contraseña, algún token de autenticación secreto o certificados de cliente si se usa HTTPS. Lo que use aquí depende mucho de cómo necesite acceder al servidor (navegador web desde cualquier sistema, navegador web de un sistema específico, aplicación móvil ...). En el caso de IFTTT, consulte aquí para conocer las posibilidades que tiene.
  • Asegúrese de que nadie pueda detectar el tráfico y, por lo tanto, capture cualquier autenticación de texto sin formato o modifique el tráfico mediante el uso de HTTPS.
  • Incluso si el atacante obtiene acceso autenticado a la API, asegúrese de que no pueda explotarlo aún más usando buenas prácticas de programación y reforzando la configuración como se describe a continuación.
  • No hay invocación directa de comandos de shell con parámetros arbitrarios controlados por el usuario, es decir, limite los parámetros a valores específicos en el servidor (no confíe en el cliente) o desinfecte los parámetros si es posible que haya valores arbitrarios.
  • No ejecute el servidor como root, sino que lo ejecute como un usuario con privilegios bajos. Si necesita tener permisos de root para controlar el hardware, escriba un servicio local independiente con una API pequeña y segura y permita que se comunique con su servicio web accesible externamente (consulte separación de privilegios ).
  • Lo ideal es agregar un espacio de arena adicional, es decir, usar contenedores, chroot, seccomp, etc. para que sea difícil salir del servidor. Por ejemplo, los contenedores también se pueden usar para limitar el acceso a la red, de modo que el atacante no pueda acceder a la red interna, incluso cuando accede con éxito al servicio web.
  • Refuerce su sistema operativo al tener solo un software mínimo instalado y al mantener este software y el kernel actualizados. Desafortunadamente, los ataques de escalamiento de privilegios aún son comunes en Linux, por lo que una vez que el atacante tiene un acceso de bajo privilegio al ingresar al servicio web, podría obtener root. Mantener el sistema actualizado hace que esto sea mucho más difícil.
respondido por el Steffen Ullrich 23.12.2017 - 07:23
fuente

Lea otras preguntas en las etiquetas