Utilize o Universal Feed do InfoSphere Guardium para Criar uma Solução Customizada de Monitoramento de Atividades de Dados, Parte 1: Crie um feed para uma fonte de banco de dados

Novos bancos de dados e aplicativos continuam sendo criados e adotados para atender às necessidades organizacionais específicas. O requisito para os recursos de proteção de dados e de auditoria é exigido por mandato e é mais essencial do que nunca. A solução de proteção de dados do InfoSphere® Guardium® é extensível para permitir a integração de uma ampla variedade de novos bancos de dados e fontes a essa plataforma, oferecendo, assim, uma solução corporativa de monitoramento consistente. Este artigo fornece um exemplo de como utilizar o recurso Universal Feed no InfoSphere Guardium para integrar eventos de log e de segurança a partir de uma fonte de banco de dados para um sistema externo, assegurando a separação de obrigações.

Joe DiPietro, IBM InfoSphere Data Governance Center of Excellence Leader, IBM

Author photo of Joe DiPietroJoe DiPietro é líder do Centro de Excelência do IBM InfoSphere Data Governance. Joe possui mais de 25 anos de experiência em design e implementação de segurança e redes. Antes da IBM e do Guardium, ele trabalhou com o software Check Point, pioneiro em segurança, por mais de oito anos. Antes disso, DiPietro era engenheiro de sistemas corporativos da SynOptics Communications e membro do World Wide Technical Counsel (WWTC) da empresa. Joe possui mestrado em Ciência da Computação e bacharelado em Engenharia Mecânica.



16/Nov/2012

Introdução

O InfoSphere Guardium oferece uma solução abrangente de proteção e monitoramento de atividades de dados e inclui suporte a uma ampla variedade de bancos de dados, compartilhamentos de arquivo e outros sistemas, como o Hadoop e o Microsoft Sharepoint. Na maioria dos casos, a solução depende de análises de softwares leves (denominados S-TAPs) para monitorar transações, incluindo as de usuários privilegiados. A atividade monitorada é enviada ao dispositivo InfoSphere Guardium e armazenada em seu banco de dados interno. As informações podem ser utilizadas para relatório de auditoria, alertas em tempo real, entre outros.

O importante para a segurança e os logs de evento é desenvolvê-las no banco de dados ou na transação do aplicativo e armazená-las externamente nesses sistemas para assegurar a separação de obrigação. Com o InfoSphere Guardium, os dados do evento são enviados para um dispositivo seguro, denominado coletor, e armazenados em um banco de dados externo para relatórios e alertas. Com o recurso Universal Feed incluído no InfoSphere Guardium, é possível integrar dados de auditoria relacionados (talvez para bancos de dados ou outra atividade não suportada pelo Guardium) ao seu ambiente de Data Activity Monitoring (DAM) enviando-os ao coletor e armazenando-os nas tabelas internas.

O Universal Feed apresenta as opções a seguir para suportar diferentes tipos de monitoramento de atividade.

  • A primeira, descrita neste artigo, é voltada para a atividade que pode ser facilmente integrada às tabelas internas do InfoSphere Guardium. Isso normalmente significaria algum tipo de fonte de banco de dados, já que o InfoSphere Guardium é especialista em suporte para a atividade do banco de dados. Para mais informações sobre as entidades e os atributos do sistema InfoSphere Guardium, consulte o anexo de ajuda do produto sobre esse assunto. O código de amostra incluído neste artigo oferece um log de banco de dados simulado que será enviado ao dispositivo Guardium.
  • A outra opção, descrita na Parte 2 desta série de artigos, possibilita a integração de qualquer atividade de origem de dados arbitrária permitindo a criação de sua própria estrutura de tabela no banco de dados do Guardium para armazenar as mensagens enviadas por seu feed. Nesse artigo, mostraremos como criar um feed para um log de SSH.

Os benefícios a seguir são obtidos ao utilizar o Universal Feed para armazenar os dados de auditoria do dispositivo real que está sendo monitorado.

  • As informações de auditoria e de log não podem ser apagadas para ocultar violações ilegais ao dispositivo.
  • A separação de obrigação pode ser mantida para assegurar que as informações de auditoria corretas sejam capturadas.
  • Usuários privilegiados não têm acesso aos logs de auditoria caso eles tenham decidido violar ou alterar essas informações.

O agente Universal Feed enviará informações ao dispositivo Guardium, como mostra a Figura 1.

Figura 1. Visão geral do universal feed
Visão geral do universal feed

O ponto vermelho representa o agente Universal Feed que está sendo executado no host e que será utilizado para enviar informações de auditoria ao dispositivo Guardium. Este artigo e o código de amostra incluído devem ajudar no desenvolvimento de seu próprio agente.

A Tabela 1 destaca o que o desenvolvedor de um agente universal feed é responsável por fornecer.

Tablela 1. Responsabilidades do universal feed
Desenvolvedor do Universal FeedInfoSphere Guardium
Identificando as informações de auditoria adequadas. Fornecendo APIs e o código de amostra para ajudar os desenvolvedores do Universal Feed.
Utilize o protocolo de mensagem para empacotar as informações a serem enviadas ao dispositivo Guardium.Recebendo as informações que possibilitam que esses dados sejam utilizados pela infraestrutura do Guardium (relatório, alerta, distribuição de relatório, entre outros).

Requisitos do agente

O primeiro aspecto na codificação do agente do Universal Feed é entender seus requisitos. São eles:

  • Para testar e executar seu feed, é necessário um dispositivo InfoSphere Guardium com um nível mínimo de V9.0.
  • O agente deve utilizar o formato de mensagem do Guardium para enviar e receber informações a serem processadas nas tabelas internas do Guardium. O formato de mensagem mostrado na Figura 1 é para um agente Universal Feed de tipo de banco de dados, conforme indicado pelo "0" no campo Vendor. O número 10001 ou superior representa uma implementação que não é de banco de dados e será descrito na Parte 2 desta série de artigos.
    Lista 1. Formato de mensagem do Guardium para uma origem de dados
    struct sqlguard_msg {
    unsigned char msg_type;	    // Must be 'G'
        unsigned char pad;	    // Must be 0
        unsigned short data_len;// Length of  data in the "data" fields, network order
        uint32_t mark;		    //
        uint32_t timestamp;	    // Time in UNIX format (retval of time() syscall)
        uint32_t protocol_version;  // Must be 7
        uint32_t vendor;	    // Must be 0
        char identification[40];    // Must be all 0
        char data[MAX_DATA_LEN];    // Put the serialized protobuf message here
    };

    Há dois fluxos de direção para essas mensagens:
    • Do agente para o coletor.
    • Do coletor para o agente.
  • Ele deve aderir ao protocolo de comunicação do Guardium baseado no TCP e deve enviar uma mensagem handshake do Guardium que:
    • Permita que o coletor registre o nome da UFA.
    • Torne o agente da GUI verde para que saibamos que ele está operacional.
  • Ele deve enviar uma mensagem Ping do Guardium a cada 30 a 60 segundos. A Figura 2 mostra o relatório do monitor do Guardium que recebeu uma mensagem Ping.
    Figura 2. O monitor de status do S-TAP está verde, indicando que tudo está operacional
    O monitor de status do S-TAP está verde, indicando que tudo está operacional
  • Ele deve ler tudo que o dispositivo Guardium envia ao agente, como mostra a Figura 3.
    Figura 3. O agente é responsável pelo processamento de mensagens do dispositivo
    O agente é responsável pelo processamento de mensagens do dispositivo

    Por exemplo, depois da mensagem handshake, o dispositivo Guardium enviará a política de auditoria atual do dispositivo para a UFA. Em seguida, o agente pode processar essas informações para identificar os detalhes relevantes sobre como configurar o comportamento da UFA. A Figura 4 mostra um diagrama do fluxo de mensagens.

    Figura 4. Visão geral do processamento de mensagens do universal feed
    Visão geral do processamento de mensagens do universal feed

Segue uma descrição mais detalhada do fluxo de mensagens.

  1. O agente opera um soquete do TCP com o GA na porta 16016 (porta padrão na qual o Guardium realiza os recebimentos).
  2. Após a porta 16016 ser aberta, o agente envia a mensagem handshake, que informa ao dispositivo qual tipo de agente está comunicando (utilizando o campo msg_type).
  3. Agentes mais sofisticados podem lidar com regras de política enviadas pelo dispositivo. O agente pode, em seguida, ajustar seu comportamento com base nas regras de política.
  4. Assim que o agente tiver informações que ele deseja enviar ao dispositivo, ele enviará uma mensagem de início de sessão. Isso informa ao dispositivo que há novos dados de auditoria a serem armazenados e essas informações terão registro de data e hora.
  5. O agente pode, em seguida, enviar mais informações de auditoria que serão associadas a essa sessão particular. Essas mensagens devem ser enviadas utilizando o formato de mensagem de Solicitação do Cliente.
  6. Opcionalmente, também é possível enviar informações às quais o servidor respondeu com base na solicitação do cliente. Essas informações são enviadas na mensagem de resposta do servidor.
  7. Ocasionalmente (a cada 60 segundos ou menos), o agente deve enviar uma mensagem ping para que o dispositivo saiba que o agente está funcionando. Caso o dispositivo não receba uma mensagem ping, ele pode enviar um alerta por syslog, SMTP, entre outros, a uma equipe operacional para investigar o motivo pelo qual o agente não está operacional.
  8. Após todas as informações terem sido enviadas para essa sessão específica, é preciso encerrar a sessão enviando uma mensagem de término de sessão. Isso informará ao dispositivo Guardium que todos os dados de auditoria para essa sessão particular foram recebidos e para encerrar o registro da sessão.

A Listagem 2 mostra as mensagens enviadas pelo agente, conforme descrito anteriormente para as mensagens handshake, ping, de início de sessão, solicitação do cliente e término de sessão.

Lista 2. Troca de mensagem de amostra entre o agente Universal Feed e o coletor do Guardium
*** 1. SEND ***
type: HANDSHAKE
handshake {
    timestamp {
        unix_time: 1331583609
    }
    client_identifier: "NewUniversalFeedLogger"
    current_master: "NewUniversalFeedCollector"
    current_master_ip: 4027124234
}
*** 2. SEND ***
type: PING
ping {
    timestamp {
        unix_time: 1331583609
    }
    client_identifier: "NewUniversalFeedLogger"
    current_master: "NewUniversalFeedCollector"
    current_master_ip: 4027124234
}
                
*** 3. SEND ***
type: SESSION_START
session_start {
    session_id: 56
    session_locator {
        client_ip: 4027124234
        client_port: 1053
        server_ip: 4161341962
        server_port: 1030
    }
    timestamp {
        unix_time: 1331583631
    }
    accessor {
        db_user: "JoeD"
        server_type: "DB2"
        server_os: "ServerOperatingSystem"
        client_os: "ClientOSValue"
        client_hostname: "ClientHostName-Joe\'s Laptop"
        server_hostname: "ServerDBHostName"
        comm_protocol: "CommProtocol"
        db_protocol: "DB Protocol"
        db_protocol_version: "DBProtocolVersion"
        os_user: "OSUSer-JoeDiPietro"
        source_program: "SourceProgramNewApplication"
        client_mac: "clientMac"
        server_description: "ServerDescription"
        service_name: "ServiceName"
        language: DB2
        type: CONSTRUCT
    }
    process_id: "ProcessID String"
    terminal_id: "Terminal ID String"
    db_name: "DatabaseName"
    app_user_name: "AppUserName"
}
                
***4. SEND ***
type: CLIENT_REQUEST
client_request {
    session_id: 1
    data {
        language: DB2
        type: CONSTRUCT
        construct {
         sentences {
          verb: "Select"
           objects {
            name: "PatientTable"
          }
        }
        full_sql: "SELECT * FROM PatientTable"
    }
    timestamp {
      unix_time: 1331583634
    }
    session_locator {
       client_ip: 16777343
       client_port: 1030
       server_ip: 16843009
       server_port: 1030
    }
  }
}

*** 5. SEND ***
type: SESSION_END
session_end {
    session_id: 48013
    timestamp {
        unix_time: 1331583634
    }
    session_locator {
      client_port: 1053
      server_ip: 16843009
      server_port: 1030
  }
}

Componentes do programa de amostra do universal feed

Esse código de amostra incluído neste artigo pode ser facilmente utilizado para desenvolver eventos de segurança e de auditoria em aplicativos ou bancos de dados customizados. Isso ajudará a aprimorar a segurança desses aplicativos, pois esses eventos podem ser armazenados fora dos servidores do aplicativo/banco de dados nos quais usuários privilegiados e possíveis hackers não podem acessar esses logs.

Arquivo de auditoria de amostra

No aplicativo de amostra, o arquivo de auditoria mostrado na Listagem 3 é enviado ao dispositivo Guardium.

Lista 3. Arquivo de auditoria de amostra (sampleAuditLog.txt)
03/06/2012 16:24|48009|10.10.9.240|10.10.9.248|DB2|IBMUSER|SELECT * FROM CREDITCARD1
03/06/2012 16:26|48009|10.10.9.240|10.10.9.248|DB2|IBMUSER|SELECT * FROM CREDITCARD2
03/06/2012 16:27|48009|10.10.9.240|10.10.9.248|DB2|IBMUSER|SELECT * FROM CREDITCARD3
03/06/2012 16:28|48009|10.10.9.240|10.10.9.248|DB2|IBMUSER|SELECT * FROM CREDITCARD4
03/06/2012 16:29|48009|10.10.9.240|10.10.9.248|DB2|IBMUSER|SELECT * FROM CREDITCARD5

Os registros do log de auditoria são formatados da seguinte maneira:
Timestamp | Session ID|Client IP|Server IP|Database type|Database user|SQL statement text

Código do aplicativo

O código do aplicativo pode ser encontrado nos seguintes arquivos:

  • com/guardium/proto/datasource/test/Type1/FilePollingSample1.java
  • com/guardium/proto/datasource/test/Type1/TestUniversalFeed.java

A classe com/guardium/proto/datasource/test/Type1/FilePollingSample1.java :

  1. Lê um arquivo simples (sampleAuditLog.txt).
  2. Analisa esses eventos.
  3. Formata as informações em mensagens específicas do Guardium.
  4. Envia essas mensagens por um soquete TCP para o dispositivo Guardium.

O dispositivo Guardium armazenará essas informações nas tabelas internas do Guardium para relatório.

A classe com/guardium/proto/datasource/test/Type1/TestUniversalFeed.java é um programa simples que envia tipos de mensagem do Guardium para o dispositivo.

Código da infraestrutura e do utilitário

O código da infraestrutura e do utilitário pode ser encontrado nas seguintes classes:

  • com/guardium/proto/datasource/DatasourceMessageUtil.java
  • com/guardium/proto/datasource/Socket.java
  • com/guardium/proto/datasource/Wrapper.java

com/guardium/proto/datasource/DatasourceMessageUtil.java é utilizado no desenvolvimento de Mensagens do Guardium para enviá-las ao dispositivo a partir do agente Universal Feed. É possível utilizar suas outras classes Java para chamar os métodos dessa classe a fim de facilmente desenvolver suas mensagens do Guardium.

com/guardium/proto/datasource/Socket.java é utilizado para abrir um Soquete TCP para o Dispositivo Guardium a partir do Agente Universal Feed

com/guardium/proto/datasource/Wrapper.java é utilizado para quebrar os dados no formato de mensagem adequado.

Arquivos em lote

Os seguintes arquivos também são incluídos no download anexado.

  • compileJava.bat é um exemplo de como compilar o código em um ambiente do Windows.
  • runFilePollingSample1.bat é uma amostra de como iniciar o programa.

Executando o programa de amostra

Para executar o programa de amostra, insira o comando mostrado na Listagem 4 (ou consulte runFilePollingSample1.bat).

Lista 4. Programa de amostra
java -jar FilePollingSample1.jar -host 10.70.147.72 -infile sampleAuditLog.txt -outfile
eventFileOut.txt -sendFileOnly true -loopAmount 1

Substitua o IP do host pelo endereço IP do seu dispositivo InfoSphere Guardium. O programa lê o arquivo SampleAudit.txt e envia as informações para o dispositivo Guardium. A Figura 5 é um relatório de amostra que exibe os resultados no dispositivo Guardium.

Figura 5. O relatório mostra que as mensagens foram enviadas ao Guardium com sucesso
O relatório mostra que as mensagens foram enviadas ao Guardium com sucesso

Conclusão

Novos bancos de dados e aplicativos continuam sendo criados e adotados para atender às necessidades organizacionais específicas. No entanto, o requisito para os recursos de proteção e de auditoria de dados é consistente em todo o conselho por mandato. A solução de proteção de dados do InfoSphere Guardium é extensível para permitir a integração de uma ampla variedade de novos bancos de dados e fontes a essa plataforma, oferecendo, assim, uma solução corporativa consistente. O código de amostra anexado a este artigo também é bem documentado e deve ajudar na criação de um agente Universal Feed para uma fonte de servidor de banco de dados.


Download

DescriçãoNomeTamanho
Sample program and utility files for this articleUnivFeedSamplePart1.zip172KB

Recursos

Aprender

Obter produtos e tecnologias

  • Crie seu próximo projeto de desenvolvimento com o software de teste IBM, disponível para download diretamente do developerWorks.
  • Avalie os produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto online, use-o em um ambiente de nuvem ou passe algumas horas na Sandbox da SOA aprendendo a implementar a Arquitetura Orientada a Serviços de modo eficiente.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=845405
ArticleTitle=Utilize o Universal Feed do InfoSphere Guardium para Criar uma Solução Customizada de Monitoramento de Atividades de Dados, Parte 1: Crie um feed para uma fonte de banco de dados
publish-date=11162012