Coletar registros do ManageEngine ADManager Plus
Este documento explica como ingerir registros do ManageEngine ADManager Plus no Google Security Operations usando o agente Bindplane.
O ManageEngine ADManager Plus oferece uma solução baseada na Web para gerenciamento simplificado do AD, incluindo criação e modificação de usuários, segurança baseada em função e relatórios detalhados. A integração do ADManager Plus com servidores Splunk e Syslog permite que as organizações encaminhem registros de todas as ações de gerenciamento do Active Directory, do Microsoft 365 e do Google Workspace realizadas no ADManager Plus.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Windows Server 2016 ou mais recente ou host Linux com
systemd - Conectividade de rede entre o agente do Bindplane e o ManageEngine ADManager Plus
- Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
- Acesso privilegiado ao console de gerenciamento do ManageEngine ADManager Plus.
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Clique em Fazer o download para baixar o arquivo de autenticação de ingestão.
Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.
Instalação do Windows
- Abra o prompt de comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quietAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sc query observiq-otel-collector
O serviço vai aparecer como EM EXECUÇÃO.
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/releases/latest/download/install_unix.sh)" install_unix.shAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sudo systemctl status observiq-otel-collector
O serviço vai aparecer como ativo (em execução).
Outros recursos de instalação
Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.
Configurar o agente do Bindplane para ingerir syslog e enviar ao Google SecOps
Localizar o arquivo de configuração
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de
config.yamlpela seguinte configuração: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_plusSubstitua os seguintes marcadores de posição:
Configuração do receptor:
- O receptor usa
tcplogpara receber dados syslog na porta TCP 514. listen_address: defina como0.0.0.0:514para detectar todas as interfaces na porta 514.
- O receptor usa
Configuração do exportador:
<CREDS_FILE_PATH>: caminho completo para o arquivo de autenticação de ingestão:- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
- Linux:
<CUSTOMER_ID>: ID do cliente da etapa anterior.endpoint: URL do endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte a lista completa em Endpoints regionais.
- EUA:
log_type: defina comoADMANAGER_PLUSexatamente como aparece no Chronicle.ingestion_labels: rótulos opcionais no formato YAML.
Salvar o arquivo de configuração
Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
Reinicie o agente do Bindplane para aplicar as mudanças
Linux
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart observiq-otel-collectorVerifique se o serviço está em execução:
sudo systemctl status observiq-otel-collectorVerifique se há erros nos registros:
sudo journalctl -u observiq-otel-collector -f
Windows
Para reiniciar o agente do Bindplane em Windows, escolha uma das seguintes opções:
Usando o prompt de comando ou o PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorUsando o console do Services:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize a Distribuição da observIQ para o coletor do OpenTelemetry.
- Clique com o botão direito do mouse e selecione Reiniciar.
- Pressione
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurar o encaminhamento de syslog do ManageEngine ADManager Plus
- Faça login no ADManager Plus.
- Acesse a guia Administrador.
- Em Configurações do sistema, clique em Integrações.
Em Encaminhamento de registros, clique em Syslog.
Configure os seguintes campos:
- Servidor Syslog: insira o nome do servidor Syslog. Insira o endereço IP ou o nome do host do host do agente do Bindplane.
- Porta: digite o número da porta. Insira
514. - Protocolo: escolha o protocolo adequado, TCP ou UDP, para encaminhar os registros. Selecione TCP.
- Padrão Syslog: selecione o formato de mensagem syslog desejado, RFC 3164, RFC 5424 ou RawLog. Selecione RFC 5424 (recomendado).
- Formato de dados: insira o formato de dados. Configure o formato de dados conforme necessário para seu ambiente.
Clique em Salvar para salvar a configuração.
Após a configuração, o ADManager Plus começa a encaminhar registros de ações de gerenciamento para o agente do Bindplane, que os envia ao Google SecOps.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| ipPhone | event.idm.read_only_udm.additional.fields | Unidos como rótulo com a chave "ipPhone" e o valor de ipPhone se ipPhone != "" |
| l | event.idm.read_only_udm.additional.fields | Mesclado como rótulo com a chave "l" e o valor de l se l != "" |
| lockoutTime | event.idm.read_only_udm.additional.fields | Unido como rótulo com a chave "lockoutTime" e o valor de lockoutTime se lockoutTime != "" |
| Mover de | event.idm.read_only_udm.additional.fields | Mesclado como rótulo com a chave "Move From" e o valor de Move_From se Move_From != "" |
| Mover para | event.idm.read_only_udm.additional.fields | Mesclado como rótulo com a chave "Mover para" e o valor de Move_To se Move_To != "" |
| msg | event.idm.read_only_udm.additional.fields | Unido como rótulo com a chave "member" e o valor de msg se msg != "" |
| sn | event.idm.read_only_udm.additional.fields | Mesclado como rótulo com a chave "sn" e o valor de sn se sn != "" |
| st | event.idm.read_only_udm.additional.fields | Unido como rótulo com a chave "st" e o valor de st se st != "" |
| Nome do modelo | event.idm.read_only_udm.additional.fields | Mesclado como rótulo com a chave "Nome do modelo" e o valor de Template_Name se Template_Name != "" |
| Status | event.idm.read_only_udm.metadata.description | Valor extraído de "Status" se "Status" != "" |
| tempo | event.idm.read_only_udm.metadata.event_timestamp | Convertido do formato de hora para carimbo de data/hora se hora != "" |
| event.idm.read_only_udm.metadata.event_type | Derivada: se has_principal_user == "true", então "USER_UNCATEGORIZED"; caso contrário, se has_principal == "true", então "STATUS_UPDATE"; caso contrário, "GENERIC_EVENT" | |
| TechnicianName | event.idm.read_only_udm.metadata.product_event_type | Valor extraído de TechnicianName se TechnicianName != "" |
| event.idm.read_only_udm.metadata.product_name | Definido como "ADMANAGER_PLUS" | |
| event.idm.read_only_udm.metadata.vendor_name | Definido como "ADMANAGER_PLUS" | |
| Nome do domínio | event.idm.read_only_udm.principal.administrative_domain | Valor extraído de Domain_Name se Domain_Name != "" |
| nome do host | event.idm.read_only_udm.principal.asset.hostname | Valor extraído do nome do host se hostname != "" |
| carta | event.idm.read_only_udm.principal.email | Valor extraído do e-mail se mail != "" |
| nome do host | event.idm.read_only_udm.principal.hostname | Valor extraído do nome do host se hostname != "" |
| co | event.idm.read_only_udm.principal.location.city | Valor extraído de co se co != "" |
| Tarefa | event.idm.read_only_udm.principal.resource.name | Valor extraído da tarefa se Task != "" |
| wWWHomePage | event.idm.read_only_udm.principal.url | Valor extraído de wWWHomePage se wWWHomePage != "" |
| Tipo de senha | event.idm.read_only_udm.principal.user.attribute.labels | Mesclado como rótulo com a chave "Password Type" e o valor de Password_Type se Password_Type != "" |
| Código do país | event.idm.read_only_udm.principal.user.attribute.labels | Mesclado como rótulo com a chave "countryCode" e o valor de countryCode se countryCode != "" |
| senha | event.idm.read_only_udm.principal.user.attribute.labels | Unido como rótulo com a chave "password" e o valor da senha se password != "" |
| postalCode | event.idm.read_only_udm.principal.user.attribute.labels | Unido como um rótulo com a chave "postalCode" e o valor de "postalCode" se "postalCode" != "" |
| primaryGroupID | event.idm.read_only_udm.principal.user.attribute.labels | Mesclado como rótulo com a chave "primaryGroupID" e o valor de primaryGroupID se primaryGroupID != "" |
| userAccountControl | event.idm.read_only_udm.principal.user.attribute.labels | Mesclado como um rótulo com a chave "userAccountControl" e o valor de userAccountControl se userAccountControl != "" |
| userPrincipalName | event.idm.read_only_udm.principal.user.attribute.labels | Mesclado como um rótulo com a chave "userPrincipalName" e o valor de userPrincipalName se userPrincipalName != "" |
| company | event.idm.read_only_udm.principal.user.company_name | Valor extraído da empresa se "empresa" != "" |
| departamento | event.idm.read_only_udm.principal.user.department | Unido ao departamento se department != "" |
| givenName | event.idm.read_only_udm.principal.user.first_name | Valor extraído de givenName se givenName != "" |
| physicalDeliveryOfficeName | event.idm.read_only_udm.principal.user.office_address.name | Valor extraído de physicalDeliveryOfficeName se physicalDeliveryOfficeName != "" |
| streetAddress | event.idm.read_only_udm.principal.user.personal_address.name | Valor extraído de streetAddress se streetAddress != "" |
| homePhone | event.idm.read_only_udm.principal.user.phone_numbers | Mesclado com homePhone se homePhone != "" |
| Nome do usuário | event.idm.read_only_udm.principal.user.user_display_name | Valor extraído de User_Name se User_Name != ""; caso contrário, de Object_Name se Object_Name != "" |
| sAMAccountName | event.idm.read_only_udm.principal.user.userid | Valor extraído de sAMAccountName se sAMAccountName != "" |
| AÇÃO | event.idm.read_only_udm.security_result.action_details | Valor extraído de ACTION se ACTION != "" |
| descrição | event.idm.read_only_udm.security_result.description | Valor extraído da descrição se description != "" |
| Nome do contêiner | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok container_Name: mesclado como rótulo com a chave "Container_Name_DC_value1" e valor de dc_label_1 se dc_label_1 != "" |
| Nome do contêiner | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok container_Name: mesclado como rótulo com a chave "Container_Name_DC_value2" e valor de dc_label_2 se dc_label_2 != "" |
| Nome do contêiner | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok container_Name: mesclado como rótulo com a chave "Container_Name_OU_value1" e valor de ou_label_1 se ou_label_1 != "" |
| Nome do contêiner | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok container_Name: mesclado como um rótulo com a chave "Container_Name_OU_value2" e o valor de ou_label_2 se ou_label_2 != "" |
| Nome do contêiner | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok container_Name: mesclado como rótulo com a chave "Container_Name_OU_value3" e valor de ou_label_3 se ou_label_3 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Derivado de Primary_Group grok: mesclado como rótulo com a chave "Primary_Group_CN_value1" e valor de cn_label_1 se cn_label_1 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Derivado de Primary_Group grok: mesclado como rótulo com a chave "Primary_Group_CN_value2" e valor de cn_label_2 se cn_label_2 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok Primary_Group: mesclado como rótulo com a chave "Primary_Group_DC_value1" e valor de primary_dc_label_1 se primary_dc_label_1 != "" |
| Grupo principal | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok Primary_Group: mesclado como rótulo com a chave "Primary_Group_DC_value2" e valor de primary_dc_label_2 se primary_dc_label_2 != "" |
| accountExpires | event.idm.read_only_udm.security_result.detection_fields | Mesclado como rótulo com a chave "accountExpires" e o valor de accountExpires se accountExpires != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Derivado de manager grok: mesclado como rótulo com a chave "manager_cn_value1" e o valor de manager_cn_value1 se manager_cn_value1 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Derivado de "grok do gerente": mesclado como rótulo com a chave "manager_dc_value1" e o valor de manager_dc_value1 se manager_dc_value1 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok do gerente: mesclado como rótulo com a chave "manager_dc_value2" e o valor de manager_dc_value2 se manager_dc_value2 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Derivado de "manager grok": mesclado como rótulo com a chave "manager_ou_value1" e o valor de manager_ou_value1 se manager_ou_value1 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Derivado de manager grok: mesclado como rótulo com a chave "manager_ou_value2" e valor de manager_ou_value2 se manager_ou_value2 != "" |
| administrador | event.idm.read_only_udm.security_result.detection_fields | Derivado do grok do gerente: mesclado como um rótulo com a chave "manager_ou_value3" e o valor de manager_ou_value3 se manager_ou_value3 != "" |
| pwdLastSet | event.idm.read_only_udm.security_result.detection_fields | Mesclado como rótulo com a chave "pwdLastSet" e o valor de pwdLastSet se pwdLastSet != "" |
| ModuleName | event.idm.read_only_udm.target.resource.name | Valor extraído de ModuleName se ModuleName != "" |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.