Collecter les journaux des systèmes Linux auditd et AIX
Cet analyseur gère les journaux d'audit Linux au format SYSLOG, en les transformant en UDM. Il traite à la fois les messages de journal au format JSON et au format texte brut, en extrayant des champs à l'aide de techniques grok, d'analyse XML et d'analyse JSON, et en les mappant sur les 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 informations 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 Linux avec systemd.
- Si vous exécutez l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
Obtenir le numéro client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.
Installer l'agent BindPlane
- Pour l'installation sous Windows, exécutez le script suivant:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Pour l'installation 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
- Pour en savoir plus sur les options d'installation, consultez ce guide d'installation.
Configurer l'agent BindPlane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez à la machine sur laquelle BindPlane est installé.
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
Redémarrez l'agent BindPlane pour appliquer les modifications à l'aide de la commande suivante :
sudo systemctl bindplane restart
Exporter Syslog depuis Auditd
- Accédez à la machine à partir de laquelle vous souhaitez exporter les journaux d'audit.
Ouvrez le fichier de configuration Auditd (généralement situé à l'emplacement
/etc/audit/auditd.conf
).sudo vi /etc/audit/auditd.conf
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
```
Ouvrez le fichier de configuration audispd (généralement situé à
/etc/audisp/plugins.d/syslog.conf
):sudo vi /etc/audisp/plugins.d/syslog.conf
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
Redémarrez le service Auditd pour appliquer les modifications:
sudo systemctl restart auditd
Utilisez un outil tel que
tail
pour surveiller le journal 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)
Modifiez
rsyslog.conf
ou créez une configuration personnalisée:sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
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.
Redémarrez le service rsyslog pour appliquer les modifications:
sudo systemctl restart rsyslog
Tableau 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. Représente le 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. Représente l'adresse IP du principal impliqué dans l'événement. |
additional.fields |
additional.fields |
Des champs supplémentaires issus de paires clé-valeur ou de 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 le UDM. |
algo |
(Non utilisé dans cet exemple) | Bien qu'il soit présent dans l'analyseur et dans certains journaux bruts, ce champ n'est pas utilisé dans l'exemple fourni et n'apparaît pas dans l'UDM finale. |
application |
principal.application |
Dérivé du champ terminal dans le journal brut ou d'autres champs tels que exe , en fonction du 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 le 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 la ressource de cette étiquette est mappé sur principal.hostname . |
create_time |
(Non mappé) | Ce champ n'est pas mappé à l'objet IDM dans le 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 divers champs. Il n'est pas mappé directement sur un seul champ UDM. |
exe |
principal.process.file.full_path , target.process.file.full_path |
Le chemin d'accès de 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 de l'analyseur 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 mappée sur network.tls.client.certificate.sha256 . |
insertId |
(Non mappé) | Ce champ n'est pas mappé à l'objet IDM dans le 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 de 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 sur différents champs UDM ou ajoutés à additional.fields . |
logName |
(Non mappé) | Ce champ n'est pas mappé à l'objet IDM dans le UDM. |
msg |
security_result.summary |
Le message (msg ) est souvent utilisé pour renseigner le champ security_result.summary . |
network.application_protocol |
network.application_protocol |
Défini par la logique d'analyseur en fonction du type d'événement (par exemple, SSH, HTTP). |
network.direction |
network.direction |
Défini par la logique d'analyseur en fonction du type d'événement (par exemple, INBOUND, OUTBOUND). |
network.ip_protocol |
network.ip_protocol |
Défini par la logique de l'analyseur, 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 de chiffrement sont extraites du journal brut et mappées sur ce champ. |
network.tls.curve |
network.tls.curve |
La courbe d'échange de clés est extraite du journal brut et mappée sur 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 de 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 d'analyseur en fonction du système d'exploitation (par exemple, LINUX). |
principal.port |
principal.port |
Numéro de port associé au 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 le 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 le UDM. |
resource.type |
(Non mappé) | Ce champ est présent dans certains journaux bruts, mais n'est pas mappé à l'objet IDM dans le UDM. |
security_result.action |
security_result.action |
Défini 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 sous forme de paires clé-valeur à ce tableau pour fournir du contexte. |
security_result.rule_id |
security_result.rule_id |
Défini par la logique de l'analyseur, souvent sur type_name pour les événements syscall. |
security_result.severity |
security_result.severity |
Défini par la logique de l'analyseur 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 de journaux et n'est pas mappé sur l'objet IDM dans la UDM. |
subj |
(Traitée) | Le champ d'objet (subj ) est traité pour extraire des informations sur le contexte utilisateur et de sécurité. |
syscall |
security_result.about.labels.Syscall |
Le numéro de système d'appel 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 de l'analyseur (par exemple, CREDENTIAL, SETTING). |
target.user.attribute.permissions |
target.user.attribute.permissions |
Autorisations lié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 textuelle du journal, traitée par l'analyseur pour extraire divers 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. |
Modifications
2024-05-08
- Lorsque la valeur n'est pas "?", mappez "field" sur "field33" pour "security_result.detection_fields".
- Lorsque "type_name" est "CRYPTO_KEY_USER", "exe" est mappé sur "principal.process.file.full_path".
- Lorsque "type_name" est "CRYPTO_KEY_USER", "fp" est mappé sur "network.tls.client.certificate.sha256".
- Lorsque "type_name" est "CRYPTO_KEY_USER", le "pid" est mappé sur "principal.process.pid".
- Ajout de modèles Grok pour analyser un nouveau format de journaux.
- "syslog-tag" a été mappé sur "security_result.detection_fields".
- Mappage de "inter_ip" sur "intermediary.ip".
- "inter_hostname" a été mappé sur "intermediary.hostname".
2024-05-02
- Lorsque "type_name" est "USER_MGMT", "grp" est mappé sur "target.group.group_display_name".
- Lorsque "type_name" est "USER_MGMT", le mappage de "uid" est modifié de "principal.user.userid" à "target.user.userid".
- Lorsque "type_name" est "USER_MGMT" et que "op" est égal à "deleting-user-from-group", définissez "metadata.event_type" sur "GROUP_MODIFICATION".
- Lorsque "type_name" est "USER_MGMT", le mappage de "exe" a été modifié de "target.process.file.full_path" à "principal.process.file.full_path".
- Lorsque "type_name" est "USER_MGMT", l'attribut "id" est mappé sur "about.user.userid".
2024-04-08
- Lorsque "type_name" est "ADD_USER", que "principal_user_present" est "true", que "target_user_present" est "true" et que "has_principal" est "true", définissez "metadata.event_type" sur "USER_CREATION".
- Lorsque "type_name" est "USER_AUTH", "acct" est mappé sur "target.user.user_display_name".
- Lorsque "type_name" est "USER_AUTH", "uid" est mappé sur "principal.user.userid".
- Lorsque "type_name" ne figure pas dans "ADD_USER","USER_AUTH","CRED_ACQ" et "USER_MGMT", mappez "auid" sur "about.user.userid".
- Lorsque "type_name" est "ADD_USER", "auid" est mappé sur "target.user.userid".
- Lorsque "type_name" est "ADD_USER" ou "USER_AUTH", "exe" est mappé sur "principal.process.file.full_path".
- Lorsque "type_name" est "ADD_USER", les valeurs "op" et "id" sont mappées sur "security_result.summary".
- Lorsque "type_name" est "USER_AUTH", les valeurs "op" et "acct" sont mappées sur "security_result.summary".
2024-03-22
- Prise en charge d'un nouveau format de journaux JSON.
- "labels.compute.googleapis.com/resource_name","jsonPayload._HOSTNAME", "CollectorHostName", "HOSTNAME" et "Computer" ont été mappés sur "principal.hostname".
- Mappage de "HostIP" sur "principal.ip".
- Mappage de "ProcessID" et de "jsonPayload._PID" sur "principal.process.pid".
- Mappage de "SyslogMessage" sur "metadata.description".
- Mappage de "TenantId", "_ItemId", "_Internal_WorkspaceResourceId", "_ResourceId" et "Facility" sur "additional.fields".
- Mappage de "SeverityLevel" sur "security_result.severity".
- Mappage de "SourceSystem" sur "principal.platform".
- Mappage de "jsonPayload._COMM" sur "principal.application".
- Mappage de "jsonPayload._EXE" sur "target.process.file.full_path".
- "jsonPayload._AUDIT_FIELD_FILE" a été mappé sur "target.file.full_path".
- Mappage de "jsonPayload._AUDIT_FIELD_HASH" sur "target.file.hash".
- "jsonPayload._AUDIT_SESSION" a été mappé sur "network.session_id".
- Mappage de "jsonPayload._PPID" sur "principal.process.parent_process.pid".
- Mappage de "jsonPayload._AUDIT_FIELD_A0", "jsonPayload._AUDIT_FIELD_A1", "jsonPayload._AUDIT_FIELD_A2", "jsonPayload._AUDIT_FIELD_A3", "jsonPayload._BOOT_ID" et "jsonPayload._AUDIT_FIELD_EXIT" sur "security_result.detection_fields".
2023-11-27
- Ajout d'une vérification de validation pour s'assurer que "principal_user_present", "target_user_present" ou "has_principal" est défini sur "TRUE" avant de définir "metadata.event_type" sur "USER_LOGIN".
- Ajout d'une vérification de validation pour s'assurer que "principal_user_present", "target_user_present" ou "has_principal" est défini sur "true" avant de définir "metadata.event_type" sur "USER_LOGOUT".
- Ajout d'une vérification de validation pour s'assurer que "principal_user_present", "target_user_present" ou "has_principal" est défini sur "TRUE" avant de définir "metadata.event_type" sur "USER_CREATION".
- Ajout d'une vérification de validation pour s'assurer que "principal_user_present", "target_user_present" ou "has_principal" est défini sur "true" avant de définir "metadata.event_type" sur "USER_DELETION".
- Ajout d'une vérification de validation pour s'assurer que "principal_user_present", "target_user_present" ou "has_principal" est défini sur "true" avant de définir "metadata.event_type" sur "USER_UNCATEGORIZED".
- Ajout d'une vérification de validation pour s'assurer que "principal_user_present", "target_user_present" ou "has_principal" est défini sur "TRUE" avant de définir "metadata.event_type" sur "USER_RESOURCE_ACCESS".
- Ajout d'une vérification de validation pour s'assurer que "principal_user_present", "target_user_present" ou "has_principal" est défini sur "TRUE" avant de définir "metadata.event_type" sur "USER_CHANGE_PERMISSIONS".
- Lorsque les informations sur l'utilisateur sont présentes et que les informations sur la machine principale ne le sont pas, la mise en correspondance de "metadata.event_type" a été modifiée de "USER_CREATION" à "USER_UNCATEGORIZED".
- Lorsque les informations sur l'utilisateur sont présentes et que les informations sur la machine principale ne le sont pas, la mise en correspondance de "metadata.event_type" a été modifiée de "USER_DELETION" à "USER_UNCATEGORIZED".
2023-09-06
- Ajout de la mise en correspondance de "CMD" avec "target.process.command_line" pour le "daemon cron(CROND)".
2023-06-20
- Amélioration : ajout ou modification des mises en correspondance suivantes lorsque le type est"ADD_USER" et "DEL_USER"
- Modification de la mise en correspondance de "uid" de "target.user.userid" à "principal.user.userid".
- Mappage de "id" sur "target.user.userid".
- "ID" a été mappé sur "target.user.user_display_name".
- Modification de la mise en correspondance de l'UID de "principal.user.userid" à "principal.user.user_display_name".
- Modification du mappage de "acct" de "principal.user.user_display_name" à "target.user.user_display_name" et "target.user.userid".
2023-06-09
- Amélioration : modification de "event_type" de "USER_LOGIN" à "USER_CREATION" lorsque "type=ADD_USER".
2023-04-17
- Amélioration
- Ajout de la fonction gsub pour remplacer le caractère "GS - Group separator", qui perturbe la construction JSON.
2023-04-10
- Amélioration
- Ajout des champs "gid", "euid", "egid", "suid", "fsuid", "sgid", "fsgid", "tty" et "items" à security_result.detection_fields.
- Mappage supplémentaire de "gid" sur "principal.user.group_identifiers".
- Mappage de "euid" sur "target.user.userid".
- Mappage de "egid" sur "target.user.group_identifiers".
2023-03-27
- Amélioration : prise en charge de "jsonPayload" contenant des journaux.
2023-02-28
- Correction de bug : analyseur amélioré pour convertir une chaîne encodée en hexadécimal en ASCII.
2023-02-09
- Amélioration : modification de grok pour les journaux contenant "type=PATH" afin d'extraire le nom d'hôte correct à partir des journaux.
2023-01-24
- Amélioration :
- Journal analysé avec eventType défini sur "tac_plus".
- Ajout de conditions pour mapper différents types d'événements : "NETWORK_CONNECTION", "NETWORK_HTTP" et "USER_LOGIN".
2022-12-02
- Amélioration :
- "user_name" a été mappé sur "principal.user.userid".
- Ajout d'une vérification conditionnelle pour "dst_ip" et "dst_port".
2022-10-31
- Amélioration :
- Amélioration de l'analyseur pour analyser le journal avec type=ADD_USER, USER_MGMT, DEL_USER.
- Ajout de vérifications de valeurs nulles pour "principal_hostname".
- Ajout de vérifications on_error pour "principal.process.file.full_path", "type_syscall_props.key", "type_syscall_props.arch" et "msg2".
- Ajout de vérifications conditionnelles pour la mise en correspondance avec event_type="FILE_OPEN", "USER_UNCATEGORIZED", "STATUS_UPDATE" et "USER_DELETION".
- "principal_user_userid" a été mappé sur "principal.user.userid".
2022-11-16
- Amélioration :
- "GENERIC_EVENT" a été remplacé par "STATUS_UPDATE" pour les types de journaux contenant "Journaux d'accès".
2022-10-14
- Amélioration :
- Migration de l'analyseur client vers l'analyseur par défaut.
2022-10-13
- Amélioration : mise en correspondance de "vendor_name" avec "Linux".
- "product_name" a été mappé sur "AuditD".
- Analyse des journaux contenant "ProxySG" et mappage de "ip" sur "target.ip", de "port" sur "target.port" dans la mesure du possible.
- Modification de "event_type" de "GENERIC_EVENT" à "STATUS_UPDATE".
- Modification de la mise en correspondance de "intermediary.hostname" en "principal.hostname".
2022-07-28
- Amélioration :
- Mappage du champ "auid" sur "about.user.userid".
- Mappage du champ "AUID" sur "about.user.user_display_name".
- Mappage du champ "proctitle" sur "target.process.file.full_path".
- Amélioration de l'analyseur pour analyser le journal avec type=DAEMON_END, CRYPTO_SESSION, CONFIG_CHANGE, PROCTITLE, USER_ERR, CRYPTO_KEY_USER.
- Ajout d'une vérification conditionnelle pour laddr, addr, cipher, pfs, direction, acct, pid, ppid, cmd, exe, ses.
2022-06-17
- Amélioration : mise en correspondance/modification des champs suivants :
- Modification de la mise en correspondance de "auid" de "security_result.about.user.userid" à "about.user.userid".
- "event_type" pour type=SYSCALL est passé de "SYSTEM_AUDIT_LOG_UNCATEGORIZED" à "USER_UNCATEGORIZED".
- Mappage de "success" sur "security_result.summary".
- Mappage de "syscall", "exit", "tty", "a0", "a1", "a2" et "a3" sur "security_result.about.labels".
- Suppression des journaux au format ASCII.
2022-06-14
- amélioration
- Amélioration de l'analyseur pour analyser le type de journaux USER_CMD.
- Mappage du champ "cmd" sur "principal.process.command_line".
- Mappage du champ "ses" sur "network.session_id".
- Mappage du champ "res" sur "security_result.action" et "security_result.action_details".
- Mappage des champs "auid" et "cwd" sur "security_result.detection_fields".
2022-04-26
- amélioration
- Augmentation du pourcentage d'analyse en analysant tous les journaux non analysés.