Collecter les journaux système Linux auditd et AIX

Compatible avec :

Cet analyseur gère les journaux d'audit Linux au format SYSLOG et les transforme en UDM. Il traite les messages de journaux au format JSON et en texte brut, extrait les champs à l'aide des techniques d'analyse grok, XML et JSON, et les mappe aux champs UDM appropriés en fonction du type d'événement. L'analyseur gère également les formats de journaux d'audit spécifiques des systèmes AIX et enrichit l'UDM avec des champs supplémentaires tels que security_result et des détails intermédiaires.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google Security Operations.
  • Assurez-vous de disposer d'un accès racine à l'hôte Auditd.
  • Assurez-vous d'avoir installé rsyslog sur l'hôte Auditd.
  • Assurez-vous de disposer d'un hôte Windows 2012 SP2 ou version ultérieure, ou d'un hôte Linux avec systemd.
  • Si vous exécutez le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM > Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur l'organisation.

Installer l'agent BindPlane

  1. Pour installer sous Windows, exécutez le script suivant :
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Pour installer sous Linux, exécutez le script suivant :
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Vous trouverez d'autres options d'installation dans ce guide d'installation.

Configurer l'agent Bindplane pour ingérer les journaux Syslog et les envoyer à Google SecOps

  1. Accédez à la machine sur laquelle Bindplane est installé.
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
      tcplog:
        # Replace the below port <54525> and IP <0.0.0.0> with your specific values
        listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: auditd
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Redémarrez l'agent Bindplane pour appliquer les modifications à l'aide de la commande suivante : sudo systemctl bindplane restart

Exporter Syslog depuis Auditd

  1. Accédez à la machine à partir de laquelle vous souhaitez exporter les journaux d'audit.
  2. Ouvrez le fichier de configuration Auditd (généralement situé à l'adresse /etc/audit/auditd.conf).

    sudo vi /etc/audit/auditd.conf
    
  3. Recherchez ou ajoutez la ou les lignes suivantes pour configurer auditd :

    active = yes
    output = syslog
    log_format = ENRICHED
    dispatcher = /sbin/audispd
    

Facultatif : Spécifiez le service Syslog. Ajoutez ou modifiez la ligne suivante dans auditd.conf :

```none
syslog_facility = LOG_AUTHPRIV
```
  1. Ouvrez le fichier de configuration audispd (généralement situé sous /etc/audisp/plugins.d/syslog.conf) :

    sudo vi /etc/audisp/plugins.d/syslog.conf
    
  2. Recherchez ou ajoutez la ou les lignes suivantes pour configurer audispd :

    active = yes
    direction = out
    path = builtin_syslog
    type = builtin
    args = LOG_INFO
    format = string
    
  3. Redémarrez le service Auditd pour appliquer les modifications :

    sudo systemctl restart auditd
    
  4. Utilisez un outil tel que tail pour surveiller le syslog et vérifier que les journaux Auditd sont envoyés :

    tail -f /var/log/syslog | grep auditd # Follow syslog and filter for auditd messages (path may vary depending on your system)
    
  5. Modifiez rsyslog.conf ou créez une configuration personnalisée :

    sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
    
  6. Ajoutez une règle pour transférer les journaux :

    • if $programname == 'auditd' then @@<Bindplane_Agent>:<Bindplane_Port>
    • Utilisez @ pour UDP ou @@ pour TCP.
    • Remplacez <BindPlane_Agent> par l'adresse IP ou le nom d'hôte de votre serveur.
    • Remplacez <BindPlane_Port> par le port de votre serveur.
  7. Redémarrez le service rsyslog pour appliquer les modifications :

    sudo systemctl restart rsyslog
    

Table de mappage UDM

Champ de journal Mappage UDM Logique
acct target.user.user_display_name La valeur de acct du journal brut est mappée sur le champ target.user.user_display_name de l'UDM. Il s'agit du compte associé à l'événement.
addr principal.ip La valeur de addr du journal brut est mappée sur le champ principal.ip de l'UDM. Il s'agit de l'adresse IP du compte principal impliqué dans l'événement.
additional.fields additional.fields Les champs supplémentaires issus des paires clé-valeur ou des libellés analysés sont ajoutés au tableau additional.fields dans l'UDM.
agent.googleapis.com/log_file_path (Non mappé) Ce libellé est présent dans certains journaux bruts, mais n'est pas mappé à l'objet IDM dans l'UDM.
algo (Non utilisé dans cet exemple) Bien que présent dans l'analyseur et certains journaux bruts, ce champ n'est pas utilisé dans l'exemple fourni et n'apparaît pas dans l'UDM final.
application principal.application Dérivé du champ terminal dans le journal brut ou d'autres champs tels que exe, selon le type de journal. Représente l'application concernée.
arch security_result.about.platform_version L'architecture du champ arch du journal brut est mappée sur security_result.about.platform_version.
auid about.user.userid, security_result.detection_fields.auid L'ID utilisateur d'audit (auid) est mappé sur about.user.userid et ajouté en tant que champ de détection dans security_result.
cmd target.process.command_line La commande du champ cmd du journal brut est mappée sur target.process.command_line.
collection_time (Non mappé) Ce champ correspond à l'heure de collecte des journaux et n'est pas mappé à l'objet IDM dans l'UDM.
comm principal.application Le nom de la commande (comm) est mappé sur principal.application.
compute.googleapis.com/resource_name principal.hostname Le nom de ressource de ce libellé est mappé sur principal.hostname.
create_time (Non mappé) Ce champ n'est pas mappé à l'objet IDM dans l'UDM.
cwd security_result.detection_fields.cwd Le répertoire de travail actuel (cwd) est ajouté en tant que champ de détection dans security_result.
data (Traitée) Le champ data contient le message de journal principal et est traité par l'analyseur pour extraire différents champs. Il n'est pas directement mappé sur un seul champ UDM.
exe principal.process.file.full_path, target.process.file.full_path Le chemin d'accès à l'exécutable (exe) est mappé sur principal.process.file.full_path ou target.process.file.full_path selon le contexte.
extensions.auth.type extensions.auth.type Le type d'authentification est défini par la logique du parseur en fonction du type d'événement. Souvent défini sur MACHINE ou AUTHTYPE_UNSPECIFIED.
fp network.tls.client.certificate.sha256 L'empreinte (fp) est analysée pour extraire le hachage SHA256 et est mappée sur network.tls.client.certificate.sha256.
insertId (Non mappé) Ce champ n'est pas mappé à l'objet IDM dans l'UDM.
jsonPayload.message (Traitée) Ce champ contient le message de journal principal au format JSON et est traité par l'analyseur.
key security_result.about.registry.registry_key Le champ clé est mappé sur security_result.about.registry.registry_key.
labels (Traitée) Les libellés du journal brut sont traités et mappés à différents champs UDM ou ajoutés à additional.fields.
logName (Non mappé) Ce champ n'est pas mappé à l'objet IDM dans l'UDM.
msg security_result.summary Le message (msg) est souvent utilisé pour remplir le champ security_result.summary.
network.application_protocol network.application_protocol Définie par la logique de l'analyseur en fonction du type d'événement (par exemple, SSH, HTTP).
network.direction network.direction Définie par la logique de l'analyseur en fonction du type d'événement (par exemple, INBOUND, OUTBOUND).
network.ip_protocol network.ip_protocol Défini par la logique du parseur, généralement sur TCP pour les événements SSH.
network.session_id network.session_id Mappé à partir du champ ses ou dérivé d'autres champs.
network.tls.cipher network.tls.cipher Les informations sur le chiffrement sont extraites du journal brut et mappées à ce champ.
network.tls.curve network.tls.curve La courbe d'échange de clés est extraite du journal brut et mappée à ce champ.
pid principal.process.pid, target.process.pid L'ID de processus (pid) est mappé sur principal.process.pid ou target.process.pid en fonction du contexte.
ppid principal.process.parent_process.pid, target.process.parent_process.pid L'ID du processus parent (ppid) est mappé sur principal.process.parent_process.pid ou target.process.parent_process.pid en fonction du contexte.
principal.asset.hostname principal.asset.hostname Copié depuis principal.hostname.
principal.asset.ip principal.asset.ip Copié depuis principal.ip.
principal.platform principal.platform Défini par la logique de l'analyseur en fonction du système d'exploitation (par exemple, LINUX).
principal.port principal.port Numéro de port associé au compte principal.
principal.user.group_identifiers principal.user.group_identifiers ID de groupe associés à l'utilisateur principal.
receiveTimestamp (Non mappé) Ce champ correspond au code temporel de réception du journal et n'est pas mappé à l'objet IDM dans l'UDM.
res security_result.action_details Le résultat (res) est mappé sur security_result.action_details.
resource.labels (Non mappé) Ces libellés sont présents dans certains journaux bruts, mais ne sont pas mappés à l'objet IDM dans l'UDM.
resource.type (Non mappé) Ce champ est présent dans certains journaux bruts, mais n'est pas mappé à l'objet IDM dans l'UDM.
security_result.action security_result.action Définie par la logique de l'analyseur en fonction du champ res (par exemple, ALLOW, BLOCK).
security_result.detection_fields security_result.detection_fields Divers champs du journal brut sont ajoutés à ce tableau sous forme de paires clé-valeur pour le contexte.
security_result.rule_id security_result.rule_id Défini par la logique du parseur, souvent sur type_name pour les événements syscall.
security_result.severity security_result.severity Défini par la logique du parseur en fonction du niveau de gravité dans le journal brut.
security_result.summary security_result.summary Résumé de l'événement, souvent dérivé du champ msg ou d'autres champs pertinents.
ses network.session_id L'ID de session (ses) est mappé sur network.session_id.
source (Non mappé) Ce champ contient des métadonnées sur la source du journal et n'est pas mappé à l'objet IDM dans l'UDM.
subj (Traitée) Le champ "Objet" (subj) est traité pour extraire les informations sur le contexte utilisateur et de sécurité.
syscall security_result.about.labels.Syscall Le numéro de syscall est ajouté en tant que libellé dans security_result.about.
target.administrative_domain target.administrative_domain Domaine de l'utilisateur cible.
target.group.group_display_name target.group.group_display_name Nom du groupe cible.
target.ip target.ip Adresse IP de la cible.
target.port target.port Numéro de port associé à la cible.
target.process.command_line target.process.command_line Ligne de commande du processus cible.
target.resource.type target.resource.type Type de la ressource cible, défini par la logique du parseur (par exemple, CREDENTIAL, SETTING).
target.user.attribute.permissions target.user.attribute.permissions Autorisations associées à l'utilisateur cible.
target.user.group_identifiers target.user.group_identifiers ID de groupe associés à l'utilisateur cible.
target.user.userid target.user.userid ID utilisateur de la cible.
textPayload (Traitée) Charge utile de texte du journal, traitée par l'analyseur pour extraire différents champs.
timestamp metadata.event_timestamp Horodatage de l'événement.
tty security_result.about.labels.tty Le TTY est ajouté en tant que libellé dans security_result.about.
type metadata.product_event_type Le type d'événement (type) est mappé sur metadata.product_event_type.
uid principal.user.userid, target.user.userid L'ID utilisateur (uid) est mappé sur principal.user.userid ou target.user.userid selon le contexte.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.