|
|
### 1. Consultas e submissões ao servidor CIF utilizando API java.
|
|
|
## 1. Introdução
|
|
|
|
|
|
CIF é um sistema de gestão de dados sobre ameaças cibernéticas, que permite combinar informações conhecidas de várias fontes e utilizar assim essas informações para a identificação (resposta a incidentes), detecção (IDS) e mitigação (Geração de regras por meio de plugins a partir de uma consulta a base). Os tipos mais comuns de dados de ameaças armazenadas no CIF são endereços IP, domínios e URLs que possam estar relacionadas a atividades maliciosas.
|
|
|
|
|
|
## 2. Objetivos
|
|
|
|
|
|
O principal objetivo do CIF é analisar, normalizar, armazenar, processar informações e ainda produzir conjunto de dados sobre ameaças. Para isso os processos executados pelo CIF estão divididos em análise, normalização, pós-processamento, armazenamento, consulta, compartilhamento e produção.
|
|
|
|
|
|
### 2.1. Análise (Parse)
|
|
|
|
|
|
O CIF suporta várias fontes de informações de dados do mesmo tipo, por exemplo, conjunto de dados de domínios maliciosos (feeds). Cada conjunto de dados semelhantes podem ser marcados com diferentes atributos, como por exemplo o nível de confiança da fonte. As fontes de dados são especificadas em arquivos de configurações (Quadro 1) e a leitura dos dados são delimitados por expressões regulares criadas para cada fonte de dados segundo a necessidade .
|
|
|
|
|
|
Quadro 1
|
|
|
```
|
|
|
assessment = 'malware'
|
|
|
period = daily
|
|
|
mirror = '/tmp'
|
|
|
guid = everyone
|
|
|
|
|
|
[dshield_suspiciousdomains]
|
|
|
feed = 'http://isc.sans.edu/feeds/suspiciousdomains_Low.txt'
|
|
|
confidence = 85
|
|
|
regex = '^((?!Site)[^#]\S+)'
|
|
|
regex_values = address
|
|
|
source = 'isc.sans.edu'
|
|
|
alternativeid = 'http://isc.sans.edu/feeds/suspiciousdomains_Low.txt'
|
|
|
description = 'dshield low false positive list'
|
|
|
|
|
|
[urlblacklist]
|
|
|
feed = 'http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist'
|
|
|
confidence = 85
|
|
|
zip_filename = 'blacklists/malware/urls'
|
|
|
regex = '^(\S+)'
|
|
|
regex_values = address
|
|
|
source = 'urlblacklist.com'
|
|
|
alternativeid = 'http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist'
|
|
|
description = 'urlblacklist.com malware urls' "
|
|
|
|
|
|
```
|
|
|
#### 2.1.1. Opções do arquivo de configuração.
|
|
|
|
|
|
**Variáveis globais:**
|
|
|
|
|
|
* **assessment** : determina como os dados serão classificados para obter uma lista de valores de possíveis avaliações.
|
|
|
|
|
|
* **period** : determina de quanto em quanto tempo o CIF lê a fonte de dados, os intervalos de leitura podem ser de hora em hora ou diário.
|
|
|
|
|
|
* **mirror**: local para armazenamento de cache para evitar repetidos downloads da fonte de dados quando a mesma não sofreu alteração.
|
|
|
|
|
|
* **guid** : especifica o grupo CIF que tem direito de acesso aos dados.
|
|
|
|
|
|
**Especificação da fonte de dados:**
|
|
|
|
|
|
* [ < **nome do feed** > ] : nome dado ao feed.
|
|
|
|
|
|
* **feed** : especifica a URL da fonte de dados, também pode ser um caminho para um arquivo local.
|
|
|
|
|
|
* **confidence**: é o grau de confiança de uma fonte de dados, representados por intervalos numéricos de 0 a 100.
|
|
|
|
|
|
* **zip_filename**: especifica a o caminho de uma fonte de dados compactada.
|
|
|
|
|
|
* **regex: especifica** uma expressão regular utilizada para extrair valores a partir da fonte de dados.
|
|
|
|
|
|
* **regex_values**: especifica os valores extraídos utilizando a expressão regular correspondente.
|
|
|
|
|
|
* **source**: especifica o domínio da fonte de dados.
|
|
|
|
|
|
* **alternativeid**: é geralmente uma URL ou uma localização do ponto de dados original para uma referência futura .
|
|
|
|
|
|
* **description**: é a descrição sobre a fonte de dados.
|
|
|
|
|
|
### 2.2. Normalizar (Normalise)
|
|
|
|
|
|
O conjunto de dados sobre ameaças, muitas vezes, possui pequenas diferenças o CIF então normaliza esses conjuntos de dados. Estes dados de ameaças depois de normalizados podem ser reaproveitados por outras aplicações ou processos.
|
|
|
|
|
|
Essa normatização foi feita com base na [RFC 5070 ] (http://www.ietf.org/rfc/rfc5070.txt).
|
|
|
|
|
|
Os campos mais utilizados pela ferramenta são:
|
|
|
|
|
|
* **restriction**: Nível do acesso para compartilhamento da informação:
|
|
|
|
|
|
1. public: Não existe restrição na informação.
|
|
|
2. need-to-know: A informação pode ser compartilhada com parceiros envolvidos no incidente, como determinado pelo conteúdo desse documento (Ex. Múltiplos sites como vitima podem informar um ao outro).
|
|
|
3. private: A informação não é compartilhada.
|
|
|
|
|
|
* **guid**: [Grupo Unix para ACL da informação] (https://code.google.com/p/collective-intelligence-framework/wiki/GroupSupport_v1)
|
|
|
|
|
|
* **assessment**: É a [categoria] da informação (https://code.google.com/p/collective-intelligence-framework/wiki/TaxonomyAssessment_v1)
|
|
|
|
|
|
* **description**: A Descrição da informação
|
|
|
|
|
|
* **confidence**: Nível de confiança da [origem do dado] (https://code.google.com/p/collective-intelligence-framework/wiki/TaxonomyConfidence_v1)
|
|
|
|
|
|
* **detecttime**: Data da detecção da informação
|
|
|
|
|
|
* **reporttime**: Data que a informação foi reportada
|
|
|
|
|
|
* **address**: Endereço origem do tráfego
|
|
|
|
|
|
* **prefix**: prefixo da origem
|
|
|
|
|
|
* **protocol**: 6 or tcp, 17 or udp
|
|
|
|
|
|
* **Porta**: Número da porta
|
|
|
|
|
|
* **ASN e asn_desc**: informação sobre ASN
|
|
|
|
|
|
### 2.3. Pós Processadores (Post Process)
|
|
|
|
|
|
O CIF possui muitos pós processadores que derivam uma informação adicional a partir de uma única fonte de dados de ameaças. Um exemplo simples seria que a partir de uma URL obtida pelo CIF o mesmo pode identificar um domínio e um endereço IP.
|
|
|
|
|
|
### 2.4. Armazenamento (Store)
|
|
|
|
|
|
O CIF possui um esquema de banco de dados que é otimizado para armazenar registros de dados sobre ameaças. Em sua versão V1 utiliza um sistema schema-less, um recurso oferecido por sistemas gerenciadores de banco de dados que fazem uso de uma abordagem NoSQL de armazenamento em cima de um SGBD relacional [1].
|
|
|
|
|
|
|
|
|
### 2.5. Consulta (Query)
|
|
|
|
|
|
As consultas a base de conhecimento do CIF podem ser executadas das seguintes maneiras: cliente Web, cliente nativo e Web API (HTTP). O cliente Web é um plugin para Firefox e Google Chrome, utilizado para fazer consultas a base de conhecimento e submeter informações para a mesma. O cliente nativo escrito em Perl é utilizado em linha de comando diretamente no console do servidor ou por conexão ssh. O Quadro 2 ilustra uma consulta a base CIF.
|
|
|
|
|
|
Quadro 2
|
|
|
```
|
|
|
$ cif -d -n -q 200.10.2.16 -p iptables
|
|
|
...
|
|
|
[DEBUG][2015-01-15T16:16:11Z]: processing: 39 items
|
|
|
[DEBUG][2015-01-15T16:16:11Z]: final results: 6
|
|
|
[DEBUG][2015-01-15T16:16:11Z]: done processing
|
|
|
[DEBUG][2015-01-15T16:16:11Z]: formatting as Iptables...
|
|
|
iptables -N CIF_IN
|
|
|
iptables -F CIF_IN
|
|
|
iptables -N CIF_OUT
|
|
|
iptables -F CIF_OUT
|
|
|
iptables -A CIF_IN -s 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_OUT -d 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_IN -s 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_OUT -d 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_IN -s 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_OUT -d 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_IN -s 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_OUT -d 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_IN -s 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_OUT -d 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_IN -s 200.10.2.16 -j DROP
|
|
|
iptables -A CIF_OUT -d 200.10.2.16 -j DROP
|
|
|
iptables -A INPUT -j CIF_IN
|
|
|
iptables -A CIF_IN -j LOG --log-level 6 --log-prefix '[IPTABLES] cif dropped'
|
|
|
iptables -A OUTPUT -j CIF_OUT
|
|
|
iptables -A CIF_OUT -j LOG --log-level 6 --log-prefix '[IPTABLES] cif dropped'
|
|
|
[DEBUG][2015-01-15T16:16:11Z]: done
|
|
|
|
|
|
```
|
|
|
|
|
|
.
|
|
|
|
|
|
A Web API segue um design RESTful, que utiliza requisições HTTP para efetuar consultas e manipular recursos CIF. A Web API é utilizada para integrar o CIF com outras aplicações através de requisições GET. O Quadro 3 ilustra possíveis requisições.
|
|
|
|
|
|
Quadro 3
|
|
|
```
|
|
|
GET https://cif.example.com/api?q=example.com
|
|
|
|
|
|
GET https://cif.example.com/api?q=infrastructure/botnet
|
|
|
|
|
|
GET https://cif.example.com/api?apikey=249cd5fd-04e3-46ad-bf0f-c02030cc864a&q=192.168.1.1/24
|
|
|
|
|
|
```
|
|
|
|
|
|
### 2.6. Compartilhamento (Share)
|
|
|
|
|
|
O CIF suporta usuários, grupos e chaves de API, cada registro de dados sobre ameaças pode ser marcado para ser compartilhado com o grupo específico de usuários. Isso permite o compartilhamento de ameaças entre federações.
|
|
|
|
|
|
### 2.7. Produzir (Produce)
|
|
|
|
|
|
CIF suporta ainda a criação de novos conjunto de dados de ameaças armazenadas. Esses conjuntos de dados podem ser criados pelo tipo de confiança atribuída a fonte. Os dados são gerados dinamicamente pelo framework e podem ser usados como : regras de IDS, zonas de nome de servidores e regras de firewall.
|
|
|
|
|
|
### 4. Requisitos para instalação.
|
|
|
|
|
|
Os requisitos mínimos para instalação do CIF são:
|
|
|
|
|
|
Instalação mínima:
|
|
|
|
|
|
* Plataforma x86-64bits.
|
|
|
* Ao menos 4GB de memória RAM.
|
|
|
* Processador com no mínimo dois núcleos.
|
|
|
* Ao menos 100GB de espaço em disco livre após instalação do SO.
|
|
|
|
|
|
Instalação ampla:
|
|
|
|
|
|
* Plataforma x86-64bits.
|
|
|
* Ao menos 16GB de memória RAM.
|
|
|
* Processador com no mínimo 16 núcleos.
|
|
|
* Ao menos 500GB de espaço em disco livre após instalação do SO.
|
|
|
* LVM e sistema RAID
|
|
|
|
|
|
Sistemas compatíveis:
|
|
|
|
|
|
* Ubuntu LTS 12 (estável).
|
|
|
* Ubuntu LTS 14 (instável).
|
|
|
* Debian 6 Squeeze (estável).
|
|
|
* Debian 7 Wheezy (estável).
|
|
|
* CentOs 5 (em teste).
|
|
|
* CentOs 6 (estável).
|
|
|
|
|
|
* [2]
|
|
|
* [3]
|
|
|
|
|
|
### 5. Instalação e configuração Collective Intelligence Framework - CIF V1 SERVER.
|
|
|
|
|
|
[Instalação no Debian Wheezy.] (instalacao-cif-debian-wheezy)
|
|
|
|
|
|
[Documentação oficial do CIF V1 sobre instalação e configuração.] (https://code.google.com/p/collective-intelligence-framework/wiki/ServerInstall_v1)
|
|
|
|
|
|
### 6. Configuração de novas fontes de dados sobre ameaças.
|
|
|
|
|
|
Vamos criar um feed a partir de uma lista simples de urls em um arquivo.
|
|
|
|
|
|
Crie um arquivo em /opt/cif/etc/nomedofeed.cfg
|
|
|
|
|
|
Seguindo o exemplo abaixo, configure o arquivo citado acima:
|
|
|
|
|
|
```
|
|
|
assessment = 'phishing'
|
|
|
period = hourly
|
|
|
mirror = '/tmp'
|
|
|
guid = everyone
|
|
|
source = 'CERTBahia.pop-ba.rnp.br'
|
|
|
restriction = 'need-to-know'
|
|
|
alternativeid = 'certbahia'
|
|
|
|
|
|
[urls]
|
|
|
feed = etc/nomedofeed_urls
|
|
|
regex = '^(\S+)$'
|
|
|
regex_values = 'address'
|
|
|
confidence = 95
|
|
|
alternativeid = 'certbahia'
|
|
|
```
|
|
|
|
|
|
Logado com o usuário cif, execute os comandos abaixo:
|
|
|
```
|
|
|
$ /opt/cif/bin/cif_smrt -d -v 2 -r /opt/cif/etc/nomedofeed.cfg -f urls -T medium
|
|
|
$ cif_feed -d
|
|
|
```
|
|
|
Agora teste o feed recém criado com o comando abaixo, ainda como usuário cif:
|
|
|
```
|
|
|
$ cif -q url/phishing -c 95 -s medium | grep certbahia
|
|
|
```
|
|
|
Caso não exiba nenhuma linha, houve um problema em sua configuração.
|
|
|
|
|
|
[Fonte] (http://code.google.com/p/collective-intelligence-framework/wiki/AddingFeeds_v1)
|
|
|
|
|
|
### 7. Exemplo de consultas ao servidor CIF utilizando plugin nativo.
|
|
|
|
|
|
### 8. Configuração de acesso por grupo
|
|
|
|
|
|
Ao criar o usuário, é possível informar qual grupo ele faz parte:
|
|
|
```
|
|
|
$ cif_apikeys -u usuarionovo@localhost -a -g mygroup1.example.com,everyone -G mygroup1.example.com
|
|
|
```
|
|
|
Ao criar um determinado feed, é possível informar qual grupo poderá consultá-lo:
|
|
|
```
|
|
|
source = 'amada.abuse.ch'
|
|
|
restriction = 'need-to-know'
|
|
|
alternativeid = 'http://amada.abuse.ch/?search=<address>'
|
|
|
alternativeid_restriction = 'public'
|
|
|
confidence = 65
|
|
|
guid = mygroup1.example.com
|
|
|
```
|
|
|
Não esqueça de alterar o arquivo /home/cif/.cif:
|
|
|
```
|
|
|
[cif_archive]
|
|
|
...
|
|
|
# enable your own groups is you start doing data-sharing with various groups
|
|
|
#groups = everyone,group1.example.com,group2.example.com,group3.example.com
|
|
|
groups = everyone,mygroup1.example.com
|
|
|
```
|
|
|
[Fonte] (http://code.google.com/p/collective-intelligence-framework/wiki/GroupSupport_v1)
|
|
|
|
|
|
### 9. Consultas e submissões ao servidor CIF utilizando API java.
|
|
|
|
|
|
A API java foi desenvolvida para facilitar a comunicação com o servidor CIF V1, foi implementada utilizando o recurso de integração WEB API do framework. Utilizando a API é possível fazer consultas aos feeds e também consultas de URLs e endereços IP específicos. Ainda utilizando a API é possível fazer submissões de dados sobre ameaças ao servidor.
|
|
|
|
|
|
#### 1.1 Exemplo de consulta simples utilizando API
|
|
|
#### 9.1 Exemplo de consulta simples utilizando API
|
|
|
|
|
|
```
|
|
|
|
|
|
/* *
|
|
|
* Instancia um cliente para comunicação
|
|
|
* Instância um cliente para comunicação
|
|
|
* @param URL/IP servidor CIF
|
|
|
* @param APIKEY gerada no servidor CIF para o cliente
|
|
|
*
|
... | ... | @@ -32,7 +308,7 @@ A API java foi desenvolvida para facilitar a comunicação com o servidor CIF V |
|
|
|
|
|
```
|
|
|
|
|
|
#### 1.2 Exemplo de submissão de dados utilizando API
|
|
|
#### 9.2 Exemplo de submissão de dados utilizando API
|
|
|
|
|
|
Para submissão dedas ao servidor CIF é necessário gerar uma chave para o cliente com permissão de escrita.
|
|
|
|
... | ... | @@ -101,3 +377,4 @@ A API java foi desenvolvida para facilitar a comunicação com o servidor CIF V |
|
|
|
|
|
|
|
|
```
|
|
|
### 10. Descrição dos dados obtidos na consulta (JSON). |