Professional Documents
Culture Documents
INSTITUTO DE INFORMTICA
CINCIA DA COMPUTAO
CSAR MALERBA
AGRADECIMENTOS
No poderia, em hiptese alguma, deixar de agradecer minha famlia por tudo que
alcancei em meus estudos. Sobretudo o apoio de meus pais. Neles sempre tive o incentivo
e a estrutura necessrias para o meu desenvolvimento.
Agradeo tambm a todos que contribuem para o excelente funcionamento do
Instituto de Informtica da UFRGS. Notvel pelo interesse de seus professores e
funcionrios. Provando que o ensino pblico de qualidade alcanvel e oferece a
nossa sociedade enormes benefcios. Em especial ao meu orientador Raul Fernando
Weber; professor de enorme qualidade que muito contribuiu pelo meu interesse na rea
de segurana da computao e que me auxiliou no desenvolvimento desse trabalho.
Deixo tambm um agradecimento especial a uma pessoa que nunca deixou de
me lembrar do meu potencial e me auxiliou durante perodos difceis. Ela que me
acompanhou durante parte da minha jornada no curso: minha namorada Luciana.
SUMRIO
LISTA DE FIGURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LISTA DE TABELAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RESUMO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
ABSTRACT
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1 INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
Organizao do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
13
2 CONCEITOS INICIAIS . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
Vulnerabilidade/Exploit . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Pressupostos bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
Memria Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1
Como usada na arquitetura x86 . . . . . . . . . . . . . . . . . . . . . .
2.3.2
Segmentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.3
Paginao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.4
Caso abordado: memria virtual no sistema Linux x86 . . . . . . . . . .
2.4
Gerncia de memria . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5
Funcionamento mais detalhado do Stack . . . . . . . . . . . . . . . . . .
2.5.1
Chamada de funes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6
Funcionamento mais detalhado do heap . . . . . . . . . . . . . . . . . .
2.7
Mapemamento de memria annimo . . . . . . . . . . . . . . . . . . . .
2.8
Registradores de controle . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9
Shellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
14
14
14
15
16
16
17
17
19
19
19
20
20
20
3 CLASSIFICAO DE VULNERABILIDADES . . . . . . . . . . . . . .
3.1
A dificuldade em classificar; estgio j alcanado: enumerao . . . . .
3.1.1
Classificar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2
Enumerar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3
Da enumerao classificao . . . . . . . . . . . . . . . . . . . . . . .
3.2
CVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1
Surgimento e objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.2
Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3
Propostas taxonmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.1
Histrico das propostas . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
22
22
23
23
24
24
24
25
26
3.3.2
Taxonomias e classificaes mais recentes
3.3.3
O projeto CWE . . . . . . . . . . . . . .
3.4
Mtricas para vulnerabilidades: CVSS . .
3.4.1
Surgimento do CVSS . . . . . . . . . . .
3.4.2
As mtricas usadas . . . . . . . . . . . .
3.4.3
Clculo do escore . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
27
29
30
30
31
33
4 EXPLOITS . . . . . . . . . . . . . . . . . . . . . . . .
4.1
Definio . . . . . . . . . . . . . . . . . . . . . . . .
4.2
Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1
Buffer Overflow . . . . . . . . . . . . . . . . . . . .
4.2.2
Heap Overflow . . . . . . . . . . . . . . . . . . . .
4.2.3
Injeo de SQL . . . . . . . . . . . . . . . . . . . .
4.2.4
XSS (Cross Site Scripting) . . . . . . . . . . . . . .
4.3
Preveno de ataques . . . . . . . . . . . . . . . . . .
4.3.1
Validao de dados de entrada . . . . . . . . . . . .
4.3.2
Ferramentas de anlise esttica e auditoria de cdigo
4.4
Protees e contra-protees . . . . . . . . . . . . . .
4.4.1
Pilha no executvel . . . . . . . . . . . . . . . . . .
4.4.2
W X . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.3
Canrio para a pilha . . . . . . . . . . . . . . . . . .
4.4.4
Reordenamento de variveis na pilha . . . . . . . . .
4.4.5
ASLR . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
35
35
36
36
37
38
39
39
39
40
41
41
41
42
43
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
45
45
46
46
47
47
48
48
52
53
53
53
54
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
55
55
56
56
56
56
56
56
56
57
57
6.4.2
Gerao das entradas . . . . . . . . . . . . . . .
6.4.3
Envio das entradas . . . . . . . . . . . . . . . . .
6.4.4
Monitoramento do alvo . . . . . . . . . . . . . .
6.4.5
Anlise dos resultados . . . . . . . . . . . . . . .
6.5
Tipos de fuzzers . . . . . . . . . . . . . . . . . . .
6.5.1
Tipos por vetor de ataque . . . . . . . . . . . . .
6.5.2
Tipos por complexidade de casos de teste . . . .
6.6
Monitoramento da aplicao . . . . . . . . . . .
6.6.1
Meios intrusivos . . . . . . . . . . . . . . . . . .
6.7
White Fuzz Testing: execuo simblica e fuzzing
6.7.1
Deficincias do mtodo caixa preta . . . . . . . .
6.7.2
Funcionamento bsico . . . . . . . . . . . . . . .
6.7.3
Limitaes . . . . . . . . . . . . . . . . . . . . .
6.7.4
SAGE: implementao da tcnica . . . . . . . . .
7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
57
57
57
57
58
58
58
59
59
59
60
60
61
61
CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
REFERNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
66
66
66
66
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
ASLR
EBP
ESP
CVE
CVSS
CPU
CWE
DNS
DoS
Denial of Service
DPL
RPC
SQL
SSP
Stack-Smashing Protector
SWF
Shockwave Flash
LISTA DE FIGURAS
Figura 2.1:
Figura 2.2:
Figura 2.3:
Figura 2.4:
15
16
18
19
Figura 3.1:
Figura 3.2:
25
34
Figura 4.1:
Figura 4.2:
Figura 4.3:
37
42
43
LISTA DE TABELAS
Tabela 2.1:
17
Tabela 3.1:
Tabela 3.2:
24
32
RESUMO
ABSTRACT
Software becomes more important in our society everyday . However, it still suffers
from many security problems - most of them related to its development. To help
developers in understanding the subject, this paper addresses key points in software
security: vulnerabilities and exploits.
Two main issues related to vulnerabilities are presented: classification methods and
detection through fuzzing technique. Both aim at offering the reader basic concepts to
achieve safer and more conscious software development. Given the great value of fuzzing
technique in vulnerabilities discovery, it is proposed as a new tool to developers so that
they can apply it before the attackers.
Considering the knowledge of exploit techniques indispensable in the pursuit of
building safer software, this paper also tries to offer a view from the attackers perspective.
To achieve it, an overview of exploits is presented. After giving a broad idea on the
attackers methods, one of them is detailed: the NULL pointer exploit.
12
INTRODUO
Extratos de (COMMITTEE, 2005) foram traduzidos livremente pelo autor do presente trabalho.
13
1.1
Organizao do trabalho
Para alcanar o objetivo proposto, esse trabalho est organizado da seguinte forma.
Inicia com conceitos bsicos que servem de suporte aos captulos seguintes. So
definies de termos usados e informaes bsicas sobre o funcionamento do software
- como organizao da memria dos processos, virtualizao da memria, entre outros.
No terceiro captulo, abordado o tpico de classificao de vulnerabilidades. Nele,
o leitor ter contato com propostas e projetos que auxiliam o estudo dessa matria.
O quarto captulo traz uma viso geral sobre tcnicas de explorao de
vulnerabilidades: os exploits. So trazidos tipos que possuem boa representatividade.
Para ilustrar com maior preciso os conceitos de vulnerabilidade e de exploit na
prtica, apresentado em maior detalhes o NULL pointer exploit. Tpico que assume
bastante relevncia uma vez que uma srie de falhas desse gnero foram recentemente
descobertas - muitas delas no Kernel do Linux, onde permaneceram por mais de 8 anos.
O ltimo captulo aborda uma tcnica para deteco de vulnerabilidades: Fuzzing.
Foi escolhida entre as demais para constar nesse trabalho pois possui excelente relao
custo benefcio. destacada com o intuito de mostrar aos desenvolvedores os eficientes
mtodos empregados pelos atacantes para encontrar problemas no software.
14
CONCEITOS INICIAIS
2.1
Vulnerabilidade/Exploit
O primeiro termo que devemos definir neste trabalho exploit. Mas antes dele,
trataremos de vulnerabilidade - pois eles tm uma ligao estreita. Podemos definir
vulnerabilidade como uma falha em um sistema que permite a um atacante us-lo de uma
forma no prevista pelo projetista (ANLEY, 2007). Ou seja, uma vulnerabilidade implica
a possibilidade de uso indevido de um sistema. Os passos necessrios para explorar essa
fraqueza, ou mesmo o cdigo (programa) que pode tirar proveito da vulnerabilidade
descrito como exploit. Um exploit surge apenas quando h uma vulnerabilidade - mas
podem existir vulnerabilidades para as quais no exista exploit.
De maneira simplificada, podemos dizer que vulnerabilidades surgem devido a 3
causas bsicas:
Erros de implementao
Falhas de design
Erros de configurao ou de infra-estrutura do sistema
Na sequncia desse trabalho, sero aprofundados melhor esses dois conceitos.
Tambm sero examinadas com mais detalhe as causas dos problemas no software.
2.2
Pressupostos bsicos
2.3
Memria Virtual
15
16
Chamamos de endereo lgico aquele acessado pela aplicao - que seria, portanto o
nvel mais alto na virtualizao. J o endereo linear, resultado do processamento da
segmentao quando fornecido um endereo lgico. Para produzir o endereo fsico,
ainda necessrio que a unidade de paginao processe o endereo linear. A figura 2.2
ilustra esse processo.
Assim, mquinas x86 possuem 2 nveis, segmentao e paginao na ordem, a serem
tratados para que um endereo fsico possa ser encontrado a partir de um endereo lgico.
Cada um dos processos possui suas particularidades e implementa suas prprias protees
conforme passamos mais detalhes a seguir.
2.3.2
Segmentao
Paginao
17
Segmento
Cdigo do usurio
Dados do usurio
Cdigo do kernel
Dados do kernel
Base
Limite
Tipo
DPL
0x00000000 0xfffff
Leitura
3
0x00000000 0xfffff Escrita/Leitura
3
0x00000000 0xfffff
Leitura
0
0x00000000 0xfffff Escrita/Leitura
0
2.4
Gerncia de memria
18
0x0
Text
Alocao esttica
Alocao dinmica
Stack
0xffffffff
19
Figura 2.4: Organizao do frame na pilha. Fonte: (FURLAN, 2005) pg. 17.
2.5
A pilha uma regio contnua com base fixa e tamanho varivel. Na arquitetura
abordada por esse trabalho, x86 (bem como em muitas outras), a pilha cresce em direo
ao endereo mais baixo. organizada em frames que so os blocos alocados quando
ocorrem chamadas a funes. Cada frame contm(ver figura 2.4):
parmetros
variveis locais
endereo de retorno da funo anterior
endereo do frame da funo que a chamou
2.5.1
Chamada de funes
2.6
20
2.7
1
2
Na tcnica NULL pointer exploit, conforme veremos mais adiante, essa possibilidade
de alocar um bloco com o incio pr-determinado muito til. No caso da chamada
de mmap() do exemplo anterior, estamos obtendo um bloco de 64 bytes comeando
no endereo zero(NULL). Isso nos permite colocar cdigo executvel nessa poro da
memria e, na presena de uma vulnerabilidade, desviar a execuo para esse ponto.
2.8
Registradores de controle
2.9
Shellcode
21
s limitado pela imaginao do seu construtor. Sua criao envolve certas dificuldades,
como a ausncia de bytes em zero; j que normalmente, ele armazenado na memria
como uma string na linguagem C - que termina com um zero.
Atualmente, existem diversos tipos de shellcode disponveis para os mais variados
sistemas e arquiteturas. Dificilmente um atacante ter a necessidade de produzir seu
prprio dada a abundncia de alternativas prontas. Alguns, por exemplo, possuem at
estratgias para enganar sistemas de deteco de invaso. Para as necessidades desse
trabalho, no iremos nos aprofundar nesse tema, mas no captulo 2 de (ANLEY, 2007),
h informaes muito teis para um aprendizado de shellcode.
22
CLASSIFICAO DE VULNERABILIDADES
3.1
Classificar
Cincia da classificao.
23
Enumerar
Da enumerao classificao
Dispe sistematicamente os elementos de acordo com suas propriedades permitindo uma anlise
multidimensional.
3
http://cve.mitre.org
4
Na poca de sua criao era originalmente conhecido por Common Vulnerabilities Enumeration - vide
(MEUNIER, 2006) pg. 9.
24
Organizao
Como se referia vulnerabilidade
CERT
CA-96.06.cgi_example_code
Cisco Systems
http - cgi-phf
DARPA
0x00000025 = http PHF attack
IBM ERS
ERS-SVA-E01-1996:002.1
Security Focus #629 - phf Remote Command Execution Vulnerability
Tabela 3.1: Uma vulnerabilidade: diversos nomes e nenhum entendimento
Podemos dizer, portanto, que atualmente, embora no tenhamos uma taxonomia
amplamente aceita pela comunidade, j foi atingido o estgio de enumerao. Projetos
como o CVE podem ser considerados como marcos dessa etapa. A seguir, iremos
abordar em mais detalhes o surgimento e o funcionamento dele. Isso nos possibilitar
compreender melhor a complexidade da classificao das vulnerabilidades bem como ir
facilitar o entendimento dos captulos seguintes que abordam exploits.
3.2
3.2.1
CVE
Surgimento e objetivos
Funcionamento
O CVE formado por uma junta de especialistas em segurana dos meios acadmico,
comercial e governamental. Eles so responsveis por analisar e definir o que ser feito
dos reports passados pela comunidade - se eles devem ou no se integrar queles j
pertencentes lista. Cabe a eles definir nome, descrio e referncias para cada nova
ameaa.
25
Figura 3.1: Vulnerabilidades registradas no CVE a cada ano entre 1999 e 2008. Fonte:
(FLORIAN, 2009)
Esse processo inicia quando uma vulnerabilidade reportada. Ela assume um CAN
(Candidate Number), nmero de candidata. At que ela seja adicionada lista, ele
permanece com um CAN que a identificar. Apenas aps o devido estudo e aprovao do
caso pela junta responsvel, que ela assume um identificador CVE.
Os identificadores CVE so definidos conforme o padro: CVE-2010-0021. Onde,
separados por -, h 3 partes. A primeira fixa: CVE. A segunda refere-se ao ano de
surgimento; enquanto a terceira indica o nmero sequencial daquela vulnerabilidade entre
todas aquelas que foram adicionadas naquele ano. Logo, no exemplo fornecido, essa seria
a vigsima primeira de 2010.
Uma vez integrada, a vulnerabilidade passa a estar publicamente disponvel. Essa
abertura pode servir de auxlio aos atacantes - pois informaes sobre possveis furos de
segurana so sempre bem vindas a eles. Porm, conforme podemos verificar na FAQ do
CVE, (CVE, 2010), h uma srie de motivos pelos quais a disponibilidade desses dados
supera o risco oferecido pela exposio. So eles:
O CVE est restrito a publicar vulnerabilidades j conhecidas.
Por diversas razes, a comunidade de segurana de informao sofre mais para
compartilhar dados sobre as ameas que os atacantes.
muito mais custo a uma organizao proteger toda sua rede contra as ameas que
a um atacante descobrir e explorar uma delas para comprometer alguma das redes.
3.3
Propostas taxonmicas
26
3.3.1
27
http://www.dhs.gov/index.shtm
28
29
8 reinos; procurando respeitar a famosa regra de George Miller do "sete mais ou menos
dois"6 . So eles:
Erro de validao e de representao Resultam da confiana indevida nos dados de
entrada. Caso do Buffer Overflow, injeo de SQL, XSS.
Abuso de API Sendo a API um contrato entre quem chama a rotina e aquela que
chamada, uma quebra das regras pode resultar em problemas de segurana. Quando
quem chama uma funo assume certas condies que no esto garantidas pela
rotina chamada, temos um caso de abuso de API.
Features de segurana Trata do uso correto de peas chave na garantia da segurana
do software como: criptografia, autenticao, gerenciamento de privilgios, entre
outros.
Tempo e estado Relativo a problemas advindos do paralelismo.
sincronizao que expem o sistema.
Como erros na
O projeto CWE
Artigo The Magic Number Seven, Plus or Minus Two de George Miller.
30
3.4
Surgimento do CVSS
Para essa finalidade existe uma alternativa relativamente recente, o CVSS (Common
Vulnerability Scoring System), criado em 2005. Trata-se de um framework aberto para
atribuio de escore a vulnerabilidades. Ele oferece as seguintes vantagens, encontradas
em (MELL, 2007) - pg. 3:
Padronizao de escore de vulnerabilidades Quando uma organizao normaliza os
escores de vulnerabilidades em todas suas plataformas de hardware e software, ela
pode instituir uma poltica comum de gerenciamento das ameaas.
Framework aberto A abertura permite que os usurios tenham livre acesso para
compreenderem as razes das vulnerabilidades assumirem esse ou aquele escore.
7
http://cwe.mitre.org/
31
As mtricas usadas
www.first.org
Termos em ingls traduzidos livremente pelo autor.
32
CVSS
Mtricas bsicas
Mtricas Temporais
Mtricas Ambientais
Vetor de acesso
Facilidade de explorao
Dano colateral potencial
Complexidade de acesso
Confiabilidade no report
Abundncia de alvos
Necessidade de autenticao
Nvel de remediao
Importncia da confidencialidade
Impacto na confidencialidade
Importncia da integridade
Impacto na integridade
Importncia da disponibilidade
Impacto na disponibilidade
Tabela 3.2: Mtricas CVSS por grupo
Complexidade de acesso Indica a complexidade a ser enfrentada pelo atacante para
que ele, uma vez que tenha obtido acesso ao sistema alvo, possa explorar a
vulnerabilidade. Assume um dos valores alto, mdio ou baixo. A complexidade
considerada alta, por exemplo, se o ataque exige alguma tcnica de engenharia
social mais sofisticada ou se existe uma condio de corrida com janela muito
exgua que deve ser vencida.
Necessidade de autenticao Mede a quantidade de vezes que o atacante obrigado a
se autenticar durante o ataque - mesmo que seja usada a mesma credencial. um
dos valores: nenhuma, uma, vrias.
Impacto na confidencialidade Mede o impacto causado na abertura de dados
confidenciais gerados pelo ataque. Se nenhuma informao, em princpio protegida,
comprometida a medida assume valor nenhum. Havendo acesso a alguma
informao, considerado parcial. dito completo caso o atacante tenha total
acesso de leitura aos dados confidenciais.
Impacto na integridade Avalia a possibilidade que o atacante possui de alterar os dados
quando o ataque bem sucedido. Se no mais possvel confiar na integridade dos
dados aps o ataque, pois qualquer arquivo pode ter sido modificado, considerada
completa. No havendo possibilidade de alterao, assume o valor nenhuma.
denominada parcial quando apenas parte dos dados pode ter sido comprometidos.
Impacto na disponibilidade Indica o quanto a disponibilidade do sistema pode ser
afetada pelo ataque. dita completa caso o sistema possa ser totalmente desligado
ou inutilizado pelo atacante. Assume o valor nenhuma quando no pode haver
alterao na disponibilidade e parcial se o servio ainda puder estar disponvel mas
no plenamente.
As mtricas do grupo temporal so opcionais. Ou seja, podem ser desconsideradas
no clculo do escore conforme a vontade nos analistas. Por isso, cada uma delas pode
assumir o valor no definido indicando que ela no deve participar do escore. So 3 os
critrios que so suscetveis a alteraes com o passar do tempo:
Facilidade de explorao Mede o estado atual das tcnicas e do cdigo disponvel para
explorao da vulnerabilidade. Seus valores so, em ordem crescente de facilidade:
no comprovada, prova de conceito, funcional e alta. O primeiro indica que
um exploit meramente terico e no h cdigo disponvel que comprove como
explorar a falha. Havendo cdigo facilmente acessvel de exploit ou mesmo se
operaes manuais so suficientes, estamos diante de alta facilidade de explorao.
33
Clculo do escore
34
Figura 3.2: Aplicao das mtricas e equaes do CVSS. Fonte: (MELL, 2007)
35
EXPLOITS
No presente captulo, ser feita uma breve anlise sobre exploits. importante
salientar que, apenas conhecendo as tcnicas usadas pelos atacantes torna-se possvel
criar defesas efetivas contra elas. Portanto, o estudo dessa matria no constitui, de
forma alguma, uma apologia ao ataque. Essa questo muito bem abordada na parte
I de (HARRIS, 2008); deixando claro que o conhecimento uma arma importantssima
para aqueles que buscam uma melhoria na segurana do software.
Como ponto de partida, ser aprofundado o conceito de exploit. De forma a mostrar
sua amplitude e sua intrnseca relao com as vulnerabilidades. A seguir, sero explicadas
algumas tcnicas que so representativas para uma viso ampla do assunto. Na sequncia,
sero abordados princpios bsicos de programao que visam prevenir a aplicao de
exploits no software - combatem as falhas na origem e pontos de apoio usados pelas
tcnicas dos atacantes. Por fim, sero apresentadas algumas das protees j existentes
para barrar os ataques; em certos casos, tambm sero mostradas as formas de escape que
os atacantes j desenvolveram como reao.
Como no ser detalhada nenhuma tcnica em particular nesse captulo, para se
obter um exemplo mais aprofundado de exploit, o NULL pointer exploit ser o tema do
captulo seguinte. Assim, aps um acompanhamento mais amplo do tema, ser possvel
compreender melhor um caso especfico.
4.1
Definio
Conforme foi tratado na Seo 2.1, o exploit um conjunto de passos, muitas vezes
materializado em um programa, capaz de tirar proveito de uma vulnerabilidade. Para
muitos, entretanto, exploit sinnimo de um cdigo em C escrito por um hacker que tem
o potencial de atacar um sistema. Essa viso, todavia, muito limitada. Assim como
existem diversos tipos de vulnerabilidades, h muitos meios de tirar vantagem delas. Por
vezes, basta conhecer uma srie de passos, como cliques na interface da aplicao alvo,
para para explorar uma falha.
Em (HOGLUND, 2004), encontramos a seguinte lista de possveis consequncias para
um exploit bem sucedido:
Parada parcial ou completa do sistema(DoS);
Exposio de dados confidenciais;
Escalada de privilgios;
Execuo de cdigo injetado pelo atacante;
36
4.2
Tipos
Nessa Seo, ser feita uma breve explicao sobre alguns tipos de exploits existentes.
Isso para que o leitor possa ter uma noo geral sobre as tcnicas usadas pelos atacantes
para explorar as vulnerabilidades no software. No , de forma alguma, uma lista
exaustiva, mas contm muitos exemplos significativos.
Abaixo, lista dos tipos abordados:
Buffer overflow;
Heap overflow;
Injeo de SQL;
XSS(Cross Site Scripting);
4.2.1
Buffer Overflow
Um dos tipos mais bem conhecidos e um dos mais explorados. Tem um impacto
enorme pois possibilita ao atacante a execuo de cdigo arbitrrio no sistema atacado.
O famoso artigo Smashing the Stack for Fun and Profit de 1996, por Aleph One, foi
o primeiro a tratar em detalhes dessa tcnica. Mas conforme, (ANLEY, 2007), essa
estratgia j vinha sendo aplicada com sucesso por mais de 20 anos antes da publicao
do artigo de Aleph One.
Ocorre quando a aplicao guarda dados a serem lidos dos usurio(ou de qualquer
fonte externa) em um buffer alocado na pilha sem verificar se o que foi fornecido est
dentro do limite aceitvel(tamanho do buffer. Isso acaba resultando na grave falha que
ser apresentada abaixo.
Conforme explicado na Seo 2.4, no stack frame existem valores que controlam o
fluxo de execuo de uma aplicao. Dentre eles, est o valor de retorno de uma rotina.
Qualquer chamada de funo coloca na pilha o endereo para o qual ela deve retornar
aps seu fim. Se esse valor for alterado, possvel mudar o fluxo da aplicao - fazendo
com que ele seja desviado para outro ponto qualquer.
37
Essa tcnica tira proveito desse fato. Caso a aplicao possua alguma falha que
permita que o usurio fornea dados maiores que o espao alocado na pilha para
armazen-los, o excedente acaba sobrescrevendo o endereo de retorno da funo.
o exemplo claro de ataque control-data. A mudana em um dado de controle do
stack frame permite a colocao de um endereo forjado pelo atacante para mudar o
fluxo de execuo do programa atacado.
Na verso "clssica"desse exploit, o atacante fornece cdigo executvel, shellcode,
que vai alm do buffer criado para armazen-lo. No final dos dados enviados, tambm
inserido o endereo de incio do buffer, que agora contm o cdigo do atacante, para
substituir no stack frame o valor de retorno da funo. Assim, no retorno o fluxo
desviado para o buffer com o shellcode. A figura 4.1 mostra uma viso simplificada
da pilha antes e depois do ataque.
A execuo bem sucedida desse ataque depende de uma srie de acertos. Um deles
a descoberta do endereo do shellcode inserido no buffer. Isso porque a execuo deve
ser desviada para l; por isso esse valor deve substituir o endereo de retorno da funo.
Esses e outros desafios so pontos cruciais para a tcnica. Como nessa seo desejamos
fornecer apenas um viso geral, aconselhamos a busca de boas abordagens para o assunto
em (ANLEY, 2007) e (FURLAN, 2005).
4.2.2
Heap Overflow
38
Injeo de SQL
39
4.3
Preveno de ataques
Um dos pontos primordiais para a defesa contra os ataques a validao dos dados de
entrada. Sendo esse procedimento capaz de deter uma srie de ameaas. Uma aplicao
40
que no verifique devidamente os dados que lhe so fornecidos sria candidata a ser
explorada. No possvel confiar em nada que advm de qualquer ponto externo ao
sistema. Conforme visto anteriormente, ataques como o de buffer overflow ou de heap
overflow esto diretamente ligados a uma validao incorreta(ou mesmo ausente) de
dados de entrada. O mesmo ocorrendo para injeo de SQL ou XSS.
Para que essa prtica seja bem aplicada, essencial que sejam levantados todos os
vetores de entrada de uma aplicao. Por vezes, alguns deles podem ser esquecidos. No
ambiente UNIX, por exemplo, variveis de ambiente tambm devem ser consideradas
dados de entrada. Entretanto, nem sempre so devidamente validadas. Nesse aspecto,
toda uma preocupao com a entrada do sistema pode ser perdida se restar apenas um
ponto no verificado. Por isso a exigncia de uma avaliao dos pontos que devem ser
protegidos.
Para ilustrar ainda melhor, podemos tomar como exemplo um sistema que faa uso de
DNS reverso2 . Se, para um dado IP, no for validado o nome retornado pelo DNS reverso,
um atacante pode, uma vez que tenha comprometido parte da rede, forar a aplicao a
utilizar dados imprprios. Se a aplicao do exemplo usar diretamente o resultado, ela
corre srios riscos de sofrer algum tipo de explorao - como um buffer overflow.
, fundamental, portanto, que os pontos de entrada sejam identificados e sejam
definidas formas de validao. Em (SECURE SOFTWARE, 2006), anexo B, h detalhes
sobre esse tpico - definindo diretivas para a validao.
4.3.2
41
4.4
Protees e contra-protees
Pilha no executvel
A primeira, pilha no executvel, uma reao natural a um dos ataques mais comuns:
o buffer overflow. H registros de propostas de pilha no executvel desde 1996 conforme (ANLEY, 2007)(pg. 376). O exploit clssico sendo baseado na cpia de shell
code para o buffer e posterior execuo dele ficaria impraticvel. Mas no demorou muito
para os atacantes reagirem. Surgiram novas tcnicas que funcionam mesmo quando no
possvel executar o cdigo injetado na pilha. Sua estratgia bsica era: a partir do
controle do stack frame, criar uma chamada vlida para biblioteca C ou chamadas de
sistema. Inicialmente, ela foi denominada return-into-libc.
Essa nova tcnica de exploit abriria caminho para uma srie de outras. Todas elas
conseguindo desviar a execuo para algum cdigo j existente e, portanto, vlido,
evitando a necessidade de uma pilha executvel. Para citar algumas delas: ret2plt,
ret2strcpy, ret2gets, ret2syscall, ret2data, ret2text. Em (ANLEY, 2007), captulo 14, h
detalhes sobre elas.
4.4.2
W X
Impedir que memria com proteo de escrita seja executvel e, bloquear a escrita
para aquela que executvel uma das melhores formas de proteo. Ataca justamente
42
Figura 4.2: Stack frame protegido por canrio. Fonte: (FURLAN, 2005).
43
Figura 4.3: Modelo de pilha ideal para o SSP. Fonte: (MARTINS, 2009).
4.4.4
aplicada pelo SSP e complementa a proteo oferecida pelo canrio. uma barreira
extra para que um overflow nos buffers - que s detectado aps o trmino da funo no seja usado para afetar outras variveis.
Seu objetivo , conforme (MARTINS, 2009): "isolar os arrays que podem vir a vazar
dados, para que seu estouro no afete as outras variveis locais da funo. Isso garante
a integridade das variveis automticas no decorrer da funo, e evita o seu possvel uso
para a injeo de shellcode".
baseada em um modelo ideal de pilha no qual as variveis locais que no so buffers
so melhor protegidas contra possveis overflows. O modelo melhor compreendido
atravs da visualizao da figura 4.3.
4.4.5
ASLR
44
tcnica de spraying, j que ela cria objetos na memria contendo cdigo executvel.
45
Dentre as vrias tcnicas de exploits existentes, uma que certamente merece destaque,
o NULL pointer exploit. Sua disseminao recente, sendo fruto da crescente
dificuldade em aplicar tcnicas que exploram vulnerabilidades de corrupo de memria.
Um marco para esse tipo de exploit certamente foi o artigo de Mark Dowd (DOWD,
2008). A forma como ele trouxe luz uma falha na mquina virtual do ActionScript
chamou a ateno de diversos especialistas na rea. Isso porque, para muitos, o NULL
pointer era apenas sinnimo de um bug que resultaria, no mximo, em uma negao de
servio. Por isso, o raciocnio empregado por ele serviria de base para encontrar muitos
outros problemas.
O ano de 2009 chegou a ser considerado o ano do "kernel NULL pointer deference"em
virtude da grande quantidade de falhas desse gnero encontradas no kernel do Linux.
Como podemos encontrar em, (COX, 2010), a lista de problemas causados por esse
tipo de vulnerabilidade foi extensa. Para sistemas Linux Red Hat, por exemplo, ainda
conforme (COX, 2010), o NULL pointer foi considerado o grande vilo de 2009 com 6
vulnerabilidades.
Nesse captulo, nossa inteno apresentar esse tipo de vulnerabilidade e seu
correspondente exploit. Assim como identificar os meios de deteco e preveno.
5.1
46
5.2
Nessa situao, por algum motivo, um ponteiro que define um endereo de escrita
fica nulo. Seja porque a memria alocada foi retornada em NULL e no foi verificada
ou mesmo porque a aplicao no validou corretamente a entrada e o calculou
indevidamente. O artigo de Mark Dowd, (DOWD, 2008), trata com riqueza de detalhes
esse gnero de falha.
Para que uma falha de NULL pointer desse tipo possa resultar em um ataque, podemos
elencar dois pr-requisitos:
O ponteiro nulo utilizado para calcular o endereo de uma escrita
47
Ocorre quando, por necessidade de dinamismo, uma funo que deve cumprir
determinado papel, definida por um ponteiro. Normalmente, ele deve conter um valor
vlido de um endereo de memria que contenha cdigo que cumpra com as aes
desejadas. Mas isso pode, na prtica, no se confirmar. Um valor NULL pode estar
no ponteiro no momento em que a funo chamada.
Se o endereo zero no constituir uma regio vlida, a aplicao terminar com um
erro. Mas e, se pusermos algo nessa regio para ser executado? Imagine que um atacante
tenha posto um shellcode justamente nesse ponto e provocou a chamada funo definida
pelo ponteiro nulo. A, certamente, poderamos estar frente a um ataque com grandes
chances de ser bem sucedido.
Como pr-requisitos, podemos elencar, portanto:
Um ponteiro nulo define o endereo de uma funo a ser chamada
O usurio pode provocar a chamada dessa funo
possvel mapear para o endereo zero uma regio vlida de memria contendo
dados do usurio
Com esses pontos bsicos atendidos, h condies para o emprego da tcnica. Como
exemplo maior, mostraremos um bug no Kernel do Linux na seo 5.3.
5.3
48
49
50
/ We c o u l d h a v e p e r h a p s u s e d a t o m i c _ t ,
b u t t h i s and f r i e n d s b e l o w a r e t h e
o n l y p l a c e s . So i t d o e s n t seem w o r t h w h i l e .
/
+
i n t r e t = ENOENT ;
+
m u t e x _ l o c k (& i n o d e >i _ m u t e x ) ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 +
return 0;
return r e t ;
51
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
}
static int
pipe_write_open ( s t r u c t inode inode , s t r u c t f i l e f i l p )
{
+
i n t r e t = ENOENT ;
+
m u t e x _ l o c k (& i n o d e >i _ m u t e x ) ;
return 0;
return r e t ;
}
static int
pipe_rdwr_open ( s t r u c t inode inode , s t r u c t f i l e f i l p )
{
+
i n t r e t = ENOENT ;
+
m u t e x _ l o c k (& i n o d e >i _ m u t e x ) ;
return 0;
return r e t ;
}
/
Vemos que nas linhas 16 a 21 temos a insero de uma verificao do ponteiro i_pipe.
52
Embora o foco do presente trabalho recaia sobre a arquitetura x86, vlido identificar
a repercusso de um acesso a posio zero de memria em outros casos. Existem
arquiteturas nas quais esse endereo j mapeado inicialmente. Podemos apontar o caso
da ARM e da XScale; ambas para sistemas embarcados. Nelas, o vetor de excees se
encontra nessa posio. Ele contm, por exemplo, o endereo que define o vetor para o
tratamento das interrupes de software.
Essa vulnerabilidade, tratada por Barnaby Jack, pesquisador de segurana da
Juniper, em (JACK, 2007). Conforme Jack, caso alguma aplicao nas arquiteturas
em questo possua alguma falha na qual o endereo de destino de uma escrita seja
um ponteiro nulo, o vetor de excees acaba sendo sobrescrito. Isso potencializa
enormemente um erro de NULL pointer.
Como exemplo, em (JACK, 2007), apresentada uma falha na biblioteca libpng.
Um tratamento inadequado da alocao de memria para imagens, que retornava NULL,
permitia que os dados de uma imagem fossem copiados via memcpy() para o endereo
zero. Por esse caminho, um atacante seria capaz de sobrescrever a tabela de endereos de
interrupes de software. Assim, bastaria uma chamada do sistema em virtude de uma
interrupo, para que o cdigo injetado pudesse ser executado.
Segundo avaliao de Jack, uma das formas de prevenir esse tipo de ataque no
permitir a escrita na rea do vetor de excees. Outra medida sugerida, e existente em
verses posteriores das arquiteturas, como ARM9, a possibilidade de mapeamento do
vetor de excees para endereos mais altos - como 0xFFFF00000. De qualquer forma,
no resta dvida que os projetistas cometeram srio equvoco nas escolhas envolvidas no
vetor de excees.
53
5.4
Decises estruturais
Programao consciente
54
Testes
Toda e qualquer forma de teste contribui direta ou indiretamente para a deteco desse
tipo de falha. Mas essencial que a aplicao seja examinada sob a tica de testes
de requisitos negativos. No captulo 6, que trata de Fuzzing, so apresentadas diversas
formas de testes que podem auxiliar.
possvel, por exemplo, testar a aplicao simulando falhas na alocao de memria.
De tal forma que, certas requisies de memria propositalmente retornem NULL.
Com esse tipo de cenrio, situaes inusitadas podem ser criadas com facilidade.
Analogamente, outras bibliotecas tambm podem ser substitudas por verses de teste
que gerem contextos nos quais a aplicao forada a tratar ponteiros nulos.
No caso da vulnerabilidade CVE-2009-2692, analisada em 5.3.2, situaes que
simulassem uma falha no envio de um arquivo, como no exploit apresentado para
CVE-2009-2692, seriam suficientes para detectar o problema. Isto porque ocorreria a
falha na chamada a funo cujo ponteiro estaria nulo. Por isso a enorme necessidade de
testes, notoriamente aqueles que criem contextos em que falhas sejam inseridas.
55
6.1
O que fuzzing?
56
6.2
6.2.1
O surgimento oficial
A experincia acima seria uma das primeiras formas de uso do conceito de fuzzing.
Mas como marco oficial do nascimento, podemos considerar a pesquisa feita por Barton
Miller no final da dcada de 1980 e incio dos anos 90. Como fruto do seu trabalho,
surgiu a primeira ferramenta fuzzing em software chamada Fuzz. Miller e sua equipe a
utilizaram para gerar entradas randmicas para testar ferramentas bsicas dos sistemas
UNIX. Sua surpresa foi enorme em perceber como foi possvel derrubar boa parte das
aplicaes sem muito esforo. Ficava ntido o enorme potencial de um novo conceito a
ser explorado.
6.2.3
O desenvolvimento da tcnica
6.3
Conceitos importantes
Cobertura
Quais partes do cdigo da aplicao testado so testadas. Esse conceito retrata um dos
objetivos bsicos de qualquer tipo de teste. A necessidade de cobrir o mximo possvel o
cdigo da aplicao alvo.
6.3.2
Superfcie de ataque
Muito embora a inteno seja alcanar cobertura mxima, muitas vezes certo trechos
do cdigo simplesmente so inacessveis a fatores externos. De forma que, nenhum
tipo de entrada possa alterar em nada seu comportamento. A superfcie de ataque
justamente todo o cdigo possvel de ser coberto - pois, em contraste ao exposto acima,
influencivel por aes do usurio.
57
6.4
Etapas Fuzzing
Etapa que corresponde busca por interfaces ao sistema alvo. Podem ser sockets
de rede, variveis de ambiente, arquivos, argumentos da linha de comando, interfaces
de chamada remota(RPC), entre outros. Toda e qualquer forma de comunicao que
possa influir na execuo deve ser considerada. Como um exemplo mais surpreendente,
podemos citar a memria compartilhada.
6.4.2
o ponto crtico da metodologia. Saber como criar os dados a serem passados ao alvo.
Podem ser completamente randmicos, mutaes de dados pr-existentes ou mesmo fruto
de uma completa modelagem de um protocolo. Se estamos testando um servidor web por
exemplo, podemos gerar requisies totalmente aleatrias, alterar sesses web legtimas
gravadas para inserir possveis falhas ou at modelarmos o protocolo HTTP para criao
de sesses semi-vlidas.
6.4.3
Consiste no fornecimento das entradas criadas ao sistema alvo. Implica o contato com
o sistema atravs de suas interfaces. Seja ela a linha de comando, o sistema de arquivos
ou conexes ao um servidor. Apenas alterar uma varivel de ambiente antes de iniciar a
aplicao testada j pode ser considerada um envio de entrada.
6.4.4
Monitoramento do alvo
Pouco adianta interagir com sistema testado de todas as formas possveis sem
acompanhar criteriosamente sua execuo. Suas manifestaes devem ser observadas
e possveis falhas ou problemas, objetivos do teste, no podem passar despercebidas.
Naturalmente, quanto mais qualificada a tcnica fuzzing, maior a capacidade de
identificao de problemas no sistema alvo. Por isso, saber identificar, por exemplo,
falhas de corrupo de memria, negaes de servio, acessos no permitidos, constitui
o grande diferencial de um fuzzer. O uso de um debugger na aplicao alvo uma das
alternativas.
6.4.5
58
bugs que no implicam possibilidade de exploit. Por isso a necessidade de uma anlise
detalhada e qualificada para que as reais aberturas no sistema avaliado sejam encontradas.
6.5
Tipos de fuzzers
Para classificar os fuzzers podemos seguir dois critrios bsicos. Eles determinam a
rea de atuao e o tipo de entradas geradas.
Tipo de vetor de ataque
Complexidade dos casos de teste
6.5.1
A complexidade com que o fuzzer cria suas entradas constitui outro meio de
classificao. Alguns podem ser muito simples pois apenas randomizam certos
parmetros antes de fornec-los ao sistema alvo. Outros, porm, podem conter todo um
modelo de um protocolo; sendo capazes de gerar complexas interaes semi-vlidas em
que apenas certos parmetros sofrem algum tipo de alterao visando disparar algum erro.
Geralmente, os mais simples, meramente randmicos, acabam possuindo baixa
cobertura do cdigo testado. Isso porque eles no alcanam grande profundidade na
aplicao testada. Logo na superfcie, algum parmetro gerado acaba no sendo aceito e
mudanas em outros pontos da entrada sequer so considerados. o caso, por exemplo,
de um testador de um servidor HTTP que, sendo totalmente randmico, cria apenas
requisies mal formadas que sequer chegam a disparar alguma rotina de gerao de
resposta pelo servidor.
Por esse critrio, podemos citar as seguintes famlias de fuzzer:
Estticos ou randmicos Os mais simples. No possuem qualquer noo de protocolo.
Testam aplicaes baseadas em requisio/resposta sem controle de estado.
Baseados em bloco Implementam estruturas bsicas de requisio/resposta e so
capazes de validar as entradas de forma a respeitar parmetros como checksums.
De gerao dinmica ou baseados em evoluo No compreendem o protocolo a ser
testado, mas baseado nas respostas do sistema podem, dinamicamente, gerar
entradas.
Baseados em modelos ou simuladores Podem constituir a implementao completa de
um protocolo. Permitem gerar entradas que em sequncia de acordo com um estado.
Por isso, podem, por exemplo, interagir com aplicaes que trabalham com sesses.
59
6.6
Monitoramento da aplicao
Meios intrusivos
Para auxiliar na descoberta das falhas o mais na origem possvel, existem mtodos
ainda mais intrusivos que os expostos anteriormente. Fazer com que a aplicao testada
carregue bibliotecas diferentes das originais um dos caminhos.
Trocando a biblioteca que faz o gerenciamento de memria dinmica, responsvel
pelo chamadas como malloc(), possvel devolver devolver aplicao blocos de
memria que permitam a fcil identificao de overflows. Assim, muito antes que um
erro de corrupo de memria fosse gerado, ele j teria sido detectado.
Numa mesma abordagem, a tcnica chamada simulao binria, (TAKANEM, 2008)
pg. 181, tambm visa acompanhar com enorme proximidade o sistema alvo. Esse o
caso da ferramenta Valgrind (encontrada em http://valgrind.org). Nela, usada uma CPU
sinttica que recebe todas as instrues e pode analis-las na busca por problemas antes
de serem repassadas CPU real. Todos os acessos memria so controlados. Com esse
tipo de acompanhamento, as vulnerabilidades podem ser encontradas em tempo real e
informaes valiosas sobre sua possibilidade de explorao j so conhecidas.
6.7
Nessa seo, apresentamos uma nova abordagem do ramo fuzzing. Fruto da pesquisa
de Patrice Godefroid e associados descrita em (GODEFROID, 2008). Originalmente,
60
a tcnica fuzzing sequer se apoiava no cdigo fonte para busca de qualquer tipo de
auxlio no aumento de sua efetividade. Com o tempo, porm, foi possvel perceber
que, partindo de certas informaes do funcionamento interno da aplicao, os resultados
obtidos poderiam ser melhores. Vindo do outro extremo, o White Fuzz Testing no apenas
faz uso do cdigo fonte, mas o executa simbolicamente - sendo totalmente caixa branca.
6.7.1
Funcionamento bsico
61
Limitaes
62
CONCLUSO
63
REFERNCIAS
em:
Disponvel
em:
64
65
66
APNDICE A
A.1
(A.1)
A.2
A.3
67
Mtricas bsicas
Valor nominal Valor numrico
local
0.395
Vetor de acesso
rede adjacente
0.646
rede
1.0
alta
0.35
Complexidade de acesso
mdia
0.61
baixa
0.71
vrias
0.45
Necessidade de autenticao
uma
0.56
nenhuma
0.704
nenhum
0.0
Impacto na confidencialidade
parcial
0.275
completo
0.660
nenhum
0.0
Impacto na integridade
parcial
0.275
completo
0.660
nenhum
0.0
Impacto na disponibilidade
parcial
0.275
completo
0.660
Mtrica
Mtricas temporais
Valor nominal
Valor numrico
no comprovada
0.85
prova de conceito
0.9
Facilidade de explorao
funcional
0.95
alta
1.0
no definida
1.0
conserto definitivo
0.87
conserto temporrio
0.90
Nvel de remediao
workaround
0.95
indisponvel
1.0
no definido
1.0
no confirmada
0.9
no corroborada
0.95
Confiabilidade no report
confirmada
1.0
no disponvel
1.0
Mtrica
68
Mtricas ambientais
Mtrica
Valor nominal Valor numrico
nenhum
0.0
baixo
0.1
baixo-mdio
0.3
Dano colateral potencial
mdio-alto
0.4
alto
0.5
no definido
0
nenhuma
0
baixa
0.25
Abundncia de alvos
mdia
0.75
alta
1.0
no definida
1.0
baixa
0.5
mdia
1.0
Importncia da confiabilidade
alta
1.51
no definida
1.0
baixa
0.5
mdia
1.0
Importncia da integridade
alta
1.51
no definida
1.0
baixa
0.5
mdia
1.0
Importncia da disponibilidade
alta
1.51
no definida
1.0