Collecter les journaux VSFTPD
Ce document explique comment ingérer des journaux VSFTPD dans Google Security Operations à l'aide de Bindplane. L'analyseur utilise des modèles Grok pour extraire des champs des journaux et les mapper à l'UDM. Il gère différents types de journaux, y compris les connexions, les importations, les téléchargements et les opérations de répertoire, en enrichissant les données avec un contexte supplémentaire, comme des informations et des actions SSL/TLS (autoriser/bloquer). Il effectue également des transformations spécifiques pour différents types de messages de journal, comme l'extraction des codes et des descriptions de réponse, et la conversion des tailles de fichier en entiers.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Instance Google SecOps
- Windows 2016 ou version ultérieure, ou un hôte Linux avec
systemd - Si vous exécutez l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
- Accès privilégié à l'hôte avec VSFTPD
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à SIEM Settings > Collection Agents (Paramètres SIEM > Agents de collecte).
- Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système où Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM > Profil.
- Copiez l'ID client dans la section Organization Details (Informations sur l'organisation) et enregistrez-le.
Installer l'agent Bindplane
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation sous Windows
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation sous Linux
- Ouvrez un terminal avec des droits root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Ressources d'installation supplémentaires
Pour obtenir d'autres options d'installation, consultez le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml. Il se trouve généralement dans le répertoire/etc/bindplane-agent/sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano,viou Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yamlcomme suit :receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'VSFTPD' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
- Remplacez
<customer_id>par l'ID client réel. - Mettez à jour
/path/to/ingestion-authentication-file.jsonavec le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'ingestion Google SecOps.
Redémarrer l'agent Bindplane pour appliquer les modifications
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart bindplane-agentPour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configurer Syslog sur VSFTPD
- Connectez-vous à l'hôte VSFTPD.
Pour installer rsyslog sous Ubuntu/Debian, exécutez la commande suivante :
sudo apt install rsyslogPour installer rsyslog sous CentOS/RHEL, exécutez la commande suivante :
sudo yum install rsyslogModifiez la configuration vsftpd pour utiliser Syslog :
sudo vi /etc/vsftpd.confAssurez-vous que les paramètres suivants sont définis :
syslog_enable=YES xferlog_enable=NO log_ftp_protocol=YESEnregistrez la modification et quittez l'éditeur.
Redémarrez vsftpd :
sudo systemctl restart vsftpdModifiez la configuration rsyslog pour transférer les journaux à l'agent Bindplane :
sudo nano /etc/rsyslog.d/90-vsftpd.confAjoutez la ligne suivante pour transférer les journaux à l'aide de
UDP(port par défaut514) :if ($programname == 'vsftpd') then @@BINDPLANE_IP:514Remplacez
BINDPLANE_IPpar l'adresse IP réelle de l'agent Bindplane.- Utilisez
@pour UDP et@@pour TCP.
- Utilisez
Redémarrez rsyslog :
sudo systemctl restart rsyslog
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
certificate |
security_result.detection_fields.key: "cert"security_result.detection_fields.value: valeur de certificate |
La valeur du champ certificate est mappée sur un objet security_result.detection_fields avec la clé "cert". |
cipher |
network.tls.cipher |
La valeur du champ cipher est directement mappée. |
client_ip |
principal.ip |
La valeur du champ client_ip est directement mappée. |
date |
metadata.event_timestamp |
Utilisé avec month, year et time pour construire metadata.event_timestamp. Le format est dérivé du champ timestamp dans le journal brut, analysé et converti en objet d'horodatage. |
day |
metadata.event_timestamp |
Utilisé avec month, year et time pour construire metadata.event_timestamp. |
desc |
metadata.description |
La valeur du champ desc (extraite du champ type) est directement mappée. Cela s'applique aux opérations "MKDIR", "RMDIR" et "DELETE". |
description |
network.ftp.commandsecurity_result.descriptiontarget.file.full_path |
Si type est "FTP command", la valeur est mappée sur network.ftp.command. Si type est "DEBUG" et ne correspond pas à des modèles SSL spécifiques, il est mappé sur security_result.description. Si type commence par "OK" et n'est pas "OK LOGIN", et que le journal décrit une opération de fichier (MKDIR, RMDIR, DELETE), il est mappé sur target.file.full_path. |
file_name |
target.file.full_path |
La valeur du champ file_name est directement mappée. |
file_size |
network.received_bytesnetwork.sent_bytes |
Si type est "OK DOWNLOAD" ou "FAIL DOWNLOAD", la valeur est convertie en entier non signé et mappée sur network.received_bytes. Si type est "OK UPLOAD" ou "FAIL UPLOAD", la valeur est convertie en entier non signé et mappée sur network.sent_bytes. Définissez sur "USER_LOGIN" si type est "OK LOGIN". Définissez sur "FILE_UNCATEGORIZED" si type est lié à des opérations de fichier ("OK UPLOAD", "OK DOWNLOAD", "FAIL DOWNLOAD", "OK MKDIR", "OK RMDIR", "OK DELETE", "FAIL UPLOAD"). Définissez sur "STATUS_UPDATE" pour toutes les autres valeurs type. Toujours défini sur "VSFTPD". Toujours défini sur "VSFTPD". Toujours défini sur "VSFTPD". |
month |
metadata.event_timestamp |
Utilisé avec day, year et time pour construire metadata.event_timestamp. |
pid |
principal.process.pid |
La valeur du champ pid est directement mappée. |
response_code |
network.http.response_code |
La valeur du champ response_code est convertie en entier et mappée. |
reused_status |
security_result.detection_fields.key: "reused status"security_result.detection_fields.value: valeur de reused_status |
La valeur du champ reused_status est mappée sur un objet security_result.detection_fields avec la clé "reused status". |
speed |
additional.fields.key: "download_speed" ou "upload_speed"additional.fields.value.string_value: valeur de speed |
Si type est "OK DOWNLOAD" ou "FAIL DOWNLOAD", la valeur est mappée sur additional.fields avec la clé "download_speed". Si type est "OK UPLOAD" ou "FAIL UPLOAD", la valeur est mappée sur additional.fields avec la clé "upload_speed". |
ssl_shutdown_state |
security_result.detection_fields.key: "SSL Shutdown State"security_result.detection_fields.value: valeur de ssl_shutdown_state |
La valeur du champ ssl_shutdown_state est mappée sur un objet security_result.detection_fields avec la clé "SSL Shutdown State". |
ssl_version |
network.tls.version |
La valeur du champ ssl_version est directement mappée. |
time |
metadata.event_timestamp |
Utilisé avec day, month et year pour construire metadata.event_timestamp. |
type |
metadata.descriptionsecurity_result.action_details |
La valeur du champ type est mappée sur metadata.description, sauf lorsqu'il s'agit de "OK LOGIN". Il est également mappé sur security_result.action_details lorsqu'il indique une action d'autorisation ou de blocage (commence par "OK" ou "FAIL"). |
userid |
principal.user.useridtarget.user.userid |
Si type est "OK LOGIN", la valeur est mappée sur target.user.userid. Sinon, elle est mappée sur principal.user.userid. |
year |
metadata.event_timestamp |
Utilisé avec day, month et time pour construire metadata.event_timestamp. Définissez sur "NETWORK" si type est "OK LOGIN". Définissez sur "MACHINE" si type est "OK LOGIN". Définissez sur "ALLOW" si type commence par "OK". Définissez sur "BLOCK" si type commence par "FAIL". |
Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.