Eliminación de datos de la base de datos Ariel

La herramienta ACP (Ariel Copy) lee a través de una base de datos de Ariel, aplica criterios y, a continuación, vuelve a grabar los datos filtrados en otra ubicación. Esta herramienta es útil para el cumplimiento de GDPR (General Data Protection Regulation). Por ejemplo, desea eliminar todos los datos marcados con un nombre de usuario o dirección IP de origen determinado.

Nota: Este artículo del blog técnico es as-is y no pasó por ningún examen extra.

Utilización

Proporcione la herramienta con la base de datos (sucesos | flujos), las horas de inicio y finalización que deben filtrarse, la combinación de consulta AQL (-q) o la combinación de creador/valor (-k/-p) de claves a aplicar, el usuario que necesita ejecutarlo (-u) y el directorio de destino (-d).

La herramienta ACP lee la base de datos de Ariel para los tiempos especificados, aplica el filtro y coloca todos los registros que coinciden con el filtro en el directorio de destino especificado.

[root@m5arch06 templates]# /opt/qradar/bin/runjava.sh com.q1labs.ariel.io.ACP
data base name is required
Configured data bases:
		flows
		hc
		simarc
		events
		simevent
usage: ACP -n events -d /store/new_ariel -b "2013/11/21 1:00:00" -e
           "2013/11/21 4:00:00"
           ACP -n events -d /store/new_ariel -b "2013/11/21 1:00:00" -e "2013/11/21
           4:00:00" -q "username is not null and sourceip = '127.0.0.1'" -u admin
           Options:
 -n,--name           data base name, for example -n events
 -b,--begintime      begin time, for example -t "2018/08/28 09:04",
                     optional, by default current system time
 -e,--endtime        end time, for example -t "2018/08/28 10:04",
                     optional, by default current system time
 -d,--destination    Destination directory i.e. /store/filtered_ariel/
 -h,--help           print this message
 -k,--keycreator     class for IKeyCreator
 -p,--param          optional parameter for IKeyCreator
 -q,--query          AQL 'where clause' to copy records
 -u,--user           username (default=admin)
 -v,--testedvalue    value to compare createKey with
[root@m5arch06 templates]#

Imprimación en la estructura de archivos de Ariel

Antes de ir más lejos, revisemos cómo los datos de Ariel son se ha establecido en el disco. Ariel es una base de datos basada en series temporales. Ariel no sabe qué datos hay en disco hasta que lo busca. Puede copiar datos de Ariel entre sistemas sin ninguna consecuencia o la base de datos de Ariel sabiendo de ello. Los datos de Ariel se almacenan en registros minuto a minuto en un formato similar al ejemplo siguiente:

/store/ariel/[events | flows ]/[records | payloads | md]/YYYY/MM/dd/hh/
Dónde:
  • Acontecimientos o flujos es el nombre de la base de datos de Ariel

  • registros es el registro de sucesos normalizado
  • cargas útiles es la carga útil bruta asociada a los registros
  • md son las firmas hash o los resúmenes de mensajes (opcionalmente cifrados HMAC) de los datos de Ariel

En general, los archivos de datos de Ariel tienen la siguiente estructura:

identifier~Minute#_File#~UUID~UUID~RetentionBucketNumber

En el directorio records , verá archivos como los siguientes:
  • events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

    Este registro representa el registro de sucesos normalizado para el minuto 5th y el grupo de retención de 0th (grupo predeterminado).

  • SourceIP~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

    El índice sourceIP para el 5th minuto y el 0th grupo de retención (grupo predeterminado).

En el directorio payloads , veremos archivos como los siguientes:

payload_events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

Las cargas de pago en bruto para el minuto 5th y el grupo de retención de 0th (grupo predeterminado).

En el directorio md , verá archivos como este archivo:

  • events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0.HMACSHA512

    La firma HMAC-SHA512 para los registros de sucesos normalizados para el grupo de retención de 5th minuto y 0th .

  • payload_events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0.HMACSHA512

    La firma HMAC-SHA512 para las cargas de pago en bruto para el minuto 5th y el grupo de retención de 0th .

    Nota: La herramienta ACP crea un directorio denominado hashes en lugar de md. Si tiene el hash de archivos o el hash de integridad habilitado, tenga cuidado con este problema.

Ejemplo: eliminación de sucesos que tienen raíz como nombre de usuario

En este ejemplo, queremos eliminar todos los sucesos que tienen el nombre de usuario root de la base de datos de sucesos de Ariel durante un periodo de tiempo entre las 09:00 y las 10:00.

  1. En primer lugar, buscamos y mostramos lo que queremos eliminar.
    La siguiente captura de pantalla muestra todos los sucesos:
    Figura 1. Todos los eventos
    Imagen que muestra todos los sucesos capturados en un periodo de tiempo específico.
  2. A continuación, ejecute la herramienta ACP:
    [root@m5arch06 ~]# /opt/qradar/bin/runjava.sh com.q1labs.ariel.io.ACP -n events -b "2018/08/28 09:00:00" -e "2018/08/28 10:00:00" -q "username not like 'root'" -u admin -d /store/new_ariel
    AQL criteria: [username not like 'root'] User: admin
    Copying: [events] to /store/new_ariel Timeline from Tue Aug 28 09:00:00 NDT 2018 to Tue Aug 28 09:59:00 NDT 2018
    Trying to copy dir: /store/ariel/events/records/2018/8/28/9[18-08-28,09:00:00]
    Reader started ...
    Processing interval /store/ariel/events/records/2018/8/28/9/events~59_0~13e6848042143d0~92f58da705b4b452~0[18-08-28,09:59:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~58_0~23b0a632f1df4d10~bbe50149b34453d8~0[18-08-28,09:58:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~57_0~745684fd0cca424c~a9857807a2952671~0[18-08-28,09:57:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~56_0~89c02507d81940c3~a54edd654c2ce796~0[18-08-28,09:56:00]
    …. … ...
    Processing interval /store/ariel/events/records/2018/8/28/9/events~4_0~2c48501471734615~b8ca3cb590a16e05~0[18-08-28,09:04:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~3_0~3e369b679aa64306~a97b95e8528a1a9b~0[18-08-28,09:03:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~2_0~4e370db759d44bd2~81f695b0164b5a66~0[18-08-28,09:02:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~1_0~cdbe9e25b9ee4dbd~982ef0da1ab7e85d~0[18-08-28,09:01:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~0_0~ecd2e4bf6bbb425a~b2acfe04fda202a6~0[18-08-28,09:00:00]
    Reader stopped. Written 9507759 records, Skipped 2654 records
    
    Completed copying dir: /store/ariel/events/records/2018/8/28/9[18-08-28,09:00:00]
    
    [root@m5arch06 ~]#
    
    La siguiente captura de pantalla muestra todos los sucesos sin el nombre de usuario de Raíz :
    Figura 2. Todos los sucesos con nombre de usuario root
    Imagen que muestra todos los sucesos capturados con el nombre de usuario root en un periodo de tiempo específico.
    La siguiente captura de pantalla muestra todos los sucesos sin el nombre de usuario de Raíz .
    Figura 3. Todos los sucesos sin nombre de usuario root
    Imagen que muestra todos los sucesos capturados sin el nombre de usuario root en un periodo de tiempo específico.

    Como se ha explicado anteriormente, hemos eliminado todos los sucesos de 09:00 a 10:00 que coincidían con el username de root. Por lo tanto, con la herramienta ACP, especificamos en nuestros criterios que el username NO era raíz.

    Además, hemos colocado los registros filtrados en el directorio /store/new_Ariel .

  3. Sustituya los datos de Ariel antiguos por los nuevos datos de Ariel.

    Buscando en el directorio /store/new_ariel (el destino que elegimos en este ejemplo), podemos ver que hemos procesado una hora de datos:

    [root@m5arch06 new_ariel]# find /store/new_ariel -maxdepth 6
    /store/new_ariel
    /store/new_ariel/events
    /store/new_ariel/events/hashes
    /store/new_ariel/events/hashes/2018
    /store/new_ariel/events/hashes/2018/8
    /store/new_ariel/events/hashes/2018/8/28
    /store/new_ariel/events/hashes/2018/8/28/9
    /store/new_ariel/events/records
    /store/new_ariel/events/records/2018
    /store/new_ariel/events/records/2018/8
    /store/new_ariel/events/records/2018/8/28
    /store/new_ariel/events/records/2018/8/28/9
    /store/new_ariel/events/payloads
    /store/new_ariel/events/payloads/2018
    /store/new_ariel/events/payloads/2018/8
    /store/new_ariel/events/payloads/2018/8/28
    /store/new_ariel/events/payloads/2018/8/28/9
    [root@m5arch06 new_ariel]#
    

    En este ejemplo, los datos se han elegido para alinearse en los límites de hora para facilitar el archivado y las copias (se puede utilizar el mandatomv ). Si los datos no se alinean en los límites de hora, deberá migrar el archivo por archivo.

  4. Archive los datos antiguos del directorio ariel en el directorio ariel_archive escribiendo el mandato siguiente:
    [root@m5arch06 store]# mv /store/ariel/events/records/2018/8/28/9 /store/ariel_archive/events/records/2018/8/28/
    [root@m5arch06 store]# mv /store/ariel/events/payloads/2018/8/28/9 /store/ariel_archive/events/payloads/2018/8/28/
    [root@m5arch06 store]# mv /store/ariel/events/md/2018/8/28/9 /store/ariel_archive/events/hashes/2018/8/28/
    [root@m5arch06 store]#
    

    En este punto, esa hora de datos no se puede buscar. La base de datos de Ariel no podrá encontrarla porque los archivos ya no están en la base de datos de Ariel.

  5. Copie (o mueva) los nuevos datos del directorio new_ariel al directorio ariel escribiendo el mandato siguiente:
    [root@m5arch06 store]# cp -a /store/new_ariel/events/records/2018/8/28/9 /store/ariel/events/records/2018/8/28
    [root@m5arch06 store]# cp -a /store/new_ariel/events/payloads/2018/8/28/9 /store/ariel/events/payloads/2018/8/28
    [root@m5arch06 store]# cp -a /store/new_ariel/events/hashes/2018/8/28/9 /store/ariel/events/md/2018/8/28
    [root@m5arch06 store]#
    
    Nota: Hemos cambiado de hashes a md. Consulte la nota en la sección de cartilla de la estructura de archivos Ariel.

    Debido a que ejecutamos las búsquedas en contra de estos datos antes de empezar, eliminemos esas búsquedas para que no tengamos la memoria caché del cursor cuando ejecutamos búsquedas idénticas. Elimine las búsquedas de Gestionar resultados de búsqueda de la pestaña Actividad de registro .

  6. Ejecute las búsquedas de todos los datos de 09:00 a 10:00.
    Figura 4. Nueva búsqueda
    Imagen que muestra una búsqueda que se ejecuta en un periodo de tiempo específico.
    Nota: Los resultados totales son los mismos que el nombre de usuario root "no" de antes de ejecutar la herramienta ACP.
  7. Busque el nombre de usuario root.
    Figura 5. Nueva búsqueda de nombre de usuario root
    Imagen que muestra una búsqueda de nombres de usuario root que se ejecuta en un periodo de tiempo específico.
    Nota: Algunos de mis índices no se han regenerado. Los índices basados en la propiedad minuto a minuto se crean, pero los superíndices nunca se generan y la búsqueda de texto libre /Lucene tampoco se genera. (cuestión conocida). ¡Por suerte para nosotros, tenemos la herramienta /opt/qradar/bin/ariel_offline_indexer.sh !

Uso para el script de indexador fuera de línea

Utilice /opt/qradar/bin/ariel_offline_indexer.sh para generar los superíndices.

Usage is:
[root@m5arch06 store]# /opt/qradar/bin/ariel_offline_indexer.sh --help
usage: options
 -R,--repair         re-build corrupted super indices
 -d,--duration       time duration to look files for in minutes, for
                     example -d 5
 -n,--name           ariel data base name, for example -n events
 -t,--endtime        end time, for example -t "2018/08/28 11:00",
                     optional, by default current system time
 -F,--renamefrom     rename from (internal use)
 -L,--light          load minimal QRadar frameworks
 -T,--renameto       rename to (internal use)
 -V,--validate       validate super indices
 -a,--auto           backfill all active indexes
 -b,--batchmode      run in batch mode with options in a file
 -f,--fts            create free text search indices
 -h,--help           print this message
 -k,--key            property java class name
 -l,--list           list all enabled indices from the configuration
 -p,--param          optional paramiter for property (key creator
                     construction)
 -r,--remove         remove indices for a property
 -s,--superindices   create super indices from the minute indices
 -v,--verbose        verbose (optional, default = false)
 -w,--threads        maximum number of threads to produce minute indices
                     if requested, default is 48
[root@m5arch06 store]#
Vamos a regenerar el índice de texto libre y los superíndices escribiendo el siguiente comando:
[root@m5arch06 store]# /opt/qradar/bin/ariel_offline_indexer.sh -n events -t "2018/08/28 10:00" -d 60 -f -s

2018/08/28 11:04	Running command [-n, events, -t, 2018/08/28 10:00, -d, 60, -f, -s] ...
Trying to index dir: /store/ariel/events/records/2018/8/28/9/lucene[18-08-28,09:00:00]
Completed indexing dir: /store/ariel/events/records/2018/8/28/9/lucene[18-08-28,09:00:00]

All done in 0:02:39.840
[root@m5arch06 store]#

Ahora nuestro índice de texto libre y súper índices están poblados.