A Figura 4.20, mostra os casos de uso do agente de armazenamento. O caso de uso “Receber Requisição de Conhecimento” trata as solicitações do agente de análise. O caso de uso “Consultar Conhecimento” executa o processo de obtenção do conhecimento, podendo interagir com bases de dados em diversos formatos e aplicar algoritmos de data mining para extrair conhecimentos indiretos. O caso de uso “Enviar Conhecimento” faz o
envio do conhecimento adquirido para o agente de análise seguindo a taxonomia daquele grupo de agentes.
Armazenador «agent»
Receber Requisição de Conhecimento
Consultar Conhecimento
Enviar Conhecimento
todos «agent»
«includes»
Figura 4.20 - Casos de uso do agente de armazenamento
Como mostrado na Figura 4.21, o agente de coleta possui dois comportamentos: o comportamento “Recebe Requisição de Conhecimento” e o comportamento “Envia Conhecimento”. O comportamento “Recebe Requisição de Conhecimento” (a) é cíclico e faz a filtragem das mensagens adequadas e executa o processo de obtenção daquela informação. O comportamento “Envia Conhecimento” (b) envia por meio de mensagens o conhecimento para o agente de análise.
a) Recebe Requisição de Conhecimento
Consulta o conhecimento
Envia conhecimento Aguarda por mensagens
Inclui "envia conhecimento"
b) Envia Conhecimento
[Caso seja requisição de conhecimento]
A Figura 4.22 mostra a implementação física da classe do agente de armazenamento e seus respectivos serviços e comportamentos. O método específico query() é o responsável pela definição do procedimento de obtenção da informação, por exemplo, consulta a uma base de usuários válidos, checksums de arquivos do sistema ou a
configuração de uma rede neural treinada para reconhecer port scanning. Os
comportamentos são descritos em termos das classes internas ReceiveKnowledgeRequest, QueryKnowledge e SendKnowledge.
activateBasicGui() query() getAgentType() getAgentGroup() getAgentDescription() getAgentAlias() getAgent() initExtraLangs() isMyKnowledgeRequest() setupExtras() ReceiveKnowledgeRequest() action() ReceiveKnowledgeRequest QueryKnowledge() action() onStart() QueryKnowledge SendKnowledge() action() SendKnowledge BasicWarehouse Serviços específicos:
• query: realiza os procedimentos de análise definidos pelo desenvolvedor.
• isMyKnowledgeRequest: verifica se a solicitação é valida para o agente.
Comportamentos:
• ReceiveKnowledgeRequest: recebe as solicitações para busca de informações (cíclico);
• QueryKnowledge: processa a busca invocando o método
query (sob demanda);
• SendKnowledge: envia as informações para o agente de análise (sob demanda).
4.7 - ORGANIZAÇÃO DO FRAMEWORK
A intenção dessa seção é mostrar ao desenvolvedor como o framework é organizado
fisicamente para que as novas implementações possam seguir essas diretrizes. Ao ser criado um novo grupo de agentes, deverão ser adicionados novos arquivos e bibliotecas seguindo essa orientação.
As próprias convenções de código Java recomendam que um sistema seja organizado em termos de pacotes, por isso o framework define uma série desses para
agrupar as diversas funções do sistema de acordo com sua aplicação. A Tabela 4.2 mostra a organização desses pacotes e descreve o tipo de conteúdo presente nos mesmos.
Tabela 4.2 - Organização dos pacotes do framework
Endereço do pacote Conteúdo
br.unb.idsframework Recursos globais
br.unb.idsframework.agents Definição dos tipos básicos de agentes
Br.unb.idsframework.groups Definição de cada grupo de agentes especializados br.unb.idsframework.ontologies Definição das ontologias
br.unb.idsframework.share Bibliotecas de apoio e utilitários
br.unb.idsframework.ui Interfaces gráficas (GUI)
br.unb.idsframework.agents.analysts Classes dos agentes de análise br.unb.idsframework.agents.collectors Classes dos agentes de coleta br.unb.idsframework.agents.coordinators Classes dos agentes de coordenação br.unb.idsframework.agents.reactors Classes dos agentes de reação
br.unb.idsframework.agents.warehouses Classes dos agentes de armazenamento
starlight.util Utilitários de codificação e decodificação em Base64
jade.mtp.http Protocolos de interoperação entre containers baseado
em HTTP
jade.mtp.iiop Protocolos de interoperação entre containers baseado
em IIOP
jade Classes da plataforma JADE
javax.activation Classes da biblioteca de ativação de javabeans
javax.mail Classes da biblioteca de geração e recepção de e-mail
org.joone Classes da biblioteca de redes neurais artificiais
net.sourceforge.jpcap Classes da biblioteca de captura de pacotes
junit Classes da biblioteca de testes unitários
Alguns pacotes serão amplamente mantidos pelo desenvolvedor, como o br.unb.idsframework.ontologies que define as ontologias e taxonomias de cada cenário de detecção de intrusão. Outro importante pacote é o br.unb.idsframework.agents.* que define os próprios grupos de agentes especializados. A fim de oferecer alguns serviços adicionais para a implementação de
A Figura 4.23 mostra a configuração física do framework. O framework é empacotado em um Java Archive (idsframework.jar) que acessa os arquivos de
configuração (Parameters.properties), idiomas (Message_*.properties) e as bibliotecas externas necessárias. Em tempo de execução, o framework faz uso do próprio
JADE (jade.jar) e das bibliotecas de runtime do Java (rt.jar). Cada grupo de agentes poderá ser empacotado separadamente como no ids_exemplo.jar.
«framework» jade.jar «file» Parameters.properties «file» Messages_en_US.properties «file» Messages_pt_BR.properties «framework» idsframework.jar «library» joone.jar «library» mail.jar «library» net.sourceforge.jpcap.jar «library» rt.jar «class» ProtegeTools «class» ProtegeIntrospector «class» SlotHolder «class» IdsFrameworkOntology «agents» ids_exemplo.jar
4.8 - COMPONENTES DE SERVIÇOS
Essa seção visa descrever alguns dos serviços disponíveis no framework, lembrando
que mais serviços poderão ser adicionados nas futuras versões devido sua capacidade de extensão. Esses serviços deverão ser utilizados dentro das implementações dos agentes tornando maior a robustez de cada um. Aqui serão mostrados os seguintes serviços: suporte ao Protégé, rede neural artificial, capturador de pacotes e interface gráfica móvel.