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 les 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 sur les répertoires, en enrichissant les données avec un contexte supplémentaire tel que les informations SSL/TLS et les actions (autoriser/bloquer). Il effectue également des transformations spécifiques pour différents types de messages de journaux, comme l'extraction des codes et des descriptions de réponse, et la conversion des tailles de fichier en nombres 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 le programme 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 à Paramètres du 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 sur lequel Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation de fenêtres
- 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 de Linux
- Ouvrez un terminal avec les 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 plus d'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 :
- Trouvez le fichier
config.yaml
. En règle générale, il se trouve 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
,vi
ou le Bloc-notes).
- Trouvez le fichier
Modifiez le fichier
config.yaml
comme 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 le numéro client réel. - Mettez à jour
/path/to/ingestion-authentication-file.json
en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart bindplane-agent
Pour 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 dans Ubuntu/Debian, exécutez la commande suivante :
sudo apt install rsyslog
Pour installer rsyslog dans CentOS/RHEL, exécutez la commande suivante :
sudo yum install rsyslog
Modifiez la configuration vsftpd pour utiliser Syslog :
sudo vi /etc/vsftpd.conf
Assurez-vous que les paramètres suivants sont définis :
syslog_enable=YES xferlog_enable=NO log_ftp_protocol=YES
Enregistrez la modification et quittez l'éditeur.
Redémarrez vsftpd :
sudo systemctl restart vsftpd
Modifiez la configuration rsyslog pour transférer les journaux vers l'agent Bindplane :
sudo nano /etc/rsyslog.d/90-vsftpd.conf
Ajoutez la ligne suivante pour transférer les journaux à l'aide de
UDP
(port par défaut :514
) :if ($programname == 'vsftpd') then @@BINDPLANE_IP:514
Remplacez
BINDPLANE_IP
par 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 de 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 le metadata.event_timestamp . Le format est dérivé du champ timestamp du journal brut, analysé et converti en objet d'horodatage. |
day |
metadata.event_timestamp |
Utilisé avec month , year et time pour construire le 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.command security_result.description target.file.full_path |
Si type est défini sur "FTP command", la valeur est mappée sur network.ftp.command . Si type est défini sur "DEBUG" et ne correspond à aucun modèle SSL spécifique, 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 sur un 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_bytes network.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-le sur "USER_LOGIN" si type est défini sur "OK LOGIN". Définissez sur "FILE_UNCATEGORIZED" si type est lié à des opérations sur les fichiers ("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 le 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" (état de réutilisation). |
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 à 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 : "État de l'arrêt SSL"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" (État d'arrêt SSL). |
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 le metadata.event_timestamp . |
type |
metadata.description security_result.action_details |
La valeur du champ type est mappée sur metadata.description , sauf lorsqu'elle est définie sur "OK LOGIN". Il est également associé à security_result.action_details lorsqu'il indique une action d'autorisation ou de blocage (commence par "OK" ou "ÉCHEC"). |
userid |
principal.user.userid target.user.userid |
Si type est défini sur "OK LOGIN", la valeur est mappée sur target.user.userid . Sinon, il est mappé sur principal.user.userid . |
year |
metadata.event_timestamp |
Utilisé avec day , month et time pour construire le metadata.event_timestamp . Définissez sur "NETWORK" si type est "OK LOGIN". Définissez sur "MACHINE" si type est "OK LOGIN". Définissez la valeur sur "ALLOW" (AUTORISER) si type commence par "OK". Définissez la valeur sur "BLOCK" (BLOQUER) si type commence par "FAIL" (ÉCHEC). |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.