Introdução

Atuamente é comum falar-se em tráfego web malicioso, botnets, C&C Servers, APIs maliciosas na Cloud, aplicações vulneráveis, malware, bom, extingue-se o sol e não há tempo suficiente de forma a enumerar os problemas sem solução dentro do domínio da segurança informática. Este artigo propõe um mecanismo de geração de tráfego web benigno e maligno baseado numa distribuição matemática designada por distribuição exponencial [1]. A segunda parte do artigo exemplifica uma forma breve de recorrer a técnicas de machine learning, p.ex., redes neuronais, de forma a treinar, testar e classificar tráfego web potencialmente malicioso.

Uma das maiores dificuldades no que toca à gestão de redes de computador é a identificação e análise de tráfego malicioso. Hoje em dia existe um grande número de botnets que através de protocolos criptográficos, ofuscação, etc., dificultam a  identificação de tráfego desta linha tanto ao nível dos dispositivos de rede, como é o caso de firewalls, como no domínio da análise passiva ou ativa de tráfego, p.ex., os Network Intrusion Detector Systems (NIDS). Este tipo de redes assentam normalmente sobre um protocolo de comunicação peer-to-peer (p2p) ou cliente-servidor, e baseiam-se no princípio apresentado pelo esquema abaixo.

botnetA rede é constituída por um conjunto de nós (computadores) infetados que são orquestrados por um nó central designado no jargão da segurança informática por Command-and-Control Server (C&C Server). Como ilustrado na imagem, pode haver um ou mais nós a desempenhar esta função, tudo depende da forma como este tipo de rede é desenhada e implementada. Também existe um nó na rede designado botmaster, com a função de gestão da rede maliciosa (gestor da rede maliciosa, bad guy). Tipicamente, o orquestrador é hospedado na Cloud, uma vez que é uma peça fundamental neste tipo de arquitetura e deve ter uma taxa de disponibilidade de aproximadamente 100%.

O presente artigo está organizado da seguinte forma e pretende responder aos seguintes tópicos:

  • Como construir um simulador de tráfego web: – onde são descritos alguns dos passos fundamentais do processo;
  • Como simular tráfego botnet (malicioso); e
  • Treino, Teste e Classificação de tráfego malicioso através de uma rede neuronal.

 

Como construir um simulador de tráfego web

Tráfego web é tipicamente constituído por pacotes com diferentes tamanhos, todavia o seu tamanho possui um comportamento muito particular e semelhante, p.ex., quando consultamos uma página web desportiva ou o Facebook, se for efetuada uma análise aos pacotes trocados entre ambas as entidades, existe uma relação muito próxima relativa ao seu tamanho. Porém, existem casos distintos, por exemplo quando é feito o download  de um filme o ficheiro não possui apenas alguns megabytes mas sim uns gigabytes. Devido a este simples principio a função exponencial [1] é uma distribuição ideal para a geração deste tipo de tráfego.

A fórmula matemática desta função é dada pelo seguinte:

1, onde lambda representa o valor da curva da função e F(x) um intervalo de valores entre [-1,1].

test

O objetivo da função explanada anteriormente é gerar uma pilha de informação semelhante à ilustrada na imagem acima. Para isso são necessárias duas distribuições exponenciais, a primeira para geração do período de tempo em que o pedido é despoletado, e a segunda para simular o tamanho do pedido. Uma forma mais elaborada de perceber o cenário aqui proposto é a imagem ilustrada de seguida.

Untitled DiagramA primeira função exponencial, representada pela caixa Exp(1), é parametrizada com o parâmetro lambda=60. Isto quer dizer que, em média, vai gerar um valor de 60 em 60 segundos. A função exponencial representada como Exp(2), tem um valor lambda assignado com o  valor 10, neste caso vai gerar o tamanho dos pacotes com média=10. Os valores gerados por cada uma das funções propriamente ditas são aleatórios, para o primeiro caso, a função debitou o valor 54, isto representa que o 1º. pedido aconteceu aos 54 segundos, e possui um tamanho de 14 Kilobytes. O processo base é o seguinte, a cada iteração é gerado um pedido/pacote web, portanto, o próximo passo será a implementação de um ciclo iterativo e gerar uma larga quantidade de tráfego web. Em seguida, é deixado o snippet de código usado para atingir o objetivo proposto.

require 'distribution'

@queue=[]

def expDistribution mean
  lambda = mean**-1
  rng = Distribution::Exponential.rng(lambda)
  rng.call
end


def simulator
  request = expDistribution 60.0
  length  = expDistribution 10.0
  
  if [email protected]?
      [email protected][:total]
      @queue << {:request => request, :length => length, :total => (aux+request), :kb => rand(2048)}
  else
      @queue << {:request => request, :length => length, :total => (request),:kb => rand(2048)}
  end
  
end


def drawGraph queue, labely
  queue.each do |t|
    max=t[:length].to_i

    print "#{t[:total].round(2)} (s)\t| "
    for i in 0 .. max
      print "*"
    end

    if labely
      print "\t#{t[:length].round(2)}\n"
    else
      print "\n"
    end
  end
end


for i in 1..100
  simulator
end

drawGraph @queue, false

De notar que, dentro da função simulator, quando o pedido é atribuído à lista de hashs @queue, é também definido um campo kb, que representa um campo randómico com o tamanho em Kilobytes do pedido. Este campo vai ser importante adiante, para a construção dos datasets da rede neuronal. O campo total representa o somatório dos pedidos, i.e., permite construir a linha temporal onde cada pedido é gerado no gráfico.

Como simular tráfego botnet (malicioso/maligno)

Tráfego web malicioso é um tipo de tráfego de rede de difícil análise e captura. Para a geração deste tipo de tráfego convém deixar bem presente a seguinte premissa: tráfego malicioso do tipo botnet deve ter um comportamento mais ou menos constante e o tamanho dos pedidos deve ser menor em comparação com outro tipo de tráfego web e deve comportar um tamanho idêntico. Bom, parece um abuso de linguagem fazê-lo, mas tipicamente um bot neste tipo de redes limita-se a enviar e receber pacotes, por exemplo de 10 em 10 minutos e de acordo com a tipologia e desenho da rede, que no fundo consistem em simples mensagens de conetividade e acknowledge. Desta forma, o orquestrador comunica com os nós adjacentes da rede. A imagem seguinte ilustra o cenário aqui explanado.

botnetA imagem apresenta tráfego gerado por aplicações comuns na rede, como o exemplo entregue acima, e denotado com o marcador “*” está ilustrado tráfego potencialmente de uma botnet, com um comportamento mais constante e com um tamanho dos pacotes mais ou menos genérico durante o seu período de vida na rede.

Partindo do princípio e de acordo com a premissa estabelecida acima, o seguinte snippet de código implementa o gerador para tráfego desta linha.

def simulator
  request = expDistribution (60.0*5)
  length  = expDistribution 1.0
  
  if [email protected]?
      [email protected][:total]
      @queue << {:request => request, :length => length, :total => (aux+request), :kb => rand(500)}
  else
      @queue << {:request => request, :length => length, :total => (request),:kb => rand(500)}
  end
  
end

Depois de alguma alterações, como os parâmetros das distribuições e o tamanho em kb dos pedidos, o simulador gerou uma pilha de tráfego exibida na imagem abaixo.

test_bot

Neste momento o simulador possui a capacidade de geração de tráfego web maligno e benigno. A próxima parte do artigo apresenta de forma breve os passos basilares para treinar, testar e classificar este tipo de tráfego através de uma rede neuronal.

Treino, Teste e Classificação de tráfego malicioso através de uma rede neuronal

Para classificar este tipo de dados através de uma rede neuronal é preciso ter em mente que é necessário definir datasets para o treino da rede. Dessa forma, uma das tarefas iniciais é a definição das classes de informação a manter nos datasets. Para isso, foi apontado o tamanho dos pacotes e a entropia dos mesmos durante um período de tempo igual a 10 minutos. I.e., foi gerado tráfego durante 2 horas, e a cada 10 minutos era feito o somatório do tamanho dos pedidos durante esses 10 minutos, e o mesmo acontece para a entropia dos valores. De notar que, a entropia é calculada através da seguinte formula matemática:

entropy

Depois do calculo da soma da entropia para o tráfego benigno e maligno, e da geração de dois ficheiros do tipo CSV com esses dados, pode ser feita a combinação dos diferentes dados num ficheiro final, chamado treino.csv. A seguinte tabela apresenta um excerto dos registos catalogados nesses dois ficheiros.

table

Seguidamente, pode ser usada a aplicação WEKA [2] que possui uma panóplia de técnicas de processamento de dados e machine learning, nomeadamente uma rede neuronal denominada MultiLayerPercetron, onde é possível configurar de entre muitos parâmetros, o números de épocas da rede neuronal, o número de níveis e uma funcionalidade bastante importante dentro deste contexto, a possibilidade de repartir o conjunto de treino em dois grupos, conjunto de treino + teste. Para tal, foi definida uma percentagem do conjunto de 75% para treino, e 25% para teste (de um total de 2318 artefactos).

weka

Depois da definição dos parâmetros de inicialização da rede, esta não demora mais que alguns minutos a correr. O reporte de resultados é exibido em seguida.

report

Através da rede foi obtida uma classificação ótima do conjunto de teste, com 100% de certeza nos resultados. É possível verificar através dos resultados que o erro absoluto é de 0.0015, e a precisão de 100%. Foram classificados como benignos 296 requests e 283 como malignos. Uma forma de evidenciar e potenciar a eficácia destes métodos de classificação é a seguinte imagem.

graph

Durante o teste, a rede neuronal gerou dois clusters perfeitos com o tráfego potencialmente maligno e benigno, formando duas áreas bastante distintas. Este detalhe denota a capacidade deste tipo de classificadores na resolução deste tipo de problemas da área da segurança da informação. No entanto, e como é evidente, existe uma desigualdade na entropia e tamanho dos dados, bem presente na tabela apresentada acima. Este facto resulta da inexistência de samples de tráfego malicioso aquando da preparação deste cenário. Foi portanto necessário estabelecer uma premissa, “o tráfego botnet tipicamente possui um comportamento mais constante que outro tipo de tráfego mais comum“.

No entanto, o principal objetivo deste artigo foi exemplificar qual a potencialidade deste tipo de mecanismos de machine learning dentro do domínio da segurança informática. Não é certamente uma solução, mas um campo de estudo importante dentro deste paradigma de análise e deteção de tráfego malicioso botnet.

Referências

[1] https://en.wikipedia.org/wiki/Exponential_distribution

[2] http://www.cs.waikato.ac.nz/ml/weka/downloading.html