Monitoreo de cambios de datos usando un HIDS

M

En este artículo explicaré cómo monitorear sus datos y cómo detectar cambios. Este tipo de seguimiento se realiza principalmente mediante un Sistema de detección de intrusiones basado en host (HIDS) como Integrit. En este artículo, describimos varios métodos para sus diferentes casos de uso.

IDS (descripción general)

En general, un sistema de detección de intrusiones (IDS) es un dispositivo o una aplicación de software que observa y analiza la actividad del sistema en busca de actividades malévolas o violaciones de políticas. Inspecciona el tráfico de la red, las llamadas al sistema y los cambios realizados en los dispositivos de almacenamiento para descubrir acciones sospechosas basadas en el comportamiento conocido del sistema (“¿el sistema se comporta normalmente o la carga es mucho mayor de lo habitual?”). En un caso ideal, un IDS también le avisa automáticamente cuando alguien o algo está intentando poner en peligro su sistema.

En general, hay dos tipos diferentes de IDS disponibles: NIDS y HIDS.

Sistema de detección de intrusiones en la red (NIDS)

Un NIDS está estratégicamente posicionado en varios puntos de la red para monitorear pasivamente el tráfico hacia y desde los dispositivos de red con el fin de encontrar tanto paquetes de red sospechosos como actividad. El objetivo es descubrir firmas de piratas informáticos y notificar al administrador del sistema antes de que los delincuentes puedan causar daños graves o simplemente ocupar ancho de banda y vincular la potencia informática (los llamados ataques de denegación de servicio).

En su mayoría, un NIDS es una combinación de sensores de hardware independientes y componentes de software que funcionan juntos para adaptarse a un rango mayor.

Selección de herramientas: Bufido, Suricata, Hermano / Zeek.

Sistema de detección de intrusiones basado en host (HIDS)

Un HIDS rastrea y audita los cambios y modificaciones de archivos locales. Esto incluye la supervisión de archivos de datos y estructuras de directorios, y el descubrimiento de cambios en la estructura misma, así como el contenido, los derechos de acceso, el inode, el tamaño y la información de acceso.

Selección de herramientas: Tripwire, Integrit, AYUDANTE, Samhain, Systraq, Seguridad HIDS de código abierto (OSSEC).

Como se señaló anteriormente, los NIDS se instalan en un sistema separado para cuidar de una red completa. De ahí el nombre, HIDS debe instalarse en cada computadora en una red y se ocupa de una sola máquina específica.

Además, también hay disponibles versiones combinadas, las denominadas IDS híbridas, que ofrecen ambos servicios más un nivel de gestión para la red y el nivel de host. Entre otros, esto incluye Sagan, Cebolla de seguridad, Tigre, ACARM-ngy Auditoría. Una cuarta categoría, pero más pequeña, contiene IDS específicos de distribución, como Debsecan para Debian GNU / Linux.

¿Quién necesita un IDS?

Aún así, la pregunta sigue siendo quién necesita un IDS y, especialmente, por qué. Un IDS es un componente central de la infraestructura de seguridad de las corporaciones y es más que útil para evitar que los servidores y centros de datos comerciales se dañen. El objetivo de IDS es identificar cualquier cambio realizado que comprometa los activos comerciales, la información confidencial y los archivos críticos privados.

¿Cómo funciona un HIDS?

Básicamente, un HIDS mantiene un conjunto de datos inicial por archivo o directorio en una base de datos. Una sola entrada contiene una lista de atributos, por ejemplo, el nombre del archivo y los atributos del archivo como la hora de creación, la hora de acceso, la hora de modificación, el propietario, el número del inode, su tamaño, así como información sobre el contenido del archivo. Es común guardar este último como un valor hash, por ejemplo utilizando el mecanismo SHA-1 o SHA-256. MD5 se ve como roto, por lo que ya no se recomienda su uso.

Para comprobar si los datos no han cambiado, el HIDS vuelve a calcular el conjunto de datos correspondiente y lo compara con el original. Al encontrar un conjunto de datos idéntico al otro, el HIDS devuelve un valor positivo, ya que este resultado indica que la entrada correspondiente no se ha modificado. De lo contrario, ha ocurrido un posible incidente y el HIDS lo alertará.

A continuación, le mostraremos diferentes formas de verificar la integridad de sus datos.

Uso de comandos de shell integrados

Esta solución se basa en find comando, y es bastante simple. Le permite usar métodos integrados de UNIX / Linux para ver si una entrada de archivo se ha modificado en un rango de tiempo específico.

El primer parámetro para el comando de búsqueda es -type fy limita la salida a archivos únicamente. El segundo parámetro -newermt establece otro límite: el tiempo de modificación. En el siguiente ejemplo, el límite inferior se establece en el 3 de enero de 2019, 12h00, y el límite superior en ahora, implícitamente. Entonces, find imprime solo estas entradas que tienen una hora de modificación más reciente que la especificada en la línea de comando. En consecuencia, la salida solo contiene file2.tmp de la lista.

$ ls -l
total 16
-rw-r--r--  1 frank frank        3 Jan  3 12:00 file1.tmp
-rw-r--r--  1 frank frank   11 Jan  4 16:53 file2.tmp
$ find . -type f -newermt "2019-01-03 12:00:00"
./file2.tmp

Para establecer un marco de tiempo con un límite superior e inferior find le permite especificar dos valores. El siguiente ejemplo establece las 12h00 del 3 de enero de 2019 como límite inferior y las 18h00 como límite superior utilizando ! como una negación:

$ find . -type f -newermt "2019-01-03 12:00:00" ! -newermt "2019-01-03 18:00:00"
...

Hasta ahora, solo sabemos que el archivo descubierto tiene una hora de modificación diferente. Para ver si el contenido fue modificado, en realidad, picadillo el valor del contenido ayuda. Puede calcular diferentes valores hash usando los comandos sha512sum, cksum, md5deep y hashdeep, hashalot y hashrat.

En el siguiente ejemplo usamos sha1sum para calcular el valor hash del contenido. sha1sum genera dos columnas: el valor calculado para el contenido del archivo y el nombre del archivo.

$ sha1sum file*
56ac1c08fa5479fd57c4a5c65861c4ed3ed93ff8  file1.tmp
56ac1c08fa5479fd57c4a5c65861c4ed3ed93ff8  file2.tmp

Para comparar dos condiciones diferentes de archivos, tenemos que comparar dos conjuntos: antes y después de una modificación. Por eso guardamos la salida de cksum en un archivo llamado snapshot-20190103 de la siguiente manera, en primer lugar:

$ sha1sum f* > snapshot-$(date +”%Y%m%d”)

Con la ayuda del sha1sum comando podemos ver las diferencias entre la última instantánea y la actual.

$ sha1sum -c snapshot-20190103
file1.tmp: OK
file2.tmp: FAILED
sha1sum: WARNING: calculated value for 1 does NOT match
$

La solución mostrada es bastante simple y se puede integrar fácilmente en una verificación frecuente, como por ejemplo en crontab. Como cuestión de principio, podemos averiguar si el contenido del directorio sigue siendo el mismo y si se han eliminado o modificado archivos previamente existentes, o si se han agregado archivos nuevos en el tiempo entre nuestras instantáneas. Cuantos más archivos se vayan a rastrear, más complejo se vuelve averiguar qué se hizo.

Uso de un sistema de control de revisiones

La solución que tenemos hasta ahora nos permite hacer un seguimiento de los cambios en las estructuras con un número menor de entradas. Desafortunadamente, los cambios que ocurrieron sobrescriben los archivos y datos existentes, y no se pueden revertir o restaurar instantáneamente a menos que exista una copia de seguridad adicional adecuada. Un sistema de control de revisiones como Git o Apache Subversion (SVN) puede ayudarnos. Ambas herramientas rastrean los cambios de contenido y también nos ofrecen un historial de versiones de los archivos y directorios.

Como ejemplo, el comando git status muestra los cambios que se han realizado.

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   dataset1.dbs
#
no changes added to commit (use "git add" and/or "git commit -a")

La desventaja de estas soluciones es que requieren un paso adicional: una confirmación tan pronto como una entrada en el sistema de archivos haya cambiado. Tanto Git como Subversion no lo hacen automáticamente. Herramientas como incron y fswatch puede manejar tales eventos y desencadenar acciones adicionales como confirmaciones automáticas, notificaciones o alertas.

Configurar un HIDS

El tercer grupo de soluciones se basa en herramientas especiales clasificadas como sistemas de detección de intrusiones basados ​​en host (HIDS). Permiten rastrear cambios de contenido, derechos de usuario y tiempos de acceso. Para ilustrar su uso, monitorearemos un directorio usando Integrit. HIDS Integrit está disponible como un paquete Debian normal.

En primer lugar, instale integrit de los repositorios de paquetes, por ejemplo usando apt-get como sigue:

$ apt-get install integrit

A continuación, Integrit debe configurarse correctamente. Integrit hace referencia a un archivo de configuración para saber qué directorios vigilar y dónde almacenar sus datos. En nuestro ejemplo, el único directorio que nos gustaría monitorear es /home/user/research-data, y por eso configuramos la entrada root= a este camino.

Se hace referencia a las dos bases de datos que contienen el estado anterior y el estado actual mediante las dos entradas known= y current=. Mantenga estas bases de datos en lugares seguros. Con fines ilustrativos, los mantenemos en el mismo directorio. También almacene esta configuración como el archivo integrit.conf en un directorio local.

En el siguiente paso iniciamos la base de datos original. Ejecute Integrit con privilegios administrativos (en nuestro caso como usuario root) e invoque el siguiente comando:

$ integrit -v -C integrit.conf -u

Integrit inicializa su base de datos y la almacena en el archivo current.cdb. A continuación, hacemos algunos cambios en nuestros datos, volvemos a ejecutar Integrit y vemos lo que dice sobre nuestros cambios. Un cambio puede ser un nuevo archivo o una nueva línea que simplemente agrega a un archivo existente.

Antes de volver a ejecutar Integrit, haga una copia de seguridad de la base de datos actual de acuerdo con la configuración del archivo de configuración de Integrit de la siguiente manera:

$ cp current.cdb to known.cdb

Ahora, podemos volver a ejecutar Integrit así:

$ integrit -v -C integrit.conf -c

Como puede ver en la siguiente captura de pantalla, Integrit descubre el cambio y se queja. Eso es lo que queríamos 🙂

Conclusión

Descubrir cambios de datos en el sistema de archivos no es demasiado complicado. Necesita un poco de preparación pero ayuda a no sorprenderse en el futuro. Los datos son tuyos y cuidarlos te beneficia.

La selección de herramientas que hicimos no está completa ya que también existen otros niveles y mecanismos de verificación de integridad. Para leer más, eche un vistazo a sistemas de archivos como BTRFS y ZFS / OpenZFS así como herramientas como rootkithunter.

En el próximo artículo, repasaré varias formas de rastrear y confirmar automáticamente los cambios de archivos utilizando herramientas populares de control de versiones como Git.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad