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. O analisador transforma registros brutos em um formato UDM estruturado. Ele 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

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

  • Uma instância do Google SecOps
  • Acesso privilegiado ao servidor ou console de gerenciamento do VanDyke VShell
  • 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

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.

  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. 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.

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

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

  1. Acesse o arquivo de configuração:

    1. Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. 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 <customer_id> pelo ID do cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
    • 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 no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

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 agente 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 o 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. Isso exige um shipper 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.
  9. Opcional: adicione uma tag de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
  12. Clique em Concluído.
  13. Selecione a guia Permissões.
  14. Clique em Adicionar permissões na seção Políticas de permissões.
  15. Selecione Adicionar permissões.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise a política AmazonS3FullAccess.
  18. Selecione a política.
  19. Clique em Próxima.
  20. 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
    
    1. 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 no último número de 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".
mensagem Usado para extrair vários campos usando padrões grok e expressões regulares.
read_only_udm.metadata.event_type Defina 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.

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