Suppression de données de la base de données Ariel

L'outil ACP (Ariel Copy) lit une base de données Ariel, applique des critères, puis réécrit les données filtrées à un autre endroit. Cet outil est utile pour la conformité au RGPD. Par exemple, vous souhaitez retirer toutes les données repérées avec un nom d'utilisateur spécifique ou une adresse IP source particulière.

Remarque: Cet article de blogue technique est As-is et n'a pas été soumis à un contrôle supplémentaire.

Utilisation

Fournissez à l'outil la base de données (events | flows), les heures de début et de fin qui doivent être filtrées, la requête AQL (-q) ou la combinaison créateur de clé/valeur (-k/-p) à appliquer, l'utilisateur qui doit l'exécuter (-u) et le répertoire de destination (-d).

L'outil ACP parcourt la base de données Ariel en quête des heures spécifiées, applique le filtre et place tous les enregistrements correspondant au filtre dans le répertoire de destination spécifié.

[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]#

Introduction à la structure de fichier Ariel

Avant d'aller plus loin, voyons comment les données Ariel sont disposées sur le disque. Ariel est une base de données basée sur des séries chronologiques. Ariel ne sait pas quelles données sont sur le disque tant qu'il ne le recherche pas. Vous pouvez copier des données Ariel entre des systèmes sans aucune conséquence et sans que la base de données Ariel en ait connaissance. Les données Ariel sont stockées dans des enregistrements minute par minute, dans un format similaire à l'exemple suivant :

/store/ariel/[events | flows ]/[records | payloads | md]/YYYY/MM/dd/hh/
Où :
  • events ou flows est le nom de la base de données Ariel

  • records est l'enregistrement d'événement normalisé
  • payloads est la charge utile brute associée aux enregistrements
  • md sont les signatures de hachage ou les condensés de message (éventuellement chiffrés HMAC) des données Ariel

En général, les fichiers de données Ariel ont la structure suivante :

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

Dans le répertoire records, vous voyez des fichiers comme les suivants :
  • events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

    Cet enregistrement représente l'enregistrement d'événement normalisé pour la 5ème minute et le 0ème compartiment de conservation (compartiment, ou "bucket", par défaut).

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

    L'index sourceIP pour la 5ème minute et le 0ème compartiment de conservation (compartiment par défaut).

Dans le répertoire payloads, nous verrons des fichiers comme les suivants :

payload_events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

Les charges utiles brutes pour la 5ème minute et le 0ème compartiment de conservation (compartiment par défaut).

Dans le répertoire md, vous voyez des fichiers comme celui-ci :

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

    La signature HMAC-SHA512 pour les enregistrements d'événement normalisé de la 5ème minute et du 0ème compartiment de conservation.

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

    La signature HMAC-SHA512 pour les charges utiles brutes de la 5ème minute et du 0ème compartiment de conservation.

    Remarque: l'outil ACP crée un répertoire appelé hashes à la place de md. Si vous avez activé le hachage des fichiers ou le hachage d'intégrité, prenez garde à ce problème.

Exemple - Suppression des événements ayant root comme nom d'utilisateur

Dans cet exemple, nous voulons retirer tous les événements dont le nom d'utilisateur est root de la base de données d'événements Ariel pour une période comprise entre 09:00 et 10:00.

  1. Commençons par chercher et voir ce que nous voulons retirer.
    La capture d'écran suivante montre tous les événements :
    Figure 1 : Tous les événements
    Image illustrant tous les événements capturés dans un délai spécifique.
  2. Ensuite, on exécute l'outil 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 capture d'écran suivante montre tous les événements sans le nom d'utilisateur root :
    Figure 2. Tous les événements avec le nom d'utilisateur root
    Image illustrant tous les événements capturés avec le nom d'utilisateur root dans un délai spécifique.
    La capture d'écran suivante montre tous les événements sans le nom d'utilisateur root.
    Figure 3. Tous les événements sans le nom d'utilisateur root
    Image illustrant tous les événements capturés sans nom d'utilisateur root dans un délai spécifique.

    Comme expliqué précédemment, nous avons supprimé tous les événements de 09:00 à 10:00 qui correspondaient au username root. Ainsi, avec l'outil ACP, nous avons spécifié dans nos critères que le username n'était PAS root.

    De plus, nous avons placé les enregistrements filtrés dans le répertoire /store/new_Ariel .

  3. Remplaçons les anciennes données Ariel par les nouvelles données Ariel.

    En examinant le répertoire /store/new_ariel (la destination que nous avons choisie dans cet exemple), nous pouvons voir que nous avons traité une heure de données :

    [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]#
    

    Dans cet exemple, les données ont été choisies pour s'aligner sur des limites d'heure pleine afin de faciliter l'archivage et les copies (la commande mv peut être utilisée). Si vos données ne sont pas alignées sur des limites d'heure pleine, vous devrez migrer fichier par fichier.

  4. Archivez les anciennes données du répertoire ariel dans le répertoire ariel_archive en entrant la commande suivante :
    [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]#
    

    À ce stade, cette heure de données n'est plus cherchable. La base de données Ariel ne pourra pas la trouver car elle ne contient plus les fichiers.

  5. Copiez (ou déplacez) les nouvelles données du répertoire new_ariel dans le répertoire ariel en entrant la commande suivante :
    [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]#
    
    Remarque: Nous sommes passés de hashes à md. Voir la remarque dans la section d'amorce de structure de fichier Ariel.

    Parce que nous avons mené des recherches sur ces données avant de commencer, supprimons ces recherches afin de ne pas obtenir le cache du curseur, si nous exécutons des recherches identiques. Supprimez les recherches de Gérer les résultats de la recherche dans l'onglet Activité du journal.

  6. Exécutez les recherches pour toutes les données de 09:00 à 10:00.
    Figure 4. Nouvelle recherche
    Image montrant une recherche exécutée dans un délai spécifique.
    Remarque: Les résultats totaux sont identiques à ceux du nom d'utilisateur "non" root avant l'exécution de l'outil ACP.
  7. Recherchez le nom d'utilisateur root.
    Figure 5. Nouvelle recherche sur le nom d'utilisateur root
    Image illustrant une recherche de noms d'utilisateur root exécutés dans un délai spécifique.
    Remarque: Certains de mes index n'ont pas été régénérés. Les index normaux, basés sur la propriété minute par minute, sont créés, mais les super-index ne sont jamais générés et la recherche en texte libre /Lucene n'est pas générée non plus. (Problème connu). Heureusement pour nous, nous avons l'outil /opt/qradar/bin/ariel_offline_indexer.sh !

Utilisation du script de l'indexeur hors ligne

Utilisez le script /opt/qradar/bin/ariel_offline_indexer.sh pour générer les super-index.

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]#
Nous allons régénérer l'index de recherche en texte libre et les super-index en tapant la commande suivante :
[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]#

Maintenant, notre index de recherche en texte libre et nos super-index sont remplis.