UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA E
INFORMÁTICA INDUSTRIAL
ANDRÉ LUIZ PEREIRA DE FRANÇA
ESTUDO, DESENVOLVIMENTO E IMPLEMENTAÇÃO DE
ALGORITMOS DE APRENDIZAGEM DE MÁQUINA, EM
SOFTWARE E HARDWARE, PARA DETECÇÃO DE INTRUSÃO DE
REDE: UMA ANÁLISE DE EFICIÊNCIA ENERGÉTICA
DISSERTAÇÃO
CURITIBA
2015
ANDRÉ LUIZ PEREIRA DE FRANÇA
ESTUDO, DESENVOLVIMENTO E IMPLEMENTAÇÃO DE
ALGORITMOS DE APRENDIZAGEM DE MÁQUINA, EM
SOFTWARE E HARDWARE, PARA DETECÇÃO DE INTRUSÃO DE
REDE: UMA ANÁLISE DE EFICIÊNCIA ENERGÉTICA
Dissertação apresentada ao Programa de Pósgraduação em Engenharia Elétrica e Informática
Industrial da Universidade Tecnológica Federal do
Paraná como requisito parcial para obtenção do grau
de “Mestre em Ciências” – Área de Concentração:
Engenharia de Automação e Sistemas.
Orientador:
Prof. Dr. Volnei Antonio Pedroni
Coorientador: Dr. Ricardo Pereira Jasinski
CURITIBA
2015
Dados Internacionais de Catalogação na Publicação
F814e
2015
França, André Luiz Pereira
Estudo, desenvolvimento e implementação de algoritmos de
aprendizagem de máquina, em software e hardware, para detecção
de intrusão de rede : uma análise de eficiência energética /
André Luiz Pereira de França.-- 2015.
100 f.: il.; 30 cm
Texto em português, com resumo em inglês.
Dissertação (Mestrado) - Universidade Tecnológica Federal
do Paraná. Programa de Pós-Graduação em Engenharia Elétrica e
Informática Industrial, Curitiba, 2015.
Bibliografia: f. 97-100.
1. Sistemas de detecção de intrusão (Segurança do
computador). 2. Aprendizado do computador. 3. Árvores de
decisão. 4. Algoritmos computacionais. 5. Software –
Desenvolvimento. 6. Hardware - Avaliação. 7. Redes de
Computação - Medidas de segurança. 8. Métodos de simulação. 9.
Energia - Consumo. 10. Engenharia elétrica - Dissertações. I.
Pedroni, Volnei A. (Volnei Antonio), orient. II. Jasinski,
Ricardo Pereira, coorient. III. Universidade Tecnológica
Federal do Paraná - Programa de Pós-Graduação em Engenharia
Elétrica e Informática Industrial. IV. Título.
CDD 22 -- 621.3
Biblioteca Central da UTFPR, Câmpus Curitiba
AGRADECIMENTOS
Agradeço primeiramente à Santı́ssima Trindade: Deus Pai, Filho e Espı́rito Santo, por
me iluminar em cada decisão tomada até hoje e por sempre me mostrar o caminho certo a seguir.
Aos meus pais, Evaldo e Adilma, e às três Marias pelo incentivo, apoio e carinho.
À Taisa Costa pelo companheirismo ao longo do mestrado.
Ao meu orientador Prof. Dr. Volnei Pedroni pelo conhecimento técnico transmitido e
pela oportunidade de fazer parte da equipe do Laboratório de Microeletrônica da UTFPR.
Ao meu coorientador Dr. Ricardo Jasinski pela ajuda nas implementações e testes dos
algoritmos desenvolvidos ao longo do trabalho.
Ao colega de pesquisa MSc. Paulo Cemin pelo desenvolvimento da plataforma de
medição de consumo utilizada como ferramenta neste trabalho.
Aos colegas de pesquisa Prof.
Dr.
Altair Santin e Eduardo Viegas pelo
desenvolvimento do cenário de rede e do algoritmo de extração de caracterı́sticas, descritos
na seção 3.1 e pela realização das tarefas de seleção de caracterı́sticas descritas no inı́cio das
seções 4.1, 5.1 e 6.1 deste documento.
Aos colegas Diego Reis e José Galvão pela troca de experiências e conhecimentos nas
disciplinas cursadas.
À secretária do CPGEI Denise Erthal por responder, de prontidão, todas as perguntas
que fiz sobre o programa de mestrado.
Aos membros da banca avaliadora desta dissertação, professores Volnei Pedroni, Altair
Santin e André Mariano, pela revisão do documento e pelas sugestões de correções e melhorias,
que engrandeceram ainda mais o trabalho.
À Intel por promover, através de seu University Research Office, o projeto de pesquisa
e desenvolvimento do qual esta dissertação é resultado.
À Capes pelo apoio financeiro através da concessão da bolsa DS durante 12 meses.
Ao CNPq pelo apoio financeiro através da concessão da bolsa DTC durante 12 meses.
RESUMO
FRANÇA, André Luiz Pereira de. Estudo, Desenvolvimento e Implementação de Algoritmos
de Aprendizagem de Máquina, em Software e Hardware, para Detecção de Intrusão de Rede:
Uma Análise de Eficiência Energética. 2015. 100 f. Dissertação (Mestrado em Engenharia
Elétrica e Informática Industrial) – Programa de Pós-graduação em Engenharia Elétrica e
Informática Industrial, Universidade Tecnológica Federal do Paraná. Curitiba, 2015.
O constante aumento na velocidade da rede, o número de ataques e a necessidade de eficiência
energética estão fazendo com que a segurança de rede baseada em software chegue ao seu
limite. Um tipo comum de ameaça são os ataques do tipo probing, nos quais um atacante
procura vulnerabilidades a partir do envio de pacotes de sondagem a uma máquina-alvo. Este
trabalho apresenta o estudo, o desenvolvimento e a implementação de um algoritmo de extração
de caracterı́sticas dos pacotes da rede em hardware e de três classificadores de aprendizagem
de máquina (Árvore de Decisão, Naive Bayes e k-vizinhos mais próximos), em software e
hardware, para a detecção de ataques do tipo probing. O trabalho apresenta, ainda, resultados
detalhados de acurácia de classificação, taxa de transferência e consumo de energia para cada
implementação.
Palavras-chave: Detecção de Intrusão de Rede. Ataques Probing. Aprendizagem de Máquina.
Árvore de Decisão. Naive Bayes. KNN. Eficiência Energética.
ABSTRACT
FRANÇA, André Luiz Pereira de. Study, Development and Implementation of Machine
Learning Algorithms, in Software and Hardware, for Network Intrusion Detection: an Energy
Efficiency Analysis. 2015. 100 f. Dissertação (Mestrado em Engenharia Elétrica e Informática
Industrial) – Programa de Pós-graduação em Engenharia Elétrica e Informática Industrial,
Universidade Tecnológica Federal do Paraná. Curitiba, 2015.
The increasing network speeds, number of attacks, and need for energy efficiency are pushing
software-based network security to its limits. A common kind of threat is probing attacks, in
which an attacker tries to find vulnerabilities by sending a series of probe packets to a target
machine. This work presents the study, development, and implementation of a network packets
feature extraction algorithm in hardware and three machine learning classifiers (Decision Tree,
Naive Bayes, and k-nearest neighbors), in software and hardware, for the detection of probing
attacks. The work also presents detailed results of classification accuracy, throughput, and
energy consumption for each implementation.
Keywords: Network Intrusion Detection. Probing attacks. Machine Learning. Decision Tree.
Naive Bayes. KNN. Energy Efficiency.
LISTA DE FIGURAS
FIGURA 1
FIGURA 2
FIGURA 3
FIGURA 4
FIGURA 5
FIGURA 6
FIGURA 7
FIGURA 8
FIGURA 9
FIGURA 10
FIGURA 11
FIGURA 12
FIGURA 13
FIGURA 14
FIGURA 15
FIGURA 16
FIGURA 17
FIGURA 18
FIGURA 19
FIGURA 20
FIGURA 21
FIGURA 22
FIGURA 23
FIGURA 24
FIGURA 25
FIGURA 26
FIGURA 27
FIGURA 28
FIGURA 29
FIGURA 30
FIGURA 31
FIGURA 32
FIGURA 33
FIGURA 34
FIGURA 35
FIGURA 36
FIGURA 37
FIGURA 38
FIGURA 39
FIGURA 40
FIGURA 41
FIGURA 42
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
Divisão de um IDS quanto ao tipo e técnica de detecção . . . . . . . . . . . . . . . .
Etapas da Aprendizagem de Máquina num exemplo da literatura . . . . . . . . .
Histograma para a caracterı́stica comprimento do exemplo . . . . . . . . . . . . . .
Histograma para a caracterı́stica luminosidade do exemplo . . . . . . . . . . . . . .
Plano para as caracterı́sticas luminosidade e largura do exemplo . . . . . . . . .
Exemplo de uma Árvore de Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemplo gráfico da classificação pelo kNN . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Campos do cabeçalho IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Campos do cabeçalho UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Campos do cabeçalho ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Campos do cabeçalho TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cenário para geração de tráfego normal e de ataque . . . . . . . . . . . . . . . . . . . .
Montagem da chave da hash que acessa as linhas da tabela de atributos . . .
Células da tabela a serem consideradas para se obter o valor dos atributos
Fluxograma simplificado do extrator de caracterı́sticas . . . . . . . . . . . . . . . . . .
Ambiente para avaliação dos algoritmos em software . . . . . . . . . . . . . . . . . . .
Plataforma usada para medição do consumo energético em software . . . . .
Diagrama em blocos do extrator de caracterı́sticas em hardware . . . . . . . . .
Memória RAM que armazena os atributos dependentes da comunicação . .
Módulo de atualização das linhas da memória de atributos . . . . . . . . . . . . . .
Módulo de zeramento das células a serem apagadas da tabela de atributos
Módulo de controle do extrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Máquina de estados que controla o extrator de caracterı́sticas . . . . . . . . . . . .
Kit com FPGA Cyclone IV GX para avaliação dos algoritmos em hardware
Circuito para medição do consumo do extrator em hardware . . . . . . . . . . . .
Árvore de Decisão para detecção de probing . . . . . . . . . . . . . . . . . . . . . . . . . . .
Implementação em hardware da Árvore de Decisão . . . . . . . . . . . . . . . . . . . .
Circuito para estimação da taxa de transferência dos classificadores . . . . . .
Circuito para medição do consumo dos classificadores em hardware . . . . .
Máquina de estados que controla o circuito de medição dos classificadores
Modelo Naive Bayes para detecção de probing . . . . . . . . . . . . . . . . . . . . . . . . .
Fluxograma do Naive Bayes para detecção de probing em software . . . . . .
Implementação combinacional do Naive Bayes em hardware . . . . . . . . . . . .
Implementação sequencial do Naive Bayes em hardware . . . . . . . . . . . . . . .
Fluxograma do kNN para detecção de probing em software . . . . . . . . . . . . .
Implementação do kNN em hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuito do Normalizador do kNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuito do Calculador de Distância do kNN . . . . . . . . . . . . . . . . . . . . . . . . . . .
Energia gasta na extração em hardware para diferentes frequências . . . . . .
Consumo de potência pelo no de classificadores em 50 MHz . . . . . . . . . . . .
Energia gasta na classificação em software e hardware (em 50 MHz) . . . . .
Energia gasta na classificação em hardware para diferentes frequências . .
19
24
24
25
25
26
30
33
33
33
33
40
44
45
46
48
49
51
52
53
54
55
55
57
57
60
62
63
64
66
68
71
73
74
78
79
80
81
86
92
93
94
LISTA DE QUADROS
QUADRO 1
QUADRO 2
QUADRO 3
QUADRO 4
QUADRO 5
QUADRO 6
QUADRO 7
QUADRO 8
–
–
–
–
–
–
–
–
Atributos dos pacotes considerados no banco de dados KDD 99 . . . . . . . .
Atributos extraı́dos diretamente do cabeçalho de cada pacote . . . . . . . . . . .
Atributos extraı́dos a partir da comunicação entre hosts . . . . . . . . . . . . . . . .
Como cada atributo do cabeçalho dos pacotes é extraı́do . . . . . . . . . . . . . . .
Como cada atributo dependente da comunicação é atualizado . . . . . . . . . .
Atributos selecionados para detecção de probing pela Árvore de Decisão
Atributos selecionados para detecção de probing pelo Naive Bayes . . . . .
Atributos selecionados para detecção de probing pelo kNN . . . . . . . . . . . .
32
41
42
43
47
60
67
77
LISTA DE TABELAS
TABELA 1
TABELA 2
TABELA 3
TABELA 4
TABELA 5
TABELA 6
TABELA 7
TABELA 8
TABELA 9
TABELA 10
TABELA 11
–
–
–
–
–
–
–
–
–
–
–
Probabilidades para o atributo udp sport na implementação do Naive Bayes
Área utilizada pelo extrator de caracterı́sticas implementado em hardware
Taxa de transferência dos extratores em software e hardware . . . . . . . . . . . .
Energia consumida na operação de extração em software e hardware . . . . .
Matriz de confusão para o classificador Árvore de Decisão . . . . . . . . . . . . . .
Matriz de confusão para o classificador Naive Bayes . . . . . . . . . . . . . . . . . . . .
Matriz de confusão para o classificador kNN . . . . . . . . . . . . . . . . . . . . . . . . . . .
Acurácia dos classificadores sobre a base de testes . . . . . . . . . . . . . . . . . . . . . .
Área utilizada pelos classificadores implementados em hardware . . . . . . . .
Taxa de transferência dos classificadores implementados . . . . . . . . . . . . . . . .
Energia consumida pelos classificadores implementados . . . . . . . . . . . . . . . .
70
84
85
85
87
88
88
88
89
90
92
LISTA DE SIGLAS
A/D
ARFF
DAQ
DoS
FIFO
FPGA
HIDS
ICMP
ID3
IDPS
IDS
IP
kNN
LED
NIDS
PCAP
PLL
R2L
RAM
ROM
SoC
SVM
TCP
U2R
UDP
USB
Analógico/Digital
Attribute-Relation File Format
Data AcQuisition
Denial of Service
First In First Out
Field-Programmable Gate Array
Host-based Intrusion Detection System
Internet Control Message Protocol
Iterative Dichotomiser 3
Intrusion Detection and Prevention System
Intrusion Detection System
Internet Protocol
k-Nearest Neighbors
Light-Emitting Diode
Network-based Intrusion Detection System
Packet CAPture
Phase-Locked Loop
Remote to Local
Random Access Memory
Read-Only Memory
System-on-a-Chip
Support Vector Machine
Transmission Control Protocol
User to Root
User Datagram Protocol
Universal Serial Bus
SUMÁRIO
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1 MOTIVAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2 Objetivos Especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 ESTRUTURA DA DISSERTAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 REVISÃO DE LITERATURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1 SISTEMA DE DETECÇÃO DE INTRUSÃO (IDS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Detecção Baseada em Assinatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Detecção Baseada em Anomalia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 APRENDIZAGEM DE MÁQUINA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Extração de Caracterı́sticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.2 Classificador Árvore de Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.3 Classificador Naive Bayes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.4 Classificador k-Vizinhos Mais Próximos (kNN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 APRENDIZAGEM DE MÁQUINA PARA DETECÇÃO DE INTRUSÃO . . . . . . . . .
2.3.1 Aplicações de Extração de Caracterı́sticas em Software e Hardware . . . . . . . . . . . . . .
2.3.2 Aplicações de Árvore de Decisão em Software e Hardware . . . . . . . . . . . . . . . . . . . . . .
2.3.3 Aplicações de Naive Bayes em Software e Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.4 Aplicações de kNN em Software e Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 DESENVOLVIMENTO DO EXTRATOR DE CARACTERÍSTICAS . . . . . . . . . . .
3.1 IMPLEMENTAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 AVALIAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 IMPLEMENTAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 AVALIAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 DESENVOLVIMENTO DA ÁRVORE DE DECISÃO . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 IMPLEMENTAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 AVALIAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 IMPLEMENTAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 AVALIAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 DESENVOLVIMENTO DO NAIVE BAYES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1 IMPLEMENTAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 AVALIAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 IMPLEMENTAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Versão Combinacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.2 Versão Sequencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 AVALIAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 DESENVOLVIMENTO DO KNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1 IMPLEMENTAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 AVALIAÇÃO EM SOFTWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 IMPLEMENTAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
14
16
16
16
17
18
18
20
21
22
23
26
28
29
31
31
35
36
37
39
39
48
50
56
59
59
61
62
63
67
67
72
72
72
73
75
76
76
79
79
6.4 AVALIAÇÃO EM HARDWARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1 EXTRATOR DE CARACTERÍSTICAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.1 Área do Circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.2 Taxa de Transferência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.3 Consumo de Energia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 CLASSIFICADORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1 Acurácia de Classificação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.2 Área dos Circuitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.3 Taxa de Transferência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.4 Consumo de Energia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 PUBLICAÇÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
84
84
84
85
85
86
87
89
90
91
94
95
97
13
1
INTRODUÇÃO
Com o uso difundido da internet e surgimento diário de novas ameaças na grande rede,
torna-se fundamental a aplicação de sistemas de proteção. Um destes sistemas é o chamado
Sistema de Detecção de Intrusão (IDS). Dentre as classes de IDS, há o Sistema de Detecção
de Intrusão de Rede (NIDS), cuja finalidade é detectar possı́veis intrusões (ataques) a partir da
análise dos pacotes de rede (CORONA et al., 2013). Em caso de detecção de uma ameaça, um
alarme é gerado para o administrador de rede.
Um tipo comum de ameaça são os ataques do tipo probing, nos quais um atacante
envia pacotes de sondagem para uma máquina-alvo, na tentativa de encontrar portas abertas e
identificar serviços para, assim, explorar possı́veis vulnerabilidades. Os ataques do tipo probing
são executados com ferramentas farejadoras (sniffers) de rede e escaneadoras (scanners) de
portas (PUKKAWANNA et al., 2014). Geralmente os ataques do tipo probing precedem outros
tipos de ataque, então a detecção de tentativas de intrusão nessa fase inicial pode prevenir
ataques mais graves.
Quanto à técnica de detecção, um NIDS pode ser classificado em duas categorias:
baseado em assinatura e baseado em anomalia. A técnica de detecção por assinatura procura
por padrões de ataques conhecidos nos pacotes de rede. Por exemplo, os bytes do pacote podem
ser analisados em busca de ataques, combinação estranha de flags e tentativas de acesso não
autorizadas. O NIDS baseado em assinatura possui baixa taxa de alarmes falsos, pois procura
por padrões adicionados em seu banco de dados. Entretanto, não é possı́vel detectar novos tipos
de ataques (GARCÍA-TEODORO et al., 2009).
A técnica de detecção por anomalia consiste em capturar comportamentos que desviam
do comportamento normal da rede. Esse método se utiliza de dados de entrada para treinamento
e construção de um modelo padrão de comportamento. Quando alguma atividade na rede é
classificada como anormal, um alarme é gerado. Embora o NIDS baseado em anomalia possa
detectar novos ataques, há a possibilidade de que um alarme gerado seja falso (TSAI et al.,
2009). Apesar dessa desvantagem, como a rede sempre está sujeita a novas ameaças, a detecção
14
por anomalia é importante para NIDS. O desafio se encontra no projeto de um bom classificador
que deve possuir acurácia e baixa taxa de alarmes falsos.
A detecção por anomalia pode fazer uso de técnicas de Aprendizagem de Máquina.
Tais técnicas são comumente utilizadas para descobrir modelos de comportamento a partir de
um conjunto de dados de treinamento. As aplicações de Aprendizagem de Máquina utilizam
classificadores, que são funções que mapeiam dados em classes. Nesse caso, o NIDS pode,
então, classificar um evento como normal ou malicioso a partir de caracterı́sticas do próprio
evento (BRUGGER, 2004). Alguns exemplos de classificadores são: Árvore de Decisão, Naive
Bayes, k-Vizinhos Mais Próximos (kNN, do inglês k-Nearest Neighbors), Máquina de Vetor de
Suporte (SVM, do inglês Support Vector Machine) e Redes Neurais Artificiais.
A geração e o uso de um classificador são dois estágios separados. O estágio de
treinamento usa um conjunto de dados de treinamento e um algoritmo gerador do modelo.
Nessa fase são escolhidas as caracterı́sticas dos dados de entrada a serem examinadas e obtido
o modelo do classificador. No caso do NIDS, as caracterı́sticas são valores obtidos dos pacotes
ou de atividades da rede (WU; BANZHAF, 2010).
O segundo estágio é a classificação.
Nessa fase, executada em tempo real, as
caracterı́sticas são extraı́das de um determinado evento e enviadas para o modelo classificador.
No caso do NIDS, os eventos podem ser classificados em normal ou ataque (WU; BANZHAF,
2010).
1.1
MOTIVAÇÃO
Tradicionalmente, um NIDS é concebido em forma de software, e assim, integrado a
um sistema operacional. Um exemplo é a plataforma Snort, um NIDS de código aberto, que
possui versões para Windows e Unix (ROESCH, 1999).
Entretanto, os sistemas de rede, no geral, incluindo os sistemas de segurança,
enfrentam duas preocupações principais: taxa de transferência e eficiência energética. A
empresa Cisco relatou que o tráfego IP médio em 2013 foi de 158 terabits por segundo e
estimou que esse valor deve quase triplicar até 2018 (CISCO, 2014). Ao mesmo tempo, sistemas
computacionais já respondem por 6% de todo o consumo de energia mundial (SOMAVAT;
NAMBOODIRI, 2011), e dispositivos móveis reforçam a necessidade de aproveitar ao máximo
a energia disponı́vel.
No caso do NIDS, as altas taxas de transferência das redes atuais e o crescimento do
número de ataques impedem a análise de ameaças em tempo real (WU; BANZHAF, 2010).
15
Uma abordagem promissora para melhorar a taxa de transferência e a eficiência
energética de sistemas de rede é mover algoritmos de software para hardware. Usando circuitos
dedicados, tarefas que necessitam de muitas instruções em software podem ser realizadas num
único ciclo de clock em hardware. Como não há necessidade de suporte a algoritmos de
uso geral, o hardware resultante pode operar a uma fração do consumo de energia de um
processador genérico.
Para aplicação de NIDS em hardware, porém, um fator importante do software — a
flexibilidade — deve ser levado em consideração. Devido ao aumento na quantidade e variedade
de ameaças, os sistemas de segurança devem possibilitar mecanismos de atualização. Por isso,
implementações em hardware devem ter a caracterı́stica de reconfigurabilidade (CHEN et al.,
2011). Uma alternativa viável para atualização em hardware é usar FPGA.
Outra razão para o uso de hardware é a imunidade às infecções de software. Circuitos
de hardware são difı́ceis de serem modificados sem acesso direto, e podem ser isolados do
ambiente de software.
O uso de NIDS também é promissor em Sistemas em um Chip (SoCs). O número de
SoCs conectados à internet deve chegar a 50 bilhões até 2020 (EVANS, 2011). Uma vez que
SoCs estão associados com mobilidade e bateria, a segurança com eficiência energética é um
tópico importante.
Neste trabalho, serão apresentados os desenvolvimentos, implementações e avaliações
de um extrator de caracterı́sticas dos pacotes de rede em hardware (versão correspondente a um
extrator existente em software) e de três classificadores de Aprendizagem de Máquina (Árvore
de Decisão, Naive Bayes e kNN), em software e hardware, modelados para detecção de ataques
do tipo probing. Serão apresentadas comparações de eficiência energética, taxa de transferência
e acurácia entre as implementações.
Em geral, as ferramentas de NIDS comerciais utilizam a técnica de detecção por
assinatura, para evitar alarmes falsos. Na literatura, técnicas de detecção de intrusão por
anomalia têm sido propostas nos últimos anos.
Para seguir essa tendência, escolheu-se
utilizar algoritmos de Aprendizagem de Máquina nesta dissertação. A comparação entre
implementações de algoritmos em software e hardware também é outra tendência considerada.
Há poucos trabalhos sobre o desenvolvimento de classificadores para detecção de intrusão em
hardware e nenhum que desenvolve e compara esses algoritmos em software e hardware.
Entre os trabalhos que utilizam as técnicas de Aprendizagem de Máquina para detecção
de intrusão, os classificadores mais utilizados são o SVM, a Árvore de Decisão e o kNN (TSAI
16
et al., 2009). Neste trabalho, escolheu-se dois desses classificadores, Árvore de Decisão e kNN,
mais o Naive Bayes, para considerar uma complexidade incremental nas implementações dos
classificadores. O SVM será desenvolvido e implementado futuramente.
O ataque-alvo de detecção escolhido foi o probing, pois este compreende o primeiro
passo do atacante numa intrusão mais grave.
1.2
OBJETIVOS
1.2.1
OBJETIVO GERAL
Desenvolver, implementar e comparar, em software e hardware, algoritmos
necessários ao desenvolvimento de um NIDS baseado em anomalia para detecção de ataques
do tipo probing. Neste trabalho, foram considerados os seguintes algoritmos: um extrator de
caracterı́sticas dos pacotes de rede em hardware (baseado num extrator existente em software,
desenvolvido por Eduardo Viegas e Altair Santin) e três classificadores de Aprendizagem de
Máquina (Árvore de Decisão, Naive Bayes e kNN), em software e hardware, modelados para
detecção de probing.
1.2.2
OBJETIVOS ESPECÍFICOS
• Desenvolver e implementar, em hardware (FPGA), um algoritmo de extração de
caracterı́sticas dos pacotes de rede para detecção de probing, baseado em um extrator
existente em software.
• Desenvolver e implementar, em software e hardware (FPGA), o classificador Árvore de
Decisão para detecção de probing.
• Desenvolver e implementar, em software e hardware (FPGA), o classificador Naive Bayes
para detecção de probing.
• Desenvolver e implementar, em software e hardware (FPGA), o classificador kNN para
detecção de probing.
• Comparar a taxa de transferência e a eficiência energética entre o extrator de
caracterı́sticas existente em software e sua versão correspondente desenvolvida em
hardware.
• Comparar a acurácia de classificação, a taxa de transferência e a eficiência energética
entre as versões em software e hardware dos classificadores.
17
1.3
ESTRUTURA DA DISSERTAÇÃO
Esta dissertação está dividida em oito capı́tulos.
No primeiro capı́tulo foram
apresentados conceitos introdutórios sobre a importância do NIDS para segurança de rede,
técnicas de detecção de intrusão, problemas na implementação de NIDS em software e motivos
para a avaliação de NIDS em hardware.
No segundo capı́tulo será apresentada a revisão de literatura, abordando a
fundamentação teórica das técnicas de detecção de intrusão de rede e das técnicas de
Aprendizagem de Máquina e o estado da arte do uso de Aprendizagem de Máquina para
detecção de intrusão de rede, em software e hardware.
No terceiro capı́tulo será explicado o funcionamento de um extrator de caracterı́sticas
dos pacotes de rede existente em software e apresentada a implementação correspondente desse
extrator em hardware.
Nos quarto, quinto e sexto capı́tulos serão apresentados os desenvolvimentos e
implementações, em software e hardware, dos classificadores Árvore de Decisão, Naive Bayes
e kNN para detecção de probing.
No sétimo capı́tulo serão apresentados os resultados comparativos entre as diferentes
implementações dos algoritmos, incluindo acurácia de classificação, taxa de transferência e
eficiência energética.
Por fim, no capı́tulo oito, as conclusões e trabalhos futuros serão apresentados.
18
2
REVISÃO DE LITERATURA
Neste capı́tulo serão apresentados os conceitos que norteiam a dissertação. Nas seções
2.1 e 2.2 serão expostas, respectivamente, as fundamentações teóricas das técnicas de detecção
de intrusão e de Aprendizagem de Máquina. Na seção 2.3 serão apresentados alguns trabalhos
que usam Aprendizagem de Máquina para detecção de intrusão, em software e hardware.
2.1
SISTEMA DE DETECÇÃO DE INTRUSÃO (IDS)
Um Sistema de Detecção de Intrusão é uma ferramenta que monitora o tráfego de rede
ou as atividades do sistema em busca de tentativas de intrusões. Uma intrusão (frequentemente
também chamada de ataque) pode ser definida como uma atividade maliciosa que viola polı́ticas
de segurança de uma rede (CORONA et al., 2013). Em caso de identificação de tentativa de
intrusão, o IDS envia um alarme para a administração de rede (KIZZA, 2013). O IDS difere
do Sistema de Detecção e Prevenção de Intrusão (IDPS), pois este último detecta e procura
também impedir as tentativas de intrusão.
Quanto ao tipo, um IDS divide-se em IDS baseado em host (HIDS) e IDS baseado em
rede (NIDS), conforme mostra a figura 1. A imagem mostra, ainda, a divisão do IDS quanto
à técnica de detecção: baseado em assinatura e baseado em anomalia. Essas técnicas serão
explicadas mais adiante. Há também outras divisões não apresentadas.
Um HIDS é executado em um dispositivo individual na rede. O sistema monitora
dados do dispositivo, como dados do kernel do Sistema Operacional, arquivos do sistema e
aplicativos (CORONA et al., 2013). O HIDS registra o estado desses dados e compara com o
registro anterior. Se arquivos importantes do sistema foram modificados ou excluı́dos, um sinal
de alerta é enviado ao administrador (KIZZA, 2013).
Um NIDS coleta informações de um ou mais nós da rede, como as interfaces
ou dispositivos (CORONA et al., 2013). O sistema monitora o tráfego que entra em um
determinado dispositivo na rede em busca de intrusões (KIZZA, 2013). O NIDS trabalha em
19
Figura 1: Divisão de um IDS quanto ao tipo e técnica de detecção.
Fonte: Autoria Própria
modo promı́scuo, isto é, analisa todo o tráfego do ponto monitorado. Caso um ataque seja
detectado, um sinal de alerta é enviado ao administrador.
Há diferenças entre o NIDS e o Firewall. O Firewall é configurado com um conjunto
de regras, para permitir ou bloquear acesso a um serviço ou host particular. Independentemente
do conteúdo, o tráfego só é recebido caso condiga com padrões permitidos. Já o NIDS analisa
todos os pacotes da rede, independentemente da origem ser autorizada ou não.
Em geral, os ataques de rede no campo de detecção de intrusão podem ser divididos
em quatro principais categorias (KENDALL, 1999):
• Probes: ataques que visam obter informações sobre o sistema a fim de descobrir possı́veis
vulnerabilidades, ou seja, são utilizados para futuros ataques. Estes ataques incluem
farejamento da rede e escaneamento de portas e endereços. Exemplos: ip sweep, mscan,
nmap, saint e satan.
• Denial of Service (DoS): ataque que faz com que a memória ou algum outro recurso
computacional esteja tão ocupado, ou tão cheio, que não consiga atender os usuários
autorizados. Exemplos: apache2, back, land, mailbomb, syn flood, ping of death, process
table, smurf, syslogd, teardrop e udpstorm.
• User to Root (U2R): ataque no qual o atacante que possui uma conta normal na máquina
consegue obter acesso à conta de administrador, através de alguma vulnerabilidade.
Exemplos: eject, ffbconfig, fdformat, loadmodule, perl, ps e xterm;
• Remote to Local (R2L): ataque em que o objetivo é, a partir de alguma vulnerabilidade,
obter acesso a uma conta na máquina de forma remota. Exemplos: dictionary, ftp-write,
guest, imap, named, phf, sendmail, xlock e xsnoop.
20
Dois dos exemplos de ataques do tipo probing são ip sweep e nmap. No ataque
ip sweep, o atacante monitora a rede para descobrir quais máquinas estão disponı́veis. Isto
geralmente é feito a partir do envio de pacotes ICMP de ping a todos os possı́veis endereços
de uma sub-rede e verificação de quais máquinas respondem. Para detectar esse tipo de ataque,
pacotes de ping enviados a todas as máquinas da rede, vindos de uma mesma origem, podem
ser procurados (KENDALL, 1999).
O nmap é uma ferramenta para escaneamento de portas de uma rede. Assim, por
exemplo, pode ser efetuado um escaneamento para descobrir portas abertas numa determinada
máquina. A ferramenta permite que o usuário especifique quais as portas a serem escaneadas,
o intervalo de tempo entre os escaneamentos e se as portas devem ser escaneadas de forma
sequencial ou de forma aleatória. Um ataque de escaneamento de porta pode ser detectado
a partir da constatação de que pacotes tenham sido enviados a várias portas de uma máquina
dentro de uma janela de tempo (KENDALL, 1999).
2.1.1
DETECÇÃO BASEADA EM ASSINATURA
Quanto à técnica de detecção, um IDS divide-se em baseado em assinatura e baseado
em anomalia. No primeiro, o sistema mantém uma lista de padrões de ataques conhecidos e
monitora os eventos de rede à procura destes padrões (CATANIA; GARINO, 2012).
Uma vantagem do IDS baseado em assinatura é que as ameaças são detectadas
eficientemente e com uma baixa taxa de erros, pois o sistema consulta padrões de ataques
em seu banco de dados. Em compensação, esse sistema não consegue detectar novos tipos
de ataques ou variações dos ataques conhecidos. Além disso, na tentativa de deixar o sistema
atualizado, a lista de ataques conhecidos pode ficar grande de tal maneira que novos ataques
não possam ser incluı́dos.
Como exemplos de assinaturas podem ser citados: uma tentativa de conexão de um
endereço IP reservado e um pacote com combinação ilegal de flags do protocolo TCP. No
primeiro caso, a assinatura pode ser verificada a partir do campo endereço de origem do
cabeçalho IP. No segundo caso, as flags do cabeçalho TCP podem ser comparadas contra
combinações não permitidas previamente conhecidas.
Um dos NIDS mais utilizados comercialmente é o Snort, que detecta intrusões por
assinatura. O programa possui três modos de operação: farejamento, registro de pacote e
detector de intrusão de rede. No modo de farejamento, os pacotes da rede são lidos e mostrados
na tela. No modo de registro de pacote, os pacotes são gravados em disco. No modo de detecção
21
de intrusão, o tráfico é monitorado e comparado contra as assinaturas da ferramenta, podendose identificar diversos tipos de ataques de rede. A ferramenta permite, também, que o usuário
escreva assinaturas ou regras de detecção próprias (SOURCEFIRE, 2014).
2.1.2
DETECÇÃO BASEADA EM ANOMALIA
No IDS baseado em anomalia o objetivo é criar um modelo de comportamento normal
ou de anomalia, para assim classificar cada evento em uma dessas categorias. No caso em que o
comportamento normal é modelado, um alarme é gerado quando um evento desvia em relação
ao modelo. No caso em que o comportamento anômalo é modelado, um alarme é gerado quando
um evento condiz com o modelo (GARCÍA-TEODORO et al., 2009).
Uma vantagem desse sistema é que ataques previamente desconhecidos podem ser
detectados. Em compensação, o IDS baseado em anomalia é suscetı́vel a alarmes falsos, pois
uma ameaça pode ter caracterı́sticas semelhantes às de um evento legı́timo e vice-versa. Um
alarme é dito falso-positivo quando um evento legı́timo é classificado como ameaça, e falsonegativo quando uma ameaça é classificada como evento legı́timo. Há, ainda, as situações de
verdadeiro-positivo, quando uma ameaça é classificada como ameaça e verdadeiro-negativo,
quando um evento legı́timo é classificado como legı́timo.
Um IDS baseado em anomalia é eficiente se as taxas de falso-positivo e falsonegativo são baixas e as taxas de verdadeiro-positivo e verdadeiro-negativo são altas (GARCÍATEODORO et al., 2009). Para garantir a eficiência, o modelo deve ser atualizado sempre que
houver mudanças nas definições de comportamento normal ou de ataque.
Apesar da possibilidade de alarmes falsos, a detecção baseada em anomalia é uma
importante técnica para IDS, porque a rede sempre está exposta a novas ameaças. O desafio
consiste em descobrir fronteiras entre comportamentos normais e anômalos para uma boa
acurácia de classificação (WU; BANZHAF, 2010).
De acordo com o processo de modelagem de detecção, as técnicas de detecção
por anomalia podem ser divididas em três grupos: baseadas em estatı́stica, baseadas em
conhecimento e baseadas em Aprendizagem de Máquina (GARCÍA-TEODORO et al., 2009).
Nas técnicas baseadas em estatı́stica, o modelo de comportamento é criado a partir do
perfil estatı́stico do tráfego de rede. O perfil é construı́do a partir de métricas como a taxa de
tráfego, número de pacotes relativos a um protocolo, taxa de conexões, número de diferentes
endereços IP, etc. Em tempo real, o perfil estatı́stico do tráfego é obtido e comparado com o
perfil previamente traçado. Se o grau de irregularidade de um determinado evento superar um
22
certo limiar, o sistema gera um alarme (GARCÍA-TEODORO et al., 2009).
Uma vantagem das técnicas baseadas em estatı́stica é que um conhecimento prévio
sobre as atividades consideradas normais não é necessário. Uma desvantagem é a dificuldade de
configuração dos parâmetros estatı́sticos. Além disso, o sistema muitas vezes utiliza suposições
estáticas das atividades de rede (GARCÍA-TEODORO et al., 2009).
Nas técnicas baseadas em conhecimento, a classificação dos eventos de rede é feita
a partir de um conjunto de regras, envolvendo três fases. Primeiro, diferentes atributos e
classes são identificados a partir dos eventos de treinamento. Depois, um conjunto de regras,
parâmetros e procedimentos de classificação são deduzidos. Por fim, o evento é classificado.
Por exemplo, o conjunto de regras pode ser especificado manualmente por um especialista,
descrevendo assim o comportamento esperado (GARCÍA-TEODORO et al., 2009).
As técnicas baseadas em conhecimento têm como prós: robustez, flexibilidade e
escalabilidade. E como contras: dificuldade e tempo necessário para se obter conhecimento
sobre os eventos de rede a serem analisados (GARCÍA-TEODORO et al., 2009).
Nas técnicas baseadas em Aprendizagem de Máquina, classificadores podem ser
utilizados para construção de um modelo de comportamento para os eventos de rede, e assim
todo o tráfego pode ser testado usando esse modelo (TSAI et al., 2009). Se o classificador
assinalar o tráfego como ameaça, o sistema deve avisar a gerência de rede. As caracterı́sticas do
tráfego de rede que podem ser avaliadas incluem valores obtidos diretamente do cabeçalho
dos pacotes, como o tipo de protocolo e as flags do cabeçalho TCP, e variáveis de estado
dependentes da comunicação entre origem e destino, como número de bytes trocados (GOGOI
et al., 2012).
Os classificadores de Aprendizagem de Máquina possuem importantes caracterı́sticas,
como adaptabilidade, tolerância a erros e resiliência a ruı́dos (WU; BANZHAF, 2010). Também
são aplicáveis em tarefas de aprendizagem em que não há conhecimento prévio sobre os padrões
a serem classificados (BRUGGER, 2004). Mas são altamente dependentes do modelo gerado, e
consequentemente da qualidade dos dados de treinamento (GARCÍA-TEODORO et al., 2009).
2.2
APRENDIZAGEM DE MÁQUINA
Nesta seção será fundamentada a teoria da Aprendizagem de Máquina, visto que alguns
algoritmos de aprendizagem foram estudados, desenvolvidos e implementados para detecção de
probing no presente trabalho.
23
As técnicas de Aprendizagem de Máquina são usadas para classificar padrões de dados
em categorias ou classes. Para este fim, são utilizados dados de treinamento, previamente
categorizados, para construção de um modelo de aprendizado (classificador). Uma vez gerado
o modelo, novos padrões de dados podem ser classificados (MITCHELL, 1997).
Na fase de aprendizagem, utiliza-se um conjunto de dados de treinamento previamente
rotulados e um algoritmo gerador do modelo. Essa fase pode ser computacionalmente intensa
e a qualidade do conjunto de dados afeta diretamente a qualidade do modelo a ser obtido (WU;
BANZHAF, 2010).
Na fase de classificação, as mesmas caracterı́sticas avaliadas nos exemplos de
treinamento são extraı́das dos novos exemplos a serem classificados. Essas caracterı́sticas são
aplicadas, então, ao classificador para escolha das classes dos novos exemplos.
Em resumo, o ciclo do projeto em Aprendizagem de Máquina é dividido em cinco
etapas: obtenção de dados, escolha das caracterı́sticas, escolha do classificador, treinamento
(aprendizagem) e avaliação de resultados.
2.2.1
EXTRAÇÃO DE CARACTERÍSTICAS
Nesta seção será fundamentada a teoria da extração de caracterı́sticas, etapa preliminar
ao uso de um classificador. No presente trabalho, um algoritmo extrator de caracterı́sticas foi
implementado para detecção de probing.
Para a classificação de padrões por Aprendizagem de Máquina, o primeiro passo é
extrair caracterı́sticas que distinguem bem os padrões. As caracterı́sticas podem ser valores
numéricos e não-numéricos. Um caso clássico da literatura é a separação de duas espécies
de peixes: robalo e salmão (DUDA et al., 2002). Neste caso, uma câmera pode fotografar
os peixes, para que na sequência algumas caracterı́sticas sejam extraı́das. Antes da extração,
porém, é necessária uma etapa de pré-processamento, para isolar os peixes nas imagens. A
figura 2 mostra o arranjo do problema juntamente com as etapas necessárias para classificação.
O objetivo da extração de caracterı́sticas é reduzir a quantidade de dados, descrevendo
as amostras a partir de atributos ou caracterı́sticas. No problema exemplo, podem-se imaginar
algumas caracterı́sticas que diferenciam as duas espécies, como comprimento, luminosidade,
largura, número e forma das nadadeiras e posição da boca. A figura 3 mostra um possı́vel
histograma separando uma quantidade de robalo e salmão por comprimento. Na média, os
robalos parecem maiores que os salmões, porém não há um valor limiar de comprimento que
separe bem as duas classes.
24
Figura 2: Arranjo de um exemplo clássico de Aprendizagem de Máquina: separação de peixes em
salmão e robalo e etapas necessárias para classificação.
Fonte: Duda et al. (2002)
Figura 3: Histograma para a caracterı́stica comprimento para as duas classes.
Fonte: Duda et al. (2002)
Agora, na figura 4, tem-se um histograma separando os peixes por luminosidade.
Percebe-se que essa separação é mais satisfatória que a separação por comprimento. Ainda
assim, não há um valor limiar de luminosidade que separe completamente as duas classes. O
menor número de erros de classificação acontece para x*. Admitindo-se erros de classificação,
esse valor pode ser deslocado para a direita ou esquerda. Deve ser avaliado o custo para o erro,
pois para quem compra um robalo não há muita insatisfação caso o peixe entregue seja um
salmão, mas o caso inverso gera enorme insatisfação, pois o salmão é mais caro.
25
Figura 4: Histograma para a caracterı́stica luminosidade para as duas classes.
Fonte: Duda et al. (2002)
Na procura por outra caracterı́stica, pode-se observar que em geral o robalo é mais
largo que o salmão. Mas, considerando que nenhuma caracterı́stica sozinha separa bem as
classes, pode-se usar mais de uma caracterı́stica. Utilizando vetores do tipo v = (luminosidade,
largura) para descrever os exemplos no espaço bidimensional, obtém-se a figura 5. Pode-se
definir a reta mostrada como a fronteira de decisão, em que todos os pontos abaixo da reta são
classificados como salmão e todos os pontos acima da reta são classificados como robalo.
Figura 5: Salmões e robalos espalhados no plano conforme as caracterı́sticas luminosidade e
largura. A decisão de fronteira escolhida é a reta que melhor separa as duas classes.
Fonte: Duda et al. (2002)
A fronteira de decisão escolhida ainda produz erros de classificação, mas percebe-se
que esta generaliza o problema. Poderia ser escolhida uma fronteira não linear que mudasse
26
suas curvas para separar completamente as duas classes. Porém, o objetivo da aprendizagem é
generalizar a classificação para novos exemplos e não se adaptar completamente aos exemplos
de treinamento (DUDA et al., 2002).
2.2.2
CLASSIFICADOR ÁRVORE DE DECISÃO
Nesta subseção será fundamentada a teoria da Árvore de Decisão, pois este foi o
primeiro classificador desenvolvido e implementado para detecção de probing no presente
trabalho.
A Árvore de Decisão é implementada como um conjunto de regras ‘se-então’ e
classifica um exemplo atravessando uma estrutura em árvore até que uma folha associada a
uma classe seja atingida. Cada nó da árvore testa uma caracterı́stica (atributo) do exemplo a
ser classificado, e cada ramo, partindo de um nó, corresponde a um dos valores possı́veis da
caracterı́stica. Os nós finais são chamados de folhas e correspondem às possı́veis classes. A
Árvore de Decisão deve ser considerada quando o problema-alvo possui instâncias descritas
por um conjunto fixo de atributos com classes de saı́da discretas. (MITCHELL, 1997).
A figura 6 apresenta um exemplo de Árvore de Decisão para classificação de frutas. A
classificação é feita de cima para baixo, começando pela raiz da árvore na qual o atributo cor é
testado. A partir do valor do primeiro atributo, o próximo atributo (tamanho ou forma) é testado
no nó correspondente. Este processo se repete até que uma folha contendo uma das possı́veis
classes da instância seja selecionada: melancia, maçã, uva, banana, toranja, limão ou cereja.
Figura 6: Exemplo de uma Árvore de Decisão para classificação de frutas.
Fonte: Adaptado de Duda et al. (2002)
Um vetor do tipo v = (doce, vermelha, redonda, médio) para as caracterı́sticas (sabor,
cor, forma, tamanho) é classificado como maçã. No primeiro teste, o da cor, é selecionado o
27
terceiro ramo, pois a cor do exemplo a ser classificado é vermelha. O segundo teste, então, é o do
tamanho. Como no exemplo o tamanho é médio, esse é classificado como maçã. Esse simples
exemplo mostra uma das vantagens da Árvore de Decisão com relação a outros classificadores:
a interpretabilidade (DUDA et al., 2002). O modelo é composto por regras que são fáceis de
visualizar e de entender.
O algoritmo básico para a construção do modelo da árvore, a partir de exemplos de
treinamento previamente categorizados, é o ID3 (Iterative Dichotomiser 3). A primeira tarefa
é determinar qual o atributo a ser testado na raiz da árvore. Para isso, cada atributo é avaliado
a partir de um parâmetro estatı́stico — o ganho de informação — para determinar o quão bem
separa as classes dos exemplos de treinamento. O atributo com maior ganho de informação é
escolhido como raiz da árvore. Um nó descendente é então criado para cada valor possı́vel do
atributo raiz e o processo de avaliação dos atributos é repetido (MITCHELL, 1997).
No ID3 é realizada uma busca ‘gulosa’ por uma árvore que se encaixe com os exemplos
de treinamento, na qual o algoritmo nunca reconsidera as escolhas anteriores. Obrigatoriamente
os atributos também devem ter valores discretos para o cálculo do ganho de informação. Uma
evolução do ID3 é o algoritmo C4.5, que permite trabalhar com atributos de valores contı́nuos
(MITCHELL, 1997).
O ganho de informação faz uso de outro parâmetro estatı́stico: a entropia, que
caracteriza a pureza ou impureza de uma coleção aleatória de exemplos. A entropia de um
conjunto de exemplos S com c classes é definida na equação (1), na qual pi é a proporção de
exemplos da classe i em S (MITCHELL, 1997).
c
Entropia(S) = ∑ −pi log2 pi
(1)
i=1
A partir da entropia, pode ser calculado o ganho de informação G(S, A) de um atributo
A, relativo à coleção de exemplos S, conforme a equação (2). Nesta, Valores(A) é o conjunto
de todos os valores possı́veis do atributo A, Sv é o subconjunto de S para o qual A tem valor
v, |Sv | é a quantidade de exemplos de Sv e |S| é a quantidade de exemplos de treinamento de S
(MITCHELL, 1997).
Ganho(S, A) = Entropia(S) −
|Sv |
Entropia(Sv )
|S|
v∈Valores(A)
∑
(2)
A construção da Árvore de Decisão termina após todos os atributos terem sido
considerados nos nós da árvore.
28
2.2.3
CLASSIFICADOR NAIVE BAYES
Nesta subseção será fundamentada a teoria do Naive Bayes, pois este foi o segundo
classificador desenvolvido e implementado para detecção de probing no presente trabalho.
Os algoritmos bayesianos utilizam distribuições de probabilidade para descrever a
relação entre dados e classes. Para a classificação de um novo exemplo, são calculadas
as probabilidades desse pertencer a cada classe e, então, a classe de maior probabilidade
é assinalada.
O conhecimento prévio sobre o problema deve ser aplicado e quando as
probabilidades iniciais não são conhecidas, estes valores devem ser estimados a partir dos
exemplos de treinamento (MITCHELL, 1997). O teorema de Bayes é dado pela equação (3):
P(c|X) =
P(X|c)P(c)
P(X)
(3)
Em que:
• P(c|X) é a probabilidade da classe c dado o vetor X, ou seja, a probabilidade do vetor X
pertencer à classe c;
• P(X|c) é a probabilidade do vetor X dada a classe c, ou seja, a probabilidade do vetor X
existir tendo c como classe;
• P(c) é a probabilidade prévia da classe c, que não depende do vetor X;
• P(X) é a probabilidade prévia do vetor X existir;
Para calcular a classe de maior probabilidade, o denominador pode ser desprezado,
pois é uma constante que independe das classes. Assim, a classe a ser escolhida é dada pela
equação (4), em que c j corresponde às possı́veis classes do problema (MITCHELL, 1997).
c = arg max P(X|c j ) · P(c j )
(4)
O termo P(c j ) é calculado como o número de exemplos da classe c j divido pelo
número total de exemplos de treinamento. O termo P(X|c j ), com X tendo n atributos, é
calculado, para cada classe c j , considerando todas as combinações possı́veis dos diferentes
valores dos n atributos de X. Para simplificar essa condição, o classificador Naive Bayes assume
que os atributos são condicionalmente independentes. Assim, a probabilidade P(X|c j ) pode ser
calculada pelo produto das probabilidades individuais de cada atributo inferindo a classe c j
29
(MITCHELL, 1997). Se o vetor X tem n atributos, a classe escolhida pelo classificador Naive
Bayes é dada pela equação (5).
n
cnb = arg max
!
∏ P(ai|c j )
· P(c j )
(5)
i=1
Na equação, o subscrito nb indica Naive Bayes. Se o atributo ai de um exemplo de
teste tem valor v, o termo P(ai |c j ) é igual à divisão do número de exemplos de treinamento da
classe c j com atributo ai igual a v pelo número total de exemplos de treinamento.
Se os valores dos atributos forem contı́nuos, estes devem ser discretizados antes da
aplicação da equação. Isso é feito a partir da definição de intervalos de variação para os valores
de atributo. Assim, haverá probabilidades para cada intervalo (DUDA et al., 2002).
2.2.4
CLASSIFICADOR K-VIZINHOS MAIS PRÓXIMOS (KNN)
Nesta subseção será fundamentada a teoria do kNN, pois este foi o terceiro
classificador desenvolvido e implementado para detecção de probing no presente trabalho.
Alguns classificadores de Aprendizagem de Máquina, como a Árvore de Decisão e o
Naive Bayes, constroem uma descrição explı́cita da função-alvo de classificação a partir dos
exemplos de treinamento. O mesmo não acontece para os algoritmos baseados em instâncias.
Neste caso, não há construção de um modelo e a etapa de treinamento consiste simplesmente
em armazenar os exemplos de treinamento em memória (MITCHELL, 1997).
O algoritmo baseado em instâncias mais fundamental é o kNN, o qual classifica novas
instâncias a partir do grau de similaridade para com os exemplos de treinamento. Assim, a
aproximação da função-alvo acontece na hora da classificação e muda para cada nova instância.
O kNN assume que as instâncias podem ser representadas no espaço Euclidiano, em
que cada atributo corresponde a uma coordenada. Assim, por exemplo, num problema cujas
instâncias tenham três atributos, estas podem ser representadas no espaço tridimensional. Uma
implicação é que os atributos precisam ser valores numéricos. Para a classificação de uma
nova instância, o kNN procura os k exemplos de treinamento mais similares e atribui a classe
que mais aparece entre esses k exemplos. A medida de similaridade empregada é a distância
Euclidiana. Então, os k exemplos mais similares são os k vizinhos mais próximos da instância
de teste a ser classificada. O k é um parâmetro de projeto do classificador (MITCHELL, 1997).
Para encontrar os k vizinhos mais próximos de uma instância de teste, o algoritmo
precisa computar a distância dessa para todos os exemplos de treinamento.
A distância
30
Euclidiana entre duas instâncias v1 = (a1 , a2 , ..., an ) e v2 = (b1 , b2 , ..., bn ) de n atributos
é calculada conforme a equação (6).
O algoritmo também precisa manter os k pares
distância/classe correspondentes aos vizinhos, para que ao final das iterações, a classe de maior
ocorrência seja assinalada.
s
d(v1 , v2 ) =
n
∑ (bi − ai)2
(6)
i=1
O funcionamento gráfico do kNN pode ser conferido na figura 7. Neste problema, há
14 instâncias de treinamento: 7 da classe azul e 7 da classe vermelha. Cada instância possui
dois atributos, de modo que podem ser representadas no espaço bidimensional. Há também uma
instância de teste, representada em branco, a qual se quer classificar como azul ou vermelha.
Figura 7: Exemplo gráfico da classificação de uma instância em azul ou vermelha pelo kNN.
Fonte: Autoria Própria
Considerando a distância Euclidiana, temos que para:
• k = 1: A classe da instância de teste será vermelha, pois a instância de treinamento mais
próxima pertence à classe vermelha;
• k = 2: A classe da instância de teste pode ser vermelha ou azul (critério de projeto), pois
há uma instância de treinamento de cada classe nas proximidades;
• k = 3: A classe da instância de teste será azul, pois entre as três instâncias de treinamento
mais próximas, duas são da classe azul. Para esse caso é mostrada a região esférica que
abriga os três vizinhos mais próximos.
31
No exemplo, os atributos das instâncias têm magnitudes semelhantes. Mas em outros
casos isso pode não acontecer. Para evitar que atributos com um intervalo maior de valores
possı́veis tenham maior influência no cálculo da distância, é necessário normalizar os atributos.
Por exemplo, todos os atributos podem ser normalizados entre -1 e +1.
2.3
APRENDIZAGEM DE MÁQUINA PARA DETECÇÃO DE INTRUSÃO
Nesta seção será apresentado o estado da arte dos trabalhos que envolvem o uso de
extração de caracterı́sticas, Árvore de Decisão, Naive Bayes e kNN para detecção de intrusão,
em software e hardware.
2.3.1
APLICAÇÕES DE EXTRAÇÃO DE CARACTERÍSTICAS EM SOFTWARE E
HARDWARE
Para detectar intrusões, o primeiro passo é extrair caracterı́sticas dos pacotes de rede
para análise. A seguir, serão apresentados alguns trabalhos da literatura que aplicam extração
de caracterı́sticas. Em alguns casos não foram utilizados classificadores de Aprendizagem de
Máquina para detecção de intrusão, mas considera-se aqui que o processamento de atributos
dos pacotes antes da fase de detecção é uma forma de extração de caracterı́sticas.
Na literatura, boa parte dos estudos de detecção de intrusão por anomalia utiliza o
conjunto de dados público KDD 99 (UNIVERSITY OF CALIFORNIA, IRVINE, 1999). Este
foi construı́do a partir do banco de dados DARPA Intrusion Detection Evaluation Data Set,
gerado pelo Lincoln Labs do Massachusetts Institute of Technology em 1998. O laboratório
montou um ambiente para adquirir dados de uma simulação da rede local da Força Aérea
americana durante nove semanas. Na simulação também foram gerados ataques dos tipos
probing, DoS, U2R e R2L. Ao todo, foram gerados cinco milhões de conexões de treinamento
e dois milhões de conexões de teste.
Para avaliação do KDD 99 foram extraı́das 41 caracterı́sticas dos registros de conexões,
divididas em três grupos, conforme mostra o quadro 1. Apesar de ser bastante utilizado, o KDD
99 é antigo e, desde a sua montagem, os padrões de tráfego normal mudaram bastante e os
ataques de rede evoluı́ram. Por isso, novos conjuntos de dados para NIDS têm sido propostos.
Para geração do conjunto de dados geralmente utiliza-se um cenário de rede
envolvendo máquinas hosts e um servidor.
Gogoi et al. (2012) montaram um ambiente
composto por um roteador conectado à internet, switches para interconexão da rede local, um
servidor e máquinas clientes. Dentre os clientes, algumas máquinas eram responsáveis por gerar
32
Grupo de caracterı́sticas Quantidade
De pacotes individuais
9
De tráfico, considerando
uma janela de tempo
de 2 segundos
19
Do conteúdo da conexão
(carga útil dos pacotes)
13
Exemplos
tipo de protocolo, número de bytes enviados e
tipo de serviço de rede
número de conexões para o mesmo host,
número de conexões para o mesmo serviço e
porcentagem de conexões com erros
de sincronismo
número de tentativas de login sem sucesso,
número de acessos de administrador e
número de operações de criação de arquivo
Quadro 1: Atributos dos pacotes considerados no banco de dados KDD 99.
Fonte: Adaptado de UNIVERSITY OF CALIFORNIA, IRVINE (1999)
ataques contra máquinas vı́timas. Para geração do tráfego de ataque foram utilizados scripts em
linguagem C. Utilizou-se tráfego simulado de internet para produção dos registros normais.
Com relação às caracterı́sticas utilizadas para detecção de intrusão, há várias propostas
para classificação de tráfego em normal ou ataque. Davis e Clark (2011) escreveram uma
revisão do estado da arte no pré-processamento de dados envolvendo aplicações de NIDS,
incluindo uma lista grande de caracterı́sticas sugeridas pelos trabalhos analisados.
Para detecção de probing, em geral são utilizadas caracterı́sticas provenientes do
cabeçalho dos pacotes. A análise do cabeçalho reduz os requerimentos de processamento, pois
o cabeçalho corresponde apenas a uma pequena porção do pacote. Além disso, a abordagem
através do cabeçalho continua válida mesmo quando a carga útil do pacote está criptografada.
Outra vantagem do processamento apenas do cabeçalho é que existem ferramentas prontas para
este fim, como Libpcap, Tcpdump e NetFlow (DAVIS; CLARK, 2011).
Em geral, as caracterı́sticas analisadas são provenientes dos cabeçalhos IP, UDP, ICMP
e TCP, mostrados, respectivamente, nas figuras 8, 9, 10 e 11. Todos os pacotes de rede
possuem cabeçalho IP (20 bytes), após os 14 bytes do cabeçalho Ethernet. Os cabeçalhos UDP
(8 bytes), ICMP (8 bytes) e TCP (20 bytes), para os pacotes destes protocolos, aparecem após o
cabeçalho IP.
Alguns trabalhos consideram apenas caracterı́sticas individuais do cabeçalho dos
pacotes para detecção de probing. Um dos trabalhos pioneiros com essa propriedade foi o
Spade, que funciona como um plugin do Snort (STANIFORD et al., 2002). Foram considerados
como atributos os endereços IP de origem e destino e as portas de origem e destino, que
são extraı́dos a partir do próprio Snort.
probabilidades, para detecção de probing.
Utilizou-se uma técnica estatı́stica, baseada em
33
Figura 8: Campos do cabeçalho IP.
Fonte: Adaptado de Postel (1981a)
Figura 9: Campos do cabeçalho UDP.
Fonte: Adaptado de Postel (1980)
Figura 10: Campos do cabeçalho ICMP.
Fonte: Adaptado de Postel (1981b)
Figura 11: Campos do cabeçalho TCP.
Fonte: Adaptado de Postel (1981c)
34
Porém, como os ataques de rede podem ser encontrados a partir de um conjunto de
pacotes em vez de um único pacote, caracterı́sticas relativas à conexão também devem ser
consideradas (DAVIS; CLARK, 2011).
As caracterı́sticas relativas à conexão também podem vir do cabeçalho dos pacotes,
mas nesse caso são considerados os vários pacotes que compõem uma única conexão ou
múltiplas conexões. O tráfico numa única conexão é unidirecional e tem endereços e portas
em comum. As caracterı́sticas são observadas durante o fluxo de conexão, como contadores de
pacotes, contadores de bytes e tempo médio de chegada de pacotes (DAVIS; CLARK, 2011).
Estevez-Tapiador et al. (2003) consideraram as flags do cabeçalho TCP como
caracterı́sticas para detecção de ataques. Esses atributos foram extraı́dos com o tcpdump.
Para cada conexão, quantizou-se a sequência de combinação das flags em sı́mbolos, para uso
num modelo de Cadeias de Markov. Assim, foi possı́vel detectar ataques que modificavam o
comportamento normal das sessões TCP.
Quando múltiplas conexões são analisadas, como nos casos em que hosts utilizam
vários serviços diferentes (um por vez), considera-se uma certa janela de tempo. Nos trabalhos
da literatura, podem ser encontradas janelas que variam de 2s até 24h (DAVIS; CLARK, 2011).
Muraleedharan et al. (2010) consideraram os seguintes atributos: número de pacotes,
tamanho médio do pacote, duração média da sessão, número de sessões, número médio de
pacotes por sessão e número de sessões com apenas um pacote. A partir destes atributos,
extraı́dos com o NetFlow, construiu-se um modelo de comportamento normal para os protocolos
TCP, UDP e ICMP. Ataques probing e DoS foram detectadas a partir do teste Qui-quadrado.
Há alguns trabalhos que envolvem NIDS em hardware. Song e Lockwood (2005)
desenvolveram um sistema em FPGA (Xilinx XCV2000E) que implementa 222 regras do
Snort para detecção de intrusão a partir dos cabeçalhos dos pacotes. A entrada do circuito
é um pacote e os atributos analisados são os endereços IP e as portas de origem e destino e o
protocolo. Para extrair os atributos, simplesmente acessou-se o offset de cada campo. De acordo
com os valores dos atributos, os pacotes são compactados numa sequência de bits para serem
comparados com as assinaturas do Snort (armazenadas em blocos de memória RAM). Foram
utilizados o algoritmo Bit Vector (BV) e a estrutura de Memória de Conteúdo Endereçável
Ternária (TCAM) para resumir as informações dos pacotes a partir dos atributos. Foi obtida
uma taxa de transferência da ordem de 2,5 Gbps para a arquitetura completa.
Katashita et al. (2007) também desenvolveram um sistema que implementa regras do
Snort. Além de assinaturas para os cabeçalhos, foram incluı́das também assinaturas para a
35
carga útil dos pacotes, totalizando 1225 regras. A entrada do circuito é um pacote. O NIDS
incluiu duas placas com FPGA. A placa principal continha a FPGA Virtex-II Pro 100, na qual
foram sintetizados os circuitos de comparação das regras do Snort. Utilizou-se a técnica do
Autômato Finito Não-determinı́stico (NFA) para comparação dos bits das assinaturas. A placa
de interface continha a FPGA Virtex-II Pro 7, a qual recebia o tráfego ethernet e transmitia
para a placa principal via protocolo 10 Gigabit Ethernet XAUI. O circuito principal ocupou em
média 62.500 células lógicas. Obteve-se uma taxa de transferência de 10 Gbps para o NIDS.
Mediu-se ainda o consumo energético do sistema completo: 49 W.
Das et al. (2008) desenvolveram uma arquitetura, em FPGA (Xilinx Virtex II
xc2v1000), composta de um módulo de extração de caracterı́sticas e um módulo de detecção,
que utiliza a técnica estatı́stica Análise de Componentes Principais (PCA) para detectar port
scan e syn flood. A arquitetura tem como entrada o cabeçalho dos pacotes e considera as flags
do TCP ao longo de uma conexão como atributos. O módulo de extração tem quatro partes. A
primeira recebe os endereços IP e portas de origem e destino, que formam uma chave, e as flags
do TCP. A segunda parte é composta por funções hash de Jenkins, que fornecem um endereço
a partir da chave. A terceira parte é uma tabela, em forma de memória, que é acessada pelas
hashes e armazenam os valores das flags. A última parte do extrator calcula o valor agregado
dos atributos a partir da tabela. O extrator se mostrou eficiente, pois resumiu as informações
das conexões numa porção constante de memória. Para analisar os resultados da sistema foram
utilizados registros do KDD 99. Com relação ao extrator de caracterı́sticas, obteve-se uma taxa
de transferência da ordem de 21 Gbps.
A partir da análise dos trabalhos desta subseção, conclui-se que poucos trabalhos do
estado da arte apresentam resultados especı́ficos quando à extração de caracterı́sticas. Em
geral, os valores de taxas de transferência são apresentados para o sistema completo. Também
é pequeno o número de trabalhos que apresentam comparações entre implementações em
software e hardware e medições de consumo dos sistemas de detecção de intrusão.
Pode-se dizer, ainda, que boa parte dos trabalhos de detecção de intrusão em hardware
apresenta implementações das assinaturas do Snort, em detrimento das técnicas de detecção
por anomalia. Outros trabalhos com essa caracterı́stica são: (HARWAYNE-GIDANSKY et al.,
2009), (LE; PRASANNA, 2013) e (PONTARELLI et al., 2013).
2.3.2
APLICAÇÕES DE ÁRVORE DE DECISÃO EM SOFTWARE E HARDWARE
A Árvore de Decisão é uma boa escolha para detecção de intrusão por algumas
razões: os dados de entrada podem ser contı́nuos ou discretos, não há necessidade de pré-
36
processamento, o modelo é de fácil entendimento e o classificador não é computacionalmente
intenso. Além disso, as classes de saı́da são discretas: normal ou ataque. Uma desvantagem é
que se o modelo necessitar de atualização, a árvore inteira deve ser reconstruı́da.
Koshal e Bag (2012) criaram dois modelos detectores de intrusão, um com a Árvore
de Decisão e outro com o SVM. Os dados de treinamento e teste foram retirados do NSL-KDD,
um banco de dados criado a partir do KDD 99, mas com algumas melhorias como a exclusão
de registros duplicados (UNIVERSITY OF NEW BRUNSWICK, 2014). Antes do modelo da
árvore ser gerado, utilizou-se o algoritmo de Seleção de Caracterı́sticas baseado em Correlação
(CFS) que selecionou 11 atributos relevantes (para a classificação) do total de 41 atributos do
NSL-KDD. Mostrou-se que para o conjunto de teste, a árvore obteve uma acurácia de 99,9%.
Ibrahim et al. (2012) criaram quatro modelos detectores de intrusão com a Árvore de
Decisão, cada um com um tipo diferente de algoritmo: C5 (sucessor do algoritmo C4.5), CRT,
QUEST e CHAID. Os conjuntos de dados de treinamento e teste foram retirados do NSL-KDD
e os ataques alvo de detecção foram probing, DoS, R2L e U2R. Mostrou-se que para o conjunto
de teste, as acurácias para os diferentes algoritmos variaram de 93% a 99%.
Os dois trabalhos citados acima foram avaliados em software. Foram apresentados
apenas resultados de acurácia de classificação, sem avaliação de taxa de transferência e consumo
energético. Utilizou-se o NSL-KDD para modelagem dos classificadores, então a acurácia
obtida pode não ser a mesma no cenário de rede atual. Não foram encontrados trabalhos que
utilizam a Árvore de Decisão para detecção de intrusão de rede em hardware.
2.3.3
APLICAÇÕES DE NAIVE BAYES EM SOFTWARE E HARDWARE
Uma vantagem do Naive Bayes para detecção de intrusão é que as probabilidades são
constantes para cada intervalo de atributo e, numa implementação baseada em tabela, o modelo
pode ser facilmente atualizado sem alteração da estrutura do classificador.
Li e Li (2010) criaram um modelo detector de intrusão que utiliza o Naive Bayes em
conjunto com o algoritmo AdaBoost. Os dados de treinamento e teste foram retirados do KDD
99 e os ataques alvo de detecção foram probing, DoS, R2L e U2R. Foram utilizados apenas seis
atributos para geração do modelo. A acurácia obtida para a base de dados de teste foi de 84%.
Mukherjee e Sharma (2012) criaram um modelo detector de intrusão que utiliza o
Naive Bayes. Os conjuntos de dados de treinamento e teste foram retirados do NSL-KDD.
Foram avaliadas algumas técnicas de seleção de caracterı́sticas, para reduzir o total de atributos
utilizados na modelagem do Naive Bayes. Mostrou-se que para a classificação dos vetores do
37
conjunto de teste em normal ou probing, os modelos após seleção de caracterı́sticas foram mais
eficientes que o modelo do classificador utilizando todas as 41 caracterı́sticas do NSL-KDD.
Tuncer e Tatar (2010) desenvolveram um NIDS na FPGA Cyclone III. O processador
Nios II, que pode ser sintetizado no interior da FPGA, foi utilizado para extrair os atributos e
classificar os pacotes em normal ou ataque com o Naive Bayes. Os atributos considerados no
modelo foram: protocolo, tamanho do pacote, endereço IP de origem, endereço IP de destino,
porta de origem e porta de destino. Para construção do modelo, foram gerados 250 pacotes de
treinamento, dos quais 199 eram normais e 51 eram ataques. No momento da classificação, são
calculadas as probabilidades do pacote ser normal e de ser ataque. Se a primeira probabilidade
for maior, o pacote é encaminhado. Caso contrário, o pacote é descartado. O sistema embarcado
foi testado com o próprio conjunto de treinamento e nesse caso a acurácia foi de 97,2%.
Vijayasarathy et al. (2011) desenvolveram um sistema para detecção de ataques DoS,
com o classificador Naive Bayes, na FPGA Virtex 4. Para pacotes do protocolo TCP, os atributos
considerados foram as flags do cabeçalho e o intervalo de tempo de chegada entre os pacotes.
Este último atributo também foi considerado para os pacotes do protocolo UDP. Os pacotes
de treinamento e de teste foram retirados do KDD 99 e de tráfego gerado pela Society for
Electronic Transactions and Security (SETS), instituição da área de segurança de rede da Índia.
As acurácias, para os diferentes conjuntos de dados, ficaram acima de 97%.
Nos trabalhos citados nesta subseção, foram apresentados apenas resultados de
acurácia de classificação, sem avaliação de taxa de transferência e consumo energético. Em
software, o KDD 99 serviu como base de dados para modelagem dos classificadores, então a
acurácia obtida pode não ser a mesma no cenário de rede atual. No primeiro deles, há outro
problema. Não foi utilizado algoritmo de seleção para definir os atributos mais relevantes para
classificação e por isso a acurácia no conjunto de teste ficou abaixo de 85%.
Os trabalhos em hardware utilizaram bases de dados atuais (e também o KDD 99 no
último artigo), mas não houve maiores explicações sobre como essas bases foram geradas. No
primeiro deles, há outros problemas. A acurácia foi avaliada apenas na base de treinamento, e
assim não é possı́vel concluir se o modelo classificador é genérico. Além disso, foram utilizados
apenas 250 pacotes para treinamento.
2.3.4
APLICAÇÕES DE KNN EM SOFTWARE E HARDWARE
O classificador kNN é apropriado para detecção de intrusão porque fornece uma
fronteira não linear entre as classes normal e ataque. Além disso, o modelo pode ser facilmente
38
atualizado, pois consiste apenas em exemplos de treinamento armazenados em memória. Uma
desvantagem do kNN é o alto esforço computacional, que ocorre inteiramente na hora da
classificação e cresce com o número de instâncias de treinamento.
Li e Guo (2007) criaram um modelo detector de intrusão, baseado em anomalia,
que utiliza o kNN em conjunto com o algoritmo Transductive Confidence Machines (TCM).
Utilizou-se o TCM para reduzir o tamanho do conjunto de dados de treinamento necessário no
kNN. Os conjuntos de dados de treinamento e teste foram retirados do KDD 99 e os ataques
alvo de detecção foram probing, DoS, R2L e U2R. Mostrou-se que para o conjunto de teste, o
modelo TCM-kNN obteve uma acurácia maior do que 99%, acertando mais classificações que
os algoritmos SVM, Redes Neurais e kNN padrão, também analisados.
Cheng et al. (2009) criaram um modelo detector de intrusão que utiliza o kNN em
conjunto com o algoritmo Multivariate Adaptive Regression Splines (MARS). Utilizou-se o
MARS para selecionar a classe mais comum entre os k vizinhos selecionados pelo kNN. Os
conjuntos de dados de treinamento e teste também foram retirados do KDD 99. Mostrou-se que
para o conjunto de teste, o modelo kNN-MARS obteve uma acurácia na faixa de 98%, acertando
mais classificações que os algoritmos SVM e kNN padrão.
Os dois trabalhos citados acima foram avaliados em software. Foram apresentados
apenas resultados de acurácia de classificação, sem avaliação de taxa de transferência e consumo
energético. Utilizou-se o KDD 99 para modelagem dos classificadores, então a acurácia obtida
pode não ser a mesma no cenário de rede atual. Não foram encontrados trabalhos que utilizam
o kNN para detecção de intrusão de rede em hardware.
39
3
DESENVOLVIMENTO DO EXTRATOR DE CARACTERÍSTICAS
Neste capı́tulo será explicado o funcionamento do extrator de caracterı́sticas dos
pacotes de rede para detecção de probing existente e apresentado o desenvolvimento da
implementação correspondente em hardware. Serão apresentados, também, as plataformas e
métodos utilizados para avaliação e comparação das duas implementações.
3.1
IMPLEMENTAÇÃO EM SOFTWARE
Nesta seção será explicado o funcionamento do extrator de caracterı́sticas em software
que serviu de base para desenvolver a versão correspondente em hardware. O trabalho descrito
a seguir foi desenvolvido por Eduardo Kugler Viegas e pelo Prof. Dr. Altair Olivo Santin
(VIEGAS et al., 2013, 2014a, 2014b).
Os autores primeiramente montaram o banco de pacotes de rede, do qual os pacotes
são objetos de classificação. Para geração do tráfego criou-se o cenário com máquinas virtuais
mostrado esquematicamente na figura 12. O servidor é a máquina-alvo que recebe o tráfego e
deve classificá-lo como normal ou ataque.
O tráfego normal foi gerado com ferramentas de workload, a partir de requisições de
100 máquinas-cliente ao servidor: 54 gerando requisições HTTP, 33 gerando requisições SMTP,
7 gerando requisições SSH e 6 gerando requisições SNMP. O tráfego de probing foi gerado com
a ferramenta Nessus, programa usado para auditar uma rede à procura de possı́veis falhas. Com
o Nessus, selecionaram-se classes de ataques probing para inspeção e gerou-se o tráfego de
ataque contra o servidor.
Os tráfegos normal e de ataque foram gerados concomitantemente durante um perı́odo
de trinta minutos. Os pacotes foram armazenados num arquivo PCAP, o qual mantém o
histórico dos pacotes e pode ser utilizado como entrada para ferramentas de análise de rede. Ao
todo, foram gerados 9.431.075 pacotes, dos quais 9.416.113 são normais e 14.962 são ataques
probing. O software de extração de caracterı́sticas usa o arquivo PCAP como entrada.
40
Figura 12: Cenário para geração de tráfego normal e de ataque.
Fonte: Adaptado de Viegas et al. (2014a)
Com relação às caracterı́sticas, os autores seguiram a literatura e escolheram atributos
que podem ser extraı́dos: 1) diretamente do cabeçalho de cada pacote e 2) a partir dos pacotes
pertencentes a uma mesma comunicação entre hosts, considerando certa janela de tempo.
Os atributos escolhidos que podem ser extraı́dos diretamente do cabeçalho de cada
pacote são mostrados no quadro 2. Cada atributo, com exceção do payload length, possui um
prefixo (ip, udp, icmp, tcp) indicando a qual cabeçalho pertence. Os atributos do cabeçalho IP
são comuns a todos os pacotes, enquanto que os atributos dos cabeçalhos UDP, ICMP e TCP
estão presentes apenas nos pacotes de protocolo UDP, ICMP e TCP, respectivamente.
Os atributos dos cabeçalhos IP (para todos os pacotes) e UDP, ICMP e TCP (para
os pacotes com estes protocolos) estão em campos bem definidos nos pacotes. O atributo
payload length, que define o tamanho da carga útil, pode ser calculado a partir do tamanho
do pacote descontando-se o tamanho dos cabeçalhos.
Os atributos que podem ser extraı́dos a partir de uma mesma comunicação entre hosts
são mostrados no quadro 3. A maioria dos atributos são contadores e alguns são calculados a
partir do cabeçalho. Porém, nesse caso, considera-se cada conexão entre os hosts, dentro de
uma janela de 2 s. Em cada conexão, uma das máquinas é sempre o servidor e a outra máquina
pode ser um dos clientes que geram tráfego normal ou o cliente que gera ataques.
O extrator foi desenvolvido em C++. Foi utilizada a biblioteca Libpcap para ler os
pacotes do arquivo PCAP e acessar estruturas com os campos dos protocolos UDP, ICMP e TCP.
41
Número
Atributo
Descrição
Tamanho (bits)
1
ip type
Tipo de serviço
8
2
ip length
Tamanho do pacote IP
16
3
ip id
Número de identificação
16
4
ip offset
Offset do fragmento
13
5
ip RF
Flag reservada
1
6
ip DF
Flag “não fragmente”
1
7
ip MF
Flag “mais fragmentos”
1
8
ip proto
Protocolo (TCP, UDP ou ICMP)
8
9
ip checksum
Checksum do cabeçalho IP
16
10
udp sport
Porta de origem do cabeçalho UDP
16
11
udp dport
Porta de destino do cabeçalho UDP
16
12
udp length
Tamanho do datagrama
16
13
udp checksum
Checksum do datagrama
16
14
icmp type
Tipo da mensagem
8
15
icmp code
Código da mensagem
8
16
icmp checksum
Checksum da mensagem
16
17
tcp sport
Porta de origem do cabeçalho TCP
16
18
tcp dport
Porta de origem do cabeçalho TCP
16
19
tcp seq
Número de sequência
32
20
tcp ack
Número de confirmação
32
21
tcp ffin
Flag fin
1
22
tcp fsyn
Flag syn
1
23
tcp frst
Flag rst
1
24
tcp fpsh
Flag push
1
25
tcp fack
Flag ack
1
26
tcp furg
Flag urgent
1
27
payload length
Tamanho da carga útil
16
Quadro 2: Lista de atributos extraı́dos diretamente do cabeçalho de cada pacote para distinção
entre tráfego normal e de probing.
Fonte: Adaptado de Viegas et al. (2013).
Cada uma destas estruturas possui estruturas com os cabeçalhos Ethernet, IP e do protocolo
correspondente, além do timestamp e da carga útil do pacote. Variáveis int armazenam cada um
dos 50 atributos mostrados nos quadros 2 e 3.
Para extração das caracterı́sticas do quadro 2, as estruturas com os campos de cada
protocolo são acessadas. O quadro 4 explica como cada atributo é extraı́do dependendo do
protocolo do pacote. Quando o protocolo é TCP, os atributos relativos aos cabeçalhos UDP e
ICMP são igualados a zero. Um raciocı́nio semelhante pode ser aplicado aos protocolos UDP e
ICMP, com exceção para as flags do cabeçalho TCP. Para protocolos diferentes do TCP, as flags
são igualadas a dois, visto que zero (flag não setada) é um valor válido para o protocolo TCP.
42
Número
1
2
3
Atributo
conn status
count c2s
count s2c
4
count serv c2s
5
count serv s2c
6
num bytes c2s
7
num bytes s2c
8
num bytes serv c2s
9
num bytes serv s2c
10
num pushed c2s
11
num pushed s2c
12
num syn fin c2s
13
num syn fin s2c
14
num fin c2s
15
num fin s2c
16
num ack c2s
17
num ack s2c
18
num syn c2s
19
num syn s2c
20
num rst c2s
21
num rst s2c
22
first packet
23
first serv packet
Descrição
Estado da conexão TCP
No de pacotes enviados do cliente para o servidor
No de pacotes enviados do servidor para o cliente
No de pacotes enviados, para o mesmo
serviço, do cliente para o servidor
o
N de pacotes enviados, para o mesmo
serviço, do servidor para o cliente
No de bytes da carga útil enviados
do cliente para o servidor
o
N de bytes da carga útil enviados
do servidor para o cliente
o
N de bytes da carga útil, enviados para o
mesmo serviço, do cliente para o servidor
No de bytes da carga útil, enviados para o
mesmo serviço, do servidor para o cliente
No de pacotes com a flag PUSH setada
enviados do cliente para o servidor
o
N de pacotes com a flag PUSH setada
enviados do servidor para o cliente
No de pacotes com as flags SYN e FIN setadas
enviados do cliente para o servidor
o
N de pacotes com as flags SYN e FIN setadas
enviados do servidor para o cliente
No de pacotes com a flag FIN setada
enviados do cliente para o servidor
No de pacotes com a flag FIN setada
enviados do servidor para o cliente
No de pacotes com a flag ACK setada
enviados do cliente para o servidor
No de pacotes com a flag ACK setada
enviados do servidor para o cliente
No de pacotes com a flag SYN setada
enviados do cliente para o servidor
No de pacotes com a flag SYN setada
enviados do servidor para o cliente
No de pacotes com a flag RST setada
enviados do cliente para o servidor
No de pacotes com a flag RST setada
enviados do servidor para o cliente
Verdadeiro se é o primeiro pacote trocado pelos hosts
Verdadeiro se é o primeiro pacote
trocado pelos hosts para o mesmo serviço
Quadro 3: Lista de atributos extraı́dos a partir dos pacotes pertencentes a uma mesma
comunicação entre hosts, considerando um janela de tempo de 2 s, para distinção entre tráfego
normal e de probing.
Fonte: Adaptado de Viegas et al. (2013).
43
Atributos / Protocolo
Do cabeçalho IP
Do cabeçalho UDP
UDP
A partir da
estrutura IP
A partir da
estrutura UDP
Do cabeçalho ICMP
Do cabeçalho TCP
(portas, seq e ack)
Do cabeçalho TCP
(flags)
payload length
0
ICMP
A partir da
estrutura IP
TCP
A partir da
estrutura IP
0
0
A partir da
estrutura ICMP
0
A partir da
estrutura TCP
A partir da
2
2
estrutura TCP
Tamanho IP
Tamanho IP
Tamanho IP
menos tamanho menos tamanho menos tamanho
dos cabeçalhos dos cabeçalhos dos cabeçalhos
IP e UDP
IP e ICMP
IP e TCP
0
0
Quadro 4: Explicação de como cada atributo do cabeçalho dos pacotes é extraı́do.
Fonte: Adaptado de Viegas et al. (2014b).
Para a extração dos atributos do quadro 3, é necessário guardar algumas variáveis de
estado da comunicação entre hosts durante a janela de tempo de 2 segundos. Para esse fim, os
autores implementaram uma tabela de tamanho constante para armazenar os atributos.
A tabela tem 65536 (216 ) linhas e cada linha é acessada a partir da função hash FNV.
A chave da hash é um valor de 5 ou 7 bytes, formada a partir de dados da máquina cliente e da
caracterı́stica a ser extraı́da. Para os atributos com o infixo “ serv ”, no meio do nome, a chave
tem 7 bytes, composta dos 4 bytes do endereço IP do cliente, dos 2 bytes da porta do cliente
(iguais a 0 se o protocolo for ICMP no qual não há porta) e 1 byte que identifica o atributo a
ser extraı́do. Como esses atributos são definidos para o mesmo serviço (por isso o “ serv ”), a
porta do cliente, que identifica o serviço em questão, também é considerada.
Para os demais atributos,
que são definidos apenas de host para host,
independentemente do serviço requisitado, a chave da hash é composta por 5 bytes. Os dois
bytes da porta do cliente não são considerados nesse caso. A figura 13 mostra como a chave da
hash é montada e como uma determinada linha da tabela é acessada.
Do total de 23 atributos dependentes da comunicação, os atributos first packet e
first serv packet não precisam ser guardados na tabela, visto que podem ser extraı́dos a
partir dos contadores de pacotes (atributos com o prefixo count). Assim, cada comunicação
envolvendo dois hosts ocupa 21 linhas na tabela. Por exemplo, a comunicação entre cliente A
e servidor ocupa 21 linhas, a comunicação entre cliente B e servidor também ocupa 21 linhas e
44
Figura 13: Montagem da chave da hash que acessa as linhas da tabela de atributos dependentes
dos pacotes de uma mesma comunicação.
Fonte: Adaptado de Viegas et al. (2014b)
assim por diante. Cada linha armazena um atributo de determinada comunicação.
As linhas da tabela foram divididas em cinco células (de 0 a 4) com vida útil de 0,5
segundos. A soma das células totaliza 2,5 segundos, mas a cada extração uma das células é
desconsiderada, de forma que a janela de tempo para cada atributo é de 2 segundos. O processo
funciona da seguinte forma: se no tempo 0 s inicia-se uma extração, os atributos são atualizados
na célula 0, enquanto o conteúdo da célula 4 deve ser apagado. A célula 0 continua sendo
atualizada até o tempo de 0,5 s. A partir de 0,5 s, os atributos são atualizados na célula 4
(previamente apagada), enquanto o conteúdo da célula 3 deve ser apagado. E assim por diante,
de modo que as células são utilizadas em ordem decrescente.
A cada momento, para extrair-se uma caracterı́stica, devem ser somadas as células
desconsiderando-se a célula a ser apagada. A figura 14 mostra graficamente o funcionamento
temporal de cada célula e quais células devem ser somadas para se obter o valor do atributo.
Cada célula tem tamanho de 16 bits, de modo que uma linha possui 80 bits e a tabela
completa ocupa 5.242.880 bits.
O fluxograma do extrator é mostrado de forma resumida na figura 15. A primeira
operação é justamente criar a tabela de atributos dependentes da comunicação, com valor zero
em todas as células. Depois, configuram-se as células a ser atualizada e a ser apagada como 0 e
4, respectivamente, e o timestamp do extrator em zero.
45
Figura 14: Células das linhas da tabela a serem consideradas para se obter o valor dos atributos
dependentes da comunicação.
Fonte: Adaptado de Viegas et al. (2014b)
Na sequência, lê-se um pacote. Se o timestamp do pacote (lido do arquivo PCAP, no
qual armazena-se a diferença de tempo de chegada entre os pacotes a partir do tempo 0) for
maior que o timestamp da aplicação por 0,5 s (janela de tempo de cada célula) ou mais, três
operações são feitas antes do prosseguimento da extração. Primeiro, zeram-se os conteúdos de
todas as células a serem apagadas. Segundo, decrementam-se as células a ser atualizada e a ser
apagada. Terceiro, soma-se 0,5 s ao timestamp da aplicação e, então, o teste da diferença de
timestamps é repetido.
Quando nenhum zeramento é necessário, a extração continua. Testa-se, então, o
protocolo do pacote. Para cada um dos protocolos da aplicação, UDP, ICMP ou TCP, as
funções correspondentes de extração dos atributos do cabeçalho e dos atributos dependentes
da comunicação são chamadas. A seguir, se houver mais pacotes a serem extraı́dos, a aplicação
volta ao ponto de leitura de pacote. Caso contrário, a aplicação é encerrada.
A extração dos atributos que dependem da comunicação está mostrada
simplificadamente como função na figura 15. Nesta etapa, os 23 atributos são extraı́dos,
um após o outro. Cada extração compreende: montar a chave da hash, calcular o valor da hash,
46
Figura 15: Fluxograma simplificado do extrator de caracterı́sticas.
Fonte: Adaptado de Viegas et al. (2014b)
atualizar a célula da linha da tabela dada pela hash e calcular o valor do atributo a partir da
soma da células, excluindo-se a célula a ser apagada.
Quando o IP do servidor é o IP de origem do pacote, os atributos com sufixo
“ s2c” devem ser atualizados na tabela, enquanto que os atributos com sufixo “ c2s” não são
atualizados (embora sejam extraı́dos). Quando o IP do servidor é o IP de destino do pacote, a
lógica inverte-se. O quadro 5 mostra como cada atributo deve ser atualizado.
47
Tipo
Nome Genérico
Estado da conexão TCP
conn status
Contadores de pacotes
count x2x
Contadores de bytes
num bytes x2x
Contadores de flags
num flag x2x
Primeiro pacote
first packet
Atualização
Valor definido a partir de máquina
de estados dependente das flags
do TCP (POSTEL, 1981c). Para
protocolos ICMP e UDP tem valores
“icmp” e “udp”, respectivamente.
Incrementado de um em um a cada pacote.
Se a origem do pacote é o servidor,
incrementa-se os atributos do tipo s2c.
Se o destino do pacote é o servidor,
incrementa-se os atributos do tipo c2s.
Quando há o infixo serv (de serviço),
o incremento acontece apenas para
pacotes de mesmo serviço (mesmas portas).
Incrementado com o tamanho da carga útil.
Se a origem do pacote é o servidor,
incrementa-se os atributos do tipo s2c.
Se o destino do pacote é o servidor,
incrementa-se os atributos do tipo c2s.
Quando há o infixo serv (de serviço),
o incremento acontece apenas para
pacotes de mesmo serviço (mesmas portas).
Incrementado para pacotes TCP
quando a flag em questão está setada.
Se a origem do pacote é o servidor,
incrementa-se os atributos do tipo s2c.
Se o destino do pacote é o servidor,
incrementa-se os atributos do tipo c2s.
“1” se o pacote em questão é o
primeiro da comunicação entre cliente
e servidor; “0” caso contrário.
Esse tipo de atributo é extraı́do a
partir dos contadores de pacotes.
Quando há o infixo serv (de serviço),
considera-se os pacotes de mesmo serviço.
Quadro 5: Explicação de como cada atributo dependente da comunicação é atualizado.
Fonte: Adaptado de Viegas et al. (2014b).
O programa tem a funcionalidade de gerar um arquivo com os atributos extraı́dos dos
pacotes. O formato gerado é o ARFF, que armazena as instâncias com seus respectivos atributos
e classes (THE UNIVERSITY OF WAIKATO, 2014). Para o arquivo PCAP com a base de
pacotes, foi gerado um arquivo ARFF com as caracterı́sticas extraı́das e a classe (normal ou
ataque) dos 9.431.075 pacotes. Para saber se cada pacote era normal ou ataque, o extrator
verificou o endereço IP do cliente (para saber se este era o Nessus ou um dos workloads).
48
Dos total de vetores de caracterı́sticas, os autores formaram um conjunto de
treinamento com 7480 vetores (3740 vetores normais e 3740 vetores de ataque) e um conjunto
de teste também com 7480 vetores (3740 vetores normais e 3740 vetores de ataque).
3.2
AVALIAÇÃO EM SOFTWARE
Em posse do extrator fornecido pelos autores, este foi compilado e executado numa
placa-mãe DN2800MT com processador Atom, fabricada pela Intel. Os processadores da
linha Atom são de baixo consumo e voltados para aplicações em que a eficiência energética
é desejada. Os principais periféricos que compõem o ambiente, mostrado na figura 16, são
um processador N2800, uma memória RAM DDR3 de 4 GB e um disco rı́gido de 500 GB. O
sistema operacional utilizado foi o openSUSE 13.1.
Figura 16: Ambiente para avaliação dos algoritmos em software.
Fonte: Autoria Própria
Do arquivo com todos os pacotes, também fornecido, montou-se um novo arquivo
PCAP com 8.000.000 de pacotes através do programa Wireshark. O Wireshark é um analisador
de protocolos de rede de código aberto. Com esta ferramenta é possı́vel capturar o tráfego de
rede e analisá-lo em tempo real ou partir de um arquivo PCAP. Para o arquivo com 8.000.000
de pacotes, foram realizadas cem execuções da aplicação de extração de caracterı́sticas em
sequência, a fim de considerar a média de múltiplas execuções.
Para calcular a taxa de transferência e o consumo energético do extrator, foi necessário
obter o tempo de processamento e a potência consumida pela aplicação. Considera-se que o
consumo da aplicação é o incremento de consumo da placa-mãe durante o tempo de execução
49
da aplicação em relação ao consumo da placa-mãe no estado inativo (sem executar nenhuma
aplicação de usuário).
Para obter o tempo de processamento e o consumo referentes à aplicação, utilizouse a plataforma desenvolvida por Cemin (2015) e mostrada esquematicamente na figura 17.
Alimenta-se a placa-mãe com 15 VDC. Um resistor de 270 mΩ inserido entre a fonte e a placa
faz a função de sensor de corrente. Utiliza-se o DAQ USB-6008 da National Instruments,
operando a 5000 amostras/s com 12 bits de resolução, para amostrar o consumo da placa-mãe.
Figura 17: Plataforma usada para medição do tempo de processamento e do consumo energético
dos algoritmos em software.
Fonte: Adaptado de Cemin (2015)
A plataforma possui a habilidade de medir o consumo de uma aplicação especı́fica
sendo executada no processador, descontando outras tarefas que por acaso sejam escalonadas
pelo Sistema Operacional. Para isso, monitora-se um sinal de sincronismo enviado via porta
paralela ao DAQ, que fica em nı́vel alto enquanto a aplicação está sendo executada e nı́vel baixo
caso contrário. A geração desse sinal é possibilitada através do kernel do Linux instrumentado
para reconhecer o Thread Group ID (TGID) à qual pertence a aplicação.
Com as amostras válidas do DAQ (ou seja, as amostras feitas com o sinal de
sincronismo em nı́vel alto), o valor da tensão de alimentação da fonte e o valor da resistência,
pode-se calcular o consumo de potência da aplicação.
Através de registros de timestamps durante a execução, também é possı́vel calcular
isoladamente o tempo de processamento da aplicação especı́fica na placa-mãe, com uma
resolução de 1 µs.
50
Utilizou-se a plataforma descrita para avaliar a aplicação do extrator de caracterı́sticas.
O clock do processador foi travado na frequência máxima (1,86 GHz) e habilitaram-se apenas
um core e uma thread. Os tempos de processamento para a aplicação completa, que consiste na
leitura mais extração dos pacotes, e apenas para a leitura, foram obtidos isoladamente. A partir
do tempo de processamento da aplicação completa (tempol+e ), desconta-se o tempo de leitura
(tempol ) para obter o tempo de extração, visto que para leitura dos pacotes é necessário acessar
o disco rı́gido e esta operação não faz parte da extração. Assim, foi utilizada a equação (7) para
calcular a taxa de transferência do extrator, em pacotes por segundo.
Taxa de Trans f erência (pacotes/s) =
número de pacotes
tempol+e − tempol
(7)
Utilizou-se a equação (8) para calcular a energia consumida por cada extração,
em joules (J). A potência da placa para a aplicação completa e para a leitura (Pl+e e Pl ,
respectivamente) também foram obtidas separadamente. O termo Pinat corresponde à potência
da placa-mãe quando inativa, ou seja, sem executar aplicação de usuário.
Energia por extração (J) =
3.3
(Pl+e − Pinat ) · tempol+e − (Pl − Pinat ) · tempol
número de pacotes
(8)
IMPLEMENTAÇÃO EM HARDWARE
O extrator de caracterı́sticas foi implementado em hardware com a linguagem VHDL,
utilizando o ambiente de desenvolvimento Sigasi. A ferramenta facilita a codificação, pois
tem funcionalidades como auto-completar, navegação entre arquivos, correção de erros da
linguagem e muitas outras.
A figura 18 mostra o diagrama em blocos do extrator implementado. O circuito possui
como entradas um sinal de clock (std logic), um sinal de reset (std logic), um sinal de inı́cio de
extração (boolean) e o cabeçalho do pacote de rede (std logic vector de 432 bits). As portas
de saı́da são um sinal de fim de extração (boolean), um sinal de pronto para outra extração
(boolean) e os atributos extraı́dos (vetor com os 50 atributos, cada um unsigned de 32 bits).
O sinal do cabeçalho possui 432 bits pois este é o total de bits do maior cabeçalho
possı́vel na aplicação: 54 bytes, quando o protocolo é TCP. Para os protocolos ICMP ou UDP,
o cabeçalho do pacote possui 42 bytes e assim pode ser compreendido no sinal de 432 bits.
O vetor com os atributos extraı́dos é do tipo record, composto pelos 50 atributos. A
51
Figura 18: Diagrama em blocos do extrator de caracterı́sticas em hardware.
Fonte: Autoria Própria
partir do tipo record, cada atributo pode ser acessado através de seu nome. Todos os atributos
foram definidos com 32 bits, pois este é o tamanho dos maiores atributos (tcp seq e tcp ack).
O digrama mostra que o circuito do extrator é composto por vários módulos. Um
destes é o extrator de atributos do cabeçalho dos pacotes. A entrada do módulo é o próprio sinal
do cabeçalho e a saı́da é um vetor composto pelos 27 atributos dessa categoria. Os atributos
são calculados a partir do acesso aos diferentes campos do cabeçalho (offsets do sinal de 432
bits), conforme explicado no quadro 4 para o extrator em software. A extração dos atributos do
cabeçalho não depende dos demais módulos do circuito.
Para armazenar os atributos baseados na comunicação entre cliente e servidor,
projetou-se uma tabela em forma de memória RAM. O endereço desta memória é fornecido
pelo módulo de cálculo da hash. Este módulo tem como entradas o sinal de cabeçalho do
pacote e um sinal de identificação do atributo a ser extraı́do (natural, com variação de 0 a 49
correspondendo aos 50 atributos). A saı́da do módulo é o valor da hash (natural, com variação
de 0 a 65535).
52
Primeiramente, a chave da hash é montada a partir dos bytes do endereço IP e da
porta do cliente e de um número primo que representa o atributo dependente da comunicação
a ser extraı́do. Esse número primo é obtido consultando-se uma tabela a partir do número de
identificação do atributo. O número de identificação, uma das entradas do módulo, deve variar
de 27 a 49 nesse caso, visto que os atributos extraı́dos diretamente do cabeçalho de cada pacote
não são registrados na memória.
O fornecimento do número de identificação do atributo é função do módulo de
controle, que será explicado mais adiante. Por enquanto é suficiente saber que um número
é fornecido por vez. Assim, ao fim da extração de um atributo, incrementa-se o número de
identificação para extração do próximo atributo e assim por diante.
A partir do valor da hash, acessa-se a memória de atributos mostrada na figura 19.
De forma semelhante à implementação em software, há 65536 (216 ) linhas subdivididas em 5
células de 16 bits (unsigned). A memória tem como entradas o sinal de clock, um sinal de
endereço (natural, com variação de 0 a 65535), um sinal de habilitação de escrita (boolean) e
uma linha de entrada. A memória fornece uma linha de saı́da.
Figura 19: Memória RAM que armazena os atributos dependentes da comunicação.
Fonte: Autoria Própria
A cada ciclo de clock, a tabela fornece na saı́da a linha correspondente ao endereço
configurado. Ao habilitar-se a escrita, a linha da tabela dada pelo endereço é sobrescrita com a
linha de entrada e esta aparece na saı́da, em seguida. Cada linha de saı́da da tabela corresponde
a um único atributo de determinada comunicação.
A linha de saı́da da tabela é entrada para o módulo de atualização de linha, mostrado
na figura 20. Além da linha a ser atualizada, o módulo ainda possui como entradas o sinal de
clock, o sinal de reset, o sinal de cabeçalho do pacote, o número de identificação do atributo,
o ı́ndice da célula a ser atualizada e o ı́ndice da célula a ser apagada. O módulo fornece como
saı́das a linha após atualização e o atributo extraı́do.
53
Figura 20: Módulo de atualização das linhas da memória de atributos.
Fonte: Autoria Própria
Da linha da tabela, primeiramente um multiplexador seleciona a célula a ser atualizada.
Esta célula, juntamente com o cabeçalho do pacote e o número de identificação do atributo,
constituem a entrada do módulo de atualização de célula. Conforme o atributo em questão
e os campos do cabeçalho do pacote, atualiza-se a célula como explicado no quadro 5 da
implementação em software.
Na sequência, a célula atualizada é mesclada com as outras 4 células não atualizadas
para formar a linha de tabela atualizada. Internamente ao módulo de atualização da linha, a linha
atualizada ainda tem suas células somadas, desconsiderando a célula a apagar, para cálculo do
atributo. Externamente ao módulo de atualização da linha, a linha atualizada é encaminhada
para a memória de atributos, para sobrescrever a linha prévia.
No fim do módulo de atualização da linha calcula-se o valor do atributo. Para a maioria
dos atributos, o valor é simplesmente o resultado do somatório das células da linha atualizada.
Para os atributos first packet e first serv packet, que não são mantidos na tabela, os valores são
registrados quando o extrator trata os atributos contadores de pacotes. Assim, quando o número
de identificação é 48 ou 49, em vez do valor do somatório, o valor de atributo fornecido na saı́da
vem do registrador correspondente. A cada fim de cálculo de atributo, o valor é registrado no
shift-register atributos comunicação sreg, mostrado no diagrama do inı́cio da seção.
54
Ao fim de cada janela de tempo deve-se zerar as células a serem apagadas. Isto é feito
pelo módulo de apagamento de colunas. A cada 0,5 s, o extrator deve manter qualquer pacote
recebido em espera para proceder com a operação de apagamento. Assim, diferentemente da
implementação em software, que verificava o timestamp do pacote para inı́cio ou não de um
apagamento, em hardware, o inı́cio da operação de apagamento é determinı́stico. Cada célula a
ser apagada na tabela é zerada em dois ciclos de clock.
O módulo de apagamento, mostrado na figura 21, faz interface diretamente com a
memória e com o módulo de controle, que será explicado mais adiante. As entradas são o sinal
de clock, o sinal de reset, uma linha da tabela, o ı́ndice da célula a ser apagada e um sinal de
inı́cio de apagamento (boolean). As saı́das são o endereço da tabela no qual a linha com a
célula apagada será sobrescrita, a linha com a célula apagada, um sinal de habilitação de escrita
na memória (boolean) e um sinal de fim de apagamento (boolean). O funcionamento do módulo
é simples: cada linha da memória é recebida uma a uma, zera-se a célula a ser apagada de cada
linha e escreve-se a nova linha na memória a partir da habilitação de escrita.
Figura 21: Módulo de zeramento das células a serem apagadas da tabela de atributos.
Fonte: Autoria Própria
O processo de extração é controlado pelo módulo de controle, mostrado na figura 22.
As entradas são o sinal de clock, o sinal de reset, o sinal de inı́cio de extração e o sinal de fim de
apagamento. As saı́das são o ı́ndice da célula a ser atualizada, o ı́ndice da célula a ser apagada,
o sinal de identificação do atributo a ser extraı́do, o sinal de inı́cio de apagamento, um sinal de
registro de atributo (boolean), o sinal de fim de extração e o sinal de pronto para outra extração.
Uma das funções do controle é temporizar as janelas de tempo. A cada 0,5 s, o módulo
decrementa os ı́ndices das células a serem atualizada e apagada e sinaliza uma operação de
apagamento pendente. Outra função do módulo é controlar a máquina de estados do extrator,
mostrada na figura 23. São sete estados no total: inativo, calcula hash, fornece linha da tabela,
atualiza linha da tabela, registra atributo, fim de extração e apagamento de coluna.
O primeiro estado é o inativo. Quando a extração é iniciada, o extrator passar a operar
em modo normal, no qual a cada ciclo de clock a máquina de estados move-se entre os estados
55
Figura 22: Módulo de controle do extrator.
Fonte: Autoria Própria
Figura 23: Máquina de estados que controla o extrator de caracterı́sticas.
Fonte: Autoria Própria
de dois a cinco, cujos nomes descrevem exatamente as operações realizadas, já descritas. A
partir do quinto estado, “registra atributo”, há duas possibilidades. Se não foram extraı́dos todos
os atributos ainda, o número de identificação de atributo é incrementado e retorna-se ao estado
calcula hash. Caso contrário, a máquina vai para o estado de fim de extração. No estado de fim
de extração, se houver pendência de apagamento, a máquina irá para o estado de apagamento.
No fim de um apagamento a máquina retorna ao estado inicial.
Por simplicidade não foi mostrado na imagem, mas a condição “inicia extração” força
a máquina a sempre prosseguir para o estado calcula hash. No estado de fim de extração, porém,
a condição “apagamento pendente” tem prioridade sobre a condição “inicia extração”.
56
O módulo de controle sinaliza, ainda, que o extrator está pronto para outra extração
quando o estado da máquina é inativo ou fim de extração e não há apagamento pendente.
Ao fim da extração, os atributos do shift-register em conjunto com os atributos
extraı́dos diretamente de cada cabeçalho constituem os atributos de saı́da do circuito.
A extração de um pacote dura 93 ciclos de clock porque são necessários 1 ciclo para
inı́cio da operação mais 92 ciclos para cálculo do atributos dependentes da comunicação (23
atributos · 4 ciclos). A cada 0,5 s há uma operação de apagamento que dura 131.072 ciclos,
sempre realizada entre pacotes. Essa operação diminui a taxa de transferência do extrator e se
um pacote chegar durante o apagamento, este deve ser registrado. A mesma conclusão é válida
para o extrator em software.
Para validação da implementação do extrator em hardware, foi codificado um
testbench em VHDL que lê e extrai 1.000.000 de pacotes e compara os resultados com os
resultados obtidos pelo extrator em software. Os arquivos VHDL do extrator e do testbench
foram compilados e simulados no programa ModelSim. O ModelSim é uma ferramenta de
simulação lógica para verificação e depuração de circuitos digitais. A execução do teste com
sucesso indicou que os extratores em software e hardware são equivalentes.
3.4
AVALIAÇÃO EM HARDWARE
Para avaliação do extrator em hardware foi utilizado o kit de desenvolvimento com a
FPGA Cyclone IV GX da Altera (chip EP4CGX150N), mostrado na figura 24. A linha Cyclone
é desenvolvida para atender aplicações que necessitam de baixo consumo energético. Para
sı́ntese do circuito do extrator descrito em VHDL e posterior gravação na FPGA foi utilizado o
programa Quartus II, da Altera. A ferramenta possibilita o projeto de dispositivos programáveis,
permitindo a análise e a sı́ntese de circuitos a partir de linguagem de descrição de hardware.
O kit de desenvolvimento é instrumentado com conversores A/D que permitem a
medição do consumo da FPGA. Para este fim, utilizou-se a ferramenta Power Monitor da Altera
em um computador para ler, via USB, a potência consumida pelas oito trilhas que alimentam o
chip. Somando-se os valores de cada trilha obtém-se o consumo total da FPGA.
Utilizou-se a equação (9) para calcular a taxa de transferência do extrator em hardware,
em pacotes por segundo. O termo tempoapag refere-se ao tempo de apagamento das colunas da
tabela de atributos, enquanto o termo tempoext refere-se ao tempo de extração. A definição do
numerador da equação vem do fato de que há duas operações de apagamento no perı́odo de um
segundo.
57
Figura 24: Kit com FPGA Cyclone IV GX para avaliação dos algoritmos em hardware.
Fonte: Autoria Própria
Taxa de Trans f erência (pacotes/s) =
1 − 2 · tempoapag
tempoext
(9)
Para medição do consumo do extrator em funcionamento, foi projetado o circuito da
figura 25. O circuito possui como entradas um sinal de clock (std logic) e um sinal de reset
(std logic). A saı́da é um atributo. Apenas um atributo extraı́do é fornecido por vez, para o
Quartus II não mapear cada bit de saı́da em pinos de I/O. Considerando todos os atributos,
seriam necessários 1600 pinos, porém, a FPGA utilizada só possui 508 pinos de I/O.
Figura 25: Circuito para medição do consumo do extrator em hardware.
Fonte: Autoria Própria
A entrada de cabeçalho do extrator é fornecida por um circuito gerador de números
aleatórios. Esta opção foi utilizada porque a operação do extrator não depende de valores exatos
dos campos do cabeçalho. Há, ainda, um módulo de controle que simplesmente inicia uma nova
58
extração um ciclo de clock após o fim da extração anterior. O fim da extração também habilita
uma nova geração de números aleatórios.
Como o extrator ocupa mais de 99% da área, considerou-se que o consumo do circuito
de medição se deve ao extrator. Utilizou-se a equação (10) para calcular o consumo energético
por operação de extração, na qual o termo Pexec refere-se à potência da FPGA com o extrator
em funcionamento e o termo Pbase refere-se à potência base do chip. Esta última foi medida
para um simples buffer, gravado na FPGA, que recebe um bit de entrada e transfere-o para a
saı́da. Desconta-se a potência base (cujo valor medido foi de 165 mW) para saber o incremento
causado pelo extrator de caracterı́sticas. Considera-se, também, que o extrator trabalha na
taxa de transferência dada pela equação (9). Os resultados da avaliação do extrator serão
apresentados no capı́tulo 7.
Energia por extração (J) =
Pexec − Pbase
Taxa de Trans f erência
(10)
59
4
DESENVOLVIMENTO DA ÁRVORE DE DECISÃO
Neste capı́tulo serão apresentados os desenvolvimentos do classificador Árvore de
Decisão para detecção de probing, em software e hardware. Para cada implementação serão
apresentados, também, as plataformas e métodos utilizados para avaliação. A tarefa de seleção
de caracterı́sticas usadas pela Árvore de Decisão, explicada no inı́cio da seção 4.1, foi realizada
por Eduardo Kugler Viegas (VIEGAS et al., 2014a).
4.1
IMPLEMENTAÇÃO EM SOFTWARE
Em posse dos conjuntos de dados, também fornecidos pelos desenvolvedores do
extrator em software, foi possı́vel treinar o primeiro classificador para detecção dos ataques do
tipo probing: a Árvore de Decisão. Para modelagem do classificador, foi utilizado o algoritmo
J48 do programa Weka. O Weka é um ambiente de Aprendizagem de Máquina que possui
uma grande gama de classificadores. O J48 é uma implementação em Java do algoritmo C4.5
(comentado na subseção 2.2.2).
Antes da tarefa de aprendizagem, porém, foi executada uma seleção de caracterı́sticas
do tipo wrapper-based. Esta etapa é considerada pré-processamento e o objetivo é eliminar as
caracterı́sticas redundantes e/ou irrelevantes para a classificação. Para este fim, a seleção de
caracterı́sticas, que deve ser atrelada ao classificador em questão (neste caso, o J48), avalia
a acurácia de classificação para várias combinações de caracterı́sticas e seleciona o menor
conjunto de caracterı́sticas que fornece o melhor resultado.
No Weka, utilizou-se um algoritmo genético com 100 gerações e 100 populações para
busca dos atributos mais relevantes para classificação do conjunto de testes pela árvore. Do total
de 50 atributos, foram selecionados os 11 atributos mostrados no quadro 6.
Utilizando, então, as 11 caracterı́sticas selecionadas, o algoritmo J48 foi executado
com as configurações padrão sobre o conjunto de treinamento. A figura 26 mostra a Árvore
de Decisão resultante. A árvore possui 24 nós, que correspondem aos testes dos atributos e 28
60
Número
Atributo
1
ip DF
2
ip checksum
3
tcp sport
4
tcp dport
5
tcp frst
6
tcp fpush
7
tcp fack
8
count serv s2c
9
num ack c2s
10
num ack s2c
11
num syn c2s
Quadro 6: Atributos selecionados para detecção de probing pela Árvore de Decisão.
Fonte: Adaptado de Viegas et al. (2014a).
folhas, que correspondem às classificações das instâncias em normal ou ataque do tipo probing.
Figura 26: Árvore de Decisão para detecção de probing.
Fonte: Autoria Própria
O primeiro atributo testado é a flag “Don’t Fragment” do cabeçalho IP. Se o atributo
for 0, o algoritmo segue para o lado esquerdo da figura; se o atributo for 1, o algoritmo segue
para o lado direito. Se, por exemplo, um vetor tem ip DF igual a 0 e count serv s2c maior
que 6, este é classificado como normal. Para classificação de qualquer vetor basta percorrer a
árvore, testando os atributos em cada nó, até atingir uma folha com a respectiva classe.
O modelo da árvore foi implementado em software com a linguagem C++, utilizando
o ambiente de desenvolvimento NetBeans. Esta ferramenta é de código aberto e possibilita
61
o desenvolvimento de aplicações em Java, HTML, PHP, C/C++ e outras linguagens.
O
classificador recebe um vetor contendo todas as 50 caracterı́sticas e classifica-o a partir dos
testes ‘se-então’ realizados nas caracterı́sticas especı́ficas da árvore.
Para validação da implementação, as 7480 instâncias do conjunto de dados de teste
foram lidas do arquivo ARFF correspondente e classificadas pela aplicação. As classificações
da aplicação foram, então, comparadas com as classificações obtidas com o programa Weka.
Este teste foi realizado com o auxı́lio das bibliotecas da plataforma Google Test, passando as
classes retornadas pela aplicação como valores a serem verificados e as classes retornadas pelo
Weka como valores esperados. A execução do teste com sucesso indicou que o classificador
implementado é equivalente ao classificador do J48. Os resultados de acurácia de classificação
serão apresentados no capı́tulo 7.
4.2
AVALIAÇÃO EM SOFTWARE
Para avaliação do classificador Árvore de Decisão em software, foram utilizados o
mesmo ambiente de compilação e execução e a mesma plataforma de medição comentados na
seção 3.2. A Árvore de Decisão foi integrada ao extrator de caracterı́sticas, de modo que um
pacote de entrada é primeiramente lido, depois extraı́do e por fim, classificado pela aplicação.
Para o arquivo com 8.000.000 de pacotes, foram realizadas cem execuções da aplicação
em sequência, para considerar uma média. Utilizou-se a equação (11) para calcular a taxa de
transferência do classificador, em pacotes por segundo. O termo tempol+e+c refere-se ao tempo
de processamento da aplicação completa (leitura + extração + classificação), enquanto o termo
tempol+e refere-se ao tempo de processamento das operações de leitura e extração.
Taxa de Trans f erência (pacotes/s) =
número de pacotes
tempol+e+c − tempol+e
(11)
Utilizou-se a equação (12) para calcular a energia consumida por cada classificação,
em joules (J). O termo Pl+e+c corresponde à potência da placa-mãe durante a execução da
aplicação completa; o termo Pl+e corresponde à potência da placa-mãe durante a execução das
operações de leitura e extração; o termo Pinat corresponde à potência da placa-mãe quando
inativa.
Energia por classi f ic. (J) =
(Pl+e+c − Pinat ) · tempol+e+c − (Pl+e − Pinat ) · tempol+e
número de pacotes
(12)
62
4.3
IMPLEMENTAÇÃO EM HARDWARE
O modelo da Árvore de Decisão para detecção de probing da figura 26 foi
implementado em hardware a partir da transcrição direta do algoritmo em comparadores e
portas lógicas. Para isso, foram utilizados a linguagem VHDL e o ambiente Sigasi.
A figura 27 mostra aproximadamente 1/6 do circuito do classificador. A entrada do
circuito é o vetor com todas as caracterı́sticas em valores unsigned de 32 bits e a saı́da é a
classe: normal ou ataque. Vários comparadores verificam os intervalos de valores dos atributos
da árvore. Na sequência, as saı́das dos comparadores são combinadas numa soma de produtos
que é nı́vel alto quando o vetor é classificado como ataque e nı́vel baixo quando o vetor é
classificado como normal.
Figura 27: Implementação em hardware da Árvore de Decisão para detecção de probing
(aproximadamente 1/6 do circuito mostrado).
Fonte: Adaptado de França et al. (2015)
A arquitetura em VHDL do classificador foi descrita num processo, para que a
implementação em hardware também utilizasse as declarações do tipo ‘se-então’. O circuito,
porém, é inteiramente combinacional.
Para validação da implementação, foi codificado um testbench que lê e classifica as
7480 instâncias do conjunto de dados de teste e compara os resultados com os resultados obtidos
no Weka. Os arquivos VHDL do classificador e do testbench foram compilados e simulados no
programa ModelSim. A execução do teste com sucesso indicou que o classificador Árvore
de Decisão implementado em hardware é equivalente ao classificador Árvore de Decisão
implementado em software.
63
4.4
AVALIAÇÃO EM HARDWARE
Para avaliação do classificador Árvore de Decisão em hardware, foram utilizados os
mesmos kit com FPGA e ferramenta de medição de consumo comentados na seção 3.4.
Como será mostrado no capı́tulo 7, o circuito da árvore é pequeno e por isso o
classificador pode trabalhar com uma grande taxa de transferência. Em vez de verificada, essa
taxa foi, então, estimada. Para isso, foi projetado o circuito da figura 28. O circuito consiste
numa memória FIFO, para registrar um atributo por vez, e no módulo classificador.
Figura 28: Circuito para estimação da taxa de transferência dos classificadores.
Fonte: Autoria Própria
O circuito tem como entradas um sinal de clock (std logic), um sinal de reset
(std logic), um sinal de inı́cio de classificação (boolean), um atributo (valor unsigned de 32
bits) e um sinal de habilitação de registro do atributo (boolean). As portas de saı́da são um sinal
de fim de classificação (boolean) e a classe (normal ou ataque). O circuito tem, ainda, um sinal
genérico: o tipo do classificador, que pode ser escolhido antes da compilação.
Utilizou-se a equação (13) para calcular a taxa de transferência da Árvore de Decisão
(e dos demais classificadores em hardware a serem apresentados), em pacotes por segundo. O
termo tempoclass refere-se ao tempo de classificação. Para os classificadores combinacionais, o
tempo de classificação é o tempo de propagação entre a FIFO e a saı́da da classe, verificada com
a ferramenta TimeQuest Timing Analyzer, do Quartus II. Para os classificadores sequenciais,
o tempo de classificação é a divisão entre a quantidade de ciclos de clock necessários para
classificação pela frequência máxima (verificada no próprio Quartus II) de operação.
Taxa de Trans f erência (pacotes/s) =
1
tempoclass
(13)
64
Para avaliação do consumo do classificador foi desenvolvido o circuito mostrado na
figura 29. O circuito possui as seguintes caracterı́sticas:
• Número configurável de réplicas do classificador;
• Memória ROM com 2000 vetores de atributos (1000 vetores normais e 1000 vetores de
ataque, retirados do arquivo ARFF de teste) e respectivas classes esperadas;
• PLL para selecionar a frequência de operação;
• Memória FIFO para ler os vetores da ROM e aplicá-los nas entradas dos classificadores;
• Detector de erro de classificação, que sinaliza quando um vetor é incorretamente
classificado.
Figura 29: Circuito para medição do consumo dos classificadores em hardware.
Fonte: Adaptado de França et al. (2015)
O circuito de medição tem como entradas um sinal de clock (std logic), um sinal
de reset (std logic), um sinal de habilitação (boolean) do circuito de teste (composto pelas
memórias) e um sinal de habilitação dos classificadores (boolean). O sinal de reset e os dois
sinais de habilitação são selecionados, respectivamente, a partir de um botão e de duas chaves
do kit de desenvolvimento. A saı́da é o sinal de detecção de erro de classificação (boolean),
mostrado em um LED do kit.
O circuito possui, ainda, três sinais genéricos que devem ser escolhidos antes da
compilação: classificador (pois o circuito é usado para avaliação da árvore e dos demais
classificadores em hardware a serem apresentados nos capı́tulos 5 e 6), o número N de réplicas
65
do classificador e a frequência de operação (que seleciona o valor de saı́da do PLL, a partir de
um sinal interno de 50 MHz da FPGA).
Esse circuito é importante por dois motivos. Primeiro, é possı́vel observar se há
incremento linear no consumo conforme o número de réplicas e assim obter o consumo do
classificador a partir de regressão linear. Segundo, com o circuito de medição é possı́vel
aumentar a frequência de operação e monitorar a saı́da de erro de classificação. Como a classe
esperada da memória é comparada com a classe obtida em tempo real, um erro de classificação
significa que o classificador não consegue funcionar corretamente na frequência em questão.
A memória ROM tem como entradas o sinal de clock e o endereço (std logic vector
de 11 bits). A saı́da é um vetor de 1601 bits (std logic vector), composto pelos vetores de
teste (1600 bits) e a classe esperada (1 bit). O endereço de 11 bits implica em 2048 linhas de
memória, que são suficientes para armazenar os 2000 vetores de teste. Os vetores são lidos da
ROM continuamente.
A memória FIFO tem N linhas e é utilizada para evitar a simplificação do circuito, pelo
Quartus II, no momento da sı́ntese e assim manter as N réplicas do classificador.
Com o circuito em funcionamento, a cada ciclo de clock, um vetor da ROM é
armazenado na FIFO, que funciona como shift-register. Isso acontece até N vetores da ROM
serem armazenados na FIFO. A partir deste momento, os vetores na FIFO são deslocados um
a um de forma que o vetor N+1 da ROM é registrado no lugar do vetor 1 na FIFO. Esse
deslocamento dos vetores de teste acontece até os 2000 vetores da ROM serem classificados.
Na sequência o ciclo se repete a partir do vetor 1, de modo que a operação de classificação dos
2000 vetores acontece continuamente.
Quando o sinal de habilitação do circuito de teste está em nı́vel baixo, não há
incremento de endereço da ROM nem deslocamento na FIFO e assim as memórias permanecem
estáticas. Quando o sinal de habilitação dos classificadores está em nı́vel baixo, as entradas dos
classificadores recebem um vetor zerado em vez de receber o vetor de atributos da memória.
A partir desses sinais de habilitação é possı́vel medir o consumo dos classificadores em
funcionamento e em modo inativo.
O circuito de medição conta, ainda, com um módulo de detecção de erro de
classificação. Neste, as classes obtidas em tempo real são comparadas com as classes esperadas.
Se houver erro de classificação em qualquer uma das N réplicas do classificador, sinaliza-se um
erro de classificação no LED de saı́da. Neste caso, o LED permanece aceso até que o circuito
seja reiniciado, indicando que o classificador não consegue operar na frequência em questão.
66
A sequência de operações do circuito é controlada pelo módulo de controle. O módulo
coordena o inı́cio e o fim de cada classificação, de modo que a classificação de um novo vetor
só é iniciada após o fim da classificação do vetor anterior. O inı́cio de cada classificação, por
sua vez, está condicionado ao prévio carregamento do vetor da ROM para a FIFO. A figura 30
mostra a máquina de estados de controle. Uma vez no estado de erro detectado, o circuito de
medição só pode voltar ao modo de execução mediante o sinal de reset.
Figura 30: Máquina de estados que controla as operações do circuito de medição dos
classificadores.
Fonte: Autoria Própria
Após a finalização do circuito de medição, os seguintes procedimentos foram adotados
para cálculo do consumo do classificador: fixou-se um valor de frequência de operação e
compilou-se o circuito para várias réplicas da Árvore de Decisão; o consumo da FPGA foi
medido, então, com os classificadores habilitados. Percebeu-se que o consumo de potência
variou linearmente com o número de réplicas do classificador e assim essa foi obtida através de
regressão linear (coeficiente angular da regressão, que desconta o consumo base da FPGA). A
partir do valor de potência, Pclass , utilizou-se a equação (14) para calcular a energia consumida
por cada classificação, em joules (J).
Energia por classi f ic. (J) = Pclass · tempoclass
(14)
67
5
DESENVOLVIMENTO DO NAIVE BAYES
Neste capı́tulo serão apresentados os desenvolvimentos do classificador Naive Bayes
para detecção de probing, em software e hardware. A tarefa de seleção de caracterı́sticas usadas
pelo Naive Bayes, explicada no inı́cio da seção 5.1, foi realizada por Eduardo Kugler Viegas
(VIEGAS et al., 2014a).
5.1
IMPLEMENTAÇÃO EM SOFTWARE
Para modelagem do classificador Naive Bayes, foi utilizado o algoritmo Naive Bayes
do programa Weka. Primeiramente, porém, foram selecionadas as caracterı́sticas, no modo
wrapper-based, mais relevantes para o Naive Bayes através de um algoritmo genético com
100 gerações e 100 populações. Do total de 50 atributos, foram selecionados os 10 atributos
mostrados no quadro 7.
Número
Atributo
1
ip DF
2
udp sport
3
tcp sport
4
tcp ack
5
num bytes serv s2c
6
num fin c2s
7
num ack c2s
8
num syn s2c
9
num rst c2s
10
num rst s2c
Quadro 7: Atributos selecionados para detecção de probing pelo Naive Bayes.
Fonte: Adaptado de Viegas et al. (2014a).
Utilizando, então, as 10 caracterı́sticas selecionadas, o algoritmo Naive Bayes do
Weka foi executado sobre o conjunto de treinamento. Entre as configurações padrão, uma foi
alterada: utilizou-se a opção useSupervisedDiscretization, para converter atributos numéricos
68
contı́nuos em atributos discretos. Nesse caso, os atributos são discretizados a partir de algumas
divisões do intervalo de variação de seus valores. A discretização é necessária para o cálculo
das probabilidades, conforme mencionado na subseção 2.2.3. A figura 31 mostra o modelo
resultante do classificador.
Figura 31: Modelo Naive Bayes para detecção de probing.
Fonte: Autoria Própria
As informações de probabilidades estão implı́citas e precisam ser obtidas. A influência
69
de um atributo de valor v na probabilidade de um pacote ser normal é dada pela divisão entre
o número presente na intercessão da coluna “Class normal” com a linha com o valor de v e o
número presente na intercessão da coluna “Class normal” com a linha “[total]” do atributo. O
mesmo raciocı́nio pode ser aplicado para calcular a influência do atributo na probabilidade do
pacote ser ataque.
Como exemplo, pode-se observar o primeiro atributo: ip DF. Se um pacote possui
ip DF = 0, a parcela deste atributo na probabilidade do pacote ser normal é P(ip DF =
0|normal) = 2029/3742. Já a parcela desse atributo na probabilidade do pacote ser ataque
é P(ip DF = 0|ataque) = 18/3742. Seguindo a mesma lógica, tem-se que para ip DF = 1:
P(ip DF = 1|normal) = 1713/3742 e P(ip DF = 1|ataque) = 3724/3742. O ip DF é um
exemplo de atributo discreto, pois assume valor 0 ou 1.
Os atributos contı́nuos foram discretizados em intervalos pelo Weka. Este é o caso do
atributo num syn s2c, por exemplo, que foi divido em quatro intervalos: [−∞ até 1,5], [1,5 até
2,5], [2,5 até 92] e [92 até ∞]. Para cada pacote, deve ser verificado em qual intervalo recai o
valor desse atributo, pois cada intervalo tem sua própria influência nas probabilidades.
O denominador das divisões das probabilidades não é igual ao número de exemplos de
treinamento, pois o algoritmo de discretização cria exemplos “virtuais” para todos os valores
de atributos no intuito de evitar que algum atributo tenha um intervalo com zero exemplos
(o que forneceria um valor zero para a multiplicação das probabilidades). Por causa disso,
também, os numeradores das divisões não são necessariamente iguais aos números de exemplos
de treinamento de determinada classe para o valor de atributo considerado.
Da figura, também podem ser retiradas as probabilidades prévias de cada classe.
Observando-se o cabeçalho das tabelas, tem-se que P(normal) = 0, 5 e P(ataque) = 0, 5. A
probabilidade prévia de cada classe é 50% pois o conjunto de dados de treinamento tem um
número igual de exemplos de ataque e de exemplos normais: 3740. Como P(c) é igual para
as duas as classes, pode-se assumir que a equação (15) expressa a probabilidade de um pacote
ser normal enquanto que a equação (16) expressa a probabilidade de um pacote ser ataque. A
maior probabilidade indica a classe na qual o pacote será classificado.
P(normal|pacote) = P(ip DF|normal) · P(ud p sport|normal) · P(tcp sport|normal)·
P(tcp ack|normal) · P(num bytes serv s2c|normal) · P(num f in c2s|normal)·
P(num ack c2s|normal) · P(num syn s2c|normal) · P(num rst c2s|normal)·
P(num rst s2c|normal)
(15)
70
P(ataque|pacote) = P(ip DF|ataque) · P(ud p sport|ataque) · P(tcp sport|ataque)·
P(tcp ack|ataque) · P(num bytes serv s2c|ataque) · P(num f in c2s|ataque)·
(16)
P(num ack c2s|ataque) · P(num syn s2c|ataque) · P(num rst c2s|ataque)·
P(num rst s2c|ataque)
O modelo Naive Bayes foi implementado em software utilizando o ambiente NetBeans
e a linguagem C++. Foram declaradas tabelas para cada atributo, contendo as constantes de
probabilidades. Cada linha das tabelas é uma estrutura que contém 3 valores: limite superior,
probabilidade para pacote normal e probabilidade para pacote ataque.
O limite superior
foi declarado como inteiro de 32 bits e armazena o valor superior do limite (arredondado
para baixo) de cada intervalo de valores dos atributos, advindos do modelo do Weka. As
probabilidades para pacote normal e para pacote ataque foram declaradas como floats de 32
bits e armazenam os valores de probabilidades do modelo do Weka, conforme explicado alguns
parágrafos acima.
A tabela 1 apresenta o exemplo de como foi construı́da a tabela de constantes para o
atributo udp sport. O campo limite superior indica quais os valores de probabilidades devem
ser utilizadas no classificador. Se, por exemplo, um pacote tem udp sport = 50000, devem ser
selecionadas Pnormal = (72.0/3746.0) e Pataque = (2.0/3746.0) pois 50000 é maior que 48793
e menor que 51350 (ou seja, encaixa-se na condição de limite superior de valor 51350). Foram
criadas funções que retornam os valores de probabilidades normal e de ataque, considerando
em qual intervalo de limite superior o valor do atributo se encaixa. As tabelas para os demais
atributos foram construı́das da mesma forma.
Tabela 1: Probabilidades para os intervalos de valores do atributo udp sport na implementação em
software do Naive Bayes.
Limite superior: inteiro de 32 bits
26
48579
48793
51350
51930
4294967295
Pnormal : float de 32 bits
(2829.0 / 3746.0)
(700.0 / 3746.0)
(1.0 / 3746.0)
(72.0 / 3746.0)
(1.0 / 3746.0)
(143.0 / 3746.0)
Pataque : float de 32 bits
(3114.0 / 3746.0)
(5.0 / 3746.0)
(26.0 / 3746.0)
(2.0 / 3746.0)
(592.0 / 3746.0)
(7.0 / 3746.0)
Fonte: Autoria própria.
Para a classificação, o Naive Bayes obtém as probabilidades de um pacote ser normal
e de ser ataque a partir do vetor com todos os 50 atributos e assinala a classe de maior
71
probabilidade. A probabilidade do pacote ser normal é dada pelo produto das probabilidades
de cada atributo inferindo a classe normal. A probabilidade do pacote ser ataque é dada pelo
produto das probabilidades de cada atributo inferindo a classe ataque. A figura 32 mostra o
fluxograma do classificador, apresentando em detalhes os cálculos das probabilidades.
Figura 32: Fluxograma do classificador Naive Bayes para detecção de probing em software.
Fonte: Autoria Própria
Nas caixas que mostram os detalhes dos cálculos das probabilidades, estão presentes
as funções “pNormal” e “pAtaque”. Estas são as funções que verificam em qual limite superior
o valor do atributo se encaixa, para assim retornar os valores individuais das probabilidades.
Ambas as funções recebem dois parâmetros: a tabela e o valor do atributo correspondente.
Para validação da implementação, as 7480 instâncias do conjunto de dados de teste
foram lidas do arquivo ARFF correspondente e classificadas pela aplicação. As classificações
da aplicação foram, então, comparadas com as classificações obtidas com o programa Weka.
Este teste foi realizado com o auxı́lio das bibliotecas da plataforma Google Test, passando as
classes retornadas pela aplicação como valores a serem verificados e as classes retornadas pelo
Weka como valores esperados. A execução do teste com sucesso indicou que o classificador
implementado é equivalente ao classificador Naive Bayes do Weka.
72
5.2
AVALIAÇÃO EM SOFTWARE
A avaliação do classificador Naive Bayes em software foi realizada de forma
semelhante à avaliação da Árvore de Decisão em software, explicada na seção 4.2. A única
alteração foi a troca do classificador.
5.3
IMPLEMENTAÇÃO EM HARDWARE
Foram desenvolvidas duas versões do classificador Naive Bayes para detecção de
probing em hardware: uma versão combinacional e uma versão sequencial. A implementação
combinacional é praticamente uma tradução direta do classificador em software. Com isso, as
operações de consultas às tabelas de probabilidades e multiplicações ocorrem em paralelo para
cada atributo, fato que reduz o tempo de classificação. Em contrapartida, a implementação
sequencial faz uma operação por vez, utilizando menos recursos de hardware. Foram utilizados
a linguagem VHDL e o ambiente de desenvolvimento Sigasi para as implementações.
5.3.1
VERSÃO COMBINACIONAL
Na implementação combinacional, transcreveu-se diretamente o algoritmo da figura 32
em consultas à tabelas, multiplicadores e um comparador.
A figura 33 mostra parte do circuito do classificador. A entrada do circuito é o vetor
com todas as caracterı́sticas em valores unsigned de 32 bits e a saı́da é a classe: normal ou
ataque. Para cada valor de atributo do Naive Bayes, são realizadas consultas às tabelas de
probabilidade normal e de probabilidade de ataque. Há dois multiplicadores, cada um de dez
entradas: um multiplicador para o produto das probabilidades normais e um multiplicador para
o produto das probabilidades de ataque. Por fim, o comparador verifica qual o maior produto e
assinala a classe de maior probabilidade.
De forma semelhante à versão em C++, na versão em VHDL também há uma tabela
para cada atributo. Cada linha da tabela também é composta por uma estrutura com três valores:
limite superior, probabilidade normal e probabilidade de ataque. O limite superior é unsigned
de 32 bits e as probabilidades individuais são floats de 32 bits (no padrão IEEE 754: 1 bit para
sinal, 8 bits para expoente e 23 bits para mantissa).
As considerações feitas com relação às tabelas da implementação em software também
são válidas para a implementação combinacional em hardware. As tabelas foram declaradas
como constantes no código VHDL. O circuito é inteiramente combinacional.
73
Figura 33: Implementação combinacional do Naive Bayes em hardware para detecção de probing.
Fonte: Adaptado de França et al. (2015)
Para validação da implementação, foi codificado um testbench que lê e classifica as
7480 instâncias do conjunto de dados de teste e compara os resultados com os resultados obtidos
no Weka. Os arquivos VHDL do classificador e do testbench foram compilados e simulados
no programa ModelSim. A execução do teste com sucesso indicou que o classificador Naive
Bayes combinacional implementado em hardware é equivalente ao classificador Naive Bayes
implementado em software.
5.3.2
VERSÃO SEQUENCIAL
A implementação sequencial do classificador Naive Bayes consulta as tabelas de
probabilidades de forma serial. Assim, as probabilidades normal e de ataque de cada atributo
são multiplicadas por vez. O circuito, mostrado na figura 34, utiliza apenas dois multiplicadores
de duas entradas, mas precisa de 73 ciclos de clock para classificar um pacote. Uma memória
ROM armazena os valores de limite superior, probabilidade normal e probabilidade de ataque
para cada intervalo dos atributos.
O circuito tem como entradas um sinal de clock (std logic), um sinal de reset
(std logic), um sinal de inı́cio de classificação (boolean) e os atributos (valores unsigned de
32 bits). As portas de saı́da são um sinal de fim de classificação (boolean) e a classe (normal
ou ataque).
74
Figura 34: Implementação sequencial do Naive Bayes em hardware para detecção de probing.
Fonte: Adaptado de França et al. (2015)
A memória ROM tem como entradas o sinal de clock e o endereço (std logic vector de
7 bits). E tem como saı́da uma linha (std logic vector de 96 bits) composta pela concatenação
do limite superior (std logic vector de 32 bits) com as probabilidades normal e de ataque (ambas
std logic vector de 32 bits, a partir da conversão de valores float de 32 bits). O endereço de 7
bits implica em 128 linhas, que são suficientes para armazenar os valores para cada intervalo de
atributo, que totalizam 70 linhas.
A classificação começa quando os atributos selecionados para o Naive Bayes são
registrados no registrador “atributos reg”. Para cada atributo, são lidas as linhas (uma por
ciclo de clock) correspondentes da tabela. A consulta à tabela consiste em comparar o valor
do atributo com o limite superior. Enquanto o valor do atributo está dentro do limite superior,
os registradores das probabilidades normal e de ataque são sobrescritos com os valores advindos
da memória. Esses registradores armazenam valores float de 32 bits, então as probabilidades
individuais lidas da memória precisam ser convertidas em float novamente.
O último limite superior para cada atributo é um vetor com todos os bits iguais a ‘1’,
que representa o valor ∞ do modelo do Weka. Este vetor é utilizado para sinalizar, através do
75
buffer do circuito, o fim de um atributo na tabela. Neste momento, os valores de probabilidades
do atributo são multiplicados pelos valores de probabilidades acumuladas. Os registradores das
probabilidades acumuladas também armazenam valores floats de 32 bits. Como os valores de
probabilidade são menores do que 1, foi mantida a mesma precisão em bits para registrar os
resultados das multiplicações.
Ao término da multiplicação das probabilidades de todos os dez atributos, um
comparador classifica o pacote em normal ou ataque, a partir da verificação do maior valor
de probabilidade acumulada.
Todo esse fluxo da classificação é controlado por uma máquina de três estados. Antes
do inı́cio de classificação, o circuito fica no estado “inativo”. Após o pulso de inı́cio, o
circuito vai para o estado “calculando”, no qual permanece até a multiplicação de todas as
probabilidades. Após o fim de todos os atributos, o circuito vai para o estado “fim”, no qual
deixa o sinal de fim de classificação em nı́vel alto.
A classificação dura 73 ciclos de clock porque são necessários 70 ciclos para percorrer
as 70 linhas de valores da memória, mais 1 ciclo para inı́cio de classificação, mais 2 ciclos
iniciais para registro dos atributos e registro dos primeiros valores de probabilidades individuais.
No inı́cio de classificação todos os registradores de probabilidades são carregados com o valor
um, fator neutro na multiplicação.
Para validação da implementação, foi codificado um testbench que lê e classifica as
7480 instâncias do conjunto de dados de teste e compara os resultados com os resultados
obtidos no Weka. Os arquivos VHDL do classificador e do testbench foram compilados e
simulados no programa ModelSim. A execução do teste com sucesso indicou que o classificador
Naive Bayes sequencial implementado em hardware é equivalente ao classificador Naive Bayes
implementado em software.
5.4
AVALIAÇÃO EM HARDWARE
A avaliação dos classificadores Naive Bayes em hardware (versões combinacional e
sequencial) foi realizada de forma semelhante à avaliação da Árvore de Decisão em hardware,
explicada na seção 4.4. A única alteração foi a troca do classificador.
76
6
DESENVOLVIMENTO DO KNN
Neste capı́tulo serão apresentados os desenvolvimentos do classificador kNN para
detecção de probing, em software e hardware. As tarefas de clusterização da base de dados
de treinamento, de seleção do melhor parâmetro k e de seleção de caracterı́sticas usadas pelo
kNN, explicadas no inı́cio da seção 6.1, foram realizadas por Eduardo Kugler Viegas (VIEGAS
et al., 2014a).
6.1
IMPLEMENTAÇÃO EM SOFTWARE
Para avaliação do classificador kNN, foi utilizado o algoritmo IBk (o IB vem de
Instance-Based) do programa Weka. Como os atributos dos pacotes de rede têm diferentes
variações de valores, é importante normalizá-los, conforme mencionado na subseção 2.2.4. O
Weka utiliza a equação (17) para normalizar os atributos, em que max e min são os valores
máximo e mı́nimo do atributo, a ser normalizado, na base de treinamento. Para normalizar os
atributos entre -1 e +1, os valores de escala e translação devem ser 2 e -1, respectivamente.
Atributo − min
Atributonorm = escala ·
+ translação
max − min
(17)
A base de dados de treinamento possui mais de 7000 vetores. Se para a classificação
do kNN fossem calculadas as distâncias para todos esses vetores, o tempo necessário seria
demasiadamente grande. Para reduzir a quantidade de cálculos de distâncias, foi utilizado o
algoritmo k-Means do Weka para clusterização da base de treinamento. Este processo substitui
grandes grupos de vetores semelhantes (próximos uns dos outros) por um único vetor (cluster):
o centroide dos vetores.
Com o k-Means, foram selecionados 100, 200, 300, 400 e 500 clusters, já normalizados
entre -1 e +1, para cada classe. Um algoritmo genético de busca, do Weka, forneceu o melhor
resultado de classificação para o caso de 500 clusters de cada classe. Assim, gerou-se um novo
arquivo ARFF contendo 500 centroides normais e 500 centroides de ataque. Na sequência,
77
aplicou-se um algoritmo genético para busca do melhor parâmetro k para o classificador, entre
1 e 10. O melhor resultado foi obtido para k = 3.
Após definir o conjunto de clusters e o parâmetro k, foram selecionadas no modo
wrapper-based as caracterı́sticas mais relevantes para o kNN através de um algoritmo genético
com 100 gerações e 100 populações. Foram selecionados os 19 atributos mostrados no quadro 8.
Os valores máximo e mı́nimo de cada atributo na base de treinamento também são mostrados.
Número
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Atributo
ip len
ip id
ip MF
ip proto
udp dport
tcp sport
tcp ack
tcp frst
tcp fpush
tcp fack
fr length
conn status
count fr s2c
num bytes s2c
num bytes serv c2s
num bytes serv s2c
num syn fin s2c
num ack c2s
num syn s2c
Mı́nimo
Máximo
29
5844
0
65509
0
1
1
17
0
60960
0
65416
0
4294504880
0
2
0
2
0
2
0
5804
0
15
0
4205
0
114688
0
32664
0
114688
0
17173
0
2722
0
7949
Quadro 8: Atributos selecionados para detecção de probing pelo kNN e seus valores máximos e
mı́nimos na base de dados de treinamento.
Fonte: Adaptado de Viegas et al. (2014a).
O kNN foi implementado em software com o C++ utilizando o ambiente NetBeans.
Primeiramente foram criadas duas estruturas de dados. A primeira contém 19 variáveis do tipo
float de 32 bits, para armazenar os atributos normalizados, e uma classe (normal ou ataque). A
segunda estrutura de dados contém um valor de distância do tipo float de 32 bits e uma classe,
para armazenar o par distância/classe dos vizinhos. Foi criada, também, uma tabela constante
que armazena os 1000 vetores (centroides) de treinamento. Cada vetor é do formato da primeira
estrutura de dados, contendo os 19 atributos normalizados e a classe correspondente.
Após a definição das estruturas de dados e da tabela com os vetores de treinamento,
foram criadas duas funções auxiliares usadas durante a classificação. A primeira função
78
normaliza um vetor de entrada e a segunda função calcula o quadrado da distância Euclidiana
entre dois vetores. A raiz quadrada da distância Euclidiana foi descartada, pois é uma operação
custosa e não influencia na procura dos vizinhos mais próximos.
A figura 35 mostra o fluxograma do kNN para classificação de novos vetores.
Primeiramente os atributos do kNN do vetor de entrada são normalizados entre -1 e +1.
Na sequência são calculadas as distâncias desse vetor normalizado para cada um dos 1000
vetores de treinamento. Durante os cálculos das distâncias, os três vizinhos mais próximos são
mantidos. Ao final, a classe mais comum entre os vizinhos é selecionada.
Figura 35: Fluxograma do classificador kNN para detecção de probing em software.
Fonte: Autoria Própria
Para validação da implementação, as 7480 instâncias de teste foram lidas do
arquivo ARFF correspondente e classificadas pela aplicação. As classificações foram, então,
comparadas com as classificações obtidas com o Weka. Esse teste foi realizado com o auxı́lio
das bibliotecas do Google Test, passando as classes retornadas pela aplicação como valores
a serem verificados e as classes do Weka como valores esperados. A execução do teste com
sucesso indicou que o kNN implementado é equivalente ao classificador IBk do Weka.
79
6.2
AVALIAÇÃO EM SOFTWARE
A avaliação do classificador kNN em software foi realizada de forma semelhante à
avaliação da Árvore de Decisão em software, explicada na seção 4.2. A única alteração foi a
troca do classificador.
6.3
IMPLEMENTAÇÃO EM HARDWARE
O kNN foi implementado em hardware de forma sequencial e é composto por vários
módulos. Foram utilizados o ambiente de desenvolvimento Sigasi e a linguagem VHDL.
A figura 36 mostra o circuito do classificador em diagrama de blocos. São necessários
24.096 ciclos de clock para classificar um pacote. Uma memória ROM armazena os 1000
vetores de treinamento. As entradas são um sinal de clock (std logic), um sinal de reset
(std logic), um sinal de inı́cio de classificação (boolean) e os atributos (valores unsigned de
32 bits). As saı́das são um sinal de fim de classificação (boolean) e a classe (normal ou ataque).
Figura 36: Implementação do kNN em hardware para detecção de probing.
Fonte: Adaptado de França et al. (2015)
O primeiro módulo do classificador é o Normalizador, mostrado na figura 37, que tem
como entradas o sinal de clock, o sinal de reset, um sinal de inı́cio de normalização (boolean)
e os atributos. As saı́das são um sinal de fim de normalização (boolean) e um vetor com os 19
atributos do kNN normalizados entre -1 e +1 (floats de 32 bits).
A normalização começa quando o pulso de inı́cio é passado para nı́vel alto. Neste
80
Figura 37: Circuito do Normalizador do kNN.
Fonte: Autoria Própria
momento os atributos do kNN são registrados no shift register “atributos sreg”. Durante a
normalização, os atributos são deslocados no shift register, de modo que apenas um atributo
é normalizado por vez.
A operação de normalização consiste em multiplicar o atributo
pelo coeficiente angular correspondente na tabela de coeficientes e somar o resultado com o
coeficiente linear. Os coeficientes para cada atributo foram calculados a partir da equação (17),
modificada para o formato de reta.
A tabela de coeficientes foi implementada como constante e armazena os coeficientes
de normalização (floats de 32 bits) para cada atributo, também na forma de shift register.
Os coeficientes são deslocados no shift register, para a normalização do atributo em questão.
Assim, são necessários apenas um multiplicador e um somador. Foi utilizado um multiplicador
que fornece o resultado após 5 ciclos de clock, para aumentar a frequência máxima de operação
do módulo.
Após a operação de normalização, cada atributo é registrado e deslocado no
shift register “atributos normalizados sreg”. O vetor de saı́da é composto por todos os atributos
normalizados.
A normalização é controlada por uma máquina de três estados. Antes do inı́cio da
normalização, o circuito fica no estado “inativo”. Após o pulso de inı́cio, o circuito vai para
o estado “normalizando”, no qual permanece até a normalização de todos os 19 atributos. Em
seguida o circuito vai para o estado “fim”, no qual deixa o sinal de fim de normalização em nı́vel
alto. A operação completa dura 96 ciclos de clock: 95 ciclos para normalizar os 19 atributos,
mais 1 ciclo do pulso de inı́cio de normalização.
A memória ROM do classificador tem como entradas o sinal de clock e o endereço
81
(std logic vector de 10 bits). A saı́da é um vetor (std logic vector de 1601 bits) composto
da instância de treinamento com todos os atributos, mais um bit que corresponde à classe da
instância. Os vetores de treinamento, que possuem atributos normalizados entre -1 e +1, são
convertidos em std logic vector para serem armazenados. O endereço de 10 bits implica em
1024 linhas de memória, que são suficientes para armazenar os 1000 vetores de treinamento.
Na sequência implementou-se o módulo de cálculo de distância, mostrado na figura 38,
que tem como entradas o sinal de clock, o sinal de reset, um sinal de inı́cio de cálculo (boolean)
e os dois vetores (um de treinamento e um de teste; cada um com 19 floats de 32 bits,
correspondendo aos atributos normalizados do kNN) dos quais se quer calcular a distância
(quadrado da distância Euclidiana, conforme mencionado na seção 6.1). As saı́das são um
sinal de fim de cálculo (boolean) e o resultado da distância (float de 32 bits).
Figura 38: Circuito do Calculador de Distância do kNN.
Fonte: Autoria Própria
O cálculo de distância começa quando o pulso de inı́cio é passado para nı́vel alto. Neste
momento o vetor de treinamento (que vem da memória ROM) e o vetor de teste são registrados
nos shift registers “vetor treinamento sreg” e “vetor teste sreg”, respectivamente. A cada pulso
de clock, os atributos de ambos os vetores são deslocados nos shift registers.
A operação de cálculo de distância consiste em subtrair os atributos correspondentes
dos vetores, elevar o resultado ao quadrado e somar este quadrado com o valor de distância
acumulada, até todos os atributos serem considerados. Como cada atributo é considerado por
vez, são necessários apenas um subtrator, um multiplicador (usado para a operação de elevar
ao quadrado) e um somador. Todos os resultados são computados como floats de 32 bits. Há,
ainda, um registrador para a saı́da do subtrator e um registrador para a saı́da do multiplicador,
não mostrados na figura.
O fluxo de cálculo da distância é controlado por uma máquina de três estados. Antes
do inı́cio do cálculo, o circuito fica no estado “inativo”. Após o pulso de inı́cio, o circuito vai
82
para o estado “calculando”, no qual permanece até todos os atributos serem considerados no
cálculo. Em seguida o circuito vai para o estado “fim”, no qual deixa o sinal de fim do cálculo
de distância em nı́vel alto.
O cálculo de distância dura 22 ciclos de clock: 19 ciclos para calcular a distância
individual de cada um dos 19 atributos, mais 1 ciclo do pulso de inı́cio do cálculo, mas 2 ciclos
de registro dos valores iniciais de diferença e de multiplicação.
Em seguida implementou-se o módulo ordenador, que mantém os três pares
distância/classe dos vizinhos mais próximos e classifica o vetor de teste. O módulo tem como
entradas o sinal de clock, o sinal de reset, um sinal de clear (boolean), um sinal de habilitação
(boolean) e um par distância/classe (float de 32 bits/normal ou ataque). A saı́da é a classe do
vetor.
Quando habilitado, o ordenador ordena três pares distância/classe. A ordenação
mantém sempre os pares com as menores distâncias durante o processo de classificação do
kNN. A cada pulso de clock, o circuito verifica se o par de entrada tem distância menor do
que as distâncias dos pares já registrados. Em caso afirmativo, o novo par é armazenado no
ordenador. Caso contrário, o novo par é descartado.
O sinal de clear tem por objetivo reiniciar o ordenador, armazenando três pares com
o valor máximo permitido para o float de 32 bits e a classe ataque. A cada classificação, o
ordenador deve ser reiniciado, antes de serem procurados os vizinhos mais próximos.
Considerando os três pares armazenados, o ordenador seleciona a classe do vetor de
teste: ataque, caso haja dois ou três pares com o valor de classe ataque, ou normal, caso
contrário.
Por fim, implementou-se o módulo completo do kNN. O classificador instancia cada
um dos módulos descritos anteriormente, isto é, normalizador, memória ROM, calculador de
distância e ordenador. O módulo também é responsável por gerar os pulsos de inı́cio dos
módulos internos e os endereços de acesso à memória ROM com os vetores de treinamento.
O pulso de inı́cio de classificação é também o pulso de inı́cio de normalização. A
partir do pulso de fim de normalização, o kNN gera um pulso que ao mesmo tempo inicia o
primeiro cálculo de distância e reinicia o ordenador. A partir do fim do cálculo de distância,
o kNN gera dois pulsos: um pulso que ao mesmo tempo incrementa o endereço da ROM e
habilita o ordenador e outro pulso, atrasado em dois ciclos de clock, para iniciar o próximo
cálculo de distância. Esse atraso de dois ciclos de clock permite que o endereço da ROM seja
incrementado em um ciclo e um novo vetor de treinamento esteja disponı́vel no outro ciclo.
83
A classificação de um vetor dura 24.096 ciclos de clock porque são necessários 96
ciclos para a normalização, mais 1000·(22+2) ciclos para as demais operações. O cálculo
de distância, que dura 22 ciclos, é multiplicado por 1.000, pois existem 1000 vetores de
treinamento. O fator 2 que se soma aos ciclos do cálculo de distância é devido aos dois ciclos
de atraso entre um cálculo e outro, conforme explicado no parágrafo anterior.
Para validação da implementação, foi codificado um testbench que lê e classifica as
7480 instâncias do conjunto de dados de teste e compara os resultados com os resultados obtidos
no Weka. Os arquivos VHDL do classificador e do testbench foram compilados e simulados
no programa ModelSim. A execução do teste com sucesso indicou que o classificador kNN
implementado em hardware é equivalente ao classificador kNN implementado em software.
6.4
AVALIAÇÃO EM HARDWARE
A avaliação do classificador kNN hardware foi realizada de forma semelhante à
avaliação da Árvore de Decisão em hardware, explicada na seção 4.4. A única alteração foi
a troca do classificador.
84
7
RESULTADOS
Neste capı́tulo serão apresentados os resultados da dissertação. Na seção 7.1 serão
apresentados os resultados obtidos para o extrator de caracterı́sticas existente em software e para
a implementação correspondente desenvolvida em hardware. Na seção 7.2 serão apresentados
os resultados obtidos para os diferentes classificadores. Por fim, na seção 7.3 serão apresentadas
as publicações resultantes desta dissertação.
7.1
EXTRATOR DE CARACTERÍSTICAS
Nesta seção serão apresentados os resultados obtidos para as duas versões do extrator
de caracterı́sticas, com relação à área de circuito (para o extrator em hardware), taxa de
transferência e consumo de energia.
7.1.1
ÁREA DO CIRCUITO
A tabela 2 apresenta a área usada pelo extrator de caracterı́sticas em hardware, quanto
à células lógicas e bits de memória. Cada linha mostra os recursos utilizados pelos módulos
que compõem o circuito. O extrator completo ocupa 2.683 células lógicas e 5.242.880 bits de
memória. A totalidade dos bits de memória é usada pela tabela de atributos.
Tabela 2: Área utilizada pelo extrator de caracterı́sticas implementado em hardware.
Módulo
Células Lógicas Bits de Memória
apagamento coluna
33
0
controle
122
0
tabela atributos
600
5.242.880
hash
728
0
extrator atributos cabeçalho
60
0
atualiza linha
523
0
restante
617
0
extrator de caracterı́sticas
2.683
5.242.880
Fonte: Autoria própria.
85
7.1.2
TAXA DE TRANSFERÊNCIA
A tabela 3 apresenta a taxa de transferência das duas versões do extrator de
caracterı́sticas. O extrator em hardware funcionou corretamente para uma frequência de
operação de 50 MHz, o que resultou numa taxa de transferência de 534.815 pacotes/s. A taxa
de transferência do extrator em software é 295.615 pacotes/s, o que corresponde a 55% da taxa
em hardware.
Tabela 3: Taxa de transferência dos extratores em software e hardware (em 50 MHz).
Implementação
Pacotes/s
extrator em software 295.615
extrator em hardware 534.815
Fonte: Autoria própria.
Ambos os extratores atendem à taxa de transferência máxima teórica do link de Fast
Ethernet de 150.000 pacotes/s (CISCO, 2009).
7.1.3
CONSUMO DE ENERGIA
A tabela 4 apresenta o consumo de energia dos extratores. O extrator de caracterı́sticas
em software gasta 5,03 µJ para extrair um pacote, enquanto a implementação em hardware
gasta 1,15 µJ (em 50 MHz). O extrator de caracterı́sticas em hardware, então, consome 23%
da energia consumida pela implementação em software na operação de extração.
Tabela 4: Energia consumida na operação de extração em software e hardware (em 50 MHz).
Implementação
extrator em software
extrator em hardware
Energia por Extração (µJ)
5,03
1,15
Fonte: Autoria própria.
Adicionalmente, calculou-se também a energia consumida por extração em hardware
para as frequências de operação de 10, 20, 30 e 40 MHz. A figura 39, na qual o infixo “hw”
significa hardware, mostra que esses valores variam pouco em relação ao valor obtido para 50
MHz (no máximo 15 nJ). Conclui-se, então, que o consumo energético do extrator em hardware
depende minoritariamente da frequência. O consumo de potência e o tempo para extração mais
apagamento são, respectivamente, diretamente e inversamente proporcionais à frequência de
operação, e por isso o valor de energia se mantém quase constante.
86
Figura 39: Energia gasta para extrair um pacote em hardware para diferentes frequências de
operação.
Fonte: Autoria Própria
7.2
CLASSIFICADORES
Nesta seção serão apresentados os resultados obtidos para os classificadores, com
relação à acurácia de classificação, área de circuito (para os classificadores em hardware), taxa
de transferência e consumo de energia.
Os classificadores em hardware que utilizam ponto flutuante (Naive Bayes e kNN)
também foram avaliados com 10 e 16 bits, em adição às implementações originais, com 32 bits.
Nesses casos, todos os valores float dos classificadores têm o mesmo tamanho (32, 16 ou 10
bits), tanto para sinais e resultados internos quanto para os valores armazenados em memória.
Avaliou-se essa redução porque as operações com float em hardware são custosas.
A implementação do ponto flutuante de 16 bits no Naive Bayes e no kNN utilizou 1 bit
para sinal, 6 bits para expoente e 9 bits para a mantissa. Já a implementação de 10 bits, para os
dois classificadores, utilizou 1 bit para sinal, 6 bits para expoente e 3 bits para a mantissa. Esses
parâmetros forneceram o melhor resultado de acurácia. Além disso, no kNN, a normalização
do atributo tcp ack entre -1 e +1 requer ao menos 6 bits de expoente, devido ao grande valor
máximo do atributo.
Os resultados desta seção serão apresentados com as seguintes convenções:
87
• As implementações são nomeadas com os prefixos ad, nb e knn, denotando os
classificadores Árvore de Decisão, Naive Bayes e kNN, respectivamente;
• Os classificadores Naive Bayes incluem os infixos comb e seq, denotando as versões
combinacional e sequencial, respectivamente;
• Os classificadores que usam ponto flutuante incluem os sufixos 32, 16 e 10, indicando o
número de bits da representação em float.
7.2.1
ACURÁCIA DE CLASSIFICAÇÃO
Nesta subseção serão apresentados os resultados de acurácia de classificação dos
classificadores, considerando o conjunto de dados de teste (7480 instâncias: 3740 normais e
3740 ataques). Além da acurácia, serão mostradas as estimativas das taxas de falso-positivo e
falso-negativo, a partir do isolamento dos erros de classificação.
A tabela 5 mostra a matriz de confusão para o classificador Árvore de Decisão. Neste
tipo de apresentação de dados, os acertos do classificador são mostrados na diagonal principal
e os erros são mostrados na diagonal secundária. Dos 3740 vetores normais, 3736 foram
realmente classificados como normais e 4 foram classificados como ataques. Dos 3740 vetores
de ataque, 3734 foram realmente classificados como ataques e 6 foram classificados como
normais. Esses resultados foram obtidos tanto no programa Weka quanto nas implementações
em software e hardware do classificador. Os resultados implicam numa acurácia de 99,87%,
taxa de falso-positivo de 0,11% e taxa de falso-negativo de 0,16%, para o classificador Árvore
de Decisão.
Tabela 5: Matriz de confusão para o classificador Árvore de Decisão.
Normal
3736
6
Ataque ← classificado como
4
Normal
3734
Ataque
Fonte: Autoria própria.
A tabela 6 mostra a matriz de confusão para o classificador Naive Bayes. Dos 3740
vetores normais, 3727 foram realmente classificados como normais e 13 foram classificados
como ataques. Dos 3740 vetores de ataque, 3730 foram realmente classificados como ataques
e 10 foram classificados como normais. Esses resultados foram obtidos tanto no programa
Weka quanto nas implementações em software e hardware (para ponto flutuante de 32 bits)
do classificador. Os resultados implicam numa acurácia de 99,69%, taxa de falso-positivo de
0,35% e taxa de falso-negativo de 0,27%, para o classificafor Naive Bayes.
88
Tabela 6: Matriz de confusão para o classificador Naive Bayes.
Normal
3727
10
Ataque ← classificado como
13
Normal
3730
Ataque
Fonte: Autoria própria.
A tabela 7 mostra a matriz de confusão para o classificador kNN. Dos 3740 vetores
normais, 3656 foram realmente classificados como normais e 84 foram classificados como
ataques. Dos 3740 vetores de ataque, 3719 foram realmente classificados como ataques e
21 foram classificados como normais. Esses resultados foram obtidos tanto no programa
Weka quanto nas implementações em software e hardware (para ponto flutuante de 32 bits)
do classificador. Os resultados implicam numa acurácia de 98,60%, taxa de falso-positivo de
2,25% e taxa de falso-negativo de 0,56%, para o classificafor kNN.
Tabela 7: Matriz de confusão para o classificador kNN.
Normal
3656
21
Ataque ← classificado como
84
Normal
3719
Ataque
Fonte: Autoria própria.
A tabela 8 apresenta a acurácia de cada classificador, considerando também as
implementações em hardware com ponto flutuante de 16 e 10 bits. As versões em software
foram avaliadas apenas com 32 bits para os valores float.
Tabela 8: Acurácia dos classificadores sobre a base de testes.
Classificador
ad
nb comb 32
nb comb 16
nb comb 10
nb seq 32
nb seq 16
nb seq 10
knn 32
knn 16
knn 10
Acurácia (%)
99,87
99,69
99,69
99,68
99,69
99,69
99,68
98,60
98,57
97,09
Implementação
software e hardware
software e hardware
hardware
hardware
software e hardware
hardware
hardware
software e hardware
hardware
hardware
Fonte: Autoria própria.
O classificador que obteve a maior acurácia foi a Árvore de Decisão, acertando 99,87%
das classificações (em software e hardware). Na sequência vem o Naive Bayes com float de 32
bits, que acertou 99,69% das classificações (em software e hardware). As implementações
89
em hardware do Naive Bayes com 16 e 10 bits acertaram 99,69% e 99,68%, respectivamente.
Nestes casos, o circuito diminuiu, como será mostrado em breve, mas não houve redução de
acurácia para 16 bits e uma redução mı́nima para 10 bits. Percebe-se que as implementações
combinacional e sequencial do Naive Bayes são equivalentes do ponto de vista de acurácia.
Já o kNN de 32 bits acertou 98,60% das classificações (em software e hardware). As
implementações em hardware com 16 e 10 bits acertaram 98,57% e 97,09%, respectivamente.
Nestes casos, o circuito também diminuiu em detrimento da redução de acurácia.
7.2.2
ÁREA DOS CIRCUITOS
A tabela 9 apresenta a área usada pelos classificadores em hardware, quanto a células
lógicas, bits de memória e multiplicadores de 9 bits dedicados. A Árvore de Decisão é
o classificador mais compacto entre todos os classificadores, ocupando apenas 167 células
lógicas. A árvore não possui requisitos de memória e nem multiplicadores.
Tabela 9: Área utilizada pelos classificadores implementados em hardware.
Classificador
ad
nb comb 32
nb comb 16
nb comb 10
nb seq 32
nb seq 16
nb seq 10
knn 32
knn 16
knn 10
Células Lógicas Bits de Memória
167
0
8.420
0
3.085
0
2.115
0
1.380
10.112
743
6.528
633
4.992
6.300
465.920
3.090
228.352
2.024
128.000
Multiplicadores de 9 bits
0
126
36
0
14
4
0
14
4
2
Fonte: Autoria própria.
A versão combinacional do classificador Naive Bayes utiliza a maior área, com 8.420
células lógicas. Não foram utilizados bits de memória na sı́ntese porque o circuito armazena
os valores de probabilidades dos atributos em células lógicas. Até por isso a quantidade
de células é grande. Foram necessários 126 multiplicadores de 9 bits para a multiplicação
das probabilidades normal e de ataque dos atributos.
Ao reduzir-se os valores float do
classificador para 16 e 10 bits, foram obtidos 3.085 células lógicas, 36 multiplicadores e 2.115
células lógicas, 0 multiplicadores, respectivamente. Para 10 bits, o Quartus II sintetizou os
multiplicadores com células lógicas, em vez de usar multiplicadores dedicados.
A versão sequencial do classificador Naive Bayes utiliza 1.380 células lógicas. A
90
redução na quantidade de células foi possı́vel a partir do armazenamento dos valores de
probabilidades dos atributos na memória ROM. Foram utilizados 10.112 bits de memória para
esse armazenamento. Como o classificador compartilha os multiplicadores das probabilidades,
foram necessários apenas 14 multiplicadores de 9 bits. Ao reduzir-se os valores float do
classificador para 16 e 10 bits, foram obtidos 743 células lógicas, 6.528 bits de memória, 4
multiplicadores e 633 células lógicas, 4.992 bits de memória, 0 multiplicadores (nesse caso os
multiplicadores do classificador também foram sintetizados com células lógicas).
O classificador kNN requer a maior quantidade de bits de memória: 465.920, utilizados
para armazenar os vetores de treinamento do algoritmo. Foram necessários, ainda, 6.300
células lógicas e 14 multiplicadores de 9 bits. Esses últimos são utilizados nos módulos de
normalização e de cálculo de distância. Ao reduzir-se os valores float do classificador para 16
e 10 bits, foram obtidos 3.090 células lógicas, 228.352 bits de memória, 4 multiplicadores e
2.024 células lógicas, 128.000 bits de memória, 2 multiplicadores, respectivamente.
7.2.3
TAXA DE TRANSFERÊNCIA
A tabela 10 apresenta a taxa de transferência dos classificadores. Não há valores de
taxa de transferência em software para os classificadores com float de 10 e 16 bits, visto que em
software avaliaram-se apenas float de 32 bits.
Tabela 10: Taxa de transferência dos classificadores em software e hardware (em 50 MHz).
Classificador
ad
nb comb 32
nb comb 16
nb comb 10
nb seq 32
nb seq 16
nb seq 10
knn 32
knn 16
knn 10
Pacotes/s (hardware)
68.653.027
3.529.216
5.947.813
7.869.182
619.041
991.232
1.204.657
1.843
2.507
3.018
Acurácia Relativa (%)
100,00
100,00
100,00
99,99
100,00
100,00
99,99
100,00
99,97
98,47
Pacotes/s (software)
15.198.631
821.358
821.358
7.900
-
Fonte: Autoria própria.
A Árvore de Decisão em hardware tem a maior taxa de transferência entre todos os
classificadores, classificando mais de 68 milhões de pacotes por segundo. Esse valor é 4,5 vezes
a taxa de transferência da versão correspondente em software. A versão combinacional do Naive
Bayes em hardware com float de 32 bits também é mais rápida que a versão em software, por
um fator de 4,3. Em contrapartida, o Naive Bayes em software é mais rápido que a versão
91
sequencial do Naive Bayes em hardware com float de 32 bits por um fator de 1,3. O mesmo
acontece para o kNN, no qual a versão em software é mais rápida por um fator de 4,3. Isso
acontece, nos dois últimos casos, porque as implementações em hardware são inteiramente
sequenciais e os classificadores possuem frequência máxima de operação bem menor que a
frequência de clock do processador da placa-mãe.
A acurácia relativa indica a predição de cada classificador em hardware relativa à
versão em software. Para as versões com float de 32 bits, a acurácia relativa é 100% porque
hardware e software fornecem os mesmos resultados. Ao reduzir-se o número de bits em
hardware, a acurácia é reduzida (com exceção do Naive Bayes de 16 bits). A perda de acurácia
foi menor do que 2 pontos percentuais em todos os casos, mas a partir da redução do tamanho
do float de 32 para 10 bits em hardware, aumentaram-se as taxas de transferência em 123%,
95% e 64% para Naive Bayes combinacional, Naive Bayes sequencial e kNN, respectivamente.
Com exceção do kNN, todos os outros classificadores (tanto em software quanto em
hardware) são capazes de atender à taxa máxima da Fast Ethernet de 150.000 pacotes/s.
7.2.4
CONSUMO DE ENERGIA
O consumo dos classificadores em hardware foi medido para 50 MHz, porque não
houve erro de classificação em nenhum classificador nessa frequência de operação.
A figura 40 mostra o gráfico da potência do circuito de medição pelo número de
réplicas dos classificadores em hardware. O consumo varia linearmente com o número de
réplicas, então as potências consumidas pelos classificadores foram calculadas através de
regressão linear como o coeficiente angular da reta de tendência correspondente. Cada uma das
dez linhas, se projetadas, cruzam o eixo vertical em aproximadamente 200 mW (caso para 0
classificadores). Este valor é devido, majoritariamente, ao consumo base da FPGA e ao circuito
de medição e portanto não é considerado no cálculo de consumo dos classificadores.
É importante ressaltar que o coeficiente angular inclui, também, o consumo da parte
do circuito de medição que é proporcional ao número de réplicas dos classificadores. Assim, os
consumos reais dos classificadores em hardware são ainda menores do que os valores que serão
apresentados a seguir.
A tabela 11 resume o consumo de energia e a acurácia relativa dos classificadores
implementados. O termo Phab refere-se à potência média consumida por cada classificador em
hardware, enquanto habilitado, obtida por regressão linear, conforme comentado acima. O
termo Pdes refere-se à potência média consumida por cada classificador em hardware, enquanto
92
Figura 40: Potência do circuito de medição pelo no de classificadores em 50 MHz.
Fonte: Autoria Própria
desabilitado, também obtida por regressão linear. Essa potência, porém, não entrou no cálculo
de consumo, pois considera-se que cada classificador em hardware opera na sua taxa de
transferência, de forma que entre a chegada de pacotes o circuito sempre está ativo.
Tabela 11: Energia consumida pelos classificadores em software e hardware (em 50 MHz).
Classificador
ad
nb comb 32
nb comb 16
nb comb 10
nb seq 32
nb seq 16
nb seq 10
knn 32
knn 16
knn 10
Pdes
(mW)
1,37
3,58
3,36
3,09
3,90
2,73
2,53
84,30
28,71
15,47
Energia por op.
Acurácia
Energia por op.
Phab
(mW) em hardware (nJ) Relativa (%) em software (nJ)
2,76
0,055
100,00
53,54
714,45
42,87
100,00
635,25
85,55
5,13
100,00
35,91
2,15
99,99
14,72
21,49
100,00
635,25
5,62
8,20
100,00
4,51
6,58
99,99
105,12
50.659,43
100,00
58.387,93
33,39
16.089,38
99,97
17,26
8.319,38
98,47
Fonte: Autoria própria.
A Árvore de Decisão em hardware é o classificador mais eficiente energeticamente,
gastando 55 pJ por classificação; apenas 0,1% do consumo da versão em software. As versões
com float de 32 bits dos classificadores Naive Bayes combinacional e sequencial também são
mais eficientes que a versão em software. O primeiro consome 42,87 nJ por classificação,
93
6,7% do consumo em software, e o segundo consome 21,49 nJ, 3,4% do consumo em software.
Quanto ao kNN, mais uma vez a versão em hardware consome menos: 50,66 µJ, o que
corresponde a 86,8% do consumo da versão em software.
As economias de energia obtidas a partir da redução do tamanho do ponto flutuante
de 32 para 10 bits em hardware foram de 95%, 69% e 84% para Naive Bayes Combinacional,
Naive Bayes Sequencial e kNN, respectivamente.
A figura 41 mostra lado a lado a energia gasta por cada classificador para classificar um
pacote. As barras pretas correspondem aos classificadores em software (mostrados com o sufixo
“sw”), enquanto as barras cinzas correspondem aos classificadores em hardware (mostrados
com o sufixo “hw”). Através da imagem é possı́vel confirmar que a diferença de consumo
entre a implementação em hardware mais eficiente (Árvore de Decisão) e a implementação em
software mais eficiente (Árvore de Decisão) é de três ordens de magnitude.
Figura 41: Energia gasta para classificar um pacote em software e hardware (em 50 MHz).
Fonte: Autoria Própria
Adicionalmente, calculou-se também a energia consumida por classificação em
hardware para as frequências de operação de 10, 20, 30 e 40 MHz. A figura 42 mostra que esses
valores são próximos aos obtidos para 50 MHz. Conclui-se, então, que o consumo energético
dos classificadores em hardware depende minoritariamente da frequência.
O consumo
de potência e o tempo de classificação são, respectivamente, diretamente e inversamente
proporcionais à frequência de operação, e por isso o valor de energia se mantém quase constante.
94
Figura 42: Energia gasta para classificar um pacote em hardware em diferentes frequências.
Fonte: Autoria Própria
Como observação final, ressalta-se que caso um classificador em hardware não
operasse em sua taxa de transferência, a potência desse enquanto desabilitado entraria no
cálculo do consumo energético. Porém, para evitar essa situação, outra tática poderia ser
adotada: executar o circuito com uma frequência mais baixa de forma a preencher todo o tempo
de chegada entre pacotes com a classificação. O mesmo raciocı́nio é válido para o extrator.
7.3
PUBLICAÇÕES
O desenvolvimento deste trabalho proporcionou a publicação de dois artigos em
congressos internacionais do IEEE, conforme referências abaixo:
• FRANÇA, André L.; JASINSKI, Ricardo; PEDRONI, Volnei A.; SANTIN, Altair O.
Moving Network Protection from Software to Hardware: An Energy Efficiency Analysis.
In: Computer Society Annual Symposium on VLSI 2014 (ISVLSI 2014). Tampa, Estados
Unidos: IEEE, 2014. p. 456-461
• FRANÇA, André L.; JASINSKI, Ricardo; CEMIN, Paulo; PEDRONI, Volnei A.;
SANTIN, Altair O. The Energy Cost of Network Security: A Hardware vs. Software
Comparison. In: International Symposium on Circuits and Systems 2015 (ISCAS 2015).
Lisboa, Portugal: IEEE, 2015.
95
8
CONCLUSÃO
Neste trabalho foram desenvolvidos algoritmos necessários ao projeto de um Sistema
de Detecção de Intrusão de Rede baseado em anomalia. Os algoritmos contemplados foram
um extrator de caracterı́sticas dos pacotes da rede em hardware (versão correspondente a um
extrator existente em software) e três classificadores de Aprendizagem de Máquina (Árvore
de Decisão, Naive Bayes e k-Vizinhos mais Próximos, ou kNN), em software e hardware,
modelados para detecção de ataques do tipo probing.
Os algoritmos em software foram implementados em C++ e avaliados numa placa-mãe
Atom DN2800MT com o Sistema Operacional openSUSE 13.1. Os algoritmos em hardware
foram implementados em VHDL e avaliados na FPGA Cyclone IV GX, da Altera. Para as
duas versões do extrator de caracterı́sticas foram comparados consumo energético e taxa de
transferência. Para as versões em software e hardware dos classificadores, além do consumo
energético e taxa de transferência, comparou-se, ainda, a acurácia de classificação.
O extrator de caracterı́sticas em software, desenvolvido por Eduardo Kugler Viegas
e Altair Olivo Santin, obteve uma taxa de transferência de 295.615 pacotes/s. A versão
correspondente em hardware, em contrapartida, obteve uma taxa de transferência de 534.815
pacotes/s. Com relação ao consumo energético por operação de extração, os valores das versões
em software e hardware foram de 5,03 µJ e 1,15 µJ, respectivamente. O extrator em hardware,
então, opera numa velocidade quase duas vezes maior, gastando apenas 23% do valor de
energia da implementação em software. O extrator em hardware ocupa 2.683 células lógicas e
5.242.880 bits de memória da FPGA.
Quanto aos classificadores, a Árvore de Decisão obteve a melhor acurácia de
classificação na base de dados de testes: 99,87%, tanto em software quanto em hardware. Na
sequência vêm Naive Bayes e kNN, com acurácias de 99,69% e 98,60%, respectivamente, tanto
em software quanto em hardware (com float de 32 bits). Para Naive Bayes e kNN avaliou-se,
ainda, a redução do tamanho do ponto flutuante em hardware. As perdas de acurácia foram
menores do que 2 pontos percentuais na redução de 32 para 10 bits.
96
Os classificadores em hardware foram comparados, também, quanto à área.
A
Árvore de Decisão é o classificador mais compacto, ocupando 167 células lógicas.
A
versão combinacional do Naive Bayes ocupa a maior área, com 8.420 células lógicas e 126
multiplicadores de 9 bits. O kNN utiliza a maior quantidade de bits de memória, 465.920, além
de 6.300 células e 14 multiplicadores. A versão sequencial do Naive Bayes ocupa 1.380 células
lógicas, 10.112 bits de memória e 14 multiplicadores. Reduzindo-se o float de 32 para 10 bits,
as áreas de Naive Bayes combinacional e sequencial e kNN foram reduzidas em mais de 50%.
A Árvore de Decisão em hardware alcançou a maior taxa de transferência entre
todos os classificadores: 68.653.028 pacotes/s, ou 4,5 vezes a taxa da versão correspondente
em software (15.198.631 pacotes/s). A versão combinacional do Naive Bayes em hardware
(3.529.217 pacotes/s) também é mais rápida que a versão em software (821.358 pacotes/s), mas
o mesmo não acontece para a versão sequencial em hardware (619.041 pacotes/s). Para o kNN,
a versão em software (7.900 pacotes/s) também é mais rápida que a versão em hardware (1.843
pacotes/s). Nos últimos dois casos isso acontece porque os classificadores em hardware são
inteiramente sequenciais e operam numa frequência bem menor que a frequência de clock do
processador da placa-mãe. A partir da redução do tamanho do ponto flutuante de 32 para 10
bits em hardware, aumentaram-se as taxas de transferência em 123%, 95% e 64% para Naive
Bayes combinacional, Naive Bayes sequencial e kNN, respectivamente.
A Árvore de Decisão em hardware é o classificador mais eficiente energeticamente,
gastando 55 pJ para classificar um pacote, ou 0,1% da energia gasta pela versão correspondente
em software (53,54 nJ). As versões combinacional (42,87 nJ) e sequencial (21,49 nJ) do Naive
Bayes em hardware também são mais eficientes que a versão em software (635,25 nJ). Em
relação ao kNN, mais uma vez, embora por pouco, a versão em hardware (50,66 µJ) é mais
eficiente energeticamente que a versão em software (58,39 µJ). As economias de energia obtidas
a partir da redução do tamanho do ponto flutuante de 32 para 10 bits em hardware foram de 95%,
69% e 84% para Naive Bayes Combinacional, Naive Bayes Sequencial e kNN, respectivamente.
Os trabalhos futuros incluem: 1) otimização do classificador kNN em hardware, a
partir da realização de operações em paralelo e avaliação do cálculo de distância Manhattan
em vez da Euclidiana (MANOLAKOS; STAMOULIAS, 2010); 2) desenvolvimento dos
classificadores Máquina de Vetor de Suporte (SVM, do inglês Support Vector Machine) e
Análise de Discriminante Linear (LDA, do inglês Linear Discriminant Analysis) para detecção
de probing; 3) desenvolvimento dos classificadores Árvore de Decisão, Naive Bayes, kNN,
SVM e LDA para detecção de ataques do tipo DoS.
97
REFERÊNCIAS
BRUGGER, S. T. Data Mining Methods for Network Intrusion Detection. Davis: University
of California, Davis, 2004. 64 p.
CATANIA, Carlos A.; GARINO, Carlos G. Automatic network intrusion detection: Current
techniques and open issues. Computers & Electrical Engineering, v. 38, n. 5, p. 1062-1072,
set. 2012.
CEMIN, Paulo R. Plataforma de Medição de Consumo para Comparação entre Software
e Hardware em Projetos Energeticamente Eficientes. 2015. 99 f. Dissertação (Mestrado em
Engenharia Elétrica e Informática Industrial) – Programa de Pós-Graduação em Engenharia
Elétrica e Informática Industrial, Universidade Tecnológica Federal do Paraná, Curitiba, 2015.
CHEN, Hao; CHEN, Yu; SUMMERVILLE, Douglas H. A Survey on the Application of FPGAs
for Network Infrastructure Security. IEEE Communications Surveys & Tutorials, v. 13, n. 4,
p. 541-561, nov. 2011.
CHENG, Xiang et al. Intrusion Detection System Based on KNN-MARS. In: WRI World
Congress on Software Engineering 2009 (WCSE ’09). Xiamen, China: IEEE, 2009. p. 392396.
CISCO. Bandwidth, Packets Per Second, and Other Network Performance Metrics. San
Jose: Cisco, 2009. 3 p.
CISCO. Visual Networking Index: Forecast and Methodology, 2013–2018. San Jose: Cisco,
2014. 14 p.
CORONA, Igino; GIACINTO, Giorgio; ROLI, Fabio. Adversarial attacks against intrusion
detection systems: Taxonomy, solutions and open issues. Information Sciences, v. 239, p.
201-225, ago. 2013.
DAS, Abhishek et al. An FPGA-Based Network Intrusion Detection Architecture. IEEE
Transactions on Information Forensics and Security, v. 3, n. 1, p. 118-132, mar. 2008.
DAVIS, Jonathan J.; CLARK, Andrew J. Data preprocessing for anomaly based network
intrusion detection: A review. Computers & Security, v. 30, n. 6-7, p. 353-375, set.-out. 2011.
DUDA, Richard O.; HART, Peter E.; STORK, David G. Pattern Classification. 2. ed. [S.l.]:
Willey Interscience, 2002.
ESTEVEZ-TAPIADOR, Juan M.; GARCÍA-TEODORO, Pedro; DIAZ-VERDEJO, Jesus
E. Stochastic Protocol Modeling for Anomaly Based Network Intrusion Detection. In:
International Workshop on Information Assurance 2003 (IWIAS 2003). Darmstadt,
Alemanha: IEEE, 2003. p. 3-12.
EVANS, Dave. The Internet of Things: How the Next Evolution of the Internet Is Changing
Everything. San Jose: Cisco, 2011. 11 p.
98
FRANÇA, André L. et al. The Energy Cost of Network Security: A Hardware vs. Software
Comparison. In: International Symposium on Circuits and Systems 2015 (ISCAS 2015).
Lisboa, Portugal: IEEE, 2015.
GARCÍA-TEODORO, Pedro et al. Anomaly-based network intrusion detection: Techniques,
systems and challenges. Computers & Security, v. 28, n. 1-2, p. 18-28, fev.-mar. 2009.
GOGOI, Prasanta et al. Packet and Flow Based Network Intrusion Dataset. In: International
Conference on Contemporary Computing 2012 (IC3 2012). Noida, India: Springer, 2012. p.
322-334.
HARWAYNE-GIDANSKY, Jared; STEFAN, Deian; DALAL, Ishaan. FPGA-based SoC for
Real-Time Network Intrusion Detection using Counting Bloom Filters. In: Southeastcon 2009.
Atlanta, Estados Unidos: IEEE, 2009. p. 452-458.
IBRAHIM, Heba E.; BADR, Sherif M.; SHAHEEN, Mohamed A. Phases vs. Levels using
Decision Trees for Intrusion Detection Systems. International Journal of Computer Science
and Information Security (IJCSIS), v. 10, n. 8, p. 1-7, ago. 2012.
KATASHITA, Toshihiro et al. FPGA-Based Intrusion Detection System for 10 Gigabit Ethernet.
IEICE Transactions on Information and Systems, E90-D, n. 12, p. 1923-1931, dez. 2007.
KENDALL, Kristopher. A Database of Computer Attacks for the Evaluation of
Intrusion Detection Systems. 1999. 124 f. Dissertação (Mestrado em Electrical Engineering
and Computer Science) – Department of Electrical Engineering and Computer Science,
Massachusetts Institute of Technology, Cambridge, 1999.
KIZZA, Joseph M. Guide to Computer Network Security. 2nd. ed. [S.l.]: Springer, 2013.
KOSHAL, Jashan; BAG, Monark. Cascading of C4.5 Decision Tree and Support Vector
Machine for Rule Based Intrusion Detection System. International Journal of Computer
Network and Information Security (IJCNIS), v. 4, n. 8, p. 8-20, ago. 2012.
LE, Hoang; PRASANNA, Viktor K. A Memory-Efficient and Modular Approach for LargeScale String Pattern Matching. IEEE Transactions on Computers, v. 62, n. 5, p. 844-857,
mai. 2013.
LI, Wei; LI, QingXia. Using Naive Bayes with AdaBoost to Enhance Network Anomaly
Intrusion Detection. In: International Conference on Intelligent Networks and Intelligent
Systems 2010 (ICINIS 2010). Shenyang, China: IEEE, 2010. p. 486-489.
LI, Yang; GUO, Li. An active learning based TCM-KNN algorithm for supervised network
intrusion detection. Computers & Security, v. 26, n. 7-8, p. 459-467, dez. 2007.
MANOLAKOS, Elias S.; STAMOULIAS, Ioannis. Flexible IP cores for the k-NN classification
problem and their FPGA implementation. In: International Symposium on Parallel
Distributed Processing, Workshops and Phd Forum 2010 (IPDPSW 2010). Atlanta, Estados
Unidos: IEEE, 2010. p. 1-4.
MITCHELL, Tom M. Machine Learning. [S.l.]: McGraw-Hill, 1997.
99
MUKHERJEE, Saurabh; SHARMA, Neelam. Intrusion Detection using Naive Bayes Classifier
with Feature Reduction. In: International Conference on Computer, Communication,
Control and Information Technology 2012 (C3IT-2012). Hooghly, Índia: Elsevier, 2012.
p. 119-128.
MURALEEDHARAN, N.; PARMAR, Arun; KUMAR, Manish. A Flow based Anomaly
Detection System using Chi-square Technique. In: International Advance Computing
Conference 2010 (IACC 2010). Patiala, Índia: IEEE, 2010. p. 285-289.
PONTARELLI, Salvatore; BIANCHI, Giuseppe; TEOFILI, Simone. Traffic-Aware Design of a
High-Speed FPGA Network Intrusion Detection System. IEEE Transactions on Computers,
v. 62, n. 11, p. 2322-2334, nov. 2013.
POSTEL, Jon. RFC 768 - User Datagram Protocol. Marina del Rey: USC Information
Sciences Institute, 1980. 3 p.
POSTEL, Jon. RFC 791 - Internet Protocol. Marina del Rey: USC Information Sciences
Institute, 1981. 45 p.
POSTEL, Jon. RFC 792 - Internet Control Message Protocol. Marina del Rey: USC
Information Sciences Institute, 1981. 21 p.
POSTEL, Jon. RFC 793 - Transmission Control Protocol. Marina del Rey: USC Information
Sciences Institute, 1981. 85 p.
PUKKAWANNA, Sirikarn et al. Investigating the Utility of S-Transform for Detecting Denialof-Service and Probe Attacks. In: International Conference on Information Networking
2014 (ICOIN 2014). Phuket, Tailândia: IEEE, 2014. p. 282-287.
ROESCH, Martin. Snort - Lightweight Intrusion Detection for Networks. In: USENIX
Conference on System Administration 1999 (LISA ’99). Berkeley, Estados Unidos: USENIX
Association, 1999. p. 229-238.
SOMAVAT, Pavel; NAMBOODIRI, Vinod. Energy Consumption of Personal Computing
Including Portable Communication Devices. Journal of Green Engineering, p. 447-475, jul.
2011.
SONG, Haoyu; LOCKWOOD, John W. Efficient Packet Classification for Network Intrusion
Detection Using FPGA. In: International Symposium on Field-programmable Gate Arrays
2005 (FPGA ’05). Monterey, Estados Unidos: ACM, 2005. p. 238-245.
SOURCEFIRE. SNORT Users Manual. Disponı́vel em: <http://manual.snort.org/>. Acesso
em: 09 dez. 2014.
STANIFORD, Stuart; HOAGLAND, James A.; MCALERNEY, Joseph M. Practical Automated
Detection of Stealthy Portscans. Journal of Computer Security, v. 10, n. 1-2, p. 105-136,
2002.
THE UNIVERSITY OF WAIKATO. Attribute-Relation File Format (ARFF). Disponı́vel em:
<http://weka.wikispaces.com/ARFF>. Acesso em: 13 nov. 2013.
TSAI, Chih-Fong et al. Intrusion detection by machine learning: A review. Expert Systems
with Applications, v. 36, n. 10, p. 11994-12000, dez. 2009.
100
TUNCER, Taner; TATAR, Yetkin. FPGA Based Programmable Embedded Intrusion Detection
System. In: International Conference on Security of Information and Networks 2010 (SIN
’10). Taganrog, Rússia: ACM, 2010. p. 245-248.
UNIVERSITY OF CALIFORNIA, IRVINE. KDD Cup 1999 Data. Disponı́vel em:
<http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html>. Acesso em: 10 set. 2013.
UNIVERSITY OF NEW BRUNSWICK. The NSL-KDD Data Set. Disponı́vel em:
<http://nsl.cs.unb.ca/NSL-KDD/>. Acesso em: 10 set. 2013.
VIEGAS, Eduardo K. et al. EEIDS: Method and Energy-Efficient FPGA-based SoC
Implementation for Anomaly Detection System. PUCPR/UTFPR: Curitiba, 2013. n. 2.
VIEGAS, Eduardo K. et al. EEIDS: Method and Energy-Efficient FPGA-based SoC
Implementation for Anomaly Detection System. PUCPR/UTFPR: Curitiba, 2014. n. 3.
VIEGAS, Eduardo K. et al. EEIDS: Method and Energy-Efficient FPGA-based SoC
Implementation for Anomaly Detection System. PUCPR/UTFPR: Curitiba, 2014. n. 4.
VIJAYASARATHY, R.; RAGHAVAN, S.; RAVINDRAN, Balaraman. A System Approach to
Network Modeling for DDoS Detection using a Naive Bayesian Classifier. In: International
Conference on Communication Systems and Networks 2011 (COMSNETS 2011).
Bangalore, Índia: IEEE, 2011. p. 1-10.
WU, Shelly X.; BANZHAF, Wolfgang. The use of computational intelligence in intrusion
detection systems: A review. Applied Soft Computing, v. 10, n. 1, p. 1-35, jan. 2010.
Download

CT_CPGEI_M_França, André Luiz Pereira de_2015