Recolha registos SFTP do VanDyke VShell

Suportado em:

Este documento explica como carregar registos SFTP do VanDyke VShell para o Google Security Operations através do Bindplane com o Syslog ou o Amazon S3 com um carregador de registos. O analisador transforma os registos não processados num formato UDM estruturado. Processa os formatos JSON e SYSLOG, extrai campos relevantes, como endereços IP, portas e detalhes de eventos, e enriquece os dados com informações contextuais, como detalhes da plataforma e gravidade da segurança.

Antes de começar

Certifique-se de que cumpre os seguintes pré-requisitos:

  • Uma instância do Google SecOps
  • Acesso privilegiado ao servidor VShell ou à consola de gestão da VanDyke
  • Para a opção 1: um anfitrião Windows 2016 ou posterior, ou Linux com systemd para o agente Bindplane
  • Para a opção 2: conta da AWS com acesso ao S3 e NXLog/Fluent Bit no servidor VShell

Opção 1: integração através do Bindplane e do Syslog

Esta opção oferece streaming de registos em tempo real com latência mínima e é recomendada para a maioria das implementações.

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado ou onde vai configurar o feed.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.

Instalação de janelas

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. Execute o seguinte comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalação adicionais

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:

    1. Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro config.yaml da seguinte forma:

    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: YOUR_CUSTOMER_ID
        endpoint: malachiteingestion-pa.googleapis.com
        # Custom log type - requires parser extension
        log_type: 'VANDYKE_SFTP'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    
    • Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
    • Substitua <customer_id> pelo ID de cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.
    • Para TCP em vez de UDP, substitua udplog por tcplog.

Reinicie o agente do Bindplane para aplicar as alterações

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o encaminhamento de Syslog no VanDyke VShell

Para o VShell no Windows

  1. Inicie sessão no painel de controlo do VShell.
  2. Aceda às definições de Registo.
  3. Configure o registo syslog remoto:
    • Ative o registo no servidor syslog remoto.
    • Endereço do servidor: introduza o endereço IP do agente do Bindplane.
    • Porta: introduza 514 (ou a porta configurada).
    • Protocolo: selecione UDP (ou TCP, se estiver configurado).
    • Grupos de mensagens: selecione Ligação, Autenticação, SFTP, FTPS, HTTPS, Erros, Avisos e Informações.
  4. Clique em Aplicar > OK.

Para o VShell no Linux/macOS

  1. Edite o ficheiro vshelld_config (normalmente /etc/vshell/vshelld_config).
  2. Configure os seguintes parâmetros:

    SyslogFacility LOG_LOCAL3
    LogLevel INFO
    
  3. Configure o syslog do seu sistema para encaminhar LOG_LOCAL3 para o agente Bindplane:

    • Editar /etc/rsyslog.conf ou /etc/syslog-ng/syslog-ng.conf.
    • Adicione: local3.* @bindplane-agent-ip:514 (para UDP) ou local3.* @@bindplane-agent-ip:514 (para TCP).
  4. Reinicie o serviço VShell e o serviço syslog:

    sudo systemctl restart vshelld
    sudo systemctl restart rsyslog
    

Opção 2: integração através do AWS S3

Esta opção é útil para ambientes que requerem o arquivo de registos ou onde o encaminhamento direto de syslog não é viável. Tenha em atenção que isto requer um remetente de registos no servidor VShell, uma vez que o AWS Lambda não consegue aceder a ficheiros no local.

Configure o contentor do AWS S3 e o IAM para o Google SecOps

  1. Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor.
  2. Guarde o nome e a região do contentor para referência futura (por exemplo, vandyke-sftp-logs).
  3. Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
  4. Selecione o utilizador criado.
  5. Selecione o separador Credenciais de segurança.
  6. Clique em Criar chave de acesso na secção Chaves de acesso.
  7. Selecione Serviço de terceiros como Exemplo de utilização.
  8. Clicar em Seguinte.
  9. Opcional: adicione uma etiqueta de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
  12. Clique em Concluído.
  13. Selecione o separador Autorizações.
  14. Clique em Adicionar autorizações na secção Políticas de autorizações.
  15. Selecione Adicionar autorizações.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise a política AmazonS3FullAccess.
  18. Selecione a política.
  19. Clicar em Seguinte.
  20. Clique em Adicionar autorizações.

Instale e configure o Log Shipper no servidor VShell

Escolha uma das seguintes opções com base no seu sistema operativo:

Opção A: usar o NXLog (Windows)

  1. Transfira e instale a NXLog Community Edition a partir de nxlog.co.
  2. Editar C:\Program Files\nxlog\conf\nxlog.conf:

    <Extension json>
        Module      xm_json
    </Extension>
    
    <Extension syslog>
        Module      xm_syslog
    </Extension>
    
    <Input vshell_log>
        Module      im_file
        File        "C:\\Program Files\\VanDyke Software\\VShell\\Log\\VShell.log"
        SavePos     TRUE
    
        <Exec>
            # Parse VShell log format
            if $raw_event =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) "(.*)"$/
            {
                $EventTime = $1;
                $Protocol = $2;
                $EventType = $3;
                $SessionID = $4;
                $ClientIP = $5;
                $ClientPort = $6;
                $Username = $7;
                $Filename = $9;
                $BytesDown = $10;
                $BytesUp = $11;
                $ServerIP = $14;
                $ServerPort = $15;
                $EventMessage = $16;
    
                # Convert to JSON
                to_json();
            }
        </Exec>
    </Input>
    
    <Output s3>
        Module      om_exec
        Command     C:\scripts\upload_to_s3.ps1
        Args        %FILEPATH%
    </Output>
    
    <Route vshell_to_s3>
        Path        vshell_log => s3
    </Route>
    
  3. Crie um script do PowerShell C:\scripts\upload_to_s3.ps1:

    param([string]$FilePath)
    
    $bucket = "vandyke-sftp-logs"
    $key = "vshell/$(Get-Date -Format 'yyyy/MM/dd/HH')/$(Get-Date -Format 'yyyyMMddHHmmss').json"
    
    # Batch logs
    $logs = Get-Content $FilePath | ConvertFrom-Json
    $jsonLines = $logs | ForEach-Object { $_ | ConvertTo-Json -Compress }
    $content = $jsonLines -join "`n"
    
    # Upload to S3
    Write-S3Object -BucketName $bucket -Key $key -Content $content -ProfileName default
    
  4. Crie um perfil de credenciais do AWS:

    Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default
    
    1. Agende a execução do script do PowerShell a cada 5 minutos através do Agendador de tarefas.

Opção B: usar o Fluent Bit (Linux)

  1. Instale o Fluent Bit:

    curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
    
  2. Configure o dispositivo /etc/fluent-bit/fluent-bit.conf:

    [SERVICE]
        Flush        5
        Daemon       On
        Log_Level    info
    
    [INPUT]
        Name              tail
        Path              /var/log/vshell/vshell.log
        Parser            vshell_parser
        Tag               vshell.*
        Refresh_Interval  5
        Mem_Buf_Limit     10MB
    
    [PARSER]
        Name        vshell_parser
        Format      regex
        Regex       ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?<protocol>\S+) (?<event_type>\S+) (?<session_id>\S+) (?<client_ip>\S+) (?<client_port>\S+) (?<username>\S+) (?<dash>\S+) (?<filename>\S+) (?<bytes_down>\S+) (?<bytes_up>\S+) (?<field1>\S+) (?<field2>\S+) (?<server_ip>\S+) (?<server_port>\S+) "(?<event_message>[^"]*)"
    
    [OUTPUT]
        Name                  s3
        Match                 vshell.*
        bucket                vandyke-sftp-logs
        region                us-east-1
        use_put_object        On
        total_file_size       5M
        upload_timeout        10s
        compression           gzip
        s3_key_format         /vshell/%Y/%m/%d/%H/%{hostname}_%{uuid}.json.gz
    
  3. Configure as credenciais da AWS:

    export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
    
  4. Inicie o Fluent Bit:

    sudo systemctl enable fluent-bit
    sudo systemctl start fluent-bit
    

Configure um feed no Google SecOps para carregar registos do VanDyke VShell

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. No campo Nome do feed, introduza um nome para o feed (por exemplo, VanDyke VShell SFTP logs).
  4. Selecione Amazon S3 V2 como o Tipo de origem.
  5. Selecione VanDyke SFTP como o Tipo de registo (personalizado).
  6. Clicar em Seguinte.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • URI do S3: s3://vandyke-sftp-logs/vshell/
    • Opções de eliminação da origem: selecione Manter (recomendado) ou a opção de eliminação de acordo com a sua preferência.
    • Idade máxima do ficheiro: inclua ficheiros modificados no último número de dias. A predefinição é 180 dias.
    • ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
    • Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
    • Espaço de nomes do recurso: o espaço de nomes do recurso.
    • Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
  8. Clicar em Seguinte.
  9. Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.

Tabela de mapeamento da UDM

Campo de registo Mapeamento do UDM Lógica
agent.id read_only_udm.observer.asset_id Concatena "filebeat:" com o valor do campo agent.id
agent.type read_only_udm.observer.application Mapeia diretamente o valor do campo agent.type
agent.version read_only_udm.observer.platform_version Mapeia diretamente o valor do campo agent.version
ecs.version read_only_udm.metadata.product_version Mapeia diretamente o valor do campo ecs.version
host.architecture read_only_udm.target.asset.hardware.cpu_platform Mapeia diretamente o valor do campo host.architecture
host.hostname read_only_udm.target.hostname Mapeia diretamente o valor do campo host.hostname
host.id read_only_udm.principal.asset_id Concatena "VANDYKE_SFTP:" com o valor do campo host.id
host.ip read_only_udm.target.ip Mapeia diretamente cada endereço IP na matriz host.ip para um campo read_only_udm.target.ip separado
host.mac read_only_udm.target.mac Mapeia diretamente cada endereço MAC na matriz host.mac para um campo read_only_udm.target.mac separado
host.os.kernel read_only_udm.target.platform_patch_level Mapeia diretamente o valor do campo host.os.kernel
host.os.platform read_only_udm.target.platform Mapeia o valor de host.os.platform para WINDOWS, LINUX, MAC ou UNKNOWN_PLATFORM com base no valor
host.os.version read_only_udm.target.platform_version Mapeia diretamente o valor do campo host.os.version
log.file.path read_only_udm.principal.process.file.full_path Mapeia diretamente o valor do campo log.file.path
logstash.collect.timestamp read_only_udm.metadata.collected_timestamp Analisa a data/hora do campo logstash.collect.timestamp e converte-a num objeto de data/hora
logstash.irm_environment read_only_udm.additional.fields.value.string_value Mapeia diretamente o valor do campo logstash.irm_environment. A chave está definida como "irm_environment"
logstash.irm_region read_only_udm.additional.fields.value.string_value Mapeia diretamente o valor do campo logstash.irm_region. A chave está definida como "irm_region"
logstash.irm_site read_only_udm.additional.fields.value.string_value Mapeia diretamente o valor do campo logstash.irm_site. A chave está definida como "irm_site"
logstash.process.host read_only_udm.observer.hostname Mapeia diretamente o valor do campo logstash.process.host
mensagem Usado para extrair vários campos através de padrões grok e expressões regulares
read_only_udm.metadata.event_type Definido como "NETWORK_FTP"
read_only_udm.metadata.log_type Definido como "VANDYKE_SFTP"
read_only_udm.metadata.product_event_type Extraído do campo de mensagem através de um padrão grok
read_only_udm.metadata.product_name Definido como "VANDYKE_SFTP"
read_only_udm.metadata.vendor_name Definido como "VANDYKE SOFTWARE"
read_only_udm.network.application_protocol Definido como "SSH" se o campo de descrição contiver "SSH2" ou "SSH". Caso contrário, é definido como "HTTP" se o campo de método corresponder aos métodos HTTP
read_only_udm.network.http.method Extraído do campo de mensagem através de um padrão grok, apenas se corresponder a métodos HTTP comuns
read_only_udm.network.http.referral_url Extraído do campo de mensagem através de um padrão grok
read_only_udm.network.http.response_code Extraído do campo de mensagem através de um padrão grok e convertido num número inteiro
read_only_udm.network.ip_protocol Definido como "TCP" se o campo de descrição contiver "TCP"
read_only_udm.principal.ip Extraído do campo de mensagem através de um padrão grok
read_only_udm.principal.port Extraído do campo de mensagem através de um padrão grok e convertido num número inteiro
read_only_udm.security_result.description Extraído do campo de mensagem através de um padrão grok
read_only_udm.security_result.severity Definido como "HIGH" se syslog_severity for "error" ou "warning", "MEDIUM" se for "notice" e "LOW" se for "information" ou "info"
read_only_udm.security_result.severity_details Mapeia diretamente o valor do campo syslog_severity
read_only_udm.target.ip Extraído do campo de mensagem através de um padrão grok
read_only_udm.target.port Extraído do campo de mensagem através de um padrão grok e convertido num número inteiro
read_only_udm.target.process.pid Extraído do campo de mensagem através de um padrão grok
syslog_severity Usado para determinar a gravidade de security_result

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.