Coletar registros do SFTP do VanDyke VShell

Compatível com:

Este documento explica como ingerir registros do VanDyke VShell SFTP no Google Security Operations usando o Bindplane com Syslog ou o Amazon S3 com um expedidor de registros.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Acesso privilegiado ao servidor VanDyke VShell ou ao console de gerenciamento
  • Para a opção 1: um host Windows 2016 ou mais recente ou Linux com systemd para o agente do Bindplane
  • Para a Opção 2: conta da AWS com acesso ao S3 e NXLog/Fluent Bit no servidor VShell

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Baixe o arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o Bindplane será instalado ou em que você vai configurar o feed.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Opção 1: integração via Bindplane e Syslog

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

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

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este 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 root ou sudo.
  2. Execute este comando:

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

Outros recursos de instalação

Para mais opções de instalação, consulte o guia de instalação do agente do Bindplane.

Configurar o agente do BindPlane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:

    • Localize o arquivo config.yaml. Normalmente, ele fica no diretório /opt/observiq-otel-collector/ no Linux ou no diretório de instalação no Windows.
    • Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. Edite o arquivo 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 YOUR_CUSTOMER_ID pelo ID de cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho do arquivo em que o arquivo de autenticação foi salvo.
    • Para TCP em vez de UDP, substitua udplog por tcplog.

Reinicie o agente do Bindplane para aplicar as mudanças

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

    sudo systemctl restart observiq-otel-collector
    
  • Para reiniciar o agente do Bindplane em Windows, use o console Serviços ou digite o seguinte comando:

    net stop observiq-otel-collector && net start observiq-otel-collector
    

Configurar o encaminhamento de syslog no VanDyke VShell

Para VShell no Windows

  1. Faça login no Painel de controle do VShell.
  2. Acesse as configurações de Registro em log.
  3. Configurar o registro syslog remoto:
    • Ative o registro em um servidor syslog remoto.
    • Endereço do servidor: insira o endereço IP do Bindplane.
    • Porta: digite 514 ou a porta configurada.
    • Protocolo: selecione UDP (ou TCP, se configurado).
    • Grupos de mensagens: selecione Conexão, Autenticação, SFTP, FTPS, HTTPS, Erros, Avisos e Informativo.
  4. Clique em Aplicar > OK.

Para VShell no Linux/macOS

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

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

    • Edite /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 os serviços VShell e syslog:

    sudo systemctl restart vshelld
    sudo systemctl restart rsyslog
    

Opção 2: integração via AWS S3

Essa opção é útil para ambientes que exigem arquivamento de registros ou em que o encaminhamento direto do syslog não é viável. Observação: isso exige um expedidor de registros no servidor VShell, já que o AWS Lambda não pode acessar arquivos locais.

Configurar o bucket do AWS S3 e o IAM para o Google SecOps

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket
  2. Salve o Nome e a Região do bucket para referência futura (por exemplo, vandyke-sftp-logs).
  3. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  4. Selecione o usuário criado.
  5. Selecione a guia Credenciais de segurança.
  6. Clique em Criar chave de acesso na seção Chaves de acesso.
  7. Selecione Serviço de terceiros como Caso de uso.
  8. Clique em Próxima.
    • Opcional: adicione uma tag de descrição.
  9. Clique em Criar chave de acesso.
  10. Clique em Baixar arquivo .csv para salvar a Chave de acesso e a Chave de acesso secreta para referência futura.
  11. Clique em Concluído.
  12. Selecione a guia Permissões.
  13. Clique em Adicionar permissões na seção Políticas de permissões.
  14. Selecione Adicionar permissões.
  15. Selecione Anexar políticas diretamente.
  16. Pesquise a política AmazonS3FullAccess.
  17. Selecione a política.
  18. Clique em Próxima.
  19. Clique em Adicionar permissões

Instalar e configurar o Log Shipper no servidor VShell

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

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

  1. Faça o download e instale o NXLog Community Edition em 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 o 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 da AWS:

    Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default
    
  5. Programe o script do PowerShell para ser executado a cada 5 minutos usando o 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. Configurar /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
    

Configurar um feed no Google SecOps para ingerir registros do VanDyke VShell

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em + Adicionar novo feed.
  3. No campo Nome do feed, insira 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 registro (personalizado).
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • URI do S3: s3://vandyke-sftp-logs/vshell/
    • Opções de exclusão de origem: selecione Manter (recomendado) ou a opção de exclusão de acordo com sua preferência.
    • Idade máxima do arquivo: inclui arquivos modificados nos últimos dias. O padrão é de 180 dias.
    • ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
    • Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
  8. Clique em Próxima.
  9. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro 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 o carimbo de data/hora do campo logstash.collect.timestamp e o converte em um objeto de carimbo 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 é 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 é 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 é definida como "irm_site".
logstash.process.host read_only_udm.observer.hostname Mapeia diretamente o valor do campo "logstash.process.host".
message Usado para extrair vários campos usando 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 usando 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, será definido como "HTTP" se o campo de método corresponder a métodos HTTP.
read_only_udm.network.http.method Extraído do campo "message" usando um padrão grok, somente se corresponder a métodos HTTP comuns.
read_only_udm.network.http.referral_url Extraído do campo de mensagem usando um padrão grok
read_only_udm.network.http.response_code Extraído do campo de mensagem usando um padrão grok e convertido em um 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 usando um padrão grok
read_only_udm.principal.port Extraído do campo de mensagem usando um padrão grok e convertido em um número inteiro
read_only_udm.security_result.description Extraído do campo de mensagem usando 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 usando um padrão grok
read_only_udm.target.port Extraído do campo de mensagem usando um padrão grok e convertido em um número inteiro
read_only_udm.target.process.pid Extraído do campo de mensagem usando um padrão grok
syslog_severity Usado para determinar a gravidade do security_result.

Registro de alterações

Ver o registro de alterações deste analisador

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