Introducción
La seguridad de la información es un elemento crítico y de importancia estratégica en la transformación digital de cualquier empresa o administración pública. La seguridad de la información, como concepto, se basa en cuatro pilares: la disponibilidad, la integridad, la confidencialidad y la autenticación.
- Disponibilidad: Acceso a la información cuando se requiere, teniendo en cuenta la privacidad. Evitar “caídas” del sistema.
- Confidencialidad: Información accesible solo para personal autorizado. La información no debe llegar a personas o entidades que no estén autorizados.
- Integridad: Información correcta sin modificaciones no autorizadas ni errores. Se protege frente a vulnerabilidades externas o posibles errores humanos.
- Autenticación: Información procedente de un usuario que es quien dice ser. Se verifica y se debe garantizar que el origen de los datos es correcto.
Si queremos tener una actitud ciber-resiliente debemos conocer estos pilares. A parte, en las AAPP aplica el Esquema Nacional de Seguridad que recoge una serie de medidas en diferentes ámbitos:
-
Marco Organizativo:El marco organizativo está constituido por un conjunto de medidas relacionadas con la organización global de la seguridad.
-
Marco Operacional:El marco operacional está constituido por las medidas a tomar para proteger la operación del sistema como conjunto integral de componentes para un fin.
-
Medidas de Protección: Las medidas de protección se centrarán en activos concretos, según su naturaleza, con el nivel requerido en cada dimensión de seguridad.
Conocer y aplicar las medidas definidas nos ayudará a construir una organización ciber-resiliente capaz de gestionar el riesgo existente y superarlo con un mínimo impacto. Es básico disponer de soluciones tecnológicas que aseguren la protección, conocer en todo momento el estado de protección de nuestra infraestructura y contar con las herramientas adecuadas para una gestión eficiente que garantice la continuidad en caso de ciberataque.
Si concretamos en el caso que presentaremos hoy, podemos ver como el Esquema Nacional de Seguridad identifica como una de las medidas (de protección) a aplicar es la verificación del acondicionamento de los locales donde tenemos nuestra infraestructura.
Medida 5.1.3 Acondicionamiento de los locales [mp.if.3]
Los locales donde se ubiquen los sistemas de información y sus componentes esenciales dispondrán de elementos adecuados para el eficaz funcionamiento del equipamiento allí instalado, y, en especial, para asegurar:
– [mp.if.3.1] Las condiciones de temperatura y humedad.
– [mp.if.3.2] La protección frente a las amenazas identificadas en el análisis de riesgos.
– [mp.if.3.3] La protección del cableado frente a incidentes fortuitos o deliberados.
De hecho, el control ambiental de los espacios destinados a equipos corporativos de proceso de datos es una práctica básica e imprescindible para la continuidad del negocio.
No es necesario que un cibercriminal nos ataque para poner en riesgo la información o los sistemas que la alberga… una simple caída de nuestro CPD conlleva un incidente de seguridad, dado que, como debemos tener presente, la seguridad de la información significa que tenemos que tener en cuenta los factores de confidencialidad, la disponibilidad e integridad de la misma.
Estos factores los debemos cubrir de la mejor manera posible. En nuestro caso aplicaremos una solución de bajo coste y esfuerzo, pero versátil y con funcionalidades suficientes para poder evitar estos riesgos controlables.
Proyecto
Utilizaremos una Rasberry Pi para el proyecto. Nuestros objetivos en este desarrollo son:
- Monitorización ambiental de temperatura y humedad
- Monitorizació de estado de SAI
- Recopilación de datos (datalogger)
- Integración con herramienta de monitorización genérica
- Integración en Bot de Telegram
- Portabilidad de la solución
Componentes
- 1x Raspberry Pi Modelo 4B
- 1x cable Ethernet
- 1x fuente de alimentación 5V USB-C
- 6x cables GPIO Raspberry Pi
- 1x sensor DHT11
- 1x sensor DS18B20
- 1x resistencia de 4.7 kΩ
- 1x adaptador DS18B20 (o regleta)
- 1x cable USB de SAI
- 1x caja de empalmes
Les connexions de la Raspberry con el sensor DHT11 se pueden hacer directamente con la Raspberry mediante 3 cables GPIO hembra - hembra. El sensor DS18B20, se ha de conectar a la Raspberry con un adaptador y 3 cables GPIO. Les conexiones quedan así:
Sensor DHT11
- DATA –> GPIO 18 (Pin 12)
- GND –> GND (Pin 9)
- VCC –> 5V (Pin 2)
Sensor DS18B20
- DATA –> GPIO 4 (Pin 7)
- GND –> GND (Pin 6)
- VCC –> 3.3V (Pin 1)
Nota Para el sensor DS18B20 debemos colocar una resistencia de 4.7K entre el cable de Datos y VCC
El montaje de todo los componentes dentro de la caja queda de la siguiente forma:
Y aquí la vista general del equipo con todo el cableado:
Desarrollo
Como hemos comentado, el objetivo del proyecto es conseguir una herramienta de monitorización de factores ambientales. Adicionalmente, también se incorporará la posibilidad de monitorizar el estado de un SAI, conectado al equipo.
Para recoger el estado de los diferentes elemontos a monitorizar se plantean dos mecanismos de consulta:
- Integración a través de puerto TCP con un sistema de monitorización de activos de información, como puedes ser Nagios, Icinga o como en nuestro caso, CheckMK
- Integración de la consulta a través de un Bot de Telegram
- Recopilación de datos en log en el propio equipo.
Servidor TCP
Crearemos un servidor TCP que escuche por un puerto definido por la configuración, que responda la información que se le requiere desde un cliente genérico.
No entraremos en la parte de instalación de las librerías requeridas, pero os indicamos información útil para su configuración. Para el sensor DHT11 se puede seguir el siguiente Tutorial En el caso del sensor DS18B20 se puede seguir el siguiente Tutorial En el caso de la monitorización del estado del SAI usaremos NUT. Auquí os dejamos un Tutorial
Como se observa en el siguiente código se aceptan tres tipos de comandos:
- ‘temperature': Interrogamos al sensor DS18B20 y retornamos el valor de la lectura realizada por el sensor. El resultado está en grados Celsius
- ‘humidity': Interrogamos al sensor DHT11 y retornamos el valor de la humedad relativa obtenida (%humedad)
- ‘sai':’ En este caso detectamos el estado del SAI, Online o Offline.
Cada vez que se recibe una petición, se registra igualmente el resultado en un fichero de log local.
Una vez tenemos el servidor preparado, integramos las peticiones en la herramienta corporativa de monitorización. Esta herramienta trabaja con servicios de verificación basado en protocolos estandar como SNMP o conexiones TCP. En el ejemplo usaremos el plugin de Nagios check_tcp. En la descripción del mismo podemos identificar todos los mecanismos para controlar las peticiones y el resultado de las mismas.
Los parámetros que nos interesan son:
-s, --send=STRING
String to send to the server
Con este parámetro especificaremos el comando a enviar al servidor: 'temperature','humidity' o 'sai'
-e, --expect=STRING
String to expect in server response (may be repeated)
Con este parámetro especificamos la lista de valores esperados en la respuesta del servidor, como los rango de temperatura válidos (de 15 a 24) o los de humedad
En CheckMK podemos configurar el plugin de forma gráfica. Mostramos un ejemplo:
En la revisión de los servicios del host que monitoriza (raspberry) vemos los servicios correctamente inventariados y siendo verificados de forma periódica.
Servidor Telegram
En el post de Automatización de procesos con Plataforma Low Code se presentó, entre otras cosas, la manera de realizar un Bot de Telegram.
Utilizando la misma idea, esta vez se ha implementado un código en Python que realizará las tareas asignadas al Bot. Este bot sencillo facilitará la consulta de los mismos elementos monitorizados en el servidor TCP: temperatura, humedad y estado del SAI. Las librerías y las funciones de consulta a los sensores son comunes para el Servidor TCP y para el Bot.
En este caso observamos como el servidor de Telegram responde a consultas bajo las llamadas:
- '/temp’: Obtención de la temperatura
- '/hum’: Obtención de la humedad relativa
- '/sai': Consulta al estado del SAI
- '/help': Muestra un menú de ayuda
Aquí vemos una demo del funcionamiento.
También incorporamos funciones de alerta. Se han definido en un fichero de settings los rangos operacionales normales, en cuestión de temperatura y humedad. Si se sobrepasan, el Bot enviará un mensaje al grupo avisando de esta situación.
EL fichero de configuración es el siguiente:
#server TCP Port
port_num = 1082
#pin al que va connectat el sensor DHT11
pin = 18
#token del bot de telegram
token = '56xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
#id del grup telegram
chat_id = '-7YYYYYYYYYY'
#temperature thresholds
max_temp = 30.0
bad_low_temp = 10.0
bad_high_temp = 90.0
#humidity thresholds
max_hum = 50
bad_low_hum = 10
bad_high_hum = 90
Se ha configurado el cron del sistema para ejecutar el script de verificación de límites cada 5 minutos. De esta forma disponemos de un aviso dirigido y accesible sobre una situación que potencialmente puede poner en riesgo la infraestructura que soportan los servicios de TI, porque pone de manifiesto la degradación ambiental del espacio físico a monitorizar.
Como ejemplo de alertas de temperatura podemos mostrar:
El código de este proceso de lectura es el siguiente:
Conclusiones
Como se ha puesto de manifiesto, se pueden construir plataformas de sensorización de espacios físicos usando un entorno com Raspberry PI y el ecosistema de herramientas de desarrollo que dispone. Los objetivos iniciales se han cumplido y nos ha ayudado, no solo a avanzar en el cumplimiento del ENS, sino a planificar posibles trabajos de control sobre los espacios físicos en los que ubicamos nuestra infraestructura. Otras funcionalidades podrían ser:
- Control de acceso. Controlar y registrar el acceso a estos espacios, mediante sensores (detección) y actuadores (abrir/cerrar)
- Vigilancia de espacios. Integrando una cámara podemos controlar y comunicar quien accede a estos espacios
- Control acústico. Si existe algún equipo que emita alguna alerta sonora
- Integración de múltiples bots en un único canal de monitorización … Y tantas funcionalidades como permita la polivalencia del producto que estamos usando.
Agradecimientos
Este proyecto ha sido realizado por Andrea Pujals Bocero (andrea.pujals[at]estudiantat.upc.edu) en el marco de la realización de las Prácticas en Empresa realizadas en el Ajuntament de Vila-seca, de los Estudios de GRADO EN INGENIERÍA DE SISTEMAS AEROESPACIALES/GRADO DE INGENIERÍA DE SISTEMAS DE TELECOMUNICACIONES Os dejo una presentación del proyecto para disponer de una visión general del desarrollo y el proceso de trabajo.