Añadir seguridad a nuestra Nube Privada
Crea tu propia Nube Casera y Barata (Parte 2). En la primera parte ya vimos como configurar una Raspberry para obtener una pequeña nube privada en cuestión de una hora escasa. No mencione el tema de acceder a ella desde cualquier sitio (geográfico), tampoco mencione como crear una VPN para acceder a ella y por ultimo tampoco escribí nada sobre como podemos protegernos ante algún ataque.
El principal objetivo en este articulo es aplicar contra-medidas en las distintas capas del sistema informático que estará expuesto. El fin no sigue siendo otro que retrasar al máximo un ciber-ataque. Infórmate sobre la ciberseguridad (si te interesa) con estos libros que seguro que te gustaran.
Como esto es un proyecto enfocado a tener un pequeño servidor en casa, a la seguridad física (camaras de vigilancia etc…) no le daré mucha importancia ni haré mucho incapie en este articulo (aunque también tenga importancia y mucha). Para el que le interese mucho este tema aquí te dejo un enlace para que leas este articulo ya que me parece que lo explican bastante bien.
Configuración del inicio
Lo primero de todo tengo que decir que hay que empezar por ponerle un usuario y una contraseña a nuestro equipo. Hablando sobre este tema tenemos que alejarnos de todos los estándares posibles (en este caso para raspberry) como puede ser: user -> pi psw -> raspberry. Nunca debemos usar este tipo de credencial ya que seria la primera opción que probaría cualquier humano-boot para poder entrar en tu sistema y hacer lo que le plazca. Entiendo que esto es lógico para muchos pero quería mencionarlo porque todavía se ven credenciales que realmente dan miedo.
Entonces, una contraseña robusta es algo muy importante siempre teniendo en cuenta lo practica que pueda ser. Si la utilizas mucho no te quedara otra que memorizarla aunque para eso siempre hay herramientas para “facilitarnos la vida”. KeePass puede ser una alternativa para guardar tus credenciales en un único sitio y acordarte solo de la principal que necesitaras para acceder al archivo que tenga todo el resto de contraseñas.
Siempre tienes la opción de probar tu contraseña antes de utilizarla en cualquier sitio. Te recomiendo que vayas a esta URL de Kaspersky y que la pruebes antes de utilizarla. El resultado te debería de quedar algo parecido a esto.
Para obligar al sistema que nos pida contraseña a la hora de ejecutar comandos de superusuario tendremos que modificar el archivo 010_pi-nopasswd. Para hacerlo entraremos en el y modificaremos la linea que corresponde al usuario. La ruta se ve en la siguiente imagen. Solo tendremos que sustituir el NOPASSWD por PASSWD.
Arranque del SO
Hay que tener en cuenta que la Raspberry Pi es un dispositivo que no tiene sistemas BIOS o UEFI y que tampoco es compatible con gestores de arranque como GRUB o GRUB2 pero le podremos deshabilitar el autologin y obligarle a que te pida usuario y contraseña. Para hacer esto utilizaremos el siguiente comando.
Ahora entraremos en la primera opcion llamada System Options. Aqui tendremos que desplazarnos hasta Boot / Auto Login y darle al enter.
Tendremos que elegir la primera opción que se llama Console Text console, requiring user to login. Después tendremos que salir de la herramienta de configuración y nos pedirá que reiniciemos el equipo para que se apliquen los cambios.
Para los que son mas avanzados siempre esta la posibilidad de editar fichero config.txt que esta ubicado en /boot/config.txt y hacer las modificaciones necesarias.
Bloquear puertos inutilizados y conexiones externas
La Raspberry Pi utilizada para este pequeño proyecto casero cuenta con varios puertos y antenas (cuatro puertos USB, un puerto Ethernet, un modulo Wi-Fi y otro para el Bluetooth). Esto significa que cualquier persona que invitemos a casa (malo sea, vaya gente invitas a casa…) podría físicamente utilizar uno de estos puertos para atacar nuestra Nube Privada.
En este caso deshabilitare dos puertos USB. Me gustaría mantener los otros dos siempre habilitados ya que los estaré utilizando (uno para el disco duro de almacenaje y el otro para el teclado-ratón). Aparte de esto también deshabilitare el Bluetooth y el Wi-Fi ya que siempre utilizare el puerto de Ethernet para la conexión a internet. Cada uno tiene que hacer y aplicar su propia estrategia para intentar protegerse (nadie lo esta del todo) ante posibles ataques.
Bloqueo de puertos USB
Para realizar este proceso utilizare la herramienta git y uhubctl que la tendremos que descargar desde Github. https://github.com/mvp/uhubct
Una vez realizado nos iremos al directorio con uhubctl utilizando el comando cd.
Aquí tendremos que ejecutar los siguientes comandos para que instale make y todo lo que necesita.
Después de instalar todo podemos ver con el comando uhubctl el estado de nuestros puertos y la descripción de cada uno.
En la anterior imagen se aprecia que puertos tengo utilizados y cuales no así que empezaremos por deshabilitar el puerto 4 y 5 en este caso. Para hacer esto tendremos que utilizar de nuevo el comando uhubctl pero diciéndole los puertos que queremos deshabilitar. Podemos comprobar visualmente lo que ha echo este comando. Los puertos cuatro y cinco de estar en power han pasado al estado de off.
Recordad que siempre podemos utilizar el comando uhubctl -h (en este caso) para pedir ayuda, podemos dirigirnos al fichero README.md que normalmente esta en la carpeta de la aplicación o como ultima opción irnos a la URL y ahí estará toda la información necesaria para ver como funciona el sistema.
Meteremos de nuevo el comando uhubctl para ver realmente si han cambiado el estado de los puertos y efectivamente así ha sido. El puerto cuatro y el cinco están apagados.
Para comprobar realmente que el USB esta deshabilitado he mantenido abierto el log, he cambiado el USB para el teclado-raton y lo he sustituido por un teclado con cable USB. Al hacerlo enseguida ha saltado el log dándome la información del periférico conectado a ese puerto. Solo he podido utilizar ese (sustituir un USB por otro, que es lo que me interesaba) ya que el otro esta para el disco duro y los otros dos estan deshabilitados. Podéis comprobarlo vosotros mismos si queréis, esto es realmente interesante a mi parecer.
El comando para abrir el log y estar a la espera de cualquier movimiento, es el siguiente.
¡OJO!. Este comando de uhubctl no es persistente así que durara hasta que se apague o reinicie la Raspberry Pi. Esto es algo que tenemos que tener en cuenta pero para no estar pendiente siempre podemos automatizarlo con un script.
Crear script en Bash para el bloque de puertos USB
A la hora de realizar scripts cada uno tiene sus manías y cosas (siempre y cuando no te saltes los patrones principales) así que hay mil maneras de hacerlos y yo por no complicarme demasiado he creado uno muy sencillo para resolver el problema mencionado antes. Recordad el comando uhubctl no es persistente.
Para hacer este script he creado una carpeta llamada script donde iré creándolos según las necesidades que me vayan surgiendo. Una vez creada la carpeta y creados los scripts tendremos que darles permiso de ejecución.
Si os fijáis el script es el comando que hemos utilizado arriba para deshabilitar los cuerpos con un mensaje que nos lo mostrara en pantalla.
Sincronizar fecha y hora en la Raspberry Pi
Una cosa muy importante es que puede que se nos pase el hecho de tener la Raspberry sincronizada correctamente con la fecha y hora en la que esta ubicada geográficamente ya que si no es así los script no los ejecutaremos cuando queremos. El comando date se utiliza para saber la hora de nuestra Raspberry.
Si la Raspberry Pi no esta a la hora que uno desea tendremos que utilizar el comando raspi-config y entrar en la opción de Localisation options.
Después nos pedirá el área geográfica (África, América, Antártica…) y por ultimo la ciudad o región (Lisbon, London, Luxemburg…). Haciendo esto ya estaría configurada la zona horaria que cada uno necesite. Para comprobar si los cambios son correctos podemos utilizar el comando timedatectl. Hemos puesto la ubicación en Madrid y la salida es la siguiente. Hay diferentes maneras de sincronizar la fecha y hora pero esta me parece buena porque es rápida e intuitiva.
Crear otro para ejecutarlo con el inicio del SO
Esta seria una manera de automatizar las tareas que mas necesitas pero en este caso en concreto seria mas correcto utilizar el fichero rc.local que es el binario que se lee al iniciar el sistema y tiene como misión realizar las tareas que contenga. Para hacer esto iremos al directorio /bin/ y creamos el archivo. Se llamara port_off. También le daremos permisos de ejecución.
Ahora modificamos el fichero rc.local agregando el binario (el archivo del paso anterior) que hemos creado para que se ejecute.
De nuevo a reiniciar el sistema para comprobar que esto realmente ha funcionado, y en los mensajes de arranque nos aparece nuestro script que se han deshabilitado los puertos 4 y 5.
Si utilizamos el comando uhubctl podremos ver como efectivamente están deshabilitados o en off.
Deshabilitar Bluetooth y Wi-Fi
Este paso es realmente sencillo de hacer. Utilizaremos rfkill para ello y con el poder controlar los transmisores de la Raspberry. El comando nos proporcionara el estado del Software y del Hardware (blocked y unblocked).
Solo he bloqueado el Bluetooth ya que el Wi-Fi ya estaba en modo blocked. ¿Que os parece? De momento estamos evitando unas cuantas opciones de ataque físico así que esa parte “cubierta”. Cuando queramos desbloquearlo sera tan sencillo como volver a habilitar los bloqueos realizados. Una opción mas que tendría el atacante frente a mi Raspberry Pi seria ya coger la tarjeta SD y llevársela pero ya he mencionado dicho antes se supone que este proyecto va dirigido para tenerlo en casa y si alguien hace eso en tu casa…
Aun así si se la llevan, siempre tendríamos la posibilidad de tenerla cifrada (y aunque sea que cojan el trabajo de descifrarla) pero para ello necesitaría otro articulo más porque este ya esta siendo un poco extenso y faltan varias cosas aun que las dejare para una tercera parte.
Conclusión
Hasta aquí estamos evitando en gran parte el ataque hacia nuestra Raspberry Pi. Aun así siempre se podría mejorar algo como cifrar la SD y seguro que mas cosas pero de momento creo que va cogiendo bonita forma este pequeño y casero proyecto. Espero que os este gustando y si tenéis alguna duda o queréis aportar algo no dudéis en hacerlo seria de agradecer. ¡Muchas Gracias!