• Nenhum resultado encontrado

Análise das métricas obtidas por ferramenta

3 Metodologia de Análise de Ferramentas

4.2.1 Análise das métricas obtidas por ferramenta

As subseções à seguir mostram, graficamente, as métricas obtidas da análise de das ferramentas em cada subgrupo de buffer overflow. As ferramentas Cppcheck e

Ldra tiveram métricas apenas no subgrupo relacionado ao tipo de alocação do buffer

4.2. Análise dos resultados obtidos 69

4.2.1.1 Cppcheck

A figura 3 compara as métricas obtidas da ferramenta Cppcheck de acordo com o tipo de alocação de memória.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Cppcheck Heap and Stack Allocation

Heap 1 0.00543 0.00543 0.0108 Stack 0.72093 0.01918 0.01175 0.03736

Figura 3 – Métricas obtidas do report da ferramenta Cppcheck - Heap e Stack Ressalta-se, aqui, uma maior precisão do Cppcheck em reportar buffer overflows do tipo heap. Em buffers de memória do tipo stack, a ferramenta reportou falsos positivos, o que diminuiu a precisão calculada. Já os valores de Recall e F-Score são extremamente baixos e próximos, dificultando uma análise independente de margem de erro (por ser uma análise numérica do comportamento da ferramenta e, portanto, com uma margem de erro). Relevando-se esses fatores, a ferramenta evidenciou métricas maiores para buffer overflows ocorridos em stack. Esse comportamento se repete quando se analisa o discrimination rate, caracterizando uma melhor diferenciação, por parte da ferramenta, entre verdadeiros positivos e falsos positivos nos casos de teste relacionados à ocorrência de buffer overflow alocados em stack.

Assim, a partir das técnicas de análise estáticas que a ferramenta Cppcheck imple- menta, dentre as quais uma implementação básica da análise de fluxo de dados, obteve-se uma maior precisão em detectar buffer overflows alocados em Heap, mas um maior Recall e Discrim Rate nos casos de teste de buffer overflow alocado em Stack.

4.2.1.2 Ldra

A figura4compara, graficamente, as métricas obtidas pela ferramenta Ldra, para Heap e Stack.

Em relação a buffer overflows ocorridos em Heap, a ferramenta possuiu uma pre- cisão de 64,7%. Entretanto, é preciso cautela para os objetivos dessa métrica e para o modo como o cálculo desta é feito. Esse valor foi obtido porque a ferramenta reportou 17 ocorrências de buffer overflow e, destas, 6 foram falsos positivos. Analisando o Recall, e

70 Capítulo 4. Resultados 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Ldra Heap and Stack Allocation

Heap

0.64706

0.00373 0.00204 0.00742

Stack

0 0 0 0

Figura 4 – Métricas obtidas do report da ferramenta Ldra - Heap e Stack

até mesmo o F-Score, que é obtida através da precisão e do Recall, percebe-se que houve uma taxa muito baixa de report de ocorrências (há um total de 2946 casos de teste volta- dos para esse subgrupo analisado). Assim, as métricas obtidas devem ser interpretadas com cautela.

Em relação aos buffer overflows ocorridos em Stack, a ferramenta não reportou nenhuma ocorrência da vulnerabilidade em questão. Desse modo, o cálculo das métricas não pôde ser feito e a comparação do comportamento da ferramenta em cada característica desse subgrupo não ocorreu.

Assim, o modo como a análise de fluxo de dados implementada pela ferramenta não foi capaz de detectar buffer overflows ocorridos em Stack

4.2.1.3 Parasoft

A ferramenta Parasoft obteve resultados em todos os subgrupos definidos. Os gráficos a seguir comparam as métricas obtidas para cada subgrupo analisado. Para todos os subgrupos analisados, A ferramenta não reportou nenhum Falso Positivo, fazendo com que os valores de Recall e Discrim Rate sejam iguais.

A análise das métricas obtidas relacionadas a leitura e escrita (exibidas na figura

5), evidenciam uma maior eficiência na identificação de buffer overflows ocorridos em acesso de leitura do que de escrita. Ainda que a precisão apresentada seja a mesma para ambos os casos, A discrepância entre os valores das outras métricas é consideravelmente alto.

Já no que se refere aos limites do buffer onde a vulnerabilidade pode ocorrer, a

Parasoftobteve valores mais altos em buffer overflows ocorridos no limite final do buffer,

como mostra a firgura 6. Vale ressaltar que a diferença nos resultados dos dois tipos de limite é bem menor que os resultados relacionados ao tipo de acesso.

4.2. Análise dos resultados obtidos 71 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Parasoft Read and Write Access

Leitura 1 0.30102 0.30102 0.46275 Escrita 1 0.2 0.2 0.33333

Figura 5 – Métricas obtidas do report da ferramenta Parasoft - Leitura e Escrita

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Parasoft Under and Over Bound Access

Under 1 0.25 0.25 0.4 Over 1 0.30272 0.30272 0.46475

Figura 6 – Métricas obtidas do report da ferramenta Parasoft - Limite Inicial e Final Do mesmo modo, em relação ao tipo de alocação de memória do buffer, a ferra- menta mostrou uma eficiência maior em buffers alocados em Heap (figura7). Assim como na situação anterior, a diferança na identificação de vulnerabilidades para os dois tipos de alocação de buffer foi pequena.

4.2.1.4 Monoidics

A ferramenta Monoidics apresentou diferentes características para cada subgrupo analisado. Das seis variações possíveis para os três atributos do buffer overflow analisados, a ferramenta não reportou verdadeiros positivos para as vulnerabilidades ocorridas no limite posterior do buffer. A figura 8 compara as métricas obtidas em Leitura e Escrita. Para ambos os casos, a ferramenta apresentou uma boa precisão. Entretanto, os valores obtidos para as outras métricas foram consideravelmente baixos, com uma maior vantagem para os valores relacionados à Escrita do buffer.

72 Capítulo 4. Resultados 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Parasoft Heap and Stack Allocation

Heap 1 0.28513 0.28513 0.44374 Stack 1 0.25982 0.25982 0.41247

Figura 7 – Métricas obtidas do report da ferramenta Parasoft - Heap e Stack

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Monoidics Read and Write Access

Leitura 1 0.03571 0.03571 0.06897 Escrita 1 0.05714 0.05714 0.10811

Figura 8 – Métricas obtidas do report da ferramenta Monoidics - Leitura e Escrita

nerabilidades no limite final do buffer. Apenas vulnerabilidades no limite inicial foram reportadas.

Quanto à comparação entre buffer overflows ocorridos em buffers alocados em heap e stack, a figura 10 mostra que a Monoidics Infer reportou falsos positivos para ambos os casos, mas que obteve uma maior precisão em buffer overflows ocorridos em stack. Entretanto essa diferença se inverte para as outras métricas, evidenciando que a ferramenta foi mais eficiente, na suíte de testes analisada, em reportar buffer overflows ocorridos em heap.

A diferença das métricas obtidas para cada tipo de alocação foi consideravelmente pequena, sendo menor ainda na métrica Discrim Rate (que mostra a capacidade da fer- ramenta de discernir entre um falso positivo e um verdadeiro positivo, sobre o total de vulnerabilidades, do tipo, existentes).

4.2. Análise dos resultados obtidos 73 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Monoidics Under and Over Bound Access

Under 1 0.05714 0.05714 0.10811 Over 0 0 0 0

Figura 9 – Métricas obtidas do report da ferramenta Monoidics - Limite Inicial e Final

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score Monoidics Heap and Stack Allocation

Heap 0.86207 0.09335 0.07841 0.16845 Stack 0.92143 0.0798 0.073 0.14688

Figura 10 – Métricas obtidas do report da ferramenta Monoidics - Heap e Stack 4.2.1.5 RedLizard

Dentre os subgrupos analisados A ferramenta RedLizard não foi capaz de reportar buffer overflows ocorridos em escrita de buffer ou no limite final dos mesmos.

A figura 11 mostra as métricas obtidas nos casos de teste em que ocorrem buffer overflows em leitura de buffer. As métricas dos casos de teste em que a vulnerabildiade ocorre em escrita de buffer não puderem ser calculadas.

Os valores mostrados evidenciam que a ferramenta reportou um valor muito alto de falsos positivos em relação ao total de positivos existentes. Somados a isso, as outras métricas evidenciam um índice baixo de ocorrências reportadas no na suíte de testes utilizada.

A figura 12 possui características semelhantes ao caso anterior. Nesse contexto, a ferramenta não foi capaz de identificar buffer overflows ocorridos no limite inicial do buffer. Já as vulnerabilidades do tipo ocorridas no limite final do buffer foram reportadas com uma precisão baixa, já que a ferramenta reportou muitos falsos positivos.

74 Capítulo 4. Resultados 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score RedLizard Read and Write Access

Leitura

0.10526

0.0102 0.0051 0.0186

Escrita

0 0 0 0

Figura 11 – Métricas obtidas do report da ferramenta RedLizard - Leitura e Escrita

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score RedLizard Under and Over Bound Access

Under

0 0 0 0

Over

0.10526

0.02721 0.01361 0.04324

Figura 12 – Métricas obtidas do report da ferramenta RedLizard - Limite Inicial e Final

Dentre os subgrupos analisados, a comparação entre as vulnerabilidades ocorridas de acordo com o tipo de alocação foram as únicas viáveis, visto que, tanto para heap quanto para stack, a ferramenta reportou valores que possibilitassem o cálculo das métricas. Essas métricas são exibidas no gráfico da figura 13. Pelo gráfico é possível perceber uma maior eficiência da ferramenta para os buffer overflows ocorridos em heap. Tanto a precisão da ferramenta, quanto a capacidade de reportar verdadeiros positivos e discerni-los de falsos positivos foram superiores nos casos de teste voltados para buffer overflows ocorridos em heap nos casos de teste voltados para stack buffer overflows.

As subseções à seguir mostram, graficamente, as métricas obtidas da análise de das ferramentas em cada subgrupo de buffer overflow. As ferramentas Cppcheck e

Ldra tiveram métricas apenas no subgrupo relacionado ao tipo de alocação do buffer

4.2. Análise dos resultados obtidos 75 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1

Precision Recall Discrim Rate F-Score RedLizard Heap and Stack Allocation

Heap 0.51692 0.11405 0.00747 0.18687 Stack 0.5 0.04763 0 0.08698

Figura 13 – Métricas obtidas do report da ferramenta RedLizard - Heap e Stack