Crea tu propia Nube Barata con Raspberry Pi – Nextcloud (Parte 2)

Crea tu propia Nube Barata con Raspberry Pi – Nextcloud (Parte 2)


Añadir seguridad a nuestra Nube Privada

Crea tu propia Nube Casera y Barata (Parte 2). Como en el primera parte con esta también hare un "resumen" para publish0x. El original esta en la web lodiezda.com

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.

Como esto es un proyecto enfocado a tener un pequeño servidor en casa, a la seguridad física (cámaras 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.

d7665766a3d607a0191301a91bf1cbf19bc3a639b8328c89e7b06d382bf9c3f0.png

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.

0317cd688f7e07e7fb2403a1b9dfd69518e79e18f88ded7d472125ebf13705b2.png

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 obligare a que te pida usuario y contraseña. Para hacer esto utilizaremos el siguiente comando. Ahora entraremos en la primera opción llamada System Options. Aquí 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

ca37775aebf18b1130aa9ba23e47b5a05b17625cff62e2558564f6562fc30248.png

7db07c978802b6f5243b9b62695914c0aef4c7753057a27cd9ee97877455a7c8.png

Una vez realizado nos iremos al directorio con uhubctl utilizando el comando cd.

edba6be8ce90e8249e825e196296486ed6ea7574c860e97d068e09260760a9fb.png

Aquí tendremos que ejecutar los siguientes comandos para que instale make y todo lo que necesita.

79b16ab974eae03e46b008bfae08924353cc81c4a14fed19004e0716c1091fbd.png

aadf82155ef68dc15b1def0f947dfb9067325c5de88ae8053d5249fae4d9c7d4.png

1ee9a249087fb7e0b51cd92171d191510e7dd889f5608e9db66e55d8810c5106.png

Después de instalar todo podemos ver con el comando uhubctl el estado de nuestros puertos y la descripción de cada uno.

7fe06b2f84007db7c77cfcc76722f17d63827fa3806121fe3a58173f8d71825a.png

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.

9c19647dae0fe5bbeca59b596f52f40908749cd13b5cb5b259fa0c7e5cdb35fb.png

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.

0300ccacce9c1322ac2414897fbcad3dc5750fa84404d47b0bd058e1a0f7f28f.png

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. tail -f /var/log/messages 

¡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.

16f148e82ed37a7ee8e42cecf10977ba6e84be3be4f100e61f7a33522a9d3367.png

0b6128e72fbf0ee5acaafb6b3e9fcf50740ab9b1941f3e30b34026f083d05006.png

ccc195dba600ff5a109f288a21b08b807c66030f9e5891a32d0ac70ddb3b4448.png

25cc29d44bd9510fdd3eaa0181029050a763769344292a6a61673ba00410f64d.png

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. Aquí solo muestro el script para desactivar los puertos 4 y 5 en la version completa que esta en mi web esta el que los activa que son muy parecidos.

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 opcion de Localisation options. Elegiremos la segunda opción Timezone para configurar la zona horaria.

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.

905779d9320cf7ac967e24cb6ba0eb774f829d55ccb71ec8ff79b9968c586256.png

Ejecutar el script con el interprete Bash

Una de las comprobaciones que tenemos que hacer es ejecutarlo obviamente asi que lo ejecutaremos y nos fijaremos en la salida de cada uno. El primero activa los puertos cuatro y cinco y el segundo los desactiva.

9e7f9d2f846427bb5ab45a1cdd73d14893ffd2df069034ee60df83e14643b417.png

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.

1373182a29bef3ad5937d54ed0c6171d08e26c0a0fe48592bcdfb0b895469ab0.png

1bfea38f2b359510cc04fc7ef8adbf2c30ddbd6546f522bfc4a13621956cbe5f.png

05e76258e2f421592a52c994f1625ee16ba74b4d270de8c2b1f129720f44ae19.png

Ahora modificamos el fichero rc.local agregando el binario (el archivo del paso anterior) que hemos creado para que se ejecute.

ef1997c4d1b2d142de3c450fef02c7c58f63da575a598b6aedda5d03aba7f3dc.png

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.

b07a0bd94e324fd335bd6bc48091897bdbb242f92ccc1b289a294b0fe652ee15.jpg

Si utilizamos el comando uhubctl podremos ver como efectivamente están deshabilitados o en off.

bda1dd520796b5dabcd095c361b1e0f1b97e3629d9dc730e8018e9b27e86e02b.png

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 (blockedunblocked).

afc84be167e6bc5f002b86088d60fd0885bfe721a34e96536130500dbcbf89b8.png

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!

How do you rate this article?

4


LodiEzDa
LodiEzDa

Bienvenido al canal LodiEzDa. Aquí hablaremos de varios temas como: música, viajes, fotografía y mucho más. Casi todos los artículos serán escritos en castellano por LodiEzda, Disfrutar del contenido y ojala os guste.


Tecnologias y Proyectos caseros
Tecnologias y Proyectos caseros

Este nuevo blog lo dedicare para meter proyectos que ire realizando y documentando. Espero que a la gente le guste y les sirvan de ayuda.

Publish0x

Send a $0.01 microtip in crypto to the author, and earn yourself as you read!

20% to author / 80% to me.
We pay the tips from our rewards pool.