Raccogliere i log di ManageEngine ADManager Plus

Supportato in:

Questo documento spiega come importare i log di ManageEngine ADManager Plus in Google Security Operations utilizzando l'agente Bindplane.

ManageEngine ADManager Plus offre una soluzione basata sul web per la gestione semplificata di AD, inclusi la creazione e la modifica degli utenti, la sicurezza basata sui ruoli e report dettagliati. L'integrazione di ADManager Plus con i server Splunk e Syslog consente alle organizzazioni di inoltrare i log di tutte le azioni di gestione di Active Directory, Microsoft 365 e Google Workspace eseguite in ADManager Plus.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows Server 2016 o versioni successive oppure host Linux con systemd
  • Connettività di rete tra l'agente Bindplane e ManageEngine ADManager Plus
  • Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
  • Accesso privilegiato alla console di gestione di ManageEngine ADManager Plus

Recuperare il file di autenticazione dell'importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Fai clic su Scarica per scaricare il file di autenticazione dell'importazione.
  4. Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.

Recuperare l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di finestre

  1. Apri Prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo il comando:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.

Installazione di Linux

  1. Apri un terminale con privilegi di root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo il comando:

    sudo systemctl status observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la Guida all'installazione dell'agente Bindplane.

Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps

Individua il file di configurazione

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifica il file di configurazione

  1. Sostituisci l'intero contenuto di config.yaml con la seguente configurazione:

    receivers:
      tcplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/admanager_plus:
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: ADMANAGER_PLUS
        raw_log_field: body
        ingestion_labels:
          log_source: admanager_plus
    
    service:
      pipelines:
        logs/admanager_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/admanager_plus
    
  2. Sostituisci i seguenti segnaposto:

    • Configurazione del ricevitore:

      • Il ricevitore utilizza tcplog per ricevere i dati syslog sulla porta TCP 514.
      • listen_address: impostalo su 0.0.0.0:514 per ascoltare tutte le interfacce sulla porta 514.
    • Configurazione dell'esportatore:

      • <CREDS_FILE_PATH>: percorso completo del file di autenticazione importazione:
        • Linux: /opt/observiq-otel-collector/ingestion-auth.json
        • Windows: C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
      • <CUSTOMER_ID>: l'ID cliente del passaggio precedente.
      • endpoint: URL endpoint regionale:
        • Stati Uniti: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
        • Per un elenco completo, vedi Endpoint regionali.
      • log_type: imposta su ADMANAGER_PLUS esattamente come appare in Chronicle.
      • ingestion_labels: etichette facoltative in formato YAML.

Salvare il file di configurazione

Dopo la modifica, salva il file:

  • Linux: premi Ctrl+O, poi Enter e infine Ctrl+X.
  • Windows: fai clic su File > Salva.

Riavvia l'agente Bindplane per applicare le modifiche

Linux

  1. Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart observiq-otel-collector
    
  2. Verifica che il servizio sia in esecuzione:

    sudo systemctl status observiq-otel-collector
    
  3. Controlla i log per individuare eventuali errori:

    sudo journalctl -u observiq-otel-collector -f
    

Windows

  1. Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:

    • Utilizzando il prompt dei comandi o PowerShell come amministratore:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Utilizzo della console Services:

      1. Premi Win+R, digita services.msc e premi Invio.
      2. Individua observIQ Distro for OpenTelemetry Collector.
      3. Fai clic con il tasto destro del mouse e seleziona Riavvia.
  2. Verifica che il servizio sia in esecuzione:

    sc query observiq-otel-collector
    
  3. Controlla i log per individuare eventuali errori:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

Configurare l'inoltro di syslog di ManageEngine ADManager Plus

  1. Accedi ad ADManager Plus.
  2. Vai alla scheda Amministrazione.
  3. Nella sezione System Settings (Impostazioni di sistema), fai clic su Integrations (Integrazioni).
  4. In Log Forwarding, fai clic su Syslog.

  5. Configura i seguenti campi:

    • Server Syslog: inserisci il nome del server Syslog. Inserisci l'indirizzo IP o il nome host dell'host dell'agente Bindplane.
    • Porta: inserisci il numero di porta. Inserisci 514.
    • Protocollo: scegli il protocollo appropriato, TCP o UDP, per l'inoltro dei log. Seleziona TCP.
    • Standard Syslog: seleziona il formato del messaggio syslog che preferisci, RFC 3164, RFC 5424 o RawLog. Seleziona RFC 5424 (opzione consigliata).
    • Formato dei dati: inserisci il formato dei dati. Configura il formato dei dati in base alle esigenze del tuo ambiente.
  6. Fai clic su Salva per salvare la configurazione.

Dopo la configurazione, ADManager Plus inizierà a inoltrare i log delle azioni di gestione all'agente Bindplane, che a sua volta li invierà a Google SecOps.

Tabella di mappatura UDM

Campo log Mappatura UDM Funzione logica
ipPhone event.idm.read_only_udm.additional.fields Unito come etichetta con la chiave "ipPhone" e il valore di ipPhone se ipPhone != ""
l event.idm.read_only_udm.additional.fields Unito come etichetta con chiave "l" e valore da l se l != ""
lockoutTime event.idm.read_only_udm.additional.fields Unito come etichetta con la chiave "lockoutTime" e il valore di lockoutTime se lockoutTime != ""
Sposta da event.idm.read_only_udm.additional.fields Unito come etichetta con la chiave "Sposta da" e il valore di Move_From se Move_From != ""
Sposta in event.idm.read_only_udm.additional.fields Unito come etichetta con la chiave "Sposta in" e il valore di Move_To se Move_To != ""
msg event.idm.read_only_udm.additional.fields Unito come etichetta con la chiave "member" e il valore di msg se msg != ""
sn event.idm.read_only_udm.additional.fields Unito come etichetta con chiave "sn" e valore da sn se sn != ""
st event.idm.read_only_udm.additional.fields Unito come etichetta con la chiave "st" e il valore di st se st != ""
Nome modello event.idm.read_only_udm.additional.fields Unito come etichetta con la chiave "Nome modello" e il valore di Template_Name se Template_Name != ""
Stato event.idm.read_only_udm.metadata.description Valore estratto da Stato se Stato != ""
tempo event.idm.read_only_udm.metadata.event_timestamp Convertito dal formato ora al formato timestamp se ora != ""
event.idm.read_only_udm.metadata.event_type Derivato: se has_principal_user == "true" allora "USER_UNCATEGORIZED"; altrimenti se has_principal == "true" allora "STATUS_UPDATE"; altrimenti "GENERIC_EVENT"
TechnicianName event.idm.read_only_udm.metadata.product_event_type Valore estratto da TechnicianName se TechnicianName != ""
event.idm.read_only_udm.metadata.product_name Imposta su "ADMANAGER_PLUS"
event.idm.read_only_udm.metadata.vendor_name Imposta su "ADMANAGER_PLUS"
Nome di dominio event.idm.read_only_udm.principal.administrative_domain Valore estratto da Domain_Name se Domain_Name != ""
nome host event.idm.read_only_udm.principal.asset.hostname Valore preso dal nome host se hostname != ""
mail event.idm.read_only_udm.principal.email Valore tratto dalla posta se mail != ""
nome host event.idm.read_only_udm.principal.hostname Valore preso dal nome host se hostname != ""
co event.idm.read_only_udm.principal.location.city Valore estratto da co se co != ""
Attività event.idm.read_only_udm.principal.resource.name Valore estratto dall'attività se Task != ""
wWWHomePage event.idm.read_only_udm.principal.url Valore tratto da wWWHomePage se wWWHomePage != ""
Tipo di password event.idm.read_only_udm.principal.user.attribute.labels Unito come etichetta con la chiave "Password Type" e il valore di Password_Type se Password_Type != ""
Codice Paese event.idm.read_only_udm.principal.user.attribute.labels Unito come etichetta con la chiave "countryCode" e il valore di countryCode se countryCode != ""
password event.idm.read_only_udm.principal.user.attribute.labels Unita come etichetta con la chiave "password" e il valore della password se password != ""
postalCode event.idm.read_only_udm.principal.user.attribute.labels Unito come etichetta con la chiave "postalCode" e il valore di postalCode se postalCode != ""
primaryGroupID event.idm.read_only_udm.principal.user.attribute.labels Unito come etichetta con la chiave "primaryGroupID" e il valore di primaryGroupID se primaryGroupID != ""
userAccountControl event.idm.read_only_udm.principal.user.attribute.labels Unito come etichetta con la chiave "userAccountControl" e il valore di userAccountControl se userAccountControl != ""
userPrincipalName event.idm.read_only_udm.principal.user.attribute.labels Unito come etichetta con la chiave "userPrincipalName" e il valore di userPrincipalName se userPrincipalName != ""
company event.idm.read_only_udm.principal.user.company_name Valore tratto dall'azienda se azienda != ""
reparto event.idm.read_only_udm.principal.user.department Unito al reparto se reparto != ""
givenName event.idm.read_only_udm.principal.user.first_name Valore estratto da givenName se givenName != ""
physicalDeliveryOfficeName event.idm.read_only_udm.principal.user.office_address.name Valore tratto da physicalDeliveryOfficeName se physicalDeliveryOfficeName != ""
streetAddress event.idm.read_only_udm.principal.user.personal_address.name Valore estratto da streetAddress se streetAddress != ""
homePhone event.idm.read_only_udm.principal.user.phone_numbers Unito a homePhone se homePhone != ""
Nome utente event.idm.read_only_udm.principal.user.user_display_name Valore tratto da User_Name se User_Name != ""; altrimenti da Object_Name se Object_Name != ""
sAMAccountName event.idm.read_only_udm.principal.user.userid Valore tratto da sAMAccountName se sAMAccountName != ""
AZIONE event.idm.read_only_udm.security_result.action_details Valore estratto da ACTION se ACTION != ""
descrizione event.idm.read_only_udm.security_result.description Valore tratto dalla descrizione se description != ""
Nome container event.idm.read_only_udm.security_result.detection_fields Derivato da grok container_Name: unito come etichetta con chiave "Container_Name_DC_value1" e valore da dc_label_1 se dc_label_1 != ""
Nome container event.idm.read_only_udm.security_result.detection_fields Derivato da container_Name grok: unito come etichetta con la chiave "Container_Name_DC_value2" e il valore di dc_label_2 se dc_label_2 != ""
Nome container event.idm.read_only_udm.security_result.detection_fields Derivato da container_Name grok: unito come etichetta con chiave "Container_Name_OU_value1" e valore da ou_label_1 se ou_label_1 != ""
Nome container event.idm.read_only_udm.security_result.detection_fields Derivato da container_Name grok: unito come etichetta con la chiave "Container_Name_OU_value2" e il valore di ou_label_2 se ou_label_2 != ""
Nome container event.idm.read_only_udm.security_result.detection_fields Derivato da container_Name grok: unito come etichetta con la chiave "Container_Name_OU_value3" e il valore di ou_label_3 se ou_label_3 != ""
Gruppo principale event.idm.read_only_udm.security_result.detection_fields Derivato da Primary_Group grok: unito come etichetta con la chiave "Primary_Group_CN_value1" e il valore di cn_label_1 se cn_label_1 != ""
Gruppo principale event.idm.read_only_udm.security_result.detection_fields Derivato da Primary_Group grok: unito come etichetta con la chiave "Primary_Group_CN_value2" e il valore di cn_label_2 se cn_label_2 != ""
Gruppo principale event.idm.read_only_udm.security_result.detection_fields Derivato da Primary_Group grok: unito come etichetta con la chiave "Primary_Group_DC_value1" e il valore di primary_dc_label_1 se primary_dc_label_1 != ""
Gruppo principale event.idm.read_only_udm.security_result.detection_fields Derivato da Primary_Group grok: unito come etichetta con la chiave "Primary_Group_DC_value2" e il valore di primary_dc_label_2 se primary_dc_label_2 != ""
accountExpires event.idm.read_only_udm.security_result.detection_fields Unito come etichetta con la chiave "accountExpires" e il valore di accountExpires se accountExpires != ""
gestore event.idm.read_only_udm.security_result.detection_fields Derivato da manager grok: unito come etichetta con la chiave "manager_cn_value1" e il valore di manager_cn_value1 se manager_cn_value1 != ""
gestore event.idm.read_only_udm.security_result.detection_fields Derivato da manager grok: unito come etichetta con la chiave "manager_dc_value1" e il valore di manager_dc_value1 se manager_dc_value1 != ""
gestore event.idm.read_only_udm.security_result.detection_fields Derivato da manager grok: unito come etichetta con la chiave "manager_dc_value2" e il valore di manager_dc_value2 se manager_dc_value2 != ""
gestore event.idm.read_only_udm.security_result.detection_fields Derivato da manager grok: unito come etichetta con la chiave "manager_ou_value1" e il valore di manager_ou_value1 se manager_ou_value1 != ""
gestore event.idm.read_only_udm.security_result.detection_fields Derivato da manager grok: unito come etichetta con la chiave "manager_ou_value2" e il valore di manager_ou_value2 se manager_ou_value2 != ""
gestore event.idm.read_only_udm.security_result.detection_fields Derivato da manager grok: unito come etichetta con la chiave "manager_ou_value3" e il valore di manager_ou_value3 se manager_ou_value3 != ""
pwdLastSet event.idm.read_only_udm.security_result.detection_fields Unito come etichetta con la chiave "pwdLastSet" e il valore di pwdLastSet se pwdLastSet != ""
ModuleName event.idm.read_only_udm.target.resource.name Valore estratto da ModuleName se ModuleName != ""

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.