• Nenhum resultado encontrado

2.12 Hadoop User Experience(HUE)

3.1.2 Captura de Dados

O protocolo para captura dos dados busca simular uma conexão legítima de um navegador para Internet ao site da empresa. Utilizando a biblioteca websocket-client, o programa cria uma conexão do tipo websocket diretamente com o servidor da empresa. Após estabelecida a conexão por parte do programa só é necessário manter uma espécie de heartbeat com o servidor web para manter a conexão do tipo WebSocket aberta. Grande parte das fontes de dados de ataque utiliza a tecnologia de WebSocket para transmissão dos dados. Dessa forma o programa é altamente adaptável e reusável.

Muitas outras fontes de dados sobre ataques podem ser encontradas na internet, como por exemplo:

• ThreatMap CheckPoint - https://threatmap.checkpoint.com/ThreatPortal/livemap. html

• Digital Attack Map - http://www.digitalattackmap.com/#anim=1&color=0&country= ALL&list=0&time=17487&view=map

• Cyber Map Kaspersky - https://cybermap.kaspersky.com/

• FireEye Cyber Map - https://www.fireeye.com/cyber-map/threat-map.html Muitas outras organizações e páginas independentes trazem dados dessa natureza. A captura de dados segue o algoritmo definido pela tecnologia WebSocket. Como já explanado, na subseção 2.1.6, nesse protocolo existem quatro tipos de mensagens:

on_message, on_error, on_close e on_open. O pseudo código abaixo descreve o funcio-

namento do programa de captura:

1 f u n c a o on_message ( fd_websocket , message ) :

2 s e t i m e o u t : 3 Fecha c o n e x a o WebSocket ; 4 s e n a o s e mensagem r e c e b i d a i g u a l a (" r i d ": 1 ) e n t a o : 5 Envia mensagem (’ { " e v e n t " : " # s u b s c r i b e " , " d a t a " : 6 { " c h a n n e l " : " g l o b a l " } , " c i d " : 2 } ’) ; 7 8 s e n a o s e mensagem r e c e b i d a i g u a l a (" r i d ": 2 ) e n t a o :

9 Confirma que WebSocket f o i a b e r t o ;

10 s e n a o s e mensagem r e c e b i d a i g u a l a (#1 ) e n t a o : 11 Imprime (" Ping r e c e b i d o ! ") ; 12 Envia mensagem ("#2") ; 13 s e n a o : 14 t i m e o u t <− 5 ; 15 mensagem_json <− mensagem ; 16 p a r a a t a q u e em m e s s a g e _ j s o n :

17 a t a q u e [ ’ timestamp ’] <− h o r a _ u t c _ a t u a l ( ) ; 18 I n s e r e a t a q u e no banco de dados ; 19 20 f u n c a o o n _ e r r o r ( fd_websocket , e r r o r ) : 21 Imprime ( e r r o r ) ; 22 23 f u n c a o o n _ c l o s e ( f d _ w e b s o c k e t ) :

24 Fecha c o n e x a o com o banco de dados ;

25 Imprime (" Conexao f i n a l i z a d a ") ; 26

27 f u n c a o on_open ( f d _ w e b s o c k e t ) :

28 Envia mensagem ( {" e v e n t ":"#handshake "," d a t a ": {" authToken ": n u l l } ," c i d ": 1 } ) 29 30 f u n c a o main ( ) : 31 C a b e c a l h o <− {’ Accept−Encoding ’ : ’ g z i p , d e f l a t e , s d c h ’, 32 ’ Accept−Language ’: ’ pt−BR, pt ; q = 0 . 8 , en−US ; q = 0 . 6 , en ; q = 0 . 4 , e s ; q =0.2 ’, 33 ’ Cache−C o n t r o l ’: ’ no−c a c h e ’, 34 ’ Pragma ’: ’ no−c a c h e ’, 35 ’ Sec−WebSocket−E x t e n s i o n s ’:’ p e r m e s s a g e −d e f l a t e ; client_max_window_bits ’ ,

36 ’ User−Agent ’: ’ M o z i l l a / 5 . 0 ( X11 ; Linux x86_64 ) AppleWebKit / 5 3 7 . 3 6 ’} 37

38 c l i e n t e <− Recebe D e s c r i t o r do Banco de dados

39 banco <− Recebe D e s c r i t o r da Base de dados

40 a t t a c k <− Recebe D e s c r i t o da \ t e x t i t { C o l l e c t i o n } 41

42 f d _ w e b s o c k e t <−Abre WebSocket (" ws : / / map . n o r s e c o r p . com/ s o c k e t c l u s t e r / ",

h e a d e r = h e a d e r c , 43 on_message = on_message , 44 o n _ e r r o r = on_error , 45 o n _ c l o s e = o n _ c l o s e ) 46 47 f d _ w e b s o c k e t . on_open = on_open 48 f d _ w e b s o c k e t . r u n _ f o r e v e r ( )

Na função main as atribuições para execução do programas são definidas, entre elas o cabeçalho da requisição HTTP e a ligação entre a biblioteca e as funções anteriormente definidas. Assim que a função fd_websocket.run_forever() é invocada a função on_open é executada e envia a primeira mensagem ao servidor, o conteúdo dessa mensagem é uma solicitação de handshake com número de identificação de mensagem do cliente(cid) igual a um.

Em seguida o servidor responde com a mensagem - “rid”:1 - informando que a pri- meira mensagem foi recebida com sucesso. Nesse momento dentro da função on_message uma segunda mensagem é enviada com a finalidade de se inscrever para recebimento dos dados de ataque de todo mundo, esta mensagem tem o conteúdo - 0{“event00 :

“#subscribe00, “data00 : {“channel00: “global00}, “cid00 : 2}0.

Se tudo correr bem o servidor responde com a mensagem - “rid”:2 - e assim confirmando que o handshake foi bem sucedido. Após essa mensagem os dados de ataque começam a ser enviados. A cada mensagem recebida a função on_message é chamada e trata o dado recebido o armazenando no banco de dados local.

A cada dois segundos em média uma mensagem de ping é enviada pelo servidor para verificar se o cliente da conexão ainda se encontra ativo. Essa mensagem tem o conteúdo - #1. Quando essa mensagem é recebida o programa deve enviar uma mensagem especial de pong com o conteúdo - #2, informando assim que ele continua ativo e aguardando por novas mensagens.

Caso a mensagem de pong não seja recebida pelo servidor em no máximo dez segundos a conexão é encerrada por ele. Quando isso acontece a função on_close é chamada do lado do cliente, finalizando assim a conexão com o servidor e também com o banco de dados local.

O programa foi desenvolvido para executar de forma constante e ininterrupta. Assim sempre que a conexão com o servidor é perdida o programa busca reestabelecê-la o mais rápido possível. Um processo de monitoramento garante que tanto o programa de captura de dados quanto o banco de dados estão sempre executando.

Os dados recebidos por essa fonte de dados são pré-processados pela empresa e limi- tados. A Tabela 3.1 trás um resumo dos dados que são armazenados no banco de dados acompanhados de exemplos de valores. Através da observação dos dados foi possível obter algumas informações iniciais como a existência de dados redundantes como por exemplo o dport e o svc que sempre possuem sempre o mesmo valor. O vector_id e type só tem significado quando utilizados dentro da página da empresa pois são utilizado durante as funções de desenho do mapa.

Mesmo assim todos os dados são armazenados no banco por completude.

Um ponto importante que foi considerado após a implantação do programa no am- biente de execução, foi quantos dados ele poderia processar e armazenar em um período definido de tempo, ou seja qual a vazão de captura da ferramenta. Analisando os dados colhidos durante seis meses é possível afirmar que a ferramenta possuí uma vazão de em média 330 mil dados de ataques capturados e armazenados por dia.

Como não foram coletados dados de outras fontes para comparação, essa vazão foi considerada adequada e representa uma grande massa de dados para processamento.

Tabela 3.1: Descrição dos dados capturados da empresa NorseCorp

Nome Dado Descrição Exemplo

_id Identificador único do objeto no banco de dados ObjectId("58d1bbbfe2e558522a"), city Cidade de origem do ataque Washington

city2 Cidade onde o alvo do ataque reside De Kalb Junction dport Porta em que o ataque foi executado 25

countrycode Código do país de origem do ataque US countrycode2 Código do país do alvo US country Identificação do país de origem do ataque US country2 Identificação do país do alvo US latitude Latitude aproximada da origem do ataque 38.95 longitude Longitude aproximada da origem do ataque -77.02 latitude2 Latitude aproximada do alvo 44.48 longitude2 Longitude aproximada do alvo -75.3 svc Serviço explorado pelo ataque 25

timestamp Data e hora no momento da captura do dado 2017-03-21 23:48:15.161973 vector_id Informação encaminhada pelo servidor

para desenho em tela de animação NumberLong("303241862584") org Organização que detêm o bloco de endereços

de IP o qual originou o ataque Microsoft Corporation type Informação sobre a ferramenta da empresa

que capturou a informação do ataque ipviking.honey md5 Número de IP da máquina que enviou o ataque 65.55.169.250

Documentos relacionados