Collecter les journaux EfficientIP DDI
Ce document explique comment ingérer des journaux EfficientIP DDI dans Google Security Operations à l'aide de l'agent Bindplane.
EfficientIP SOLIDserver est une solution DDI (DNS-DHCP-IPAM) complète qui fournit des appliances virtuelles et matérielles hautement évolutives, sécurisées et robustes pour les services réseau critiques, y compris DNS, DHCP, IP Address Management, NTP et TFTP. La plate-forme fournit une gestion et une automatisation centralisées de l'infrastructure réseau, avec des fonctionnalités avancées de surveillance et de sécurité.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Windows Server 2016 ou version ultérieure, ou un hôte Linux avec
systemd - Connectivité réseau entre l'agent Bindplane et l'appliance EfficientIP SOLIDserver
- Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Accès administrateur à la console Web EfficientIP SOLIDserver
- SOLIDserver version 8.0 ou ultérieure (testé avec les versions 8.3.x et 8.4.x)
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" /quietAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sc query observiq-otel-collectorL'état du service doit être RUNNING (EN COURS D'EXÉCUTION).
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.shAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sudo systemctl status observiq-otel-collectorL'état du service doit être active (running).
Ressources d'installation supplémentaires
Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.
Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps
Localiser le fichier de configuration
Linux :
sudo nano /etc/bindplane-agent/config.yamlWindows :
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifiez le fichier de configuration
Remplacez l'intégralité du contenu de
config.yamlpar la configuration suivante :receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/efficientip_ddi: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: EFFICIENTIP_DDI raw_log_field: body ingestion_labels: env: production source: solidserver service: pipelines: logs/efficientip_to_chronicle: receivers: - udplog exporters: - chronicle/efficientip_ddiRemplacez les espaces réservés suivants :
Configuration du récepteur :
listen_address: définissez sur0.0.0.0:514pour écouter sur toutes les interfaces sur le port UDP 514.- Pour les déploiements Linux non root, utilisez le port
1514ou un port supérieur. - Assurez-vous que le port correspond à la configuration dans SOLIDserver.
- Pour les déploiements Linux non root, utilisez le port
Configuration de l'exportateur :
creds_file_path: chemin d'accès complet au fichier d'authentification de l'ingestion :- Linux :
/etc/bindplane-agent/ingestion-auth.json - Windows :
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux :
customer_id: remplacezYOUR_CUSTOMER_IDpar le numéro client de l'étape précédente.endpoint: point de terminaison régional :- États-Unis :
malachiteingestion-pa.googleapis.com - Europe :
europe-malachiteingestion-pa.googleapis.com - Asie :
asia-southeast1-malachiteingestion-pa.googleapis.com - Pour obtenir la liste complète, consultez Points de terminaison régionaux.
- États-Unis :
log_type: définissez surEFFICIENTIP_DDI(correspondance exacte requise).ingestion_labels: libellés facultatifs pour catégoriser les journaux (personnalisez-les selon vos besoins).
Enregistrez le fichier de configuration.
Après avoir modifié le fichier, enregistrez-le :
- Linux : appuyez sur
Ctrl+O, puis surEnter, puis surCtrl+X. - Windows : cliquez sur Fichier > Enregistrer.
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 observiq-otel-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Pour redémarrer l'agent Bindplane sous Windows :
Choisissez l'une des options suivantes :
Invite de commandes ou PowerShell en tant qu'administrateur :
net stop observiq-otel-collector && net start observiq-otel-collectorConsole Services :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Recherchez observIQ OpenTelemetry Collector.
- Effectuez un clic droit, puis sélectionnez Redémarrer.
- Appuyez sur
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez les erreurs dans les journaux :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurer le transfert syslog EfficientIP DDI
- Connectez-vous à la console Web EfficientIP SOLIDserver.
- Dans le volet de navigation de gauche, cliquez sur Administration.
- Dans la section Monitoring, cliquez sur Configuration.
- Dans le menu, cliquez sur + Ajouter.
- Dans la liste Services, sélectionnez les services suivants : named (pour les journaux DNS)
- Dans le champ Serveur cible, saisissez l'adresse IP et le port de l'hôte de l'agent Bindplane au format
<ip-address>:<port>.- Exemple :
192.168.1.100:514 - Si vous utilisez un port non standard sous Linux, spécifiez-le en conséquence (par exemple,
192.168.1.100:1514).
- Exemple :
Cliquez sur OK pour enregistrer la configuration.
Vérifier le transfert de journaux
- Consultez les journaux de l'agent Bindplane pour vérifier que les journaux sont bien reçus :
- Linux :
sudo journalctl -u observiq-otel-collector -f - Windows :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Linux :
- Recherchez les entrées de journal contenant les événements de requête et de réponse DNS de SOLIDserver.
- Connectez-vous à la console Google SecOps et vérifiez que les journaux EfficientIP DDI s'affichent sur la page Événements.
Types de journaux acceptés
Cette intégration collecte les types de journaux suivants à partir d'EfficientIP SOLIDserver :
- Journaux des requêtes DNS : requêtes DNS du client avec le type de requête, le nom de domaine et l'adresse IP du client
- Journaux de réponses DNS : réponses DNS avec enregistrements de réponse, TTL et codes de réponse
- Journaux DHCP : opérations DHCP, y compris DISCOVER, OFFER, REQUEST, ACK, NAK, RELEASE et INFORM
- Journaux DNS Guardian : événements de sécurité, y compris la détection de comportements suspects et les déclencheurs d'activation/désactivation
- Journaux de transfert de zone DNS : opérations et notifications de transfert de zone
- Journaux d'erreurs DNS : erreurs de format, SERVFAIL, REFUSED et autres erreurs DNS
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
| ip_version | additional.fields | Fusionné en tant que libellé avec la clé "ip_version" si elle n'est pas vide |
| message_size | additional.fields | Fusionné en tant que libellé avec la clé "message_size" si elle n'est pas vide |
| domain_name | additional.fields | Fusionné en tant que libellé avec la clé "domain_name" si elle n'est pas vide |
| N/A | intermédiaire | Fusionné à partir d'un objet intermédiaire |
| description | metadata.description | Valeur copiée directement si elle n'est pas vide |
| msg2 | metadata.description | Définissez sur msg2 si event_type est GENERIC_EVENT et que la description est vide. |
| su_cmd | metadata.event_type | Définissez sur "PROCESS_OPEN" si su_cmd est "sudo". |
| activity_type | metadata.event_type | Définissez la valeur sur "NETWORK_DNS" si activity_type correspond à dns et que has_dns_questions est défini sur "true". |
| message | metadata.event_type | Définissez sur "NETWORK_DHCP" si le message correspond à DHCP. |
| inner_message | metadata.event_type | Définissez sur "NETWORK_UNCATEGORIZED" si inner_message correspond à des modèles spécifiques et si has_principal et has_target sont définis sur "true". |
| de diffusion inverse | metadata.event_type | Définissez la valeur sur "NETWORK_DNS" si le processus est "named" et que has_dns_questions est défini sur "true". Définissez la valeur sur "STATUS_UPDATE" si le processus est "named" et que has_principal est défini sur "true". Définissez la valeur sur "GENERIC_EVENT" si le processus est "named". Définissez la valeur sur "NETWORK_DHCP" si le processus est "dhcpd". |
| PWD | metadata.event_type | Défini sur "PROCESS_OPEN" si PWD n'est pas vide et que has_target ou has_principal est défini sur "true". |
| activity_type | metadata.product_event_type | Valeur copiée directement |
| N/A | metadata.vendor_name | Défini sur "EFFICIENTIP_DDI" |
| N/A | metadata.product_name | Définissez-le sur "EFFICIENTIP_DDI DHCP". |
| activity_type | network.application_protocol | Défini sur "DNS" si activity_type correspond à dns et que has_dns_questions est défini sur "true" |
| message | network.application_protocol | Définir sur "DHCP" si le message correspond à DHCP |
| de diffusion inverse | network.application_protocol | Définissez sur "DNS" si le processus est "named", ou sur "DHCP" si le processus est "dhcpd". |
| src_mac | network.dhcp.chaddr | Valeur copiée directement si le processus est "dhcpd" |
| src_ip | network.dhcp.ciaddr | Valeur copiée directement si dhcp_info est "REQUEST" |
| giaddr | network.dhcp.giaddr | Valeur copiée directement |
| dhcp_info | network.dhcp.opcode | Définissez sur "BOOTREQUEST" si dhcp_info est "INFORM", "DISCOVER" ou "REQUEST", et sur "BOOTREPLY" si dhcp_info est "OFFER" ou "ACK". |
| siaddr | network.dhcp.siaddr | Valeur copiée directement |
| transaction_id | network.dhcp.transaction_id | Valeur convertie en uinteger si elle n'est pas vide ou égale à "0" |
| dhcp_info | network.dhcp.type | Définissez sur "INFORM" si dhcp_info est "INFORM", sur "DISCOVER" si "DISCOVER", sur "OFFER" si "OFFER", sur "REQUEST" si "REQUEST" ou sur "ACK" si "PACK". |
| yiaddr | network.dhcp.yiaddr | Valeur copiée directement |
| src_ip | network.dhcp.yiaddr | Défini sur src_ip si le processus est "dhcpd" et que yiaddr est vide |
| answer_rrs | network.dns.answers | Fusionné à partir de l'objet de réponse pour chaque RD dans answer_rrs |
| N/A | network.dns.questions | Fusionné à partir de l'objet "questions" si "has_dns_questions" est défini sur "true". |
| rcode | network.dns.response_code | Valeur convertie en uinteger |
| response_code | network.dns.response_code | Valeur mappée au code numérique et convertie en uinteger |
| transport | network.ip_protocol | Valeur en majuscules si elle correspond à "udp" ou "tcp" |
| observateur | observer.ip | Valeur convertie en adresse IP |
| su_cmd | principal.application | Valeur copiée directement si su_cmd est "sudo" |
| de diffusion inverse | principal.application | Défini sur "process" si le processus est "named" ou "dhcpd" |
| hôte | principal.asset.hostname | Valeur copiée directement si elle n'est pas vide |
| nom d'hôte | principal.asset.hostname | Valeur copiée directement si elle n'est pas vide et que l'hôte est vide |
| src_ip | principal.asset.ip | Valeur copiée directement |
| asset_id | principal.asset_id | Concaténé sous la forme "ID:" + asset_id |
| hôte | principal.hostname | Valeur copiée directement si elle n'est pas vide |
| nom d'hôte | principal.hostname | Valeur copiée directement si elle n'est pas vide et que l'hôte est vide |
| domain_name | principal.hostname | Valeur copiée directement si la description contient un nom d'hôte et que les champs "Hôte"/"Nom d'hôte" sont vides |
| src_ip | principal.ip | Valeur copiée directement si la conversion en adresse IP réussit ; extraite de la description si src_ip est vide |
| src_mac | principal.mac | Valeur copiée directement |
| src_port | principal.port | Valeur convertie en entier |
| process_id | principal.process.pid | Valeur copiée directement |
| source_user | principal.user.userid | Valeur copiée directement |
| N/A | security_result | Fusionné à partir de sec_result |
| dst_ip | target.asset.ip | Valeur copiée directement |
| file_path | target.file.full_path | Valeur copiée directement |
| dst_ip | target.hostname | Valeur copiée directement si elle n'est pas une adresse IP valide |
| hôte | target.hostname | Valeur copiée directement si inner_message correspond à des modèles spécifiques |
| dst_ip | target.ip | Valeur copiée directement |
| dst_port | target.port | Valeur convertie en entier |
| target_cmd_line | target.process.command_line | Valeur copiée directement |
| target_user | target.user.userid | Valeur copiée directement |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.