Вы находитесь на странице: 1из 1043

Sobre este eBook

EPUB é um formato aberto, padrão da indústria para eBooks. No entanto, o apoio de ePUB e seus muitos recursos varia entre
os dispositivos de leitura e aplicações. Use as configurações do dispositivo ou aplicativos para personalizar a apresentação ao
seu gosto. Definições que você pode personalizar muitas vezes incluem fonte, tamanho da fonte, coluna simples ou dupla,
paisagem ou no modo retrato, e figuras que você pode clicar ou tocar para ampliar. Para informações adicionais sobre as
configurações e funções do seu dispositivo de leitura ou aplicativo, visite o site do fabricante do dispositivo.

Muitos títulos incluem exemplos de código de programação ou configuração. Para otimizar a apresentação
destes elementos, ver o eBook em única coluna, o modo paisagem e ajustar o tamanho da fonte para o menor
ajuste. Além de apresentar o código e configurações no formato de texto refluído, nós incluímos imagens do código
que imitar a apresentação encontrada no livro impresso; portanto, onde o formato refluído pode comprometer a
apresentação da listagem de código, você verá um link “Clique aqui para ver a imagem de código”. Clique no link
para visualizar a imagem do código de impressão de fidelidade. Para voltar à página anterior visto, clique no botão
Voltar no seu dispositivo ou aplicativo.
Segurança em Computação
Quinta edição Charles P.
Pfleeger Shari Lawrence
Pfleeger
Jonathan Margulies

Upper Saddle River, NJ • Boston • Indianapolis • San Francisco New York •


Toronto • Montreal • Londres • Munique • Paris • Madrid
Capetown • Sydney • Tóquio • Singapura Cidade • México
Muitas das designações usadas por fabricantes e vendedores para distinguir seus produtos são marcas registradas.
Onde essas designações aparecem neste livro, e a editora estava ciente de uma reivindicação de marca registrada, as
designações foram impressos com letras iniciais maiúsculas ou em todas as capitais.

Os autores e editora ter cuidado na preparação deste livro, mas não oferece nenhuma garantia expressa ou implícita
de qualquer tipo e não assumem nenhuma responsabilidade por erros ou omissões. Não assumimos qualquer
responsabilidade por danos acidentais ou consequentes relacionados com ou decorrentes do uso das informações ou
programas aqui contidas.

Para obter informações sobre a compra deste título em grandes quantidades, ou de oportunidades de vendas especiais (que
podem incluir versões electrónicas; desenhos de capa personalizada e conteúdo específico para o seu negócio, objetivos de
treinamento, foco de marketing ou marca interesses), entre em contato com nosso departamento de vendas corporativas em corpsales@pearso
ou (800) 382-3419.

Para pedidos de compra do governo, entre em contato governmentsales@pearsoned.com . Para perguntas sobre

vendas fora os EUA, entre em contato international@pearsoned.com . Visite-nos na web: informit.com/ph

Biblioteca do Congresso de Dados de Catalogação na Publicação


Pfleeger, Charles P., 1948-
Segurança em computação / Charles P. Pfleeger, Shari Lawrence Pfleeger, Jonathan Margulies.- Quinta
edição.

páginas cm
Inclui referências bibliográficas e índice.
ISBN 978-0-13-408504-3 (capa dura:. ALK papel) -ISBN 0-13-408504-3 (capa dura: ALK.

papel)
1. A segurança do computador. 2. Protecção de Dados. 3. Privacidade, direito de. I. Pfleeger, Shari
Lawrence.
II. Margulies, Jonathan. III. Título.
QA76.9.A25P45 2015
005.8-DC23 2014038579

Copyright © 2015 Pearson Education, Inc.

Todos os direitos reservados. Impresso nos Estados Unidos da América. Esta publicação está protegida por direitos de
autor, e permissão deve ser obtida a partir da editora antes de qualquer reprodução proibida, armazenamento num sistema
de recuperação ou transmissão em qualquer forma ou por qualquer meio, electrónico, mecânico, de gravação, ou do mesmo
modo. Para obter permissão para usar o material a partir deste trabalho, envie uma solicitação por escrito para a Pearson
Education, Inc., Departamento de Permissões, Uma Lake Street, Upper Saddle River, Nova Jersey 07458, ou você pode
enviar por fax o seu pedido para (201) 236-3290 .

ISBN-13: 978-0-13-408504-3
ISBN-10: 0-13-408504-3
Texto impresso nos Estados Unidos em papel reciclado em Courier em Westford, Massachusetts. Primeira impressão, janeiro
2015
Editor executivo
Bernard Goodwin

Assistente Editorial
Michelle Housley

Editor chefe
John Fuller

editor do projeto
Elizabeth Ryan

Editor de cópia
Mary Lou Nohr

revisor
Linda Begley

cover Designer
Alan Clements

Compositor
Shepherd, Inc.
Para Willis Ware, um herói da segurança
do computador e privacidade.
Conteúdo

Prefácio Prefácio

Agradecimentos

Sobre os autores

Capítulo 1 Introdução
1.1 O que é segurança do computador?

Valores de Ativos

A vulnerabilidade-Ameaça-Control Paradigma
1,2 Ameaça

Confidencialidade

Integridade Disponibilidade

tipos de ameaças Tipos de

atacantes

1.3 Harm
Risco e Common Sense
Method-Oportunidade-Motive

1,4 vulnerabilidades

1.5 Controles

1.6 Conclusão
1.7 Qual é o próximo?

1.8 Exercícios

Capítulo 2 Toolbox: autenticação, controle de acesso e criptografia


2.1 Autenticação
Identificação Versus Autenticação base em frases e
Fatos: Something You Know

Autenticação baseada em biometria: algo que você está

Autenticação Baseada em Tokens: algo que você tem

Autenticação multifator Federated


Identity Management
autenticação segura
Controle 2.2 Acesso

Políticas de acesso de execução Access Control

Procedimento Orientada Controle de acesso baseado

em função de Controle de Acesso

2.3 Criptografia
Problemas abordados pela Encryption

Terminologia

DES: A criptografia de dados padrão AES:


Advanced Encryption System Public Key
Cryptography
Criptografia de chave pública para chaves secretas do Exchange Erro de

detecção de códigos Confiança

Certificados: Identidades confiáveis ​e chaves públicas


Signatures-All Digital os Pieces

2.4 Exercícios

Capítulo 3 Programas e Programação


3.1 não intencional (Nonmalicious) Programação
descuidos
Buffer Overflow incompleta

Time-de-Check Mediação para a

Time-of-Use indocumentado Access Point

Off-by-One erro estouro de número inteiro

Unterminated terminada em NULL parâmetro de cadeia

comprimento, tipo e condição de corrida Número do

Programa Utility inseguro

3.2 Malicious Code-Malware


Malware-vírus, Cavalos de Tróia e Worms Detalhes
técnicos: Código Malicioso
3,3 contramedidas
Contramedidas para usuários contramedidas

para desenvolvedores
Contramedida Especificamente para contramedidas de

segurança que não funcionam

Exercícios

Conclusão

Capítulo 4 O Lado Web-User


4.1 Ataques de navegador

Navegador tipos de ataque

Como Ataques navegador suceder: Falha Identificação e


Autenticação
4.2 Ataques na web para usuários

Conteúdo Web malicioso conteúdo


falso ou enganoso
Proteção contra maliciosos Páginas da Web

4.3 Obtenção de usuário ou dados de sites

Código Dentro de Dados

Site de Dados: Problema de um usuário, Too prevenção

de ataques de dados

4.4 Ataques E-mail

falso e-mail
Mensagens de e-mail falso como spam Falso

(imprecisa) Email dados cabeçalho Phishing

Proteger Contra-mail ataques


4.5 Conclusão
4.6 exercícios

Capítulo 5 Sistemas Operacionais

5.1 Segurança em Sistemas operacionais

Antecedentes: Operação Características da segurança da estrutura do

sistema de sistemas operacionais ordinário um pouco de história protegido

Objects

Operando Ferramentas do sistema para implementar funções de


segurança

5.2 Segurança na concepção dos sistemas operativos

Simplicidade do design

Layered Design Projeto do

Kernelized
Referência Monitor de correção e integridade

Princípios seguro Projeto Trusted Sistemas Confiáveis

​Funções do Sistema Os resultados da pesquisa

Sistemas Confiáveis

5,3 Rootkit
Rootkit telefone Rootkit evita
detecção Rootkit Opera
Desmarcado Sony XCP Rootkits
Rootkit TDSS Outros Rootkits

5.4 Conclusão
5.5 Exercícios

Capítulo 6 Networks

6.1 Conceitos de rede


Antecedentes: Media Network Transmission fundo:
camadas de protocolo de fundo: Endereçamento e
roteamento
Parte I-War on Networks: Ataques de Segurança de Rede

6.2 Ameaças à Rede de Comunicação


Intercepção: espionagem e escutas telefónicas Modificação,
Fabrication: corrupção de dados Interrupção: Perda de
Service Port Scanning Resumo Vulnerabilidade

6.3 Segurança de Rede Sem Fios

Background WiFi
Vulnerabilidades em redes wireless Falha Countermeasure:
WEP (Wired Equivalent Privacy)

Mais forte Protocolo Suite: WPA (WiFi Protected Access)

6.4 Negação de Serviço

Exemplo: maciça falha Web Estonian Como


Serviço É negado
Ataques de inundação em Detalhe

Inundações rede causados ​pelas inundações Malicious Code rede

de esgotamento de recursos de negação de serviço, abordando

Falhas de redirecionamento de tráfego ataques de DNS

Exploram vulnerabilidades conhecidas da


desconexão física

6.5 Distributed Denial-of-Service


Scripted Denial-of-Service Ataques Bots
Botnets

Malicioso Agentes Autônomos Móveis


Autônomos Agentes Protetores móveis
Parte Defesas II-estratégicos: contramedidas de
segurança

6.6 Criptografia de segurança de rede


Rede Encryption
navegador Encryption
Onion Routing
IP Security Protocol Suite (IPsec)
Arquitetura do Sistema Virtual Private
Networks

6.7 Firewalls
O que é um Firewall? Projeto de Firewalls
Tipos de Firewalls pessoais Firewalls
Comparação de Tipos de Firewall Exemplo
Firewall Configurações Network Address
Translation (NAT) Data Loss Prevention

6.8 Sistemas de detecção e prevenção de intrusões

Tipos de IDSs
Resposta Outro Intrusion Detection Tecnologia
Intrusion Prevention Sistemas de Intrusão
Metas para pontos fortes e limitações Intrusion
Detection Systems IDS

6.9 Gestão de Rede


Gestão para assegurar o serviço

Informações de segurança e gerenciamento de eventos (SIEM)

6.10 Conclusão
6.11 Exercícios

Capítulo 7 Databases

7.1 Introdução às Bases de Dados

Conceito de um banco de dados Componentes

de bases de dados Vantagens de usar bancos de

dados

7.2 Requisitos de segurança de bases de dados

Integridade do Banco de Dados

Elemento integridade Auditabilidade

Controle de Acesso Autenticação do

usuário Disponibilidade

Integridade / Confidencialidade / Disponibilidade

7.3 Fiabilidade e Integridade


Recursos de proteção do sistema operacional Two-Phase

Atualização Redundância / Internal Consistência Recovery

Simultaneidade / Consistência

Divulgação 7.4 Base de dados

Tipos de dados sensíveis de

Divulgações

Prevenir Divulgação: Supressão de dados e


Modificação
Segurança Versus Precision

7.5 Data Mining e Big Data


Data Mining Big
Data
7,6 exercícios
Conclusão
Capítulo 8 Cloud Computing

8.1 Conceitos de Cloud Computing

Modelos de serviço Modelos

de implantação

8.2 Movendo-se para a nuvem

Avaliação de Provedor de Análise de Risco

Nuvem comutação provedores de nuvem

Cloud como um Controle de Segurança

8.3 Ferramentas e técnicas de segurança na nuvem

Protecção de Dados na Logging


Application Security Cloud Cloud e
Resposta a Incidentes

8.4 Gestão de Identidade Nuvem

Security Assertion Markup Language OAuth

OAuth para autenticação


8.5 Protegendo IaaS

IaaS público versus privado de segurança de rede

8.6 Conclusão
Quando o campo é dirigido para
saber mais

8.7 Exercícios

Capítulo 9 Privacy

9.1 Conceitos Privacidade

Aspectos de Informação de Privacidade relacionados

com a informática de privacidade Problemas

9.2 Princípios de privacidade e Políticas

Práticas de informação justas

Leis de privacidade do US

Controles sobre sites do governo dos EUA Controles em

sites comerciais fora dos EUA Princípios de Privacidade

ações individuais para proteger os governos de

privacidade e roubo de Privacidade de Identidade

9.3 Autenticação e Privacidade


O que Autenticação significa
Conclusões

9.4 Data Mining


Governo Data Mining Data Mining
preservar a privacidade-
9.5 Privacidade na Web

Compreender os pagamentos ambiente on-line


no Web Site e Portal inscrições cuja página é
este? Precauções para navegar na web
Spyware

Compras na Internet
9.6 Email Security
Onde é que Email Vai, e quem pode acessá-lo? Intercepção de
Email Monitoramento Email

Anonymous, Pseudonymous, e desaparecendo Email

Spoofing e spam Resumo

9.7 Impactos Privacidade de Tecnologias Emergentes

Radio Frequency Identification Voto


Electrónico VoIP e Skype privacidade
na nuvem

Conclusões sobre Tecnologias Emergentes

9.8 onde o campo é dirigido


9.9 Conclusão
9.10 Exercícios

Capítulo 10 Gestão e Incidentes


10.1 Planejamento de Segurança

Organizações e Conteúdo planos de segurança de um

Assegurando Compromisso Plano de Segurança Segurança

Planejamento membros da equipe a um Plano de Segurança

10,2 Negócios Planejamento de Continuidade


Avaliar Business Impact

Desenvolver Estratégia Desenvolver

o Plano de

10.3 Incidentes Manipulação

Planos de Resposta a Incidentes

Incident Response Teams

Análise 10,4 Risco


A natureza do risco Passos numa

análise de risco

Argumentos a favor e contra Análise de Risco

10,5 Lidar com desastres


Desastres naturais

Energia Perda vândalos

Humanos

Intercepção de informações sensíveis Planos de


Contingência Recap Segurança Física

10,6 Conclusão
10.7 Exercícios

Capítulo 11 questões legais e Ética

11.1 Proteger programas e dados


Copyrights Patentes

Trade Secrets

Casos Especiais

11.2 Informação e da Lei


Informações como objeto questões jurídicas

relacionadas com informações O Sistema Legal

Resumo de Proteção para Artefatos de computador

11.3 Direitos de empregados e empregadores

A propriedade de Contratos
produtos Emprego

11.4 Reparação de falhas de software

Vendendo falhas de software correto

do Reporting Software

11,5 Computer Crime


Por uma categoria separada para Computer Crime É Necessário

Por Computer Crime é difícil de definir porque


Computer Crime é duro para processar Exemplos de
leis internacionais Dimensões

Por que criminosos Computer são difíceis de pegar o que


Computer Crime não aborda Resumo das questões legais em
segurança informática

11.6 Questões Éticas em segurança informática

Diferenças entre a Lei e Ética Estudar Ética


raciocínio ético

11.7 Análise de Incidentes com Ética

Situação I: Utilização de Serviços de Informática

Situação II: Direitos de Privacidade situação III:

Negação de Serviço situação IV: apropriação dos

programas situação V: Recursos de Propriedade

situação VI: Fraude

Situação VII: exatidão das informações Situação VIII:


Ética de Hacking ou Cracking situação IX: True
Conclusão Representação de Ética Computer

Exercícios

Conclusão

Capítulo 12 Detalhes de Criptografia

12,1 Cryptology
Cryptanalysis criptográficos
Primitives One Time-Pads
Análise Estatística

O que faz um “seguro” Algoritmo de criptografia?

12.2 simétricas criptografia Algoritmos


DES

AES

RC2, RC4, RC5 e RC6


12,3 criptografia assimétrica com RSA
A Força RSA algoritmo do
algoritmo RSA
12.4 resumos de mensagem

Funções hash unidirecional funções

hash resumos de mensagem

12.5 Assinaturas Digitais

Elliptic Curve criptosistemas El Gamal e Assinatura


Digital Algoritmos A controvérsia NSA-Cryptography
de 2012,
12,6 criptografia quântica
Quantum Física Photon
Cryptography Recepção com
fótons Implementação

12,7 Conclusão

Capítulo 13 Tópicos Emergentes

13.1 A Internet das Coisas


Telefones Medical

dispositivos móveis

Segurança na Internet das Coisas


13,2 Economia
Fazendo um Business Case

Quantificação de Segurança

Pesquisas atuais e futuras Directions


13,3 voto eletrônico
O que é o Voto Electrónico? O que é

uma eleição justa? Quais são as

questões críticas?

13,4 guerra cibernética

O que é guerra cibernética? Possíveis exemplos de

guerra cibernética Questões críticas

13.5 Conclusão

Bibliografia
Índice
Prefácio

Dos autores: Willis Ware gentilmente escreveu o prefácio que publicamos em ambas as terceira e quarta edições
do Segurança em Computação. Em seu prefácio ele cobre alguns dos primeiros dias de segurança do
computador, descrevendo preocupações que são tão válidos hoje como eles eram naqueles dias anteriores.

Willis escolheu para sublimar o seu nome e os esforços para o bem maior dos projetos que ele
trabalhou. Na verdade, sua análise ponderada e liderança persuasiva contribuiu muito para o
resultado final dessas atividades. Poucas pessoas reconhecem o nome de Willis hoje; mais pessoas
estão familiarizadas com a Directiva de Protecção de Dados da União Europeia, que é um
descendente direto do relatório [ WAR73a ] Do seu comitê para o Departamento de Serviços
Humanos. Willis teria quis assim: a ênfase nas idéias e não em seu nome.

Infelizmente, Willis morreu em novembro de 2013, 93 anos Achamos que as lições que ele escreveu em seu
prefácio ainda são importantes para os nossos leitores. Assim, tanto com respeito e gratidão, nós republicar
suas palavras aqui.

Nos anos 1950 e 1960, a conferência de destaque lugares de reunião para os profissionais e usuários de tecnologia
informática foram as Conferências duas vezes por ano Joint Computer (CCM)
- inicialmente chamado CCM orientais e ocidentais, mas mais tarde rebatizado de Primavera e Outono CCM e mesmo
depois, o Nacional anual (AFIPS) Conference computador. A partir deste meio, o tema do computador de segurança de mais
tarde a ser chamado a segurança do sistema de informação e, atualmente, também conhecido como “proteção da
infra-estrutura nacional de informação” - mudou-se do mundo dos interesses da defesa classificados à vista do público.

A poucas pessoas-Robert L. Patrick, John P. Haverty, e eu entre outros, tudo em seguida, na RAND
Corporation (como seu nome era então conhecida) tinha falado sobre a crescente dependência do país e
suas instituições na tecnologia de computador. Preocupa-nos que os sistemas instalados pode não ser
capaz de proteger a si e seus dados contra ataques intrusivos e destrutivos. Decidimos que era hora de
trazer o aspecto de sistemas informáticos de segurança para a atenção das comunidades de tecnologia e de
usuário.

O evento permitindo foi o desenvolvimento no âmbito da Agência de Segurança Nacional (NSA) de um sistema de
compartilhamento de tempo de acesso remoto com um conjunto completo de controles de acesso de segurança, rodando em uma
máquina Univac 494, e servindo os terminais e os usuários não só dentro do edifício sede em Fort George G. Meade, Maryland, mas
também em todo o mundo. Por sorte, eu sabia detalhes do sistema.

Persuadir outros dois da RAND para ajudar-Dr. Harold Peterson e Dr. Rein Turn- além Bernard Peters da
NSA, que organizou um grupo de papéis e apresentou-o à gestão conferência SJCC como uma sessão de
papel adicional pronto a ser presidido por mim. [ 1 ] A conferência aceitou a oferta, ea sessão foi apresentado
no Atlantic City (NJ) Convention Hall em 1967.
Logo em seguida e conduzido por um pedido de um contratante de defesa para incluir ambas as aplicações de defesa
classificados e negócios simultaneamente em uma única máquina de mainframe funcionando em um modo de acesso
remoto, o Departamento de Defesa, por intermédio do Advanced Research Projects Agency (ARPA) e mais tarde do
Defense Science Board (DSB), organizou uma comissão, a que presidi, para estudar a questão dos controles de
segurança para sistemas de computadores. A intenção era produzir um documento que poderia ser a base para a
formulação de uma posição política DoD sobre o assunto.

O relatório da comissão foi inicialmente publicado como um documento classificado e foi formalmente
apresentado ao patrocinador (DSB) em janeiro de 1970. Mais tarde, foi desclassificado e republicado (pela
RAND Corporation) em 1979. outubro [ 2 ] Foi amplamente divulgado e ficou apelidado de “o relatório Ware.” O
relatório e uma introdução histórica estão disponíveis no site da RAND. [ 3 ]

Posteriormente, a Força Aérea dos EUA (USAF) patrocinado outra comissão presidida por James P. Anderson. [ 4 ] O
relatório, publicado em 1972, recomendou um programa de segurança de 6 anos R & D, totalizando cerca de US $ 8
milhões. [ 5 ] A USAF respondeu e financiou vários projectos, dos quais três foram para projetar e implementar um sistema
operacional com controles de segurança para um computador específico.

Eventualmente, essas atividades levou ao programa “Critérios e Avaliação”, patrocinado pela NSA. Ele culminou com
a “Orange Book” [ 6 ] Em 1983 e, subsequentemente, a sua matriz de suporte de documentos, os quais foram apelidado
“da série do arco-íris.” [ 7 ] Mais tarde, na década de 1980 e sobre a década de 1990, o assunto tornou-se um
internacional levando à norma ISO conhecido como o “ Common Criteria “. [ 8 ]

É importante entender o contexto em que a segurança do sistema foi estudada nas primeiras décadas. O
estabelecimento de defesa tinha uma longa história de protecção de informações classificadas em forma de
documento. Ele tinha evoluído de um sistema muito elaborado para compartimentar material em grupos, subgrupos e
super-grupos, cada um exigindo uma autorização específica de pessoal e necessidade de ter conhecimento como
base para o acesso. [ 9 ] Ele também tinha um legado de tecnologia de criptografia e experiência secular para proteger
informações classificadas em trânsito. Finalmente, compreendeu o problema de pessoal e a necessidade de
estabelecer a confiabilidade de seu povo. E certamente entendia do assunto segurança física.

Portanto, a problema de segurança de computador, como foi entendido na década de 1960 e mesmo
depois, foi como criar um sistema de computador de um grupo de controles de acesso que implementar
ou imitar os processos do mundo de papel antes, além dos problemas associados de proteger esse
software contra alteração não autorizada, subversão e uso ilícito, e de incorporar todo o sistema em um
ambiente físico seguro com descuidos de gestão adequadas e doutrina operacional e procedimentos. O
aspecto pouco compreendido de segurança foi principalmente a questão de software com, no entanto,
um aspecto hardware garantia; ou seja, o risco de que ele poderia não funcionar, ou ser penetrado e
subverter o comportamento adequado de software. Para os aspectos relacionados com as
comunicações, pessoal e segurança física, havia uma infinidade de regras, regulamentos, doutrina e
experiência para cobri-los.
No entanto, o mundo mudou agora e de maneiras essenciais. O computador desk-top e estações de trabalho têm
aparecido e proliferaram amplamente. A Internet está florescendo e a realidade de uma World Wide Web está no lugar.
Networking explodiu e comunicação entre sistemas de computador é a regra, não a exceção. Muitas transações
comerciais são agora baseado na web; muitas comunidades-o comerciais uma financeira, em particular,-se mudaram
para uma postura web. O “usuário” de qualquer sistema de computador pode ser literalmente qualquer pessoa no mundo.
Trabalho em rede entre sistemas de computador é onipresente; alcance do sistema de informações é o objetivo.

O efeito líquido de tudo isso tem sido a de expor o sistema de informação baseado em computador
- seu hardware, o software, os seus processos de software, seus bancos de dados, suas comunicações-a um ambiente
sobre o qual ninguém, nem o usuário final, e não administrador de rede ou sistema proprietário, nem mesmo governo tem
o controle. O que deve ser feito é fornecer salvaguardas técnicas, processuais, operacionais e ambientais apropriadas
contra ameaças como eles podem aparecer ou ser imaginada, incorporado em um quadro jurídico socialmente aceitável.

E aparecem ameaças fez-de indivíduos e organizações, nacionais e internacionais. As motivações para penetrar sistemas
para fins mal ou para criar a software malicioso geralmente com um ofensivo ou prejudicial conseqüência-variar de satisfação
intelectual pessoal para espionagem, a recompensa financeira, à vingança, à desobediência civil, e outras razões. segurança
de sistema de informação passou de um ambiente limitado em grande medida auto-suficiente interagindo com uma
comunidade de usuários geralmente conhecido e disciplinada a um de âmbito mundial com um corpo de usuários que não
podem ser conhecidas e não são necessariamente confiáveis. É importante ressaltar que os controles de segurança agora tem
de lidar com circunstâncias sobre as quais existe em grande parte sem controle ou expectativa de evitar o seu impacto. A
segurança do computador, como tem evoluído, compartilha uma semelhança com o seguro de responsabilidade civil; cada
enfrentam um ambiente de ameaça que é conhecida de uma forma muito geral e pode gerar ataques ao longo de um amplo
espectro de possibilidades; Mas os detalhes exatos ou mesmo tempo ou a certeza de um ataque é desconhecido até que
tenha ocorrido um evento.

Por outro lado, o mundo moderno vive da informação e os seus fluxos; mundo contemporâneo, a sociedade e as
instituições não podem funcionar sem os seus sistemas de informação por computador baseados em comunicação.
Assim, estes sistemas devem ser protegidos em todas as dimensões técnicas, processuais, operacional, ambiental. O
proprietário do sistema e sua equipe se tornaram responsáveis ​por proteger os ativos de informação da organização.

O progresso tem sido lento, em grande parte porque a ameaça não foi percebido como real ou como prejudicial o
suficiente; mas também, em parte, porque o custo percebido de segurança abrangente sistema de informação é visto como
demasiado elevado em comparação com os riscos-especialmente as conseqüências-de financeiros não fazê-lo. Gerências,
cujo apoio com financiamento adequado é essencial, têm sido lentos para ser convencido.

Este livro aborda a ampla varredura de questões acima: a natureza da ameaça e do sistema vulnerabilidades ( Capítulo
1 ); criptografia ( capítulos 2 e 12 ); vulnerabilidades de software ( Capítulo 3 ); os Critérios Comuns ( capítulo 5 ); a
World Wide Web e Internet ( capítulos 4 e 6 ); gestão de risco ( Capítulo 10 ); questões e legais, éticas e de
privacidade ( Capítulo 11 ). O livro também descreve os controles de segurança que estão atualmente disponíveis,
tais como protocolos de criptografia, práticas de desenvolvimento de software, firewalls e sistemas de detecção de
intrusion-. No geral, este livro fornece uma base ampla e sólida para a
especialista do sistema de informações que é acusado de planejamento e / ou organizador e / ou gestão e / ou implementação
de um programa abrangente de segurança do sistema de informações.

No entanto, para ser resolvido muitos aspectos técnicos de informações de segurança-R & D para hardware,
software, sistemas e arquitetura; e os produtos correspondentes. Não obstante, a tecnologia por si só não é a longa vara
na tenda do progresso. Organizacional e gestão de motivação e compromisso para fazer o trabalho de segurança feito é.
Hoje, a infra-estrutura de informações coletivo do país e do mundo está lentamente se movendo para cima a curva de
aprendizagem; cada evento malicioso ou mal intencionado ajuda a empurrar-lo junto. Os eventos baseados em
terrorismo dos últimos tempos estão a ajudar a conduzi-lo. É suficientemente longe para cima a curva para ter alcançado
um equilíbrio adequado entre segurança e ameaça sistema? Quase certamente, a resposta é “não, ainda não; há um
longo caminho a percorrer.”[ 10 ]

- Willis H. Ware
RAND
Santa Monica, Califórnia

Citations

1 . “Segurança e Privacidade em Sistemas de Computação”, Willis H. Ware; RAND, Santa Monica, CA; P-3544,
abril de 1967. Também publicado em Proceedings of the 1967 Conference computador mola comum (mais
tarde renomeado para AFIPS Conference Proceedings), pp 279 seq, Vol. 30, 1967.

“Considerações de Segurança em um sistema de computador Multi-programada,” Bernard Peters;


Anais da Conferência 1967 Primavera Joint Computer (mais tarde renomeado para AFIPS Conference
Proceedings), pp 283 seq, vol 30,
1967.
“Soluções práticas para o problema de privacidade”, Willis H. Ware; RAND, Santa Monica, CA;
P-3544, abril de 1967. Também publicado em Proceedings of the 1967 Conference computador mola
comum (mais tarde renomeado para AFIPS Conference Proceedings), pp 301 seq, Vol. 30, 1967.

“Implicações do sistema de Privacidade da Informação,” Harold E. Peterson e Rein turno; RAND, Santa
Monica, CA; P-3504, abril de 1967. Também publicado em Proceedings de 1967 Conferência Computer
Primavera Conjunta (mais tarde renomeado para AFIPS Conference Proceedings), pp 305 seq, vol. 30,
1967.

2 . “Controles de segurança para sistemas de computador,” (Relatório da Força de Defesa da Ciência Conselho de
Trabalho sobre Segurança de Computadores), RAND, R-609-1-PR. Inicialmente publicado em Janeiro de 1970 como um
documento classificado. Posteriormente, desclassificado e republicado outubro 1979.

3 . http://rand.org/publications/R/R609.1/R609.1.html “Controles de segurança para sistemas de


computador”; R-609,1, RAND, 1979
http://rand.org/publications/R/R609.1/intro.html , Cenário histórico para R-609,1

4 . “Tecnologia de Estudo Planeamento Segurança de Computadores,” James P. Anderson; ESD- TR-73-51,


ESD / AFSC, Hanscom AFB, Bedford, MA; Outubro 1972.

5 . Todos estes documentos são citados na bibliografia deste livro. Para imagens desses papéis históricos sobre
um CD-ROM, consulte a “História do Projeto Segurança de Computadores, Papers No início Parte 1,” Professor
Matt Bishop; Departamento de Computação
Ciências da Universidade da Califórnia em Davis.
http://seclab.cs.ucdavis.edu/projects/history
6 . “DoD Trusted Computer System Evaluation Criteria,” Centro DoD Computer Security, Agência de
Segurança Nacional, Ft George G. Meade, Maryland; CSC-STD-001-83; 15 de agosto de 1983.

7 . Assim chamado porque a tampa de cada documento na série tinha uma página de capa única e
distintamente colorido. Por exemplo, o “Red Book” é “Trusted Interpretação de rede,” National
Computer Security Center, Agência de Segurança Nacional, Ft. George G. Meade, Maryland;
NCSC-TG-005, 31 de julho de 1987. USGPO da número 008-000-00486-2.

8 . “A Retrospective sobre o Movimento Critérios”, Willis H. Ware; RAND, Santa Monica, CA;
P-7949, 1995. http://rand.org/pubs/papers/P7949/
9 . Este esquema é nada, que eu saiba, documentado explicitamente. No entanto, a sua complexidade
pode ser inferida por um estudo de Apêndices A e B de R-609,1 (item [ 2 ] acima).

10 . “O Cyberposture da Infra-estrutura Nacional de Informação”, Willis H. Ware; RAND, Santa Monica,


CA; MR-976-OSTP, 1998. Disponível on-line em:
http://www.rand.org/publications/MR/MR976/mr976.html .
Prefácio
Tablets, smartphones, set-top boxes de TV, dispositivos de navegação GPS, monitores de exercício, postos de
segurança em casa, até mesmo lavadoras e secadoras vêm com conexões de Internet pelo qual os dados de e sobre você ir
a lugares sobre os quais tem pouca visibilidade ou controle. Ao mesmo tempo, a lista de varejistas que sofrem perdas
maciças de dados de clientes continua a crescer: Home Depot, Target, TJ Maxx, PF Chang, Sally Beauty. Por um lado, as
pessoas querem a conveniência e benefícios que acrescentou conectividade traz, enquanto por outro lado, as pessoas estão
preocupadas, e alguns estão seriamente prejudicados pelo impacto de tais incidentes. A segurança do computador traz
esses dois segmentos juntos como corridas de tecnologia para a frente com produtos inteligentes cujos projetistas omitir os
controles básicos que podem prevenir ou catástrofes limite.

Até certo ponto, as pessoas suspiram e esperar que falhas de segurança em produtos básicos e sistemas complexos. Mas
essas falhas não tem que ser. Cada profissional de computador podem aprender como tais problemas ocorrem e como
combatê-los. A segurança do computador tem sido em torno de um campo desde a década de 1960, e tem desenvolvido
investigação de excelência, levando a uma boa compreensão da ameaça e como controlá-lo.

Um fator que desliga muitas pessoas é a língua: termos complicados, tais como vírus polimórfico, ameaça
persistente avançada, ataque de negação de serviço distribuído, inferência e agregação, autenticação multifator,
chave protocolo de intercâmbio, e sistema de detecção de intrusão não rola exatamente fora a língua. Outros
termos de som intrigantes mas opacos, tais como verme, botnet, rootkit, o homem no navegador, honeynet, caixa
de areia, e script kiddie. A linguagem da matemática avançada ou microbiologia não é menos confusão, e a
terminologia Latin de medicina e direito separa aqueles que o conhecem daqueles que não o fazem. Mas os
termos e conceitos de segurança de computadores têm realmente simples, fácil de aprender o significado e usos.

Vulnerabilidade: fraqueza
Ameaça: condição que exerce Incident vulnerabilidade:
vulnerabilidade + ameaça
Controlo: redução de ameaça ou vulnerablity

A premissa da segurança informática é bastante simples: Vulnerabilidades são pontos fracos de produtos, sistemas, protocolos,
algoritmos, programas, interfaces e design. Uma ameaça é uma condição que poderia exercer uma vulnerabilidade. Um incidente
ocorre quando uma ameaça faz explorar uma vulnerabilidade, causando danos. Finalmente, as pessoas adicionar controles ou
contramedidas para prevenir, desviar, diminuir, detectar, diagnosticar e responder a ameaças. Todos a segurança do computador é
construído a partir desse quadro simples. Este livro é sobre as coisas ruins que podem acontecer com computadores e maneiras de
proteger a nossa computação.

Por que ler este livro?

Admite. Você sabe computação implica sérios riscos para a privacidade dos seus dados pessoais, a integridade de seus dados, ou
o funcionamento do seu computador. O risco é um fato da vida: Cruzando a rua é arriscado, talvez até mais em alguns lugares do que
outros, mas você ainda atravessar a rua. Como uma criança que aprendeu a parar e olhar para os dois lados antes de atravessar.
Como você se tornou mais velhos
você aprendeu a medir a velocidade do tráfego em sentido contrário e determinar se você tivesse o tempo para
atravessar. Em algum momento você desenvolveu um sentido de saber se um carro próximo iria abrandar ou ceder.
Esperamos que você nunca teve que praticar isso, mas às vezes você tem que decidir se correndo para a rua sem olhar
é o melhor meio de escapar perigo. O ponto é todas estas questões dependem de conhecimento e experiência.
Queremos ajudá-lo a desenvolver o conhecimento e experiência comparável no que diz respeito aos riscos de
computação seguro.

A mesma coisa pode ser dito sobre a segurança do computador em tudo, desde dispositivos pessoais para sistemas
comerciais complexos: Você começa com alguns básicos termos, princípios e conceitos. Então você aprende a disciplina,
vendo esses princípios reaparecer em numerosas situações, incluindo programas, sistemas operacionais, redes e
computação em nuvem. Você pegar algumas ferramentas fundamentais, tais como autenticação, controle de acesso e
criptografia, e você entender como eles se aplicam em estratégias de defesa. Você começa a pensar como um atacante,
prevendo as fraquezas que podem ser exploradas, e então você mudar para selecionar defesas para combater esses
ataques. Esta última etapa de jogar tanto ataque e defesa faz a segurança do computador uma atividade criativa e
desafiadora.

Usa para e utilizadores deste Livro

Este livro é destinado a pessoas que querem aprender sobre segurança de computadores; Se você leu até aqui você pode
muito bem ser uma dessas pessoas. Este livro destina-se a três grupos de pessoas: estudantes universitários, profissionais de
computação e gerentes e usuários de todos os tipos de sistemas baseados em computadores. Todos querem saber a mesma
coisa: como controlar o risco de segurança do computador. Mas você pode diferir em quanta informação que você precisa sobre
temas específicos: Alguns leitores querem uma pesquisa ampla, enquanto outros querem se concentrar em temas específicos,
tais como redes ou desenvolvimento do programa.

Este livro deve fornecer a amplitude ea profundidade que a maioria dos leitores querem. O livro é organizado por área geral de
computação, de modo que os leitores com interesses particulares pode encontrar informações facilmente.

Organização deste Livro


Os capítulos deste livro progresso de uma forma ordenada, de preocupações de segurança gerais para as necessidades
particulares de aplicações especializadas, em seguida, para as grandes gestão e questões legais. Assim, este livro progride
através de seis áreas principais de interesse:

1. Introdução: ameaças, vulnerabilidades e controles


2. “Caixa de ferramentas” do praticante de segurança: identificação e autenticação, controle de acesso e
criptografia

3. As áreas de aplicação de práticas de segurança de computador: programas, de interação do usuário na Internet,


sistemas operacionais, redes, dados e bancos de dados e de computação em nuvem

4. disciplinas transversais: privacidade, gestão, direito e ética


5. Detalhes de criptografia

6. Emergente domínios de aplicação

O primeiro capítulo começa como muitas outras exposições: colocando bases. Em Capítulo
1 introduzimos termos e definições, e dar alguns exemplos para justificar como esses termos são usados. Em Capítulo
2 começamos a profundidade real do campo através da introdução de três conceitos que formam a base de muitas
defesas em segurança de computadores: identificação e autenticação, controle de acesso e criptografia.
Descrevemos diferentes formas de implementar cada uma delas, explorar pontos fortes e fracos, e dizer de alguns
recentes avanços nestas tecnologias.

Em seguida, avançar através de domínios de computação, desde o usuário individual para fora. Em
Capítulo 3 começamos com programas individuais, aqueles que você pode escrever e aqueles que só usam. Ambos os
tipos estão sujeitos a ataques potenciais, e examinamos a natureza de alguns desses ataques e como eles poderiam ter
sido evitados. Em Capítulo 4 vamos passar para um tipo de programa com o qual a maioria dos usuários hoje são bastante
familiar: o navegador, como um gateway para a Internet. A maioria dos ataques de hoje são remotas, realizado a partir de
um atacante distante através de uma rede, geralmente a Internet. Assim, faz sentido estudar o código malicioso
transmitidas pela Internet. Mas o foco deste capítulo é sobre os danos lançado remotamente, não na infra-estrutura de
rede, que viaja; diferimos os conceitos de rede para Capítulo 6 . Em

capítulo 5 nós consideramos sistemas operacionais, uma forte linha de defesa entre um usuário e atacantes.
Consideramos também maneiras de minar a força do próprio sistema operacional.
Capítulo 6 retorna às redes, mas desta vez nós olhar para a arquitetura e tecnologia, incluindo ataques de negação de
serviço que pode acontecer apenas em uma rede. Dados, sua coleção e proteção, formam o tema da Capítulo 7 , Em que
olhamos para sistemas de gerenciamento de banco de dados e aplicações de dados grandes. Finalmente, em Capítulo 8 vamos
explorar a computação em nuvem, uma adição relativamente recente à paisagem de computação, mas que traz as suas
próprias vulnerabilidades e proteções.

Em capítulos 9 através 11 abordamos o que chamamos as disciplinas de interseção: Primeiro, em Capítulo 9 exploramos
privacidade, um tema familiar que se refere à maioria dos seis domínios de programas para as nuvens. Então Capítulo 10 leva-nos
ao lado da gestão da segurança do computador: como os planos de gestão para e endereços problemas de segurança
informática. Finalmente, Capítulo 11 explora como as leis e ética nos ajudar a controlar o comportamento do computador.

Nós introduzimos criptografia em Capítulo 2 . Mas o campo da criptografia envolve toda


livros, cursos, conferências, revistas e programas de pós-graduação de estudo. E este livro deve abranger muitos temas
importantes, além de criptografia. Assim, fizemos duas decisões críticas: Primeiro, nós tratamos a criptografia como uma
ferramenta, não como um campo de estudo. Um mecânico de automóvel não estuda o desenho de carros, pesando fatores
como a aerodinâmica, o consumo de combustível, nomeação interior e resistência ao choque; um mecânico aceita um carro
como um dado e aprende a encontrar e corrigir falhas com o motor e outras peças mecânicas. Da mesma forma, queremos
que os nossos leitores a ser capaz de usar criptografia para resolver rapidamente problemas de segurança; portanto, nós
visitar brevemente usos populares de criptografia em Capítulo 2 . A nossa segunda decisão crítica foi explorar a amplitude de
criptografia pouco mais em um capítulo posterior, Capítulo 12 . Mas, como destacamos, livros inteiros foram escritos sobre
criptografia, por isso o nosso capítulo posterior dá uma visão geral do trabalho mais detalhado que os leitores interessados
​podem encontrar em outro lugar.

Nossos desvios capítulo final a quatro áreas com riscos de segurança informática significativa. Estes são avançando
rapidamente tópicos para os quais as questões de segurança de computador são muito mais em andamento no momento. A
chamada Internet das coisas, o conceito de conectar muitos
dispositivos para a Internet, levanta potenciais ameaças de segurança à espera de ser explorado. Economia governar muitas
decisões de segurança, para os profissionais de segurança precisam entender como a economia ea segurança relacionar.
Conveniência é aumentar o interesse no uso de computadores para implementar eleições; os passos fáceis de coleta total de
votos ter sido feito por muitas jurisdições, mas a parte mais difícil de organizar o registo online justo e cédula-casting ter sido
feito em apenas um pequeno número de eleições de demonstração. E o uso de computadores na guerra é uma ameaça
crescente. Mais uma vez, um pequeno número de ataques de tamanho modesto em dispositivos de computação têm
demonstrado a viabilidade deste tipo de campanha, mas os profissionais de segurança e cidadãos comuns precisam entender
o potencial de bons e maus-deste tipo de ataque.

Como Ler este livro


O fundo que você deve ter para apreciar este livro? A única suposição é uma compreensão de sistemas de programação
e informática. Alguém que é uma graduação ou pós-graduação avançada estudante em computação certamente tem esse
pano de fundo, assim como um designer profissional ou desenvolvedor de sistemas de computador. Um usuário que quer
entender mais sobre como os programas de trabalho podem aprender com este livro, também; nós fornecemos a base
necessária em conceitos de sistemas operacionais ou redes, por exemplo, antes de abordar as preocupações de segurança
relacionadas.

Este livro pode ser usado como um livro em um curso de um ou dois semestre em segurança de computadores. As
funções livro igualmente bem como uma referência para um profissional de computador ou como um complemento a um
curso de formação intensiva. E o índice e extensa bibliografia torná-lo útil como um manual para explicar temas e pontos
significativos para artigos-chave na literatura. O livro tem sido usado em aulas de todo o mundo; instrutores muitas vezes
projetar cursos de um semestre que se concentram em temas de especial interesse para os alunos ou que se relacionam
bem com o resto de um currículo.

O que há de novo neste livro

Esta é a quinta edição do Segurança em Computação, publicado pela primeira vez em 1989. Desde então, as específicas
ameaças, vulnerabilidades e controles mudaram, assim como muitas das tecnologias subjacentes a que se aplica a
segurança do computador. No entanto, muitos conceitos básicos permaneceram os mesmos.

Mais óbvio para os leitores familiarizados com as edições anteriores haverá alguns novos capítulos, especificamente,
na interação do usuário na web e computação em nuvem, bem como os temas que criamos no capítulo tópicos
emergentes. Além disso, reunir os três controles fundamentais na Capítulo 2 é uma nova estrutura. Essas são as grandes
mudanças, mas cada capítulo teve muitas mudanças menores, como descrevemos novos ataques ou expandir em pontos
que se tornaram mais importantes.

Uma outra característica alguns podem notar é a adição de um terceiro co-autor. Jonathan Margulies nos une como
membro essencial da equipe que produziu esta revisão. Atualmente, ele é diretor da prática de segurança na Qmulos,
uma prática de consultoria de segurança recém-lançado. Ele traz muitos anos de experiência com o Instituto Nacional de
Padrões e Tecnologia Nacionais Sandia Labs e. Seu foco encaixa perfeitamente com nossas habilidades existentes para
estender a abrangência deste livro.
Agradecimentos
É cada vez mais difícil reconhecer todas as pessoas que influenciaram este livro. Colegas e amigos contribuíram
com o seu conhecimento e discernimento, muitas vezes sem saber o seu impacto. Ao argumentar um ponto ou
compartilhar explicações de conceitos, os nossos associados têm obrigou-nos a questionar ou repensar o que
sabemos.

Agradecemos aos nossos associados em pelo menos duas maneiras. Em primeiro lugar, temos tentado incluir referências a suas
obras escritas. Referências no texto citar documentos específicos relativos a determinados pensamentos ou conceitos, mas a
bibliografia inclui também obras mais amplas que têm desempenhado um papel mais sutil na formação da nossa abordagem à
segurança. Assim, para todos os autores citados, muitos dos quais são amigos e colegas, nós felizmente reconhecer a sua influência
positiva sobre este livro.

Ao invés de indivíduos de nome, nós agradecemos as organizações em que interagiram com estimulantes, e
pessoas criativas, desafiadoras de quem aprendemos muito. Esses locais incluem sistemas de informação, o
Centro de Tecnologia Contel, o Centro de Software Confiabilidade da City University de Londres, Arca Systems,
Exodus Communications, The RAND Corporation, Sandia National Lab, Cable & Wireless, o Instituto Nacional de
Padrões e Tecnologia Trusted, o Instituto de Proteção de Informações Infra-estrutura, Qmulos e do Conselho
Editorial da IEEE Segurança e Privacidade. Se você trabalhou com a gente em qualquer desses locais, as chances
são altas de que sua marca pode ser encontrada neste livro. E para todas as conversas paralelas, debates,
argumentos e momentos de luz, somos gratos.
sobre os autores
Charles P. Pfleeger é um especialista conhecido internacionalmente em segurança informática e
comunicações. Ele foi originalmente um professor da Universidade de Tennessee, deixando lá para juntar-se a
pesquisa de segurança de computadores e empresas confiáveis ​Sistemas de Informação e Sistemas Arca
(posteriores Exodus Communications e Cable e Wireless) consultoria. Com Sistemas de Informação Trusted foi
Diretor de Operações da Europa e Consultor Sênior. Com Cable and Wireless ele era Diretor de Pesquisa e um
membro do pessoal da Segurança Diretor. Ele foi presidente do Comitê Técnico da IEEE Computer Society em
segurança e privacidade.

Shari Lawrence Pfleeger é amplamente conhecido como uma engenharia de software e pesquisador de segurança
informática, mais recentemente como um cientista sênior Computador com o Rand Corporation e como Diretor de
Pesquisa do Instituto de Proteção de Informações Infra-estrutura. Ela é atualmente Editor-in-Chief da IEEE Segurança e
Privacidade revista.

Jonathan Margulies é o CTO da Qmulos, uma empresa de segurança cibernética de consultoria. Depois de receber seu
mestrado em Ciência da Computação pela Universidade de Cornell, o Sr. Margulies passou nove anos no Sandia National
Labs, pesquisa e desenvolvimento de soluções para proteger a segurança nacional e os sistemas de infra-estruturas críticas
contra ameaças persistentes avançadas. Ele então passou a Centro de Segurança Cibernética Nacional do NIST of
Excellence, onde trabalhou com uma variedade de empresas de infraestrutura crítica para criar arquiteturas de segurança
padrão da indústria. Em seu tempo livre, Sr. Margulies edita a secção “segurança nas” de

IEEE Segurança e Privacidade revista.


1. Introdução

Neste capítulo:
• Ameaças, vulnerabilidades e controles
• Confidencialidade, integridade e disponibilidade
• Atacantes e tipos de ataque; método, oportunidade e motivo
• avaliação dos activos

Em 11 de fevereiro de 2013, moradores de Great Falls, Montana recebeu o seguinte aviso em seus televisores [ INF13
]. A transmissão exibido um banner mensagem na parte inferior da tela (como representado na Figura 1-1 ).

FIGURA 1-1 Transmissão de Emergência Atenção

E o seguinte alerta foi transmitido:

[Beep Beep Beep: o padrão de som do governo dos Estados Unidos Sistema de Alerta de
Emergência. O texto a seguir, em seguida, rolado toda a tela:]

autoridades civis em sua área relataram que os corpos dos mortos estão levantando de seus
túmulos e atacar os vivos. Siga as mensagens na tela que serão atualizados como a informação
se torna disponível. Não tente se aproximar ou apreender esses corpos como eles são
considerados extremamente perigosos. Este aviso aplica-se a todas as áreas que recebem esta
transmissão. [Bip sinal acústico]

O sinal de alerta soou autêntica; que tinha o tom pessoas distintas reconhecer para avisos de emergências
graves, como o tempo perigoso ou um desastre natural. E o texto foi exibido em um programa de televisão com
transmissão ao vivo. Por outro lado, os corpos crescentes de seus túmulos parece suspeito.
O que você teria feito?

Apenas quatro pessoas contatou a polícia para a garantia de que o aviso era de fato um hoax. Como você pode imaginar,
milhares no entanto, uma mensagem diferente poderiam ter causado de pessoas para tocar as rodovias que tentam escapar.
(Em 30 de outubro de 1938 Orson Welles realizada uma transmissão de rádio do jogo HG Wells Guerra dos Mundos que fez
causar um pânico menor de pessoas que acreditam que os marcianos haviam desembarcado e foram causando estragos em
Nova Jersey.)

O autor desta farsa foi travado nunca, nem que se tornou claro exatamente como ele foi feito. Provável que alguém foi
capaz de acessar o sistema que alimenta transmissões de emergência para estações de rádio e de televisão locais. Em outras
palavras, um hacker provavelmente quebrou em um sistema de computador.

Você encontrar computadores diariamente em inúmeras situações, muitas vezes em casos em que você está mal ciente de
um computador está envolvido, como o sistema de alerta de emergência para meios de transmissão. Esses computadores
movimentar dinheiro, aviões de controle, saúde monitor, travar portas, ouvir música, edifícios de calor, regular corações,
implantar airbags, votos de registro, comunicação direta, regular o tráfego e fazer centenas de outras coisas que afetam a vida,
saúde, finanças e bem-estar. Na maioria das vezes esses computadores funcionam como deveriam. Mas, ocasionalmente, eles
fazem algo terrivelmente errado, devido a uma falha benigno ou um ataque malicioso.

Este livro é sobre a segurança dos computadores, os seus dados e os dispositivos e objetos a que se referem. Neste
livro você vai aprender alguns dos computadores maneiras pode falhar, ou ser feita a falhar e como se proteger contra essas
falhas. Começamos que o estudo da maneira qualquer bom relatório faz: ao responder as perguntas básicas sobre o que,
quem, porquê e como.

1.1 O que é segurança do computador?

A segurança do computador é a proteção dos itens que você valor, chamado de ativos de um sistema de computador
ou computador. Existem muitos tipos de ativos, hardware envolvendo, software, dados, pessoas, processos, ou
combinações destes. Para determinar o que proteger, é preciso primeiro identificar o que tem valor e para quem.

Um dispositivo de computador (incluindo hardware, componentes adicionados e acessórios) é certamente um trunfo. Porque
a maioria do hardware do computador é bastante inútil sem programas, o software é também um trunfo. Software inclui o
sistema operativo, os utilitários e os manipuladores de dispositivo; aplicações tais como processamento de texto, media players
ou manipuladores de e-mail; e até mesmo programas que você pode ter-se por escrito. Muito hardware e software é da
prateleira, o que significa que está disponível comercialmente (não feitos sob medida para a sua finalidade) e que você pode
facilmente obter uma substituição. A única coisa que faz seu computador único e importante para você é o seu conteúdo: fotos,
músicas, documentos, e-mails, projetos, informações de calendário, ebooks (com suas anotações), informações de contato,
código que você criou, e assim por diante. Assim, itens de dados em um computador são ativos também. Ao contrário da
maioria de hardware e software, os dados podem ser difícil, se não impossível, para recriar ou substituir. Esses ativos são
mostrados em Figura 1-2 .
FIGURA 2/1 Objetos de computador de Valor

Estas três coisas em hardware, software e dados de conter ou expressar as coisas como o projeto para o seu
próximo produto novo, as fotos de sua recente férias, os capítulos de seu novo livro, ou a sequência do genoma
resultante da sua investigação recente. Todas essas coisas representam esforço intelectual ou propriedade, e eles
têm valor que difere de uma pessoa ou organização para outra. É esse valor que os torna ativos dignos de protecção,
e eles são os elementos que queremos proteger. Outros ativos de tais como o acesso aos dados, qualidade de
serviço, os processos, os usuários humanos e conectividade de rede-merecem proteção, também; eles são afetados
ou ativado pelo hardware, software e dados. Assim, na maioria dos casos, protegendo hardware, software e dados
cobre estes outros ativos também.

sistemas de hardware de computador, software e dados têm valor e merecem proteção de


segurança.

Neste livro, a menos que especificamente distinguir entre hardware, software e dados, nos referimos a todos esses
ativos como o sistema de computador, ou às vezes como o computador. E porque os processadores são incorporados em
tantos dispositivos, também precisa pensar sobre essas variações como telefones celulares, marca-passos implantados,
controladores de aquecimento e automóveis. Mesmo que o objetivo principal do dispositivo não está computando,
computador embutido do aparelho pode ser envolvido em incidentes de segurança e representa um ativo dignos de
protecção.

Valores de Ativos

Depois de identificar os ativos para proteger, nós próxima determinar o seu valor. Tomamos decisões valor- baseada
freqüentemente, mesmo quando não estamos conscientes deles. Por exemplo, quando você ir para um mergulho, você pode
deixar uma garrafa de água e uma toalha na praia, mas não a sua carteira ou celular. A diferença relaciona-se com o valor dos
bens.
O valor de um ativo depende perspectiva do proprietário do bem ou do usuário do e pode ser independente do custo
monetário, como mostrado na Figura 1-3 . Sua foto de sua irmã, no valor de apenas alguns centavos em termos de papel e
tinta, pode ter alto valor para você e nenhum valor para o seu companheiro de quarto. Valor outros itens depende do custo
de reposição; alguns dados de computador são difíceis ou impossíveis de substituir. Por exemplo, essa foto de você e seus
amigos em uma festa pode ter custar-lhe nada, mas é inestimável, porque não há outra cópia. Por outro lado, o DVD do seu
filme favorito pode ter custado uma parcela significativa do seu salário para levar para casa, mas você pode comprar outro,
se o DVD for roubado ou danificado. Da mesma forma, o tempo tem influência sobre o valor activo. Por exemplo, o valor dos
planos para a nova linha de produtos da empresa é muito alto, especialmente para os concorrentes. Mas uma vez que o
novo produto é lançado, o valor dos planos cai drasticamente.

FIGURA 3/1 Valores de Ativos

Os valores dos ativos são pessoais, dependente do tempo, e muitas vezes imprecisa. A

vulnerabilidade-Ameaça-Control Paradigma

O objetivo da segurança do computador é proteger bens valiosos. Para estudar diferentes formas de proteção, nós
usamos um quadro que descreve como ativos pode ser prejudicado e como combater ou atenuar esse dano.

UMA vulnerabilidade é uma fraqueza no sistema, por exemplo, em procedimentos, design, ou aplicação, que pode ser
explorado para causar perda ou dano. Por exemplo, um determinado sistema pode ser vulnerável à manipulação não
autorizada de dados, porque o sistema não verifica a identidade do usuário antes de permitir o acesso aos dados.
A vulnerabilidade é uma fraqueza que pode ser explorada para causar danos.

UMA ameaça a um sistema de computação é um conjunto de circunstâncias que tem o potencial de causar perda ou dano.
Para ver a diferença entre uma ameaça e uma vulnerabilidade, considere a ilustração no Figura 1-4 . Aqui, uma parede está
retendo água. A água à esquerda da parede é uma ameaça para o homem à direita da parede: A água pode subir,
transbordando para o homem, ou pode ficar abaixo da altura da parede, fazendo com que a parede ao colapso. Portanto, a
ameaça de dano é o potencial para o homem para se molhar, se machucar ou ser afogado. Por enquanto, a parede está
intacta, então a ameaça para o homem não é realizado.

FIGURA 4/1 Ameaças e vulnerabilidades

A ameaça é um conjunto de circunstâncias que podem causar danos.

No entanto, podemos ver uma pequena rachadura na parede-a vulnerabilidade que ameaça a segurança do homem.
Se a água sobe para ou para além do nível do crack, ele irá explorar a vulnerabilidade e prejudicar o homem.

Há muitas ameaças a um sistema de computador, incluindo aqueles iniciados humanos e por computador iniciadas. Nós
todos experimentamos os resultados de erros involuntários humanos, falhas de projeto de hardware e falhas de software. Mas
os desastres naturais são ameaças, também; eles podem trazer um sistema para baixo quando a sala de informática é
inundado ou o centro de dados cai de um terremoto, por exemplo.

Um ser humano que explora uma vulnerabilidade perpetra uma ataque no sistema. Um ataque também pode ser lançado
por outro sistema, como quando um sistema envia um dilúvio avassalador de mensagens para outro, praticamente fechando a
capacidade do segundo sistema funcione. Infelizmente, temos visto este tipo de ataque com freqüência, como negação de
serviço ataques inundar servidores com mais mensagens do que eles podem lidar. (Vamos dar uma olhada mais de perto
negação de serviço em Capítulo 6 .)

Como podemos resolver esses problemas? Nós usamos um ao controle ou contramedida Como
protecção. Isto é, um controlo é uma acção, o dispositivo, procedimento ou técnica que elimina ou reduz uma
vulnerabilidade. Em Figura 1-4 , O homem está colocando o dedo no buraco, controlando a ameaça de vazamentos de água
até que ele encontra uma solução mais permanente para o problema. Em geral, podemos descrever a relação entre
ameaças, controles e vulnerabilidades, desta forma:

Controles prevenir ameaças de vulnerabilidades de exercício.

UMA ameaça é bloqueado pela ao controle de um vulnerabilidade.

Antes de podermos proteger os ativos, precisamos saber os tipos de danos que temos de protegê-los contra, por isso agora
vamos explorar ameaças aos ativos valiosos.

1,2 Ameaça

Podemos considerar o dano potencial aos ativos de duas maneiras: Primeiro, podemos olhar para o que coisas ruins podem
acontecer a ativos e, segundo, podemos olhar para quem ou o que pode causar ou permitir que essas coisas ruins aconteçam. Estas
duas perspectivas nos permitem determinar como proteger os ativos.

Pense por um momento sobre o que faz seu computador valioso para você. Primeiro, você usá-lo como uma ferramenta
para enviar e receber e-mail, pesquisar na web, escrevendo artigos, e realizar muitas outras tarefas, e você espera que ele
esteja disponível para uso quando quiser. Sem o seu computador dessas tarefas seria mais difícil, se não impossível. Segundo,
você dependem fortemente de integridade do seu computador. Quando você escreve um artigo e salvá-lo, você confia que o
papel irá recarregar exatamente como ele foi salvo. Da mesma forma, você espera que a foto um amigo passa por você em
uma unidade flash aparecerá o mesmo quando você carregá-lo em seu computador como quando você viu isso no computador
do seu amigo. Finalmente, você espera que o aspecto “pessoal” de um computador pessoal para ficar pessoal, ou seja, você
quer para proteger a sua confidencialidade. Por exemplo, deseja enviar suas mensagens de e-mail para ser apenas entre você
e seus destinatários listados; você não quer que eles transmitir para outras pessoas. E quando você escrever um ensaio, você
espera que ninguém pode copiá-lo sem a sua permissão.

Estes três aspectos, confidencialidade, integridade e disponibilidade, fazer seu computador valioso para você. Mas
visto de outra perspectiva, são três maneiras possíveis para torná-lo menos valioso, isto é, para lhe causar dano. Se
alguém rouba o computador, codifica os dados em seu disco, ou olha para os seus arquivos de dados privados, o valor de
seu computador tenha sido diminuída ou seu uso do computador foi prejudicado. Estas características são as duas
propriedades básicas de segurança e os objetos de ameaças de segurança.

Podemos definir essas três propriedades da seguinte maneira.

• disponibilidade: a capacidade de um sistema para garantir que um ativo pode ser usado por qualquer partes
autorizadas

• integridade: a capacidade de um sistema para garantir que um ativo é modificado apenas por pessoas autorizadas

• confidencialidade: a capacidade de um sistema para garantir que um ativo é visto apenas por pessoas
autorizadas
Essas três propriedades, características de segurança sólida, aparecem na literatura tão cedo quanto o ensaio de James P.
Anderson em segurança de computadores [ AND73 ] E reaparecem com frequência em trabalhos de segurança de computadores
recentes mais e discussões. Tomados em conjunto (e rearranjado), as propriedades são chamados a tríade CIA ou o tríade de
segurança. ISO 7498-2 [ ISO89 ] Adiciona a eles mais duas propriedades que são desejáveis, especialmente em redes de
comunicação:

• autenticação: a capacidade de um sistema para confirmar a identidade de um remetente

• nonrepudiation ou prestação de contas: a capacidade de um sistema para confirmar que um remetente não pode de

forma convincente negar ter enviado algo O Departamento de Defesa dos Estados Unidos [ DOD85 ] Acrescenta auditabilidade: a

capacidade de um sistema para rastrear todas as ações relacionadas a um determinado ativo. A tríade CIA constitui uma base para

pensar em segurança. Autenticidade e não-repúdio estender noções de segurança para comunicações de rede e capacidade de

auditoria é importante para estabelecer a responsabilidade individual para a atividade do computador. Neste livro geralmente usamos

a tríade CIA como a nossa taxonomia de segurança para que possamos enquadrar ameaças, vulnerabilidades e controles em termos

das propriedades da CIA afetadas. Destacamos uma dessas outras propriedades quando é relevante para uma ameaça específica

que estamos descrevendo. Por enquanto, vamos nos concentrar em apenas os três elementos da tríade.

CIA tríade: confidencialidade, integridade, disponibilidade

O que pode acontecer para prejudicar a confidencialidade, integridade ou disponibilidade dos ativos de computador? Se um
ladrão rouba o seu computador, você não terá mais acesso, então você tem disponibilidade perdido; Além disso, se o ladrão
olha para as fotos ou documentos armazenados, a sua confidencialidade é comprometida. E se o ladrão muda o conteúdo de
seus arquivos de música, mas depois dá-los de volta com o seu computador, a integridade dos seus dados tenham sido
prejudicados. Você pode imaginar muitos cenários baseados em torno destas três propriedades.

A tríade CIA pode ser visto de uma perspectiva diferente: a natureza do dano causado aos ativos. Danos também pode
ser caracterizado por quatro atos: interceptação, interrupção, modificação, e fabricação. Estes quatro atos estão
representados na Figura 1-5 . Deste ponto de vista, a confidencialidade pode sofrer se alguém interceptar os dados, a
disponibilidade é perdida se alguém ou algo interrompe o fluxo de dados ou acesso a um computador, e integridade pode
falhar se alguém ou alguma coisa modifica dados ou fabrica dados falsos. Pensando destes quatro tipos de atos podem
ajudar a determinar o que as ameaças possam existir contra os computadores que você está tentando proteger.
FIGURA 5/1 Quatro Atos de causar danos Segurança

Para analisar o dano, o próximo refinar a tríade CIA, olhando mais de perto cada um dos seus elementos.

confidencialidade

Algumas coisas, obviamente, precisam de proteção confidencialidade. Por exemplo, as notas dos alunos,
transações financeiras, registros médicos, e declarações fiscais são sensíveis. Um estudante orgulhoso pode
ficar sem uma sala de aula gritando “eu tenho um A!”, Mas o estudante deve ser o único a escolher se a revelar
que grau a outros. Outras coisas, como segredos diplomáticos e militares, planos de marketing e
desenvolvimento de produtos e educadores das empresas testes, também deve ser cuidadosamente controlada.
Às vezes, no entanto, não é tão óbvio que algo está sensível. Por exemplo, uma ordem de alimentos militar pode
parecer informação inócua, mas um súbito aumento na ordem poderia ser um sinal de engajamento incipiente no
conflito. As compras de alimentos, mudanças de horários no local e acesso a livros não são coisas que você
normalmente seria considerar confidenciais,

A definição de confidencialidade é simples: pessoas ou sistemas Só autorizados podem acessar dados protegidos. No
entanto, como podemos ver nos capítulos seguintes, assegurando a confidencialidade pode ser difícil. Por exemplo, quem
determina quais as pessoas ou sistemas estão autorizados a acessar o sistema atual? Por “acesso” de dados, queremos
dizer que um partido autorizado pode acessar um único bit? toda a coleção? pedaços de dados fora do contexto? alguém
que está autorizada pode divulgar dados a outras partes? Às vezes, há mesmo uma questão de quem possui os dados: Se
você visita uma página web, que você possui é o fato de que você clicou em um link, ou faz o proprietário da página web, o
provedor de Internet, alguém, ou todos vocês?

Apesar destes exemplos de complicação, a confidencialidade é a propriedade de segurança entendemos melhor


porque seu significado é mais estreito do que os outros dois. Entendemos, também, confidencialidade bem, porque
podemos relacionar exemplos de computação aos dos
preservando a confidencialidade no mundo real.

Confidencialidade relaciona mais obviamente aos dados, embora possamos pensar a confidencialidade de uma peça
de hardware (a nova invenção) ou uma pessoa (o paradeiro de um criminoso procurado). Aqui estão algumas
propriedades que podem significar uma falha da confidencialidade dos dados:

• Uma pessoa não autorizada acessa um item de dados.

• Um processo ou programa não autorizado acessa um item de dados.

• Uma pessoa autorizada a aceder a determinados dados acessa outros dados não autorizada (que é uma versão
especializada do “uma pessoa não autorizada acessa um item de dados”).

• Uma pessoa não autorizada acessa um valor aproximado dos dados (por exemplo, não saber o salário exato
de alguém, mas sabendo que o salário cai em um determinado intervalo ou excede um determinado montante).

• Uma pessoa não autorizada descobre a existência de um pedaço de dados (por exemplo, sabendo que a
empresa está a desenvolver um determinado produto novo ou que as negociações estão em curso sobre a fusão de
duas empresas).

Observe o padrão geral das demonstrações: Uma pessoa, processo ou programa é (ou não é) autorizado a acessar um
item de dados de uma forma particular. Chamamos a pessoa, processo ou programa de um sujeito, a um item de dados objeto,
o tipo de acesso (como ler, escrever ou executar) um modo de acesso, ea autorização de um política, como mostrado em Figura
1-6 . Esses quatro termos reaparecer ao longo deste livro, porque eles são aspectos fundamentais da segurança do
computador.

FIGURA 6/1 Controle de acesso

Uma palavra que captura a maioria dos aspectos da confidencialidade é Visão, embora você não deve tomar esse termo
literalmente. Uma falha de sigilo não significa necessariamente que alguém
vê um objeto e, de fato, é praticamente impossível olhar para pedaços de forma significativa (embora você pode olhar
para a sua representação como caracteres ou imagens). A visão palavra faz conotar outro aspecto da confidencialidade
na segurança do computador, através da associação com a visualização de um filme ou uma pintura em um museu:
olhe, mas não toque. Em segurança de computadores, confidencialidade normalmente significa obtenção, mas não
modificar. Modificação é o assunto de integridade, que consideramos na próxima seção.

Integridade

Exemplos de falhas de integridade são fáceis de encontrar. Um certo número de anos atrás, uma macro maliciosa em um documento do
Word inserido a palavra “não” depois de alguns casos aleatórios da palavra “é:” você pode imaginar o caos que se seguiu. Porque o
documento era geralmente sintaticamente correto, as pessoas não detectar imediatamente a mudança. Em outro caso, um modelo do chip
de computador Pentium produziu um resultado incorreto em determinadas circunstâncias de aritmética de ponto flutuante. Embora as
circunstâncias de fracasso eram raros, a Intel decidiu fabricar e substituir os chips. Muitos de nós receber e-mail que está misaddressed
porque alguém digitou algo errado ao transcrever a partir de uma lista escrita. A pior situação ocorre quando essa imprecisão é propagado
para outras listas de discussão de tal forma que nunca pode parecer para corrigir a raiz do problema. Outras vezes, descobrimos que uma
planilha parece estar errado, apenas para descobrir que alguém digitou “espaço de 123” em uma célula, transformando-o de um valor
numérico em texto, para que o programa de planilha mal utilizado essa célula em computação. Suponha que alguém convertido os dados
numéricos para algarismos romanos: Alguém poderia argumentar que IV é o mesmo que 4, mas IV não seria útil na maioria das aplicações,
nem seria obviamente significativo para alguém esperam 4 como uma resposta. Estes casos demonstram alguns dos a amplitude de
exemplos de falhas de integridade. nem seria obviamente significativo para alguém esperam 4 como uma resposta. Estes casos
demonstram alguns dos a amplitude de exemplos de falhas de integridade. nem seria obviamente significativo para alguém esperam 4 como
uma resposta. Estes casos demonstram alguns dos a amplitude de exemplos de falhas de integridade.

A integridade é mais difícil de definir do que a confidencialidade. Como Stephen Welke e Terry Mayfield [ WEL90 , MAY91 , NCS9
] Apontam, integridade significa coisas diferentes em contextos diferentes. Quando examinamos a forma como algumas
pessoas usam o termo, encontramos vários significados diferentes. Por exemplo, se dizemos que temos preservada a
integridade de um item, que pode significar que o item é

• preciso
• preciso
• não modificado

• modificada apenas em formas aceitáveis

• modificada somente por pessoas autorizadas

• modificada por processos autorizados


• consistente
• Internamente consistente

• significativa e utilizável

A integridade também pode significar duas ou mais destas propriedades. Welke e Mayfield reconhecer três aspectos
particulares autorizados integridade ações, separação e proteção dos recursos, e detecção e correção de erros. A
integridade pode ser aplicada da mesma maneira que lata confidencialidade: por rigoroso controle de quem ou o que
podem acessar determinados recursos de que forma.
Disponibilidade

o pior pesadelo de um usuário de computador: Você ligar o interruptor e o computador não faz nada. Seus dados e
programas são presumivelmente ainda está lá, mas você não pode chegar a eles. Felizmente, alguns de nós experimentar esse
fracasso. Muitos de nós fazer a experiência de sobrecarga, no entanto: o acesso fica mais lento e mais lento; o computador
responde, mas não de uma forma que consideramos normal ou aceitável.

Disponibilidade aplica-se tanto aos dados e aos serviços (isto é, à informação e ao processamento de informações), e é
semelhante complexa. Tal como acontece com a noção de confidencialidade, pessoas diferentes esperar disponibilidade para
significar coisas diferentes. Por exemplo, um objeto ou serviço é pensado para estar disponível se a seguir forem verdadeiras:

• Encontra-se presente em uma forma utilizável.

• Tem capacidade suficiente para satisfazer as necessidades do serviço.

• Ele está fazendo um progresso claro, e, se estiver no modo de espera, ele tem um tempo de espera limitada.

• O serviço é concluído em um período de tempo aceitável.

Podemos construir uma descrição geral da disponibilidade, combinando essas metas. A seguir estão alguns critérios
para definir a disponibilidade.

• Há uma resposta atempada ao nosso pedido.


• Os recursos são alocados de forma justa para que alguns solicitantes não são favorecidos em detrimento de
outros.

• Simultaneidade é controlado; isto é, o acesso simultâneo, gestão de impasse, e acesso exclusivo são
suportados conforme necessário.

• O serviço ou sistema envolvido segue uma filosofia de tolerância a falhas, segundo o qual hardware ou
software falhas levar à cessação graciosa de serviço ou de soluções alternativas ao invés de falhas e perda
abrupta de informações. (Cessação faz final significam, se é graciosa ou não, em última análise, o sistema
está indisponível No entanto, com aviso justo de parada do sistema, o usuário pode ser capaz de se mover
para outro sistema e continuar o trabalho..)

• O serviço ou sistema pode ser usado facilmente e na forma como foi concebido para ser usado. (Esta é uma
característica de facilidade de utilização, mas um sistema inutilizável também podem causar uma falha de
disponibilidade.)

Como você pode ver, as expectativas de disponibilidade são de longo alcance. Em Figura 1-7 que retratam algumas das
propriedades com as quais a disponibilidade se sobrepõe. De fato, a comunidade de segurança está apenas começando a entender o
que implica disponibilidade e como garantir isso.
Figura 1-7 Disponibilidade e aspectos relacionados

Uma pessoa ou sistema pode fazer três coisas básicas com um item de dados: vê-lo, modificá-lo ou usá-lo. Assim, a visualização
(confidencialidade), modificar (integridade), e usando (disponibilidade) são os modos básicos de acesso que a segurança informática
pretende preservar.

A segurança do computador procura impedir a visualização não autorizada (confidencialidade) ou


modificação (integridade) de dados, preservando o acesso (disponibilidade).

Um paradigma de segurança do computador é controle de acesso: Para implementar uma política, controles de segurança de
computador todos os acessos por todos os sujeitos a todos os objetos protegidos em todos os modos de acesso. Um controle
pequeno, centralizado de acesso é fundamental para preservar a confidencialidade e integridade, mas não é claro que um único
ponto de controle de acesso pode impor disponibilidade. De fato, especialistas em confiabilidade vai notar que os pontos únicos
de controle podem se tornar pontos únicos de falha, tornando mais fácil para um atacante para destruir disponibilidade,
desativando o único ponto de controle. Muito do sucesso do passado de segurança do computador tem incidido sobre
confidencialidade e integridade; Existem modelos de confidencialidade e integridade, por exemplo, ver David Bell e Leonard La
Padula [ BEL73 , BEL76 ] E Kenneth Biba [ BIB77 ]. Disponibilidade é o próximo grande desafio de segurança.

Que acabamos de descrever a CIA tríade e as três propriedades fundamentais de segurança que ele representa. Nossa
descrição dessas propriedades foi no contexto de coisas que precisam de proteção. Para motivar o seu entendimento que
deu alguns exemplos de danos e ameaças de causar danos. Nosso próximo passo é pensar sobre a natureza das próprias
ameaças.

Tipos de ameaças

Para algumas idéias de danos, olhar Figura 1-8 , Tirado do relatório da Willis Ware [ WAR70 ].
Apesar de ter sido escrito quando os computadores eram tão grandes, tão caro e tão difícil de operar que apenas
grandes organizações como universidades, grandes empresas ou departamentos governamentais teria um, a
discussão de Ware ainda é instrutivo hoje. Ware estava preocupado principalmente com a proteção de dados
classificados, isto é, preservando
confidencialidade. Na figura, ele retrata seres humanos, tais como programadores e pessoal de manutenção tenham acesso aos
dados, bem como a radiação pelo qual os dados podem escapar como sinais. A partir da figura você pode ver alguns dos muitos tipos
de ameaças a um sistema de computador.

FIGURA 8/1 Computador [Network] Vulnerabilidades (a partir de [ WAR70 ]) Uma forma de analisar o dano é

considerar a causa ou origem. Chamamos uma causa potencial de dano a ameaça. Dano pode ser causado por qualquer

eventos não-humanos ou humanos. Exemplos de


ameaças não-humanos incluem desastres naturais, como incêndios ou inundações; perda de potência eléctrica; falha de um
componente, tal como um cabo de comunicações, chip do processador, ou unidade de disco; ou ataque por um javali.

Ameaças são causados ​tanto por fontes humanas e de outros. ameaças humanas pode ser benigno

(nonmalicious) ou maliciosos. Nonmalicious tipos de danos incluem alguém acidentalmente derramando um refrigerante em

um laptop, apagar acidentalmente texto, inadvertidamente, enviando uma mensagem de e-mail para a pessoa errada, e

descuidadamente digitando “12” em vez de “21” ao introduzir um número de telefone ou clicar em “sim” em vez do “não” para

sobrescrever um arquivo. Estes inadvertidas, erros humanos acontecem a maioria das pessoas; só esperamos que a

gravidade do dano não é muito grande, ou se é, que não vamos repetir o erro.

As ameaças podem ser malicioso ou não.

A maioria de atividade de segurança de computadores se refere a malicioso, dano causado pelo homem: UMA
pessoa mal intencionada realmente quer causar danos, e por isso muitas vezes usamos o termo ataque para um evento de segurança de
computador malicioso. ataques maliciosos pode ser aleatória ou dirigida. Em um
ataque aleatório o atacante quer prejudicar qualquer computador ou usuário; tal ataque é análogo ao abordando a
próxima pedestre que caminha pela rua. Um exemplo de um ataque aleatório é código malicioso publicado em um site
que pode ser visitado por qualquer pessoa.

Em um ataque dirigido, o atacante pretende danos a computadores específicos, talvez em uma organização (pense
em ataques contra uma organização política) ou pertencentes a um indivíduo específico (pensar em tentar drenar conta
bancária de uma pessoa específica, por exemplo, por roubo de identidade). Outra classe de ataque dirigido é contra um
determinado produto, como qualquer computador com um navegador específico. (Nós não queremos dividir os cabelos
sobre se tal ataque é dirigido-a esse produto, ou um software aleatório, contra qualquer usuário desse produto, o ponto
não é a perfeição semântica, mas proteger contra os ataques.) A gama de possíveis dirigidos ataques é praticamente
ilimitado. Diferentes tipos de ameaças são mostrados na Figura 1-9 .

Figura 1-9 Tipos de ameaças

Ameaças podem ser direcionados ou aleatória.

Embora as distinções indicadas no Figura 1-9 parece clara, às vezes a natureza de um ataque não é óbvio até que o
ataque está bem encaminhado, ou talvez até mesmo terminou. A falha de hardware normal pode parecer, um ataque
malicioso direcionado para negar o acesso, e os hackers muitas vezes tentam esconder a sua actividade para se parecer
com os usuários comuns, autorizadas. Como especialistas em segurança informática precisamos antecipar o que coisas
ruins pode acontecer, em vez de esperar o ataque acontecer ou debatendo se o ataque é intencional ou acidental.
Nem este livro nem qualquer lista ou método pode mostrar-lhe todos os tipos de danos que podem acontecer com
ativos de computador. Há muitas maneiras de interferir com o uso desses ativos. Duas listas retrospectivas de conhecido vulnerab
são de interesse, no entanto. Common Vulnerabilities and Exposures lista (CVE) (ver http://cve.mitre.org/ ) É um dicionário
de vulnerabilidades de segurança conhecidas publicamente e exposições. identificadores comuns do CVE permitir a troca
de dados entre os produtos de segurança e fornecer um ponto de índice de linha de base para avaliar a cobertura de
ferramentas e serviços de segurança. Para medir a extensão do dano,

a Comum Vulnerabilidade Pontuação Sistema (CVSS) (Vejo


http://nvd.nist.gov/cvss.cfm ) Fornece um sistema de medição do padrão de pontuação que permite precisa e consistente
de impacto vulnerabilidade.

Ameaça persistente avançada

Especialistas em segurança estão cada vez mais preocupados com um tipo de ameaça chamada
Ameaça persistente avançada. Um atacante solitário pode criar um ataque aleatório que armadilhas alguns, ou alguns
milhões, os indivíduos, mas o impacto resultante é limitado ao que esse único atacante pode organizar e gerenciar. Uma
coleção de atacantes-pensar, por exemplo, do equivalente cibernético de uma gangue de rua ou um crime organizado
esquadrão-pode trabalhar em conjunto para roubar números de cartão de crédito ou ativos financeiros semelhantes para
financiar outras actividades ilegais. Tais atacantes tendem a ser oportunista, pegando bolsos das vítimas infelizes e passar para
outras atividades.

ataques avançados persistente ameaça vem de organizados, bem financiados, assaltantes paciente. Muitas vezes afiliado
com governos ou grupos quase-governamental, esses atacantes se envolver em campanhas de longo prazo. Eles selecionar
cuidadosamente seus alvos, a elaboração de ataques que apelar para especificamente essas metas; mensagens de e-mail
chamado spear phishing (descrito no Capítulo 4 ) Têm a intenção de seduzir os seus destinatários. Normalmente, os ataques
estão em silêncio, evitando qualquer impacto óbvio que iria alertar uma vítima, permitindo assim que o invasor explorar os
direitos de acesso da vítima durante um longo tempo.

O motivo de tais ataques é, por vezes, pouco claras. Um dos objectivos popular é espionagem económica. Uma
série de ataques, aparentemente organizados e apoiados pelo governo chinês, foi usado em 2012 e 2013 para
obter projetos de produtos de empresas aeroespaciais nos Estados Unidos. Há evidência o topo do código de
ataque foi carregado em máquinas da vítima longo antes do ataque; em seguida, os atacantes instalado o código
mais complexo e extraiu-se os dados desejados. Em maio de 2014, o Departamento de Justiça indiciou cinco
hackers chineses à revelia por esses ataques.

No verão de 2014 uma série de ataques contra a JP Morgan Chase banco e até uma dúzia de instituições financeiras
semelhantes permitiu que os assaltantes acesso a 76 milhões de nomes, números de telefone e endereços de e-mail. Os
atacantes-e até mesmo seu país de origem- permanecem desconhecidos, assim como o motivo. Talvez os atacantes
queriam dados financeiros mais sensíveis, tais como números de contas ou senhas, mas só foram capazes de obter as
informações de contato menos valioso. Também não se sabe se este ataque estava relacionado com um ataque um ano
antes que interrompeu o serviço para que o banco e vários outros.

Para imaginar a paisagem cheia de possíveis ataques, você pode achar que é útil considerar os tipos de pessoas que
atacam sistemas de computador. Embora potencialmente qualquer um é um atacante, certas classes de pessoas se
destacam por causa de suas origens ou objetivos. Assim, no
seguinte seções olhamos para perfis de algumas classes de atacantes.

Tipos de atacantes

Quem são os agressores? Como vimos, as suas motivações variam de chance de um alvo específico. Deixando
de lado os ataques de causas naturais e benignos, podemos explorar quem os atacantes são eo que os motiva.

A maioria dos estudos de atacantes realmente analisar os criminosos de computador, isto é, as pessoas que
foram efectivamente condenados por um crime, principalmente porque esse grupo é fácil identificar e estudar. Os
que fugiram ou que realizou um ataque sem ser detectado podem ter características diferentes das dos criminosos
que foram capturados. Pior, estudando única os criminosos que têm travado, nós não podemos aprender a pegar
atacantes que sabem como abusar do sistema sem ser apreendido.

O que faz um olhar criminoso cibernético como? Na televisão e filmes os vilões usava roupas surradas, parecia média
e sinistro, e viviam em bandos em algum lugar fora da cidade. Por outro lado, o xerife vestido bem, ficou orgulhoso e alto,
era conhecido e respeitado por todos na cidade, e colocava medo nos corações da maioria dos criminosos.

Para ter certeza, alguns criminosos de computador são os tipos médios e sinistros. Mas muitos mais ternos de negócio
desgaste, têm formação universitária, e parecem ser pilares de suas comunidades. Alguns são escolares ou estudantes
universitários elevados. Outros são executivos de negócios de meia-idade. Alguns são mentalmente perturbado, abertamente
hostil, ou extremamente comprometido com uma causa, e eles atacam computadores como um símbolo. Outros são pessoas
comuns tentado por lucro pessoal, vingança, desafio, avanço, ou de emprego autores de qualquer crime segurança semelhante,
utilizando um computador ou não. Os investigadores têm tentado encontrar os traços psicológicos que distinguem atacantes,
conforme descrito no Sidebar 1-1 . Estes estudos estão longe de ser conclusiva, no entanto, e os traços que identificam pode
mostrar correlação mas não necessariamente causalidade. Para apreciar este ponto, suponha que um estudo descobriu que um
número desproporcional de pessoas condenadas por crime de computador eram canhotos. Será que esse resultado implica que
todas as pessoas canhotas são criminosos de computador ou que as pessoas só canhotos são? Certamente não. Nenhum perfil
único capta as características de um “típico” atacante computador, e as características de alguns atacantes notórios também
coincidir com muitas pessoas que não são atacantes. Como mostrado em

A Figura 1-10 , Os atacantes olhar apenas como alguém em uma multidão.


FIGURA 1-10 atacantes

Ninguém padrão corresponde a todos os atacantes.

Perfil psicológico de Sidebar 1-1 um atacante?


Temple Grandin, professor de ciência animal da Universidade Estadual do Colorado e um sofredor de um
transtorno mental chamada síndrome de Asperger (AS), acha que Kevin Mitnick e vários outros hackers
amplamente descritos mostram sintomas clássicos da síndrome de Asperger. Embora rápidos em apontar
que nenhuma investigação estabeleceu uma ligação entre AS e hacking, Grandin observa traços de
comportamento semelhantes entre Mitnick, ela mesma, e outras que sofrem. Um artigo no EUA hoje

(29 de Março 2001) lista o seguinte como traços:

• habilidades sociais pobres, muitas vezes associados a ser solitários durante a infância; o clássico “nerd de
computador”

• inquietação, agitação, incapacidade de fazer contato com os olhos, a falta de resposta a estímulos na
interação social, tais como expressões faciais ou a linguagem corporal

• excepcional capacidade de lembrar longas seqüências de números

• capacidade de se concentrar em um problema técnico intensamente e por um longo tempo, embora facilmente
distraídos em outros problemas e incapaz de gerenciar várias tarefas ao mesmo tempo

• honestidade profunda e respeito às leis Donn Parker [ PAR98 ] Estudou pirataria e crime
computador para muitos
anos. Ele afirma que “hackers são caracterizadas por um imaturo, atitude excessivamente
idealista ... Eles se deleitam em se apresentar para a mídia como benfeitores idealistas,
campeões do underdog”.
Considere o seguinte trecho de uma entrevista [ SHA00 ] Com o “Mixter,” o programador alemão
que admitiu que foi o autor de uma peça generalizada de software ataque chamado Tribal Flood
Network (TFN) e sua TFN2K sequela:
Q: Por que você escreveu o software?

UMA: Eu primeiro ouvi falar Trin00 [outro pedaço de software ataque] em julho '99 e eu considerava tão
interessante do ponto de vista técnico, mas também potencialmente poderoso de uma forma negativa.
Eu sabia alguns fatos de como Trin00 funcionou, e desde que eu não conseguir ter fontes Trin00 ou
binários, nesse momento, eu escrevi minha própria rede cliente-servidor que foi capaz de realizar
negação de serviço.

Q: você estava envolvido ... em qualquer um dos recentes ataques de alto perfil?

UMA: Não. O fato de que eu fui o autor dessas ferramentas é que, de modo algum significa que eu tolerar seu
uso ativo. Devo admitir que fiquei bastante chocado ao ouvir sobre os últimos ataques. Parece que os atacantes
são pessoas muito à nora que abusam recursos poderosos e ferramentas para atividades geralmente
prejudiciais e sem sentido apenas “porque eles podem.”

Observe que a partir de algumas informações sobre ataques de negação de serviço, ele escreveu sua própria rede
cliente-servidor e, em seguida, um ataque sofisticado. Mas ele estava “muito chocado” ao ouvir eles foram usados ​para o
mal.

Mais pesquisas são necessárias antes que possamos definir o perfil de um hacker. E ainda mais trabalho
será necessário para estender esse perfil para o perfil de um atacante (malicioso). Nem todos os hackers se
tornam agressores; alguns hackers se tornam especialistas administradores de sistemas, desenvolvedores, ou
de segurança extremamente dedicados e conscienciosos. Mas alguns psicólogos ver em AS os rudimentos do
perfil de um hacker.

indivíduos

Originalmente, os atacantes de computador eram os indivíduos, agindo com motivos de diversão, desafio, ou
vingança. atacantes primeiros agiu sozinho. Dois dos mais conhecidos entre eles estão Robert Morris Jr., o estudante de
graduação da Universidade de Cornell, que derrubou a Internet em 1988 [ SPA89 ], E Kevin Mitnick, o homem que invadiu
e roubou dados de dezenas de computadores, incluindo o Centro de Supercomputação de San Diego [ MAR95 ].

Organizados, grupos mundiais

ataques mais recentes têm grupos envolvidos de pessoas. Um ataque contra o governo do país de Estónia
(descritos em mais detalhes em Capítulo 13 ) Se acredita ter sido uma explosão descoordenada de uma
federação de atacantes de todo o mundo. Kevin Poulsen [ POU05 ] Cita Tim Rosenberg, professor e
pesquisador da Universidade George Washington, aviso de “grupos multinacionais de hackers apoiados pelo
crime organizado” e mostrando a sofisticação de mafiosos Proibição-era. Ele também informa que Christopher
Painter, vice-diretor do Departamento de criminalidade informática da Justiça dos EUA
seção, argumenta que os criminosos cibernéticos e artistas sérios de fraude estão cada vez mais trabalhando em conjunto
ou são uma ea mesma. De acordo com o Painter, grupos de criminosos vagamente conectados em todo o mundo trabalham
juntos para invadir sistemas e roubar e vender informação, tais como números de cartão de crédito. Por exemplo, em
outubro de 2004, as autoridades dos EUA e Canadá prendeu 28 pessoas de 6 países envolvidos, um anel de cibercrime
internacional organizado para comprar e vender informações de cartão de crédito e identidades.

Considerando motivos iniciais para os atacantes do computador, como Morris e Mitnick eram pessoais, tais como prestígio
ou realização, ataques recentes têm sido fortemente influenciado pelo ganho financeiro. A empresa de segurança McAfee
relata “Os criminosos perceberam as enormes ganhos financeiros a serem feitas a partir da Internet com pouco risco. Eles
trazem as habilidades, conhecimentos e conexões necessárias para a grande escala, de alto valor empreendimento criminoso
que, quando combinado com conhecimentos de informática, expandir o escopo e risco do cibercrime.”[ MCA05 ]

Crime organizado

objetivos dos atacantes incluem fraude, extorsão, lavagem de dinheiro e tráfico de drogas, áreas em que o crime
organizado tem uma presença bem estabelecida. Evidência crescente de que grupos de crime organizado estão envolvidos
em crime computador. De fato, os criminosos tradicionais estão recrutando hackers para participar do lucrativo mundo do
cibercrime. Por exemplo, Albert Gonzales foi condenado em março de 2010 a 20 anos de prisão para trabalhar com um anel
de crime para roubar 40 milhões de números de cartão de crédito do varejista TJMaxx e outros, custando mais de US $ 200
milhões ( Reuters, 26 mar 2010).

O crime organizado pode usar criminalidade informática (como números de cartão de crédito roubo ou detalhes de
contas bancárias) para financiar outros aspectos do crime. Ataques recentes sugerem que os criminosos profissionais
descobriram o quão lucrativo o crime informático pode ser. Mike Danseglio, um gerente de projeto de segurança com a
Microsoft, disse: “Em 2006, os atacantes querem pagar o aluguel. Eles não querem escrever um verme que destrói o seu
hardware. Eles querem assimilar seus computadores e usá-los para ganhar dinheiro.”[ NAR06a ] Mikko Hyppönen, diretor de
pesquisa com a empresa de segurança finlandesa F-Secure, concorda ataques de hoje muitas vezes vêm de Rússia, Ásia
e Brasil; o motivo é agora o lucro, não a fama [ BRA06 ]. Ken Dunham, diretor da equipe de resposta rápida para a VeriSign
diz que está “convencido de que grupos de mafiosos bem organizados tomaram o controle de uma rede de crime de
bilhões de dólares mundial alimentado por hackers habilidosos.” [ NAR06b ]

Grupos do crime organizado estão descobrindo que o crime informático pode ser lucrativo.

A McAfee também descreve o caso de um aluguer de hackers para-: um empresário que contratou um hacker de 16 anos de
idade, New Jersey para atacar os sites de seus concorrentes. O hacker barraged o site por um período de cinco meses e
danificado não só as empresas-alvo, mas também seus fornecedores de serviços de Internet (ISPs) e outras empresas
independentes que usaram os mesmos ISPs. Pelas estimativas do FBI, os ataques custar todas as empresas mais de US $ 2
milhões; o FBI prendeu dois hackers e empresário em Março de 2005 [ MCA05 ].

Brian neve [ SNO05 ] Observa que os hackers querem uma pontuação ou algum tipo de evidência para dar-lhes direito de
se gabar. O crime organizado quer um recurso; tais criminosos querem permanecer sob o radar de ser capaz de extrair
lucro do sistema ao longo do tempo. estes diferentes
objetivos levar a diferentes abordagens para a criminalidade informática: O hacker iniciante pode usar um ataque de bruto,
enquanto o atacante profissional quer um método limpo, robusto e indetectável que pode oferecer recompensas por um longo
tempo.

terroristas

A ligação entre a segurança do computador e do terrorismo é bastante evidente. Vemos terroristas que usam computadores de quatro
maneiras:

• Computador como alvo de ataque: ataques de negação de serviço e invasões de sites são atividades
populares para qualquer organização política porque eles atraem a atenção para a causa e trazer a
atenção negativa indesejada para o objeto do ataque. Um exemplo é o ataque maciço de negação de
serviço foi lançado contra o país da Estónia, detalhada no Capítulo 13 .

• Computador como método de ataque: Lançar ataques ofensivos requer o uso de computadores. Stuxnet, um
exemplo de um código de computador chamado malicioso um sem-fim, é conhecido para atacar os sistemas de
controlo automatizado, especificamente um modelo de sistema de controlo fabricados pela Siemens. Especialistas
dizem que o código é projetado para desativar máquinas utilizadas no controle de reatores nucleares no Irã [ Mar10 ].
As pessoas por trás do ataque são desconhecidas, mas acredita-se que a infecção se espalhar através de drives
flash USB trazidas pelos engenheiros mantendo os controladores de computador. (Examinamos o worm Stuxnet em
mais detalhes em capítulos 6 e 13 .)

• Computador como facilitador de ataque: Sites, web logs e listas de e-mail são formas eficazes, rápidos e de
baixo custo para permitir que muitas pessoas para coordenar. De acordo com o Conselho de Relações Exteriores,
os terroristas responsáveis ​pelo ataque novembro 2008, que matou mais de 200 pessoas em Mumbai utilizados
sistemas de GPS para guiar seus barcos, Blackberries para sua comunicação, e Google Earth para traçar suas
rotas.

• Computador como potenciador de ataque: A Internet provou ser um meio inestimável para terroristas para
espalhar agentes de propaganda e recrutar. Em outubro de 2009 o FBI prendeu Colleen LaRose, também
conhecida como JihadJane, depois de ter passado meses usando e-mail, YouTube, MySpace, e mensagem
eletrônica placas de recrutar radicais na Europa e na Ásia do Sul a “jihad violenta”, de acordo com uma
acusação federal .

Não podemos medir com precisão o grau em que os terroristas utilizam computadores, porque os terroristas manter
em segredo a natureza de suas atividades e porque nossas definições e ferramentas de medição são bastante fracos.
Ainda, incidentes como o descrito em barra lateral 2/1
fornecem evidências de que todos os quatro destas actividades estão aumentando.

Sidebar 1-2 os terroristas, Inc., Departamento de TI

Em 2001, um repórter do Wall Street Journal comprou um computador usado no Afeganistão. Para
sua surpresa, descobriu que o disco rígido continha o que parecia ser arquivos de um agente da Al
Qaeda. O repórter, Alan Cullison [ CUL04 ], Relata que ele virou o computador para o FBI. Em sua
história publicada em 2004, em O Atlantico, ele cuidadosamente evita revelar qualquer coisa que ele
pensa pode ser sensível.
O disco continha mais de 1.000 documentos, muitos deles criptografados com criptografia relativamente
fraca. Cullison encontrada projectos de planos de missão e white papers que estabelecem argumentos
ideológicos e filosóficos para os ataques de 11 de setembro de 2001. Também foram encontrados exemplares
de notícias sobre atividades terroristas. Alguns dos documentos encontrados indicaram que a Al Qaeda não
estava originalmente interessado em armas químicas, biológicas ou nucleares, mas tornou-se interessado
depois de ler artigos de notícias pública acusando al Qaeda de ter essas capacidades.

Talvez o mais inesperado eram mensagens de e-mail do tipo seria encontrar em um escritório típico:
recomendações para promoções, justificações para despesas de fundo de maneio e argumentos relativos
orçamentos.

O computador parece ter sido usado pela Al Qaeda de 1999 a 2001. Cullison observa que o Afeganistão
no final de 2001 era uma cena de caos, e é provável que o dono do laptop fugiram rapidamente, deixando
o computador para trás, onde caiu nas mãos de um comerciante de bens de segunda mão que não sabia
que o seu conteúdo.

Mas o conteúdo deste computador ilustrar um aspecto importante da segurança do computador e


confidencialidade: Nós nunca pode prever o momento em que um desastre de segurança vai atacar, e, portanto,
devemos sempre estar preparados para agir imediatamente se ele de repente acontece.

Se alguém na televisão espirra, você não se preocupar com a possibilidade de pegar um resfriado. Mas se alguém de pé
ao lado de você espirra, você pode tornar-se em causa. Na próxima seção vamos examinar o dano que pode vir da
presença de uma ameaça à segurança do computador em seus próprios sistemas de computador.

1.3 Harm
A consequência negativa de uma ameaça é actualizada prejuízo; nos proteger contra ameaças de forma a reduzir ou
eliminar danos. Já descrevemos muitos exemplos de danos computador: um computador roubado, modificado ou perdido
arquivo, revelou carta particular, ou negado o acesso aos dados. Estes eventos causar danos que queremos evitar.

Em nossa discussão anterior dos ativos, observamos que o valor depende proprietário ou percepção
de fora e precisam. Alguns aspectos do valor são imensuráveis, como o valor do papel que você precisa
se submeter a seu professor de amanhã; se você perder o papel (isto é, se a sua disponibilidade está
perdido), nenhuma quantia de dinheiro vai compensá-lo por isso. Itens em que você colocar pouco ou
nenhum valor pode ser mais valioso para outra pessoa; por exemplo, a fotografia de grupo tirada na festa
de ontem à noite pode revelar que o seu amigo não estava onde ele disse à esposa que ele seria.
Embora possa ser difícil atribuir um número específico como o valor de um ativo, normalmente você pode
atribuir um valor em uma escala genérica, tais como moderada ou minúscula ou incrivelmente alto,
dependendo do grau de dano que a perda ou dano ao objeto causaria.

Em seu relatório ameaça 2.010 Internet global, a empresa de segurança Symantec pesquisados ​os tipos de produtos e serviços
oferecidos para venda em páginas da web subterrâneas. O item mais freqüentemente oferecidos em 2009 e 2008 foi de números
de cartão de crédito, a preços que variam de US $ 0,85 a US $ 30,00 cada. (Compare esses preços ao esforço de um indivíduo
para lidar com o efeito de uma
roubados cartão de crédito ou o montante potencial perdido pelo banco emissor) Em segundo lugar mais frequente foi credenciais de
contas bancárias, de US $ 15 a US $ 850.; estes foram oferecidos para a venda em 19% dos sites em ambos os anos. contas de
email foram próximo a US $ 1 a US $ 20, e listas de endereços de e-mail passou para US $ 1,70 a US $ 15,00 por mil. Na posição 10
em 2009 foram as credenciais de administração site, custando apenas US $ 2 a US $ 30. Estes sites do mercado negro demonstrar
que o preço dos bens de informática mercado pode ser dramaticamente diferente de seu valor para legítimos proprietários.

O valor de muitos ativos pode mudar ao longo do tempo, de modo que o grau de dano (e, portanto, a gravidade de uma
ameaça) pode mudar também. Com tempo ilimitado, dinheiro e capacidade, podemos tentar proteger contra todos os tipos
de danos. Mas porque os nossos recursos são limitados, devemos priorizar a nossa protecção, salvaguarda só contra
ameaças graves e aqueles que podemos controlar. Escolhendo as ameaças que tentam mitigar envolve um processo
chamado gerenciamento de riscos, e inclui pesando a gravidade de uma ameaça contra a nossa capacidade de proteger.

gestão de riscos envolve escolha de quais ameaças para controlar e que recursos

para se dedicar a proteção. Risco e bom senso

O número e os tipos de ameaças são praticamente ilimitadas, porque elaboração de um ataque requer uma ativa
imaginação, determinação, persistência e tempo (assim como o acesso e recursos). A natureza eo número de ameaças
no mundo da informática refletir a vida em geral: As causas do mal são ilimitadas e em grande parte imprevisível.
desastres naturais como vulcões e terremotos acontecem com pouco ou nenhum aviso, assim como acidentes de
carro, ataques cardíacos, gripe e atos de violência. Para se proteger contra acidentes ou a gripe, você pode optar por
ficar em casa, nunca se aventurando fora. Mas ao fazer isso, você troca um conjunto de riscos para o outro; enquanto
você está dentro, você está vulnerável a construção de colapso. Há muitas causas possíveis de danos a nós mesmos,
ou o nosso Computadores- proteger completamente contra todos eles.

Na vida real tomamos decisões todos os dias sobre a melhor maneira para fornecer a nossa segurança. Por exemplo,
embora possamos optar por viver em uma área que não é propensa a terremotos, não podemos eliminar totalmente o risco
sísmico. Algumas escolhas são conscientes, como decidir não andar por um beco escuro em um bairro inseguro; outras
vezes o nosso subconsciente nos guia, a partir da experiência ou conhecimento, para tomar alguma precaução. Nós
avaliamos a probabilidade e gravidade do dano, e, em seguida, considerar formas (chamadas de contramedidas ou
controles) para enfrentar ameaças e determinar a eficácia dos controles.

A segurança do computador é semelhante. Porque não podemos proteger contra tudo, priorizamos: Só tanto tempo, energia
ou dinheiro está disponível para a proteção, de modo que abordar alguns riscos e deixar que os outros deslizar. Ou podemos
considerar cursos de ação alternativos, tais como a transferência de risco através da compra de seguro ou mesmo não fazer
nada se os efeitos colaterais da medida preventiva poderia ser pior do que o possível prejuízo. O risco que permanece
descoberto por controles é chamado risco residual.

Um modelo básico de gestão de riscos envolve um usuário de cálculo do valor de todos os ativos, a determinação da
quantidade de danos de todas as ameaças possíveis, computando os custos de
proteção, selecionando salvaguardas (ou seja, controles ou contramedidas) com base no grau de risco e com recursos
limitados, e aplicar as salvaguardas para otimizar mal evitado. Esta abordagem para a gestão de riscos é uma abordagem
lógica e sensata de protecção, mas tem desvantagens significativas. Na realidade, é difícil avaliar o valor de cada ativo;
como vimos, o valor pode mudar dependendo do contexto, tempo e uma série de outras características. Ainda mais difícil
é determinar o impacto de todas as ameaças possíveis. A gama de possíveis ameaças é efetivamente ilimitado, e é difícil
(se não impossível em algumas situações) para conhecer os de curto e longo prazo impactos de uma ação. Por exemplo, Barra
lateral 1- 3 descreve um estudo sobre o impacto das violações de segurança ao longo do tempo em finanças corporativas,
mostrando que a ameaça deve ser avaliada ao longo do tempo, e não apenas em uma única instância.

Sidebar 1-3 de curto e longo prazo os riscos de violações de segurança

foi longa assumido que violações de segurança seria ruim para os negócios: que os clientes, com medo de
perder seus dados, seria desviar as empresas inseguras e para outros mais seguros. Mas estudos
empíricos sugerem que o quadro é mais complicado. Os primeiros estudos sobre os efeitos de falhas de
segurança, tais como a de Campbell [ CAM03 ], Examinou os efeitos de violações no preço das ações. Eles
descobriram que o impacto de uma violação pode depender da natureza da própria infracção; os efeitos
foram maiores quando a violação envolver o acesso não autorizado a dados confidenciais. Cavusoglu et al.
[ CAV04 ] Descobriram que uma brecha afeta o valor não só da empresa enfrentando a violação, mas
também de empresas de segurança: Em média, as empresas violaram perdeu 2,1 por cento do valor de
mercado dentro de dois dias de divulgação da violação, mas os desenvolvedores de segurança mercado

valor efetivamente aumentou 1,36 por cento. Myung Ko e Carlos Dorantes [ KO06 ] Analisaram os efeitos
financeiros de longo prazo de violações anunciadas publicamente. Com base na Campbell et al. estudo, eles
examinaram os dados para quatro trimestres seguintes ao anúncio de acesso não autorizado a dados
confidenciais. Ko e Dorantes notar muitos tipos de possíveis custos relacionados com o incumprimento:

“Exemplos de custos de curto prazo incluem o custo dos reparos, o custo de substituição do sistema, perda de negócios devido à
interrupção das operações de negócios e perda de produtividade dos funcionários. Estes também são considerados custos tangíveis.
Por outro lado, os custos de longo prazo incluem a perda de clientes existentes, devido à perda de confiança, deixando de atrair
potenciais futuros clientes devido à reputação negativa da violação, perda de parceiros de negócios devido à perda de confiança e
responsabilidades legais potenciais de a violação. A maioria destes custos são os custos intangíveis que são difíceis de calcular, mas
extremamente importante para avaliar os custos globais de violação de segurança para a organização “.

Ko e Dorantes compararam dois grupos de empresas: um conjunto (o grupo de tratamento) com as violações
de dados, e o outro (o grupo de controlo) sem uma violação mas pareados por tamanho e da indústria. Seus
resultados foram surpreendentes. Ao contrário do que se poderia supor, as empresas violaram tinha nenhuma
diminuição no desempenho para os trimestres seguintes a violação, mas seu retorno sobre os ativos diminuiu no
terceiro trimestre. A comparação do tratamento com empresas de controle revelaram que as empresas de
controle geralmente superaram as empresas violado. No entanto, as empresas violaram superou as empresas
de controle no quarto trimestre.

Estes resultados estão em consonância com os resultados de outros pesquisadores que concluem
que há menor impacto econômico de longo prazo a partir de uma violação de segurança. Há muitas razões por
que isso acontece. Por exemplo, os clientes podem pensar que todas as empresas concorrentes têm as
mesmas vulnerabilidades e ameaças, de modo a mudar para outro fornecedor não reduz o risco. Outra
possível explicação pode ser uma percepção de que uma empresa violou tem melhor segurança, já que a
violação obriga a empresa a reforçar os controlos e, assim, reduzir a probabilidade de violações semelhantes.
No entanto, uma outra explicação pode ser simplesmente curto espaço atenção dos clientes; com o passar do
tempo, os clientes esquecer a violação e voltar ao business as usual.

Todos estes estudos têm limitações, incluindo amostras de pequenas dimensões e à falta de dados
suficientes. Mas eles demonstram claramente as dificuldades de quantificar e verificar os impactos de riscos de
segurança, e apontar uma diferença entre os efeitos de curto e longo prazo.

Embora não devemos aplicar proteção ao acaso, que necessariamente vai proteger contra ameaças que
consideramos mais provável ou mais prejudicial. Por esta razão, é essencial para compreender a forma como
percebemos ameaças e avaliar a sua provável ocorrência e impacto.
barra lateral 4/1 resume algumas das pesquisas relevantes na percepção de risco e tomada de decisões. Essa pesquisa sugere
que, para os casos relativamente raros, como os problemas de segurança de alto impacto, é preciso levar em conta as maneiras
pelas quais as pessoas se concentram mais sobre o impacto do que sobre a probabilidade real de ocorrência.

Sidebar 1-4 Percepção do Risco de Eventos Extremos


Quando um tipo de evento adverso acontece com freqüência, podemos calcular a sua probabilidade e
impacto, analisando tanto a frequência e natureza do conjunto coletivo de eventos. Por exemplo,
podemos calcular a probabilidade de que vai chover esta semana e tomar um palpite no número de
polegadas de precipitação receberemos; chuva é uma ocorrência bastante frequente. Mas os problemas
de segurança são muitas vezes eventos extremos: Eles acontecem raramente e sob uma ampla
variedade de circunstâncias, por isso é difícil olhar para eles como um grupo e tirar conclusões gerais.

O trabalho de Paul Slovic em risco aborda as dificuldades específicas com eventos extremos. Ele
ressalta que a avaliação do risco em tais casos pode ser um esforço político tanto quanto científico. Ele
observa que tendem a deixar os valores, o processo, poder e confiança influenciar a nossa análise de risco
[ SLO99 ].

Começando com Fischoff et al. [ FIS78 ], Os investigadores caracterizado risco extremo ao longo de dois
eixos-base de percepção: o medo do risco e o grau em que o risco é desconhecido. Estes sentimentos sobre o
risco, chamados afeta por psicólogos, permitir aos investigadores para discutir os riscos relativos, colocando-os
em um plano definido pelas duas percepções como eixos. Um estudo realizado por Loewenstein et al. [ LOE01 ]
Descreve como as percepções de risco são influenciadas pela associação (com eventos já experiente) e por
afetar pelo menos tanto se não mais do que pela razão. Na verdade, se as duas influências competir,
sentimentos geralmente motivo de trunfo.

Esta característica de análise de risco é reforçado pela teoria do prospecto: estudos de como as pessoas
tomam decisões por usar a razão e sentimento. Kahneman e Tversky
[ KAH79 ] Mostrou que as pessoas tendem a superestimar a probabilidade de eventos raros, inexperientes,
porque os seus sentimentos de medo e do desconhecido raciocínio analítico geralmente dominam sobre a baixa
probabilidade de ocorrência. Em contrapartida, se as pessoas experimentam resultados semelhantes e sua
probabilidade, o seu sentimento de medo diminui e eles realmente podem subestimar eventos raros. Em outras
palavras, se o impacto de um evento raro é alta (alta medo), então as pessoas se concentrar sobre o impacto,
independentemente da probabilidade. Mas se o impacto de um evento raro é pequeno, então preste atenção
para a probabilidade.

Vamos olhar com mais cuidado para a natureza de uma ameaça à segurança. Vimos que um aspecto-o seu
potencial dano-se a quantidade de danos que pode causar; este aspecto é a
impacto componente do risco. Também consideramos a magnitude da ameaça de probabilidade.
Uma ameaça provavelmente não é apenas aquele que alguém pode querer retirar mas sim um que poderia realmente ocorrer.
Algumas pessoas podem sonhar com ficar rico roubando um banco; a maioria, no entanto, iria rejeitar essa idéia por causa de
sua dificuldade (se não a sua imoralidade ou risco). Um aspecto da probabilidade é de viabilidade: Será que é mesmo possível
realizar o ataque? Se a resposta é não, então a probabilidade é igual a zero, e, portanto, é assim o risco. Assim, um bom lugar
para começar na avaliação do risco é olhar para saber se a acção proposta é viável. Três fatores determinam a viabilidade,
como descrevemos a seguir.

Gastos para a segurança baseia-se no impacto e probabilidade de dano potencial, tanto dos

quais são quase impossíveis de medir com precisão. Método-Oportunidade-Motive

Um atacante mal-intencionado deve ter três coisas para garantir o sucesso: método, oportunidade e motivo,
representado na A Figura 1-11 . Grosso modo, o método é o como; oportunidade, a quando; e motivo, o porquê de um
ataque. Negar o atacante qualquer um desses três e o ataque não terá sucesso. Examinemos estas propriedades
individualmente.
FIGURA 1-11 Método-Oportunidade-Motive

Método

Por método queremos dizer as habilidades, conhecimentos, ferramentas e outras coisas com as quais a perpetrar o ataque.
Pense em números cômicos que querem fazer algo, por exemplo, para roubar jóias valiosas, mas os personagens são tão
inepto que todos os seus movimentos está fadado ao fracasso. Estas pessoas não têm a capacidade ou método para ter
sucesso, em parte porque não há aulas em roubo de jóia ou livros sobre o roubo for dummies.

Qualquer um pode encontrar a abundância de cursos e livros sobre computação, no entanto. Conhecimento de modelos
específicos de sistemas de computador é amplamente disponível em livrarias e na Internet. sistemas massa-mercado (tais como os
sistemas operacionais Microsoft ou Apple ou Unix) estão prontamente disponíveis para a compra, assim como os produtos de
software comum, como processadores de texto ou sistemas de gerenciamento de banco de dados, de modo potenciais atacantes
podem até mesmo chegar hardware e software sobre o qual a experimentar e aperfeiçoar um ataque. Alguns fabricantes lançam
especificações detalhadas sobre a forma como o sistema foi concebido ou como ele funciona, como guias para usuários e
integradores que desejam implementar outros produtos complementares. Vários
ferramentas-scripts de ataque, programas de modelos e ferramentas para testar as fraquezas-estão disponíveis a partir de
sites de hackers na Internet, na medida em que muitos ataques exigem apenas a capacidade do atacante para fazer download
e executar um programa. O termo script kiddie descreve alguém que faz download de um pacote de código de ataque completa
e precisa apenas inserir alguns detalhes para identificar o alvo e deixar o script executar o ataque. Muitas vezes, só o tempo ea
inclinação limitar um atacante.

Oportunidade

Oportunidade é o tempo e acesso para executar um ataque. Você ouve que um fabuloso apartamento acaba de se tornar
disponível, para que correr para o agente de aluguel, apenas para encontrar alguém alugou cinco minutos mais cedo. Você
perdeu a sua oportunidade.

Muitos sistemas de computador apresentam uma ampla oportunidade para o ataque. Sistemas disponíveis ao público são, por
definição, acessível; frequentemente seus proprietários tomar cuidado especial para torná-los totalmente disponível para que se um
componente de hardware falhar, o proprietário tem peças instantaneamente pronto para ser pressionado em serviço. Outras pessoas
se esquecem que a necessidade de proteger seus computadores, laptops tão autônoma e conexões de rede inseguros dar ampla
oportunidade para o ataque. Alguns sistemas têm pontos de entrada privadas ou sem documentos utilizados na administração ou
manutenção, mas os atacantes também pode encontrar e usar esses pontos de entrada para atacar os sistemas.

Motivo

Finalmente, um atacante deve ter uma motivo ou razão para querer ataque. Você provavelmente tem uma ampla
oportunidade e capacidade de jogar uma pedra através da janela do seu vizinho, mas você não. Por que não? Porque você não
tem razão para querer prejudicar o seu vizinho: Você não tem motivo.

Já descrevemos alguns dos motivos para o crime informático: dinheiro, fama, auto-estima, política, terror. Muitas
vezes, é difícil determinar motivo para um ataque. Alguns lugares são “alvos atraentes”, o que significa que são muito
atraentes para os atacantes. alvos populares incluem computadores de aplicação da lei e do Departamento de Defesa,
talvez porque se presume ser bem protegida contra o ataque (assim eles apresentam um desafio e um ataque bem
sucedido mostra talento do atacante). Outros sistemas são atacados porque eles são fáceis de atacar. E alguns
sistemas são atacados de forma aleatória, simplesmente porque eles estão lá.

Método, oportunidade e motivo são todos necessários para que um ataque bem sucedido; negar
qualquer um destes e o ataque falhará.

Ao demonstrar viabilidade, os fatores do método, oportunidade e motivo determinar se um ataque pode ter
sucesso. Esses fatores dão a vantagem para o atacante, porque eles são qualidades ou pontos fortes o atacante
deve possuir. Outro fator, desta vez dando uma vantagem para o defensor, determina se um ataque será bem
sucedida: O atacante precisa de uma vulnerabilidade, um lugar sem defesa para o ataque. Se o defensor remove
vulnerabilidades, o atacante não pode atacar.

1,4 vulnerabilidades

Como observamos no início deste capítulo, a vulnerabilidade é uma fraqueza na segurança do


sistema de computador, por exemplo, em procedimentos, design, ou implementação, que pode ser explorado para causar perda ou
dano. Pense em um banco, com um guarda armado na porta da frente, vidro à prova de balas proteger os contadores, e um cofre de
metal pesado que requer múltiplas chaves para a entrada. Para roubar um banco, você tem que pensar em como explorar uma
fraqueza não abrangidos por estas defesas. Por exemplo, você pode subornar um contador ou passar por um trabalhador de
manutenção.

sistemas de computador têm vulnerabilidades, também. Neste livro nós consideramos muitos, tais como autenticação
fraca, falta de controle de acesso, erros em programas, recursos finitos ou insuficientes, e proteção física inadequada.
Emparelhado com um ataque credível, cada uma dessas vulnerabilidades pode permitir mal a confidencialidade, integridade
ou disponibilidade. Cada vector de ataque procura explorar uma vulnerabilidade particular.

Vulnerabilidades são pontos fracos que podem permitir a ocorrência dessas lesões.

Analistas de segurança falar de um sistema de superfície de ataque, que é conjunto completo de vulnerabilidades-real e
potencial do sistema. Assim, a superfície de ataque inclui riscos físicos, ataques maliciosos por pessoas de fora, roubo de
dados discrição por insiders, erros e imitações. Embora esses ataques vão desde fácil de altamente improvável, os analistas
devem considerar todas as possibilidades.

Nosso próximo passo é encontrar maneiras de bloquear ameaças neutralizando vulnerabilidades.

1.5 Controles

UMA ao controle ou contramedida é um meio para combater as ameaças. Dano ocorre quando uma ameaça é realizada contra
uma vulnerabilidade. Para proteger contra danos, então, podemos neutralizar a ameaça, feche a vulnerabilidade, ou ambos. A
possibilidade de danos a ocorrer é chamado de risco. Podemos lidar com danos de várias maneiras:

• evita -lo, bloqueando o ataque ou fechar a vulnerabilidade


• dissuadir -lo, fazendo com que o ataque mais difícil, mas não impossível

• desviar ele, fazendo um outro alvo mais atractivo (ou esta uma menos assim)
• mitigar -lo, fazendo o seu impacto menos grave
• descobrir -lo, ou como ele acontece ou algum tempo após o fato

• recuperar de seus efeitos

É claro que, mais do que um desses controles podem ser usados ​simultaneamente. Assim, por exemplo, podemos tentar evitar
invasões, mas se nós suspeitamos que não podemos evitar todos eles, podemos também instalar um dispositivo de detecção para
alertar sobre um ataque iminente. E devemos ter em procedimentos de resposta a incidentes lugar para ajudar na recuperação em
caso de uma intrusão não ter sucesso.

Os profissionais de segurança equilibrar o custo e eficácia dos controlos com a probabilidade e


gravidade do dano.

Para considerar os controles ou contramedidas que tentam impedir a exploração de vulnerabilidades de um sistema
de computação, começamos a pensar em maneiras tradicionais para melhorar a segurança física. Na Idade Média,
castelos e fortalezas foram construídas para proteger
as pessoas e bens valiosos dentro. A fortaleza poderia ter tido uma ou mais características de segurança,
incluindo

• um portão forte ou portas para repelir os invasores

• paredes pesadas para suportar objectos arremessados ​ou projectados contra eles

• um fosso em torno de controlar o acesso


• arrow fendas para deixar arqueiros atirar em inimigos se aproximando

• crenellations para permitir habitantes a inclinar-se para fora do telhado e derramar líquidos quentes ou vis sobre
atacantes

• uma ponte levadiça para limitar o acesso a pessoas autorizadas

• uma ponte levadiça para limitar o acesso além da ponte levadiça

• gatekeepers para verificar que as pessoas e mercadorias só autorizadas podiam entrar mesma forma, hoje nós
usamos uma abordagem múltipla para proteger nossas casas e escritórios. Podemos combinar as fechaduras fortes nas portas
com um alarme, janelas reforçadas, e até mesmo um vizinho intrometido para manter um olho em nossos objetos de valor. Em
cada caso, selecione uma ou mais formas de dissuadir um intruso ou atacante, e baseamos nossa seleção não apenas sobre o
valor do que proteger, mas também sobre o esforço que pensamos um atacante ou intruso vai gastar para entrar.

A segurança do computador tem as mesmas características. Temos muitos controles à nossa disposição. Alguns são mais fáceis
do que outros para usar ou implementar. Alguns são mais baratos do que outros para usar ou implementar. E alguns são mais difíceis
do que outros para intrusos para substituir. A Figura 1-12
ilustra como usamos uma combinação de controles para proteger nossos valiosos recursos. Nós usamos um ou mais controles,
de acordo com o que estamos a proteger, como o custo da proteção compara com o risco de perda, e como duramente nós
pensamos intrusos vai trabalhar para conseguir o que querem.

FIGURA 1-12 Efeitos dos controlos

Nesta seção, apresentamos uma visão geral dos controles disponíveis para nós. No resto deste livro, examinamos como
usar os controles contra tipos específicos de ameaças.

Podemos agrupar controla em três classes, em grande parte independentes. A lista que se segue mostra as classes e
diversos exemplos de cada tipo de controlo.

• controles físicos parar ou bloquear um ataque usando algo tangível também,


tais como paredes e cercas

- fechaduras

- (humanos) guardas

- sprinklers e outros extintores de incêndio


• processual ou administrativo controles usar um comando ou acordo que
- exija ou aconselha as pessoas a agir; por exemplo,
- leis, regulamentos
- políticas, procedimentos, diretrizes
- direitos de autor, patentes

- contratos, acordos
• controles técnicos ameaças contra com tecnologia (hardware ou software), incluindo

- senhas
- controles de programa ou sistema operacional de acesso

- protocolos de rede
- firewalls, sistemas de detecção de intrusão
- criptografia
- reguladores de fluxo de tráfego de rede

(Note-se que o termo “controles lógicos” também é usado, mas algumas pessoas usá-lo para significar controles
administrativos, enquanto outros usá-lo para significar controles técnicos. Para evitar confusão, nós não usamos esse termo.)

Como mostrado em A Figura 1-13 , Você pode pensar em termos de propriedade a ser protegida e do
tipo de ameaça quando você está escolhendo tipos apropriados de contramedidas. Nenhuma dessas classes é necessariamente
melhor do que ou preferível para os outros; eles trabalham de maneiras diferentes, com diferentes tipos de resultados. E isso
pode ser eficaz para usar controles sobrepostos ou
defesa em profundidade: mais de um controle ou mais de uma classe de controle para conseguir proteção.
FIGURA 1-13 Tipos de Contramedidas

1.6 Conclusão
A segurança do computador tenta garantir a confidencialidade, integridade e disponibilidade dos sistemas de
computação e seus componentes. Três partes principais de um sistema de computação estão sujeitos a ataques:
hardware, software e dados. Estes três, e as comunicações entre eles, são suscetíveis a vulnerabilidades de segurança
do computador. Por sua vez, essas pessoas e sistemas interessados ​em comprometer um sistema pode conceber
ataques que exploram as vulnerabilidades.

Neste capítulo explicamos os seguintes conceitos de segurança do computador:

• situações de segurança surgir em muitas atividades diárias, embora às vezes pode ser difícil distinguir entre
um ataque de segurança e uma repartição humana ou tecnológica comum. Infelizmente, os atacantes
inteligentes percebem essa confusão, para que eles possam fazer o seu ataque parecer uma simples falha,
aleatório.

• A ameaça é um incidente que poderia causar danos. A vulnerabilidade é uma fraqueza através do qual o
dano poderia ocorrer. Estes dois problemas combinar: ou sem as outras causas nenhum dano, mas uma
ameaça exercer uma vulnerabilidade significa danos. Para controlar tal situação, que pode bloquear ou
diminuir a ameaça, ou fechar a vulnerabilidade (ou ambos).

• Raramente podemos alcançar a segurança perfeita: há ameaças viáveis ​e há vulnerabilidades exercíveis. Às


vezes deixamos de reconhecer uma ameaça, ou outras vezes podemos ser incapazes ou não dispostos a fechar
uma vulnerabilidade. segurança incompleta não é uma situação ruim; em vez disso, ele demonstra um ato de
equilíbrio: controlar certas ameaças e vulnerabilidades, aplicar as contramedidas que são razoáveis, e aceitar o
risco de dano de casos uncountered.
• Um atacante precisa de três coisas: método a habilidade e conhecimento para realizar um ataque
bem-sucedido; oportunidade de tempo e de acesso pelo qual a atacar; e motivo
- uma razão para querer atacar. Infelizmente, nenhum destes três está em falta, o que significa que ataques são
inevitáveis.

Neste capítulo, introduzimos as noções de ameaças e danos, vulnerabilidades, ataques e atacantes, e


contramedidas. ameaças atacantes alavancagem que exploram vulnerabilidades contra ativos valiosos para
causar danos, e esperamos desenvolver contramedidas para eliminar meios, oportunidade e motivo. Estes
conceitos são a base que precisamos estudar, entender e segurança do computador mestre.

Contramedidas e controles podem ser aplicados aos dados, os programas, o sistema, os dispositivos físicos, os
links de comunicação, o ambiente e as pessoas. Às vezes, vários controles são necessários para cobrir uma única
vulnerabilidade, mas às vezes um endereços de controle de muitos problemas de uma só vez.

1.7 Qual é o próximo?

O restante deste livro está organizado em torno dos principais aspectos ou peças de segurança do computador. Como
você certamente já viu no noticiário quase que diariamente, incidentes de segurança informática abundam. A natureza da
notícia é que as falhas são frequentemente relatados, mas raramente sucessos. Você quase nunca li uma história sobre
hackers que tentaram invadir o sistema de computação de um banco, mas foram frustrados porque o banco tinha instalado
defesas fortes, camadas. Na verdade, os ataques de repelido superam em muito aqueles que ter sucesso, mas tais situações
boas não fazem notícias interessantes.

Ainda assim, nós não queremos começar com exemplos em que os controles de segurança falhou. Em vez disso, em Capítulo 2 começamos
por lhe dando descrições de três métodos poderosos e amplamente utilizados de proteção de segurança. Chamamos estes três o nosso
kit de ferramentas de segurança, em parte porque eles são eficazes, mas também porque eles são aplicáveis. Referimo-nos a estas
técnicas em provavelmente todos os outros capítulos deste livro, por isso queremos não só para dar-lhes uma posição de destaque na
frente, mas também para ajudar a apresentar-los em seu cérebro. Nossos três ferramentas em destaque são a identificação e
autenticação, controle de acesso e criptografia.

Depois de apresentar essas três ferramentas básicas que levam em domínios em que a segurança do computador se aplica.
Começamos com o mais simples situações de computador, programas individuais, e explorar os problemas e as proteções de
código de computador em Capítulo 3 . Consideramos também o código malicioso, como vírus e cavalos de Tróia (que definem
esses termos, juntamente com outros tipos de programas nocivos). Como você vai ver de outras formas, não há mágica que pode
fazer programas ruins seguro ou virar programadores em gurus de proteção. Temos, no entanto, apontar algumas
vulnerabilidades que aparecem no código de computador e descrevem maneiras de combater os pontos fracos, tanto durante o
desenvolvimento do programa e como um programa é executado.

computação moderna envolve redes, especialmente usando a Internet. Nós concentrar primeiro em como a computação em
rede afeta os indivíduos, principalmente através de navegadores e outras interações de rede básicas, como e-mail. Em Capítulo
4 nós olhamos como os usuários podem ser enganados por escritores hábeis de código malicioso. Estes ataques tendem a
afetar a protecção da confidencialidade dos dados dos usuários e integridade de seus programas.

capítulo 5 abrange os sistemas operacionais, continuando o nosso caminho de se afastando de coisas


o usuário pode ver e afetar diretamente. Vemos o que os sistemas operacionais proteções podem fornecer a programas e
dados dos usuários, na maioria das vezes contra ataques à confidencialidade ou integridade. Vemos também como a força dos
sistemas operacionais pode ser prejudicada por ataques, chamados rootkits, que alvejam diretamente os sistemas
operacionais e torná-los incapazes de se proteger ou seus usuários.

Em Capítulo 6 voltamos para redes, desta vez olhando para toda a rede e seu impacto sobre as habilidades dos usuários se
comuniquem dados de forma segura através da rede. Estudamos também um tipo de ataque chamado de negação de serviço,
exatamente o que o próprio nome indica, que é o primeiro grande exemplo de uma falha de disponibilidade.

Consideramos de dados, bancos de dados e mineração de dados em Capítulo 7 . Os casos interessantes


envolvem grandes bases de dados em que a confidencialidade dos dados pessoais dos indivíduos é um objetivo. Integridade dos dados
nos bancos de dados também é uma preocupação significativa.

Em Capítulo 8 passamos ainda mais longe da computação de usuário e estudo nuvem indivíduo, uma tecnologia se
tornando bastante popular. As empresas estão descobrindo que é conveniente e rentável para armazenar dados “na
nuvem”, e as pessoas estão fazendo o mesmo ter compartilhado acesso a coisas como música e fotos. Há riscos de
segurança envolvidos neste movimento, no entanto.

Você deve ter notado nossa estrutura: Nós organizamos nossa apresentação do usuário para fora através de programas,
navegadores, sistemas operacionais, redes e da nuvem, uma progressão de perto distante. Em Capítulo 9 voltamos para o usuário por
um motivo diferente: Consideramos a privacidade, uma propriedade intimamente relacionada com a confidencialidade. Nosso
tratamento aqui é independente de onde os dados são: em um computador individual, uma rede ou um banco de dados. Privacidade
é uma propriedade que nós, como seres humanos merecem, e segurança do computador pode ajudar a preservá-lo, como
apresentamos nesse capítulo.

Em Capítulo 10 olhamos para vários tópicos de gerenciamento de computação como relacionado à segurança. Os incidentes
de segurança ocorrem, e instalações de computação precisa estar pronto para responder, se a causa é um ataque de hackers,
catástrofe software ou incêndio. Os gerentes também tem que decidir o que controla a empregar, porque contramedidas custam
dinheiro que deve ser gasto com sabedoria. protecção de segurança do computador é difícil de avaliar: Quando funciona você
não sabe o que faz. Realizar análise de risco e construir um caso de segurança são tarefas de gerenciamento importantes.

Algumas proteções de segurança estão além do escopo de um indivíduo pode resolver. O crime organizado de países
estrangeiros é algo governos devem lidar, através de um sistema legal. Em Capítulo 11 consideramos leis que afetam a
segurança do computador. Nós também olhar para padrões éticos, o que é “certo” em computação.

Em Capítulo 12 voltamos a criptografia, que introduziu no Capítulo 2 .


méritos de criptografia cursos e livros de seu próprio, e o tópico é detalhado o suficiente para que a maioria do
trabalho real no campo é feito em nível de graduação e além. Nós usamos
Capítulo 2 introduzir os conceitos suficiente para ser capaz de aplicá-las. Em Capítulo 12 nós expandir
essa introdução e olhada em alguns dos fundamentos formais e matemáticas de criptografia.

Finalmente, em Capítulo 13 nós levantamos quatro áreas temáticas. Estes são domínios com uma necessidade importante para a
segurança do computador, embora as áreas estão evoluindo tão rapidamente que computador
a segurança não pode ser tratada como totalmente como deveria. Estas áreas são a chamada Internet das coisas (a
interconexão de dispositivos habilitados para rede de torradeiras para automóveis e bombas de insulina), economia
segurança informática, o voto eletrônico, e por computador terrorismo assistida e guerra.

Nós confio esta organização irá ajudá-lo a apreciar a riqueza de um campo importante que toca muitas das
coisas que dependem.

1.8 Exercícios

1. Distinguir entre a vulnerabilidade, ameaça e controle.


2. Roubo geralmente resulta em algum tipo de dano. Por exemplo, se alguém rouba o seu carro, você pode
sofrer perdas financeiras, inconveniência (por perder o seu modo de transporte), e distúrbios emocionais (por
causa da invasão de sua propriedade pessoal e espaço). Lista três tipos de danos que uma empresa pode
experimentar de roubo de equipamentos de informática.

3. Liste pelo menos três tipos de danos que uma empresa pode experimentar a partir de espionagem eletrônica ou
exibição não autorizada de materiais confidenciais da empresa.

4. Lista de pelo menos três tipos de danos que uma empresa pode sofrer quando a integridade de um programa ou
empresa de dados é comprometida.

5. Lista de pelo menos três tipos de danos que uma empresa pode encontrar a partir de perda de serviço,
isto é, a falta de disponibilidade. Liste o produto ou recurso ao qual o acesso é perdido, e explicar como
esta perda dói a empresa.

6. Descreva uma situação em que você tem experimentado danos como consequência de uma falha de
segurança do computador. a falha foi mal intencionado ou não? O ataque alvejar especificamente ou
era geral e você fosse a infeliz vítima?

7. Descreva dois exemplos de vulnerabilidades em automóveis para que os fabricantes de automóveis


instituíram controles. Diga por que você acha que esses controles são eficazes, pouco eficazes ou
ineficazes.

8. Um controle contra exclusão software acidental é salvar todas as versões antigas de um programa. Claro, este
controle é proibitivamente caro em termos de custo de armazenamento. Propor um controlo menos dispendioso
contra apagamento acidental de software. É o seu controle eficaz contra todas as possíveis causas de exclusão
de software? Se não, o que ameaças se não cobrir?

9. No seu computador pessoal, que pode instalar programas? Quem pode alterar os dados do sistema operacional?
Quem pode substituir partes do sistema operacional? qualquer uma dessas ações podem ser executadas
remotamente?

10. Suponha que um programa para imprimir contracheques secretamente vazamentos de uma lista de nomes de funcionários que
ganham mais do que uma certa quantidade de cada mês. Quais controles poderia ser instituída para limitar a vulnerabilidade deste
vazamento?

11. Preservar a confidencialidade, integridade e disponibilidade dos dados é uma reafirmação da preocupação com a
interrupção, interceptação, modificação e fabricação. Como os três primeiros conceitos se relacionam com a última
quatro? Ou seja, é qualquer um dos quatro equivalente a um ou mais dos três? É um dos três abrangeu por um ou
mais dos quatro?

12. Você acha que a tentativa de quebrar a (ou seja, obter o acesso ou uso de) um
sistema de computação sem autorização deveria ser ilegal? Por que ou por que não?

13. Descreva um exemplo (que não os mencionados neste capítulo) de dados cuja confidencialidade tem uma
pequena oportunidade, dizer, um dia ou menos. Descreva um exemplo de dados cujo sigilo tem uma
oportunidade de mais de um ano.

14. Atualmente, você usa quaisquer medidas de controlo de segurança de computador? Se sim, quais? Contra o que
ataques que você está tentando proteger?

15. Descreva um exemplo em que a negação absoluta de serviço para um usuário (ou seja, o usuário recebe nenhuma resposta do
computador) é um problema sério para esse usuário. Descreva outro exemplo, onde 10 por cento negação de serviço a um
utilizador (isto é, a computação do usuário avança, mas a uma taxa de 10 por cento mais lento do que o normal) é um problema
sério para esse usuário. Poderia acessar por pessoas não autorizadas a um resultado sistema de computação em uma negação
de 10 por cento de serviço para os usuários legítimos? Como?

16. Quando você diz que o software é de alta qualidade, o que quer dizer? Como se encaixa a segurança na sua
definição de qualidade? Por exemplo, pode uma aplicação ser inseguro e ainda ser “bom”?

17. Os desenvolvedores geralmente pensar em qualidade de software em termos de falhas e fracassos. Falhas são
problemas (por exemplo, loops, que nunca terminar ou extraviado vírgulas em declarações) que os desenvolvedores podem
ver, olhando para o código. As falhas são problemas, tais como uma falha do sistema ou a invocação da função errada, que
são visíveis para o usuário. Assim, as falhas podem existir em programas, mas nunca se tornam fracassos, porque as
condições em que uma falha torna-se um fracasso nunca são atingidos. Como vulnerabilidades de software se encaixam
nesse esquema de falhas e fracassos? É toda falta uma vulnerabilidade? É cada vulnerabilidade uma falha?

18. Considere um programa para exibir em seu site o tempo atual da sua cidade e temperatura. Quem pode
querer atacar o seu programa? Que tipos de danos que pode querer causar? Que tipos de vulnerabilidades que
poderiam explorar para causar danos?

19. Considere um programa que permite aos consumidores comprar produtos a partir da web. Quem pode querer
atacar o programa? Que tipos de danos que pode querer causar? Que tipos de vulnerabilidades que poderiam
explorar para causar danos?

20. Considere um programa para aceitar e tabular de votos em uma eleição. Quem pode querer atacar o
programa? Que tipos de danos que pode querer causar? Que tipos de vulnerabilidades que poderiam explorar
para causar danos?

21. Considere um programa que permite que um cirurgião em uma cidade para ajudar em uma operação em um paciente em
outra cidade através de uma conexão Internet. Quem pode querer atacar o programa? Que tipos de danos que pode querer
causar? Que tipos de vulnerabilidades que poderiam explorar para causar danos?
2. Toolbox: autenticação, controle de acesso e
criptografia

Capítulo tópicos:

• Autenticação, capacidades e limitações


• As três bases de autenticação: conhecimento, características, posses
• Força de um mecanismo de autenticação
• Implementação de controle de acesso
• criptografia empregando
• Simétrica e criptografia assimétrica
• resumos de mensagem

• Assinaturas e certificados

Assim como os médicos têm estetoscópios e carpinteiros têm fitas de medição e praças, os profissionais de segurança têm
ferramentas que eles usam com freqüência. Três dessas ferramentas de segurança são a autenticação, controle de acesso e
criptografia. Neste capítulo apresentamos essas ferramentas, e em capítulos posteriores usamos essas ferramentas repetidamente
para tratar uma ampla gama de questões de segurança.

Em certo sentido, a segurança não mudou desde os seres sencientes começou a acumular coisas vale a pena
proteger. Um proprietário de sistema estabelece uma política de segurança, formal ou informalmente, explícita ou
implicitamente, talvez tão simples como “ninguém é permitido levar a minha comida” -e começa a tomar medidas para
fazer cumprir essa política. O caráter das ameaças muda como o protagonista se move a partir da floresta para o
campo de batalha medieval ao campo de batalha moderno à Internet, assim como a natureza das proteções
disponíveis, mas a sua essência estratégica permanece praticamente constante: Um atacante quer algo um defensor
tem, de modo que o atacante vai atrás dele. O defensor tem uma série de opções de luta, construir um sistema de
barreira ou de alarme, correr e se esconder, diminuir a atratividade do destino para o atacante e estas opções todos
têm análogos na segurança do computador moderno.

Neste capítulo, estabelecer as bases para a segurança do computador por estudar esses traços largos. Nós olhamos
para uma série de estratégias de segurança onipresentes, identificar as ameaças contra as quais cada uma dessas
estratégias é eficaz, e dar exemplos de contramedidas representativas. Durante o resto deste livro, como nós aprofundar
as medidas de segurança técnicas específicas utilizadas em sistemas operacionais, programação, sites e navegadores e
redes, revisitamos essas mesmas estratégias novamente e novamente. Anos a partir de agora, quando estamos todos
usando tecnologia que não foi sequer imaginado ainda, este capítulo deve ser tão relevante como é hoje.

Um profissional de segurança analisa situações de encontrar ameaças e vulnerabilidades para a confidencialidade,


integridade e / ou disponibilidade de um sistema de computação. Muitas vezes, o controle dessas ameaças e vulnerabilidades
envolve uma política que especifica quem ( qual os sujeitos) pode
Acesso que ( que objectos) como ( pelo qual significa). Nós introduzimos esse quadro em
Capítulo 1 . Mas agora queremos aprofundar como funciona uma tal política. Para ser eficaz a aplicação de políticas deve
determinar quem com precisão. Ou seja, se a política diz Adam pode acessar algo, segurança falhar se alguém se faz
passar por Adam. Assim, para aplicar políticas de segurança corretamente, precisamos de formas para determinar além
de qualquer dúvida razoável de que a identidade de um sujeito é preciso. A propriedade de identificação precisa é
chamado de autenticação. A primeira ferramenta crítica para os profissionais de segurança é a autenticação e as suas
técnicas e tecnologias.

Quando introduzimos as políticas de segurança que não declarar explicitamente o inverso: Um assunto tem permissão para
acessar um objeto em um modo particular, mas, a menos que autorizado, todos os outros assuntos são não permissão para acessar o
objeto. Uma política sem esses limites é praticamente inútil. Que bom que ele faz para dizer um assunto pode acessar um objeto se
qualquer outro assunto pode fazê-lo sem ser autorizado pela política. Consequentemente, precisamos de formas de restringir o acesso
apenas aos assuntos da sim lista, como admitir consumidores do teatro para um jogo (com bilhetes) ou o check-in convidados para uma
festa (em uma lista de convidados). Acesso alguém ou algo controles, por exemplo, um porteiro recolhe bilhetes ou um host gerencia a
lista de convidados. Permitindo exatamente os acessos autorizados é chamado de controle de acesso. Mecanismos para implementar
o controle de acesso são outra ferramenta fundamental a segurança do computador.

Suponha que você estava tentando limitar o acesso a um jogo de futebol que está sendo realizada em um parque aberto em uma
cidade populosa. Sem uma cerca, porta, ou fosso, você não pode limitar quem pode ver o jogo. Mas suponha que você tinha super
poderes e poderia encobrir os jogadores em uniformes de invisibilidade. Você iria emitir óculos especiais apenas para pessoas
autorizadas a ver o jogo; outros podem olhar, mas não vê nada. Embora este cenário é pura fantasia, como uma tecnologia de
invisibilidade existe, chamado criptografia. Simplificando, a criptografia é uma ferramenta através da qual podemos transformar os
dados para que apenas os receptores pretendidos (que têm chaves, o equivalente de óculos anti-camuflagem) pode deduzir os
pedaços escondidos. A terceira e última ferramenta de segurança fundamental neste capítulo é a criptografia.

Neste capítulo, descrevem essas ferramentas e, em seguida, dar alguns exemplos para ajudar você a entender como as
ferramentas funcionam. Mas a maioria das aplicações dessas ferramentas vêm em capítulos posteriores, onde se elaboram sobre
a sua utilização no contexto de uma situação de segurança mais completa. Na maior parte deste capítulo, dissecar nossas três
ferramentas fundamentais de segurança: autenticação, controle de acesso e criptografia.

2.1 Autenticação
Seu vizinho reconhece-lo, vê-lo com freqüência, e sabe que você é alguém que deve estar acontecendo em
sua casa. Seu vizinho também pode notar alguém diferente, especialmente se essa pessoa está fazendo algo
suspeito, como bisbilhotando sua porta, olhando para cima e para baixo a caminhada, ou pegar uma pedra
pesada. Acoplamento estes eventos suspeitos com ouvir o som de vidro quebrando, seu vizinho pode até
chamar a polícia.

Os computadores substituíram muitas interações face-a-face com os eletrônicos. Com nenhum vizinho vigilante para
reconhecer que algo está errado, as pessoas precisam de outros mecanismos para separar autorizada de partes não
autorizadas. Por esta razão, a base da segurança do computador é controlado o acesso: alguém está autorizado a tomar alguma
ação em alguma coisa. Nós
examinar o controle de acesso mais adiante neste capítulo. Mas para o controle de acesso ao trabalho, precisamos ter certeza
de que o “alguém” é. Nesta seção apresentamos a autenticação, o processo de determinar ou confirmar uma identidade.

Um sistema de computador não tem as sugestões que fazemos com a comunicação face-a-face que vamos reconhecer nossos
amigos. Em vez disso computadores dependem de dados para reconhecer outros. Determinar que uma pessoa realmente é consiste
em duas etapas distintas:

• Identificação é o ato de afirmar que uma pessoa é.


• Autenticação é o ato de provar que afirmou identidade: a de que a pessoa é quem ela diz ser.

Identificação está afirmando que uma pessoa é. Autenticação é

provar que identidade reivindicada.

Nós ter formulado essas etapas a partir da perspectiva de uma pessoa que procura ser reconhecido, usando o termo “pessoa”
para simplificar. Na verdade, tal reconhecimento ocorre entre pessoas, processos computacionais (programas em execução),
conexões de rede, dispositivos e entidades activas semelhantes. Em segurança, todas essas entidades são chamados assuntos.

Os dois conceitos de identificação e autenticação são facilmente e muitas vezes confuso. Identidades, como nomes,
muitas vezes são bem conhecidos, público, e não protegida. Por outro lado, a autenticação é necessariamente
protegido. Se a identidade de alguém é público, qualquer um pode reivindicar ser essa pessoa. O que separa os
pretendentes da pessoa real é a prova de autenticação.

Identificação Versus Authentication

As identidades são muitas vezes bem conhecido, previsível, ou adivinhação. Se você enviar e-mail para alguém, você envia
implicitamente ao longo de sua conta de e-mail ID para que a outra pessoa pode responder-lhe. Em uma discussão online você pode
postar comentários sob um nome de tela como uma forma de vincular suas várias postagens. O seu número de conta bancária é impresso
em cheques que você escreve; seu número de conta de cartão de débito é mostrado no seu cartão, e assim por diante. Em cada um
desses casos, você revelar uma parte de sua identidade. Observe que a sua identidade é mais do que apenas o seu nome: O seu número
de conta bancária, número de cartão de débito, endereço de e-mail, e outras coisas são maneiras pelas quais as pessoas e os processos
de identificá-lo.

Alguns IDs de contas não são difíceis de adivinhar. Alguns lugares atribuir IDs de usuário com a última nome do usuário seguido
de primeira inicial. Outros usam três iniciais ou algum outro esquema que os estrangeiros podem facilmente prever. Muitas vezes para
transações on-line o seu ID da conta é o seu endereço de e-mail, para tornar mais fácil para você se lembrar. Outras contas a
identificá-lo por telefone, segurança social, ou algum outro número de identificação. Com muitas contas para lembrar, você pode
acolher lugares que identificam você por algo que você sabe bem, porque você usá-lo muitas vezes. Mas usá-lo muitas vezes também
significa que outras pessoas podem saber ou adivinhar-lo também. Por estas razões, muitas pessoas poderia facilmente, embora
falsamente, a pretensão de ser você por apresentar um dos seus identificadores conhecidos.

As identidades são tipicamente público ou bem conhecida. A autenticação deve ser privado.
Autenticação, por outro lado, deve ser confiável. Se a identificação afirma sua identidade, autenticação confirma
que você é quem você pretende ser. Embora identificadores podem ser amplamente conhecido ou facilmente
determinada, a autenticação deve ser privado. No entanto, se o processo de autenticação não é forte o suficiente, não
será seguro. Considere, por exemplo, como e-mail de um candidato político foi comprometida por um processo de
autenticação não-private-suficiente, conforme descrito no Sidebar 2-1 .

E-mail do candidato Sidebar 2-1 a vice-presidente Sarah Palin Exposed


Durante a campanha presidencial de 2008 nos EUA, conta de email pessoal do candidato à
vice-presidência Sarah Palin foi hackeado. Conteúdo das mensagens de e-mail e lista de contatos de
Palin foram publicadas em um mural público. A 20-year-old Universidade de Tennessee estudante, David
Kernell, foi posteriormente condenado por acesso não autorizado a obter informações de seu computador
e condenado a um ano e um dia.

Como pode um estudante universitário acessaram o computador de um funcionário público de alto perfil
que na época era governadora do Alasca e candidata à vice-presidência dos Estados Unidos sob a
proteção do Serviço Secreto dos Estados Unidos? Fácil: Ele simplesmente fingia ser ela. Mas, certamente,
ninguém (excepto, talvez, comediante Tina Fey) com êxito poderia passar por ela. Aqui é o quão fácil o
ataque foi.

conta de email do Governador Palin foi gov.palin@yahoo.com . O ID da conta


era bem conhecido por causa de notícias de um incidente anterior envolvendo Palin usando sua conta
pessoal para comunicações oficiais do Estado; mesmo sem a publicidade o nome da conta não teria
sido difícil de adivinhar.

Mas a senha? Não, o aluno não adivinhar a senha. Tudo o que ele tinha a fazer era fingir ser Palin e
afirmam que ela tinha esquecido sua senha. Yahoo pediu Kernell as questões de segurança Palin tinha
arquivado com Yahoo na abertura da conta: data de nascimento (encontrado na Wikipedia), código postal
(conhecimento público, especialmente porque ela tinha começado a atenção do público para não usar a
mansão do governador oficial), e onde conheceu seu marido (parte de sua biografia não-oficial que
circula durante a campanha: ela e seu marido se conheceram no colégio). Com essas três respostas,
Kernell foi capaz de mudar sua senha (a “pipoca”, algo atraente para a maioria dos estudantes
universitários). Daquele ponto em diante, não só foi Kernell efetivamente Palin, a verdadeira Palin não
pôde acessar sua própria conta de e-mail, porque é que ela não sabe a nova senha.

mecanismos de autenticação usar qualquer um dos três qualidades para confirmar a identidade de um usuário:

• Algo que o usuário sabe. Senhas, números PIN, passphrases, um aperto de mão secreto, e o nome de
solteira da mãe são exemplos do que um usuário pode saber.

• Algo que o usuário é. Estes autenticadores, chamados de biometria, são baseados em uma característica física do
usuário, como uma impressão digital, o padrão de voz de uma pessoa, ou um rosto (foto). Esses métodos de
autenticação são velhos (reconhecemos amigos pessoalmente por seus rostos ou em um telefone por suas vozes),
mas está apenas começando a ser usado em autenticações de computador.
• Algo que o usuário tem. crachás de identificação, chaves físicas, uma carteira de motorista, ou um uniforme são
exemplos comuns de coisas que as pessoas têm que os tornam reconhecíveis.

Dois ou mais formas podem ser combinados; por exemplo, um cartão de banco e um PIN combinar algo que o
usuário tem (o cartão) com algo que o usuário sabe (o PIN).

A autenticação é baseado em algo que você sabe, são ou têm.

Embora senhas foram a primeira forma de autenticação de computador e permanecem populares, essas outras formas
estão tornando-se mais fácil de usar, mais barato e mais comum. Nas seções seguintes vamos examinar cada uma
dessas formas de autenticação.

Autenticação baseada em frases e Fatos: Something You Know


proteção de senha parece oferecer um sistema relativamente seguro para a confirmação de identidade-informações
relacionadas, mas a prática humana, por vezes, degrada a sua qualidade. Vamos explorar vulnerabilidades em
autenticação, focando o parâmetro de autenticação mais comum, a senha. Nesta seção, vamos considerar a natureza de
senhas, critérios para selecioná-los, e as maneiras de usá-los para autenticação. Enquanto você lê a seguinte discussão
de vulnerabilidades senha, pense sobre quão bem esses ataques de identidade iria trabalhar contra a questões de
segurança e outros esquemas de autenticação com o qual você pode estar familiarizado. E lembre-se a quantidade de
informações sobre nós é conhecido, às vezes porque nós revelá-lo nós mesmos, conforme descrito em Sidebar 2-2 .

Sidebar 2-2 Páginas do Facebook Resposta Questões de Segurança

George Bronk, um residente de 23 anos de idade, de Sacramento, Califórnia, se declarou culpado em 13 de


janeiro de 2011 a acusações incluindo invasão de computador, falso
personificação, e posse de pornografia infantil. Seus crimes envolvidos representando as mulheres com
os dados obtidos a partir de suas contas do Facebook.

De acordo com um Associated Press notícia [ THO11 ], Bronk digitalizado páginas do Facebook para
páginas que mostram os endereços de email das mulheres. Ele, então, ler os seus perfis do Facebook
cuidadosamente em busca de pistas que poderiam ajudá-lo a responder a questões de segurança, como uma
cor favorita ou nome do meio do pai. Com essas pistas em seu perfil, Bronk, em seguida, virou-se para os
provedores de conta de e-mail. Usando a mesma técnica que Kernell, Bronk fingiu ter esquecido seu (sua)
senha e, por vezes, conseguiu a responder as perguntas de segurança necessárias para recuperar uma senha
esquecida. Ele às vezes usou a mesma técnica para obter acesso a contas do Facebook.

Depois que ele tinha as senhas das mulheres, ele percorreu as suas pastas de email enviadas por
envergonhá fotografias; ele às vezes enviado aqueles aos contatos da vítima ou postou em sua página no
Facebook. Ele exercia a sua actividade a partir de dezembro de 2009 a outubro de 2010. Quando a polícia
confiscaram seu computador e analisados ​seu conteúdo, eles descobriram 3200 contactos de Internet e 172
arquivos de e-mail contendo fotografias explícitas; polícia enviou e-mail para todos os contatos para perguntar
se eles tinham sido vitimado, e 46 responderam que tinham. As vítimas viviam na Inglaterra, Washington, DC,
e 17 estados da Califórnia para New Hampshire.
escritório do procurador-geral da Califórnia aconselhou aqueles que utilizam sites de e-mail e redes sócio para
escolher perguntas e respostas de segurança que não são postados em sites públicos, ou para adicionar números ou
outros caracteres para respostas comuns de segurança. dicas de segurança adicionais estão no site do
procurador-geral.

Usar senha

O uso de senhas é bastante simples, como você provavelmente já sabe por experiência própria. Um utilizador
introduz algum pedaço de identificação, tal como um nome ou um ID de utilizador atribuído; essa identificação pode
estar disponível ao público ou pode ser fácil de adivinhar porque não fornecer a proteção real. O sistema de proteção,
em seguida, solicita uma senha do usuário. Se a senha corresponde a um em arquivo para o usuário, o usuário é
autenticado e permitido o acesso. Se o jogo de senha falhar, o sistema solicita a senha novamente, caso o usuário
digitado incorretamente.

Mesmo que as senhas são amplamente utilizados, eles sofrem de algumas dificuldades de uso:

• Usar. Fornecer uma senha para cada acesso a um objeto pode ser inconveniente e
demorado.
• Divulgação. Se um usuário divulga uma senha para um indivíduo não autorizado, o objeto se torna
imediatamente acessível. Se o usuário altera a senha para voltar a proteger o objeto, o usuário deve
informar quaisquer outros utilizadores legítimos da nova senha porque a sua senha antiga irá falhar.

• Revogação. Para revogar o acesso de um usuário direito de um objeto, alguém deve alterar a
senha, causando os mesmos problemas que a divulgação.

• Perda. Dependendo de como as senhas são implementadas, pode ser impossível para recuperar uma senha
perdida ou esquecida. Os operadores ou administradores de sistema podem certamente intervir e fornecer uma nova
senha, mas muitas vezes eles não podem determinar o que a senha de um usuário tinha escolhido anteriormente. Se
o usuário perde (ou esquece) a senha, os administradores devem atribuir um novo.

Atacar e proteger senhas

Quão seguras são próprias senhas? Senhas são um pouco limitadas como dispositivos de protecção por causa do
relativamente pequeno número de bits de informação que eles contêm. Pior, as pessoas escolhem senhas que nem
sequer se aproveitam do número de bits disponíveis: Escolhendo uma cadeia bem conhecida, como qwerty, senha ou
123456 reduz a incerteza de um atacante ou dificuldade essencialmente zero.

Knight e Hartley [ KNI98 ] Lista, em ordem, 12 etapas um atacante pode tentar a fim de determinar uma senha.
Estas etapas estão em crescente grau de dificuldade (número de suposições), e assim eles indicam a quantidade
de trabalho a que o atacante deve ir a fim de obter uma senha. Aqui estão os seus passos adivinhação de senha:

• nenhuma senha

• o mesmo que o ID de usuário

• é, ou é derivado, o nome do usuário


• em uma lista de palavras comuns (por exemplo, uma senha secreta, privada), além de nomes e padrões
comuns (por exemplo, qwerty, aaaaaa)
• contidas em um dicionário faculdade curta
• contido em uma lista completa palavra Inglês
• contido nos dicionários não-Inglês de língua comuns
• contida num dicionário faculdade curto com capitalizations (senha) ou substituições (dígito 0 para
a letra S, e assim por diante)

• contidas em um dicionário Inglês completo com capitalizações ou substituições


• contido nos dicionários não-ingleses comuns com letras maiúsculas ou substituições

• obtido pela força bruta, tentando todas as combinações possíveis de caracteres alfabéticos

• obtido pela força bruta, tentando todas as combinações possíveis do conjunto de caracteres completo

Embora o último passo sempre terá êxito, os passos imediatamente anterior são tão demorados que eles vão
deter todos, mas o atacante mais dedicado para quem o tempo não é um fator limitante.

Cada senha pode ser imaginado; a força da senha é determinada por quantos palpites são
obrigatórios.

Nós agora expandir sobre algumas dessas abordagens.

ataques de dicionário

Vários sites de rede postar dicionários de frases, nomes de personagens de ficção científica, lugares, nomes mitológicos,
palavras chinesas, palavras iídiche e outras listas especializadas. Esses administradores listas ajuda local identificar os
usuários que escolheram senhas fracas, mas os mesmos dicionários também pode ser usado por atacantes de sites que não
possuem tais administradores atentos. Os policiais [ FAR90 ], Crack [ MUF92 ], E SATÃ [ FAR95 ] Utilitários permitem que um
administrador para fazer a varredura de um sistema de senhas fracas. Mas esses mesmos utilitários ou outras caseiros, permitir
que os atacantes para fazer o mesmo. Agora sites na Internet oferecem os chamados software de recuperação de senha como
freeware ou shareware por menos de $ 20. (Estes são por senha programas de cracking).

As pessoas pensam que pode ser inteligente, escolhendo uma senha simples e substituir determinados caracteres, como 0
(zero) para a letra O, 1 (um) por letra I ou L, 3 (três) por letra E ou @ (at) por carta A. Mas os usuários não são as únicas
pessoas que poderia pensar-se estas substituições.

Inferindo senhas provável para um usuário

Se Sandy está selecionando uma senha, ela provavelmente não é escolher uma palavra completamente ao acaso. password
mais provável de Sandy é algo significativo para ela. As pessoas normalmente escolhem senhas pessoais, como o nome de um
cônjuge, filho, outro membro da família, ou animal de estimação. Para qualquer pessoa, o número de tais possibilidades é apenas
uma dúzia ou dois. Tentando isso muitas senhas por computador leva bem menos de um segundo! Mesmo uma pessoa que trabalha
com a mão poderia tentar dez prováveis ​candidatos em um minuto ou dois.

Assim, o que parecia formidável, em teoria, é de fato bastante vulnerável na prática, e o


probabilidade de penetração bem sucedida é espantosamente elevada. Morris e Thompson [ MOR79 ] Confirmou nossos
medos em seu relatório sobre os resultados de ter reunido as senhas de muitos usuários, mostrado na Tabela 2-1 . Figura
2-1 (Com base em dados de que estudo) mostra as características das senhas 3,289 recolhidos. Os resultados desse
estudo são angustiantes, e hoje a situação é susceptível de ser o mesmo. Dessas senhas, 86 por cento poderia ser
descoberto no valor de cerca de uma semana de testes de 24 horas-a-dia, utilizando a estimativa muito generosa de 1
milissegundo por verificação de senha.

TABELA 2-1 Características senha

FIGURA 2-1 Distribuição dos tipos de senha


Para que você não descartar estes resultados como datada (que foram relatados em 1979), Klein repetiu a experiência
em 1990 [ KLE90 ] E Spafford em 1992 [ SPA92a ]. Cada coletadas aproximadamente 15.000 senhas. Klein relatou que 2,7
por cento das senhas foram adivinhou em apenas 15 minutos de tempo de máquina (à velocidade da década de 1990
computadores), e 21 por cento foram adivinhou dentro de uma semana! Spafford descobriram que a duração média senha
era
6.8 caracteres e que 28,9 por cento consistia de apenas caracteres alfabéticos minúsculos. Então, em 2002, o britânico Egg
banco on-line encontrou seus usuários ainda escolher senhas fracas [ BUX02 ]. A 50 por cento cheio de senhas para o seu
serviço de banca online eram nomes dos membros da família: nomes de 23 por cento das crianças, 19 por cento de um
cônjuge ou parceiro, e 9 por cento a sua própria. Infelizmente, animais de estimação ficou em apenas 8 por cento, enquanto
celebridades e futebol (soccer) estrelas empatado em 9 por cento cada. E em 1998, Knight e Hartley [ KNI98 ] Relatou que
cerca de 35 por cento das senhas são deduzidas a partir sílabas e iniciais do nome do proprietário da conta. Em dezembro de
2009 a empresa de segurança informática Imperva analisou 34 milhões de senhas do Facebook que tinha sido previamente
divulgadas acidentalmente, relatando que

• cerca de 30 por cento dos usuários escolheram senhas de menos de sete caracteres.
• quase 50 por cento das pessoas usavam nomes, palavras de calão, palavras de dicionário ou triviais dígitos
senhas de consecutivos, as teclas do teclado adjacentes e assim por diante.

• a maioria das senhas populares incluem 12345, 123456, 1234567, senha e iloveyou, entre os dez
primeiros.

Dois amigos que conhecemos nos disse suas senhas à medida que os ajudou a administrar seus sistemas, e suas senhas
que ambos têm sido um dos primeiros nós teria imaginado. Mas, você diz, estes são amadores desconhecem o risco de uma
senha fraca segurança. Em uma reunião recente, um especialista em segurança relacionados com esta experiência: Ele pensou
que tinha escolhido uma senha sólida, de modo que ele convidou uma turma de alunos a lhe fazer perguntas e oferecer
suposições quanto à sua senha. Ele ficou surpreso que eles pediram apenas algumas perguntas antes que tinha deduzido a
senha. E este era um especialista em segurança!

A conclusão que tiramos destes incidentes é que as pessoas escolhem senhas fracas e facilmente descobertas
mais freqüência do que alguns poderiam esperar. Claramente, as pessoas encontrar algo no processo de senha que
é difícil ou desagradável: Ou as pessoas são incapazes de escolher boas senhas, talvez por causa da pressão da
situação, ou eles temem que eles vão esquecer senhas sólidas. Em ambos os casos, as senhas não são sempre
boas autenticadores.

Adivinhar senhas prováveis

Pense em uma palavra. É a palavra que você pensou de tempo? É incomum? É difícil de soletrar ou pronunciar? A
resposta a todas estas três questões é provavelmente não.

Penetrators procura de senhas perceber essas características muito humanas e usá-los para sua vantagem. Portanto,
penetradores tentar técnicas que são susceptíveis de conduzir ao sucesso rápido. Se as pessoas preferem senhas curtas
para as longas, o penetrador irá planejar para tentar todas as senhas, mas para julgá-los em ordem de comprimento. Há
apenas 26 1 + 26 2 + 26 3 = 18,278 (não maiúsculas e minúsculas) senhas de comprimento de 3 ou menos. Testando que muitas
senhas seria difícil, mas possível para um ser humano, mas o teste de senha repetitivo é um computador fácil
aplicação. A uma taxa assumida de uma senha por milissegundo, todas essas senhas podem ser verificados em 18.278
segundos, quase um desafio com um computador. Mesmo expandindo as tentativas para 4 ou 5 caracteres levanta a
contagem apenas para 475 segundos (cerca de 8 minutos) ou
12.356 segundos (cerca de 3,5 horas), respectivamente.

Esta análise pressupõe que as pessoas escolhem senhas como vxlag e HSH tão frequentemente como eles escolhem
entrar e cerveja. No entanto, as pessoas tendem a escolher nomes ou palavras que possam lembrar. Muitos sistemas de
computação têm verificadores ortográficos que podem ser usados ​para verificar se há erros de ortografia e erros tipográficos
em documentos. Estes verificadores ortográficos, por vezes, levar dicionários on-line das palavras inglesas mais comuns. Uma
contém um dicionário de 80.000 palavras. Tentando todas estas palavras como senhas leva apenas 80 segundos a estimativa
irrealisticamente generosa de um palpite por milissegundo.

Ninguém sabe o que a senha mais popular é, embora alguns conjectura é “password”. Outros mais
comuns são utilizador, abc123, aaaaaa (ou aaaaa ou aaaaaaa), 123456, e asdfg ou QWERTY (o arranjo de
teclas de um teclado). Listas de senhas comuns são
fácil para encontrar (para exemplo,
http://blog.jimmyr.com/Password_analysis_of_databases_that_were_hacked_28_2009.php ). Veja também http://threatpost.com/passwo
Para obter uma lista das senhas mais comuns, obtidos em uma violação de dados da Adobe, Inc. A partir destes exemplos você
pode dizer que as pessoas costumam usar qualquer coisa simples que vem à mente como uma senha, para os atacantes
humanos pode ter sucesso por tentar algumas senhas populares .

senhas-comum, como qwerty, senha, 123456-são usados ​surpreendentemente muitas

vezes. derrotar Ocultação

Mais fácil de adivinhar uma senha é apenas para ler um de uma tabela, como tabela de exemplo mostrado na Tabela
2-2 . O sistema operacional autentica um usuário pedindo um nome e uma senha, que então tem que validar, muito
provavelmente, comparando a um valor armazenado em uma tabela. Mas essa mesa, em seguida, torna-se um tesouro
para os malfeitores: Obtenção a mesa dá acesso a todas as contas porque não contém apenas um, mas todos os IDs de
usuário e suas senhas correspondentes.

TABELA 2-2 Tabela senha Amostra


sistemas operacionais frustrar essa abordagem, armazenando as senhas não em sua forma pública, mas de uma
forma oculta (usando criptografia, que descrevemos mais adiante neste capítulo), como mostrado na tabela 2-3 .
Quando um usuário cria uma senha, o sistema operacional aceita e imediatamente esconde-lo, armazenar a versão
ilegível. Mais tarde, quando o usuário tenta autenticar digitando um ID de usuário e senha, o sistema operacional
aceita tudo o que é digitado, aplica-se a mesma função ocultação, e compara a versão escondido com o que está
armazenado. Se as duas formas iguais, a autenticação passa.

TABELA 2-3 Tabela senha amostra com valores de senha ocultas

Sistemas Operacionais armazenar senhas de forma oculta (criptografada) para que comprometer a lista
de identificação por senha não dá acesso imediato a todas as contas de usuário.

Nós usamos o termo “esconder” no parágrafo anterior, porque às vezes o sistema operacional executa alguma
forma de codificação que não é realmente a criptografia, ou às vezes é uma forma restrita de criptografia. O único
ponto crítico é que o processo seja one-way: Conversão de uma senha para sua forma ocultação é simples, mas
indo para o outro lado (começando com uma versão escondida e derivar a senha correspondente) é efetivamente
impossível. (Por essa razão, em alguns sites, se você esquecer a senha, o sistema pode redefinir sua senha para
um valor novo, aleatório, mas não posso dizer o que sua senha esquecida era.)

Para a autenticação ativa, isto é, entrar identidade e autenticador para ser capaz de acessar um sistema, a maioria dos
sistemas de bloquear um usuário que falha um pequeno número de tentativas de login sucessivas. Esta contagem de falhas
evita que um invasor tentar mais do que alguns palpites. (Note, no entanto, que este recurso de bloqueio dá um atacante uma
maneira de impedir o acesso de um usuário legítimo:. Basta digitar senhas incorretas suficientes para fazer com que o sistema
para bloquear a conta) No entanto, se o atacante obtém uma mesa de senha criptografada e aprende a algoritmo de
ocultação, um programa de computador pode facilmente testar centenas de milhares de suposições em questão de minutos.

Como numerosos estudos neste capítulo confirmada, as pessoas costumam usar uma das poucas senhas
previsíveis. O interceptor pode criar o que é chamado de uma tabela do arco-íris, uma lista das formas ocultas das
senhas comuns, como mostrado na Tabela 2-4 . Pesquisar por entradas coincidentes em uma tabela de senha
interceptado, o intruso pode aprender que Jan de
senha é 123456 e Mike é QWERTY. O atacante ordena a mesa para fazer pesquisa rápida.

TABELA 2-4 Amostra Tabela do arco-íris para senhas comuns

Arco-íris de mesa: lista de pré-computado dos valores populares, tais como senhas

senhas mexidos tem ainda uma outra vulnerabilidade. Observe no Tabela 2-2 que Pat e Roz ambos escolher a
mesma senha. Ambas as cópias terão o mesmo valor escondido, então alguém que intercepta a mesa pode
aprender que os usuários Pat e Roz tem a mesma senha. Sabendo disso, o interceptor também pode adivinhar
que Pat e Roz ambos escolher senhas comuns, e começar a tentar os habituais; quando se trabalha, o outro vai
também.

Para contrariar estas duas ameaças, alguns sistemas usam um pedaço extra chamado de sal. Um sal é um campo extra
de dados diferente para cada usuário, talvez a data em que a conta foi criada, ou uma parte do nome do usuário. O valor sal
é se juntou com a senha antes da combinação é transformado por ocultação. Desta forma, Pat + aaaaaa tem um valor
diferente de ocultação Roz + aaaaaa, como mostrado na Tabela 2-5 . Além disso, um atacante não pode construir uma tabela
de arco-íris, porque as senhas comuns agora têm um componente único, também.
TABELA 2-5 Tabela senha amostra com valores de senhas ocultas personalizados

Sal: componente específico do usuário associado a uma senha criptografada para

distinguir senhas idênticas Ataque exaustiva

em um exaustivo ou força bruta ataque, o atacante tenta todas as senhas possíveis, geralmente em alguma
forma automatizada. Claro, o número de senhas possíveis depende da implementação do sistema de computação
particular. Por exemplo, se as senhas são palavras que consistem de 26 caracteres A-Z e podem ser de qualquer
comprimento de 1 a 8 caracteres, existem 26 1 senhas de 1 caractere, 26 2 senhas de 2 caracteres e 26 8 senhas de 8
caracteres. Portanto, o sistema como um todo tem 26 1 + 26 2 + ... + 26 8 = 26 9 - 1 ˘ 5 * 10 12

ou cinco milhões de milhões de senhas possíveis. Esse número parece bastante intratável. Se tivéssemos que usar um
computador para criar e tentar cada senha a uma taxa de verificação de uma senha por milissegundo, levaria na ordem de
150 anos para testar todas as senhas de oito letras. Mas se pudermos acelerar a busca de uma senha por microssegundo,
o fator trabalho cai para cerca de dois meses. Esta quantidade de tempo é razoável para um atacante para investir se a
recompensa é grande. Por exemplo, um intruso pode tentar força bruta para quebrar a senha em um arquivo de números
de cartão de crédito ou conta bancária.

Mas o tempo break-in pode ser feito ainda mais tratável em uma série de maneiras. Procurando por
uma única senha particular não necessariamente todas as senhas sejam julgados; um intruso precisa
tentar apenas até que a senha correta é identificada. Se o conjunto de todas as senhas possíveis foram
distribuídos uniformemente, um intruso provavelmente precisa tentar apenas metade do espaço a senha:
o número esperado de pesquisas para encontrar qualquer senha particular. No entanto, um intruso
também pode aproveitar a distribuição desigual de senhas. Porque uma senha tem que ser lembrado, as
pessoas tendem a escolher senhas simples; portanto, o intruso deve tentar combinações curtas de
caracteres antes de tentar os mais longos. Esse recurso reduz o tempo médio para encontrar uma
correspondência, pois reduz o subconjunto do espaço senha procurou antes de encontrar um jogo.
Todas estas técnicas para derrotar senhas, combinados com problemas de usabilidade, indicam que precisamos de olhar
para outros métodos de autenticação. Na próxima seção, vamos explorar como implementar a autenticação forte como um
controle contra ataques de personificação. Para outro exemplo de um problema de autenticação, consulte Sidebar 2-3 .

boas senhas

Escolhidos com cuidado, as senhas podem ser autenticadores fortes. O termo “password” implica uma única palavra,
mas você pode realmente usar uma palavra inexistente ou uma frase. Então 2Brn2Bti? poderia ser uma senha (derivado
de “ser ou não ser, eis a questão”), como poderia “PayTaxesApril15th.” Note-se que estas escolhas têm várias
características importantes: As cordas são longas, eles são escolhidos a partir de um grande conjunto de caracteres , e
eles não aparecem em um dicionário. Estas propriedades fazem a senha difícil (mas, é claro, não impossível) para
determinar. Se nós usar senhas, podemos melhorar a sua segurança por algumas práticas simples:

• Utilize outras do que apenas a-z caracteres. Se as senhas são escolhidos a partir das letras a-
z, existem apenas 26 possibilidades para cada caractere. Adicionando dígitos expande o número de possibilidades
para 36. Com ambas as letras maiúsculas e minúsculas mais dígitos expande o número de caracteres possíveis para
62. Embora esta mudança parece pequena, o efeito é grande quando alguém está testando um espaço cheio de
todas as combinações possíveis de caracteres . Demora cerca de 100 horas para testar todas as palavras 6 letras
escolhidos a partir de cartas de apenas um caso, mas leva cerca de 2 anos para testar todas as senhas de 6 símbolos
de letras e algarismos maiúsculas e minúsculas. Apesar de 100 horas é razoável, de 2 anos é opressivo suficiente
para fazer este ataque muito menos atraente.

Sidebar 2-3 Será que o real conde de Buckingham Por favor passo em frente?

Um homem que dizia ser o conde de Buckingham foi identificado como Charlie Stopford, um homem que
havia desaparecido de sua família na Flórida em 1983 e assumiu a identidade de Christopher
Buckingham, um bebê de 8 meses de idade que morreu em 1963. Questionado na Inglaterra em 2005,
após uma verificação de detalhes do passaporte revelou a conexão com o bebê Buckingham falecido,
Stopford foi preso quando ele não sabia outros detalhes familiares correlacionando [ PAN06 ]. (Sua
ocupação no momento de seu consultor de segurança informática prisão?).

As autoridades britânicas sabia que ele não era Christopher Buckingham, mas o que era sua
verdadeira identidade? A resposta só foi descoberto porque sua família nos Estados Unidos pensou que
o reconheceu de fotos e uma notícia: Stopford era um marido e pai que desapareceu há mais de 20
anos antes. Porque ele tinha sido na Marinha dos EUA (em inteligência militar, não menos) e suas
impressões digitais adultos foram em arquivo, as autoridades foram capazes de fazer uma identificação
positiva.

Quanto ao título ele se apropriou para si mesmo, não houve conde de Buckingham desde
1687.
Na sociedade moderna que estamos acostumados a uma trilha de papel cheio documentar eventos desde o
nascimento até a morte, mas nem todo mundo se encaixa perfeitamente nesse modelo. Considere o caso de certas
pessoas que, por várias razões precisam mudar sua identidade.
Quando o governo muda a identidade de alguém (por exemplo, quando uma testemunha se esconde),
a nova identidade inclui registros escolares, endereços, registros de emprego e assim por diante.

Como podemos autenticar a identidade de refugiados de guerra, cuja país de origem pode não existir mais,
deixe o governo civil só e um escritório de registros? O que devemos fazer para autenticar as crianças nascidas
em tribos nômades que mantêm nenhum registro formal de nascimento? Como é que um adulto confirmar uma
identidade depois de fugir de um território hostil, sem espera no escritório de passaportes por duas semanas para
um documento?

• Escolha senhas longas. A explosão combinatória de adivinhação de senha dificuldade começa em torno de
comprimento 4 ou 5. Escolher senhas mais longas torna menos provável que uma senha será descoberto.
Lembre-se que a penetração da força bruta pode parar assim que a senha é encontrado. Alguns
penetradores vai tentar as palavras casos conhecidos fáceis e curtas senhas e passar para outro destino, se
esses ataques falharem.

• Evite nomes ou palavras reais. Teoricamente, existem 26 6, ou cerca de 300 milhões 6 letras “palavras” (ou
seja, qualquer combinação de letras), mas há apenas cerca de
150.000 palavras em um bom dicionário colegiado, ignorando comprimento. Ao escolher um dos por cento
nonwords 99.95, você forçar o atacante a usar uma busca mais de força bruta em vez da busca do dicionário
abreviado.

• Use uma corda que você possa lembrar. Escolha da senha é um duplo vínculo. Para lembrar a senha
facilmente, você quer um que tem um significado especial para você. No entanto, você não quer alguém para ser
capaz de adivinhar este significado especial. Uma senha fácil de lembrar é UcnB2s. Esse amontoado improvável
procurando é uma transformação simples de “você nunca pode ser muito seguro.” As primeiras letras de palavras
de uma canção, algumas letras de diferentes palavras de uma frase particular, ou algo envolvendo uma
pontuação de basquete memorável são exemplos de senhas razoáveis . Mas não ser muito óbvio. ferramentas
de quebra de senha também testar substituições como 0 (zero) para o ou O (letra “oh”) e 1 (um) para l (letra “ell”)
ou $ para S (letra “ess”). Então I10v3U já está no arquivo de pesquisa.

• Use variantes para várias senhas. Com contas, sites e assinaturas, um indivíduo pode facilmente acumular
50 ou 100 senhas, que é claramente demais para lembrar. A menos que você usar um truque. Comece com
uma frase como na sugestão anterior: Ih1b2s (Eu tenho um irmão, duas irmãs). Em seguida, acrescentar
alguns padrões que envolvem as primeiras vogais e consoantes da entidade para a senha: Ih1b2sIvs para a
Visa, Ih1b2sAfc para o Facebook, e assim por diante.

• Alterar a senha regularmente. Mesmo se você não tem nenhuma razão para suspeitar que alguém tenha
comprometido a senha, você deve alterá-lo de vez em quando. Um penetrador pode quebrar um sistema de
senha através da obtenção de uma lista velho ou trabalhar exaustivamente em uma lista criptografada.

• Não anotá-la. Nota: Este conselho honrado é relevante somente se a segurança física é um risco
grave. As pessoas que têm contas em muitas máquinas e servidores, e com muitos aplicativos ou sites,
podem ter dificuldade para lembrar
todos os códigos de acesso. Definir todos os códigos do mesmo ou usando inseguros, mas fáceis de lembrar de
senhas pode ser mais arriscado do que escrever senhas em uma lista bem protegida razoavelmente. (Obviamente,
você não deve gravá o seu PIN para seu cartão de banco ou postar sua senha na tela do computador.)

• Não diga a ninguém. O ataque mais fácil é Engenharia social, em que os contatos atacante
administrador do sistema ou um usuário para obter a senha de alguma forma. Por exemplo, o atacante
pode telefonar para um usuário, afirmam ser “a administração do sistema,” e pedir ao utilizador para
verificar a senha do usuário. Sob nenhuma circunstância você deve nunca forneça sua senha privada;
administradores legítimos pode contornar sua senha se for necessário, e outros estão apenas tentando
enganá-lo.

Estes princípios levar à seleção senha sólido, mas eles levam a um problema diferente: As pessoas
escolhem senhas simples, porque eles têm para criar e lembrar tantas senhas. contas bancárias, acessar
e-mail, serviços de biblioteca, inúmeros sites e outros aplicativos todos parecem exigir uma senha. Não
podemos culpar os usuários por ser tentado a usar uma senha simples para todos eles quando a alternativa é
tentar lembrar dezenas se não centenas de senhas fortes, como discutido na Sidebar 2-4 .

Sidebar 2-4 Usabilidade na pequeno em relação Usabilidade na Grande

Para um desenvolvedor de aplicativos que procuram um controle razoável, uma senha parece ser um
mecanismo simples para proteger um ativo. Mas quando muitos aplicativos exigem senhas, trabalho
simples do usuário de recordar uma ou duas palavras-passe é transformado no pesadelo de manter o
controle de um grande número deles. Na verdade, uma visita ao http://www.passwordbook.com sugere
que os usuários muitas vezes têm dificuldade em gerir uma coleção de senhas. O site apresenta-lhe um
organizador de senha e login que é comprado mais barato e fácil. Nas palavras do vendedor, é “O
gerenciador de senhas completo para o ocupado mestre ou administrador de rede Web ... Seguro e
fácil, livros não cair! Agora você pode gerenciar todas as suas senhas em um livro de capa dura “.

Embora o gerenciamento de uma senha ou token para um aplicativo pode parecer fácil (chamamos isso
de “usabilidade na pequena”), gestão de muitas senhas ou tokens de uma só vez torna-se uma tarefa difícil (
“usabilidade no grande”). O problema de se lembrar de uma grande variedade de itens foi documentado na
literatura de psicologia desde a década de 1950, quando Miller [ MIL56 ] Apontou que as pessoas se lembrar
de coisas quebrando-os em pedaços memoráveis, se eles são dígitos, letras, palavras ou alguma outra
entidade identificável. Miller inicialmente documentado como os adultos jovens tinha uma extensão de
memória de sete (mais ou menos dois) pedaços. Pesquisas posteriores revelaram que a extensão de
memória depende da natureza do pedaço: pedaços mais longos levaram a memória mais curta abrange: sete
para dígitos, seis para letras, e cinco para palavras. Outros fatores afetam extensão de memória de uma
pessoa, também. Cowan [ COW01 ] Sugere que assumimos uma extensão de memória de trabalho de quatro
pedaços para jovens adultos, com vãos mais curtos para crianças e idosos. Por estas razões, a usabilidade
deve informar não apenas a escolha de construção senha apropriada (o pequeno), mas também a própria
arquitetura de segurança (o grande).
Outras coisas conhecidas

Senhas, ou melhor, algo que só o usuário sabe, são uma forma de autenticação forte. As senhas são fáceis de
criar e administrar, barato de usar, e fácil de entender. No entanto, os usuários muitas vezes escolher senhas que
sejam fáceis para eles para lembrar, mas não por coincidência fácil para os outros adivinharem. Além disso, os
usuários podem esquecer de senhas ou dizer-lhes para os outros. Senhas vêm do fator de autenticação de algo
que o usuário conhece, e, infelizmente, o cérebro das pessoas são imperfeitos.

Consequentemente, várias outras abordagens para “algo que o usuário sabe” têm sido propostos. Por exemplo, Sidebar
2-5 descreve abordagens de autenticação empregando o conhecimento do usuário em vez de uma senha. No entanto,
técnicas de autenticação pouco conhecimento do usuário ter sido testado e poucos escalar em qualquer forma útil; estas
abordagens ainda estão sendo investigadas.

Sidebar 2-5 Usando padrões pessoais para autenticação


Lamande [ LAM10 ] Relata que o sistema de autenticação GrIDSure
( http://www.gridsure.com ) Foi integrado plataforma Unified Access Gateway (UAG) da Microsoft. Este sistema
permite que um usuário para autenticar-se com um código de acesso de uma só vez com base em um padrão de
quadrados escolhidos a partir de uma grade. Quando o usuário deseja acesso, ela é apresentado com uma grade
contendo números atribuídos aleatoriamente; Ela, então, entra como seu código de acesso os números que
correspondem ao seu padrão escolhido. Porque os números de grade exibidas mudar cada vez que a rede é
apresentado, o padrão permite que a senha digitada para ser um código único. GrIDSure é uma tentativa de
dimensionar uma abordagem “o conhecimento do usuário” de usabilidade no pequeno a usabilidade no geral.
Muitos pesquisadores (ver, por exemplo, [ SAS07 ,

BON08 e BID09 ]) Examinaram aspectos da segurança e usabilidade do GrIDSure, com resultados


mistos. Ele continua a ser visto como o uso de GrIDSure compara com o uso de uma coleção de
senhas tradicionais.

Similarmente, o produto ImageShield a partir Technologies Confident


( www.confidenttechnologies.com ) Pede um usuário se inscrever, escolhendo três categorias de uma lista; as
categorias podem ser gatos, carros e flores, por exemplo. Em seguida, no momento da autenticação, o
usuário é mostrada uma grade de fotos, alguns a partir de categorias do usuário e outros não. Cada foto tem
uma letra 1 caracteres ou número. seqüência de acesso de um tempo do usuário são os personagens
ligados às imagens de categorias pré-selecionadas do usuário. Então, se as imagens incluído um gato com
etiqueta A, uma flor com etiqueta 7 e sete outras imagens, o valor de acesso do usuário seria A7. As
imagens, personagens e posições mudar para cada acesso, então o autenticador difere de forma
semelhante.

esquemas de autenticação como este são baseados em puzzles simples que o usuário pode resolver
facilmente, mas que um impostor seria incapaz de adivinhar com sucesso. No entanto, com novos
esquemas de autenticação, temos que estar conscientes do fenómeno da usabilidade na pequena ea
grande: Pode um usuário lembrar quadrados em uma grade e categorias de fotos e um local de férias
favorito e a fórmula 2a + c e muitos outros as coisas não óbvias?
Questões de segurança

Em vez de senhas, algumas empresas usam perguntas para as quais (presumivelmente), apenas a pessoa certa
saberia a resposta. Tais questões incluem o nome da mãe de solteira, nome da rua, desde a infância, modelo do
primeiro automóvel, eo nome do professor favorito. O usuário escolhe perguntas relevantes e fornece as respostas ao
criar uma identidade.

O problema com tais questões é que as respostas para algumas pode ser determinado com pouca dificuldade, como foi
o caso para a conta de e-mail de Sarah Palin. Com o número de registros públicos disponíveis online, nome de solteira da
mãe e nome de rua estão frequentemente disponíveis, e amigos da escola podia adivinhar um pequeno número de
possíveis professores favoritos. Anitra Babic e colegas [ BAB09 ] Documentado a fraqueza de muitos dos sistemas de
interrogação supostamente secretas de uso corrente. Joseph Bonneau e Sören Preibusch [ BON10 ] Fez um levantamento
detalhado de métodos de autenticação do site e encontrou pouca uniformidade, muitas fraquezas, e nenhuma correlação
aparente entre o valor dos dados de um site e seus requisitos de autenticação.

As senhas estão se tornando opressiva como muitos sites agora pedir aos usuários para entrar Mas, quando confrontados
com um sistema que é difícil de lidar, os usuários muitas vezes tomar o caminho fácil:. Escolhendo uma senha fácil e reutilizá-lo
em muitos sites. Para superar essa fraqueza, alguns sistemas utilizam uma forma de autenticação que não pode ser roubado,
duplicado, esquecido, emprestado, ou perdido: propriedades do usuário, como discutiremos na próxima seção. A tecnologia para
a passagem de características pessoais para um servidor remoto requer mais do que um teclado e um dispositivo apontador, mas
tais abordagens estão se tornando mais viável, especialmente a respeito de violações de mesa senha aumentar.

Autenticação baseada em biometria: algo que você está Biometrics são propriedades biológicas, com base
em alguma característica física do corpo humano. A lista de tecnologias de autenticação biométrica ainda está
crescendo. Agora dispositivos pode reconhecer os seguintes dados biométricos:

• impressão digital

• a geometria da mão (forma e tamanho dos dedos)

• retina e íris (partes do olho)


• voz
• caligrafia, assinatura, movimento da mão
• características de digitação

• vasos sanguíneos no dedo ou a mão


• face
• características faciais, como a forma do nariz ou o espaçamento olho

Autenticação com biometria tem vantagens sobre senhas porque um biométrica não pode ser perdido, roubado
esquecidos, ou partilhada e está sempre disponível, sempre à mão, por assim dizer. Estas características são difíceis, se
não impossíveis, de falsificar.

Exemplos de biométricas Authenticators

Muitas características físicas são possibilidades, como autenticadores. Nesta seção,


apresentam exemplos de dois deles, um para o tamanho e forma da mão, e uma para os padrões de veias na
mão.

Figura 2-2 mostra um leitor geometria da mão. O utilizador coloca a mão sobre os sensores, que detectam comprimentos e
larguras de dedos, a curvatura, e outras características.

FIGURA 2-2 Mão Geometria Reader (Graeme Dawes / Shutterstock) um dispositivo de


autenticação da Fujitsu lê o padrão das veias da mão. Este dispositivo não requer contato físico entre a mão e
o leitor, o que é uma vantagem para a higiene. O fabricante reivindica uma taxa de aceitação falsa de 0,00008
por cento e taxa de falsa rejeição de 0,01 por cento, com um tempo de resposta inferior a um segundo. Figura
2-3
mostra este dispositivo embutido em um mouse de computador, de modo que o usuário é automaticamente autenticado.

FIGURA 3/2 Mão Leitor Vein (permissão para a imagem uma cortesia da Fujitsu
Frontech)

Problemas com utilização de dados biométricos

Biometrics vêm com vários problemas:

• Biometrics são relativamente Novo, e algumas pessoas acham seu uso intrusiva. Por exemplo, as pessoas em
algumas culturas são insultados por ter que submeter-se a impressões digitais, porque eles pensam que apenas os
criminosos são impressões digitais. A geometria da mão e reconhecimento de rosto (que pode ser feito a partir de
uma câmera através do quarto) são pouco invasivo, mas as pessoas têm preocupações reais sobre perscrutando um
feixe de laser ou furar um dedo em um slot. (Vejo [ SCH06a ] Para alguns exemplos de pessoas resistindo biometria.)

• dispositivos de reconhecimento são biométricos dispendioso, embora, como os dispositivos se tornam mais populares, o
seu custo por dispositivo deve ir para baixo. Ainda assim, equipar estação de trabalho de cada usuário com um leitor pode
ser caro para uma grande empresa com muitos funcionários.

• leitores biométricos e comparações podem tornar-se um ponto unico de falha.


Considere uma aplicação de varejo em que um reconhecimento biométrico está ligada a um regime de pagamento: Como
um usuário coloca, “Se meu cartão de crédito não consegue registrar, eu posso sempre tirar um segundo cartão, mas se
a minha impressão digital não for reconhecida, tenho . só isso um dedo”(reconhecimento de impressão digital é
específico para um único dedo; o padrão de um dedo não é o mesmo que outro.) trabalhadores manuais pode realmente
esfregar fora suas impressões digitais ao longo do tempo, e uma irritação sore ou pode confundir um leitor de impressões
digitais . Esquecer uma senha é culpa de um usuário; falhando autenticação biométrica não é.

• Todos os leitores biométricos usar amostragem e estabelecer uma limite para a aceitação de uma estreita
correspondência. O dispositivo tem de provar a biométrica, medir frequentemente centenas de pontos-chave, e
comparar esse conjunto de medições com um molde. Os recursos variam ligeiramente de uma leitura para outra, por
exemplo, se o seu rosto é inclinado, se você pressionar um lado de um dedo mais do que o outro, ou se sua voz é
afetado por uma infecção do sinus. Variação reduz a precisão.

• Embora a precisão equipamento está melhorando, leituras falsas ainda ocorrem. Nós rotular um falso positivo ou falsa
aceitar uma leitura que é aceito quando deveria ser rejeitada (isto é, o autenticador não corresponder) e um falso
negativo ou falsa rejeitar aquele que rejeita quando deveria aceitar. Muitas vezes, reduzindo uma taxa de falsos
positivos aumenta falsos negativos, e vice-versa. Sidebar 2-6 explica porque nunca podemos eliminar todos os falsos
positivos e negativos. As consequências para um falso negativo são geralmente menos do que para um falso
positivo, de modo que um sistema aceitável pode ter uma taxa de falsos positivos de 0,001 por cento, mas uma taxa
de falsos negativos de 1 por cento. No entanto, se a população é grande e ativo extremamente valioso, mesmo
essas pequenas percentagens podem levar a resultados catastróficos.

Falso-positivo: incorretamente confirmando uma identidade. Falso

negativo: incorretamente negando uma identidade.


Sidebar 2-6 Que falsos positivos e negativos significam realmente

sistemas de triagem deve ser capaz de julgar o grau em que os seus regimes de correspondência funcionam
bem. Ou seja, eles devem ser capazes de determinar se eles estão efetivamente identificar aquelas pessoas que
são procurados enquanto não prejudicar aquelas pessoas que não são procurados. Quando um sistema de
triagem compara algo que tem (como uma impressão digital armazenada) com algo que está medindo (tais como
as características de um dedo), nós chamamos isso de um sistema dicotômico ou teste: Não quer é um jogo ou
não existe.

Podemos descrever a dicotomia usando um padrão de referência, conforme ilustrado na


Tabela 2-6 , abaixo. O Padrão de Referência é o conjunto de regras que determina quando um teste
positivo significa um resultado positivo. Queremos evitar dois tipos de erros: falsos positivos (quando
houver uma correspondência, mas não deve ser) e falsos negativos (quando não há jogo, mas deve ser).

TABELA 2-6 Referência padrão para descrever testes dicotômicos podemos medir o sucesso da tela
usando quatro medidas padrão: sensibilidade, prevalência, precisão e especificidade. Para ver como eles
funcionam, vamos atribuir variáveis ​para as entradas no Tabela 2-6 , como mostrado em Tabela 2-7 .

TABELA 2-7 Padrão de referência com variáveis

Sensibilidade medidas do grau em que a tela seleciona aqueles cujos nomes correspondem corretamente a
pessoa procurada. É a proporção de resultados positivos entre todas as combinações corretas possíveis e é
calculado como a / (a + c). especificidade mede a proporção de resultados negativos entre todas as pessoas que não
são procurados; ele é calculado como d / (b + d). Sensibilidade e especificidade de descrever a forma como um teste
de discriminação entre casos com e sem uma determinada condição.

Precisão ou eficácia mede o grau em que o teste ou tela corretamente bandeiras a condição ou a
situação; ela é medida como ( uma + d) / (uma + b + c + d). predomínio diz-nos como comum uma determinada
condição ou situação. Ela é medida como ( uma + c) / (uma + b + c + d).

A sensibilidade e especificidade são estatisticamente relacionado: Quando uma aumenta, o outro diminui.
Assim, você não pode simplesmente dizer que você está indo para reduzir ou eliminar falsos positivos; tal
ação é certeza de aumentar os falsos negativos. Em vez disso, você tem que encontrar um equilíbrio entre um
número aceitável de falso
positivos e falsos negativos. Para nos ajudar, nós calcular o valor preditivo positivo de um teste: um número
que expressa quantas vezes uma correspondência positiva na verdade representa a identificação da pessoa
procurada. O valor preditivo positivo é a / (a + b). Da mesma forma, podemos calcular a valor preditivo negativo do
teste quanto d / (c + d). Podemos usar os valores preditivos para nos dar uma idéia de quando um resultado é
provável que seja positivo ou negativo. Por exemplo, um resultado positivo de uma condição que tem alta
prevalência é provável que seja positivo. No entanto, um resultado positivo para uma condição incomum é
provável que seja um falso positivo.

A mudança de sensibilidade e especificidade para um determinado teste, dependendo do nível do teste que
define um jogo. Por exemplo, o teste poderia chamá-lo de um jogo só se for uma correspondência exata: 'Smith'
apenas 'Smith' combinaria Tal critério de correspondência teria menos resultados positivos (isto é, menos
situações consideradas para combinar) do que aquele que usa Soundex para declarar que dois nomes são os
mesmos: 'Smith' é o mesmo que 'Smythe,' 'Smeth,' 'Smitt ', e outros nomes sonantes semelhante. Por
conseguinte, os dois testes variar na sua sensibilidade. O critério Soundex é menos rigoroso e é susceptível de
produzir resultados mais positivos; por conseguinte, é o ensaio mais sensível, mas menos específico. Em geral,
considere a gama de sensibilidades que podem resultar como alterar os critérios de teste. Podemos melhorar a
sensibilidade, fazendo o critério para um teste positivo menos rigoroso. Da mesma forma, podemos melhorar a
especificidade fazendo o critério para uma mais rigorosa teste positivo.

UMA características operacionais do receptor ( ROC) curva é uma representação gráfica da trade-off entre
os falsos negativos e taxas positivas falsas. Tradicionalmente, o gráfico de ROC mostra a taxa de falso
positivo (1 - especificidade) no eixo x e a taxa verdadeira positiva (sensibilidade ou 1 - a taxa de falso
negativo) no eixo dos y. A precisão do teste corresponde à área sob a curva. Uma área de 1 representa o
teste perfeita, enquanto que uma área de 0,5 é um teste inútil. Idealmente, nós queremos um teste para ser
tão extrema esquerda e tão alto no gráfico quanto possível, o que representa um teste com uma alta taxa de
verdadeiros positivos e uma baixa taxa de falsos positivos. Ou seja, quanto maior a área sob a curva, mais o
teste é identificar verdadeiros positivos e minimizar os falsos positivos. Figura 2-4 mostra exemplos de curvas
ROC e a sua relação com a sensibilidade e especificidade.
Figura 2-4 Curvas ROC

Para um sistema de correspondência ou de triagem, como para qualquer teste, os administradores de


sistema deve determinar quais os níveis de sensibilidade e especificidade são aceitáveis. Os níveis depender
da intenção do teste, a configuração, a prevalência do critério alvo, métodos alternativos para realizar o
mesmo objectivo, e os custos e benefícios de teste.

• o Rapidez em que o reconhecimento deve ser feito precisão limites. Poderíamos idealmente gostaria de ter
várias leituras e mesclar os resultados ou avaliar o ajuste mais próximo. Mas a autenticação é feita para
permitir que um usuário para fazer algo: a autenticação não é o objetivo final, mas um portão mantendo o
usuário da meta. O usuário compreensivelmente quer passar o portão e torna-se frustrado e irritado se a
autenticação leva muito tempo.

• Embora nós gostamos de pensar da biometria como peças únicas de um indivíduo,


falsificações e possivel. Alguns exemplos de falsificações são descritos em Sidebar 2-7 .

Biometrics depender de uma característica física que pode variar de um dia para o outro ou com a idade. Considere as
suas mãos, por exemplo: Em alguns dias, a temperatura, o seu nível de atividade, ou outros fatores podem fazer com que
suas mãos a inchar, distorcendo assim as características físicas dos seus mãos. Mas uma autenticação não deve falhar
apenas porque o dia é quente. reconhecimento biométrico também depende de como a amostra é colhida. Para geometria
da mão, por exemplo, você coloca sua mão em um modelo, mas medições irá variar um pouco dependendo exatamente
como você posiciona sua mão.

Barra lateral 2-7 biométricos Forgeries

O falso mais famoso foi uma impressão digital artificial produzido por pesquisadores no Japão usando gelatina baratos e
prontamente disponíveis. Os pesquisadores usaram moldes feitos pressionando dedos vivas contra eles ou por
processamento de imagens de impressões digitais a partir de impressões sobre superfícies de vidro. O resultado do
“dedos” de goma foram frequentemente aceites pelos 11 dispositivos de impressão digital particulares com sensores
ópticos ou capacitivos.
[ MAT02 ]
De acordo com outra história de notícias BBC (13 março, 2013) um médico no Brasil foi pego com
dezesseis dedos: dez autêntica e seis de silicone que ela usou para fazer login no sistema de tempo-card
do hospital em nome de colegas médicos.

Num estudo publicado em 2014 [ BOW14 ], Os pesquisadores analisaram se as lentes de contato pode ser
usado para enganar os dispositivos de autenticação que olhar para o padrão da íris (o anel colorida do olho). O
objetivo da pesquisa era determinar se os sistemas de reconhecimento de íris detectar com segurança
verdadeiros positivos; isto é, se um sujeito vai ser confiavelmente autenticado pelo sistema. Os pesquisadores
demonstraram que as lentes de contato coloridas podem enganar o sistema em negar um jogo quando se
realmente existe. Um assunto pode aplicar lentes de contato, a fim de não ser notado como um criminoso
procurado, por exemplo. Embora difícil e incomum, falsificação será um problema sempre que a recompensa
para um resultado falso é alta o suficiente.

Autenticação com biometria utiliza um padrão ou molde, bem como uma linha de base, que representa a medição da
característica. Quando você usa um biométrica para autenticação, um conjunto atual de medições é tomada e em
comparação com o modelo. A amostra atual não precisa corresponder exatamente ao modelo, no entanto. Autenticação
bem-sucedido se o jogo é “suficientemente próximo”, o que significa que está dentro de uma tolerância pré-definida, por
exemplo, se 90 por cento dos valores corresponder ou se cada parâmetro está dentro de 5 por cento do seu valor esperado.
Medição, comparação e avaliação de proximidade para o jogo leva tempo, certamente mais do que a “correspondência
exacta ou não” comparação de senhas. (Considere o resultado descrito em Sidebar 2-8 .) Portanto, a velocidade e precisão
da biometria é um fator na determinação da sua adequação para um determinado ambiente de uso.

partidas biométricos não são exatas; a questão é se a taxa de falsos positivos e


falsos negativos é aceitável.

Lembre-se que a identificação está afirmando uma identidade, enquanto a autenticação é confirmar a identidade,
conforme ilustrado na Figura 2-5 . Biometrics são confiáveis ​para autenticação, mas são muito menos confiáveis ​para a
identificação. A razão é matemática. Todos os leitores biométricos operar em duas fases. Em primeiro lugar, um
utilizador regista com o leitor, tempo durante o qual uma característica do utilizador (por exemplo, a geometria da
mão) é capturado e reduzido a um conjunto de pontos de dados. Durante o registro, o usuário pode ser solicitado a
apresentar a mão várias vezes para que o software de registro pode ajustar para variações, tais como a forma como a
mão é posicionada. Registro produz um padrão, chamado de modelo, dos dados aponta particular a um usuário
específico. Na segunda fase o usuário posteriormente busca de autenticação do sistema, durante o qual o sistema
volta a medir a mão e compara as novas medições com o modelo armazenado. Se a nova medida é perto o suficiente
para o modelo, o sistema aceita a autenticação; caso contrário, o sistema rejeita. 2- barra lateral 9 assinala o problema
na identificação confusa e autenticação.
Figura 2-5 Identificação e Autenticação (cortesia de Lfoxy / Shutterstock
[esquerda]; Schotter Estúdio / Shutterstock [direita])

Sidebar 2-8 Fingerprint Capture-Não tão rápido!


A gravação ou a captura de impressões digitais deve ser um processo simples. Alguns países utilizam impressões
digitais para monitorar visitantes estrangeiros que entram no país, e por isso eles querem saber o impacto no
processamento de visitantes na fronteira. Na televisão e nos filmes, parece como se a obtenção de uma boa imagem
de impressão digital leva apenas um ou dois segundos.

Pesquisadores do Instituto Nacional de Padrões e Tecnologia (NIST) realizaram um experimento


controlado, envolvendo mais de 300 pacientes geralmente representativos da população dos Estados Unidos [ THE07
]. Eles descobriram que, ao contrário de televisão, a obtenção de uma amostra de qualidade de todos os dez
dedos leva entre 45 segundos e um minuto.

2-9 ADN barra lateral para a identificação ou a autenticação

Em dezembro de 1972, uma enfermeira em San Francisco foi sexualmente agredida e brutalmente
assassinada em seu apartamento. A dona da casa, que confrontou um homem como ele correu para fora do
apartamento, deu uma descrição física para a polícia. Na cena do crime, a polícia recolheu provas, incluindo
amostras de DNA do assassino assumido. Após meses de investigação, no entanto, a polícia foi incapaz de se
concentrar em um suspeito e o caso acabou por ser relegado para a pilha de casos não resolvidos.

Trinta anos depois, o Departamento de Polícia de San Francisco tinha uma bolsa para usar o DNA para resolver
casos em aberto e, após a reabertura do caso 1972, eles encontraram um slide com uma amostra de DNA deteriorada.
Para fins de investigação, os cientistas isolar 13 traços, chamados marcadores, em uma amostra de DNA. As chances
de duas pessoas diferentes correspondentes em todos os 13 marcadores é de 1 em 1 quatrilhão (1 * 10 15). No entanto,
como
descrito em um Los Angeles Times história de Jason Felch e Maura Dolan [ FEL08 ], A idade da amostra, neste
caso, tinha-se deteriorado e apenas 5 ½ de 13 marcadores são fiáveis. Com apenas que muitos marcadores,
a probabilidade de que duas pessoas iria coincidir com gotas de 1 em 1,1 milhões, e lembre-se que, para
efeitos aqui, combinando DNA duas pessoas significa pelo menos uma amostra não é o criminoso de.

Em seguida, a polícia queria comparar a amostra com o banco de dados do estado da Califórnia de amostras de DNA
de criminosos condenados. Mas para executar tal comparação, os administradores necessitam de pelo menos 7
marcadores e polícia tinha apenas 5 ½. Para pesquisar a base de dados, a polícia usou valores de dois outros
marcadores que eram demasiado fraca para ser considerados conclusivos. Com sete marcadores, a polícia entrevistou o
banco de dados de
338.000 e veio com um jogo, um homem posteriormente julgado e condenado por este crime, um homem cuja
advogados de defesa fortemente acreditam que é inocente. Ele não tinha qualquer ligação com a vítima, suas
impressões digitais não encontrou nenhum coletadas na cena do crime, e sua condenação anterior por um crime
sexual tinha um padrão diferente.

A questão é que a polícia está usando o jogo DNA como um identificador, não um autenticador. Se a polícia
tem outras evidências contra um suspeito particular e partidas de DNA do suspeito que encontraram na cena
do crime, a probabilidade de uma correta aumenta identificação. No entanto, se a polícia está procurando
apenas para encontrar alguém cujo DNA corresponde a uma amostra, a probabilidade de uma falsa partida
aumenta drasticamente. Lembre-se que com um 1 em 1,1 milhões falso taxa de partida, se montou 1,1 milhões
de pessoas, seria de esperar que seria falsamente coincidir com a sua amostra, ou com 0,5 milhões de
pessoas que você pensaria que a probabilidade de um jogo para ser aproximadamente 1 em 2. A
probabilidade de uma falsa partida cai para 1 em

1,1 milhões de pessoas somente se você examinar apenas uma pessoa.

Pense desta analogia: Se você comprar um bilhete de loteria em uma loteria de 1,1 milhões de bilhetes, suas
chances de ganhar são de 1 em 1,1 milhões. Se você comprar dois bilhetes, suas chances aumentam para 2 em
1,1 milhões, e se você comprar 338.000 bilhetes suas chances tornam-se 338.000 em 1,1 milhões, ou
aproximadamente 1 em 3. Por esta razão, quando se busca a identificação, não autenticação, tanto o DNA do
FBI conselho consultivo e um painel do Conselho Nacional de Pesquisa recomendo multiplicando a
probabilidade geral (1 em 1,1 milhões) pelo número de amostras no banco de dados para derivar a probabilidade
de um random-inocente-jogo.

Apesar de não saber se a pessoa condenada neste caso era culpado ou inocente, o
raciocínio lembra-nos que ter cuidado para distinguir entre a identificação e autenticação.

Precisão do Biometrics

Nós pensamos de biometria, ou qualquer autenticação tecnologia como binário: Uma pessoa ou passa ou não, e se nós
apenas definir os parâmetros corretamente, a maioria das pessoas certas irá passar ea maioria das pessoas erradas irá
falhar. Ou seja, o mecanismo não discrimina. Na verdade, o processo é tendencioso, causada pelo equilíbrio entre
sensibilidade e seletividade: Algumas pessoas são mais propensos a passar e outros mais probabilidade de falhar. Sidebar
2-10 descreve como isso pode acontecer.

Até recentemente a polícia eo sistema de justiça assumido que as impressões digitais são únicas.
No entanto, não há realmente nenhuma base matemática ou científica para essa suposição. Na verdade, a identificação de impressões
digitais tem sido mostrado para ser falíveis, e ambos os sistemas de comparação de impressões digitais humanas e informatizados
também têm mostrado falhas. Parte do problema comparação diz respeito ao fato de que não é uma impressão digital inteira é comparado,
apenas características em cumes significativos na impressão. Assim, os seres humanos ou máquinas de examinar apenas características
marcantes, o chamado modelo dessa impressão.

A autenticação biométrica significa um assunto corresponde a um modelo de perto o suficiente. “Close”


é um parâmetro do sistema que pode ser ajustado.

A menos que cada modelo é único, isto é, duas pessoas não têm os mesmos valores, o sistema não pode identificar
exclusivamente assuntos. No entanto, desde que um impostor é improvável que tenha o mesmo modelo biométrico como o usuário
real, o sistema pode autenticar. Na autenticação não olhar através de todos os modelos para ver quem pode corresponder a um
conjunto de recursos medidos; nós simplesmente determinar se características de uma pessoa igualar o seu modelo armazenado.
A autenticação biométrica é praticável hoje; identificação biométrica é em grande parte ainda um tema de pesquisa.

Medindo a precisão de autenticação biométrica é difícil porque a autenticação não é único. Em um cenário experimental, para
qualquer assunto ou coleção de assuntos podemos calcular os falsos taxas positivas negativos e falsos porque sabemos que os
sujeitos e suas verdadeiras identidades. Mas não podemos extrapolar esses resultados para o mundo e perguntar como muitas
outras pessoas poderiam ser autenticado como alguma pessoa. Estamos limitados porque a nossa população de pesquisa e
configuração pode não refletir o mundo real. fornecedores de produtos fazem muitas reclamações sobre a precisão dos dados
biométricos ou uma característica biométrica particular, mas alguns pesquisadores independentes têm realmente tentou
fundamentar as alegações. Em uma experiência descrita no Sidebar 2-11 , Examinadores de impressões digitais de especialistas,
as pessoas que testemunham sobre a evidência de impressões digitais em julgamentos, falhou por algum tempo.

Sidebar 2-10 pessoas lá banal?


Há pessoas para quem um sistema biométrico simplesmente não funciona? Que há, são as pessoas, por
exemplo, cujas características são tão indistinguíveis eles vão sempre passar por outra pessoa?

Doddington et al. [ DOD98 ] Sistemas examinados e usuários a encontrar exemplos específicos de pessoas que
tendem a ser falsamente rejeitada invulgarmente muitas vezes, aqueles cujas perfis de outros assuntos tendem a
coincidir com invulgarmente muitas vezes, e aqueles que tendem a coincidir com invulgarmente muitos perfis.

Para estas classes Yager e Dunstone [ YAG10 ] Adicionou pessoas que são susceptíveis de corresponder e causar
altas taxas de falsos positivos e aquelas pessoas que não são susceptíveis de corresponder si ou qualquer outra
pessoa. Os autores, em seguida, estudou diferentes algoritmos de análise biométrica em relação a esses casos difíceis.

Yager e Dunstone citou uma crença popular de que 2 por cento da população têm impressões digitais que são
inerentemente difícil de igualar. Depois de analisar um grande banco de dados de impressões digitais (a coleção
US-VISIT de impressões digitais de visitantes estrangeiros para os Estados Unidos) concluíram que poucos, se
houver, as pessoas são intrinsecamente difícil de igualar, e certamente não 2 por cento.
Eles examinaram tecnologias biométricas específicas e descobriu que alguns dos erros
relacionados com a tecnologia, e não para as pessoas. Por exemplo, eles olharam para um
banco de dados de sistemas de reconhecimento de pessoas iris não conseguiu igualar, mas
eles descobriram que muitas dessas pessoas estavam usando óculos quando matriculados
no sistema; Eles especulam que os óculos tornou mais difícil para o sistema para extrair os
recursos do padrão da íris do indivíduo. Em outro caso, eles olharam para um sistema de
reconhecimento de face. Eles descobriram que as pessoas o sistema não conseguiu igualar
veio de um grupo étnico particular e especulou que o algoritmo de análise tinha sido ajustado
para distinções de rostos de outro grupo étnico. Portanto,

Ainda assim, para os sistemas biométricos que eles estudaram, descobriram que para um algoritmo de
característica e análise específica, alguns dos usuários características desempenho melhor do que outros usuários
características. Esta pesquisa reforça a necessidade de aplicar cuidadosamente tais sistemas para que
inerente limitações do algoritmo,
computação, ou o uso não afetam desproporcionalmente o resultado.

Sidebar 2-11 Examinadores de impressão digital cometer erros

Um estudo apoiado por os EUA Federal Bureau of Investigation [ ULE11 ] Abordou a validade da avaliação
dos peritos de impressões digitais. Experimentadores apresentou 169 examinadores profissionais com
pares de impressões digitais de um pool de 744 impressões para determinar se as impressões
correspondidas. Esta experiência foi concebida para medir a exactidão (grau em que dois examinadores
iria chegar à mesma conclusão) e fiabilidade (grau em que um examinador iria chegar à mesma conclusão
duas vezes). Examinou-se um total de 4.083 pares de impressões digitais.

Dos pares analisados, seis foram incorrectamente marcados como corresponde, para uma taxa de falsos positivos
de 0,01 por cento. Embora os seres humanos são reconhecidos como falível, frustrantemente não podemos prever
quando será assim. Assim, em um cenário da vida real, esses falsos positivos poderia representar seis noncriminals
falsamente considerado culpado. A taxa de falso negativo foi significativamente maior, de 7,5 por cento, talvez
refletindo o conservadorismo por parte dos examinadores: Os examinadores eram mais propensos a ser convencido
de um verdadeiro jogo do que para ser convencido de um nonmatch.

A questão de falsos positivos em correspondência de impressões digitais ganharam destaque após um erro
amplamente divulgada relacionada aos atentados em 2004, de trens em Madri, Espanha. Brandon Mayfield, um
advogado americano vivendo em Oregon, foi preso porque o FBI combinava com a sua impressão digital com uma
cópia encontrada em um saco plástico contendo detonador tampas na cena do crime. Em 2006, o FBI admitiu que
tinha classificado incorretamente as impressões digitais como “um jogo absolutamente indiscutível.”

A autenticação é essencial para um sistema de computação, porque a identificação do usuário precisa é a chave para direitos de
acesso individuais. A maioria dos sistemas operacionais e administradores de sistema de computação tenha aplicado medidas
razoáveis ​mas rigorosos de segurança para bloquear usuários não autorizados antes que eles possam acessar recursos do sistema.
Mas, como relatado em 2- barra lateral 12 , Às vezes um mecanismo inapropriado é forçado em uso como um dispositivo de
autenticação.
Perder ou esquecer a autenticação biométrica é praticamente impossível devido a biometria contar
com características humanas. Mas as características podem mudar ao longo do tempo (acho que da cor
do cabelo ou peso); por conseguinte, a autenticação biométrica pode ser menos preciso do que a
autenticação à base de conhecimento. Você quer saber a senha ou você não. Mas uma impressão digital
pode ser um jogo de 99 por cento ou 95 por cento ou 82 por cento, parte da variação dependendo de
fatores tais como a forma de posicionar o dedo como a impressão é lido, se o seu dedo está ferido, e se
a tua mão é frio ou o seu a pele é seca ou sujo. O estresse também pode afetar fatores biométricos, tais
como reconhecimento de voz, potencialmente trabalhando contra a segurança. Imagine uma situação
crítica em que você precisa para acessar seu computador com urgência, mas o seu ser agitado afeta sua
voz.

A biometria pode ser razoavelmente rápido e fácil, e às vezes pode ajustar a sensibilidade e especificidade
para equilibrar resultados falsos positivos e falsos negativos. Mas porque biometria exigem um dispositivo para ler,
sua utilização para autenticação remota é limitado. O terceiro fator de autenticação, algo que você ter, oferece
pontos fortes e fracos diferentes dos outros dois fatores.

Sidebar 2-12 usando cookies para autenticação


Na web, os cookies são frequentemente usados ​para autenticação. Um cookie é um par de itens de dados
enviados para o navegador web pelo site visitado. Os itens de dados consistem em uma chave e um valor,
projetado para representar o estado atual de uma sessão entre um usuário visita eo site visitado. Uma vez
que o cookie é colocado no sistema do usuário (geralmente em um diretório com outros cookies), o
navegador continua a usá-lo para a interação posterior entre o usuário e o site. Cada cookie é suposto ter
uma data de expiração, mas essa data pode ser longe no futuro, e ele pode ser modificado mais tarde ou até
mesmo ignorados.

Por exemplo, Jornal de Wall Street 'S website, wsj.com, cria um cookie quando um usuário primeiros registros
em em transações posteriores, o cookie funciona como um identificador.; o usuário não precisa mais de uma
senha para acessar o site. (Outros sites usam o mesmo ou uma abordagem semelhante.)

Os usuários devem ser protegidos da exposição e falsificação. Ou seja, os usuários não podem querer que o
resto do mundo para saber o que sites que eles visitaram. Nem eles vão querer alguém para examinar
informações ou comprar mercadorias em linha por representação e fraude. E, além disso, em um computador
compartilhado, um usuário pode agir como outra pessoa se o local de recebimento usa um cookie para executar
a autenticação automática.

Sente-se e Fu [ SIT01 ] Salientar que os cookies não foram projetados para proteção. Não há maneira de
estabelecer ou confirmar a integridade de um biscoito, e nem todos os sites criptografar as informações em seus
cookies.

Sente-se e Fu também apontam que o sistema operacional do servidor devem ser particularmente
vigilantes para proteger contra a espionagem: “A maioria [de tráfego web] trocas não use [encriptação] para
proteger contra a espionagem; qualquer pessoa na rede entre os dois computadores podem ouvir o tráfego. A
menos que um servidor leva forte
precauções, um intruso pode roubar e reutilizar um cookie, representando um usuário indefinidamente.”(In Capítulo
6 descrevemos como a criptografia pode ser usado para proteger contra tais escutas.)

Autenticação Baseada em Tokens: algo que você tem

Algo que você tem significa que você tem um objeto físico em sua posse. Um autenticador físico com o qual você
provavelmente está familiarizado é uma chave. Quando você coloca sua chave na sua fechadura, os sulcos na chave
interagir com pinos na fechadura para permitir que o mecanismo de giro. Em certo sentido, o bloqueio autentica-lo para a
entrada autorizada porque você possui uma chave apropriada. Claro, você pode perder sua chave ou duplicá-lo e dar o
duplicado para outra pessoa, de modo que a autenticação não é perfeito. Mas é preciso: Somente as obras fundamentais, e
sua chave só funciona seu bloqueio. (Para este exemplo, nós intencionalmente ignoram chaves mestras.)

Outros exemplos familiares de fichas são distintivos e carteiras de identidade. Você pode ter um “cartão de afinidade”: um cartão
com um código que você recebe um desconto em uma loja. Muitos estudantes e funcionários têm crachás de identificação que lhes
permitam o acesso aos edifícios. Você deve ter um bilhete de identidade ou passaporte para embarcar em um avião ou entrar num
país estrangeiro. Nestes casos, você possuir um objeto que outras pessoas reconhecem a permitir-lhe o acesso ou privilégios.

Outro tipo de token de autenticação tem dados para se comunicar de forma invisível. Exemplos deste tipo de sinal
incluem cartões de crédito com tarja magnética, cartões de crédito com um chip de computador embutido, ou cartões
de acesso com tecnologia sem fios passiva ou ativa. Você introduz o token em um leitor apropriado, eo leitor sente
valores do cartão. Se a sua identidade e os valores do seu jogo simbólico, esta correspondência acrescenta
confiança de que você é quem você diz ser.

Descrevemos diferentes tipos de fichas seguinte.

Ativa e passiva Tokens

Como o nome implica, tokens de passivos fazer nada, e os ativos tomar algumas medidas. Uma foto ou chave é um
exemplo de um símbolo passivo em que o conteúdo do token nunca mudam. (E, claro, com fotos permanência pode ser um
problema, pois as pessoas mudam o estilo de cabelo ou a cor e os seus rostos mudar ao longo do tempo.)

A token de ativo podem ter alguma variabilidade ou interacção com o seu ambiente. Por exemplo, alguns
sistemas de transporte público usar cartões com banda magnética. Quando você insere o cartão em um leitor, a
máquina lê o saldo atual, subtrai o preço da viagem e reescreve um novo equilíbrio para a próxima utilização. Neste
caso, o token é apenas um repositório para armazenar o valor atual. Outra forma de símbolo ativa inicia uma
comunicação bidirecional com o seu leitor, muitas vezes por sinalização sem fio ou rádio. Esses tokens levar para a
próxima distinção entre tokens, estática e dinâmica interação.

fichas passivos não mudam. tokens de ativos comunicar com um sensor. Estática e

dinâmica Tokens

O valor de uma token de estática permanece fixo. Chaves, cartões de identidade, passaportes, crédito e
outros cartões de banda magnética e cartões de transmissor de rádio (chamados dispositivos RFID) são exemplos de fichas
estáticos. símbolos estáticos são mais úteis para a autenticação no local: Quando um guarda olha para o seu crachá de
imagem, o fato de você possuir tal crachá e que sua aparência rosto (pelo menos vagamente) como a imagem faz com que o
guarda para passar sua autenticação e permitir-lhe o acesso .

Nós também estamos interessados ​em autenticação remota, isto é, em seu ser capaz de provar a sua identidade para
uma pessoa ou um computador em outro lugar. Com o exemplo do crachá imagem, pode não ser fácil para transmitir a
imagem do crachá e a aparência de seu rosto para um computador remoto para comparar. Pior, a distância aumenta a
possibilidade de falsificação: Um guarda local poderia dizer se você estava usando uma máscara, mas um guarda pode não
detectá-lo a partir de uma imagem remota. autenticação remoto é susceptível ao problema do sinal ter sido forjado.

Tokens são vulneráveis ​a um ataque chamado de clonagem. Skimming é o uso de um dispositivo para copiar os dados de
autenticação clandestinamente e retransmiti-lo para um intruso. máquinas automáticas (ATM) e leitores de cartão de crédito
de ponto-de-venda são particularmente vulneráveis ​à clonagem. 1 Em um caixa eletrônico o ladrão atribui um pequeno
dispositivo sobre o slot em que você insira seu cartão de banco. Porque todos os cartões bancários estão em conformidade
com um formato padrão (assim você pode usar seu cartão em qualquer caixa eletrônico ou comerciante), o ladrão pode
escrever um simples pedaço de software para copiar e reter a informação gravada na banda magnética no cartão de banco.
Alguns skimmers também têm uma pequena câmera para gravar seus cursos chaves como você digitar o PIN no teclado. Ou
instantaneamente (usando comunicação sem fio) ou posterior (recolher o dispositivo físico), o ladrão obtém, assim, tanto o
número da conta e seu PIN. O ladrão simplesmente cria um cartão falso com o número da conta registrada e, usando o PIN
para autenticação, visita um ATM e retira dinheiro de sua conta ou compras coisas com um cartão de crédito clonado.

1 . Note-se que esta discussão se refere aos cartões de tarja magnética populares nos Estados Unidos. A maioria dos outros países usam cartões com chip de computador

embutido que são substancialmente menos vulnerável a desnatação.

Outra forma de cópia ocorre com senhas. Se você tem que digitar ou falar sua senha, alguém pode olhar por cima
do ombro ou ouvir você, e agora que autenticador é facilmente copiados ou forjados. Para superar a cópia de tokens
físicos ou senhas, podemos usar símbolos dinâmicos. UMA token de dinâmica é aquele cujo valor é alterado. Embora
existam várias formas diferentes, um token de autenticação dinâmica é essencialmente um dispositivo que gera um
valor imprevisível que podemos chamar um número passagem. Alguns dispositivos de alterar os números em um
intervalo determinado, por exemplo, uma vez por minuto; outros mudam números quando você pressiona um botão, e
outros computar um novo número em resposta a uma entrada, às vezes chamado de um desafio. Em todos os casos,
não importa se alguém vê ou ouve você fornecer o número de passagem, porque esse valor será válido para um único
acesso (o seu), e sabendo que um valor não vai permitir que o forasteiro de adivinhar ou gerar o próximo número
passagem.

fichas dinâmicos têm poder de computação no token para mudar seu estado interno.

geradores de token dinâmicos são úteis para autenticação remota, especialmente de uma pessoa a um computador.
Um exemplo de um sinal dinâmico é o sinal SecurID do RSA Laboratories,
mostrado na Figura 6/2 . Para utilizar um token SecurID, você digite o número atual exibido no token quando
solicitado pela aplicação de autenticação. Cada token gera uma série distinta, praticamente imprevisível de
números que mudam a cada minuto, de modo que o sistema de autenticação sabe o número que esperar de
seu token a qualquer momento. Desta forma, duas pessoas podem ter os tokens SecurID, mas cada token
autentica apenas o seu proprietário atribuído. Digitando o número de outro token não passar o seu
autenticação. E porque o token gera um novo número a cada minuto, inserindo o número de uma
autenticação anterior falhar também.

Figura 2-6 Token SecurID (Foto cortesia da RSA, a divisão de segurança EMS
e copyright © RSA Corporation, todos os direitos reservados.)

Temos agora examinado as três bases de autenticação: algo que você sabe, são ou têm. Usado em um ajuste
apropriado, cada um pode oferecer segurança razoável. Nas próximas seções vamos olhar algumas maneiras de
melhorar a segurança básica a partir destas três formas.

Gestão Federated Identity


Se estas diferentes formas de autenticação parecer confuso e esmagadora, eles podem ser. Considere-se que
alguns sistemas exigirá uma senha, outros uma impressão digital scan, outros um token ativo, e outros uma
combinação de técnicas. Como você já sabe, lembrando identidades e senhas distintas para muitos sistemas é um
desafio. As pessoas que precisam usar vários sistemas diferentes simultaneamente (e-mail, rastreamento de clientes,
estoque e vendas, por exemplo) logo se cansam de fazer o logout de um, em outro, refrescando um login que expirou,
e criação e atualização de perfis de usuário. Usuários justamente chamar para computadores para lidar com a
contabilidade.

UMA gerenciamento de identidade federada esquema é uma união de sistemas de identificação e autenticação
separados. Em vez de manter os perfis de utilizador separados, um esquema federada mantém um perfil com um método de
autenticação. Acesso sistemas de compartilhamento separado para o banco de dados de identidade autenticado. Deste
modo, a autenticação é efectuada em um local, e processos e sistemas separados determinar que um utilizador já
autenticado é para ser activado. Um tal processo é mostrado nas Figura 2-7 .
Figura 2-7 Federated Identity Manager

gestão de identidade Federados unifica o processo de identificação e


autenticação de um grupo de sistemas.

Intimamente relacionado é um single sign-on processo, descrito em Figura 2-8 . Pense em um guarda-chuva
procedimento para que você faça o login uma vez por sessão (por exemplo, uma vez por dia). O procedimento guarda-chuva
mantém suas identidades e códigos de autenticação para todos os diferentes processos que você acessar. Quando você deseja
acessar e-mail, por exemplo, em vez de seu completar uma tela de ID de usuário e senha, o único processo de sign-on passa
esses detalhes para o manipulador de email, e você retomar o controle após a etapa de autenticação foi bem sucedida.

Figura 2-8 Single Sign-On

A diferença entre essas duas abordagens é que a gestão de identidades federadas


envolve um único módulo de gerenciamento de identidade que substitui a identificação e autenticação em todos os
outros sistemas. Assim, todos estes sistemas invocar o módulo de gerenciamento de identidade. Com single sign-on, os
sistemas ainda chamam para identificação e autenticação individual, mas a tarefa guarda-chuva executa essas
interações em nome do usuário.

Single sign-on assume sign-on e autenticação de vários sistemas

independentes para um usuário. autenticação multifator

A autenticação de fator único abordagens discutidas neste capítulo oferecem vantagens e desvantagens.
Por exemplo, um token funciona apenas enquanto você não dá-lo (ou perdê-lo ou tê-lo roubado) e uso de senha
falhar se alguém pode ver que você digite sua senha por espiando por cima do seu ombro. Podemos
compensar a limitação de uma forma de autenticação, combinando-o com uma outra forma.

Os cartões de identidade, como carteira de motorista, muitas vezes contêm uma imagem e assinatura. O cartão em si é um
símbolo, mas ninguém vê que o cartão pode comparar seu rosto para a foto e confirmar que o cartão pertence a você. Ou a
pessoa pode pedir-lhe para escrever o seu nome e pode comparar assinaturas. Dessa forma, a autenticação é tanto simbólico
base e biométricos (por causa de sua aparência ea forma como você assinar o seu nome são propriedades inatas de você).
Observe que seu cartão de crédito tem um espaço para a sua assinatura no verso, mas nos Estados Unidos alguns
comerciantes comparar essa assinatura às vendas deslizamento de assinar. Tendo fatores de autenticação disponíveis não
significa necessariamente que podemos usá-los.

Enquanto o processo não se torne demasiado onerosa, a autenticação pode usar dois, três, quatro ou mais fatores. Por
exemplo, para acessar alguma coisa, você deve digitar um código secreto, deslize o seu crachá, e segurar sua mão em uma
placa.

Combinando a informação de autenticação é chamado autenticação multifator. Duas formas de autenticação (que é,
não surpreendentemente, como conhecido autenticação de dois factores) Presume-se que seja melhor do que um,
assumindo, evidentemente, que as duas formas são fortes. Mas como o número de formas aumenta, assim também faz
inconveniência do usuário. Cada fator de autenticação requer que o sistema e seus administradores e os usuários a
gerenciar mais informações de segurança. Assumimos que mais fatores implicam maior confiança, embora alguns
estudos sustentam essa suposição. E dois tipos de autenticação implica dois pedaços de software e talvez dois tipos de
leitores, bem como o tempo para realizar duas autenticações. Na verdade, mesmo se a autenticação multifator é superior
ao fator isolado, não sabemos qual o valor de n marcas n- óptima fator de autenticação. Do ponto de vista da usabilidade,
grandes valores de n podem levar a frustração do utilizador e segurança reduzida, como mostrado nas 2- barra lateral 13 .

autenticação segura
Senhas, dados biométricos e tokens podem participar de autenticação segura. Claro, simplesmente usando qualquer ou de
todos eles há garantia de que uma abordagem de autenticação será segura. Para alcançar a verdadeira segurança, precisamos
pensar cuidadosamente sobre o problema que estamos tentando resolver e as ferramentas que temos; nós também precisamos
pensar sobre o bloqueio de possíveis ataques e atacantes.
Sidebar 2-13 Quando mais fatores significam menos de Segurança

O blog de Dave Concannon em www.apeofsteel.com/tag/ulsterbank descreve sua frustração em usar sistema


bancário on-line da Ulsterbank. O processo de logon envolve várias etapas. Primeiro, o usuário fornece um
número de identificação do cliente (o primeiro fator de autenticação). Em seguida, um ID de utilizador separado é
necessário (factor de 2). Em terceiro lugar, o PIN é usado para fornecer um conjunto de dígitos (factor de três),
como se mostra na figura abaixo: O sistema exige três dígitos diferentes, escolhidos ao acaso (na figura, o
terceiro, o segundo e quarto dígitos são para ser inserido ). Finalmente, o sistema requer uma senha de, pelo
menos, dez caracteres, alguns dos quais devem ser números (factor 4).

Em seu blog, Concannon trilhos sobre as dificuldades não apenas de iniciar a sessão, mas também de
mudar a sua senha. Com quatro fatores a serem lembrados, os usuários Ulsterbank provavelmente, em
frustração, anote os fatores e levá-los em suas carteiras, reduzindo assim a segurança do sistema bancário.

Suponha que queremos controlar o acesso a um sistema de computação. Além de um nome e senha, podemos
usar outras informações disponíveis para autenticar os usuários. Suponha Adams trabalha no departamento de
contabilidade durante o turno 08h00 - 17:00, de segunda a sexta-feira. Qualquer tentativa de acesso legítimo por
Adams deve ser feito durante esses tempos, através de uma estação de trabalho nos escritórios do departamento de
contabilidade. Ao limitar Adams para fazer login nessas condições, o sistema protege contra dois problemas:

• Alguém de fora pode tentar se passar por Adams. Esta tentativa iria ser contrariada por tanto o
tempo de acesso ou a porta através da qual o acesso foi tentada.

• Adams pode tentar acessar o sistema a partir de casa ou em um fim de semana, planejando usar os recursos
não autorizados ou para fazer algo que seria muito arriscado com outras pessoas ao redor.

Limitando os usuários a determinadas estações de trabalho ou determinadas épocas do acesso pode causar complicações (como
quando um usuário legitimamente precisa trabalhar horas extras, uma pessoa tem que acessar o sistema, enquanto fora da cidade a
negócios, ou uma estação de trabalho em particular falha). No entanto, algumas empresas usam estas técnicas de autenticação
porque a maior segurança que eles fornecem supera inconveniente. Como os analistas de segurança, precisamos treinar nossas
mentes para reconhecer as qualidades que distinguem a atividade normal, permitido.

Como você viu, os profissionais de segurança têm uma variedade de mecanismos de autenticação pronto para usar.
Nenhum é perfeito; todos têm pontos fortes e fracos, e até mesmo combinações de mecanismos são imperfeitos. Muitas
vezes, a interface do usuário parece simples e infalível (o que poderia ser mais fácil do que colocar um dedo sobre uma
placa de vidro?), Mas como já descrito, por baixo que a simplicidade reside a incerteza, ambiguidade e vulnerabilidade.
No entanto, nesta seção você viu tipos e exemplos de modo que quando você desenvolve sistemas e
aplicações que requeiram autenticação, você será capaz de recorrer a este fundo para escolher uma abordagem que atinge suas
necessidades de segurança.

Controle 2.2 Acesso

Nesta seção, vamos discutir como proteger objetos gerais, como arquivos, tabelas, o acesso a dispositivos de hardware
ou conexões de rede e outros recursos. Em geral, queremos uma estrutura flexível, de modo que certos usuários podem usar
um recurso de uma maneira (por exemplo, somente leitura), outros de uma maneira diferente (por exemplo, permitindo
modificações), e outros ainda não em todos. Queremos técnicas que são robusto, fácil de usar e eficiente.

Começamos com o paradigma de controle de acesso básico, articulada por Scott Graham e Peter Denning [ GRA72 ]:
Um sujeito é permitido aceder a um objecto de um modo particular, e apenas os acessos tal autorizadas são permitidos.

• assuntos são usuários humanos, muitas vezes representados por programas substitutos em execução em nome dos
usuários.

• objetos são coisas em que uma ação pode ser executada: Arquivos, tabelas, programas, objetos de memória,
dispositivos de hardware, cordas, campos de dados, conexões de rede e processadores são exemplos de objetos. Assim
também são usuários, ou melhor, programas ou processos que representam os utilizadores, porque o sistema operacional
(um programa que representa o administrador do sistema) pode agir sobre um usuário, por exemplo, permitindo que um
usuário para executar um programa, parando um usuário, ou atribuir privilégios para um usuário.

• modos de acesso são quaisquer ações controláveis ​de sujeitos em objetos, incluindo, mas não limitado a, ler,
escrever, modificar, apagar, executar, criar, destruir, cópia, exportação, importação, e assim por diante.

separação efectiva manterá assuntos não autorizadas de acesso não autorizado a objetos, mas a diferença
separação deve ser cruzado para assuntos autorizados e modos. Nesta seção, vamos considerar maneiras de permitir
que toda e acessos autorizados.

controle de acesso: limitar quem pode acessar o de que forma políticas de

acesso

O controle de acesso é um processo mecânico, facilmente implementado por um processo de mesa e computador: Um
assunto receberam ou pode ou não pode acessar um objeto particular de uma forma especificada. Subjacente à decisão
simples é uma decisão complexa e matizada do que acessa deve ser permitido; estas decisões são baseadas em uma
política formal ou informal de segurança.

decisões de controle de acesso são (ou não deveria ser) feita caprichosamente. Pat tem acesso a este arquivo porque ela
trabalha em um projeto que requer a dados; Sol é um administrador e tem de ser capaz de adicionar e excluir usuários para o
sistema. Tendo uma base simplifica a tomada de decisões semelhantes para outros usuários e objetos. A política também
simplifica a criação de regras de controle de acesso, porque eles simplesmente refletem a política existente.

Assim, antes de tentar implementar o controle de acesso, uma organização precisa ter o tempo para desenvolver uma política de
segurança de nível superior, que irá conduzir todas as regras de controle de acesso.
Implementação da Política Efetiva

Proteger objetos envolve vários objetivos complementares.

• Verifique cada acesso. Podemos querer revogar o privilégio de um usuário para acessar um objeto. Se tivermos
previamente autorizado ao usuário acessar o objeto, não necessariamente a intenção de que o usuário deve manter o
acesso por tempo indeterminado para o objeto. Na verdade, em algumas situações, a gente pode querer evitar ainda
mais o acesso imediatamente após revogar a autorização, por exemplo, se detectarmos um usuário que está sendo
representado. Por esta razão, devemos procurar verificar cada acesso de um usuário a um objeto.

• Impor menor privilégio. O princípio do menor privilégio afirma que um indivíduo deve ter acesso ao
menor número de objetos necessários para executar alguma tarefa. Mesmo informação extra seria inútil
ou inofensiva se o assunto vier a ter acesso, o assunto não deveria ter esse acesso adicional. Por
exemplo, um programa não deve ter acesso ao endereço de memória absoluta de que uma referência
número da página traduz, mesmo que o programa não poderia usar esse endereço em qualquer forma
eficaz. Não permitindo o acesso a objetos desnecessários protege contra falhas de segurança, se uma
parte do mecanismo de proteção deve falhar.

privilégio menos: o acesso a menos recursos necessários para completar alguma tarefa

• Verificar o uso aceitável. Capacidade de acesso é um sim ou nenhuma decisão. Mas igualmente importante é
verificar que a atividade a ser executada em um objeto é apropriado. Por exemplo, uma estrutura de dados tal como
uma pilha tem certas operações aceitáveis, incluindo impulso, pop, claro, e assim por diante. Nós podemos querer não
só para controlar quem ou o que tem acesso a uma pilha, mas também para ter certeza de que todos os acessos
realizados são pilha legítimo acessos.

Rastreamento

A implementação de uma política adequada não é o fim da administração de acesso. Às vezes, os administradores
precisam de rever a política de acesso para determinar se ele está funcionando como deveria. Alguém já existe há
muito tempo e por isso adquiriu um grande número de não-mais-necessários direitos? Isso muitos usuários têm acesso
a um objeto que já não precisa de ser controlado? Ou deveria ser subdividido em vários objetos, de modo que as
pessoas podem ter acesso a apenas as peças que necessitam? Os administradores precisam considerar esses tipos
de perguntas sobre ocasião para determinar se a política e implementação estão fazendo o que deveria. Nós explorar
o lado da gestão de definir as políticas de segurança em

Capítulo 10 , Mas nós visualizar alguns problemas aqui, porque eles têm uma influência técnica sobre controle de acesso.

granularidade

Por granularidade queremos dizer a finura ou especificidade de controle de acesso. É um espectro: Em uma extremidade,
você pode controlar o acesso a cada bit individual ou byte, cada palavra em um documento, cada número em uma planilha,
cada fotografia em uma coleção. Esse nível de especificidade é geralmente excessiva e complicado de implementar. Quanto
mais fina a granularidade, o maior
número de decisões de controle de acesso que deve ser feito, para que haja uma penalidade de desempenho. No outro extremo,
você simplesmente dizer Adam tem acesso completo a C1 computador. Essa abordagem pode funcionar se o computador é para
uso de Adão sozinho, mas se C1 computador é compartilhado, então o sistema não tem base para controlar ou orquestrar que a
partilha. Assim, um ponto médio razoável deve aplicar.

Normalmente, um arquivo, um programa, ou um espaço de dados é a menor unidade à qual o acesso é controlado. No entanto, note que
os aplicativos podem implementar seu próprio controle de acesso. Assim, por exemplo, como descrevemos na Capítulo 7 , Um sistema de
gerenciamento de banco de dados pode ter acesso a uma base de dados completa, mas, em seguida, esculpe o banco de dados em
unidades menores e encomendas fora de acesso: Este usuário pode ver os nomes, mas não os salários, que o usuário pode ver apenas os
dados sobre empregados no escritório ocidental.

dispositivos de hardware, blocos de memória, espaço em disco onde o código do programa é armazenado, aplicações específicas,
todos estes são objetos prováveis ​sobre o qual o acesso é controlado.

acesso Log

Depois de tomar uma decisão de acesso, o sistema age para permitir que o acesso e deixa o usuário eo objeto
para completar a transação. Sistemas também registrar que acessa foram permitidas, criando o que é chamado de log
de auditoria. Este registo é criado e mantido pelo sistema, e é preservado para análise posterior. Várias razões
para o registro de acesso incluem o seguinte:

• Registros de acessos podem ajudar a planejar para o equipamento novo ou atualizado, mostrando os itens que
tiveram o uso pesado.

• Se o sistema falhar, esses registros podem mostrar o que os acessos estavam em andamento e talvez ajudar a
identificar a causa da falha.

• Se um usuário faz mau uso de objetos, o log de acesso mostra exatamente quais objetos o usuário fez acesso.

• No caso de um compromisso externo, o log de auditoria pode ajudar a identificar como o agressor teve
acesso e itens que os dados foram acessados ​(e, portanto, revelado ou comprometido). Estes dados
para após o fato, análise forense têm sido extremamente útil na manipulação de grandes incidentes.

Como parte da atividade de controle de acesso, o sistema cria e protege este log de auditoria. Obviamente,
granularidade importa: Um log que registra cada byte de memória acessada é demasiado longa para ser de muito valor
prático, mas um log que diz “08:01 utilizador ligado sistema; 17:21 usuário desligado sistema”provavelmente contém muito
pequeno detalhe para ser útil.

Na próxima seção nós consideramos mecanismos de proteção apropriadas para objetos gerais de tipos não especificados,
tais como os tipos de objetos listados acima. Para tornar as explicações mais fácil de entender, às vezes, usar um exemplo de
um objeto específico, como um arquivo. Observe, porém, que um mecanismo geral pode ser usado para proteger qualquer
um dos tipos de objetos listados.

Privilege limitada

privilégio limitado é o ato de restringir os usuários e processos de modo que qualquer dano que pode fazer não é catastrófico. Um
sistema que proíbe todos os acessos a qualquer coisa por qualquer pessoa, certamente,
alcança ambos confidencialidade e integridade, mas falha completamente disponibilidade e utilidade. Assim, buscamos um
ponto médio que equilibra a necessidade de algum tipo de acesso contra o risco de acesso prejudicial, impróprio. Certamente,
não esperamos que os usuários ou processos de causar danos. Mas reconhecendo que nem todos os usuários são éticos ou
mesmo competente e que nem todos os processos funcionar como pretendido, queremos limitar a exposição dos usuários
mal-comportados ou processos com defeito. privilégio Limited é uma maneira de limitar essa exposição.

privilégio Limited é um conceito de gestão, não um controle técnico. O processo de análise de usuários e determinar os
privilégios de que necessitam é um primeiro passo necessário para autorizar dentro desses limites. Depois de estabelecer os
limites, nos voltamos para acessar a tecnologia de controle para impor esses limites. Em Capítulo 3 nós novamente elevar o
conceito de privilégio limitado quando descrevemos concepção e implementação que garante a segurança do programa.
princípios de design de segurança escritos pela primeira vez por Jerome Saltzer e Michael Schroeder [ SAL75 ] Explicar a
vantagem de limitar o privilégio com o qual os usuários e seus programas executados.

Controle de Acesso Implementação

O controle de acesso é frequentemente realizada pelo sistema operacional. Apenas o sistema operacional pode acessar
objetos primitivos, como arquivos, para exercer controle sobre eles, e o sistema operacional cria e termina programas que
representam os usuários (indivíduos). No entanto, design de hardware atual nem sempre apoiar o sistema operacional na
implementação de controle de acesso bem diferenciados ou de granulação fina. O sistema operacional não costuma ver os
arquivos dentro ou objetos de dados, por exemplo, por isso não pode realizar o controle de acesso row- ou de nível elemento
dentro de um banco de dados. Além disso, o sistema operacional não pode facilmente diferenciar entre tipos de tráfego de rede.
Nestes casos, o sistema operacional adia a um gerente de banco de dados ou um dispositivo de rede na implementação de
alguns aspectos de controle de acesso. Com tipos limitados de privilégios para alocar, o sistema operacional não pode facilmente
tanto controlar um gerente de banco de dados e permitir que o gerente de banco de dados para controlar os usuários. Assim, o
design de hardware atual limita alguns desenhos do sistema operacional.

monitor de referência

James Anderson e sua comissão de estudo [ AND72 ] Deu nome e estrutura para a versão digital de um conceito que já
existe há milênios. Para proteger suas fortalezas medievais, os governantes tinham um portão fortemente protegido como o
único meio de ingresso. Generais rodeado posições de tropas com fortes e guardas de sentinela. Banqueiros mantido dinheiro e
outros objetos de valor em cofres com portas inexpugnáveis ​a que apenas algumas poucas pessoas confiáveis ​tinham as
combinações. vilões de contos de fadas bloqueado donzelas afastado em torres. Todos esses exemplos mostram o controle de
acesso forte por causa do design à prova de falhas.

Na formulação de Anderson para computadores, controle de acesso depende de uma combinação de hardware e
software que é

• sempre invocado; valida a cada tentativa de acesso


• imunológico de adulteração
• seguramente correta

monitor de referência: controle de acesso que é sempre invocado, inviolável e verificável


Anderson chamou este construir um monitor de referência. Deveria ser óbvio por que essas três propriedades são
essenciais.

Um monitor de referência é uma noção, não uma ferramenta que você pode comprar para conectar em uma porta. Pode ser
incorporado em um aplicativo (para controlar objetos do aplicativo), que faz parte do sistema operacional (para objetos gerenciados
pelo sistema) ou parte de um aparelho. Ainda assim, você vai ver essas mesmas três propriedades aparecem repetidamente neste
livro. Para ter um monitor de referência eficaz, é preciso considerar os meios eficazes e eficientes para traduzir políticas, a base
para a validação, em ação. Como representamos uma política em dados binários tem implicações para o quão eficiente e até
mesmo a eficácia da mediação será.

Nas próximas seções, apresentamos vários modelos de como os direitos de acesso pode ser mantido e implementado
pelo monitor de referência.

Diretório de Controle de Acesso

Uma maneira simples de proteger um objeto é usar um mecanismo que funciona como um diretório de arquivos. Imagine que
estamos tentando proteger arquivos (o conjunto de objetos) de usuários de um sistema de computação (o conjunto de indivíduos).
Cada arquivo tem um único dono que possui “controle” direitos de acesso (incluindo os direitos de declarar que tem o acesso) e
revogar o acesso de qualquer pessoa a qualquer momento. Cada usuário tem um diretório de arquivos, que lista todos os arquivos
aos quais o usuário tem acesso.

Claramente, nenhum usuário pode ter permissão para escrever no diretório de arquivos, porque isso seria uma maneira de forjar o
acesso a um arquivo. Portanto, o sistema operacional deve manter todos os diretórios de arquivos, sob comandos dos proprietários de
arquivos. Os direitos óbvios para os arquivos são a leitura comum, gravação e execução que são familiares em muitos sistemas
compartilhados. Além disso, um outro direito, proprietário, é possuída pelo proprietário, permitindo que o usuário para conceder e
revogar direitos de acesso. Figura 2-9 mostra um exemplo de um diretório de arquivos.

FIGURA 2-9 Direitos de Acesso do Diretório

Esta abordagem é fácil de implementar, porque ele usa uma lista por usuário, nomeando toda a
objetos que um usuário tem permissão para acessar. No entanto, vários podem surgir dificuldades. Primeiro, a lista torna-se muito
grande se muitos objetos compartilhados, como bibliotecas de subprogramas ou uma tabela comum de usuários, são acessíveis a
todos os utilizadores. O diretório de cada usuário deve ter uma entrada para cada tal objeto compartilhado, mesmo se o usuário não
tem a intenção de acessar o objeto. Eliminação deve ser refletida em todos os diretórios.

A segunda dificuldade é a revogação de acesso. Se proprietário Um passou para o usuário B o direito de ler o arquivo
F, uma entrada para F é feita no diretório para B. Esta concessão de acesso implica um nível de confiança entre A e B. Se
um perguntas posteriores que confiam, A pode quer revogar o direito de acesso do B. o sistema operacional pode
responder facilmente à única solicitação para excluir o direito de B para acessar F, porque essa ação envolve a exclusão
de uma entrada de um diretório específico. Mas, se um quer remover os direitos de todos para acessar F, o sistema
operacional deve procurar cada diretório individual para a entrada F, uma atividade que pode ser demorado em um
grande sistema. Por exemplo, os grandes sistemas ou redes de sistemas menores podem facilmente ter 5.000 a 10.000
contas ativas. Além disso, B pode ter passado o direito de acesso para o F para outro utilizador C, propagação de
direitos de acesso, então A não pode saber que o acesso da C existe e deve ser revogada. Este problema é
particularmente grave em uma rede.

A terceira dificuldade envolve pseudônimos. Proprietários A e B pode ter dois arquivos diferentes nomeado F, e eles
podem tanto deseja permitir o acesso de S. Claramente, o diretório para S não pode conter duas entradas com o mesmo nome
para arquivos diferentes. Portanto, S tem de ser capaz de identificar de forma exclusiva a F por A (ou B). Uma abordagem é
incluir a designação do proprietário original, como se fosse parte do nome do arquivo, com uma notação como A: F (ou B: F).

Suponhamos, porém, que S gostaria de usar um nome diferente de F para fazer o conteúdo do arquivo mais aparente. O
sistema pode permitir a S para nomear F com qualquer nome único para o directório de S. Em seguida, a partir de F Uma
poderia ser chamado Q para S. Como mostrado na A Figura 2-10 , S pode ter esquecido que Q é F de A, e assim S solicita
acesso novamente a partir de A para F. Mas até agora A pode ter mais confiança em S, assim que uma transferência de F com
mais direitos do que antes. Essa ação abre a possibilidade de que um assunto, S, pode ter dois conjuntos distintos de direitos
de acesso à F, um sob o nome Q e um sob o nome de F. Desta forma, permitindo pseudônimos pode levar a várias permissões
que não são necessariamente consistente. Assim, a abordagem diretório é provavelmente muito simples para a maioria das
situações de proteção objeto.
FIGURA 2-10 Direitos de Acesso ambíguas

Matrix Controle de Acesso

Podemos pensar o diretório como uma lista de objetos acessíveis por um único assunto, e a lista de acesso como uma
tabela que identifica pessoas que podem acessar um único objeto. Os dados dessas duas representações são equivalentes, a
distinção de ser a facilidade de uso em determinadas situações.

Como alternativa, pode-se usar um matriz de controlo de acesso, mostrado na A Figura 2-11 , Uma tabela em
que cada linha representa um assunto, cada coluna representa um objeto, e cada entrada é o conjunto de direitos de
acesso para que sujeita a esse objeto.

FIGURA 2-11 Matrix Controle de Acesso

Uma representação exemplo mais detalhado de uma matriz de controlo de acesso é mostrado na Tabela 2- 8 . Os direitos de acesso
mostrados na tabela são O, própria; R, ler; W, escrever; e X, executar. Em geral, a matriz de controle de acesso é escassa (o que significa
que a maioria das células estão vazios): A maioria dos indivíduos não têm direitos de acesso para a maioria dos objetos. A matriz de
acesso pode ser representada como
uma lista de triplos, cada um tendo a forma sujeito, objeto, direitos, como mostrado nas Tabela 2-9 .

TABELA 2-8 Matrix Controle de Acesso

TABELA 2-9 Lista de Controle de Acesso Triples

Esta representação pode ser mais eficiente do que a matriz de controlo de acesso, porque não há triplo para qualquer célula

vazia da matriz (tal como t UTILIZADOR, Bibliog, -). Mesmo que os triplos podem ser classificadas por assunto ou objeto, conforme

necessário, em busca de um grande número desses triplos é ineficiente suficiente para que esta implementação é raramente

usado.

Lista de Controle de Acesso

Uma representação alternativa é a lista de controle de acesso; como mostrado em A Figura 2-12 , isto
representação corresponde a colunas da matriz de controlo de acesso. Há uma tal lista para cada objeto, e a lista
mostra todos os assuntos que devem ter acesso ao objeto e que o seu acesso é. Esta abordagem difere da lista
de diretórios, porque há uma lista de controle de acesso por objeto; um diretório é criado para cada assunto.
Embora esta diferença parece pequena, existem algumas vantagens significativas para esta abordagem.
FIGURA 2-12 Lista de Controle de Acesso

A representação lista de controle de acesso podem incluir direitos padrão. Considere assuntos A e S, ambos os quais têm acesso
ao objeto F. O sistema operacional irá manter apenas uma lista de acesso para F, mostrando os direitos de acesso para A e S, como
mostrado na A Figura 2-13 . A lista de controle de acesso podem incluir entradas padrão gerais para todos os usuários. Desta forma,
os usuários específicos podem ter direitos explícitos, e todos os outros usuários podem ter um conjunto padrão de direitos. Com esta
organização, todos os usuários possíveis do sistema pode compartilhar um arquivo ou programa público sem a necessidade de uma
entrada para o objeto no diretório individual de cada usuário.

FIGURA 2-13 Lista de controle de acesso com dois temas


O sistema operacional Multics utilizada uma forma de lista de controle de acesso no qual cada utilizador pertencem a três
classes de protecção contra: um utilizador, um grupo, e um compartimento. A designação usuário identificado um assunto
específico, ea designação grupo reuniu indivíduos que tinham um interesse comum, tais como os que são colegas de trabalho
em um projeto. O compartimento confinado um objecto não confiável; um programa em execução em um compartimento não
pode acessar objetos em um outro compartimento sem permissão específica. O compartimento também foi uma maneira de
recolher objetos que foram relacionados, como todos os arquivos para um único projeto.

Para ver como esse tipo de proteção pode funcionar, suponha que cada usuário que inicia o acesso ao sistema
identifica um grupo e um compartimento com a qual trabalhar. Se Adams registra como usuário Adams no grupo Decl e
compartimento Art2, apenas objetos tendo Adams-Decl- Art2 na lista de controle de acesso são acessíveis na sessão.

Por si só, este tipo de mecanismo seria demasiado restritiva para ser utilizável. Adams não pode criar arquivos gerais a
serem utilizados em qualquer sessão. Pior ainda, objetos compartilhados não só tem a lista Adams como um assunto legítimo,
mas também tem a lista Adams sob todos os grupos aceitáveis ​e todos os compartimentos aceitáveis ​para cada grupo.

A solução é o uso de cartões selvagem, o que significa que designam marcadores de posição “qualquer utilizador” (ou
“qualquer grupo” ou “qualquer compartimento”). Uma lista de controle de acesso pode especificar o acesso por Adams-Decl-Art1,
dando direitos específicos a Adams se trabalhar em grupo Decl em Art1 compartimento. A lista também pode especificar Adams -
* - Art1, o que significa que Adams pode acessar o objeto de qualquer grupo em Art1 compartimento. Da mesma forma, uma
notação de -Decl- * * significaria “qualquer utilizador no grupo decl em qualquer compartimento.” Diferentes posicionamentos da
notação universal * têm as interpretações óbvias.

Unix usa uma abordagem semelhante com as permissões do usuário do grupo no mundo. Cada usuário pertence a um grupo de
usuários-alunos relacionados em uma classe comum, os trabalhadores em um projeto compartilhado, ou membros do mesmo
departamento. As permissões de acesso para cada objeto são um triplo ( u, g, w) no qual você é para os direitos de acesso do usuário, g é
para outros membros do grupo, e W é para todos os outros usuários no mundo.

A lista de controle de acesso pode ser mantida na ordem de classificação, com * classificadas como vindo afinal nomes
específicos. Por exemplo, Adams-Decl- * viria depois de todas as designações dos compartimentos específicos para Adams. A
busca de permissão de acesso continua apenas até o primeiro jogo. No protocolo, todas as designações explícitas são verificados
antes de curingas em qualquer posição, portanto, um acesso específico a direita teria precedência sobre o direito de curinga. A
última entrada em uma lista de acesso poderia ser * - * - *, especificando os direitos permitidas a qualquer usuário não
explicitamente na lista de acesso. Com este dispositivo curinga, um objeto pública compartilhada pode ter uma lista de acesso
muito curto, nomeando explicitamente os poucos assuntos que devem ter direitos de acesso diferentes do padrão.

Lista Privilege

UMA lista de privilégios, às vezes chamado de diretório, é uma linha da matriz de acesso, mostrando todos esses privilégios ou
direitos de acesso para um determinado assunto (mostrado na A Figura 2-14 ). Uma das vantagens de uma lista privilégio é a facilidade
de revogação: Se um usuário é removido do sistema, a lista privilégio mostra todos os objetos aos quais o utilizador tem acesso de
modo que esses direitos podem ser removidos do objeto.
FIGURA 2-14 Lista de Controle de privilégio

Capacidade

Até agora, examinamos esquemas de proteção em que o sistema operacional deve manter o controle de todos os objetos
de proteção e direitos. Mas outras abordagens colocar parte da carga sobre o usuário. Por exemplo, um usuário pode ser
obrigado a ter um bilhete ou passe que permite o acesso, bem como um cartão de bilhete ou de identificação que não pode
ser duplicado.

Mais formalmente, dizemos que um capacidade é um token falsificável que dá ao possuidor certos direitos a um objeto. O
Multics [ SAL74 ], CAL [ LAM76 ], E Hydra [ WUL74 ] Sistemas usados ​os recursos de controle de acesso. Como mostrado em A
Figura 2-15 , Uma capacidade é apenas um controle de acesso triplo de um sujeito, objeto e direita. Em teoria, um sujeito
pode criar novos objetos e pode especificar as operações permitidas nesses objetos. Por exemplo, os usuários podem criar
objetos, como arquivos, segmentos de dados, ou subprocessos e também pode especificar os tipos aceitáveis ​de
operações, como ler, escrever e executar. Mas um usuário também pode criar completamente novos objetos, como novas
estruturas de dados, e pode definir tipos de acessos anteriormente desconhecidos para o sistema.

FIGURA 2-15 Capacidade

Capacidade: único ou bilhete de multi-uso para acessar um objeto ou serviço

Pense capacidade como um bilhete dando permissão para um assunto que ter um certo tipo de acesso a um
objeto. Para a capacidade de oferecer proteção sólida, o bilhete deve ser
falsificável. Uma maneira de fazê-lo falsificável é não dar o bilhete diretamente para o usuário. Em vez disso, o sistema operacional
detém todos os bilhetes em nome dos usuários. O sistema de operação retorna para o utilizador de um ponteiro para uma estrutura
de dados do sistema operacional, o qual também liga para o utilizador. A capacidade pode ser criada apenas por um pedido
específico de um usuário para o sistema operacional. Cada recurso também identifica os acessos permitidos.

Alternativamente, os recursos podem ser criptografados em uma chave disponível apenas para o mecanismo de controle de
acesso. Se a capacidade criptografado contém a identidade de seu legítimo proprietário, o usuário A não pode copiar o recurso e
dar-lhe para o usuário B.

Uma possível direito de acesso a um objeto é a transferência ou propagar. Um sujeito que tem esse direito pode passar
cópias de recursos para outros assuntos. Por sua vez, cada uma dessas capacidades também tem uma lista de tipos permitidos
de acessos, um dos quais também podem ser transferência. Neste exemplo, o processo A pode passar uma cópia de uma
capacidade de B, que pode, em seguida, passar uma cópia de C. B pode evitar ainda mais a distribuição da capacidade (e, por
conseguinte, evitar ainda mais a difusão do direito de acesso), omitindo a transferência desde os direitos passados ​na
capacidade de C. B ainda pode passar certos direitos de acesso a C, mas não o direito de propagar direitos de acesso a outros
assuntos.

Como um processo é executado, ele opera em um domínio ou espaço de nome local. o domínio é a coleção de objetos aos quais o
processo tem acesso. Um domínio para um usuário em um determinado momento pode incluir alguns programas, arquivos, segmentos
de dados e dispositivos I / O, como uma impressora e um terminal. Um exemplo de um domínio é mostrado na A Figura 2-16 .

FIGURA 2-16 Exemplo de um domínio

Como a execução continua, o processo pode chamar um subprocedimento, passando alguns dos objetos a que se tem acesso
como argumentos para o subprocedimento. O domínio do subprocedimento não é necessariamente a mesma que a de seu
procedimento de chamada; na verdade, um procedimento de chamada pode passar apenas alguns de seus objetos para o
subprocedimento, eo OnFilterComboChange pode ter direitos de acesso para outros objetos não acessíveis ao procedimento de
chamada, como mostrado na A Figura 2-17 . O chamador também pode passar apenas alguns de seus direitos de acesso para os
objetos que ele passa para o subprocedimento. Por exemplo, um procedimento pode passar para um subprocedimento o direito de ler,
mas não modificar um valor de dados particular.
FIGURA 2-17 Passando Objetos para um domínio

Porque cada capacidade identifica um único objecto de um domínio, a recolha de recursos define o domínio.
Quando um processo chama um subprocedimento e passa certos objetos para o subprocedimento, o sistema
operacional forma uma pilha de todas as capacidades do procedimento atual. O sistema operacional, em seguida,
cria novos recursos para o subprocedimento.

Operacionalmente, as capacidades são uma maneira simples de manter o controle dos direitos de acesso dos sujeitos
aos objetos durante a execução. Os recursos são apoiadas por uma mesa mais abrangente, tal como uma matriz de
controle de acesso ou uma lista de controle de acesso. Cada vez que um processo de procura usar um novo objeto, o
sistema operacional examina a lista principal de objetos e sujeitos para determinar se o objeto está acessível. Se assim for,
o sistema operacional cria uma capacidade para esse objeto.

Capacidades devem ser armazenados na memória inacessível para os usuários normais. Uma maneira de fazer isso é
armazenar recursos em segmentos não apontada pelo tabela de segmento do usuário ou para colocá-los na memória
protegida a partir de um par de base / Bounds registros. Outra abordagem é usar uma máquina de arquitetura com etiquetas
para identificar capacidades como estruturas que necessitam de protecção.

Durante a execução, apenas as capacidades de objetos que foram acessados ​pelo processo atual são mantidos
prontamente disponíveis. Esta restrição melhora a velocidade com a qual o acesso a um objecto pode ser verificado. Esta
abordagem é, essencialmente, o utilizado no Multics, tal como descrito em [ FAB74 ].

Recursos podem ser revogada. Quando um assunto emissora revoga uma capacidade, mais acesso sob a
capacidade revogada deve ser permitida. Uma mesa de capacidade pode conter ponteiros para os recursos de ativos
gerados sob ele, para que o sistema operacional pode traçar
que os direitos de acesso devem ser excluídos se a capacidade é revogada. Um problema semelhante está excluindo recursos para
os usuários que não estão mais ativos.

Estas três estruturas básicas, o diretório, matriz de controle de acesso e seus subconjuntos, e capacidade, são a base de
sistemas de controle de acesso implementadas hoje. Para além da aplicação mecânica da matriz de controle de acesso ou
de suas subestruturas, dois modelos de acesso relacionar-se mais especificamente para o objetivo de controle de acesso:
relativas acesso ao papel de um sujeito ou o contexto do acesso. Nós apresentamos esses modelos a seguir.

Controle de Acesso Orientada a procedimento

Um dos objetivos do controle de acesso está restringindo não apenas o que os sujeitos têm acesso a um objeto, mas também o que
podem Faz para esse objecto. Leia contra o acesso de escrita pode ser controlado em vez prontamente pela maioria dos aplicativos e
sistemas operacionais, mas um controle mais complexo não é tão fácil de conseguir.

Por orientada para o procedimento proteção, que implica a existência de um procedimento que controla o acesso a objetos (por
exemplo, através da realização de sua própria autenticação de usuário para fortalecer a proteção básica fornecida pelo sistema
operacional básico). Em essência, o procedimento forma uma cápsula em torno do objecto, permitindo apenas certos acessos
especificados.

Os procedimentos podem executar ações específicas a um determinado objeto na implementação


de controle de acesso.

Procedimentos pode garantir que acede a um objeto ser feita através de uma interface confiável. Por exemplo, nem os utilizadores
nem rotinas do sistema operacional geral pode ser permitido o acesso directo à tabela de usuários válidos. Em vez disso, a única
acessos permitido pode ser através de três procedimentos: um para adicionar um usuário, um para excluir um usuário, e um para
verificar se um determinado nome corresponde a um usuário válido. Estes procedimentos, especialmente adicionar e excluir, poderia
usar os seus próprios controlos para se certificar de que as chamadas para eles são legítimos.

proteção orientada para o procedimento aplica o princípio da ocultação de informação porque os meios de implementação
de um objeto são conhecidos apenas por procedimento de controlo do objeto. Claro, este grau de protecção acarreta uma pena
de ineficácia. Com proteção orientada para o procedimento, não pode haver simples verificação de acesso, rápido, mesmo se o
objeto é usado freqüentemente.

Controle de acesso baseado em função

Ainda não distingue entre tipos de usuários, mas queremos que alguns usuários (como administradores) ter privilégios
significativos, e nós queremos que outros (como usuários regulares ou convidados) ter privilégios inferiores. Em empresas e
instituições de ensino, isso pode ficar complicado quando um usuário comum torna-se um administrador ou um padeiro move-se
para agrupar os fabricantes de velas. controle de acesso baseado em função nos permite privilégios associados com grupos,
tais como todos os administradores podem fazer isso ou fabricantes de velas são proibidos de fazer isso. Administrando a
segurança é mais fácil se nós podemos controlar o acesso por exigências do trabalho, e não por pessoa. controle de acesso
mantém-se com uma pessoa que muda de responsabilidades, e o administrador do sistema não tem que escolher as
configurações de controle de acesso apropriado para alguém. Para mais detalhes sobre as nuances de controle de acesso
baseado em função, veja [ FER03 ].
controle de acesso por função reconhece as necessidades comuns de todos os membros de um conjunto de
assuntos.

Em conclusão, nosso estudo de mecanismos de controle de acesso tem intencionalmente progrediu de simples ao
complexo. Historicamente, como os mecanismos têm proporcionado maior flexibilidade, eles têm feito isso com um preço de
maior sobrecarga. Por exemplo, a implementação de capacidades que devem ser verificados em cada acesso é muito mais
difícil do que a implementação de uma estrutura de diretório simples que é verificada apenas no primeiro acesso de um
sujeito a um objeto. Esta complexidade é aparente para o utilizador e ambos implementador. O usuário está ciente de
recursos adicionais de proteção, mas o usuário ingênuo pode ser frustrado ou intimidado por ter de seleccionar opções de
proteção com pouca compreensão de sua utilidade. A complexidade de implementação se torna aparente em resposta lenta
para os usuários. O equilíbrio entre a simplicidade e funcionalidade é uma luta contínua na segurança.

2.3 Criptografia
Em seguida, introduzir a terceira das nossas ferramentas básicas de segurança, criptografia. Neste capítulo apresentamos
apenas os rudimentos do tema, apenas o suficiente para que você possa ver como ele pode ser usado eo que ele pode alcançar.
Deixamos os internos para Capítulo 12 no final deste livro. Fazemos isso porque a maioria dos profissionais de segurança
computador seria duramente pressionado para explicar ou implementar boa criptografia a partir do zero, o que torna o nosso ponto
de que você não precisa entender o funcionamento interno de criptografia apenas para usá-lo com sucesso. Enquanto você lê este
capítulo, você pode perguntar por que algo seja feito de uma maneira particular ou como algo realmente funciona. Nós convidamos
você a saltar para Capítulo 12 para os detalhes. Mas este capítulo centra-se na ferramenta e seus usos, deixando o funcionamento
interno para o futuro.

Criptografia ou criptografia-o nome significa segredo escrita-é provavelmente a defesa mais forte no arsenal de proteção de
segurança do computador. dados bem disfarçados não podem facilmente ser lido, modificado ou fabricado. Simplificando, a
criptografia é como uma máquina: você colocar os dados em uma extremidade, engrenagens girar e luzes piscam, e você recebe
modificado dados para fora do outro lado. Na verdade, alguns dispositivos de criptografia usados ​durante a Segunda Guerra
Mundial operado com engrenagens e rotores reais, e estes dispositivos foram eficazes na dissuasão (embora nem sempre
prevenção) do lado oposto da leitura das mensagens protegidas. Agora, a máquina tiver sido substituído por algoritmos de
computador, mas o princípio é o mesmo: Uma transformação torna os dados difícil para uma pessoa de fora de interpretar.

Cryptography esconde dados contra acesso não autorizado.

Começamos por examinar o que a criptografia faz e como ele funciona. Nós introduzimos os princípios básicos de
algoritmos de criptografia, a introdução de dois tipos de criptografia com usos distintos. Como a criptografia fraca ou falho
cria apenas a ilusão de proteção, nós também olhar para como a criptografia pode falhar. Nós descrevemos brevemente
técnicas utilizadas para romper a capa protetora para anular a segurança. Com base nestes tipos básicos de criptografia,
mostramos como combiná-los para abordar de forma segura vários problemas gerais de computação e comunicação.

Problemas abordados pela Encryption


Às vezes, nós descrevemos criptografia no contexto de enviar mensagens secretas. Este enquadramento é apenas para facilitar a
descrição: Os mesmos conceitos aplicam-se a proteger um arquivo de dados ou informações sensíveis na memória. Então, quando
falamos sobre o envio de uma mensagem, você também deve pensar em proteger qualquer objeto digital para acesso somente por
pessoas autorizadas.

Considere os passos envolvidos no envio de mensagens a partir de um remetente, S, a um destinatário, R. E se


S confia a mensagem para T, que então entrega-lo para R, T em seguida, torna-se o transmissão média. Se uma pessoa de
fora, O, quer acessar a mensagem (para ler, alterar ou até mesmo destruí-lo), chamamos O a interceptor ou intruso. Qualquer
momento após S transmite a mensagem via T, é vulnerável à exploração, e O pode tentar acessá-lo em qualquer uma das
seguintes formas:

• quadra que, por sua prevenção R atingindo, afectando assim a disponibilidade da mensagem

• interceptar -lo, lendo ou ouvindo a mensagem, afectando assim a confidencialidade da


mensagem
• modificar -lo, aproveitando a mensagem e mudá-lo de alguma forma, afetar a integridade da mensagem

• fabricar um autêntico-olhando mensagem, organizar para que possa ser entregue como se viesse de S, influenciando
igualmente a integridade da mensagem Como você pode ver, as vulnerabilidades de uma mensagem refletir as quatro
possíveis falhas de segurança foram identificados em Capítulo 1 . Felizmente, a criptografia é uma técnica que pode resolver
todos estes problemas. A criptografia é um meio de manter os dados seguros em um ambiente inseguro. Neste livro,
estudamos a criptografia como uma técnica de segurança, e vemos como ele é usado na proteção de programas, bancos de
dados, redes e comunicações electrónicas.

Encryption terminologia é o processo de codificação de uma mensagem para que o seu significado não é óbvio;

descriptografia É o processo inverso, transformando uma mensagem cifrada de volta para a sua forma normal,
originais. Alternativamente, os termos codificar e decodificar ou cifrar e
decifrar são usados ​em vez de criptografar e descriptografar. 2 Ou seja, dizemos que codificar, criptografar ou cifrar a mensagem
original para esconder o seu significado. Então, nós decodificar, decifrar, ou decifrá-lo para revelar a mensagem original. Um
sistema para criptografia e descriptografia é chamado de
cryptosystem.

2 . Existem pequenas diferenças nos significados desses três pares de palavras, embora eles não são significativos no contexto desta discussão.
Estritamente falando, codificação é o processo de tradução de palavras inteiras ou frases a outras palavras ou frases, enquanto enciphering é
traduzir letras ou símbolos individualmente; criptografia é o termo grupo que abrange a codificação e cifragem.

A forma original de uma mensagem é conhecida como texto simples, ea forma criptografada é chamado
cifrado. Este relacionamento está mostrado nas A Figura 2-18 . Pense de criptografia, como uma forma de tinta opaca que
obscurece ou elimina o texto simples, impedindo que seja visto ou interpretado com precisão. Então, descriptografia é o
processo de descascar a pintura para revelar o texto plano original novamente.
FIGURA 2-18 Plaintext e Ciphertext

Texto cifrado: o material encriptado; em texto material em forma inteligível

Nós usamos uma notação formal para descrever as transformações entre texto simples e encriptado. Por exemplo, podemos
escrever C = E (P) e P = D (C), Onde C representa o texto cifrado, E é a regra de criptografia, P é o texto simples, e D é a regra de
decodificação. O que buscamos é um sistema de criptografia para as quais P = D (E (P)). Em outras palavras, queremos ser capaz
de converter a mensagem de texto simples para texto cifrado para protegê-lo de um intruso, mas também queremos ser capaz de
obter a mensagem original de volta para que o receptor possa lê-lo corretamente.

As chaves de criptografia

Um sistema de criptografia envolve um conjunto de regras de como criptografar o texto simples e descriptografar o texto cifrado. As
regras de criptografia e descriptografia, chamadas algoritmos, muitas vezes usam um dispositivo chamado chave, denotado por K, de modo
que o texto cifrado resultante depende a mensagem original de texto simples, o algoritmo, e o valor da chave. Nós escrevemos esta
dependência como C = E (K,
P). Essencialmente, E é um conjunto de algoritmos de criptografia e a chave K seleciona um algoritmo específico do conjunto.

Este processo é semelhante ao uso de fechaduras produzidos em massa em casas. Como um proprietário, você
iria pagar caro para contratar alguém para inventar e fazem um bloqueio apenas para sua casa. Além disso, você não
saberia se bloqueio de um determinado inventor era realmente sólido ou como comparados com os de outros
inventores. A melhor solução é ter alguns bem conhecido, as empresas produtoras de respeitados fechaduras normais
que diferem de acordo com a chave (física). Então, você e seu vizinho pode ter a mesma marca e estilo de bloqueio,
mas sua chave vai abrir apenas o seu bloqueio. Da mesma forma, é útil ter alguns bem examinada algoritmos de
criptografia para uso de todos, mas chaves diferentes impediria alguém de invadir dados que você está tentando
proteger.

Às vezes, as chaves de criptografia e descriptografia são os mesmos, então P = D (K, E (K, P)),
o que significa que a mesma chave, K, é usada tanto para criptografar uma mensagem e mais tarde para o descodificar. Esta forma é
chamada simétrico ou -Chave única ou segredo criptografia de chave porque D e E são processos espelho de imagem. Como um exemplo
trivial, o algoritmo de criptografia pode estar a mudar cada letra de texto simples para a frente n posições no alfabeto. Para n = 1, A é
alterado para B, b para
c ... P para q, ... e Z a um, então dizemos o valor da chave é N, em movimento n posições para transmitir a encriptação e para
trás, para a descodificação. (Você pode notar que nós escrevemos o texto original
em letras maiúsculas e o texto cifrado correspondente em letras minúsculas;
criptógrafos às vezes usam essa convenção para ajudá-los a distinguir os dois.)

A criptografia simétrica: uma chave criptografa e decifra.


Em outras ocasiões, as chaves de criptografia e descriptografia vêm em pares. Em seguida, uma chave de decodificação,
K D, inverte a criptografia de chave K E, de modo a P = D (K D, E (K E, P)). algoritmos de criptografia desta forma são chamados as
ou público chave, porque convertendo C de volta a P envolve uma série de etapas e uma chave que são diferentes dos
passos e chave de E. A diferença entre a criptografia simétrica e assimétrica é mostrado na A Figura 2-19 .

FIGURA 2-19 Simétrica e criptografia assimétrica

criptografia assimétrica: um criptografa chave, um diferentes decifra-chave.

Uma chave nos dá flexibilidade na utilização de um esquema de criptografia. Podemos criar diferentes criptografias de uma
mensagem de texto simples apenas mudando a chave. Além disso, usando uma chave fornece segurança adicional. Se o
algoritmo de criptografia deve cair nas mãos do interceptor, mensagens futuras ainda pode ser mantida em segredo porque o
interceptor não vai saber o valor da chave. Sidebar 2-14 descreve como os britânicos tratados chaves escritos e códigos na
Segunda Guerra Mundial. Um esquema de criptografia que não requer o uso de uma chave é chamado de

cifra keyless.

Sidebar 2-14 Códigos Silken

Leo Marks [ MAR98 ] Descreve sua vida como um código-maker na Grã-Bretanha durante a Segunda Guerra Mundial. Ou
seja, o britânico contratado Marcas e outros para desenvolver códigos que poderiam ser usados ​por espiões e soldados
no campo. Nos primeiros dias, o esquema de criptografia dependia de poemas que foram escritos para cada espião, e se
baseou na capacidade do espião de memorizar e lembrar os poemas corretamente.

Marcas reduzido o risco de erro através da introdução de um esquema de codificação que foi impressa em folhas de
seda. Silk escondida sob a roupa não podia ser sentida quando o espião foi revistado e procurou. E, ao contrário do
papel, seda queima rápida e completamente, então o espião poderia destruir provas incriminatórias, garantindo também
que o inimigo não poderia ficar ainda fragmentos do código valioso. Quando pressionado por seus superiores a respeito
de porque os britânicos devem usar escassos seda (que também era necessário para as necessidades em tempo de
guerra, como pára-quedas) para códigos, Marks disse que era uma escolha
“Entre seda e cianeto.”

A história da criptografia é fascinante; é bem documentado na de David Kahn livro [ KAH96 ]. Claude Shannon é
considerado o pai da criptografia moderna, porque ele estabeleceu uma base formal, matemática para a segurança da
informação e expôs em vários princípios para a criptografia seguro no naissance de computação digital [ SHA49 ].
Criptografia tem sido usada durante séculos para proteger comunicações diplomáticas e militares, às vezes sem
sucesso completo. A palavra criptografia refere-se à prática do uso de criptografia para esconder texto. UMA cryptanalyst
criptografia estudos e mensagens criptografadas, na esperança de encontrar os significados ocultos. A cryptanalyst
também pode trabalhar defensivamente, sondando códigos e cifras para ver se eles são sólidos o suficiente para
proteger os dados adequadamente.

tanto um criptógrafo e uma tentativa cryptanalyst para traduzir o material codificado de volta para a sua forma original.
Normalmente, um criptógrafo trabalha em nome de um remetente ou destinatário legítimo, enquanto um cryptanalyst trabalha
em nome de um interceptor não autorizado. Finalmente,
criptologia é a investigação e estudo de criptografia e descriptografia; inclui tanto criptografia e
criptoanálise.

criptoanálise

chore de um cryptanalyst é pausa uma criptografia. Ou seja, o cryptanalyst tenta deduzir o significado original de uma
mensagem de texto cifrado. Melhor ainda, o criptoanalista espera para determinar qual algoritmo de descriptografia e,
idealmente qual tecla, corresponde ao algoritmo de criptografia para ser capaz de quebrar outras mensagens codificadas da
mesma forma.

Por exemplo, suponha que dois países estão em guerra e o primeiro país interceptou mensagens criptografadas do
segundo. Cryptanalysts do primeiro país quer decifrar uma mensagem específica, de modo a antecipar os movimentos
e os recursos do segundo. Mas o melhor mesmo é descobrir o método de decodificação real; em seguida, o primeiro
país pode penetrar na criptografia de todos mensagens enviadas pelo segundo país.

Um analista trabalha com uma variedade de informações: mensagens criptografadas, algoritmos de criptografia conhecidos,
texto simples interceptado, itens de dados conhecidos ou suspeitos de estar em uma mensagem de texto cifrado, ferramentas e
técnicas matemáticas ou estatísticas, e propriedades de línguas, bem como a abundância de talento e sorte. Cada pedaço de
evidência pode fornecer uma pista, e o analista coloca as pistas em conjunto para tentar formar uma imagem maior do significado
de uma mensagem no contexto de como a criptografia é feita. Lembre-se que não há regras. Um interceptor pode usar quaisquer
meios disponíveis para trazer à tona o significado da mensagem.

Fator de trabalho

Um algoritmo de criptografia é chamado frágil quando, com o tempo e os dados o suficiente, um analista pode
determinar o algoritmo. No entanto, um algoritmo que é teoricamente quebrável pode de fato ser impraticável para tentar
quebrar. Para ver o porquê, considere uma mensagem de 25 caracteres que se expressa em letras maiúsculas apenas.
Um dado regime cifra pode ter 26 25

(Aproximadamente 10 35) possíveis decifragens, assim que a tarefa é selecionar o caminho certo para fora do 26 25. Se
o seu computador poderia executar na ordem de 10 10 operações por segundo, encontrar este decifração exigiria da
ordem de 10 25 segundos, ou cerca de 10 17

anos. Neste caso, embora saibamos que, teoricamente, poderíamos gerar a solução,
determinar o algoritmo de decifrar, examinando todas as possibilidades pode ser ignorada como inviável com a
tecnologia atual.

A dificuldade de quebrar uma criptografia é chamada de fator trabalho. Mais uma vez, uma analogia das travas físicas podem ser
úteis. Como você sabe, teclas físicas têm entalhes ou outras irregularidades, e os entalhes causa pinos para mover dentro de uma
fechadura, permitindo o bloqueio para abrir. Algumas fechaduras simples, como os que são vendidos com malas, tem apenas um entalhe,
assim que esses bloqueios muitas vezes pode ser aberta com apenas um pedaço de arame dobrado; pior ainda, alguns fabricantes de
produzir apenas alguns (e às vezes apenas um!) distintos projetos internos pinos; você pode ser capaz de abrir qualquer fechadura com
um anel de apenas algumas teclas. É evidente que estas fechaduras são apenas cosméticas.

fechaduras casa comum ter cinco ou seis entalhes, e cada passo pode ter qualquer um dos dez profundidades. Para abrir
este bloqueio é necessário encontrar a combinação certa de profundidade do entalhe, dos quais pode haver até um milhão de
possibilidades, então carregando um anel de que muitas chaves é inviável. Apesar de, em teoria, alguém poderia abrir uma
dessas fechaduras por tentar todas as chaves possíveis, na prática, o número de possibilidades é proibitivo. Nós dizemos que
o fator trabalho para abrir uma dessas fechaduras sem a chave apropriada é grande o suficiente para deter a maioria dos
ataques. Assim também com criptografia: Uma criptografia é adequada se o trabalho de decifrar sem saber a chave de
criptografia é maior do que o valor dos dados criptografados.

fator trabalho: quantidade de esforço necessária para quebrar uma criptografia (ou montar um ataque bem
sucedido)

Duas outras questões importantes devem ser abordadas quando se considera a breakability de algoritmos de criptografia.
Primeiro, o criptoanalista não se pode esperar para tentar apenas o longo caminho duro,. No exemplo que acabamos de
apresentar, a descriptografia óbvio pode exigir 26 25 operações de máquina, mas uma abordagem mais engenhosa pode exigir
apenas 10 15 operações. À velocidade de 10 10 operações por segundo, 10 15 operações demorar um pouco mais de um dia. A
abordagem engenhosa é certamente viável. Na verdade, os jornais às vezes imprimir criptograma quebra-cabeças que os seres
humanos resolver com papel e caneta sozinho, então há claramente um atalho para a nossa máquina computador estimativa de
tempo de anos ou mesmo um dia de esforço. Os jogos de jornais dão dicas sobre comprimentos de palavras e caracteres
repetidos, para que os humanos estão resolvendo um problema mais fácil. Como dissemos, no entanto, cryptanalysts também usar
cada pedaço de informação à sua disposição.

Alguns dos algoritmos que estudamos neste livro são baseados em problemas conhecidos “duras” que levam um longo
tempo não razoável para resolver. Mas o criptoanalista não necessariamente tem que resolver o problema subjacente para
quebrar a criptografia de uma única mensagem. uso malfeita de controles pode revelar palavras prováveis ​ou frases, e um
analista pode usar palpites combinados com uma análise cuidadosa para gerar toda ou grande parte uma mensagem
importante. Ou o criptoanalista pode empregar um espião para obter o texto plano totalmente fora do sistema; analistas
poderiam, então, usar o par de texto simples e encriptado correspondente para inferir o algoritmo ou chave usada para
aplicar a mensagens subsequentes.

Em criptoanálise não há regras: Qualquer ação é fair play.

Em segundo lugar, as estimativas de breakability são baseados na tecnologia atual. Um enorme


avanço na tecnologia de computação tem ocorrido desde 1950. Coisas que eram inviáveis ​em 1940 tornou-se
possível graças a década de 1950, e cada década sucesso trouxe grandes melhorias. A conjectura conhecida como
“Lei de Moore”, afirma que a velocidade dos processadores dobra a cada 1,5 anos, e esta conjectura tem sido
verdade há mais de três décadas. Não ousamos pronunciar um algoritmo seguro apenas porque não pode ser
quebrado com atual
tecnologia, ou pior, que ainda não foi quebrado.

Neste livro, escrever que algo é impossível; por exemplo, é impossível obter texto simples de texto
cifrado, sem a chave e algoritmo correspondente. Por favor, entenda que na criptografia poucas coisas são
realmente impossível: inviável ou proibitivamente difícil, talvez, mas é impossível, não.

Simétrica e Sistemas de criptografia assimétrica

Lembre-se que os dois tipos básicos de criptografias são simétricas (também chamado de “chave secreta”) e assimétrica (também
chamado de “chave pública”). algoritmos simétricos usar uma chave, que funciona tanto para criptografia e descriptografia. Geralmente,
o algoritmo de descriptografia está intimamente relacionado com a criptografia um, essencialmente executando a criptografia em
sentido inverso.

Os sistemas simétricos fornecer um canal de duas vias para seus usuários: A e B compartilham uma chave secreta, e eles
podem tanto informações criptografar para enviar para o outro, bem como descriptografar informações do outro. Enquanto a
chave permanece em segredo, o sistema também fornece
autenticidade, prova de que uma mensagem recebida não foi fabricada por alguém que não o remetente declarou. 3 Autenticidade é

assegurada porque somente o remetente legítimo pode produzir uma mensagem que irá descriptografar corretamente com a chave

compartilhada.

3 . Sendo este livro a segurança, destacamos que a prova é realmente que a mensagem foi enviada por alguém que teve ou poderia simular o efeito de chave do
remetente. Com muitas ameaças de segurança, há um pequeno, mas diferente de zero, o risco de que a mensagem não é realmente do remetente, mas é uma
falsificação complexa.

Simetria é uma grande vantagem deste tipo de criptografia, mas também leva a um problema: Como é que dois usuários A e
B obter a sua chave secreta compartilhada? E apenas A e B pode usar essa chave para as suas comunicações criptografadas.
Se A quer compartilhar comunicações criptografadas com outro usuário C, A e C precisa de uma chave secreta compartilhada
diferente. Gerenciamento de chaves é a principal dificuldade no uso de criptografia simétrica. Em geral, n os usuários que querem
se comunicar em pares precisa n * (N - 1) / 2 chaves. Em outras palavras, o número de chaves necessárias aumenta a uma taxa
proporcional à quadrado do número de usuários! Assim, uma propriedade de sistemas de criptografia simétrica é que eles exigem
um meio de distribuição de chaves.

sistemas de chaves assimétricas ou públicas, por outro lado, geralmente têm acompanhado precisamente pares de chaves. As
chaves são produzidas em conjunto ou uma deriva matematicamente a partir do outro. Assim, um processo calcula ambas as teclas como
um conjunto.

Mas para ambos os tipos de criptografia, uma chave deve ser mantido bem protegido. Uma vez que a chave simétrica ou privada é
conhecida por alguém de fora, todas as mensagens escritas previamente ou no futuro pode ser descriptografado (e, portanto, ler ou
modificado) pelo outsider. Assim, para todos os algoritmos de criptografia, gerenciamento de chaves é uma questão importante.
Trata-se de armazenar, proteger, e ativar as chaves.

sistemas assimétricos sobressair em gerenciamento de chaves. Pela natureza da abordagem de chave pública, você pode enviar
uma chave pública em uma mensagem de e-mail ou publicá-la em um diretório público. Apenas a chave privada correspondente, que,
presumivelmente, não é divulgado, pode decifrar o que
foi criptografado com a chave pública.

Stream e Bloco Cifras

Uma caracterização definitiva de algoritmos de criptografia relaciona-se com a natureza dos dados a ser escondida.
Suponha que você está streaming de vídeo, talvez um filme, de um satélite. O fluxo pode vir em rajadas, dependendo de
coisas como a carga sobre o satélite e a velocidade em que o emissor eo receptor podem operar. Para tal aplicação, você
pode usar o que é chamado encriptação de fluxo, em que cada bit, ou talvez cada byte, do fluxo de dados é encriptada
separadamente. Um modelo de fluxo de cifragem é mostrado na A Figura 2-20 . Note-se que os símbolos de entrada são
transformados um de cada vez. A vantagem de uma cifra de fluxo é que ele pode ser aplicado imediatamente para todos os
dados itens estão prontos para transmitir. Mas a maioria dos algoritmos de criptografia envolvem transformações
complexas; para fazer essas transformações sobre um ou alguns bits de cada vez é caro.

FIGURA 2-20 fluxo enciphering

Para resolver este problema e tornar mais difícil para um criptoanalista para quebrar o código, podemos usar cifras de
bloco. UMA block cipher encripta um grupo de símbolos de texto puro como um único bloco. Um algoritmo de codificação de
bloco realiza seu trabalho em uma quantidade de dados em texto puro de uma só vez. Como uma máquina que corta 24
biscoitos de uma vez, estes algoritmos aproveitar economias de escala por operar em grandes quantidades de dados ao
mesmo tempo. Blocos para tais algoritmos são tipicamente 64, 128, 256 bits ou mais. O tamanho do bloco não precisa ter
qualquer relação particular com o tamanho de um personagem. cifras de bloco trabalhar em blocos de texto simples e
produzir blocos de texto cifrado, como mostrado na A Figura 2-21 . Na figura, a caixa central representa uma máquina de
criptografia: O par em texto anterior é convertido po, a uma corrente a ser convertido é IH, ea máquina está prestes a converter ES.
FIGURA 2-21 block Cipher

cifras de fluxo encriptar um bit ou um byte de cada vez; cifras de bloco encriptar um
número fixo de bits como um único bloco.

Tabela 2-10 lista as vantagens e desvantagens de fluxo e criptografia bloco de algoritmos.


TABELA 2-10 Stream e Bloco algoritmos de criptografia

Com esta descrição das características de diferentes algoritmos de criptografia, podemos agora voltar-se para alguns
algoritmos de criptografia amplamente utilizados. Nós apresentamos como cada um trabalha, um pouco do contexto
histórico e motivação para cada, e alguns pontos fortes e fracos. Identificamos esses algoritmos pelo nome porque esses
nomes aparecem na literatura popular. Nós também introduzir outros algoritmos simétricos em Capítulo 12 . Claro que
você deve reconhecer que estes são apenas alguns exemplos de algoritmos populares; ao longo do tempo estes
algoritmos podem ser substituídas por outras. Em grande criptografia grau tornou-se plug-and-play, o que significa que
em uma desenvolvedores de aplicativos podem substituir um algoritmo para outro do mesmo tipo e características
semelhantes. Dessa forma os avanços no campo da criptografia não exigem que todos os aplicativos usando criptografia
ser reescrito.

DES: O Data Encryption Standard


O Data Encryption Standard (DES) [ NBS77 ], Um sistema desenvolvido para o governo dos EUA, foi destinado para
utilização pelo público em geral. organizações de normalização ter aceito oficialmente como um padrão de criptografia,
tanto nos Estados Unidos e no exterior. Além disso, muitos sistemas de hardware e software foram concebidos com DES.
Por muitos anos foi o algoritmo de escolha para a proteção de dados financeiros, pessoais e corporativos; no entanto, os
pesquisadores cada vez mais questionada a sua adequação à medida que envelhecia.

Visão geral do algoritmo DES

O algoritmo DES [ NBS77 ] Foi desenvolvido na década de 1970 pela IBM para o Instituto Nacional de
Padrões e Tecnologia (NIST), então chamado de National Bureau of Standards (NBS). DES é uma
combinação cuidadosa e complexa de dois blocos de construção fundamentais da criptografia: substituição e
transposição. O algoritmo deriva a sua força de aplicação repetida destas duas técnicas, um em cima do
outro, para um total de 16 ciclos. A complexidade de traçar um único bit por 16 iterações de substituições e
transposições, até agora parou de pesquisadores no público de identificar mais do que um punhado de
propriedades gerais do algoritmo.

O algoritmo começa por criptografar o texto simples como blocos de 64 bits. A chave é de 64 bits de comprimento, mas na verdade,
pode ser qualquer número de 56 bits. (Os extras 8 bits são usados ​frequentemente como dígitos de verificação, mas não afetam a
criptografia em implementações normais. Assim, podemos dizer que DES usa uma chave, a força do que é 56 bits.) O usuário pode
escolher uma nova chave à vontade qualquer tempo lá é a incerteza sobre a segurança da chave de idade.

DES codifica blocos de 64 bits, utilizando uma chave de 56 bits.

DES usa aritmética único padrão e operações lógicas em dados binários até 64 bits de comprimento, por isso é adequado
para implementação em software na maioria dos computadores atuais. Criptografar com DES envolve 16 iterações, cada um
empregando blocos que substituem de bits (chamado um passo de substituição), baralhar os bits (chamados um passo de
permutação), e misturando-se em bocados a partir da chave (chamados uma transformação chave). Embora complexo, o
processo é conduzido mesa e repetitivo, tornando-o adequado para aplicação sobre um chip de uso único. Na verdade, várias
dessas fichas estão disponíveis no mercado para utilização como componentes básicos em aparelhos que usam criptografia
DES em um aplicativo.
Duplo e Triplo DES

Como você sabe, o poder de computação tem aumentado rapidamente ao longo das últimas décadas, e promete continuar
a fazê-lo. Por esta razão, o comprimento da chave DES de 56 bits não é suficiente para o conforto de algumas pessoas.
Desde os anos 1970, pesquisadores e profissionais têm se interessado em uma versão mais longa-chave de DES. Mas temos
um problema: O design algoritmo DES é fixado em uma chave de 56 bits.

duplo DES

Para lidar com o desconforto, alguns pesquisadores sugerem usando uma criptografia dupla para maior sigilo. A
criptografia dupla funciona da seguinte maneira. Tome duas chaves, k 1 e
k 2, e realizar duas criptografias, um em cima do outro: E (k 2, E (k 1, m)). Em teoria, esta abordagem deve multiplicar a
dificuldade de quebrar a criptografia, assim como duas fechaduras são mais difíceis de pegar de um.

Infelizmente, essa suposição é falsa. Ralph Merkle e Martin Hellman [ MER81 ] Mostrou que dois encriptações são pouco melhor
do que uma: dois encriptações com chaves de 56 bits diferentes são equivalentes em factor de trabalho para uma encriptação com
uma chave de 57 bits. Assim, a criptografia dupla acrescenta apenas uma pequena quantidade de trabalho extra para o atacante
que está tentando inferir a chave (s) em que um pedaço de texto cifrado foi criptografado. Como logo descrever, algumas chaves
DES de 56 bits foram derivados em poucos dias; duas vezes dias ainda é dias, quando a esperança era para adicionar meses ou
mesmo anos de trabalho para o segundo criptografia. Infelizmente, o dobro DES acrescenta essencialmente não mais segurança.

DES triplo

No entanto, um truque simples, de fato, aumentar a segurança de DES. Usando três chaves acrescenta força
significativa.

O assim chamado DES triplo procedimento é C = E (k 3, E (k 2, E (k 1, m))). Ou seja, você criptografar com uma chave, em seguida, com
o segundo e, finalmente, com um terceiro. Este processo dá uma força mais ou menos equivalente a uma chave de 112 bits (por
causa do ataque duplo DES vence a força de uma das três teclas, mas não tem nenhum efeito sobre a terceira chave).

Uma variação menor de triple DES, que algumas pessoas também confusamente chamar triple DES, é
C = E (k 1, D (k 2, E (k 1, m))). Ou seja, você criptografar com uma chave, decifrar com uma segunda, e criptografar com o primeiro novamente.
Esta versão requer apenas duas chaves. (O segundo passo descriptografar também faz este trabalho processo para criptografias único
com uma chave: a descriptografia cancela o primeiro criptografia, de modo que o resultado líquido é uma criptografia A forma de
criptografar-descriptografar criptografar é útil porque um algoritmo pode produzir resultados para ambos convencional. -chave DES
único e o método de duas chaves mais seguro.) Este dois chave, versão de três etapas é sujeito a um outro ataque complicado, de
modo que a sua força é avaliado em apenas cerca de 80 bits. Ainda assim, 80 bits é além da capacidade de craqueamento razoável
para hardware atual.

Em resumo, o DES comum tem um espaço de chave de 56 bits, duplo DES é dificilmente melhor, mas de duas chaves DES triplo
dá um comprimento efectivo de 80 bits, e três-chave DES triplo dá uma força de 112 bits. Lembre-se por isso que estamos tão fixados
no tamanho da chave: Se nenhuma outra maneira bem-sucedido, o atacante pode sempre tentar todas as chaves possíveis. A chave
mais longa significa significativamente mais trabalho para este ataque a dar frutos, com o fator trabalho dobrando para cada um
adicional
bit no comprimento da chave. Agora, cerca de meio século depois DES foi criado, uma chave de 56 bits é inadequada para
qualquer confidencialidade sério, mas 80- e 112-bit eficazes tamanhos de chave recursos de segurança razoável. Resumimos
estas formas de DES em Tabela 2-11 .

TABELA 2-11 Formas de DES

Segurança de DES

Desde que foi anunciado pela primeira vez, DES tem sido controverso. Muitos pesquisadores têm questionado a
segurança que ele proporciona. Por causa de sua associação com o governo dos EUA, especificamente a Agência de
Segurança Nacional dos EUA (NSA), que fez algumas alterações inexplicáveis ​entre o IBM proposto e que o NBS
realmente publicado, algumas pessoas têm suspeita que o algoritmo foi de alguma forma, enfraquecido, para permitir
que o governo snoop em dados criptografado. Grande parte dessa controvérsia tem aparecido na literatura aberta, mas
certas características DES foram nem revelado pelos designers nem inferida por analistas externos.

Whitfield Diffie e Martin Hellman [ DIF77 ] Argumentou em 1977 que uma chave de 56 bits é muito curto. Em 1977, foi proibitivo
testar todas 256 (aproximadamente 10 15) chaves em computadores então vigentes. Mas eles argumentam que ao longo do tempo, os
computadores se tornariam mais poderoso e o algoritmo DES permaneceria inalterado; Eventualmente, a velocidade dos
computadores ultrapassará a força do DES. Exatamente o que aconteceu cerca de 20 anos mais tarde. Em 1997, os pesquisadores
utilizam uma rede de mais de 3.500 máquinas em paralelo foram capazes de inferir uma chave DES em trabalho de quatro meses. E
em 1998 para cerca de US $ 200.000 pesquisadores norte-americanos construíram uma “DES Cracker” máquina especial que poderia
encontrar uma chave DES em aproximadamente quatro dias, um resultado melhorado mais tarde para algumas horas [ EFF98 ].

Será que isso significa DES é inseguro? Não, não exatamente. Ninguém ainda mostrado falhas graves no próprio
algoritmo DES. O ataque 1997 exigiu uma grande quantidade de cooperação, ea máquina de 1998 é bastante caro. Mas
mesmo que DES convencional pode ser atacado, triple DES ainda é bem além do poder desses ataques. Lembre-se o
impacto do crescimento exponencial: Digamos, para simplificar, que o DES única chave pode ser quebrado em uma hora. A
versão double-chave simples poderia, então, ser quebrada em duas horas. mas 2 80 / 2 56 = 2 24, que é mais de 16,7 milhões, o
que significa que levaria 16 milhões de horas, quase 2.000 anos, para derrotar a criptografia de dois chave DES triplo, e
consideravelmente mais tempo para a versão de três-chave.
No entanto, a estrutura básica do DES com a sua chave de comprimento fixo de 56 bits e o número fixo de
iterações torna evidente a necessidade de um algoritmo novo, mais forte e mais flexível. Em 1995, o NIST
começou a busca por um algoritmo de criptografia novo, forte. A resposta a essa busca tornou-se o Advanced
Encryption Standard ou AES.

AES: Advanced Encryption System

Depois de um concurso público e revisão, NIST selecionado um algoritmo chamado Rijndael como o novo sistema
de criptografia avançada; Rijndael é agora conhecido mais amplamente como AES. AES foi aprovada para uso pelo
governo dos EUA em dezembro de 2001 e se tornou Federal Information Processing Standard 197 [ NIS01 ]. AES é
provável que seja o algoritmo simétrico de classe comercial de escolha por anos, se não décadas. Vejamos mais de
perto.

Visão de Rijndael

Rijndael é um algoritmo rápido que pode ser facilmente implementado em processadores simples. Embora tenha
uma forte base matemática, ele usa principalmente substituição, transposição, a mudança, OU exclusivo, e as
operações de adição. Como DES, AES usa ciclos de repetição.

Existem 10, 12, ou 14 ciclos para chaves de 128, 192, e 256 bits, respectivamente. Em Rijndael, os ciclos são chamados de
“rodadas”. Cada rodada consiste em quatro etapas que substituem e precipitação BITS. Bits da chave são frequentemente
combinados com os bits de resultados intermédios, de modo que os bits chave também são bem difundidas no resultado. Além
disso, estes quatro passos são extremamente rápidos. O algoritmo AES é representado na A Figura 2-22 .
FIGURA 2-22 AES Encryption Algorithm

Força do Algoritmo

As características e força aparente de DES e AES são comparados em tabela 2-12 .


Lembre-se, é claro, que estes números força só se aplica se a implementação e uso são robustos; um algoritmo forte
perde força, se usado com uma fraqueza que deixa de fora determinar as propriedades fundamentais dos dados
criptografados.
TABELA 2-12 Comparação de DES e AES

Além disso, o número de ciclos pode ser alargado de uma forma natural. Com DES o algoritmo foi definido
para precisamente 16 ciclos; para estender esse número exigiria redefinição substancial do algoritmo. A estrutura
interna da AES não tem uma limitação priori sobre o número de ciclos. Se um cryptanalyst já concluiu que 10 ou
12 ou 14 rodadas eram demasiado baixos, a única alteração necessária para melhorar o algoritmo seria mudar o
limite de um loop de repetição.

Uma marca de confiança é que o governo dos Estados Unidos aprovou AES para proteger secreto e Top
Secret documentos classificados. Esta é a primeira vez que os Estados Unidos já aprovou o uso de um algoritmo
comercial derivado fora do governo (e, além disso, fora dos Estados Unidos) para criptografar dados
classificados.

No entanto, não podemos descansar sobre os louros. Ninguém pode prever agora o que limitações cryptanalysts pode
identificar no futuro. Felizmente, cryptologists talentosos continuar a investigar algoritmos ainda mais fortes que serão
capazes de substituir AES quando se torna obsoleto. Atualmente, AES parece ser uma melhoria significativa sobre DES, e
ele pode ser melhorado de forma natural, se necessário. DES ainda está em uso generalizado, mas AES também é
amplamente adotado, particularmente para novas aplicações.

Criptografia de chave pública

Até agora, vimos algoritmos de criptografia do ponto de vista de fazer o fácil lutando para o remetente (de modo que a
criptografia é rápido e simples) ea descriptografia fácil para o receptor, mas não para um intruso. Mas este ponto de vista
funcional de transformar texto simples para texto cifrado é apenas uma parte da imagem. Nós também deve descobrir
como distribuir chaves de criptografia. Notamos como as chaves úteis podem estar em dissuadir um intruso, mas a chave
deve permanecer em segredo para que ela seja eficaz. Os algoritmos de criptografia que apresentamos até agora são
chamados simétrico ou chave secreta algoritmos. Os dois algoritmos simétricos mais utilizados, DES e AES, funcionam de
forma semelhante: Dois usuários têm cópias do
mesma chave. Um usuário usa o algoritmo para criptografar algum texto simples na chave, eo outro usuário usa o
inverso do algoritmo com a mesma chave para descriptografar o texto cifrado. O cerne da questão é que todo o
poder da criptografia depende do sigilo da chave.

Em 1976, Whitfield Diffie e Martin Hellman [ DIF76 ] Inventou criptografia de chave pública, um novo tipo de criptografia.
Com um sistema de criptografia de chave pública, cada usuário tem duas chaves, uma das quais não têm de ser mantidos
em segredo. Embora contraditório, na verdade, a natureza pública da chave não comprometer o sigilo do sistema. Em vez
disso, a base para a criptografia de chave pública é permitir que a chave para ser divulgado, mas para manter o segredo
técnica de decodificação. sistemas criptográficos de chave pública alcançar este objetivo, usando duas chaves: uma para
criptografar e outra para descriptografar. Embora estas teclas são produzidos em pares matematicamente relacionados, um
outsider é efetivamente incapaz de usar uma chave para derivar o outro.

Nesta seção, nós olhamos maneiras de permitir que a chave para ser público, mas ainda proteger a mensagem. Destaca-se
também o algoritmo RSA, um sistema de chave pública de nível comercial popular. Outros algoritmos, tais como os sistemas de
encriptação curva elíptica [ MIL85 , KOB87 ] Eo El Gamal algoritmo [ ELG85 ], Ambas as quais cobrimos em Capítulo 12 , Operam de
forma semelhante (embora a matemática subjacente são muito diferentes). Nós nos concentramos em RSA, porque muitas
aplicações usá-lo. Nós também apresentamos um esquema matemático que dois usuários podem construir em conjunto uma
chave de criptografia secreta sem ter quaisquer segredos anteriores.

Motivação

Por que deveria fazer a chave pública ser desejável? Com um sistema de chave simétrica convencional, cada par de usuários
precisa de uma chave separada. Mas com sistemas de chave pública, qualquer pessoa usando uma única chave pública pode enviar
uma mensagem secreta a um usuário, ea mensagem permanece adequadamente protegido de ser lido por um interceptor. Vamos
investigar por que isso é assim.

Lembre-se que, em geral, um n- sistema de usuário requer n * (N - 1) / 2 chaves, e cada um deve utilizador
acompanhar e lembre-se uma chave para o outro usuário com quem ele ou ela quer comunicar. À medida que o número de
utilizadores aumenta, o número de teclas aumenta rapidamente, como se mostra na Figura 2- 23 . Determinar e distribuir estas
teclas é um problema. Um problema mais sério é manter a segurança para as chaves já distribuídos-não podemos esperar que
os usuários de memorizar tantas chaves. Pior, a perda ou a exposição de chaves de um usuário requer a criação de um novo
par de chaves com cada um dos correspondentes do usuário.
FIGURA 2-23 Explosão em Número de Chaves

Características

Podemos reduzir o problema da proliferação chave usando uma abordagem de chave pública. Em um
chave pública ou sistema de criptografia assimétrica, cada usuário tem duas chaves: a chave pública e uma chave privada. O
usuário pode livremente publicar a chave pública, porque cada tecla faz somente a criptografia ou descriptografia, mas não
ambos. As teclas funcionam como inversos, o que significa que uma chave desfaz a criptografia fornecida pelo outra chave. Mas
deduzir uma chave do outro é efetivamente impossível.

Para ver como, vamos k PRIV ser a chave privada de um usuário, e deixe k BAR ser a chave pública correspondente. Então, texto

simples criptografada usando a chave pública é decifrada pela aplicação da chave privada; podemos escrever a relação como

P = D (k PRIV, E (k BAR, P))

Ou seja, um usuário pode decodificar com uma chave privada que alguém tenha criptografado com a chave pública
correspondente. Além disso, com alguns algoritmos de criptografia de chave pública, incluindo RSA, temos esta relação:

P = D (k BAR, E (k PRIV, P))

Em outras palavras, um usuário pode criptografar uma mensagem com uma chave privada, ea mensagem pode ser revelado apenas
com a chave pública correspondente.

Essas duas propriedades dizem-nos que as chaves públicas e privadas pode ser aplicado em qualquer ordem. Em particular, a
função de desencriptação D pode ser aplicada a qualquer argumento para que possamos decifrar antes de criptografar. Com a
criptografia convencional, raramente pensam de descriptografar
antes criptografia. Mas o conceito faz sentido com chaves públicas, onde ele simplesmente significa aplicar a
transformação privada primeiro e depois o público.

Temos notado que um grande problema com a criptografia simétrica é o grande número de chaves de um único usuário tem
que armazenar e controlar. Com chaves públicas, apenas duas chaves são necessários por usuário: uma pública e uma privada.
Vamos ver o que diferença isso faz com que o número de chaves necessárias. Suponha que temos três usuários, B, C, e D, que
devem passar protegidas
mensagens para o usuário A, bem como para o outro. Uma vez que cada par distinto de usuários precisa de uma chave, cada usuário que
precisa de três chaves diferentes; Por exemplo, uma precisaria de uma chave para B, uma chave para C, e uma chave para D. Mas o uso
de criptografia de chave pública, cada um de B, C e D pode criptografar mensagens para A, utilizando a chave pública de A. Se B tem
criptografada uma mensagem usando a chave pública de A, C não podes decifrá-lo, mesmo que C sabia que foi criptografado com a chave
pública de A. Aplicando a chave pública de A duas vezes, por exemplo, não descriptografar a mensagem. (Nós assumimos, naturalmente,
que a chave privada de A permanece em segredo.) Assim, o número de chaves necessárias no sistema de chave pública é de apenas dois
por usuário.

O Rivest-Shamir-Adelman (RSA) Algoritmo

o Rivest-Shamir-Adelman (RSA) criptossistema é um sistema de chave pública. Baseado em um


problema difícil subjacente e nomeado após seus três inventores (Ronald Rivest, Adi Shamir e Leonard
Adleman), esse algoritmo foi introduzido em 1978 [ RIV78 ]. Cryptanalysts ter submetido RSA à extensa
criptoanálise, mas eles não encontraram falhas graves.

As duas chaves usadas na RSA, d e e, são usados ​para a descodificação e codificação. Eles são realmente
intercambiáveis: Qualquer um pode ser escolhido como a chave pública, mas ter sido escolhido, o outro deve ser mantido
privado. Para simplificar, chamamos a chave de criptografia e
e a chave de decodificação d. Denotamos texto simples como P e o seu texto cifrado correspondente quanto C. C = RSA ( PE). Além
disso, devido à natureza do algoritmo RSA, as chaves podem ser aplicadas em qualquer ordem:

P = E (D (P)) = D (E (P))

ou

P = RSA (RSA ( PE), d) = RSA (RSA ( P, d), e)

(Você pode pensar E e D como duas funções complementares, cada um dos quais pode “desfazer” efeito do outro.)

RSA tem a propriedade lamentável que as chaves são longos: 256 bits é considerado o comprimento mínimo utilizável,
mas na maioria dos contextos especialistas preferem chaves na ordem dos 1000 a 2000 bits. Encryption em RSA é feito por
exponenciação, levantando cada bloco de texto simples a uma potência; que o poder é a chave e. Em contraste com a
substituição rápida e transposição de algoritmos simétricos, a exponenciação é extremamente demorado em um computador.
Pior ainda, o tempo para criptografar aumenta exponencialmente como o expoente (key) cresce mais. Assim, a RSA é
marcadamente mais lenta do que o DES e AES.

O algoritmo de criptografia é baseada no problema subjacente de fatorar números grandes em um conjunto finito chamado de
um campo. Até agora, ninguém encontrou um atalho ou caminho mais fácil de levar grandes números em um campo. Em um
trabalho altamente técnico, mas excelente, Dan Boneh [ BON99 ] Comentário de todos os ataques de criptoanálise conhecidos
sobre RSA e conclui que nenhum é significativo. Porque o problema de fatoração foi aberto para muitas décadas, a maioria dos
criptógrafos considerar este problema uma base sólida para um sistema de criptografia segura.

Para resumir, os dois algoritmos simétricos DES e AES fornecer criptografia sólido de blocos de 64 a 256 bits de
dados. O algoritmo RSA assimétrica criptografa blocos de vários tamanhos. DES e AES são substancialmente mais
rápido do que RSA, por um fator de 10.000 ou mais, e as suas operações primitivas bastante simples foram
construídos em algum computador
fichas, tornando a sua criptografia ainda mais eficiente do que a RSA. Portanto, as pessoas tendem a usar DES e AES como
os principais workhorses criptográficas, e reservar mais lento RSA para utilizações limitadas em que se destaca.

As características de chave secreta (simétrica) e de chave pública (assimétrica) algoritmos são comparados em Tabela
2-13 .

TABELA 2-13 Comparação de chave secreta e criptografia de chave pública

Criptografia de chave pública para chaves secretas de câmbio

Algoritmos de criptografia por si só não são a resposta às necessidades de criptografia de todos. Embora implementos
criptografia protegida canais de comunicação, ele também pode ser usado para outras funções. Na verdade, combinando
simétrica e criptografia assimétrica, muitas vezes aproveita as melhores características de cada um.

Suponha que você precisa enviar uma mensagem protegida com alguém que você não conhece e quem não o conhece.
Esta situação é mais comum do que você pode pensar. Por exemplo, você pode querer enviar a sua declaração de imposto
de renda para o governo. Você quer que a informação a ser protegida, mas você não necessariamente sabe a pessoa que
está recebendo a informação. Da mesma forma, você pode querer comprar de um site de compras, trocar e-mail privado
(criptografado), ou mandar para dois hosts para estabelecer um canal protegido. Cada uma dessas situações depende de ser
capaz de trocar uma chave de criptografia de tal forma que ninguém mais pode interceptá-lo. O problema de duas partes
anteriormente desconhecidas troca de chaves criptográficas é ao mesmo tempo difícil e importante. Na verdade, o problema é
quase circular: Para estabelecer uma sessão criptografada, você precisa de um meio criptografados para as chaves de
câmbio.

criptografia de chave pública pode ajudar. Desde chaves assimétricas vêm em pares, uma metade do par pode ser exposto
sem comprometer a outra metade. Na verdade, você poderia pensar da metade pública do par de chaves como verdadeiramente
público-postado em um website público, listado em um diretório público semelhante a uma lista de telefones, ou enviados
abertamente em uma mensagem de e-mail. Essa é a beleza de criptografia de chave pública: Enquanto a chave privada não é
divulgado, uma chave pública pode ser aberta sem comprometer a segurança da criptografia.

Simples Key Exchange Protocol


Suponha que um remetente, Amy, e um receptor, Bill, ambos têm pares de chaves assimétricas para um algoritmo de criptografia
comum. Nós denotar qualquer função de criptografia de chave pública como E (k, X),
ou seja, executar a função de criptografia de chave pública no X usando a chave k. Chame as chaves
k PRIV-A, k PUB-A, k PRIV-B, e k PUB-B, para as chaves públicas e privadas para Amy e Bill, respectivamente.

O problema que queremos resolver é para Amy e Bill para ser capaz de estabelecer uma chave secreta de
criptografia (algoritmo simétrico) que só eles sabem. A solução mais simples é para Amy para escolher qualquer chave
simétrica K, e envia E (k PRIV-A, K) cobrar. Bill leva a chave pública de Amy, remove a criptografia, e obtém K.

Esta análise é falho, no entanto. Como é que o remetente saiba a chave pública realmente pertence ao destinatário
pretendido? Considere, por exemplo, o cenário seguinte. Suponha que Amy e Bill não tem uma placa de boletim
conveniente. Então, Amy apenas pede Bill para sua chave. Basicamente, o protocolo de troca de chave, representado nas A
Figura 2-24 , Funcionaria assim:

1. Amy diz: Bill, por favor me envie sua chave pública.

2. Bill responde: Aqui, Amy; esta é a minha chave pública.

3. Amy responde: Obrigado. I têm gerado uma chave simétrica para nós a utilizar para este intercâmbio.
Estou enviando-lhe a chave simétrica criptografada com sua chave pública.

FIGURA 2-24 Key Exchange Protocol

No subversão mostrado na A Figura 2-25 , Inserimos um atacante, Malvolio, neste


comunicação.

1. Amy diz: Bill, por favor me envie sua chave pública.

1a. Malvolio intercepta a mensagem e modas uma nova mensagem para Bill, que supostamente vêm de Amy, mas
com endereço de retorno de Malvolio, pedindo a chave pública de Bill.

2. Bill responde: Aqui, Amy; esta é a minha chave pública. (Devido ao endereço de retorno no passo 1a, esta
resposta vai para Malvoli.)

2a. Malvolio detém a chave pública de Bill e envia própria chave pública de Malvolio para Amy, alegando que é de
Bill.

3. Amy responde: Obrigado. I têm gerado uma chave simétrica para nós a utilizar para este intercâmbio.
Estou enviando-lhe a chave simétrica criptografada com sua chave pública.
3a. Malvolio intercepta esta mensagem e obtém e mantém a chave simétrica Amy tem gerado.

3b. Malvolio gera uma nova chave simétrica e envia para Bill, com uma mensagem supostamente enviada pela
Amy: Obrigado. I têm gerado uma chave simétrica para nós a utilizar para este intercâmbio. Estou enviando-lhe a
chave simétrica criptografada com sua chave pública.

FIGURA 2-25 Protocolo Key Exchange com uma Man in the Middle Em resumo, Malvolio agora detém
duas chaves de criptografia simétrica, cada um compartilhado com Amy e Bill. Não só pode Malvolio furtivamente obter
todos os seus intercâmbios, mas Amy e Bill não pode se comunicar de forma segura com o outro porque nem compartilha
uma chave com o outro.

Deste ponto em diante, todas as comunicações passam por Malvolio. Tendo ambas as chaves simétricas,
Malvolio pode decifrar nada recebeu, modificá-lo, criptografá-lo sob a outra chave, e transmitir a versão modificada
para a outra parte. Nem Amy nem Bill está consciente do switch. Este ataque é um tipo de homem no meio 4 fracasso,
em que um terceiro não autorizado intercede em uma atividade presume ser exclusivamente entre duas pessoas.
Vejo
Sidebar 2-15 para um exemplo de um ataque do mundo real man-in-the-middle.

4 . Infelizmente, esta terminologia é irremediavelmente sexista. Mesmo se nós chamamos esses ataques pessoa-in-the-middle ou the-middle neste livro-in-intruso,
você iria encontrar apenas o termo man-in-the-middle utilizado por outros escritores, que também usam termos como man- in-the-browser e man-in-the-telefone,
que surgem em Capítulo 4 deste livro. Assim, estamos lamentavelmente preso com o termo convencional.
Sidebar 2-15 Aspidistra, um homem WW II no Oriente
Durante a Segunda Guerra Mundial a Grã-Bretanha usou um ataque man-in-the-middle para iludir os pilotos e civis
alemães. Aspidistra, o nome de uma planta de casa comum, também conhecida como planta de ferro fundido por sua
capacidade aparente de viver para sempre, também foi o nome dado a um transmissor de rádio gigante do Departamento
de Guerra comprados a partir de RCA em 1942. A transmissão transmissor de 500 kW de poder, dez vezes o poder
permitido a qualquer
station EUA na época, o que significava Aspidistra foi capaz de transmitir sinais da Grã-Bretanha para a
Alemanha.

Parte da operação de Aspidistra era para iludir pilotos alemães transmitindo direções espúrias
(terra, aqui, virar). Embora os pilotos também recebeu instruções de vôo válidos a partir de seus
próprios controladores, essa conversa adicional confundiu e poderia resultar em vôo
desnecessário e tempo perdido. Esta parte do ataque foi apenas um ataque de representação.

Certas emissoras de rádio alemãs em áreas-alvo foram desligados para evitar serem beacons pelo
qual aviões aliados poderiam em casa sobre o sinal; bombardeiros iria seguir o sinal e destruir a antena
e seu transmissor nas proximidades, se as estações de transmissão continuamente. Quando uma
estação foi desligado, os britânicos imediatamente entrou no ar usando Aspidistra na mesma freqüência
como a estação dos alemães apenas desligado. Eles copiado e retransmitido um programa de outra
estação alemã, mas intercaladas mensagens de propaganda que poderiam desmoralizar cidadãos
alemães e enfraquecer o apoio ao esforço de guerra.

Os alemães tentaram contrariar as transmissões falsas, aconselhando os ouvintes que o inimigo


estava transmitindo e aconselhar o público a ouvir o anúncio oficial-que transmissão alemão, é
claro, os britânicos devidamente copiado e transmissão
si mesmos. (Mais detalhes e As fotos está em
http://www.qsl.net/g0crw/Special%20Events/Aspidistra2.htm , e
http://bobrowen.com/nymas/radioproppaper.pdf .)

Protocolo Revisto Key Exchange

Lembre-se que começamos esta discussão com um ataque man-in-the-middle contra um protocolo de troca de chaves
simples. O protocolo era defeituoso

1. Um diz: B, por favor me envie sua chave pública.

2. B responde: Aqui, A; esta é a minha chave pública.

3. A responde: Obrigado. I têm gerado uma chave simétrica para nós a utilizar para este intercâmbio. Estou
enviando-lhe a chave simétrica criptografada com sua chave pública.

Na etapa 2 chave pública o intruso intercepta do B e passa ao longo do intruso do. O intruso pode ser frustrado se A e troca
B metade de uma tecla de cada vez. Metade de uma chave é inútil para o intruso, porque não é o suficiente para criptografar ou
descriptografar qualquer coisa. Sabendo metade da chave não materialmente melhorar a capacidade do intruso para quebrar
criptografia no futuro.

Rivest e Shamir [ RIV84 ] Desenvolveram um protocolo sólido como se segue.

1. Amy envia sua chave pública para Bill.


2. Bill envia sua chave pública para Amy.

3. Amy cria uma chave simétrica, criptografa usando a chave pública de Bill, e envia metade do resultado para
Bill. (Nota: a metade do resultado pode ser o primeiro n / 2 bits, todos os bits de números ímpares, ou alguma
outra forma acordado.)

4. Bill responde a Amy que ele recebeu o resultado parcial (que ele não pode interpretar neste momento, então ele
está confirmando apenas que ele recebeu alguns bits). Bill criptografa qualquer número aleatório com a sua chave
privada e envia metade dos bits para Amy.

5. Amy envia a outra metade do resultado criptografado para Bill.

6. Bill reúne as duas metades do resultado de Amy, decifra-lo usando sua chave privada e, assim, obtém a
chave simétrica compartilhada. Bill envia a outra metade de seu número aleatório encriptado para Amy.

7. Amy reúne as duas metades do número aleatório de Bill, decifra-lo usando sua chave privada, extrai
número aleatório de Bill, criptografa usando a chave simétrica, agora compartilhada, e envia isso para Bill.

8. Bill decifra transmissão de Amy com a chave simétrica e compara com o número aleatório
que ele escolheu no passo 6. Um jogo confirma a validade da troca.

Para ver por que este protocolo funciona, olhar para a etapa 3. Malvolio, o intruso, certamente pode interceptar ambas as
chaves públicas nas etapas 1 e 2 e substituir o seu próprio. No entanto, na etapa 3 Malvolio não pode tomar a metade do resultado,
decifrá-lo usando sua chave privada e criptografar novamente sob chave de Bill. Bits não pode ser decifrado um por um e
remontado.

Na etapa 4 Bill pega qualquer número aleatório, que Amy depois retorna ao Bill para mostrar que ela recebeu com
sucesso o valor criptografado Bill enviado. Tal valor aleatório é chamado de
nonce, um valor insignificante em e de si mesmo, para mostrar actividade (liveness) e originalidade (não uma repetição). Em
alguns protocolos o receptor decifra o nonce, adiciona 1 a ela, reencrypts o resultado, e devolve-lo. Outras vezes, o uso único
inclui uma data, a hora, ou o número de sequência para mostrar que o valor actual é. Este conceito é usado em trocas de
computador para computador que não possuem algumas das características da interação humana.

Autenticidade

O problema da pessoa no meio pode ser resolvido de outra maneira: Amy deve enviar para Bill

E (k PUB-B, E (k PRIV-A, K))

Esta função garante que apenas Bill, usando k PRIV-B, pode remover a criptografia aplicada com k PUB-B, e Bill
sabe que somente Amy poderia ter aplicado k PRIV-A que Bill remove com k PUB-A.

Podemos pensar dessa troca em termos de bloqueios e selos. Qualquer pessoa pode colocar uma carta em uma caixa de
correio bloqueado (através da ranhura carta), mas apenas o titular da chave pode removê-lo. Antigamente, as pessoas importantes
tinham selos que iriam impressionar em cera derretida em uma carta; imprint do selo mostrou autenticidade, mas qualquer um
pode quebrar o selo e leu a carta. Colocar essas duas peças juntas, uma carta selada dentro de uma caixa de correio Enforces
bloqueado
a autenticidade do remetente (o vedante) e a confidencialidade do receptor (a caixa de correio bloqueado).

Se Amy quer enviar algo protegida para Bill (como um número de cartão de crédito ou um conjunto de registros médicos),
então a troca funciona assim. Amy sela a informações protegidas com sua chave privada para que ele só pode ser aberto
com a chave pública de Amy. Esta etapa garante autenticidade: somente Amy pode ter aplicado a criptografia que é
revertida com a chave pública de Amy. Amy seguida, bloqueia a informação com a chave pública de Bill. Essa etapa
adiciona confidencialidade porque somente a chave privada de Bill pode descriptografar dados criptografados com a chave
pública de Bill. Bill pode usar sua chave privada para abrir a caixa de letra (algo que só ele pode fazer) e use a chave pública
de Amy para verificar o selo interior (provando que o pacote veio de Amy).

Assim, como já vimos, funções criptográficas assimétricas são um meio poderoso para a troca de chaves criptográficas
entre as pessoas que não têm nenhum relacionamento anterior. funções criptográficas assimétricas são lentos, mas eles são
usados ​apenas uma vez, para a troca de chaves simétricas. Além disso, se as teclas serem trocadas são para um sistema de
criptografia simétrica tal como AES ou DES, o comprimento da chave é relativamente curto, até 256 bits para AES ou 64 para
o DES. Mesmo se tivéssemos que usar uma forma expandida de AES com um comprimento de chave de 1000 bits, a lentidão
da criptografia de chave pública não seria um problema significativo porque é realizada apenas uma vez, para estabelecer
chaves compartilhadas.

criptografia assimétrica também é útil para outra construção de segurança importante: a assinatura digital. Uma
assinatura humana em um documento em papel é um atestado forte: significa tanto acordo (você concorda com os termos
do documento que assinou) e compreensão (você sabe o que você está assinando). As pessoas aceitam assinaturas
escrito como um substituto para uma confirmação em pessoa. Gostaríamos uma construção semelhante poderosa para
confirmar documentos eletrônicos. Para construir uma assinatura digital introduzimos os códigos de integridade,
certificados de chave, e, finalmente, as assinaturas si.

Códigos de erro Detectando

Comunicações são notoriamente propenso a erros na transmissão. Você deve ter notado que, ocasionalmente, uma
conversa por telefone móvel irá ignorar ou distorcer um pequeno segmento da conversa, e sinais de televisão, por vezes,
apresentar problemas comumente chamado de ruído. Nestes casos, a recepção completa e precisa não é importante,
desde que o ruído é relativamente leve ou infreqüente. Você pode sempre pedir ao seu parceiro telefone para repetir uma
frase, e um gol da vitória na televisão é sempre inúmeras vezes de retransmissão.

Com dados importantes, no entanto, precisamos de alguma maneira de determinar que a transmissão está completo e
intacto. Matemáticos e engenheiros desenharam fórmulas chamados detecção de erros e códigos de correção para fazer erros
de transmissão aparente e para executar pequenas reparações.

códigos de detecção de erro vir sob muitos nomes, tais como códigos de hash, resumos de mensagem, somas de
verificação, verificações de integridade, detecção de erro e códigos de correção, e testes de redundância. Embora esses
termos têm diferenças finas de significado, a finalidade básica de tudo é demonstrar que um bloco de dados foi modificado.
Essa frase está redigido com cuidado: A síntese da mensagem vai ( as vezes) sinalizam que o conteúdo foi alterado, mas é
menos sólida demonstrar nenhuma modificação, apesar de que é o que realmente queremos. Nós queremos
algo para mostrar nenhuma adulteração maliciosa ou não; obtemos algo que normalmente mostra adulteração.

Sam escreve uma carta, faz e mantém uma fotocópia, e envia o original para Theresa. Ao longo do caminho, Fagin
intercepta a carta e faz alterações; sendo um falsificador habilidoso, Fagin engana Teresa. Somente quando Theresa e
Sam conhecer e comparar o original (modificado) que eles detectar a mudança.

A situação é diferente se Sam e Theresa suspeitar de um falsificador está próximo. Sam conta cuidadosamente as letras
em seu documento, registrando 1 para um um, 2 para a b, e assim por diante até 26 para um z. Ele acrescenta esses valores
e escreve a soma em pequenos dígitos na parte inferior da carta. Quando Teresa recebe a carta que ela faz o mesmo cálculo
e compara seu resultado com o escrito na parte inferior. Três casos surgem:

• as contagens de não concordar, caso em que Theresa suspeita de uma mudança

• não há contagem, caso em que Theresa suspeita quer que Sam era preguiçoso ou esquecido ou que um
falsificador esquecido seu código

• contagem de Teresa é o mesmo que escrito na parte inferior

O último caso é o mais problemático. Theresa provavelmente conclui com alívio que não houve mudança. Como
você já deve ter determinado, no entanto, ela pode não estar pensando corretamente. Fagin pode pegar ao código e
calcular corretamente uma nova soma para coincidir com as modificações. Ainda pior, talvez mudanças de Fagin
acontecer para escapar à detecção. Suponha Fagin remove uma letra c (valor = 3) e substitui-lo com três cópias da
letra a (valor = 1 + 1 + 1 = 3); a soma é o mesmo, ou se Fagin única permuta letras, a soma permanece o mesmo,
porque não é sensível à ordem.

Estes problemas todos surgem porque o código é um-para-um muitos função: duas ou mais entradas produzir a
mesma saída. Duas entradas que produzem a mesma saída são chamados a
colisão. Na verdade, todos os resumos de mensagem são muitos-para-um funções e, portanto, quando eles relatam uma
mudança, um ocorreu, mas quando eles relatam nenhuma mudança, é apenas provável, não certa-que nenhum ocorreu por
causa da possibilidade de um colisão.

Colisões geralmente não são um problema por duas razões. Primeiro, eles ocorrem com pouca freqüência. Se texto original é reduzida

para um 64-bits digerir, esperamos que a probabilidade de uma colisão de ser um em dois 64,

ou cerca de 1 em 10 19, mais improvável, de fato. Mais importante ainda, digerir funções são imprevisíveis, por isso dada
um de entrada, encontrando uma segunda entrada que resulta na mesma saída é inviável. Assim, com boas funções
digerir colisões são freqüentes, e não podemos causar ou prevê-los.

Podemos usar a detecção de erro e correção de erros códigos para se proteger contra a modificação de dados. os códigos
de detecção e de correcção são processos ou funções aplicado a um bloco de dados; você pode estar familiarizado com um tipo
de código de detecção: paridade. Estes códigos funcionam como seus nomes sugerem: Códigos de erro de detecção detectar
quando ocorreu um erro e códigos de correção de erro pode erros realmente correto, sem exigir uma cópia dos dados originais.
O código de erro é calculado e armazenado com segurança sobre os dados intactos, originais presumido; depois qualquer um
pode recalcular o código de erro e verificar se o resultado recebido corresponde ao valor esperado. Se os valores não
corresponderem, uma mudança certamente ocorreu; se os valores corresponderem, é provável, mas não certo, que nenhuma
mudança ocorreu.
Paridade

O código de detecção de erros mais simples é um paridade Verifica. Um bit extra, que chamamos de uma impressão digital, é
adicionado a um grupo existente de bits de dados, dependendo de sua soma. Os dois tipos de paridade são chamados de pares e
ímpares. Com paridade par a impressão digital é 0 se a soma dos bits de dados for par, e 1 se a soma é estranho; ou seja, o bit de
paridade é definido de modo que a soma de todos os bits de dados mais o bit de paridade é mesmo. paridade ímpar é o mesmo,
exceto a soma total é ímpar. Por exemplo, o fluxo de dados 01101101 teria um bit de paridade de 1 (e um bit de paridade ímpar de
0) porque 0 + 1 + 1 + 0 + 1 + 1 + 0 + 1 = 5 + 1 = 6 (ou 5 + 0 = 5 para paridade ímpar).

Um bit de paridade pode revelar a modificação de um único bit. No entanto, a paridade não detectar de dois bits erros em
casos em que dois bits de um grupo são alterados. Um bit de paridade pode detectar todas as alterações de um único bit, bem
como mudanças de três, cinco e sete bits. Tabela 2-14
mostra alguns exemplos de mudanças detectadas e não detectadas. Os bits alterados (cada linha mostra alterações a partir
do valor original de 00 milhões) estão a negrito, sublinhados; a tabela mostra se a paridade correctamente detectado que pelo
menos uma alteração ocorreu.

TABELA 2-14 Alterações detectadas pela Paridade

Detecção de números ímpares de bits alterados conduz a uma taxa de detecção de mudança de cerca de 50 por cento, o que não é
quase suficientemente bom para os nossos objectivos. Nós podemos melhorar esta taxa de bits de paridade com mais (de computação de
um segundo bit de paridade de bits 1, 3, 5, e 7, por exemplo), mas mais bits de paridade aumentar o tamanho da impressão digital; cada vez
que aumentar o tamanho da impressão digital também aumentar o tamanho de armazenar essas impressões digitais.

Paridade sinaliza apenas que um pouco foi alterado; não identifica quais pouco foi alterado, muito menos quando, como ou por
quem. Em dispositivos de armazenamento de hardware, um código chamado de
redundância cíclica verificação detecta erros de gravação e reprodução. Alguns códigos mais complexos, conhecidos como códigos
de correção de erros, pode detectar erros de bits múltiplos (dois ou mais bits alterado em um grupo de dados) e pode ser capaz de
identificar os bits alterados (que são os bits para repor para corrigir a modificação). tamanho de impressão digital, a taxa de
detecção de erro e correção nos levar a códigos mais poderosos.
Códigos de hash

Na maioria dos arquivos, os elementos ou componentes do arquivo não estão ligados de alguma forma. Ou seja, cada byte
ou bit ou personagem é independente de qualquer outra no arquivo. Esta falta de ligação significa que a mudança de um valor
afeta a integridade do arquivo, mas que uma mudança pode facilmente passar despercebido.

O que gostaríamos de fazer é de alguma forma colocar um selo ou escudo em torno do arquivo para que possamos
detectar quando o selo foi quebrado e, portanto, saber que algo foi alterado. Esta noção é semelhante ao uso de selos de
cera sobre letras em dias medievais; se a cera foi quebrado, o destinatário sabe que alguém tinha quebrado o selo e leu a
mensagem para dentro. Da mesma forma, a criptografia pode ser usada para foca um arquivo, encerrando-o de modo que
qualquer mudança torna-se aparente. Uma técnica para fornecer o selo é calcular uma função, às vezes chamado de jogo da
velha ou soma de verificação ou Message Digest do arquivo.

O código entre Sam e Theresa é um código de hash. códigos de hash são frequentemente utilizados em
comunicações, onde erros de transmissão pode afetar a integridade dos dados transmitidos. Nesses casos, o valor
de código é transmitido com os dados. Se os dados ou o valor do código foi marcada, o receptor detecta algum
problema e simplesmente solicita uma retransmissão do bloco de dados.

Esse protocolo é adequado em casos de erros não intencionais, mas não se destina a lidar com um adversário dedicado.
Se Fagin sabe o algoritmo de função de detecção de erro, então ele pode mudar o conteúdo e corrigir o valor de detecção
para corresponder. Assim, quando um adversário malicioso pode estar envolvido, comunicação segura requer uma forma
mais forte de síntese da mensagem.

One-Way Funções Hash

Como um primeiro passo em derrotar Fagin, temos que impedi-lo de trabalhar para trás a partir do valor de síntese
para ver o que as entradas possíveis poderia ter levado a esse resultado. Por exemplo, algumas codificações dependem
de uma função que é fácil de entender, mas difícil de calcular. Para um exemplo simples, considere a função de cubo, y =
x 3. Informática X 3 à mão, com lápis e papel, ou com uma calculadora não é difícil. Mas a função inversa,
, é muito
mais difícil de calcular. E a função y = x 2 não tem nenhuma função inversa uma vez que existem duas possibilidades para

: + X e - x. Funções como estes, que são muito mais fácil


calcular do que seus inversos, são chamados funções de sentido único. Arquivo

Detecção de Mudança

Uma função de sentido único podem ser úteis na criação de um algoritmo de detecção de mudança. A função deve depender de todos
os bits do arquivo que está sendo selado, de modo que qualquer mudança até mesmo um único bit irá alterar o resultado de soma de
verificação. O valor de checksum é armazenada com o arquivo. Em seguida, cada vez que alguém acessa ou usa o arquivo, o sistema
recalcula o checksum. Se a soma de verificação calculada corresponde ao valor armazenado, o arquivo é provável que seja intacta.

Os guardas de propriedade de ida contra modificação malicioso: Um atacante não pode “desfazer” a função para ver o que o
arquivo original, então não há nenhuma maneira simples de encontrar um conjunto de alterações que produzem o mesmo valor
da função. (Caso contrário, o atacante poderia encontrar modificações indetectáveis ​que também têm impacto malicioso.)
Tripwire [ KIM98 ] É um programa utilitário que realiza a verificação da integridade de arquivos. Com Tripwire um administrador de
sistema calcula um hash de cada arquivo e armazena esses valores de hash em algum lugar seguro, normalmente offline. Mais
tarde, o administrador executa novamente Tripwire e compara os novos valores de hash com os anteriores.

criptográfico Checksum

modificação suspeito devem ser tratadas de uma forma que também impede o atacante de modificar o mecanismo de
detecção de erros, bem como os dados de bits de si mesmos. Uma forma de lidar com esta é a utilização de uma técnica que
encolhe e transforma os dados de acordo com o valor dos bits de dados.

UMA soma de verificação criptográfica é uma função criptográfica que produz uma soma de verificação. É uma função digest
usando uma chave criptográfica que é, presumivelmente, conhecida apenas para o remetente eo destinatário adequado dos dados.
A criptografia impede o atacante de substituir o bloco de dados (do texto original) e também a alteração do valor da soma de
verificação (o texto cifrado) para corresponder. O atacante pode certamente mudar o texto simples, mas o atacante não tem uma
chave com a qual para recalcular a soma de verificação. Um exemplo de uma soma de verificação criptográfico é a primeira a
empregar qualquer função da soma de verificação para derivar um noncryptographic n- pouco digerir dos dados sensíveis. Em
seguida, aplique qualquer algoritmo de criptografia simétrica para o resumo. Sem a chave o atacante não pode determinar o valor de
checksum que está escondido pela criptografia. Apresentamos outras funções hash criptográfica em Capítulo 12 . Dois principais usos
de somas de verificação criptográficas são proteção de código de adulteração e proteção da integridade mensagem- em trânsito.
Código proteção contra violação é implementado da maneira que acabamos de descrever para detectar alterações em arquivos. Da
mesma forma, uma soma de verificação de dados em comunicação identifica os dados que foram alterados na transmissão, de
forma maliciosa ou acidentalmente. o

governo dos EUA definiu o Secure Hash Padrão ou algoritmo ( SHS ou SHA), na verdade um conjunto de algoritmos,
para somas de verificação de computação. Examinamos SHA em
Capítulo 12 .

Checksums são contramedidas importante detectar modificação. Nesta seção, aplicou-as para o problema de
detectar a modificação maliciosa de programas armazenados no disco, mas as mesmas técnicas são aplicáveis ​a
proteger contra alterações de dados, como mostramos mais adiante neste livro.

Um forte algoritmo de criptografia, como por DES ou AES, é especialmente adequado para valores de vedação, uma vez que
uma pessoa de fora não vai saber a chave e, portanto, não será capaz de modificar o valor armazenado para coincidir com os
dados sendo modificado. Para aplicações de baixa ameaça, os algoritmos ainda mais simples do que os de DES ou AES pode ser
usada. Nos esquemas de codificação de bloco, o encadeamento de meios que ligam cada bloco para o valor do bloco anterior (e,
por conseguinte, todos os blocos anteriores), por exemplo, por utilização de um OU exclusivo para combinar o bloco anterior
encriptado com a actual. soma de verificação criptográfica de um arquivo poderia ser o último bloco da criptografia acorrentado de
um arquivo porque esse bloco vai depender de todos os outros blocos. Descrevemos encadeamento com mais detalhes no Capítulo
12 .

Como podemos ver mais adiante neste capítulo, estas técnicas resolver o não-alterability e reutilização não necessária uma
assinatura digital. Uma mudança ou reutilização provavelmente será sinalizado pela soma de verificação para que o destinatário pode
dizer que algo está errado.

assinaturas
A técnica mais poderosa para demonstrar a autenticidade é uma assinatura digital. Como suas contrapartes no papel, uma
assinatura digital é uma maneira pela qual uma pessoa ou organização pode fixar um padrão de bits para um arquivo de tal
forma que implica a confirmação, pertence a esse arquivo apenas, não podem ser falsificados, e demonstra a autenticidade.
Queremos um meio pelo qual uma das partes pode assinar algo e, como no papel, tem a assinatura válida por dias, meses,
anos
- indefinidamente. Além disso, a assinatura deve convencer todos os que acessar o arquivo. Claro, como a
maioria das condições que envolvem métodos digitais, a ressalva é que a garantia é limitada pela habilidade
assumido e energia de qualquer um que tentar derrotar a garantia.

Uma assinatura digital, muitas vezes usa criptografia de chave assimétrica ou público. Como você acabou de ver, um
protocolo de chave pública é útil para troca de chaves criptográficas entre dois partidos que não têm outra base para a confiança.
Infelizmente, os protocolos de criptografia de chave pública envolve várias sequências de mensagens e respostas, o que pode
ser demorado se uma das partes não está imediatamente disponível para responder ao mais recente pedido. Seria útil ter uma
técnica pela qual uma das partes poderia precompute confiável alguns passos de protocolo e deixá-los em um lugar seguro para
que o protocolo poderia ser realizada mesmo que apenas um partido estavam ativos. Esta situação é similar à diferença entre
uma caixa de banco e um ATM. Você pode obter dinheiro, fazer um depósito ou pagamento, ou verificar o seu saldo, porque o
banco tem etapas pré-definidas para um caixa eletrônico para lidar com essas atividades simples 24 horas por dia, mesmo se o
banco não está aberta. Mas se você precisa de um cheque visado ou moeda estrangeira, você pode precisar de interagir
diretamente com um agente de banco.

Nesta seção, vamos definir assinaturas digitais e comparar suas propriedades para os de assinaturas manuscritas em
papel. Em seguida, descrevemos a infra-estrutura circundante assinaturas digitais que lhes permite ser reconhecido e válido
por tempo indeterminado.

Componentes e características de assinaturas

A assinatura digital é apenas um objeto binário associado a um arquivo. Mas se queremos que a assinatura para
ter a força de uma assinatura em papel, precisamos entender as propriedades de assinaturas humanos. Só então
podemos expressar requisitos para a nossa versão digital.

Propriedades de assinaturas baseadas em papel seguros

Considere uma situação típica que se assemelha a uma necessidade humana comum: uma ordem para transferir fundos de uma
pessoa para outra. Em outras palavras, queremos ser capaz de enviar o equivalente eletrônico de uma verificação informatizada.
Entendemos as propriedades desta transação para um cheque de papel convencional:

• O cheque é um objeto tangível autorizar uma transação financeira.


• A assinatura no cheque confirma autenticidade porque (presumivelmente) apenas o signatário legítimo
pode produzir essa assinatura.

• No caso de uma suposta falsificação, um terceiro pode ser chamado para julgar a autenticidade.

• Uma vez que um cheque seja depositado, ele é cancelado para que ele não podem ser reutilizados.

• A seleção de papel é não alterável. Ou, a maioria das formas de alteração são facilmente detectados.
Realização de negócios por meio de cheque depende objetos tangíveis em um forma prescrita. Mas objetos tangíveis
não existem para transações em computadores. Portanto, autorizando pagamentos por computador requer um modelo
diferente. Vamos considerar as exigências de tal situação, do ponto de vista tanto de um banco e de um usuário.

Propriedades de assinaturas digitais

Suponha Sheila envia seu banco uma mensagem que o autoriza a transferir US $ 100 para Rob. banco de Sheila deve
ser capaz de verificar e provar que a mensagem realmente veio de Sheila se ela deve mais tarde negar o envio da
mensagem. (Esta propriedade é chamada não repúdio.)
O banco também quer saber que a mensagem é inteiramente Sheila, que não foi alterado ao longo do caminho. Por sua
vez, Sheila quer ter certeza de que seu banco não pode forjar tais mensagens. (Esta propriedade é chamada autenticidade.)
Ambas as partes querem ter certeza de que a mensagem é nova, não uma reutilização de uma mensagem anterior, e que
não foi alterado durante a transmissão. Usando sinais electrónicos em vez de papel complica este processo.

Mas temos maneiras de fazer o trabalho processo. UMA assinatura digital é um protocolo que produz o mesmo efeito que uma
assinatura real: É uma marca que apenas o remetente pode fazer mas que outras pessoas podem facilmente reconhecer como
pertencentes ao remetente. Assim como uma assinatura real, uma assinatura digital confirma acordo para uma mensagem.

A assinatura digital deve atender a duas condições básicas:

• Deve ser falsificável. Se pessoa S mensagem de sinais M com a assinatura Sig (S, M),
ninguém mais pode produzir o par [ H, Sig (S, H)].

• Deve ser autêntico. Se uma pessoa R recebe o par [ H, Sig (S, M)] supostamente da S, R pode verificar
que a assinatura é realmente do S. Somente S poderia ter criado essa assinatura ea assinatura está
firmemente ligado à M.

Estes dois requisitos, mostrado em A Figura 2-26 , São os principais obstáculos no computador
transações. mais duas propriedades, também extraídas paralelos com o ambiente baseado em papel, são
desejáveis ​para transações concluídas com a ajuda de assinaturas digitais:

• Isto é não alterável. Depois de ser transmitido, M não pode ser alterado por S, R, ou um interceptor.

• Isto é não reutilizáveis. A mensagem anterior apresentado novamente será imediatamente detectada pelo R.

FIGURA 2-26 Requisitos de Assinatura Digital

Para ver como as assinaturas digitais trabalho, primeiro apresentamos um mecanismo que atenda aos dois primeiros requisitos. Em
seguida, adicione a isso solução para satisfazer as outras exigências. Desenvolvemos assinaturas digitais em pedaços: primeiro
construir uma peça para abordar as alterações, em seguida,
descrevendo um modo para garantir a autenticidade e, finalmente, o desenvolvimento de uma estrutura para estabelecer a identidade.
Eventualmente, todas estas peças unir em uma estrutura conceitualmente simples.

Que acabamos de descrever as peças para uma assinatura digital: criptografia de chave pública e mensagem segura
digere. Estas duas peças são tecnicamente o suficiente para fazer uma assinatura digital, mas eles não abordam
autenticidade. Para isso, precisamos de uma estrutura que liga a identidade do usuário e chave pública de uma maneira
confiável. Tal estrutura é chamado um certificado. Por fim, apresentamos uma infra-estrutura para a transmissão e validar
certificados.

Chaves Públicas para Signatures

sistemas de criptografia de chave pública são ideais para assinatura. Para a notação simples, vamos supor que a criptografia
de chave pública para o usuário você é acedido através E (H, K VOCÊ) e que a transformação chave privada para você é escrito como D
(H, K VOCÊ). Podemos pensar em E como a transformação de privacidade (uma vez que apenas você pode decifrá-lo) e D como a
transformação autenticidade (uma vez que apenas você pode produzi-lo). Lembre-se, no entanto, que em alguns algoritmos
assimétricos, como a RSA, D e E são conmutativo e qualquer um pode ser aplicado a qualquer mensagem. Portanto,

D (E (M, K VOCÊ), K L) = M = E (D (H, K VOCÊ), K VOCÊ)

E se S deseja enviar M para R, S utiliza a transformação autenticidade para produzir D (H, K S).
S em seguida, envia D (H, K S) para R. R decodifica a mensagem com a transformação chave pública
S, Informática E (D (H, K S), K S) = M. Uma vez que apenas S pode criar uma mensagem que faz sentido sob E ( -, K S), a
mensagem deve realmente ter vindo de S. Este teste satisfaz o requisito autenticidade.

R vai salvar D (H, K S). E se S deve depois alegam que a mensagem é uma falsificação (não é realmente de S), R pode
simplesmente mostrar M e D (H, K S). Qualquer um pode verificar que uma vez D (H, K S) é transformado M com a
transformação chave pública S -se apenas S poderia ter produzido D (H, K S) -então D (H, K S) deve ser de S. Este teste
satisfaz o requisito falsificável.

Há outras abordagens para assinatura; alguns usam criptografia simétrica, outros usam assimétrica. A
abordagem mostrado aqui ilustra como o protocolo pode abordar os requisitos para unforgeability e autenticidade.
Para adicionar o sigilo, S aplica E (H, K R) como mostrado em A Figura 2-27 .
FIGURA 2-27 O uso de duas chaves em uma assinatura de Asymmetric Digital Estas peças, uma função
hash, criptografia de chave pública e um protocolo, dá-nos as peças técnicas de uma assinatura digital. No entanto, também
precisamos de um componente não-técnica. nossa signatário S certamente pode executar o protocolo para produzir uma
assinatura digital, e qualquer pessoa que tenha S a chave pública pode determinar que a assinatura veio de S. Mas quem é S? Nós
não temos nenhuma maneira confiável para associar um ser humano particular com a chave pública. Mesmo se alguém diz
“esta chave pública pertence a S, ”Em que base é que vamos acreditar que a afirmação? Lembre-se que o ataque
man-in-the-middle, anteriormente neste capítulo, quando Amy e Bill queria estabelecer uma chave secreta compartilhada? Em
seguida, explorar como criar uma ligação entre uma chave pública e uma identidade confiável.

Confiar em

A questão central do comércio digital é a confiança: Como você sabe que uma página web Microsoft realmente
pertence à Microsoft, por exemplo? Esta seção é menos sobre tecnologia e mais sobre os aspectos humanos de
confiança, porque que a confiança está subjacente a todo o conceito de uma assinatura digital.

Na vida real, você pode confiar em um amigo próximo de maneiras que você não iria confiar em um novo conhecido. Ao longo do
tempo a sua confiança em alguém pode crescer com a sua experiência, mas pode cair se a pessoa te trai. Você experimentar uma
pessoa, e, dependendo do resultado, você aumentar ou diminuir o seu grau de confiança. Essas experiências construir um quadro de
confiança pessoal.

páginas da web pode ser substituído e falsificou sem aviso. Até certo ponto, você assume uma página é autêntica se
nada parece incomum, se o conteúdo no site parece credível ou pelo menos plausível, e se você não estiver usando o site
para decisões críticas. Se o site é o de seu banco, você pode verificar se o URL parece autêntico. Alguns sites,
especialmente os de instituições financeiras, começaram a deixar cada cliente escolher uma imagem de segurança, por
exemplo, um carro esportivo vermelho quente ou um marco icónico; os usuários são avisados ​para inserir informações
confidenciais somente se ver a imagem pessoal que escolheu anteriormente.

Em um estabelecimento comercial, certos tipos de instituições conotar confiança. Você pode confiar (os funcionários de)
certas organizações educacionais, religiosos ou sociais. Grandes empresas bem estabelecidas, tais como bancos,
seguradoras, hospitais e grandes fabricantes desenvolveram uma medida de confiança. Idade de uma instituição também
inspira confiança. Na verdade, a confiança é a base para a noção de branding, em que você confia a qualidade de alguma
coisa, porque você sabe a marca. Como você verá em breve, a confiança em tais entidades reconhecidas é um componente
importante em assinaturas digitais.

Estabelecer confiança entre as pessoas

Como seres humanos que estabelecer a confiança o tempo todo em nossas interações diárias com as pessoas. Identificamos
pessoas que conhecemos através do reconhecimento de suas vozes, rostos, ou caligrafia. Em outras vezes, usamos uma afiliação
para transmitir confiança. Por exemplo, se um estranho telefones nós e ouvir, “Eu represento o governo local ...” ou “Eu estou
ligando em nome desta caridade ...”
ou "EU estou chamando de escola / Hospital / polícia sobre seu
mãe / pai / filho / filha / irmão / irmã ... “, que pode decidir confiar o chamador mesmo se não sabemos dele ou dela.
Dependendo da natureza da chamada, que pode decidir a acreditar filiação do chamador ou a procurar uma
verificação independente. Por exemplo, pode-se obter o
número de filiação do diretório de telefone e chamar o partido de volta. Ou podemos buscar informação adicional do chamador,
como “O casaco cor que ela estava vestindo?” Ou “Quem é o presidente de sua organização?” Se tivermos um baixo grau de
confiança, que pode até mesmo agir para excluir uma pessoa de fora, como em “Eu vou enviar um cheque diretamente para sua
instituição de caridade em vez de dar-lhe o meu número de cartão de crédito.”

Para cada uma destas interações, temos o que poderíamos chamar de um “limiar de confiança”, um grau em que
estamos dispostos a acreditar que um indivíduo não identificado. Este limite existe em interações comerciais também.
Quando Acorn Manufacturing Company envia Big Steel Company uma ordem para 10.000 folhas de aço, a ser enviados
dentro de uma semana e paga dentro de dez dias, a confiança abunda. A ordem é impresso em um formulário Acorn,
assinada por alguém identificado como Helene Smudge, Purchasing Agent. Big aço pode começar a preparar o aço antes
mesmo de receber dinheiro de Acorn. Big Aço pode verificar rating de crédito da Acorn para decidir se a enviar a
encomenda sem o pagamento em primeiro lugar. Se suspeita, Big Aço pode telefonar Acorn e pedir para falar com a Sra
Smudge no departamento de compras. Mas o mais provável Big Steel vai realmente enviar a mercadoria sem saber quem
Ms. Smudge é, se ela é realmente o agente de compras, se ela está autorizada a comprometer-se a uma ordem desse
tamanho, ou mesmo se a assinatura é realmente dela. Às vezes, uma transação como essa ocorre por fax, para que Big
Steel não tem sequer uma assinatura original em arquivo. Em casos como este, que ocorrem diariamente, a confiança é
baseada na aparência de autenticidade (tal como, um formulário impresso assinado), informações para fora (como um
relatório de crédito) e urgência (pedido de Acorn que o aço ser enviado rapidamente).

Estabelecer a confiança eletronicamente

Para a comunicação electrónica para ter sucesso, devemos desenvolver formas semelhantes para ambas as partes
para estabelecer a confiança, sem ter conhecido. Uma linha comum em nossas interações pessoais e de negócios é a
capacidade de ter alguém ou algo atestar a existência e integridade de uma ou ambas as partes. A polícia, a Câmara de
Comércio, ou o Better Business Bureau garante a autenticidade de um chamador. Acorn atesta indiretamente para o fato
de que a Sra Smudge é o seu agente de compras, transferindo a chamada para ela no departamento de compras
quando Big aço chama para ela. Em certo sentido, a empresa de telefonia garante a autenticidade de um partido,
listando alguém no diretório. Este conceito de “vouching para” por um terceiro pode ser uma base para a confiança em
ambientes comerciais onde duas partes não conhecem uns aos outros.

O problema de confiança que precisamos para resolver para assinaturas digitais é a autenticidade da chave pública. Se
Monique assina um documento com sua chave privada, ninguém pode decifrar a assinatura com a chave pública para verificar
que apenas Monique poderia ter assinado. O único problema é ser capaz de obter a chave pública de Monique de uma maneira
em que podemos adequadamente confiar que a chave realmente pertence a ela, ou seja, que a chave não foi circulado por
algum ator mal representando Monique. Na próxima seção apresentamos uma confiança significa para ligar uma chave pública a
uma identidade.

Confiança baseada em uma Individual Respeitado Comum

Uma grande empresa pode ter várias divisões, cada divisão pode ter vários departamentos, cada
departamento pode ter vários projetos e cada projeto pode ter vários grupos de trabalho (com variações
nos nomes, o número de níveis, e o grau de
integralidade da hierarquia). O alto executivo pode não saber por nome ou de vista todos os funcionários da empresa, mas um
líder do grupo tarefa conhece todos os membros do grupo de trabalho, o líder do projeto conhece todos os líderes do grupo de
tarefas, e assim por diante. Esta hierarquia pode se tornar a base para a confiança em toda a organização.

Para ver como, suponha que duas pessoas se encontram: Ann e André. Andrew diz que trabalha para a mesma
empresa como Ann. Ann quer verificação independente de que ele faz. Ela descobre que Bill e Betty são dois líderes do
grupo tarefa para o mesmo projecto (liderada por Camilla); Ann trabalha para Bill e Andrew para Betty. (As relações
organizacionais são mostrados na
A Figura 2-28 ). Esses fatos dão Ann e Andrew base para confiar a identidade do outro. A cadeia de
verificação pode ser algo como isto:

• Ann pede Bill que Andrew é.


• Bill quer pede Betty, se ele sabe ela diretamente, e se não, ele pede Camilla.
• (Se solicitado, Camilla então pergunta Betty.)

• Betty responde a Camilla ou Bill que Andrew trabalha para ela.


• (Camilla diz Bill, se ela estava envolvida.)
• Bill diz Ann.

FIGURA 2-28 Relações de confiança

Se Andrew está em um grupo de trabalho diferente, pode ser necessário ir mais alto na árvore organizacional antes de
um ponto comum é encontrada.

Podemos usar um processo semelhante para troca de chave criptográfica, como mostrado na A Figura 2-29 .
Se André e Ann quer se comunicar, Andrew pode dar a sua chave pública para Betty, que passa para Camilla, em
seguida, Bill, ou diretamente para Bill, que dá a Ann. Mas essa sequência não é exatamente do jeito que ele iria
trabalhar na vida real. A chave provavelmente seria acompanhada de uma nota dizendo que é de Andrew, que vão
desde um pedaço de papel amarelo com uma Declaração de Identidade forma 947. E se uma forma 947 é usado, em
seguida, Betty também teria de anexar um formulário 632a Transmissão de Identidade, Camilla seria anexar outro 632a,
e Bill seria anexar uma final, como mostrado na A Figura 2-29 . Esta cadeia de formas 632a diria, em essência, “Eu sou
Betty e recebi esta chave e a declaração anexa da identidade pessoal de uma pessoa que eu conheço para ser
Andrew”, “Eu sou Camilla e eu recebi esta chave e a declaração em anexo da identidade e da transmissão anexado da
identidade pessoal de uma pessoa que eu conheço para ser Betty “, e assim por diante. Quando Ann recebe a chave,
ela pode rever a cadeia de provas e concluir com razoável segurança que a chave realmente veio de Andrew. Este
protocolo é uma forma de obter as chaves públicas autenticados, uma ligação de uma
chave e uma identidade confiável.

FIGURA 2-29 Relacionamentos-chave em um Certificado

Este modelo funciona bem dentro de uma empresa, porque há sempre alguém comum a todos os dois empregados,
mesmo que os dois funcionários estão em divisões diferentes, de modo que a única pessoa comum é o presidente. O
processo descamba para baixo, no entanto, se Ann, Bill, Camilla, Betty, e André, todos têm que estar disponíveis sempre
Ann e Andrew quer se comunicar. Se Betty é afastado em uma viagem de negócios ou Bill é fora do doente, o protocolo
vacila. Ele também não funciona bem se o presidente não pode receber qualquer trabalho significativo feito porque cada dia
é ocupado com as formas de manipulação 632a.

Para resolver o primeiro destes problemas, Andrew pode pedir a sua cadeia completa de formas 632a do presidente para
baixo para ele. Andrew pode, então, dar uma cópia deste conjunto completo para qualquer pessoa na empresa que quer a sua
chave. Em vez de trabalhar de baixo para cima a um ponto comum, Andrew começa no topo e documenta sua cadeia
completa. Ele recebe essas assinaturas qualquer momento seus superiores estão disponíveis, para que eles não precisam
estar disponíveis quando ele quer dar o seu autenticado chave pública.

Podemos resolver o segundo problema invertendo o processo. Em vez de começar na parte inferior (com os
membros de tarefas) e trabalhando para o topo da árvore (o presidente), começamos no topo. Andrew tem, assim, uma
chave pública PreAuthenticated para uso ilimitado no futuro. Suponha que a estrutura expandida de nossa empresa
hipotética, mostrando o presidente e outros níveis, é como ilustrado na A Figura 2-30 .
FIGURA 2-30 Delegação de Confiança

O presidente cria uma carta para cada gerente de divisão dizendo: “Eu sou Edward, o presidente, eu atestar a
identidade do gerente da divisão de Diana, a quem conheço pessoalmente, e eu confio Diana para atestar as
identidades de seus subordinados.” Cada gerente de divisão faz da mesma forma, copiando a carta do presidente
com cada letra o gerente cria, e assim por diante. Andrew recebe um pacote de cartas, do presidente para baixo
através de seu líder do grupo tarefa, cada letra ligados por nome para a próxima. Se todos os funcionários da
empresa recebe um tal pacote, quaisquer dois funcionários que querem trocar chaves autenticados só precisa
comparar os pacotes uns dos outros; ambos os pacotes terão pelo menos Edward em comum, talvez alguns outros
gestores abaixo Edward, e em algum momento vai desviar. Andrew e Ann, por exemplo, poderia comparar suas
cadeias, determinar que eles eram o mesmo através de Camilla, e rastrear apenas de Camilla para baixo. Andrew
sabe a cadeia de Edward para Camilla é autêntica porque é idêntica à sua cadeia, e Ann sabe o mesmo. Cada um
sabe o resto da cadeia é exato porque segue uma linha ininterrupta de nomes e assinaturas.

Certificados: Identidades confiáveis ​e de Chaves Públicas

Você pode ter concluído que esse processo funciona, mas é muito complicado para aplicar na vida real; talvez você tenha
imaginado que estamos construindo um sistema para computadores. Este protocolo é representado com mais facilidade
eletronicamente do que no papel. Com papel, as pessoas devem
proteger contra falsificações, para evitar que parte de uma cadeia de ser substituído e para garantir que a chave
pública na parte inferior está ligada à cadeia. A coisa toda pode ser feito eletronicamente com assinaturas digitais
e funções de hash. Kohnfelder [ KOH78 ] Parece ser a origem do conceito de utilização de um certificado
electrónico com uma cadeia de autenticadores; de Merkle papel [ MER80 ] Expande o conceito.

A chave pública e identidade do usuário estão unidos em um certificado, que é então assinada por alguém chamado autoridade
de certificação, atestando a precisão da ligação. No nosso exemplo, a empresa pode configurar um sistema de certificados
da seguinte maneira. Primeiro, Edward seleciona um par de chaves públicas, mensagens a parte pública, onde todos na
empresa pode recuperá-lo, e retém a parte privada. Em seguida, cada gerente de divisão, como Diana, cria seu par de
chaves pública, coloca a chave pública em uma mensagem juntamente com a sua identidade e passa a mensagem de forma
segura para Edward. Edward assina-lo, criando um valor hash da mensagem e, em seguida, criptografar o hash com sua
chave privada. Ao assinar a mensagem, Edward afirma que a chave pública (Diana) e a identidade (também de Diana) na
mensagem são para a mesma pessoa. Esta mensagem é chamado certificado de Diana.

Todos os gerentes de departamento de Diana criar mensagens com as suas chaves públicas, Diana hashes e sinais
cada, e retorna-los. Ela também acrescenta a cada uma cópia do certificado que recebeu de Edward. Desta forma, qualquer
pessoa pode verificar o certificado de um gerente, iniciando com a bem conhecida a chave pública de Edward,
descriptografar o certificado de Diana para recuperar sua chave pública (e identidade), e usando a chave pública de Diana
para descriptografar o certificado do gerente. A Figura 2-31 mostra como os certificados são criados para Diana e um de seus
gerentes, Delwyn. Este processo continua para baixo na hierarquia de Ann e André. Como mostrado em A Figura 2-32 ,
Certificado de Andrew é realmente seu certificado individual combinado com todos os certificados para aqueles acima dele
na linha ao presidente.

FIGURA 2-31 Criação de Certificados


FIGURA 2-32 Hierarquia certificado

Assinatura de Certificado Sem uma hierarquia única

Em nossos exemplos, certificados foram emitidos com base na estrutura gerencial. Mas nós não exigem tal estrutura
nem temos que seguir um processo tão complicado, a fim de usar de assinatura de certificado para autenticação.
Qualquer um que é considerado aceitável como uma autoridade pode assinar um certificado. Por exemplo, se você quiser
determinar se uma pessoa recebeu um diploma de uma universidade, você não entre em contato com o presidente ou
chanceler, mas que em vez de ir para o escritório de registros ou o registrador. Para verificar o emprego de alguém, você
pode pedir ao departamento de pessoal ou o diretor de recursos humanos. E para verificar se alguém vive em um
endereço particular, você pode consultar o escritório de registros públicos.

Às vezes, uma pessoa em particular é designado para atestar a autenticidade ou a validade de um documento ou pessoa.
Por exemplo, um notário público atesta a validade de um (escrito) assinatura em um documento. Algumas empresas têm um
agente de segurança para verificar se um empregado tem autorizações de segurança apropriadas para ler um documento ou
participar de uma reunião. Muitas empresas têm um departamento de pessoal separado para cada site ou cada local da
planta; o oficial pessoal atesta a situação de emprego dos empregados naquele site. Estes oficiais qualquer um ou chefes dos
escritórios poderia credivelmente inscrever certificados para as pessoas sob sua alçada. existem hierarquias naturais na
sociedade, e essas mesmas hierarquias pode ser usado para validar certificados.

O único problema com uma hierarquia é a necessidade de confiança de nível superior. Toda a cadeia de autenticidade é
seguro porque cada certificado contém a chave que descodifica o certificado seguinte, excepto para o topo. Dentro de uma
empresa, os funcionários confiar naturalmente a pessoa no topo. Mas se os certificados estão a tornar-se amplamente utilizado
no comércio eletrônico, as pessoas devem ser capazes de trocar certificados de segurança através de empresas, organizações e
países.

A Internet é uma grande federação de redes de comunicação interpessoal, intercompany,


interorganizacional, e internacional (assim como intracompany, intraorganizacional e intranacional). Não é
uma parte de qualquer governo, nem é uma empresa privada
empresa de propriedade. É governado por um conselho chamado a Internet Society. A Internet Society só tem poder
porque os seus membros, os governos e as empresas que compõem a Internet, concordam em trabalhar juntos. Mas não
há realmente nenhuma “top” para a Internet. Diferentes empresas, como a C & W HKT, SecureNet, VeriSign, Baltimore
Technologies, Deutsche Telecom, Societá Interbancária per l'Automatzione di Milano, Entrust, e Certiposte são
autoridades de certificação de raiz, o que significa que cada um é uma autoridade mais alta que assina certificados.
Assim, em vez de uma raiz e um top, há muitas raízes, em grande parte, estruturados em torno das fronteiras nacionais.

Distribuindo chaves e certificados

No início deste capítulo, introduzimos várias abordagens para a distribuição de chaves, que vão desde a troca direta para
distribuição através de um mecanismo central de distribuição para distribuição antecipada certificada. Mas não importa qual
abordagem é levado para a distribuição de chaves, cada um tem suas vantagens e desvantagens. Pontos para se manter em mente
sobre qualquer protocolo de chave de distribuição incluem o seguinte:

• Que restrições operacionais estão lá? Por exemplo, faz o protocolo requer uma instalação continuamente
disponíveis, tais como centro de distribuição de chave?

• Que requisitos confiança está lá? Quem eo que entidades deve ser confiável para agir corretamente?

• O que é a proteção contra falhas? Pode um estranho passar por qualquer das entidades do protocolo e
subverter a segurança? Pode qualquer das partes do protocolo de enganar sem detecção?

• Como eficiente é o protocolo? Um protocolo que exige vários passos para estabelecer uma chave de
criptografia que será usada muitas vezes é uma coisa; é outra bem diferente de passar por várias etapas
demoradas para um uso one-time.

• Como fácil é o protocolo para implementar? Observe que a complexidade na implementação computador
pode ser diferente do uso manual.

Assinaturas-Todas as digitais das Pieces

Colocar essas peças agora podemos traçar um esquema de assinatura digital completa. Suponha usuário S quer
aplicar uma assinatura digital a um arquivo (ou outro objeto de dados), encontrando os quatro objectivos de uma
assinatura digital: falsificáveis, autênticos, inalteráveis, e não reutilizáveis.

UMA assinatura digital consiste em

• um arquivo

• demonstração de que o arquivo não foi alterado


• indicação de que aplicou a assinatura
• validação de que a assinatura é autêntica, isto é, que pertence ao signatário
• ligação da assinatura para o arquivo

Com estes cinco componentes podemos construir uma assinatura digital.

Começamos com o arquivo. Se usarmos um código hash seguro do arquivo para calcular uma síntese da mensagem e
incluir esse código hash na assinatura, o código demonstra que o arquivo tem
não foi alterado. Um destinatário do arquivo assinado pode recalcular a função hash e, se os valores de hash coincidirem,
concluir com confiança razoável de que o arquivo recebido é o mesmo que foi assinado. Até agora, a nossa assinatura digital
se parece com o objeto em A Figura 2-33 .

FIGURA 2-33 Hash código para detectar mudanças

Em seguida, aplicamos chave de criptografia privada do assinante para criptografar a mensagem digerir. Porque somente o
assinante sabe que chave, o signatário é a única pessoa que poderia tê-lo aplicado. Agora o objeto assinado parece A Figura
2-34 .

FIGURA 2-34 Encryption para mostrar Autenticidade

A única outra peça para adicionar é uma indicação de que o assinante foi, de modo que o receptor
sabe qual chave pública para usar para desbloquear a criptografia, como mostrado na A Figura 2-35 . a identidade do assinante
tem que ser fora da criptografia, porque se ele estivesse dentro, a identidade não pode ser extraído.

FIGURA 2-35 Indicação de Signer

Dois floreios extras continuam a ser adicionado. Em primeiro lugar, dependendo do tamanho do arquivo, este objeto pode
ser grande, e criptografia assimétrica é lento, não adequado para criptografar grandes coisas. No entanto, a criptografia de
autenticação do S precisa cobrir apenas o código de hash seguro, não todo o arquivo em si. Se o arquivo foi modificado, ele já
não coincidir com o código de hash, para que o destinatário saberia a não confiar o objeto como autêntico de S. E se o código
de hash foram quebrados e anexado a um arquivo diferente, não iria corresponder lá , ou. Assim, para a eficiência precisamos
criptografar apenas o valor hash com a chave privada de S, como mostrado na Figura 2- 36 .

FIGURA 2-36 Criptografia assimétrica Cobrindo o valor de hash

Em segundo lugar, o arquivo, a porção de dados do objeto, é exposta para que todos possam ler. Se S quer confidencialidade, ou seja,
de modo que apenas um destinatário pode ver o conteúdo do arquivo, S pode selecionar uma chave de criptografia simétrica, criptografar o
arquivo, e armazenar a chave sob assimétrica chave de criptografia pública do usuário do U. Esta adição final é mostrado na A Figura 2-37 .
FIGURA 2-37 Assinado digitalmente objeto protegido por integridade e
confidencialidade

Em conclusão, uma assinatura digital pode indicar a autenticidade de um arquivo, especialmente um pedaço de
código. Quando você tenta instalar um pedaço de código assinado, o sistema operacional irá inspecionar o certificado e
arquivo e notificá-lo se o certificado e hash não são aceitáveis. As assinaturas digitais, juntamente com funções hash
fortes e criptografia simétrica, são uma forma eficaz de garantir que um arquivo é precisamente o que o autor
armazenados para download.

Esta descrição de assinaturas digitais conclui nossa seção de ferramentas de criptografia. Resumimos as
ferramentas em tabela 2-15 . Nesta seção, introduzimos importantes peças Apelamos mais adiante neste livro.

TABELA 2-15 Ferramentas Derivado do Cryptography

Nosso ponto neste capítulo não é para treinar um novo corpo de criptógrafos ou cryptologists; fazer isso exigiria muito
mais material do que este livro pode conter. Em vez disso, nós queremos que você conhecer e compreender os conceitos
básicos de criptografia de modo em capítulos posteriores, você pode apreciar a dificuldade, pontos fortes e fracos de, por
exemplo, garantir um wireless
sinal da rede ou o estabelecimento de uma comunicação protegida entre um usuário do navegador e um site.

No próximo capítulo vamos colocar as três ferramentas deste capítulo para usar em lidar com problemas de segurança em
programas e programação.

2.4 Exercícios

1. Descreva cada um dos quatro tipos de mecanismos de controle de acesso seguintes em termos de (a) a facilidade de
determinar o acesso autorizado durante a execução, (b) a facilidade de adição de acesso de um novo assunto, (c) a
facilidade de exclusão de acesso por um sujeito, e ( d) a facilidade de criação de um novo objeto para o qual todos os
assuntos, por padrão, têm acesso.

• per-sujeito lista de controle de acesso (isto é, uma lista para cada sujeito diz a todos os objetos
aos quais esse assunto tem acesso)

• lista de controle de acesso por objeto (isto é, uma lista para cada objeto diz a todos os indivíduos
que têm acesso a esse objeto)

• matriz de controlo de acesso

• capacidade

2. Suponha que uma lista de controle de acesso por assunto é usado. Excluindo um objeto em tal sistema é inconveniente
porque todas as alterações devem ser feitas para as listas de todos os indivíduos que tinham acesso ao objeto de controle.
Sugerem uma alternativa, os meios menos onerosos de manuseamento de eliminação.

3. controle de acesso de arquivo relaciona em grande parte à dimensão sigilo de segurança. O que é a relação
entre uma matriz de controlo de acesso e a integridade dos objectos aos quais o acesso está sendo controlada?

4. Uma característica de um sistema de proteção baseada em capacidade é a capacidade de um processo para


transferir uma cópia de um recurso para outro processo. Descreva uma situação em que um processo deve ser capaz
de transferir um recurso para outro.

5. Sugerir um esquema eficiente para a manutenção de um esquema de proteção por usuário. Ou seja, o
sistema mantém um diretório por usuário, e esse diretório lista todos os objetos aos quais é permitido ao usuário
acesso. Seu projeto deve atender às necessidades de um sistema com 1000 usuários, dos quais não mais de
20 estão ativos a qualquer momento. Cada utilizador tem uma média de 200 objectos permitidas; existem
50.000 objetos totais no sistema.

6. Calcule o tempo de ataques de senha de adivinhação:

(A) Se as senhas são três caracteres alfabéticos maiúsculos longa, quanto tempo seria necessário
para determinar uma senha particular, assumindo que testando uma senha individual requer 5
segundos? Quanto tempo se o teste requer 0,001 segundos?

(B) defendem uma determinada quantidade de tempo que o ponto de partida para “seguro”. Ou seja, suponha
que um atacante planeja usar um ataque de força bruta para determinar uma senha. Para que valor de x ( a
quantidade total de tempo para tentar como muitos senhas como necessário) que o atacante encontrar este
ataque proibitivamente tempo?

(C) Se o ponto de corte entre “inseguro” e “seguro” eram X quantidade de tempo,


quanto tempo uma senha segura tem que ser? Estado e justificar suas suposições sobre o
conjunto de caracteres a partir do qual a senha é selecionado e a quantidade de tempo
necessário para testar uma única senha.

7. Projetar um protocolo pelo qual duas partes mutuamente suspeitos podem autenticar um ao outro. Seu
protocolo deve ser usado pela primeira vez estas partes tentar autenticar um ao outro.

8. Liste três razões que as pessoas podem estar relutantes em usar biometria para autenticação.
Você pode pensar em maneiras de combater essas objecções?

9. taxas negativas falsos positivos e falsos pode ser ajustada, e eles são muitas vezes complementares:
Redução um levanta o outro. Lista duas situações em que falsos negativos são significativamente mais grave
do que falsos positivos.

10. Em um escritório típico, autenticação biométrica pode ser usado para controlar o acesso apenas a funcionários e
visitantes registrados. Sabemos que o sistema terá alguns falsos negativos, alguns funcionários falsamente negado o
acesso, por isso precisamos de uma substituição humana, alguém que pode examinar o empregado e permitir o
acesso, apesar da falha de autenticação. Assim, precisamos de um guarda humano na porta para lidar com os
problemas, bem como o dispositivo de autenticação; sem biometria teríamos apenas o guarda. Consequentemente,
nós temos o mesmo número de pessoal com ou sem biometria, e ainda temos o custo adicional para adquirir e
manter o sistema de biometria. Explique a vantagem de segurança nesta situação que justifica a despesa extra.

11. Delinear a concepção de um esquema de autenticação que “aprende”. O esquema de autenticação seria
começar com algumas informações primitiva sobre um usuário, como nome e senha. Como o uso do sistema de
computação continuou, o sistema de autenticação iria reunir informações como comumente usados ​linguagens
de programação; datas, horários e períodos de sessões de computação; e uso de recursos distintos. Os
desafios de autenticação se tornaria mais individualizada como o sistema aprendeu mais informações sobre o
usuário.

• Seu projeto deve incluir uma lista de muitas peças de informações sobre um usuário que o
sistema poderia recolher. É admissível que o sistema de pedir um utilizador autenticado para
algumas informações adicionais, como um livro favorito, para usar em desafios subsequentes.

• Seu projeto também deve considerar o problema de apresentar e validar estes desafios: Será
que o candidato a usuário responder a uma falsa verdade- ou uma questão de múltipla escolha? O
sistema de interpretar a prosa de linguagem natural?

12. Como as senhas armazenadas em seu computador pessoal?

13. Descreva uma situação em que um fraco, mas fácil de usar senha pode ser adequado.

14. Lista três perguntas de autenticação (mas não as respostas) a sua empresa de cartão de crédito poderia
pedir para autenticá-lo por telefone. Suas perguntas devem ser aquelas em que um impostor não poderia
obter facilmente as respostas. O quão difícil seria para você fornecer a resposta correta (por exemplo, você
teria que procurar alguma coisa ou você teria que fazer um cálculo aritmético rápida)?

15. Se você esquecer a senha para um site e clicar [Esqueci minha senha], por vezes, a empresa
envia uma nova senha por e-mail, mas às vezes ele envia
-lhe a sua senha antiga por e-mail. Compare estes dois casos, em termos de vulnerabilidade do dono do site.

16. autenticação derrotando segue o paradigma método oportunidade-motivo descrito em Capítulo 1 .


Discuta como esses três fatores se aplicam a um ataque à autenticação.

17. Sugerir fonte de alguns números imprevisíveis muito longos. A sua fonte deve ser algo que tanto o emissor eo
receptor podem facilmente aceder mas que não é óbvio para pessoas de fora e não transmitidos diretamente do
emissor ao receptor.

18. Quais são os riscos de ter o governo dos Estados Unidos selecionar um sistema de criptografia para uso comercial
generalizado (tanto dentro como fora dos Estados Unidos). Como os usuários de fora dos Estados Unidos conseguiu
superar alguns ou todos esses riscos?

19. Se a vida útil do DES foi cerca de 20 anos (1977-1999), quanto tempo você prever a vida útil
da AES será? Justifique sua resposta.
20. Os seres humanos são disse a ser o elo mais fraco em qualquer sistema de segurança. Dê um exemplo para cada um dos
seguintes:

(A) uma situação em que a falha humana pode conduzir a um compromisso de dados encriptados

(B) uma situação em que a falha humana pode conduzir a um compromisso de


identificação e autenticação

(C) uma situação em que a falha humana pode conduzir a um compromisso de controle de acesso

21. Por que cryptologists recomendar a alteração da chave de criptografia de vez em quando? É a mesma razão
especialistas em segurança recomendam mudar uma senha de tempos em tempos? Como se pode determinar com
que freqüência alterar as chaves ou senhas?

22. Explicar por que ocorrem colisões de hash. Ou seja, por que deve haver sempre dois plaintexts diferentes
que têm o mesmo valor de hash?

23. O estabelecimento de uma função hash significa que as colisões não são um problema de segurança? Ou
seja, por que um atacante não capitalizar sobre colisões e mudar o texto plano subjacente a uma outra forma
cujo valor colide com o valor hash do texto plano original?

24. Será que uma PKI executar a criptografia? Explique sua resposta.

25. Será que uma PKI usar criptografia simétrica ou assimétrica? Explique sua resposta.

26. Se um PKI ser apoiada em um firewall (o que significa que os certificados seriam armazenados no
firewall eo firewall iria distribuir certificados on demand)? Explique sua resposta.

27. Por que uma PKI precisa de um meio para cancelar ou invalidar os certificados? Por que não é suficiente para a
PKI para parar de distribuir um certificado após torna-se inválido?

28. Algumas pessoas pensam que a autoridade de certificação para uma PKI deve ser o governo, mas outros
pensam autoridades de certificação deve ser entidades privadas, como bancos, empresas ou escolas. Quais são as
vantagens e desvantagens de cada abordagem?

29. Se você vive no país A e receber um certificado assinado por um governo


autoridade de certificação no país B, que condições faria com que você confia que a assinatura como
autêntico?

30. Um certificado contém uma identidade, uma chave pública e assinaturas que atestam que a chave pública pertence à
identidade. Outros campos que podem estar presentes incluem a organização (por exemplo, universidade, empresa ou
governo) para que essa identidade pertence e talvez subentidades (faculdade, departamento, programa, filial, escritório).
Qual o propósito de segurança fazer esses outros campos servir, se for o caso? Explique sua resposta.
3. Programas e Programação

Neste capítulo:
• descuidos Programação: buffer overflows, off-by-one erros, mediação incompleta, o
tempo-de-verifique a erros de tempo de uso

• código malicioso: vírus, worms, cavalos de Tróia


• contramedidas Desenvolvedor: técnicas de desenvolvimento de programas, princípios de segurança

• contramedidas ineficazes

Os programas são coisas simples, mas que podem exercer poder. Pense sobre eles por um minuto: Programas são
apenas seqüências de 0s e 1s, que representam os comandos de máquinas elementares como mover um item de dados,
comparar dois itens de dados, ou ramo a um comando diferente. Esses comandos de máquinas primitivas implementar
construções de linguagem de programação de alto nível, tais como condicionais, loops de repetição, seleção dos casos e
operações aritméticas e de string. E essas construções de linguagem de programação nos dar funções de pacemaker,
controle de satélites, tecnologia smart-casa, gestão do tráfego, e fotografia digital, para não mencionar streaming de vídeo
e redes sociais. A Intel 32 e conjunto de instruções de 64-bits tem cerca de 30 primitivas básicas (tais como movimento,
comparar, ramo, incremento e decremento, operações lógicas, operações aritméticas, gatilho de I / O, gerar e interrupções
de serviços, empurrão, pop, chamada e retorno) e instruções especializadas para melhorar o desempenho em cálculos tais
como operações de ponto flutuante ou criptografia. Estes poucos comandos da máquina são suficientes para implementar
a vasta gama de programas que conhecemos hoje.

A maioria dos programas são escritos em linguagens de alto nível como Java, C, C ++, Perl, ou
Python; programadores costumam usar bibliotecas de código para construir programas complexos de
peças escritas por outros. Mas a maioria das pessoas não são programadores; em vez disso, eles já
usam aplicações para processamento de texto, navegação na web, design gráfico, contabilidade e afins
escrito sem saber nada sobre o código do programa subjacente. As pessoas não esperam que precisam
entender como as usinas operam, a fim de ligar uma luz elétrica. Mas se a luz não funcionar, o problema
poderia estar em qualquer lugar da usina para a lâmpada, e de repente o usuário precisa para rastrear
potenciais problemas de um lado para o outro. Embora o usuário não precisa se tornar um físico ou um
engenheiro elétrico,

Neste capítulo, descrevem problemas de segurança em programas e programação. Tal como acontece com a luz, um
problema pode residir em qualquer lugar entre o hardware da máquina ea interface do usuário. Dois ou mais problemas
podem combinar de forma negativa, alguns problemas podem ser intermitentes ou ocorrer somente quando alguma outra
condição está presente, e o impacto dos problemas podem variar de irritante (talvez nem mesmo perceptível) para
catastrófico.

falhas de segurança podem resultar de causas intencionais ou nonmalicious; ambos podem causar danos.
Em Capítulo 1 introduzimos a noção de motivo, observando que alguns problemas de segurança resultar de descuidos
nonmalicious ou erros, mas outros são intencionais. Um atacante malicioso pode explorar uma falha nonmalicious de causar
dano real. Assim, temos agora estudar várias falhas de programa comum para mostrar como simples erros durante a
programação pode levar a problemas de grande escala durante a execução. Ao longo do caminho que descrevem ataques
reais que foram causados ​por falhas do programa. (Nós usamos o termo falha porque muitos profissionais de segurança usam
esse termo ou o termo mais evocativo erro. No entanto, como você pode ver na Sidebar 3-1 , A linguagem para descrever
problemas de programa não é universal.)

Sidebar 3-1 a terminologia da (falta de) qualidade


Graças a Almirante Graça Murray Hopper, que casualmente chamar um problema de software um “bug”. [ KID98 ]
Mas esse termo pode significar coisas diferentes dependendo do contexto: um erro na interpretação de uma
exigência, um erro de sintaxe em um pedaço de código, ou (como ainda desconhecidos) causa de uma falha no
sistema. O Instituto de Eletrônica e Engenheiros Elétricos (IEEE) sugere o uso de uma terminologia padrão (no
padrão IEEE 729) para descrever erros em nossos produtos de software [ IEE83 ].

Quando um humano comete um erro, chamado de erro, na realização de alguma atividade software, o
erro pode levar a uma culpa, ou um passo, comando, processo ou definição de dados incorretos em um
programa de computador, design, ou documentação. Por exemplo, um designer pode interpretar mal uma
exigência e criar um design que não coincide com a intenção real do analista de requisitos e o usuário.
Esta falha de concepção é uma codificação de erro, e pode levar a outras avarias, tais como código
incorrecto e uma descrição incorrecto num manual. Assim, um único erro pode gerar muitas falhas, e uma
falha pode residir em qualquer produto de desenvolvimento ou manutenção.

UMA falha é uma partida de comportamento necessário do sistema. Pode ser descoberto antes ou após o
parto sistema, durante o teste, ou durante a operação e manutenção. Uma vez que os documentos de
requisitos pode conter falhas, uma falha indica que o sistema não está funcionando conforme o necessário,
mesmo que possa se apresentar como especificado.

Assim, uma falha é uma visão interna do sistema, como visto pelos olhos dos desenvolvedores, enquanto
que um fracasso é uma visão externa: um problema que o usuário vê. Cada falha tem pelo menos uma falha
como a sua causa raiz. Mas nem toda falta corresponde a uma falha; por exemplo, se o código defeituoso nunca
é executado ou um determinado estado nunca é inserido, a culpa nunca vai fazer com que o código para falhar.

Embora engenheiros de software costumam prestar muita atenção para a distinção entre faltas e fracassos,
engenheiros de segurança raramente fazem. Em vez disso, os engenheiros de segurança usam falha para
descrever ambos os defeitos e falhas. Neste livro, usamos a terminologia de segurança; nós tentamos fornecer
contexto suficiente para que você possa entender se queremos dizer culpa ou falha.

3.1 não intencionais (Nonmalicious) Oversights Programação

Programas e seu código de computador são a base da computação. Sem um programa para
orientar a sua actividade, um computador é bastante inútil. Porque os primórdios da computação oferecido alguns programas para uso geral,
os usuários de computador adiantados tinha que ser programadores também- que escreveu o código e, em seguida, correu para realizar
alguma tarefa. usuários de computadores de hoje, por vezes, escrever o seu próprio código, mas mais frequentemente do que comprar
programas da prateleira; eles até mesmo comprar ou compartilhar componentes de código e, em seguida, modificá-los para seus próprios
usos. E todos os usuários de bom grado executar programas todo o tempo: planilhas, tocadores de música, processadores de texto,
navegadores, manipuladores e-mail, jogos, simuladores e mais. Na verdade, o código é iniciado em inúmeras formas, desde ligar um
telefone celular para pressionar “start” em uma máquina de café ou forno de microondas. Mas, como os programas tornaram-se mais
numerosos e complexos, os usuários são mais frequentemente incapazes de saber o que o programa está realmente fazendo ou como.

Mais importante, os usuários raramente saber se o programa que está a utilizar está a produzir resultados corretos. Se
um programa pára abruptamente, texto desaparece de um documento, ou a música de repente pula passagens, o código
pode não estar funcionando corretamente. (Às vezes, essas interrupções são intencionais, como quando um leitor de CD
pula porque o disco está danificado ou um programa de dispositivo médico pára a fim de evitar uma lesão.) Mas, se uma
planilha produz um resultado que está fora por uma quantidade pequena ou um desenho automatizado pacote não alinhar
objetos exatamente, você pode não notar, ou você notar, mas se culpar em vez do programa para a discrepância.

Estas falhas, visíveis e invisíveis, pode ser motivo de preocupação de várias maneiras. Como todos sabemos, os programas
são escritos por seres humanos falíveis, e falhas do programa podem variar de insignificante para catastrófico. Apesar dos testes
significativa, as falhas podem aparecer regularmente ou esporadicamente, talvez dependendo de muitas circunstâncias
desconhecidas e imprevistos.

falhas do programa podem ter dois tipos de implicações de segurança: Eles podem causar problemas de integridade que
levam à saída ou ação prejudicial, e eles oferecem uma oportunidade para a exploração por um ator malicioso. Discutimos
cada um por sua vez.

• Uma falha de programa pode ser uma falha que afeta a exatidão do resultado do programa
- ou seja, uma falha pode levar a um fracasso. operação incorreta é uma integridade falhando. Como vimos no Capítulo
1 , A integridade é uma das três propriedades da tríade CIA de segurança fundamentais. Integridade envolve não
apenas a correção, mas também exatidão, precisão e consistência. Um programa com defeito também pode
inadequadamente modificar dados anteriormente corretas, às vezes por substituir ou excluir os dados originais.
Mesmo que a falha não pode ter sido inserida de forma maliciosa, os resultados de um programa falho pode
levar a danos graves.

• Por outro lado, mesmo uma falha de uma causa benigna pode ser explorada por alguém mal-intencionado. Se
um atacante descobre uma falha e pode usá-lo para manipular o comportamento do programa, uma falha simples
e nonmalicious pode se tornar parte de um ataque malicioso.

falhas benignos podem ser, muitas vezes são exploradas para o impacto malicioso.

Assim, em ambos os sentidos, programa de correção torna-se um problema de segurança, bem como um problema geral de
qualidade. Neste capítulo examinamos várias falhas de programação que têm implicações de segurança. Mostramos também que
atividades durante a concepção do programa, desenvolvimento e implantação pode melhorar a segurança do programa.
Buffer Overflow
Começamos com uma falha particularmente bem conhecido, a sobrecarga da memória intermédia. Embora o problema
básico é fácil de descrever, localizar e prevenir tais dificuldades é um desafio. Além disso, o impacto de um estouro pode ser
sutil e desproporcional à supervisão subjacente. Este efeito desproporcional é devido em parte às façanhas que as pessoas
tenham alcançado usando transborda. Com efeito, uma sobrecarga da memória intermédia é muitas vezes o ponto de apoio
para a montagem inicial de uma batida mais prejudicial. A maioria dos buffer overflows são simples descuidos de programação,
mas eles podem ser usados ​para fins maliciosos. Vejo Sidebar 3-2 para a história de uma busca por um estouro de buffer.

Buffer overflows muitas vezes vêm de descuidos programador inocentes ou falhas no


documento e verificar se há dados excessivos.

Este exemplo não foi o primeiro estouro de buffer e, no tempo-intervir aproximando duas décadas, muito mais
estouros de buffer foram descobertos. No entanto, este exemplo mostra claramente a mente de um atacante. Neste
caso, David estava tentando melhorar a segurança, ele estava trabalhando para um dos autores deste livro no
tempo-, mas os atacantes trabalhar para derrotar segurança por razões tais como os enumerados no Capítulo 1 .
Vamos agora investigar as fontes de ataques de buffer overflow,
suas conseqüências, e alguns
contramedidas.

Anatomia de estouros de buffer

Uma seqüência de derrapagens seu espaço atribuído ou um elemento extra é empurrado em uma matriz; o que é o grande negócio,
você pergunta? Para entender por que estouros de buffer são um grande problema de segurança, você precisa entender como um código e
armazena dados do sistema operacional.

Como mencionado acima, estouros de buffer ter existido quase tão longa como linguagens de programação de alto nível com
matrizes. overflows adiantados eram simplesmente um aborrecimento menor para os programadores e usuários, uma causa de erros e
às vezes até mesmo falhas do sistema. Mais recentemente, no entanto, os atacantes usaram-los como veículos para causar uma
primeira falha no sistema e, em seguida, uma falha controlada com uma implicação de segurança grave. O grande número de
vulnerabilidades de segurança com base em estouros de buffer mostra que os desenvolvedores devem prestar mais atenção agora do
que tinha sido previamente pensado para ser apenas um aborrecimento menor.

Sidebar 3-2 Meu número de telefone é 5656 4545 7890 1234 2929 2929 2929 ...

Em 1999, o analista de segurança David Litchfield [ LIT99 ] Foi curiosos por sobrecargas de buffer. Ele
tinha tanto uma estranha sensação para o tipo de programa que iria conter excessos e a paciência
de procurá-los diligentemente. Ele aconteceu na Microsoft Dialer programa, dialer.exe.

Dialer foi um programa para discar um telefone. Antes de telefones celulares, WiFi, banda larga e DSL, os
computadores foram equipados com modems pelo qual eles poderiam se conectam à rede telefónica terrestre;
um usuário que discar um provedor de serviços de Internet e estabelecer uma conexão através de uma linha
telefónica de voz padrão. Muitas pessoas compartilharam uma linha entre o computador (dados) a
comunicação de voz e. Você poderia olhar para cima o número de telefone de um contato, chegar para o
telefone, discar o número, e conversar; mas o modem do computador pode discar
Na mesma linha, para que você possa alimentar o número para o modem a partir de uma lista de contatos
eletrônicos, deixe o modem discar o seu número, e pegar o receptor quando o seu interlocutor respondeu.
Assim, a Microsoft forneceu Dialer, um programa utilitário simples para discar um número com o modem.
(A partir de 2014, dialer.exe ainda era parte do Windows 10, embora o buffer overflow aqui descrito foi
corrigida logo após David relatou.)

David argumentou que Dialer teve que aceitar números de telefone de comprimentos diferentes, dadas as
variações país, códigos de acesso de saída e sinais remotos (por exemplo, para introduzir um número de
ramal). Mas ele também suspeita de que haveria um limite superior. Então ele tentou dialer.exe com um número
de telefone de 20 dígitos e tudo funcionou bem. Ele tentou 25 e 50, e o programa ainda funcionou bem. Quando
ele tentou um número de telefone 100 dígitos, o programa caiu. O programador provavelmente tinha feito uma
decisão em situação irregular e não testado que ninguém jamais iria tentar marcar um número de telefone 100
dígitos ... exceto David.

Tendo encontrado um ponto de ruptura, David começou então a parte interessante do seu trabalho: Falhando
um programa demonstra uma falha, mas que exploram essa falha mostra o quão sério a culpa é. Por mais
experimentação, David descobriu que o número a ser discado foi escrito na pilha, a estrutura de dados que
armazena parâmetros e endereços de retorno para chamadas Programa integrado. O programa dialer.exe é
tratada como uma chamada do programa pelo sistema operacional, por isso, controlando o que dialer.exe
overwrote, David poderia redirecionar a execução continue em qualquer lugar com todas as instruções que ele
queria. Os detalhes completos da sua exploração são dadas em [ LIT99 ].

Alocação de memória

A memória é um recurso limitado, mas flexível; qualquer local de memória pode armazenar qualquer peça de código ou dados. Para

tornar o gerenciamento de memória do computador eficiente, sistemas operacionais jam um elemento de dados ao lado de outro, sem levar

em conta o tipo de dados, tamanho, conteúdo ou propósito. 1 Usuários e programadores raramente sabe, muito menos tem qualquer

necessidade de saber, com precisão qual a memória local um item de código ou dados ocupa.

1 . Alguns sistemas operacionais fazer código executável em separado a partir de dados não executáveis, e algum hardware pode fornecer proteção diferente
para endereços de memória contendo código em oposição aos dados. Infelizmente, no entanto, por motivos que incluem design simples e desempenho, a
maioria dos sistemas operacionais e hardware não implementar tal separação. Nós ignorar as poucas excepções neste capítulo porque a questão da sobrecarga
de buffer de segurança aplica-se mesmo dentro de um sistema mais limitado. Designers e programadores precisam estar cientes dos estouros de buffer, porque
um programa projetado para uso em um ambiente às vezes é transportado para outro menos protegidos.

Os computadores utilizam um ponteiro ou registo conhecido como um contador de programa que indica a próxima
instrução. Enquanto o fluxo do programa é seqüencial, hardware solavancos até o valor no contador de programa para
apontar logo após a instrução atual como parte de executar essa instrução. instruções condicionais como IF (), instruções
de desvio, como loops (enquanto, FOR) e transferências incondicionais como GOTO ou ligue para desviar o fluxo de
execução, fazendo com que o hardware para colocar um novo endereço de destino para o contador de programa. Alterar o
programa contra causas de execução para transferir a partir do fundo de um loop de volta ao seu superior para outra
iteração. Hardware simplesmente busca o byte (ou bytes) no endereço apontado pelo contador de programa e executa-lo
como uma instrução.

Instruções e dados são todas as cadeias binárias; apenas o contexto de uso, diz um byte, por
exemplo, 0x41 representa a letra A, o número 65, ou a instrução para mover o conteúdo do registo um com o ponteiro de
pilha. Se acontecer de você colocar a string de dados “A” no caminho da execução, ele será executado como se fosse uma
instrução. Em Figura 3-1 vamos mostrar um arranjo típico do conteúdo da memória, mostrando código, dados locais, a pilha
(armazenamento de dados criados dinamicamente), ea pilha (armazenamento para chamada subtarefa e retornar dados).
Como você pode ver, as instruções de mover a partir do fundo (endereços baixos) de memória para cima; não for
controlada, a execução seria prosseguir com a área de dados locais e na pilha e pilha. É claro, a execução normalmente
fica dentro da área atribuída ao código do programa.

FIGURA 1/3 Organização típica de memória

Nem todos os itens de dados binários representam instruções válidas. Alguns não correspondem a qualquer operação
definida, por exemplo, 0x78 operação numa máquina cujas instruções são todos números entre 0x01 e 0x6F. Outras formas
inválidos tentar usar recursos de hardware inexistentes, como uma referência para registrar 9 em uma máquina com apenas
oito registros de hardware.

Para ajudar os sistemas operacionais implementar a segurança, alguns hardware reconhece mais de uma modalidade de
ensino: os chamados instruções privilegiadas que podem ser executadas somente quando o processador está rodando em
um modo protegido. Tentar executar algo que não corresponde a uma instrução válida ou tentar executar uma instrução
privilegiada quando não estiver no modo adequado irá causar um falha de programa. Quando o hardware gera uma falha de
programa, ele pára o segmento atual de execução e transfere o controle para o código que vai tomar medidas de
recuperação, tais como travar o processo atual e retornar o controle ao supervisor.

Código e dados

Antes de podermos explicar o impacto real do buffer overflows, precisamos esclarecer um ponto: código, dados, instruções, o
sistema operacional, estruturas de dados complexas, programas de usuário, cordas, rotinas de serviços públicos baixaram,
dados hexadecimais, dados decimais, cadeias de caracteres, bibliotecas de código, fotos e tudo mais na memória são apenas
seqüências de 0s e 1s; Imagine
tudo como bytes, cada um contendo um número. O computador não presta atenção à forma como os bytes foram produzidos
ou de onde vieram. Cada instrução de computador determina como valores de dados são interpretados: uma instrução ADD
implica o item de dados é interpretado como um número, uma instrução de movimentação se aplica a qualquer seqüência de
bits de forma arbitrária, e uma instrução de salto assume o alvo é uma instrução. Mas no nível da máquina, nada impede que
uma instrução de salto de transferir para um campo de dados ou um comando Add operando em uma instrução, embora os
resultados podem ser desagradáveis. Código e os dados são cadeias de bits interpretados de uma forma particular.

Na memória, o código é indistinguível de dados. A origem do código (respeitada fonte


ou atacante) também não é visível.

Você não costuma tentar executar valores de dados ou realizar operações aritméticas em instruções. Mas se 0x1C é o
código de operação para uma instrução de salto, e a forma de uma instrução de salto é 1C displ, ou seja, executar a
instrução no endereço displ bytes à frente desta instrução, a seqüência 0x1C0A é interpretado como salto para a frente 10
bytes. Mas, como mostra a
Figura 3-2 , Que mesmo padrão de bits representa o de dois bytes decimal inteiro 7178. Assim armazenar o número 7178
em uma série de instruções é a mesma como tendo programado um salto. A maioria dos programadores de nível de língua
maior não se preocupam com a representação de instruções na memória, mas os investigadores curiosos podem facilmente
encontrar a correspondência. Fabricantes publicam referências especificando precisamente o comportamento de seus chips
e programas utilitários, como compiladores, montadores, e disassemblers ajudar os programadores interessados
​desenvolver e interpretar instruções de máquina.

FIGURA 3-2 Padrões de bits pode representar dados ou instruções

Normalmente nós não tratamos código como dados, ou vice-versa; atacantes, às vezes, no entanto, especialmente em ataques
de estouro de memória. truque do atacante é fazer com que os dados transbordar
em código executável e, em seguida, para selecionar os valores de dados de tal forma que eles são interpretados como instruções válidas
para realizar o objetivo do atacante. Para alguns atacantes esta é uma meta de dois passos: primeiro fazer com que o estouro e depois
experimentar com a ação que se seguiu a causar um resultado desejado, previsível, assim como fez Davi.

Dano causado por um estouro

Vamos supor uma pessoa mal intencionada entende o dano que pode ser feito por um estouro de buffer; ou seja,
estamos a lidar com mais do que simplesmente um programador normal, trapalhão. O programador malicioso pensa
deviously: Que valores dados que eu poderia inserir a causar o prejuízo ou dano, eo que planejou códigos de instrução
que eu poderia forçar o sistema a executar? Há muitas respostas possíveis, algumas das quais são mais maléfica do
que outros. Aqui, apresentamos dois ataques de buffer overflow que são usados ​com freqüência. (Vejo [ ALE96 ] para
mais detalhes.)

Primeiro, o atacante pode substituir o código no espaço do sistema. Como mostrado em Figura 3-3 ,
organização de memória não é tão simples como mostrado na Figura 3-1 . código e dados do sistema operacional coexistir
com código e os dados do usuário. A linha pesada entre o sistema e espaço do usuário é apenas para indicar uma
separação lógica entre essas duas áreas; na prática, a distinção não é tão sólida.

FIGURA 3-3 Organização de memória com Usuário e Áreas sistema Lembre-se que cada programa é
invocado por um sistema operacional que pode ser executado com privilégios superiores aos de um programa regular.
Assim, se o atacante pode ganhar o controle por que aparece como o sistema operacional, o atacante pode executar
comandos em um papel poderoso. Portanto, substituindo algumas instruções para a direita depois de voltar de seu próprio
procedimento, o atacante recupera o controle do sistema operacional, possivelmente com privilégios elevados. Esta técnica é
chamada escalação de privilégios. Se o tampão transborda para o espaço de código do sistema, o atacante meramente
insere dados de transbordamento que correspondem ao código de máquina para instruções.
No outro tipo de ataque, o intruso pode passear em uma área chamada de pilha e heap. chamadas subprocedimento são
tratados com uma pilha, uma estrutura de dados na qual o item mais recente inserido é o próximo removido (último chegou,
primeiro a ser servido). Esta estrutura funciona bem, porque chamadas de procedimento podem ser aninhados, com cada
retorno causando controle para transferir de volta para a rotina imediatamente anterior em seu ponto de execução. Cada vez
que um procedimento é chamado, seus parâmetros, o endereço de retorno (o endereço imediatamente após a sua chamada), e
outros valores locais são empurrados para uma pilha. Um ponteiro de pilha velha também é empurrado para a pilha, e um
registo ponteiro da pilha é recarregada com o endereço desses novos valores. O controlo é então transferido para o
subprocedimento.

Como o subprocedimento é executado, ele vai buscar parâmetros que ele encontra usando o endereço apontado pelo
ponteiro de pilha. Tipicamente, o ponteiro de pilha é um registo no processador. Por conseguinte, fazendo com que uma
descarga para a pilha, o atacante pode alterar tanto o ponteiro de pilha velha (alterando o contexto para o procedimento de
chamada) ou o endereço de retorno (causando controlo para transferir em que o atacante pretenda quando o
subprocedimento retornos). Alterar o contexto ou endereço de retorno permite que o atacante para redirecionar a execução de
código escrito pelo atacante.

Em ambos os casos, o agressor deve experimentar um pouco para determinar onde o excesso é e como controlá-la.
Mas o trabalho a ser feito é relativamente pequeno, provavelmente um dia ou dois para um analista competente. Estas
sobrecargas de buffer são cuidadosamente explicado em um papel por Mudge [ MUD95 ] (Nome real, Pieter Zatko) do grupo
de segurança de computadores L0pht famoso. Pincus e Baker [ PIN04 tampão] avaliação transborda dez anos após Mudge e
descobriram que, longe de ser um aspecto menor do ataque, sobrecargas de buffer tinha sido um vector de ataque
significativo e tinha gerou vários outros novos tipos de ataques. Esse padrão continua até hoje.

Um estilo alternativo de buffer overflow ocorre quando os valores dos parâmetros são passados ​em uma rotina, especialmente
quando os parâmetros são passados ​para um servidor web na Internet. Os parâmetros são passados ​na linha de URL, com uma
sintaxe semelhante ao

Clique aqui para ver a imagem de código

http://www.somesite.com/subpage/userinput.asp? parm1 = (808) 555-1212

Neste exemplo, o userinput roteiro aplicativo recebe um parâmetro, parm1 com valor (808)555-1212 (talvez um
número de telefone dos EUA). O navegador na máquina do chamador irá aceitar valores de um usuário que
provavelmente termina campos em um formulário. O navegador codifica esses valores e transmite-los de volta para
o site do servidor.

O atacante pode questionar o que o servidor faria com um número de telefone muito longo, digamos, um com 500 ou
1000 dígitos. Esta é precisamente a pergunta David perguntou o exemplo que descrito em Sidebar 3-2 . Passando uma
seqüência muito longa para um servidor web é uma pequena variação no buffer overflow clássico, mas não menos eficaz.

Memória sobrescrevendo

Agora pense em um estouro de buffer. Se você escreve um elemento após o final de uma matriz ou você armazenar uma seqüência de
11 bytes em uma área de 10 bytes, que os dados extra tem de ir a algum lugar; muitas vezes ele vai imediatamente após o último espaço
atribuído para os dados.

Um tampão (ou matriz ou cadeia) é um espaço no qual os dados podem ser realizadas. Um tampão reside em
memória. Como a memória é finita, a capacidade de um tampão é finito. Por esta razão, em muitas linguagens de
programação que o programador deve declarar o tamanho máximo do buffer para que o compilador pode anular essa
quantidade de espaço.

Vejamos um exemplo para ver como estouros de buffer pode acontecer. Suponha que um programa em linguagem C
contém a declaração

amostra char [10];

O compilador separa 10 bytes de armazenar este tampão, um byte para cada um dos 10 elementos do
array, amostra denotada [0] a amostra [9]. Agora vamos executar a instrução

amostra [10] = 'B';

O índice está fora dos limites (ou seja, ele não cai entre 0 e 9), por isso temos um problema. O resultado mais bonitas
(a partir de uma perspectiva de segurança) é para o compilador para detectar o problema e marcar o erro durante a
compilação, que o compilador poderia fazer neste caso. No entanto, se a declaração foram

amostra [i] = 'B';

em seguida, o compilador não conseguiu identificar o problema até i foi definido durante a execução, quer para
um valor adequado (entre 0 e 9) ou para um subscrito de fora dos limites (menos do que 0 ou maior do que 9). Seria
útil se, durante a execução, o sistema produziu um aviso mensagem de erro de uma exceção subscrito.
Infelizmente, em algumas línguas, tamanhos de buffer não tem que ser pré-definidos, então não há nenhuma
maneira de detectar um erro de falta de limites. Mais importante, o código necessário para verificar cada subscrito
contra o seu valor máximo potencial leva tempo e espaço durante a execução, e os recursos são aplicados para
pegar um problema que ocorre com pouca frequência. Mesmo se o compilador tiveram o cuidado em analisar a
declaração de buffer e utilização, este mesmo problema pode ser causado com ponteiros, para o qual não há
nenhuma maneira razoável definir um limite adequado. Portanto,

Implicações da Memória Substituições

Vamos examinar mais de perto o problema da substituição de memória. Certifique-se de reconhecer que o
estouro potencial provoca um problema grave apenas em alguns casos. ocorrência do problema depende do
que é adjacente à matriz amostra. Por exemplo, suponha que cada um dos dez elementos da matriz amostra é
enchido com a letra A e a referência errada usa a letra B, como segue:

Clique aqui para ver a imagem de código

for (i = 0; i <= 9; i ++)


amostra [i] = 'A'; amostra [10]
= 'B'

Todos os programas e dados elementos estão na memória durante a execução, dividindo espaço com o sistema operacional,
outro código, e rotinas residentes. Então, quatro casos devem ser considerados para decidir onde o 'B' vai, como mostrado na Figura
3-4 . Se o personagem adicional transborda para o espaço de dados do usuário, ele simplesmente substitui um valor variável
existente (ou pode ser escrito em um local como-ainda não utilizado), talvez afetando o resultado do programa, mas que afeta
nenhum outro programa ou dados.
Figura 3-4 Overflow One-Character

No segundo caso, o 'B' vai para área de programas do usuário. Se sobrepõe uma instrução já executados (que não
será executado novamente), o usuário deve perceber nenhum efeito. Se sobrepõe uma instrução que ainda não é
executada, a máquina irá tentar executar uma instrução com o código de operação de 0x42, o código interno para o
personagem 'B'. Se não houver nenhuma instrução com código de operação 0x42, o sistema irá parar em uma exceção
de instrução ilegal. Caso contrário, a máquina usará bytes seguintes como se fossem o resto da instrução, com sucesso
ou fracasso dependendo do significado do conteúdo. Mais uma vez, somente o usuário é provável experimentar um
efeito.

Os casos mais interessantes (de uma perspectiva de segurança) ocorrem quando o sistema possui o espaço imediatamente
após a matriz que transborda. Transbordando para os dados do sistema ou áreas de código produz resultados semelhantes aos
de espaço do usuário: Computação com um valor de defeito ou tentar executar uma operação.

procedimentos do programa usar tanto local dados, dados utilizados estritamente dentro de um processo, e
compartilhado ou comum ou dados globais, que são partilhados entre dois ou mais procedimentos. organização de memória pode ser
complicado, mas é possível simplificar o layout como em Figura 3-5 . Nesse quadro, os dados locais são armazenados junto ao código de
um procedimento. Assim, como você pode ver, um estouro de dados tanto cai estritamente dentro de um espaço de dados ou que
transborda em uma área de código adjacente. Os dados terminar no topo de um dos

• uma outra parte de seus dados

• uma instrução de vocês


• dados ou código pertencente a outro programa
• dados ou código que pertence ao sistema operacional Consideramos

cada um desses casos separadamente.

FIGURA 5/3 Memória de procedimentos diferentes para diferentes usuários

Afetando seus próprios dados

Modificando seus próprios dados, especialmente com um valor não intencional, obviamente afetar sua computação.
Talvez um loop se repetirá muitas ou poucas vezes, a soma será comprometida, ou uma data vai se tornar ilegível.
Você pode imaginar essas possibilidades para si mesmo. O erro pode ser tão notório que você vai facilmente
reconhecer que algo está errado, mas uma falha mais sutil pode escapar de sua observação, talvez para sempre.

Do ponto de vista de segurança, alguns controles do sistema protegê-lo contra esse tipo de erro: Você já possui seu espaço
de dados e qualquer coisa que você deseja armazenar não é o seu negócio. Alguns, mas o código não todos, linguagens de
programação gerar verificação de coisas como matrizes para garantir que você armazenar elementos apenas dentro do espaço
alocado. Por esta razão, a técnica de programação defensiva (discutido mais adiante neste capítulo) recomenda que você
sempre verificar para garantir que os elementos da matriz e cordas estão dentro de seus limites. Como Sidebar 3-3

demonstra, por vezes, um erro deste tipo está adormecido por um longo tempo.

Sidebar 3-3 muitos computadores

A ARPANET, precursora de Internet de hoje, começou a operar em 1969. Stephen Crocker e Mary
Bernstein [ CRO89 ] Exaustivamente estudadas as causas de falhas catastróficas de 17 a ARPANET,
falhas que trazidos para baixo toda a rede ou uma porção significativa do mesmo.

Como você poderia esperar, muitas dessas falhas ocorreram durante a década de 1970 como o
uso da rede causou falhas de superfície. O final de um dos seus 17 causas só apareceu em 1988,
quase 20 anos após o início da rede. Esta interrupção foi causada por um estouro.

Os anfitriões rede ARPANET originais compostas que conectados a


processadores de comunicação especializados chamados PIM. Cada processador mensagem de interface
(IMP) controlava uma sub-rede individuais, bem como roteadores de hoje; os PIM ligado a outros PIM através
de linhas de comunicação dedicadas. Para uma fiabilidade, cada IMP tinham pelo menos dois caminhos
distintos para cada outro IMP. As conexões IMP foram adicionados a uma tabela dinamicamente como a
comunicação entre dois PIM foi exigido pelo tráfego de rede.

Em 1988, uma sub-rede adicionou-se uma ligação para uma IMP 348. A tabela para
conexões IMP foi codificado em 1969 para apenas 347 entradas, o que parecia
descontroladamente excessiva no momento, e nos anos seguintes pessoas tinha esquecido
que o tamanho da tabela se, de fato, ele já tinha sido divulgado. (Em 1967, 347 PIM foi muito
mais do que os designers nunca imaginou a rede teria.) Software manipulação mesa do IMP
detectado esse estouro, mas lidou com isso fazendo com que o IMP para reiniciar; Após
reiniciar, a mesa do IMP foi liberado e seria preenchido novamente como ele descobriu outras
sub-redes alcançáveis. Aparentemente, os autores desse software assumido tal estouro mesa
seria um erro esporádico de outra causa, então limpar e reiniciar se livrar da mesa dos dados
defeituosos. Porque a falha foi devido a uma situação real,

Levou algum tempo para determinar a origem e remédio desta falha, porque vinte anos se passaram
entre codificação e falhando; todo mundo associado com a concepção ou implementação original havia
se mudado para outros projetos.

Como mostra este exemplo, tampão transborda-como outras falhas-programa pode permanecem por explorar e
não detectada, por algum tempo, mas que ainda estão presentes.

Afetando uma Instrução de Tua

Mais uma vez, a falha de uma das suas instruções afeta você, e sistemas de dar ampla liberdade para que você pode fazer
para si mesmo. Se você armazenar uma string que não representa uma instrução válida ou permitido, o programa pode gerar
uma falha e parada, retornando o controle para o sistema operacional. No entanto, o sistema irá tentar executar uma cadeia
que acidentalmente faz representar uma instrução válida, com efeitos dependendo do valor real. Novamente, dependendo da
natureza do erro, esta instrução defeituosa pode não ter efeito (se ele não está no caminho de execução ou em uma seção
que já foi executado), um efeito nulo (se isso acontecer não afetar código ou de dados, tais como uma instrução para se
mover o conteúdo do registo de 1 a si mesma), ou um efeito despercebida ou prontamente observada.

Destruindo o seu próprio código ou dados é desagradável, mas pelo menos você pode dizer que o dano foi sua própria
culpa. A menos, claro, não foi sua culpa. Uma falha no início Outlook da Microsoft envolvidos no campo de data simples: A
data é de alguns bytes longos para representar um dia, mês, ano e hora no formato GMT (Greenwich Mean Time). Em uma
versão anterior do Outlook, uma mensagem com uma data de mais de 1000 bytes excedeu o espaço de buffer para
cabeçalhos de mensagens e correu para o espaço reservado. Basta baixar uma tal mensagem a partir de um servidor de
correio poderia causar seu sistema a falhar, e cada vez que você tentou reiniciar, Outlook iria tentar recarregar a mesma
mensagem e falhar novamente. Neste caso, você sofreu danos de um buffer overflow envolvendo apenas a sua área de
memória.

Um programa pode acidentalmente modificar código ou dados de outro procedimento que não será
executado até muito mais tarde, de modo que o impacto retardado pode ser quase tão difícil de diagnosticar como se o ataque veio de
um usuário não relacionado, independente. O impacto mais significativo de um buffer overflow ocorre quando os dados em excesso
afeta o código ou os dados do sistema operacional.

Modificação do código e dados para um usuário ou de outra é significativo, mas não é um grande problema de segurança
do computador. No entanto, como mostramos na próxima seção, estouros de buffer perpetrado no sistema operacional pode
ter consequências graves.

Afetando o sistema operacional ou uma aplicação crítica

Os mesmos cenários básicos ocorrer por código do sistema operacional ou dados como para os usuários, embora,
novamente, há variações importantes. Explorar essas diferenças também nos leva a considerar motivo, e por isso mudar de
pensamento do que são essencialmente acidentes aos actos maliciosos intencionais por um atacante.

Porque a mistura de programas muda continuamente em um sistema de computação, há pouca oportunidade de


afetar qualquer um uso particular. Consideremos agora o caso em que um atacante que já ultrapassou um usuário
comum quer agora ultrapassar o sistema operacional. Um tal ataque pode deixar o código permanente planta invasor
que é reactivado de cada vez que uma máquina for reiniciado, por exemplo. Ou o ataque pode expor dados, por
exemplo, senhas ou chaves criptográficas que o sistema operacional é confiada a salvaguardar. Então agora vamos
considerar o impacto de uma (comprometido) user pode ter sobre o sistema operacional.

código e dados dos usuários são colocados essencialmente ao acaso: onde quer que haja memória livre de um tamanho
adequado. Apenas traçando através de tabelas de alocação de memória do sistema que você pode aprender onde o programa
e os dados aparecem na memória. No entanto, certas partes do sistema operativo são colocados em locais fixos particulares,
e outros dados estão localizados em locais que podem ser facilmente determinados durante a execução. local fixo ou
facilmente determinada distingue rotinas do sistema operacional, especialmente os mais críticos, de código e dados do
usuário.

Uma segunda distinção entre usuários comuns eo sistema operacional é que um usuário é executado sem privilégios de
sistema operacional. O sistema operacional invoca o programa de um usuário como se fosse um subprocedimento, eo sistema
operacional recebe o controle de volta quando sai do programa do usuário. Se o usuário pode alterar o que o sistema operacional
faz quando se recupera o controle, o usuário pode forçar o sistema operacional para executar o código que o usuário deseja
executar, mas com privilégios elevados (os do sistema operacional). Ser capaz de modificar o código do sistema operacional ou
de dados permite ao usuário (isto é, um atacante agindo como o usuário) para obter status privilegiado eficaz.

Privilégio de escalonamento, a execução de um código de ataque com permissões sistema


superiores, é um bónus para o invasor.

A sequência de chamada de retorno e opera de acordo com um protocolo bem definido, utilizando uma estrutura de dados
chamado o pilha. Uma alef (Elias Levy) descreve como usar sobrecargas de buffer para substituir a pilha de chamadas [ ALE96 ]. Na
próxima seção vamos mostrar como um programador pode usar um excesso de comprometer o funcionamento de um computador.

A pilha e Heap

o pilha é uma estrutura de dados de chave necessário para a transferência de dados entre processos,
como descrevemos anteriormente neste capítulo. código executável reside em uma extremidade da memória, que retratam como
a baixa final; acima dela são constantes e itens de dados cujo tamanho é conhecido em tempo de compilação; acima, que é a
pilha para itens de dados, cujo tamanho pode mudar durante a execução; e, finalmente, a pilha. Na verdade, como mostrado
anteriormente Figura 3-1 , A pilha e pilha estão em extremos opostos da memória sobra depois de código e dados locais.

Quando o procedimento A chama procedimento B, A coloca na pilha o seu endereço de retorno (isto é, o valor atual do
contador de programa), o endereço no qual a execução deve retomar quando saídas B, bem como os valores dos parâmetros
de chamada. uma tal sequência é mostrada na Figura 3-6 .

Figura 3-6 Parâmetros e retorno de endereço

Para ajudar dados pilha desenrolamento emaranhadas por causa de um programa que falhar durante a execução, a pilha
também contém o ponteiro para a parte inferior lógica da seção deste programa da pilha, isto é, até o ponto logo antes que este
procedimento empurrado valores na pilha. Este grupo de dados de parâmetros, endereço do remetente, e ponteiro da pilha é
chamado de quadro de pilha, como mostrado em Figura 7/3 .

FIGURA 7/3 Um quadro de pilha

Quando um processo de chama outra, a moldura da pilha está colocado na pilha para permitir que os dois procedimentos
para troca de dados e de controle de transferência; um exemplo da pilha após o procedimento A chama B é mostrada na Figura
3-8 .

FIGURA 8/3 A pilha após uma chamada de procedimento


Agora, vamos considerar um exemplo um pouco mais profundo: procedimento Suponha A chama B que por sua vez chama C.
Após estas duas chamadas a pilha vai olhar como mostrado na Figura 7/3 , Com o endereço de retorno a A na parte inferior, em
seguida, os parâmetros de A para B, o endereço de retorno a partir de C a B, e parâmetros de B para C, nessa ordem. Após o
procedimento C retorna para B, o segundo quadro de pilha é retirado da pilha e parece novamente como Figura 3-9 .

FIGURA 3-9 O Stack após chamadas aninhadas Procedimento

O importante a notar nestes números é o contador de programa: Se o atacante pode substituir o contador de
programa, isso irá redirecionar a execução do programa após o procedimento retorna, e que o redirecionamento é, de
fato, um passo freqüentemente visto em explorar um buffer overflow .

Overflow no espaço sistema pode redirecionar a execução imediatamente ou na saída do


procedimento chamado atual.

Refira-se novamente para Figura 3-1 e observe que a pilha está no topo da memória, crescendo para baixo, e outra coisa,
chamado de pilha, está no fundo crescendo. Como você acabou de ver, a pilha é usado principalmente para chamadas aninhadas
para procedimentos. o montão fornece espaço para os dados dinâmicos, ou seja, itens de dados cujo tamanho não se sabe
quando um programa é compilado.

Se você declarar uma matriz de dez elementos no código-fonte de uma rotina, o compilador aloca espaço suficiente para
os dez elementos, bem como espaço para constantes e variáveis ​individuais. Mas suponha que você está escrevendo uma
espécie de rotina de uso geral que funciona em todos os dados, por exemplo, tabelas com arbitrariamente muitas linhas e
colunas de qualquer tipo de dados. Você pode processar um conjunto de 100 números inteiros, uma mesa de 20.000
números de telefone, ou uma estrutura de 2.000 referências bibliográficas com nomes, títulos e fontes. Mesmo que a própria
tabela é passado como um parâmetro para que você não precisa de espaço para armazená-lo dentro de seu programa, você
vai precisar de algum espaço temporário, por exemplo, para as variáveis ​para manter os valores de duas linhas como você
compará-los e talvez troca suas posições. Porque você não pode saber quando você escrever seu código como uma grande
linha será, linguagens de programação modernas permitem adiar declarando o tamanho destas variáveis ​até que o programa
é executado. Durante a execução, o código inserido pelo compilador em seu programa
determina os tamanhos e pede ao sistema operacional para alocar memória dinâmica, que o sistema operacional
recebe do heap. A pilha cresce e encolhe como a memória é alocada e liberada para estruturas de dados dinâmicos.

Como você pode ver na Figura 3-1 , A pilha e heap crescer em direção ao outro, e você pode
prever que em algum momento eles podem colidir. Normalmente, o sistema operacional monitora seus tamanhos e impede
uma tal colisão, exceto que o sistema operacional não pode saber que você vai escrever 15.000 bytes em um espaço de
pilha dinâmica para que você solicitou apenas 15 bytes, ou 8 bytes em um parâmetro de 4 bytes, ou parâmetro de quatro
valores de retorno em três espaços de parâmetros.

O atacante quer substituir memória de pilha, às vezes chamado Stack Smashing, de forma proposital: Dados arbitrários
no lugar errado provoca um comportamento estranho, mas os dados específicos em um local previsível provoca um
impacto planejado. Aqui estão algumas maneiras que o atacante pode produzir efeitos de um ataque overflow:

• Substituir o contador de programa armazenados na pilha de modo que quando este sai de rotina, transferências de controle
para o endereço apontado para pelo endereço contador de programa modificado.

• parte Overwrite do código na memória baixa, substituindo as instruções do atacante para as


demonstrações de programas anteriores.

• Substituir o contador e dados do programa na pilha para que o contador de programa agora aponta para a
pilha, fazendo com que os dados substituídos para a pilha para ser executado.

A característica comum destes métodos de ataque é que o atacante usa dados de estouro como
código a vítima será executado. Como esse código é executado sob a autoridade da vítima, ele carrega
privilégios da vítima, e pode destruir os dados da vítima, substituindo-lo ou pode executar qualquer ação
a vítima poderia, por exemplo, o envio de e-mail como se de vítima. Se ocorrer o transbordamento
durante uma chamada de sistema, isto é, quando o sistema está sendo executado com privilégios
elevados, o código do invasor também executa com esses privilégios; Assim, um ataque que transfere o
controle para o atacante, invocando uma das rotinas do atacante ativa o código do invasor e deixa o
atacante no controle com privilégios.

Ataques de buffer overflow são interessantes porque eles são o primeiro exemplo de uma classe de problemas chamados
Data Driven ataques. Em um ataque accionado dados o dano ocorre pelos dados o atacante envia. Pense em um tal ataque
desta maneira: Um buffer overflow quando alguém enfia muito para isso. A maioria das pessoas acidentalmente colocou mais
um elemento em uma matriz ou acrescentar um caractere adicional em uma string. Os dados inseridos referem-se à aplicação
a ser calculado. No entanto, com um buffer overflow malicioso o atacante, como David o pesquisador nonmalicious, escolhe
cuidadosamente os dados que fará com que ação específica, para fazer o programa falhar de forma planejada. Desta forma,
os dados seleccionados conduzir o impacto do ataque.

Dados ataques accionados são dirigidos por dados escolhidos especialmente o atacante alimenta um
programa como entrada.
exploração suspeito de sobrecargas de buffer exibem também mais uma característica importante: Eles são
exemplos de uma abordagem de múltiplos passos. Não só o espaço alocado atacante invadida, mas o atacante
também usa a superação para executar instruções para alcançar o próximo passo no ataque. O estouro não é uma
meta, mas um trampolim para um propósito maior.

estouros de buffer pode ocorrer com muitos tipos de dados, variando de matrizes para parâmetros para itens de dados
individuais, e embora alguns deles são fáceis de evitar (como a verificação dimensão de um array antes de guardar), outros
não são tão fáceis. erros humanos nunca será eliminado, o que significa condições de estouro são susceptíveis de
permanecer. Na próxima seção apresentamos uma seleção de controles que podem detectar e bloquear vários tipos de
falhas de estouro.

Contramedidas de transbordamento

Parece como se a contramedida para um buffer overflow é simples: Verifique antes de escrever. Infelizmente,
isso não é tão fácil, porque algumas situações de estouro de buffer não são directamente sob o controle do
programador, e um estouro pode ocorrer de várias maneiras.

Embora buffer overflows são fáceis de programar, nenhuma contramedida vai impedi-los. No entanto, por
causa da prevalência e gravidade da overflows, vários tipos de protecção têm evoluído.

A contramedida mais óbvia para sobrescrever a memória é para ficar dentro dos limites. Manutenção de limites é
uma responsabilidade partilhada do programador, sistema operacional, compilador e hardware. Todos devem fazer o
seguinte:

• Verifique comprimentos antes de escrever.

• Confirmar que subscritos de matriz estão dentro dos limites.

• Duplo-check fronteira código de condição para capturar possíveis erros off-by-one.


• Monitorar entrada e aceitar apenas quantos caracteres podem ser manipulados.

• Use utilitários de cordas que transferem apenas uma quantidade limitada de dados.

• Verifique procedimentos que possam superaram o seu espaço.

• privilégios programas limite, por isso, se um pedaço de código está ultrapassado maliciosamente, o infrator não
adquire privilégios de sistema elevados, como parte do compromisso.

Controles de programação

Mais adiante neste capítulo estudamos controles de programação em geral. Você já pode ter encontrado estes
princípios de engenharia de software em outros lugares. Técnicas como a revisões de código (em que outros do que o
programador pessoas inspecionar código para descuidos de implementação) e de testes independente (em que testadores
dedicados a hipótese de pontos em que um programa pode falhar) pode pegar situações de estouro antes que se tornem
problemas.

Características da linguagem

Duas características que você deve ter notado sobre os ataques envolvendo buffer overflows são de que o atacante pode
escrever directamente para determinados endereços de memória e que a linguagem ou compilador permite operações inadequadas
em certos tipos de dados.

Anthony (CAR) Hoare [ HOA81 ] Comentários sobre a relação entre linguagem e


desenhar:

Os programadores são sempre rodeado de complexidade; não podemos evitá-lo. Nossas aplicações são
complexas porque somos ambiciosos para utilizar os nossos computadores de formas cada vez mais
sofisticadas. A programação é complexa por causa do grande número de objetivos conflitantes para cada
um dos nossos projetos de programação. Se a nossa ferramenta básica, a língua em que podemos projetar
e codificar os nossos programas, também é complicado, a linguagem em si torna-se parte do problema e
não parte da sua solução.

Algumas linguagens de programação têm características que impedem transborda. Por exemplo, linguagens como
Java, .NET, Perl e Python gerar código para verificar limites antes de armazenar dados. As línguas não verificadas C, C
++ e linguagem assembler permitir o acesso programa em grande parte ilimitado. Para contrariar a abertura destas
línguas, escritores compilador desenvolveram extensões e bibliotecas que geram código para manter programas em
cheque.

Analisadores de código

Os desenvolvedores de software esperar uma ferramenta simples para encontrar erros de segurança em programas. Essa
ferramenta, chamada de analisador de código estático, analisa o código-fonte para detectar situações de insegurança. Embora essas
ferramentas não são, e nunca pode ser, existem perfeitos, vários bons. Kendra Kratkiewicz e Richard Lippmann [ KRA05 ] E os
EUA-CERT construir a segurança em website https://buildsecurityin.us-cert.gov/ contêm listas de analisadores de código estático.

Separação

Outra orientação para proteger contra transbordamentos tampão é impor contenção: separar áreas sensíveis do
código de execução e os seus tampões e espaço de dados. Até certo ponto, hardware pode separar o código de
áreas de dados e do sistema operacional.

Obstáculos

Uma vez que a substituição da pilha é um ponto tal comum e poderosa de ataque, protegendo torna-se uma
prioridade.

Refira-se novamente para Figura 3-8 E observe que cada chamada de procedimento adiciona um novo quadro de pilha
que se torna uma fatia distinta da pilha. Se o nosso objetivo é proteger a pilha, nós podemos fazer isso envolvendo cada quadro
de pilha em uma camada protetora. Tal camada é muitas vezes chamado de
canário, em referência aos canários que antes eram tomadas em minas subterrâneas; o canário era mais sensíveis ao
oxigênio limitado, então os mineiros poderiam perceber o canário reagir antes que eles foram afetados, dando a mineiros
tempo para sair com segurança.

Nesta seção, vamos mostrar como alguns fabricantes desenvolveram almofadas para proteger contra danos
benigno ou malicioso para a pilha.

Em um tampão comum modificação de excesso de pilha, o contador de programa é reposto para apontar para a pilha para o
código de ataque que tem substituídos dados pilha. Em A Figura 3-10 , Os dois parâmetros P1 e P2 ter sido substituído com o
código para que o contador de programa foi redirecionado. (Duas instruções é muito curta um conjunto de muitos ataques de
estouro de pilha, de modo que um ataque de buffer overflow verdadeira envolveria mais dados na pilha, mas o conceito é mais
fácil ver com uma pequena pilha.)
FIGURA 3-10 comprometida Stack

StackGuard é uma abordagem proposta por Crispin Cowan et al. [ COW98 ] O atacante normalmente não pode dizer
exatamente onde o contador de programa guardado na pilha, apenas que há uma em um endereço aproximado. Assim, o
atacante tem que reescrever não apenas o ponteiro de pilha, mas também algumas palavras em torno dele para ter certeza de
mudar o ponteiro da pilha verdade, mas essa incerteza para o atacante permite StackGuard para detectar mudanças
prováveis ​para o contador de programa. Cada procedimento inclui um código Prolog para empurrar valores na pilha, definir o
restante do quadro de pilha, e passa o controle para o retorno de chamada; em seguida, no retorno, algum código de
terminação limpa a pilha, recarrega registros, e retorna. Logo abaixo do contador de programa, StackGuard insere um valor
canário para sinalizar modificação; se o atacante reescreve o contador de programa e do valor acrescentado, StackGuard
aumenta o código de encerramento para detectar o valor acrescentado modificado e sinalizar um erro antes de retornar.
Assim, cada valor canário serve como uma inserção de protecção para proteger o contador do programa. Estas inserções de
protecção são mostrados na A Figura 3-11 . A idéia de cercar o endereço de retorno com um valor de detecção de adulteração
é boa, contanto que apenas o defensor pode gerar e verificar esse valor.
FIGURA 3-11 Canárias valores para sinalizar Modificação

Infelizmente, o jogo de tênis ataque contramedida foi jogado aqui, como vimos em outras situações, como a
adivinhação de senha: O atacante serve, o defensor responde com uma contramedida, o atacante retorna a bola com um
ataque reforçado, e assim por diante. O valor canário de proteção tem que ser algo para o qual o código de terminação
pode detectar uma mudança, por exemplo, o 0x0f1e2d3c padrão reconhecível, que é um número que o atacante é
improvável para escrever naturalmente (embora não impossível). Assim que o atacante descobre que um produto
comercial procura por um bloco de exatamente esse valor, sabemos o valor é susceptível de escrever perto o endereço
de retorno do atacante. Contrariando novamente, para adicionar variedade o defensor escolhe padrões aleatórios que
seguem uma sequência, como 0x0f1e2d3c, 0x0f1e2d3d, e assim por diante. Em resposta, o atacante monitora a pilha ao
longo do tempo para tentar prever o padrão de sequência. As duas partes continuam a salva modificações, até que,
como no ténis, um lado falhar.

Em seguida, consideramos uma falha de programação que é semelhante a um overflow: uma falha para verificar e controlar o acesso
completamente e de forma consistente.

Mediação incompleta
Mediação significa verificação: o processo de intervir para confirmar a autorização de um ator antes de tomar uma ação
pretendida. No último capítulo, discutimos os passos e intervenientes no processo de autenticação: o controle de acesso
triplo que descreve o que assunto pode realizar o que a operação em que objeto. Verificando que o assunto está
autorizado a executar a operação em um objeto é chamado mediação. mediação incompleta é um problema de segurança
que tem estado conosco há décadas: Esquecendo-se de perguntar: “Quem está aí?” antes de permitir que o cavaleiro do
outro lado da ponte levadiça castelo é apenas a pedir sarilhos. Da mesma forma, os atacantes exploram mediação
incompletas para causar problemas de segurança.

Definição

Considere o seguinte URL. Além de um endereço da Web, contém dois parâmetros,


assim você pode pensar nisso como entrada para um programa:

Clique aqui para ver a imagem de código

http://www.somesite.com/subpage/userinput.asp? parm1 = (808) 555-1212 & parm2


= 2015Jan17

Como um profissional de segurança tentando encontrar e corrigir problemas antes que eles ocorram, você pode examinar as
várias partes do URL para determinar o que eles significam e como eles podem ser explorados. Por exemplo, o parm1
parâmetros e parm2 olhar como um número de telefone e uma data, respectivamente. Provavelmente navegador web (usuário)
do cliente entra esses dois valores em seu formato especificado para fácil processamento do lado do servidor.

Mas o que aconteceria se parm2 foram submetidos como 1800Jan01? Ou 1800Feb30? Ou 2048Min32? Ou
1Aardvark2Many? Algo no programa ou o sistema com o qual ele se comunica provavelmente falhar. Tal como acontece
com outros tipos de erros de programação, uma possibilidade é que o sistema iria falhar catastroficamente, com falha de
uma rotina em um erro de tipo de dados, uma vez que tentou lidar com um mês chamado “Min” ou até um ano (como 1800)
que estava fora de intervalo esperado. Outra possibilidade é que o programa de recepção iria continuar a executar, mas
geraria um resultado muito errado. (Por exemplo, imagine a quantidade de juros hoje em um erro de faturamento com uma
data de início de 01 de janeiro de 1800.) Então, novamente, o servidor de processamento pode ter uma condição padrão,
decidir para tratar 1Aardvark2Many como 21 de julho de 1951. As possibilidades são infinitas .

Um programador normalmente descarta considerando entrada ruim, perguntando por que alguém iria entrar em tais
números. Todo mundo sabe que não há 30 de fevereiro e, para certas aplicações, uma data em 1800 é ridículo. Verdade.
Mas ridículo não altera o comportamento humano. Uma pessoa pode digitar 1800 se os dedos escorregar ou a datilógrafa
é momentaneamente distraído, ou o número pode ter sido danificado durante a transmissão. Pior, só porque algo não faz
sentido, estúpido, ou errado não impede as pessoas de fazer isso. E se uma pessoa mal intencionada faz acidentalmente e
encontra uma falha de segurança, outras pessoas podem muito bem ouvir falar nisso. canalhas de segurança manter um
intercâmbio robusto de resultados. Assim, os programadores não devem presumir dados será adequada; em vez disso, os
programas devem validar que todos os valores de dados são razoáveis ​antes de usá-los.

Usuários cometem erros da ignorância, a incompreensão, a distração; erros de utilizador não deve

causar falhas do programa. Validar todas as entradas

Uma maneira de abordar potenciais problemas é tentar antecipá-los. Por exemplo, o programador nos
exemplos acima pode ter o código escrito para verificar a exactidão em
cliente 'S lado (isto é, o navegador do usuário). O programa cliente pode procurar e filtrar os erros. Ou, para evitar o
uso de dados sem sentido, o programa pode restringir escolhas para únicos válidos. Por exemplo, o programa
fornecendo os parâmetros poderia ter solicitado-los usando uma caixa drop-down ou lista de opções a partir do
qual poderia ter sido selecionados apenas os doze meses convencionais. Da mesma forma, o ano poderia ter sido
testado para garantir um valor razoável (por exemplo, entre 2000 e 2050, de acordo com a aplicação) e números
de data teria que ser adequado para os meses em que ocorrem (não 30 de fevereiro, por exemplo ). Usando essa
verificação, o programador pode ter se sentido bem
isolados dos possíveis problemas de um usuário descuidado ou mal intencionado poderia causar.

Proteja-se contra os dedos dos usuários

No entanto, o aplicativo ainda é vulnerável. Embalando o resultado para o URL de retorno, o programador deixou esses
campos de dados em um lugar onde o usuário pode acessar (e modificar)-los. Em particular, o usuário pode editar a linha de
URL, alterar quaisquer valores de parâmetro, e enviar a linha de revista. No lado do servidor, o servidor não tem maneira de
saber se a linha resposta veio do navegador do cliente ou como um resultado do usuário de editar o URL diretamente. Nós
dizer neste caso que os valores de dados não são completamente mediada: Os dados sensíveis (isto é, os valores de
parâmetros) está numa condição exposta, não controlada.

valores de dados não verificados representar um sério potencial vulnerabilidade. Para demonstrar implicações de
segurança desta falha, usamos um exemplo real; apenas o nome do fornecedor foi alterado para proteger o culpado.
Coisas, Inc., foi um grande fornecedor internacional de produtos de consumo, chamadas objetos. A empresa estava
pronta para vender seus objetos através de um web site, usando o que parecia ser uma aplicação de e-commerce padrão.
A gestão Coisas decidiu deixar alguns de seus desenvolvedores in-house produzir um web site com o qual seus clientes
podem encomendar objetos diretamente da web.

Para acompanhar o web site, Coisas desenvolveu uma lista de preços completa de seus objetos, incluindo fotos,
descrições e menus drop-down para o tamanho, forma, cor, cheiro, e quaisquer outras propriedades. Por exemplo,
um cliente na web poderia optar por comprar 20 do número da peça 555A Objects. Se o preço de um tal parte era
de US $ 10, o servidor web que corretamente calcular o preço das 20 partes em US $ 200. Em seguida, o cliente
pode decidir se quer ter os objetos enviados de barco, de transporte terrestre, ou enviados eletronicamente. Se o
cliente tivesse que escolher entrega barco, navegador web do cliente iria completar um formulário com parâmetros
como estes:

Clique aqui para ver a imagem de código

http://www.things.com/order.asp?custID=101&part=555A & qy = 20 & preço = 10 & navio =


barco & shipcost = 5 & Total = 205

Por enquanto, tudo bem; tudo na passagem de parâmetros parece correto. Mas este procedimento deixa a declaração
parâmetro aberto para adulteração. As coisas não devem precisar passar o preço dos itens de volta a si mesmo como um
parâmetro de entrada. Coisas, presumivelmente, sabe o quanto seus objetos de custo, e eles não são susceptíveis de
alterar drasticamente desde o tempo o preço foi citado algumas telas antes.

Não há nenhuma razão para deixar dados sensíveis sob o controle de um usuário não confiável.

Um atacante malicioso pode decidir aproveitar essa peculiaridade, fornecendo vez o seguinte URL, onde o
preço foi reduzido de US $ 205 para US $ 25:
Clique aqui para ver a imagem de código

http://www.things.com/order.asp?custID=101&part=555A & qy = 20 & preço = 1 & navio =


barco & shipcost = 5 & Total = 25

Surpresa! Funcionou. O atacante poderia ter ordenado objetos a partir de coisas em qualquer quantidade a qualquer
preço. E sim, este código foi executado no web site por um tempo antes
o problema foi detectado.

A partir de uma perspectiva de segurança, a mais séria preocupação com esta falha foi o período de tempo que poderia ter
corrido sem ser detectado. Tinha o mundo inteiro de repente fez uma corrida para web site Coisas e compraram objetos em uma
fração do seu preço real, as coisas provavelmente teria notado. Mas as coisas é grande o suficiente que ele nunca teria
detectado alguns clientes por dia escolhendo os preços que eram similares (mas menor do que) o preço real, digamos, 30 por
cento de desconto. A divisão de e-commerce teria mostrado um lucro ligeiramente menor do que outras divisões, mas a
diferença provavelmente não teria sido suficiente para levantar as sobrancelhas de ninguém; a vulnerabilidade poderia ter
passado despercebido durante anos. Felizmente, as coisas contratou um consultor para fazer uma revisão de rotina de seu
código, eo consultor rapidamente encontrou o erro.

A vulnerabilidade nesta situação é que o cliente (usuário de computador) tem acesso direto a dados confidenciais.
Um aplicativo executado no navegador do usuário mantido os detalhes da ordem, mas permitiu que o usuário altere
os detalhes à vontade. Na verdade, alguns desses valores deveria ter sido exposta na URL enviado do navegador do
cliente para o servidor. O pedido do cliente deve ter especificado o número da peça e quantidade, mas uma aplicação
do lado do servidor deveria ter retornado o preço por unidade e preço total.

Se os dados podem ser alterados, assumir que eles têm sido.

Este web falha de design programa é fácil de imaginar em outros ambientes. Aqueles de nós interessados ​em segurança
nos perguntar: Quantos problemas semelhantes estão em código em execução hoje? E como essas vulnerabilidades já pode
ser encontrada? E se encontrado, por quem?

Mediação completa

Porque o problema aqui é a mediação incompleta, a solução é a mediação completa. Lembre-se de Capítulo 2 que uma
das nossas ferramentas de segurança padrão é o controle de acesso, às vezes implementadas de acordo com o conceito
de monitor de referência. Os três propriedades de um monitor de referência são: (1) pequena e simples o suficiente para
dar confiança de acerto, (2) unbypassable, e (3) sempre invocado. Essas três propriedades se combinam para nos dar, a
mediação completa sólida.

Time-de-Check para a Time-of-Use

A terceira falha de programação que descrevem também envolve a sincronização. Para melhorar a eficiência,
processadores modernos e sistemas operacionais geralmente alterar a ordem em que são executadas instruções e
procedimentos. Em particular, as instruções que parecem ser adjacente não pode efectivamente ser executado
imediatamente após a outra, seja por causa da ordem intencionalmente alterado ou devido aos efeitos de outros
processos em execução concorrente.

Definição

O controle de acesso é uma parte fundamental da segurança informática; nós queremos ter certeza de que apenas os sujeitos
que devem acessar um objeto são permitidos esse acesso. Cada acesso solicitado deve ser regida por uma política de acesso,
indicando que é permitido o acesso ao que; em seguida, o pedido deve ser mediada por um agente acesso de políticas execução.
Mas um problema de mediação incompleta ocorre quando o acesso não é verificado universalmente. o tempo de verificação
para
tempo de uso (TOCTTOU) falha diz respeito mediação que é executada com um “bait and switch” no meio.

Entre verificação de acesso e utilização, os dados devem ser protegidos contra a mudança.

Para compreender a natureza dessa falha, considere uma pessoa de comprar uma escultura que custa US $ 100. O
comprador retira cinco $ 20 contas, cuidadosamente conta-los na frente do vendedor, e coloca-los sobre a mesa. Em
seguida, o vendedor se vira para escrever um recibo. Enquanto volta do vendedor é ligado, o comprador leva de volta
uma nota de $ 20. Quando o vendedor se vira, o comprador entrega a pilha de contas, leva o recibo, e deixa com a
escultura. Entre o momento em que a segurança foi verificado (contando as contas) eo acesso ocorreu (trocando a
escultura para as contas), uma condição mudou: Qual foi verificada não é mais válido quando o objeto (isto é, a
escultura) é acessado.

Uma situação semelhante pode ocorrer com sistemas de computação. Suponha que um pedido para acessar um arquivo foram
apresentadas como uma estrutura de dados, com o nome do arquivo e o modo de acesso apresentado na estrutura. Um exemplo de
uma tal estrutura é mostrada na A Figura 3-12 .

FIGURA 3-12 Estrutura de arquivos do Data Access

A estrutura de dados é essencialmente um bilhete de trabalho, exigindo um carimbo de autorização; uma vez autorizado, ele é
colocado em uma fila de coisas a serem feitas. Normalmente, o processo de mediador de controlo de acesso recebe a estrutura de
dados, determina se o acesso deve ser permitido, e, ou rejeita o acesso e interrompe o processamento ou permite o acesso e
envia a estrutura de dados para o processador de ficheiros de processamento.

Para realizar esta seqüência de autorização, o mediador de controle de acesso teria que procurar o nome do arquivo (e a
identidade do usuário e quaisquer outros parâmetros relevantes) em tabelas. O mediador poderia comparar os nomes da
tabela para o nome do arquivo na estrutura de dados para determinar se o acesso é apropriado. Mais provavelmente, o
mediador deve copiar o nome do arquivo em sua própria área de armazenamento local e comparar a partir de lá. Comparando
a partir da cópia deixa a estrutura de dados na área do usuário, sob o controle do usuário.

Neste ponto a falha mediação incompleta pode ser explorada. Enquanto o mediador está verificando direitos de
acesso para o my_file arquivo, o usuário pode alterar o descritor de nome de arquivo para your_file, o valor mostrado
na A Figura 3-13 . Depois de ler o bilhete trabalho uma vez, o mediador não seria de esperar para reler o bilhete antes
de o aprovar; o mediador iria aprovar o acesso e enviar o descritor agora modificado para o manipulador de arquivo.
FIGURA 3-13 Mudança desmarcada para descritor de Trabalho

O problema é chamado de time-of-seleção para falha de tempo de uso porque explora o atraso entre as duas
ações: verificar e usar. Ou seja, entre o momento do acesso foi marcada eo tempo foi utilizado o resultado da
verificação, uma mudança ocorreu, invalidando o resultado da verificação.

Implicação de segurança

A implicação de segurança aqui é clara: Verificando uma ação e realizando outra é um exemplo de controle de acesso ineficaz,
levando à insuficiência confidencialidade ou falta de integridade ou ambos. Devemos ter cuidado sempre que um intervalo de tempo
ou perda de controle ocorre, certificando-se de que não há nenhuma maneira de corromper os resultados da verificação durante esse
intervalo.

contramedidas

Felizmente, existem maneiras de prevenir a exploração do intervalo de tempo, mais uma vez dependendo
da nossa ferramenta de segurança, controle de acesso. Os parâmetros críticos não estão expostos durante
qualquer perda de controle. O software de acesso de verificação deve possuir os dados da solicitação até que
a ação solicitada seja concluída. Outra técnica de protecção é a de garantir a integridade de série, ou seja,
para permitir que nenhuma interrupção (perda de controlo) durante a validação. Ou a rotina de validação
inicialmente pode copiar dados a partir do espaço do usuário para a sua rotina área-out do usuário alcance e
executar verificações de validação na cópia. Finalmente, a rotina de validação pode selar os dados de pedido
para detectar a modificação. Realmente, todos esses métodos de proteção são expansões no critério
inviolável para um monitor de referência:

Indocumentados Ponto de Acesso

Em seguida, descrevem uma situação de programação comum. Durante o desenvolvimento do programa e testes, o
programador precisa de uma forma para acessar os internos de um módulo. Talvez um resultado não está sendo calculado
corretamente para que o programador quer uma maneira de interrogar os valores de dados durante a execução. Talvez o fluxo de
controlo não está procedendo como deveria e o programador precisa para alimentar os valores de ensaio em uma rotina. Pode ser
que o programador quer um modo de depuração especial para testar condições. Por alguma razão o programador cria um ponto de
entrada ou modo de execução em situação irregular.

Estas situações são compreensíveis durante o desenvolvimento do programa. Às vezes, porém, o programador
esquece de remover esses pontos de entrada quando o programa se move de desenvolvimento de produto. Ou o
programador decide deixá-los em facilitar programa
manutenção mais tarde; o programador pode acreditar que ninguém vai encontrar a entrada especial. Os programadores podem
ser ingênuo, porque se há um buraco, é provável que alguém encontrá-lo. Vejo
Sidebar 3-4 para uma descrição de um backdoor especialmente complicado.

Sidebar 3-4 Oh Look: O coelhinho da Páscoa!

programa de planilhas Excel, da Microsoft, em uma versão antiga, Excel 97, teve o seguinte recurso.

• Abra uma nova planilha


• Pressione F5

• Tipo X97: L97 e pressione Enter


• Pressione Tab

• Segure <Ctrl-Shift> e clique em Assistente de gráfico

Um usuário que fez isso de repente descobriu que a planilha desapareceu ea tela cheia com a
imagem de um cockpit de avião! Usando as teclas de seta, o usuário pode pilotar um avião simulado
através do espaço. Com mais algumas teclas digitadas tela do usuário parecia seguir por um corredor
com painéis nas laterais, e sobre os painéis foram inscritos os nomes dos desenvolvedores do que
versão do Excel.

uma peça de código é chamado de Ovos de pascoa, para os ovos de doces de chocolate recheados com
brinquedos para as crianças. Este não é o único produto com um ovo de Páscoa. Uma versão antiga do Internet
Explorer tinha algo semelhante, e outros exemplos podem ser encontrados com uma pesquisa na Internet. Embora a
maioria dos ovos de Páscoa não parecem ser prejudiciais, eles levantam uma pergunta séria: Se tal funcionalidade
complexa pode ser incorporado em produtos de software comerciais sem ser parado por um grupo de controle de
qualidade de uma empresa, há outros buracos, potencialmente com vulnerabilidades de segurança?

Porta dos fundos

Um ponto de acesso sem documentos é chamado de Porta dos fundos ou alçapão. Tal entrada pode transferir o controle para
qualquer ponto com quaisquer privilégios ao programador queria.

Poucas coisas permanecerão secretas na web por muito tempo; alguém encontra uma abertura e explora-lo. Assim, a codificação de um
ponto de entrada supostamente secreto é uma abertura para os visitantes sem aviso prévio.

backdoors secretos são eventualmente encontrados. A segurança não pode depender de tal segredo.

Outro exemplo de backdoors é utilizado uma vez que um intruso tem comprometido uma máquina. Em muitos casos,
um intruso que obtém acesso a uma máquina quer voltar mais tarde, seja para estender o ataque por um máquina ou
para utilizar o equipamento como um ponto de partida para ataques contra outras máquinas em que a primeira máquina
tem acesso. Às vezes, a primeira máquina tem acesso privilegiado a outras máquinas assim o intruso pode obter direitos
reforçada ao explorar capacidades sobre estas novas máquinas. Para facilitar o retorno, o atacante pode criar uma nova
conta na máquina comprometida, com um nome de usuário e senha que só o atacante sabe.
Proteção contra a entrada não autorizada

pontos de entrada indocumentados são uma prática de programação pobre (mas eles ainda serão utilizados). Eles devem ser
encontrados durante revisões de código rigorosos em um processo de desenvolvimento de software. Infelizmente, dois fatores
trabalham contra esse ideal.

Em primeiro lugar, estar em situação irregular, estes pontos de entrada não serão claramente identificados no código-fonte ou qualquer
um dos documentos de desenvolvimento. Assim, revisores de código pode deixar de reconhecê-los durante a revisão.

Em segundo lugar, essas backdoors são muitas vezes adicionados após o desenvolvimento de código comum, durante os
testes ou mesmo de manutenção, por isso mesmo o escrutínio de revisores qualificados não vai encontrá-los. Manutenção
pessoas que adicionar esse código raramente são engenheiros de segurança, para que eles não estão acostumados a
pensar de vulnerabilidades e modos de falha. Por exemplo, conforme relatado pelo escritor de segurança Brian Krebs em seu
blog Krebs sobre Segurança, 24 de janeiro de 2013, o pesquisador de segurança Stefan Viehbock da SEC Consult
Vulnerability Labs em Viena, Áustria, mostram que alguns produtos da Barracuda Networks (fabricante de firewalls e outros
dispositivos de rede) aceite logins remotos (rede) de nome de usuário “produto” e nenhuma senha. O engenheiro que inserido
o backdoor provavelmente pensou que a atividade foi protegido por restringir o intervalo de endereços a partir do qual os
logins seria aceito: somente logins do intervalo de endereços atribuídos a Barracuda teria sucesso. No entanto, o engenheiro
não considerou (e um bom engenheiro de segurança teria pego) que o intervalo especificado também incluiu centenas de
outras empresas.

Assim, impedir ou bloquear esses portais vulneráveis ​é difícil, especialmente porque as pessoas que os escrevem
não podem apreciar as suas implicações de segurança.

Off-by-One erro
Quando aprender a programar, neófitos podem facilmente falhar com a off-por-um erro:
miscalculating o estado para terminar um ciclo (repetir enquanto i <= n ou i <n? repetir até que i = n ou i> n?) ou com vista para
que uma matriz de uma [0] a uma [n] contém n + 1 elementos .

Normalmente o programador é a culpa por não pensar corretamente sobre quando um loop deve parar. Outras vezes o
problema está se fundindo dados reais com os dados de controle (às vezes chamados metadados ou dados sobre os dados).
Por exemplo, um programa pode gerenciar uma lista que aumenta e diminui. Pense em uma lista de problemas não resolvidos
em um departamento de atendimento ao cliente: Hoje existem cinco questões abertas, numerados 10, 47, 38, 82 e 55; durante
o dia, assuntos 82 é resolvido, mas emite 93 e 64 são adicionados à lista. Um programador pode criar uma estrutura de dados
simples, um array, para manter esses números de emissão e pode razoavelmente não especificar mais de 100 números. Mas
para ajudar com a gestão dos números, o programador também pode reservar a primeira posição na matriz para a contagem de
questões abertas. Assim, no primeiro caso, a matriz contém realmente seis elementos, 5 (a), da contagem 10, 47, 38, 82, e 55;
e no segundo caso, existem sete, 6, 10, 47, 38, 93, 55, 64, como mostrado na Figura 3- 14 . Um conjunto de 100 elementos
claramente não vai realizar 100 itens de dados além de uma contagem.
FIGURA 3-14 Ambos dados e número de células utilizadas em um Array

Neste exemplo simples, o programa pode funcionar corretamente por um longo tempo, desde que não mais do que 99
questões são abertas a qualquer momento, mas acrescentando a questão 100 fará com que o programa falha. Um problema
semelhante ocorre quando um procedimento edita ou reformata entrada, talvez mudando a seqüência de um personagem em dois
ou mais caracteres (como por exemplo, quando o símbolo de um carácter reticências “...” disponível em algumas fontes é
convertido por um processador de texto em três períodos sucessivos para contabilizar mais fontes limitadas.) Estas alterações
inesperadas em tamanho pode causar dados alterados para já não se enquadram no espaço em que foi originalmente
armazenado. Pior, o erro será parecem ser esporádicos, que ocorre somente quando a quantidade de dados excede o tamanho
do espaço alocado.

Infelizmente, o único controle contra esses erros é a programação correta: sempre que fará para garantir que um recipiente é
grande o suficiente para a quantidade de dados que é conter.

integer Overflow
Um estouro de inteiro é um tipo peculiar de transbordo, em que o seu resultado é um pouco diferente da dos
outros tipos de excessos. A integer overflow ocorre porque um local de armazenamento é de tamanho fixo, finito e,
por conseguinte, podem conter apenas números inteiros até um certo limite. O transbordamento depende do facto
dos valores de dados são assinados (ou seja, se um bit reservado para indicar se o número é positivo ou negativo). tabela
3-1
dá o intervalo de valores assinados e não assinados para vários localização de memória tamanhos (Word).

TABELA 3-1 Range Value pela Palavra Tamanho


Quando um cálculo faz com que um valor superior a um dos limites em tabela 3-1 , o Extra
Os dados não derramar sobre a afetar itens de dados adjacentes. Isso porque a aritmética é realizada num registo do processador
de hardware, não na memória. Em vez disso, seja uma exceção de programa de hardware ou condição de falha é sinalizada, o que
provoca a transferência para uma rotina de tratamento de erros, ou os dígitos excesso na extremidade mais significativo do item de
dados são perdidas. Assim, com números inteiros sem sinal de 8 bits, 255 + 1 = 0. Se um programa usa um número inteiro sem sinal
de 8 bits para um contador de ciclos e a condição de paragem para o circuito de contagem é = 256, então a condição nunca será
verdadeiro.

Verificando para este tipo de estouro é difícil, porque só quando um resultado transborda o programa pode
determinar um estouro ocorre. Usando valores de 8 bits sem sinal, por exemplo, um programa pode determinar
que o primeiro operando a 147 e, em seguida, verificar se a segunda foi maior do que 108. Tal teste requer
trabalho duplo: Primeiro determinar o segundo operando máximo que será na faixa e em seguida, calcular a
soma. Alguns compiladores gerar código para testar um estouro inteiro e gerar uma exceção.

String terminada em null Unterminated

cadeias longas são a fonte de muitos estouros de buffer. Às vezes um atacante alimenta intencionalmente uma string
muito longo em um programa de processamento para ver se e como o programa irá falhar, como aconteceu com o programa
Dialer. Outras vezes a vulnerabilidade tem uma causa acidental: Um programa erroneamente substitui parte de uma cadeia,
fazendo com que a corda deve ser interpretada como mais do que realmente é. Como estes erros ocorrem realmente
depende de como as cordas são armazenados, o que é uma função da linguagem de programação, programa de aplicação e
sistema operacional envolvido.

caracteres de comprimento variável (texto) As cordas são delimitados de três maneiras, como mostrado na A Figura 3-15 . A
maneira mais fácil, usado por Basic e Java, é alocar espaço para o comprimento da corda máxima declarada e armazenar o
comprimento atual em uma tabela separada a partir de dados da corda, como mostra a A Figura 3-15 (uma).

FIGURA 3-15 Representações de corda de comprimento variável

Alguns sistemas e linguagens, particularmente Pascal, preceder uma string com um número inteiro que indica o
comprimento da corda, como mostra a A Figura 3-15 (B). Nesta representação, a string “Olá” seria representado como
0x0548656c6c6f porque 0x48, 0x65, 0x6c e 0x6F são
a representação interna dos caracteres “H”, “e”, “L”, e “O”, respectivamente. O comprimento da cadeia é o primeiro byte, 0x05.
Com esta representação, sobrecargas de buffer cadeia são raros porque o programa de processamento recebe o primeiro
comprimento e pode verificar que existe um espaço adequado para a cadeia. (Esta representação é vulnerável ao problema que
descrito anteriormente de não incluir o elemento comprimento ao planejar espaço para uma string.) Mesmo que o campo de
comprimento é substituído acidentalmente, a aplicação lendo a corda vai ler apenas como muitos personagens como escrito no
campo de comprimento. Mas o limite para o comprimento de uma corda torna-se assim o número máximo que vai caber no
campo de comprimento, que pode chegar a 255 para um comprimento de 1 byte e 65.535 para um comprimento de 2 bytes.

O último modo de representar uma corda, normalmente usado em C, é chamado terminada nula,
o que significa que o fim da cadeia é denotada por um byte nulo, ou 0x00, como mostrado na Figura 3- 15 (C). Dessa
forma, a string “Olá” seria 0x48656c6c6f00. Representando cadeias desta maneira pode conduzir a sobrecarga de
memória, porque o programa de processamento determina o fim da cadeia, e, portanto, o seu comprimento, depois de
ter recebido a cadeia completa. Este formato é propenso a erros de interpretação. Suponha que um processo errôneo
acontece para substituir o fim da cadeia e seu caráter nulo de terminação; nesse caso, a aplicação de ler o texto irá
continuar a ler memória até que um byte nulo acontece a aparecer (de algum outro valor de dados), a qualquer distância
para além do final da string. Assim, a aplicação pode ler 1, 100 a 100,000 bytes extra ou mais até que encontra um nulo.

O problema da sobrecarga da memória intermédia surge em computação, como bem. Funções para mover e copiar uma cadeia pode
causar transbordamentos na pilha ou pilha como parâmetros são passados ​para estas funções.

Parâmetro tamanho, o tipo e número de

Uma outra fonte de erros de comprimento de dados é parâmetros de procedimento, a partir da web ou aplicações convencionais.
Entre as fontes de problemas são estes:

• Muitos parâmetros. Embora uma aplicação recebe apenas três parâmetros de entrada, por exemplo, que a
aplicação pode escrever incorrectamente quatro parâmetros de resultado de saída através da utilização dos
dados dispersos adjacentes aos parâmetros passados ​legítimos no quadro da pilha ligando. (O problema
oposto, mais entradas do que o aplicativo espera, é menos de um problema, porque as saídas dos chamados
das aplicações vai ficar dentro do espaço alocado do chamador.)

• Tipo de saída errada ou tamanho. A vocação e chamado procedimento precisa concordar com o tipo e tamanho de
valores de dados trocados. Se o chamador fornece espaço para um número inteiro de dois bytes, mas a rotina chamada
produz um resultado de quatro bytes, esses extra de dois bytes vão para outro. Ou um chamador pode esperar um
resultado data como um número de dias após 1 de Janeiro 1970, mas o resultado produzido é uma string no formato “DD
mmm-aaaa”.

• Too-longa seqüência. Um procedimento pode receber como entrada uma cadeia mais longa do que ela pode
segurar, ou pode produzir uma muito longa cadeia de saída, cada um dos quais irá também provocar uma condição de
sobrecarga.

Procedimentos têm, frequentemente, ou alocar espaço temporário em que para manipular parâmetros, então espaço temporário
tem que ser grande o suficiente para conter o valor do parâmetro. Se o parâmetro que está sendo passada é uma string terminada
em nulo, o procedimento não pode saber quanto tempo
a cadeia será até encontrar o nulo de fuga, de modo uma muito longa cadeia irá esgotar a memória intermédia.

Utilitário inseguro
As linguagens de programação, especialmente C, fornecer uma biblioteca de rotinas de utilidade para ajudar
com atividades comuns, como cadeias de mover e copiar. Em C, a função strcpy (dest, src) Copia uma cadeia de src para dest,
parar em um nulo, com o potencial de superação memória alocada. Uma função mais seguro é strncpy (dest, src, max), que
cópias até o delimitador ou nulo max caracteres, o que ocorrer primeiro.

Embora existam outras fontes de problemas de estouro, a partir destas descrições você pode ver facilmente por que tantos
problemas com estouros de buffer ocorrem. Em seguida, descrevemos várias façanhas clássicas e significativas que tiveram
um buffer overflow como uma causa contribuinte significativo. A partir destes exemplos você pode ver a quantidade de dano
que uma falha de programa aparentemente insignificante pode produzir.

Condição de corrida

Como o nome indica, uma condição de corrida significa que dois processos estão competindo no mesmo intervalo de tempo,
e a raça afeta a integridade ou exactidão das tarefas de computação. Por exemplo, dois dispositivos podem apresentar pedidos
concorrentes para o sistema operacional para um determinado pedaço de memória ao mesmo tempo. No processo de
solicitação de duas etapas, cada dispositivo pergunta primeiro se o pedaço tamanho está disponível, e se a resposta for sim,
então reserva-se esse pedaço para si. Dependendo do tempo dos passos, o primeiro dispositivo poderia pedir o pedaço, obter
uma resposta “sim”, mas depois não obter o pedaço porque já foi atribuído para o segundo dispositivo. Em casos como este, a
dois solicitantes de “raça” para obter um recurso. Uma condição de corrida ocorre mais freqüentemente em um sistema
operacional, mas também pode ocorrer em processos de vários segmentos ou cooperantes.

Atividade Unsynchronized

Em um condição de corrida ou falha de serialização dois processos executar concorrentemente, e o resultado do


cálculo depende da ordem na qual as instruções dos processos de executar.

condição de corrida: situação em que o comportamento do programa depende da ordem em que os


dois procedimentos executar

Imagine um sistema de reservas da companhia aérea. Cada um dos dois agentes, A e B, simultaneamente, tenta reservar um
assento para um passageiro no vôo 45 em 10 de janeiro, para o qual não é exatamente um assento disponível. Se agente Uma
completa a reserva antes que para B começa, A recebe o assento e B é informado de que há lugares disponíveis. Em A Figura 3-16 vamos
mostrar um cronograma para esta situação.
FIGURA 3-16 Solicitação de assento e Exemplo Reservation

No entanto, você pode imaginar uma situação em que uma pergunta se um assento estiver disponível, é dito sim, e
prossegue para completar a compra desse assento. Enquanto isso, entre o tempo A pergunta e tenta completar a compra,
agente B pergunta se um assento estiver disponível. Os projetistas de sistemas sabia que, por vezes, agentes perguntar sobre
assentos mas nunca completar a reserva; seus clientes costumam escolher itinerários diferentes, uma vez que explorar as
suas opções. Para referência futura, no entanto, o software de reserva dá a cada agente de um número de referência para
tornar mais fácil para o servidor para associar uma reserva com um vôo particular. Porque A não completou a transação antes
que o sistema recebe um pedido do B, o sistema informa B que o assento está disponível. Se o sistema não é projetado
adequadamente, ambos os agentes podem concluir suas transações, e dois passageiros será confirmado para que um banco
(que vai ser desconfortável, para dizer o mínimo). Mostramos esse cronograma em A Figura 3-17 .
FIGURA 3-17 overbooking Exemplo

Uma condição de corrida é difícil de detectar porque ela depende da ordem em que os dois processos executar. Mas a
ordem de execução dos processos pode depender de muitas outras coisas, tais como a carga total no sistema, a quantidade
de espaço de memória disponível, a prioridade de cada processo, ou o número e tempo de sistema interrompe aos processos.
Durante o teste, e até mesmo por um longo período de execução, as condições podem não causar esta condição de
sobrecarga especial para ocorrer. Tendo em conta estas dificuldades, os programadores podem ter casos de teste de
problemas elaboração para todas as possíveis condições em que as raças podem ocorrer. Na verdade, o problema pode
ocorrer com dois programas independentes que acontecem para acessar determinados recursos compartilhados, algo que os
programadores de cada programa nunca imaginou.

A maioria dos computadores de hoje são configurados com aplicações selecionadas por seus proprietários, adaptados
especificamente para atividades e necessidades do proprietário. Estas aplicações, bem como os drivers do sistema operacional e do
dispositivo, são susceptíveis de ser produzidos por fornecedores diferentes, com diferentes estratégias de design, filosofias de
desenvolvimento e protocolos de teste. A probabilidade de uma condição de corrida aumenta com esta heterogeneidade crescente do
sistema.

Implicação de segurança

A implicação de condições de corrida segurança é evidente a partir do exemplo de reservas aéreas. Uma condição de
concorrência entre dois processos podem causar inconsistente, indesejável e, portanto, erradamente, resultados-uma falha de
integridade.

Uma condição de corrida também levantou outra questão de segurança quando ele ocorreu em uma versão antiga do
programa Tripwire. Tripwire é um utilitário para preservar a integridade dos arquivos, introduzido em Capítulo 2 . Como parte de sua
operação cria um arquivo temporário para que ele grava um registro de sua atividade. Na versão antiga, Tripwire (1) escolheu um
nome para o arquivo temporário, (2) verificou o sistema de arquivos para garantir que nenhum arquivo com esse nome já existia,
(3) criou um arquivo com esse nome, e (4) mais tarde abriu o arquivo e escreveu resultados. Wheeler [ WHE04 ] Descreve como
um processo malicioso pode subverter passos do Tripwire, alterando o arquivo temporário recém-criado para um ponteiro para
qualquer outro arquivo de sistema do processo quer Tripwire para destruir sobrescrevendo.

Neste exemplo, a implicação de segurança é clara: Qualquer ficheiro pode ser comprometida por uma utilização cuidadosamente
programada da condição de corrida inerente entre os passos 2 e 3, como mostrado na
A Figura 3-18 . Sobrescrever um arquivo pode parecer um pouco fútil ou auto-destrutivo, mas um atacante ganha um benefício
forte. Suponha, por exemplo, o atacante quer esconder que outros processos estavam ativos quando um ataque ocorrido (assim
que um analista de segurança não vai saber o programa causou o ataque). Um grande presente para o atacante é o de permitir
que um programa utilitário inocente, mas privilegiada para obliterar o arquivo de log do sistema de ativações de processo.
Normalmente, esse arquivo está bem protegido pelo sistema, mas, neste caso, tudo o atacante tem a fazer é apontar para ele e
deixe o programa Tripwire fazer o trabalho sujo.
FIGURA 3-18 Nome do Arquivo de Condição Race

condições de corrida depende da ordem eo tempo de dois processos diferentes, tornando


estes erros difíceis de encontrar (e de teste para).

Se o programador malicioso age cedo demais, nenhum arquivo temporário ainda não foi criado, e se o programador age
muito tarde, o arquivo foi criado e já está em uso. Mas se tempo do programador é entre muito cedo e muito tarde, Tripwire
irá inocentemente escrever seus dados temporário sobre qualquer arquivo que está apontado para. Embora este tempo
pode parecer ser uma restrição séria, o atacante tem uma vantagem: Se o atacante é muito cedo, o atacante pode tentar
novamente e novamente até que o ataque for bem sucedido ou seja tarde demais.

Assim, as condições de corrida podem ser difíceis de detectar; testadores são desafiados a criar exatamente as condições
necessárias de carga do sistema e timing. Pela mesma razão, as ameaças de condição de corrida são difíceis para o atacante para
executar. No entanto, se existem vulnerabilidades de condição de corrida, eles também podem ser exploradas.

As vulnerabilidades temos apresentado mediação aqui-incompletas, condições de corrida, hora do cheque


ao tempo de uso e de acesso indocumentados pontos-são falhas que podem ser exploradas para causar uma
falha de segurança. Ao longo deste livro, descrevemos outras fontes de falhas porque os programadores têm
muitos pontos do processo de exploração e oportunidades para criar falhas do programa. A maioria dessas
falhas pode ter sido criado porque o programador não conseguiu pensar claramente e cuidadosamente: erros
humanos simples. Ocasionalmente, no entanto, o programador maliciosamente plantada uma falha intencional.
Ou, mais provavelmente, o assaltante encontrou um desses erros de programa inocentes e explorados-lo para
fins maliciosos. Nas descrições de falhas do programa temos apontado como um invasor pode capitalizar sobre
o erro.

3.2 Malicious Code-Malware


Em maio de 2010, o pesquisador Roger Thompson da empresa de antivírus AVG detectou código malicioso no site
do US Bureau of Engraving and Printing, uma parte do Departamento do Tesouro [ Mcm10 ]. O site tem duas seções
particularmente populares: uma descrição do desenho do recém-redesenhado US $ 100 bill e um conjunto de medidas
para a identificação de moeda falsa.

O web site alterada continha uma chamada escondida para um site na Ucrânia, que, em seguida,
tentou explorar vulnerabilidades conhecidas no web site para apresentar códigos maliciosos nas máquinas dos
usuários desavisados. Os visitantes do site iria baixar imagens e texto, como esperado; o que os visitantes não podia
ver, e provavelmente não esperava, era que eles também baixaram um script de código web adicional que invocado
código no local ucraniana.

A fonte do exploit é desconhecido; alguns pesquisadores acham que foi deslizado em ferramenta de acompanhamento do
site que registra e exibe o número de visitas a uma página web. Outros pesquisadores acreditam que foi introduzida em uma
falha de configuração da empresa atuando como provedor de web site do Departamento do Tesouro.

Duas características deste ataque são significativas. Primeiro, sites do governo dos Estados Unidos raramente são propagadores
involuntárias de ataques de códigos porque os administradores defender firmemente os locais e torná-los resistentes aos atacantes.
Mas precisamente essas características tornam os usuários mais dispostos a confiar nesses sites para ser livre de códigos maliciosos,
para que os usuários facilmente abrir suas janelas e descarregue seu conteúdo, o que torna esses sites atraentes para os atacantes.

Em segundo lugar, este ataque parece ter usado o kit de ferramentas ataque Eleonore [ FIS10 ]. O kit é um pacote de
ataques contra vulnerabilidades conhecidas, alguns de tanto tempo atrás em 2005, combinadas em um pacote pronto-to-run.
Uma espécie de “clique e executar” aplicação, o kit $ 2000 tem sido em torno de diferentes versões desde 2009. Cada kit
vendido é pré-configurado para uso contra apenas um endereço web site (embora os clientes podem comprar endereços
adicionais), de modo que o invasor que comprou o kit destina-se a enviar o ataque especificamente através do site da
Fazenda, talvez por causa da sua elevada credibilidade com os utilizadores.

Como os ataques de códigos maliciosos vão, este não era o mais sofisticado, complicado, ou devastador, mas
ilustra várias características importantes que explorar ao analisarmos o código malicioso, o tema deste capítulo.
Descrevemos também alguns outros ataques de códigos maliciosos que tiveram um impacto muito mais grave.

código malicioso vem em muitas formas sob muitos nomes. Neste capítulo vamos explorar três das formas mais
populares: vírus, cavalos de Tróia e worms. As distinções entre eles são pequenos, e nós não precisamos de classificar
qualquer pedaço de código com precisão. Mais importante é aprender sobre a natureza dos ataques a partir destes três:
como eles podem se espalhar, que mal eles podem causar, e como eles podem ser controlados. Podemos, então, aplicar
esse conhecimento para outros tipos de códigos maliciosos, incluindo as formas de código que ainda não têm nomes
populares.

Malware-vírus, Cavalos de Tróia, Worms e código malicioso ou programas maliciosos ou malware ( abreviação de
software malicioso) é o nome genérico para programas ou partes de programas plantadas por um agente com intenção
maliciosa para causar efeitos inesperados ou indesejáveis. O agente é escritor ou distribuidor do programa. intenção
maliciosa distingue este tipo de código de erros não intencionais, apesar de ambos os tipos podem certamente ter efeitos
negativos semelhantes e graves. Esta definição também exclui coincidência, no qual pequenas falhas em dois programas
benignos combinam para um efeito negativo. A maioria das falhas encontradas nas inspeções de software, as análises e os
testes não se qualificam como códigos maliciosos; sua causa é geralmente não intencional. No entanto, as falhas não
intencionais podem de fato invocar as mesmas respostas como maldade intencional; uma causa benigna ainda pode levar a
um efeito desastroso.
código malicioso pode ser dirigida a um usuário específico ou classe de usuários, ou pode ser para
qualquer um.

Você pode ter sido afetados por malware em um momento ou outro, ou porque o seu computador foi infectado ou
porque você não pôde acessar um sistema infectado enquanto seus administradores foram limpar a bagunça causada
pela infecção. O malware pode ter sido causado por um worm ou um vírus ou não; a metáfora infecção muitas vezes
parece apt, mas a terminologia de código malicioso é por vezes usado de forma imprecisa. Aqui podemos distinguir
nomes aplicados a certos tipos de malware, mas você deve se concentrar em métodos e impactos, em vez de nomes.
Isso que nós chamamos um vírus por qualquer outro nome que cheiram tão vil.

UMA vírus é um programa que pode replicar-se e passar o código malicioso para outros programas nonmalicious
modificando-os. O termo “vírus” foi cunhado porque o programa afetado age como um vírus biológico: Ele infecta outros
indivíduos saudáveis, anexando-se ao programa e quer destruir o programa ou coexistindo com ele. Como os vírus são
insidiosos, não podemos assumir que um programa de limpeza de ontem ainda está limpo hoje. Além disso, um bom
programa pode ser modificado para incluir uma cópia do programa de vírus, de modo que o bom programa infectado em si
começa a agir como um vírus, infectando outros programas. A infecção geralmente espalha a uma taxa geométrico,
eventualmente, a ultrapassagem de um sistema de computação inteiro e espalhando-se para outros sistemas conectados.

Vírus: código com fins maliciosos; destina-se a se espalhar

Um vírus pode ser transitória ou residente. UMA vírus transitória tem um tempo de vida que depende a vida de seu
hospedeiro; o vírus é executado quando o programa para o qual ele está ligado é executado, e que termina quando o programa
anexado termina. (Durante a sua execução, o vírus transitória pode se espalhar sua infecção para outros programas.) A vírus
residente localiza-se na memória; ele pode então permanecer activo ou ser activado como um programa independente, mesmo
após a sua unido programa termina.

Os termos worms e vírus são muitas vezes usados ​como sinônimos, mas eles realmente se referem a coisas diferentes.
UMA Minhoca é um programa que se espalha cópias de si mesmo através de uma rede. (John Shoch e Jon Hupp [ SHO82 ]
São, aparentemente, o primeiro a descrever um verme, que, curiosamente, foi criado para fins nonmalicious. Pesquisadores do
Centro de Pesquisa da Xerox em Palo Alto, Shoch e Hupp escreveu o primeiro programa como uma experiência de
computação distribuída.) A principal diferença entre um verme e um vírus é que um verme opera através de redes, e um vírus
pode se espalhar através de qualquer meio ( mas geralmente usa um programa copiado ou arquivos de dados). Além disso, o
worm se espalha cópias de si mesmo como um programa stand-alone, enquanto que o vírus se espalha cópias de si mesmo
como um programa que atribui ou embute em outros programas.

Worm: programa que se espalha cópias de si mesmo através de uma rede

Espalhando cópias de si mesmo parece chato e talvez narcisista. Mas vermes têm um propósito comum, útil. Quão
grande é a Internet? O que os endereços estão em uso? programas Worm, às vezes chamados de “crawlers” procurar
máquinas em que eles podem instalar pequenos pedaços de código para reunir esses dados. Os itens código de relatório de
volta aos pontos de coleta, dizendo
o que a conectividade que encontraram. Como descrevemos em Capítulo 6 , Este tipo de reconhecimento também
pode ter um efeito negativo de segurança; os vermes que viajam e coletam dados não têm que ser mau.

Como um exemplo ligeiramente diferente deste tipo de verme, considere como os motores de busca saber sobre todas as páginas na
web. UMA robô ( abreviação de robot), é uma espécie de verme utilizado em grande número pelos anfitriões do motor de busca como o
Bing e Google. Exércitos destes agentes são executados em qualquer computador em que eles podem se instalar. Sua finalidade é fazer a
varredura de conteúdo web acessível continuamente e apresentar um relatório ao seu controlador de qualquer novo conteúdo que
encontraram. Desta forma, os agentes encontrar páginas que seus controladores, em seguida, catálogo, permitindo que os motores de
busca para retornar estes resultados em resposta às consultas dos indivíduos. Assim, quando você postar uma nova página web (ou
modificar um velho) com os resultados de sua pesquisa sobre por que as pessoas como manteiga de amendoim, um rastreador logo
percebe essa página e informa seu controlador dos conteúdos e paradeiro de sua nova página.

UMA cavalo de Tróia é um código malicioso que, para além do seu efeito primário, tem um segundo efeito, não óbvia,
mal-intencionados. O nome é derivado de uma referência à guerra de Tróia. Legends dizer como os gregos enganaram os
troianos, deixando um grande cavalo de madeira fora muralha defensiva dos Trojans'. Os troianos, pensando o cavalo um
presente, levou-o para dentro e deu-lhe um lugar de destaque. Mas desconhecido para os troianos ingênuos, o cavalo de
madeira foi preenchido com o mais bravo dos soldados gregos. Durante a noite, os soldados gregos desceu do cavalo, abriram
os portões, e sinalizou suas tropas que a forma como foi agora claro para capturar Troy. Da mesma forma, malware cavalo de
Tróia desliza dentro de um programa sem ser detectado e produz efeitos indesejáveis ​mais tarde.

Como exemplo de um cavalo computador Trojan, considere um script de login que solicita a identificação do usuário e
senha, passa as informações de identificação para o resto do sistema de processamento de login, mas também mantém uma
cópia das informações para mais tarde, o uso malicioso. Neste exemplo, o usuário vê apenas o login ocorrendo como
esperado, então não há nenhuma razão para suspeitar que qualquer outra, a ação indesejada ocorreu.

Cavalo de Tróia: programa com efeito aparente benigna, mas em segundo lugar, escondido, efeito malicioso

Para lembrar as diferenças entre estes três tipos de malware, entender que um cavalo de Tróia está na superfície de um
programa útil com indocumentados recursos extras, (maliciosas). Isso não significa necessariamente tentar propagar. Por outro
lado, um vírus é um programa malicioso que tenta se espalhar para outros computadores, bem como, talvez, que executa uma
ação desagradável em seu host atual. O vírus não necessariamente espalhar usando as propriedades de uma rede; que pode
ser transmitida não por viajar em um documento transferido por um dispositivo portátil (ater de que a memória que você acabou
de inserir em seu laptop!) ou desencadeada a se espalhar para outros, tipos de arquivos semelhantes quando um arquivo é
aberto. No entanto, um worm requer uma rede para suas tentativas de se espalhar em outros lugares.

Além desta terminologia básica, há muita semelhança na tipos de código malicioso. Muitos outros tipos de códigos
maliciosos são mostrados na Tabela 3-2 . Como você pode ver, os tipos de malware são muito diferentes em sua
operação, transmissão, e objetiva. Qualquer um destes termos é usada popularmente para descrever malware, e você vai
encontrar imprecisa e sobreposição
definições. Na verdade, as pessoas às vezes usam vírus como um termo geral conveniente para códigos maliciosos.
Mais uma vez, vamos lembrá-lo que a nomenclatura não é crítico; impacto e efeito são. Lutando sobre se algo é um
vírus ou worm é irrelevante; em vez disso, nos concentramos em entender os mecanismos pelos quais o malware
perpetra seu mal.

TABELA 3-2 Tipos de código malicioso

Neste capítulo vamos explorar vírus em particular, porque a sua capacidade de se replicar e causar danos nos dá uma visão
sobre dois aspectos do código malicioso. Durante todo o resto deste capítulo, também pode usar o termo geral malwares para
qualquer tipo de código malicioso. Você deve reconhecer que, embora nós estamos interessados ​principalmente nos aspectos
maliciosos destas formas de código para que possamos reconhecer e lidar com elas, nem todas as atividades listadas aqui são
sempre mal-intencionados.

Todo mês a empresa de segurança Kaspersky relata os 20 principais infecções detectadas nos computadores dos
usuários por seus produtos. (Vejo http://www.securelist.com/en/analysis .) Em abril
2014, por exemplo, havia oito ataques de adware (anúncios que oferecem programas inúteis ou mal-intencionados para
venda), e nove cavalos de Tróia ou transmissores de cavalo de Tróia no top 20, e dois explorar ataques de script, que
também descrevem neste capítulo. Mas o tipo de ataque superior, compreendendo 81,73 por cento dos ataques, foi URLs
maliciosos, descritos no próximo capítulo. A medida diferente conta o número de pedaços de código malicioso produtos da
Kaspersky
encontrados em computadores protegidos (isto é, o malware não está bloqueado por e-mail e atividade de Internet telas do
Kaspersky). Entre os 20 principais tipos de malware foram cinco cavalos de Tróia, um transmissor cavalo de Tróia, oito
variedades de adware, dois vírus, dois worms e um ataque JavaScript. Assim, todos os tipos de ataque são importantes, e,
como Sidebar 3-5 ilustra, códigos maliciosos em geral tem um impacto significativo sobre computação.

Sidebar 3-5 The Real Impacto de Malware


Medir o impacto real de malware, especialmente em termos financeiros, é difícil se não impossível.
Organizações são relutantes em denunciar violações exceto quando exigido por lei, por medo de danos à
reputação, rating de crédito, e muito mais. Muitas pesquisas denunciar o número de incidentes, impacto
financeiro e tipos de ataques, mas em geral eles são pesquisas de conveniência que não necessariamente
representam a situação real. Shari Lawrence Pfleeger [ PFL08 ], Rachel Rue [ RUE09 ], E Ian Cozinhe [ COO10 ]
Descrevem mais detalhadamente por que estes relatórios são interessantes, mas não necessariamente
confiável.

Para os últimos anos, a Verizon tem sido estudar violações vividas por muitos clientes dispostos a
colaborar e fornecer dados; os relatórios Verizon estão entre os poucos estudos credíveis e
comparáveis ​disponíveis hoje. Embora você deve se lembrar que os resultados são particulares para o
tipo de cliente Verizon suporta, os resultados não deixam de ser interessante para ilustrar que o
malware tem tido impactos severos em uma ampla variedade de situações.

2014 Verizon Breach relatório [ VER14 ] Mostra que, de 2010 a 2013, a percentagem de violações de
dados motivado pelo ganho financeiro caiu de cerca de 90 por cento a 55 por cento, enquanto o número
de violações para fins de espionagem subiu de perto de zero por cento para quase 25 por cento.
Embora os números mostram algumas oscilações de ano para ano, a tendência geral é de queda para o
ganho financeiro e para cima por espionagem. (Verizon reconhece parte do aumento é, sem dúvida,
devido a um relatório mais abrangente de um maior número de seus parceiros de relatórios; assim, os
dados podem refletir melhor recolha de dados de mais fontes.)

Não se deixe enganar, no entanto. Espionagem certamente tem um aspecto financeiro também. O custo de uma
violação de dados em um ponto de venda (fraude no balcão de check-out) é muito mais fácil de calcular do que o
valor de um uma estratégia de preços invenção ou. Sabendo estas coisas, no entanto, pode ajudar um concorrente
ganhar vendas longe do alvo da espionagem.

Nós prefaciar nossa discussão sobre os detalhes desses tipos de malware com um breve relatório sobre a longa
história de código malicioso. Com o tempo, os tipos de códigos maliciosos têm evoluído como o modo de computação em
si mudou de mainframes multiusuário para computadores pessoais de usuário único para sistemas em rede à Internet. A
partir deste fundo você será capaz de compreender não apenas onde o código malicioso de hoje veio, mas também como
ele pode evoluir.

História de código malicioso

A literatura popular e de imprensa continuam a destacar os efeitos do código malicioso como se


fosse um fenômeno relativamente recente. Não é. Fred Cohen [ COH87 ] Às vezes é creditado com a descoberta do vírus,
mas Cohen só deu um nome a um fenômeno conhecido há muito tempo. Por exemplo, Shoch e Hupp [ SHO82 ] Publicou
um artigo sobre vermes, e Ken Thompson, em seu Turing Award 1984 palestra, “Reflexões sobre Confiando Trust” [ THO84 ],
Descrito código malicioso, que pode ser passado por um compilador. Nesse palestra, ele se refere a um documento
anterior da Força Aérea, a avaliação de segurança Multics por Paul Karger e Roger Schell [ KAR74 , KAR02 ]. De fato,
referências a código malicioso voltar, pelo menos, para o estudo de 1970. Willis Ware 1970 (lançado publicamente em
1979 [ WAR70 ]) E estudo de planejamento de James P. Anderson para a Força Aérea dos Estados Unidos [ AND72 ] ainda, décad
depois, descrever com precisão as ameaças, vulnerabilidades e falhas de segurança programa, especialmente os
intencionais.

Talvez o progenitor de código malicioso de hoje é o jogo de Darwin, desenvolvido por Vic Vyssotsky, Doug
McIlroy, e Robert Morris da AT & T Bell Labs em 1962 (descrito em [ ALE72 ]). Este programa não era
necessariamente mal-intencionado mas certamente foi malévolo: Representou uma batalha entre os programas de
computador, cujo objetivo era matar programas dos adversários. Os programas de luta teve um número de
propriedades interessantes, incluindo a capacidade de reproduzir e propagar, assim como esconder para evitar a
detecção e extermínio, todos os quais soar como propriedades de código malicioso atual.

código malicioso data, certamente, para os anos 1970, e provavelmente mais cedo. Seu crescimento foi
explosivo, mas certamente não é um fenômeno recente.

Através dos anos 1980 e início dos anos 1990, o código malicioso foi comunicada em grande parte pessoa-
a-pessoa através de meios infectada (tais como discos removíveis) ou documentos (como macros anexados a
documentos e planilhas) transmitidos através de e-mail. A principal excepção para a comunicação individual foi o
verme Morris [ ROC89 , SPA89 , ORM03 ], Que se espalhou pela internet jovem e pequena, então conhecida como a
ARPANET. (Discutimos o worm Morris em mais detalhes mais adiante neste capítulo.)

Durante a década de 1990, como a Internet explodiu em popularidade, também fez o seu uso para
comunicar código malicioso. transmissão de rede tornou-se generalizada, levando a Melissa (1999), ILoveYou
(2000), e Code Red e NIMDA (2001), todos os programas que infectou centenas de milhares, e talvez
milhões-de sistemas.

Malware continua a se tornar mais sofisticado. Por exemplo, uma característica de Code Red, seus sucessores SoBig e
Slammer (2003), assim como a maioria outro malware que se seguiu, foi a exploração das vulnerabilidades do sistema conhecidas,
para as quais remendos tinha sido desde há muito distribuídos, mas para que os proprietários do sistema falhou em aplicar os
pensos de protecção. Em 2012, a empresa de segurança Solutionary olhou para 26 kits de ferramentas populares usadas por
hackers e descobriu que 58 por cento das vulnerabilidades exploradas eram mais de dois anos de idade, com alguma remonta a
2004.

Zero ataque dia: malware activo explorando uma vulnerabilidade do produto para o qual o
fabricante não tem nenhuma contramedida disponível.

Um fenômeno mais recente é chamado de ataque de dia zero, ou seja, o uso de malware que explora uma vulnerabilidade
até então desconhecida ou uma vulnerabilidade conhecida para os quais nenhuma medida preventiva ainda não foi
distribuído. O moniker refere-se ao número de dias (zero)
durante o qual uma vulnerabilidade conhecida passou sem ser explorado. A janela de exploração está a diminuir
rapidamente, como se mostra na Sidebar 3-6 .

Barra lateral 3-6 aproxima rapidamente Zero

Y2K ou o problema do ano 2000, quando terríveis consequências foram previsão para os relógios dos
computadores com campos de ano com 2 dígitos que iria transformar 99-00, foi um problema ideal: A ameaça era
fácil de definir, momento do impacto foi facilmente previsíveis, e abundância de aviso prévio foi dado. Talvez como
conseqüência, muito poucos sistemas de computadores e pessoas experientes danos significativos no início da
manhã de 1 de Janeiro de 2000. Uma outra contagem regressiva do relógio tem pesquisadores de segurança de
computador muito mais preocupados.

O tempo entre o conhecimento geral de uma vulnerabilidade do produto ea aparência do código para
explorar essa vulnerabilidade está encolhendo. A linha do tempo segue geral explorar esta sequência:

• Um atacante descobre uma vulnerabilidade até então desconhecida.

• O fabricante se torna consciente da vulnerabilidade.


• Alguém desenvolve código (chamado de prova de conceito) para demonstrar a vulnerabilidade em um
ambiente controlado.

• O fabricante desenvolve e distribui um patch ou solução alternativa que contraria a


vulnerabilidade.

• Usuários implementar o controle.


• Alguém se estende a prova de conceito, ou a definição de vulnerabilidade original, para
um ataque real.

Enquanto os usuários receber e implementar o controle antes do ataque real, nenhum dano ocorre. Um
ataque antes de disponibilidade do controle é chamado de zero-day exploit. Tempo entre a prova de conceito
e atual ataque foi encolhendo. Code Red, uma das peças mais virulentas do código malicioso, em 2001
exploradas vulnerabilidades para as quais os patches foram distribuídos mais de um mês antes do ataque.
Mas, mais recentemente, o tempo entre a vulnerabilidade e explorar declinou firmemente. Em 18 de agosto de
2005, a Microsoft lançou um alerta de segurança para resolver uma vulnerabilidade de que o código de prova
de conceito foi enviada para o SIRT francês (Segurança Incident Response Team) web site frsirt.org. A
correção da Microsoft foi distribuída uma semana depois. Em 27 de Dezembro de 2005, uma vulnerabilidade
foi descoberta nos arquivos Windows Metafile (.wmf). Dentro de horas centenas de sites começou a explorar a
vulnerabilidade para distribuir código malicioso, e no prazo de seis dias um conjunto de ferramentas de código
malicioso apareceu, por que alguém poderia facilmente criar um exploit. Microsoft lançou um patch em nove
dias.

A empresa de segurança Symantec em seu Global Threat Internet Security Relatório [ SYM14b ]
Encontraram 23 vulnerabilidades desconhecidas em 2013, um aumento de 14 no ano anterior e 8 para 2011.
Embora estes parecem ser pequenos números a observação importante é a tendência de crescimento ea
taxa de aumento. Além disso, software sob tal ataque é executado por milhões de usuários em milhares de
aplicações. Por causa de um ataque de dia zero é uma surpresa para o pessoal de manutenção do software
afetado, a vulnerabilidade continua exposta até que a equipe pode encontrar um
reparar. Symantec relata vendedores ter uma média de quatro dias para preparar e distribuir um patch para as cinco
principais ataques de dia zero; os usuários vão realmente aplicar o patch em algum momento até mais tarde.

Mas o que exatamente é um zero-day exploit? Depende de quem está contando. Se o vendedor sabe da
vulnerabilidade, mas ainda não divulgou um controle, isso conta como dia zero, ou a exploração tem que
surpreender o fornecedor? David Litchfield da Next Generation Software no Reino Unido identificaram
vulnerabilidades e informou Oracle. Ele afirma a Oracle teve um surpreendente 800 dias para consertar dois
deles e os outros não foram fixados para 650 dias. Outros clientes são perturbados pelo patch lento ciclo de
Oracle lançou há manchas entre janeiro de 2005 e março de 2006 [ GRE06 ]. Angustiados com a falta de
resposta, Litchfield, finalmente veio a público com as vulnerabilidades para forçar a Oracle a melhorar o seu
apoio ao cliente. Obviamente, não há nenhuma maneira de determinar se uma falha é conhecida apenas
para a comunidade de segurança ou para os atacantes, bem menos que ocorra um ataque.

tempo entre o conhecimento da vulnerabilidade encolhendo e explorar coloca pressão sobre fornecedores e usuários
de ambos, e a pressão do tempo não é propício para o bom desenvolvimento de software ou gerenciamento do sistema.

O pior problema não pode ser controlado: vulnerabilidades conhecidas para os atacantes, mas não para a
comunidade de segurança.

malwares de hoje muitas vezes fica dormente até ser necessário, ou até que ele atinge tipos específicos de software
para debilitar algum sistema maior (por vezes hardware). Por exemplo, o Conficker (2008) é um nome genérico para uma
infecção que deixa os seus alvos, sob o controlo de um agente mestre. O efeito da infecção não é imediata; o malware é
latente até o agente principal faz com que os agentes infectadas para carregar o código específico e realizar um ataque
grupo.

O malware não atacar apenas usuários individuais e computadores individuais. Principais


aplicações e indústrias também estão em risco.

Por exemplo, o Stuxnet (2010) recebeu uma grande quantidade de cobertura da mídia em 2010. Uma peça muito
sofisticada de código, Stuxnet explora uma vulnerabilidade no software sistemas de controle industrial da Siemens. Este tipo
de software é especialmente popular para uso em sistemas de aquisição de dados (SCADA), que controlam processos em
fabricação de produtos químicos, refino e distribuição de petróleo e energia nuclear plantas todos os processos cuja falha
pode ter consequências catastróficas controle de supervisão e. Tabela 3-3 dá um cronograma de algumas das infecções de
códigos maliciosos mais notáveis.
TABELA 3-3 Notáveis ​Infecções código malicioso

Com este pano de fundo histórico que agora explorar mais geralmente os muitos tipos de códigos maliciosos.

Detalhes técnicos: Código Malicioso

O número de linhagens de código malicioso é desconhecida. De acordo com um serviço de teste [ AVC10 ], Detectores de
códigos maliciosos (como ferramentas antivírus familiares) que procuram “assinaturas” de malware cobertura de mais de 1
milhão definições, embora por causa da mutação, uma cepa pode envolver várias definições. vetores de infecção incluem
sistemas operacionais, aplicativos de documentos (principalmente processadores de texto e planilhas), media players,
navegadores, motores de renderização de documentos (como o Adobe Reader PDF) e programas de edição de fotos. meios
de transmissão incluem documentos, fotografias e ficheiros de música, em redes, discos,
mídia flash (tais como dispositivos de memória USB), e até molduras digitais. Infecções envolvendo outros dispositivos
programáveis ​com computadores embutidos, tais como telefones celulares, automóveis, gravadores de vídeo digitais e
caixas registadoras, estão se tornando alvos de código malicioso.

Nesta seção, vamos explorar quatro aspectos de infecções de códigos maliciosos:

• prejuízo -Como eles afetam usuários e sistemas


• transmissão e propagação -Como eles são transmitidos e replicar, e como eles causam ainda
mais a transmissão

• ativação- como ganhar o controle e se instalar para que possam reativar

• furtividade -como eles escondem para evitar a detecção

Começamos nosso estudo de malware por olhar para alguns aspectos de danos causados ​por códigos maliciosos.

Harm de Código Malicioso

Vírus e outros códigos maliciosos pode causar danos essencialmente ilimitado. Porque o malware é executado sob a
autoridade do usuário, ele pode fazer qualquer coisa que o usuário pode fazer. Nesta seção, vamos dar alguns exemplos de
malware mal pode causar. Alguns exemplos são trivial, mais na veia de uma brincadeira cômica. Mas outros exemplos são
mortais graves com consequências críticas óbvias.

Podemos dividir a carga de código malicioso em três categorias:

• Não Destrutivos. Exemplos de comportamento estão enviando uma mensagem engraçada ou piscando uma imagem na
tela, muitas vezes simplesmente para mostrar a capacidade do autor. Esta categoria também incluiria fraudes, vírus mensagens
falsamente advertindo de um pedaço de código malicioso, aparentemente para fazer com que os receptores a entrar em
pânico e encaminhar a mensagem para contatos, assim espalhando o pânico.

• Destrutivo. Este tipo de código corrompe arquivos, apaga arquivos, danos software, ou executa
comandos para causar estresse hardware ou quebra sem motivo aparente além de prejudicar o
destinatário.

• intenção comercial ou criminal. Uma infecção deste tipo tenta assumir o computador do destinatário, a instalação de
código para permitir que um agente remoto para fazer com que o computador para executar ações em sinal do agente
ou de transmitir dados sensíveis ao agente. Exemplos de ações incluem a recolha de dados pessoais, por exemplo, as
credenciais de login para um site bancário, a coleta de dados proprietárias, tais como planos corporativos (como foi
relatado por uma infecção de computadores de cinco empresas da indústria do petróleo em fevereiro de 2011), ou
servindo como um agente comprometido para o envio de e-mail de spam ou a montagem de um ataque de negação de
serviço, conforme descrito no

Capítulo 6 .

Como destacamos na Capítulo 1 , Sem o nosso conhecimento da mente do atacante, o motivo pode
ser difícil de determinar. No entanto, esta terceira categoria tem um motivo comercial óbvia. O crime organizado tem tido
um interesse em usar o código malicioso para levantar o dinheiro [ WIL01 ,
BRA06 , homens10 ].
Dano aos usuários

Mais danos código malicioso ocorre com os dados do computador infectado. Aqui estão alguns exemplos do mundo real de
malícia.

• Escondendo o cursor.

• Exibição de texto ou uma imagem na tela.


• Abrindo uma janela do navegador para web sites relacionados com a atividade atual (por exemplo, abrir uma página
web companhia aérea quando o site atual é conselho de turismo numa cidade estrangeira do).

• Envio de email para algumas ou todas as entradas em contatos do usuário ou da lista de alias. Note-se que o
e-mail seria entregue como tendo vindo do usuário, levando o destinatário a pensar que autêntica. O vírus
Melissa fez isso, enviando cópias de si mesmo como um anexo que os destinatários desavisados ​abriria, que, em
seguida, infectou os destinatários e permitiu que a infecção se espalhar para seus contatos.

• Abrindo documentos de texto e mudando alguns casos de “é” para “não é”, e vice-versa. Assim, “Raul
é meu amigo” se torna “Raul não é meu amigo.” O malware mudou apenas alguns exemplos em locais
aleatórios, então a mudança não seria facilmente perceptível. Imaginar o efeito dessas mudanças teriam
em um papel do termo, a proposta, contrato ou notícia.

• Excluindo todos os arquivos. O vírus Jerusalém fez isso toda sexta-feira que foi um dia 13 do mês.

• Modificando arquivos de programa do sistema. Muitos tipos de malware fazer isso para garantir a reativação
posterior e evitar a detecção.

• Modificar as informações do sistema, como o registro do Windows (a tabela de todas as informações críticas
do sistema).

• Roubos e encaminhamento de informações confidenciais, como senhas e detalhes de login.

Além destas formas diretas de danos, o usuário pode ser prejudicado indiretamente. Por exemplo, a imagem pública de uma
empresa pode ser prejudicado se o web site da empresa é seqüestrado para espalhar códigos maliciosos. Ou se o ataque faz com
que alguns arquivos na web ou funções indisponíveis, as pessoas podem mudar para o site de um concorrente permanentemente
(ou até o site do concorrente é atacado).

Embora o usuário é mais diretamente prejudicados por malware, não há dano secundário como o usuário tenta limpar um
sistema após a infecção. Em seguida, considerar o impacto no sistema do usuário.

Danos ao sistema do usuário

Os criadores de malware geralmente a intenção de que seu código persistir, então eles escrevem o código de uma forma que
resiste às tentativas de erradicá-la. Poucos escritores são tão óbvias como plantar um arquivo chamado “malware” no diretório de nível
superior do disco de um usuário. Aqui estão algumas manobras pelo qual os criadores de malware escondem sua infecção; estas
técnicas também complicar a detecção e erradicação.

• Esconder o arquivo em um diretório de nível mais baixo, muitas vezes um subdiretório criado ou usado por
outro programa legítimo. Por exemplo, o sistema operacional Windows mantém subdiretórios para
alguns programas instalados em uma pasta chamada “pacotes registrados.” Dentro dessa pasta estão
subpastas com nomes ininteligíveis como {982FB688-E76B-4246-987B-9218318B90A}. Poderia dizer ao
que pacote que diretório pertence ou quais arquivos corretamente pertence lá?

• Anexar, usando as técnicas descritas anteriormente neste capítulo, para um arquivo de sistema crítico,
especialmente um que é chamado durante a inicialização do sistema (para garantir o malware é reactivada).

• Substituir (mantendo o nome de) um arquivo de sistema não-críticos. Algumas funcionalidades do sistema serão perdidos,
mas um olhar superficial pelos arquivos do sistema não irá destacar quaisquer nomes que não pertencem.

• Esconder cópias do código executável em mais de um local.


• Esconder cópias do executável em locais diferentes em sistemas diferentes de modo nenhum procedimento
erradicação única pode funcionar.

• Modificar o registro do sistema para que o malware é sempre executada ou detecção de malware está
desativado.

Como mostram esses exemplos, livrando um sistema de malware pode ser difícil porque a infecção pode ser na
área de sistema, programas instalados, os dados do usuário ou espaço livre em situação irregular. As cópias podem
ir e vir entre a memória e um disco rígido de modo que após um local é limpo, a infecção é reinserido a partir de
outro local.

Para infecções simples, simplesmente removendo o arquivo problemático erradica o problema. Os vírus, por vezes,
ter um multipartido formar, o que significa que se instalam em vários pedaços em locais distintos, por vezes, para
realizar objetivos diferentes. Nesses casos, mesmo que apenas uma parte é removida, as restantes peças podem
reconstituir e reinstalar o pedaço suprimido; erradicação requer destruir todas as peças da infecção. Mas para
infecções mais profundamente estabelecidos, os usuários podem ter que apagar e formatar um disco inteiro, e depois
reinstalar o sistema operacional, aplicativos e dados do usuário. (Claro, os usuários podem reinstalar essas coisas só
se eles têm cópias intactas de que para começar.)

Assim, o dano para o usuário não é apenas no tempo e esforço de substituir dados diretamente perdidos ou danificados, mas
também em lidar com os efeitos secundários no sistema e na limpeza de qualquer tipo de corrupção resultante.

Danos ao Mundo

Um caráter essencial da maioria código malicioso é sua propagação a outros sistemas. Exceto para os ataques voltados
especificamente, os criadores de malware geralmente querem o seu código para infectar muitas pessoas, e eles empregam técnicas
que permitem a disseminação da infecção a uma taxa geométrica.

O worm Morris de 1988 infectou apenas 3.000 computadores, mas esses computadores constituíam uma
proporção significativa, talvez tanto quanto a metade, do que era então a Internet. O worm ILOVEYOU (transmitido
em uma mensagem de e-mail com o assunto atraente “Eu te amo”) é estimada para ter infectado 100.000 servidores;
a empresa de segurança Mensagem Labs estima que, na altura do ataque, um e-mail de todos os 28 transmitido em
todo o mundo foi uma infecção do worm. Code Red é acreditado para ter afetado perto de 3 milhões de hosts. De
acordo com algumas estimativas, os vermes Conficker (várias estirpes) controlar um
rede de 1,5 milhão de hosts comprometidos e não reparados sob o controle do autor dos vermes [ Mar09 ]. Custos de recuperação das
principais infecções como estes normalmente ultrapassar US $ 1 milhões de dólares americanos. Assim, os usuários de computador e
sociedade em geral suportar um custo pesado para lidar com malware.

As estimativas de danos

Como você determina o custo ou dano de qualquer incidente de segurança? O problema é semelhante à questão de
determinar o custo de um desastre complexo, como um colapso do edifício, terremoto, derramamento de óleo, ou danos
pessoais. Infelizmente, traduzindo danos em dinheiro é difícil, em segurança de computadores e outros domínios.

O primeiro passo é para enumerar as perdas. Alguns serão tangíveis, como equipamentos danificados. Outras perdas
incluem perda ou dados que precisam ser recriados ou reparados danificado, e a degradação do serviço em que é
preciso um empregado dobro do tempo para realizar uma tarefa. Os custos também surgem em investigar a extensão
dos danos. (Programas e dados que são afetados e quais versões arquivadas são seguros para recarregar?) Depois, há
intangíveis e unmeasurables como a perda de clientes ou danos à reputação.

Estimar o custo de um incidente é difícil. Isso não significa que o custo é zero ou insignificante,
apenas difícil de determinar.

Você deve determinar um valor justo para cada coisa perdida. hardware ou software danificado é fácil se há um preço
para obter uma substituição. Para dados danificados, você deve estimar o custo do tempo do pessoal para se recuperar,
re-criar ou reparar os dados, incluindo o tempo para determinar o que é eo que não está danificado. Perda de clientes
pode ser estimada a partir da diferença entre o número de clientes antes e depois de um incidente; você pode fixar o preço
da perda do lucro médio por cliente. Danos à reputação é uma perda real, mas extremamente difícil de preço bastante.
Como vimos ao explorar gestão de risco, a percepção de risco das pessoas afetam a maneira como eles estimar o impacto
de um ataque. Assim, as estimativas variam para o valor de perda da vida de um ser humano ou danos à reputação.

Conhecer as perdas e seu custo aproximado, você pode calcular o custo total de um incidente. Mas, como você pode
ver facilmente, determinar o que incluir como perdas e valorizá-los de forma justa pode ser subjetiva e imprecisa. Subjetiva
e imprecisa não significam inválido; eles simplesmente indicam espaço significativo para a variação. Você pode entender,
portanto, por que não pode haver ordens de diferenças de magnitude nas estimativas de danos para a recuperação de um
incidente de segurança. Por exemplo, as estimativas de danos causados ​por gama Code Red de R $ 500 milhões a US $
2,6 bilhões, e uma estimativa dos danos do Conficker, para o qual 9 a 15 milhões de sistemas foram reparados (mais 1,5
milhões ainda não limpo da infecção), foi de US $ 9,2 bilhões , ou cerca de US $ 1.000 por sistema [ DAN09 ].

Transmissão e propagação

Uma cópia impressa do código não faz nada e não ameaça ninguém. Mesmo código executável sentado em um disco não faz nada.
O que desencadeia código para começar? Para malwares para fazer seu trabalho malicioso e se espalhar, ele deve ser executado para
ser ativado. Felizmente para os criadores de malware, mas infelizmente para o resto de nós, há muitas maneiras de garantir que os
programas serão executados em um computador em funcionamento.
Configuração e Installer Programa de Transmissão

Lembre-se do programa de instalação que você executar para carregar e instalar um novo programa no seu computador.
Pode chamar dezenas ou centenas de outros programas, alguns no meio de distribuição, alguns já residem no computador,
alguns na memória. Se qualquer um desses programas contém um vírus, o código do vírus pôde ser ativado. Vamos ver
como. Suponha que o código do vírus estavam em um programa do canal de distribuição, como um CD ou baixado no
pacote de instalação; Quando executado, o vírus poderia instalar-se em um meio permanente de armazenamento
(normalmente, um disco rígido) e também em qualquer e todos os programas em execução na memória. A intervenção
humana é necessária para iniciar o processo; um ser humano coloca o vírus no meio de distribuição, e talvez uma outra
pessoa inicia a execução do programa para o qual o vírus está ligado. (Execução pode ocorrer sem intervenção humana,
embora, tal como quando a execução é desencadeada por uma data ou a passagem de uma certa quantidade de tempo.)
Depois disso, não é necessária uma intervenção humana; o vírus pode se espalhar por si só.

Arquivo anexo

Um meio mais comum de activação do vírus é em um arquivo anexado a uma mensagem de e-mail ou incorporado em um
arquivo. Neste ataque, o escritor do vírus tenta convencer a vítima (o destinatário da mensagem ou arquivo) para abrir o objeto.
Uma vez que o objecto é aberto viral (e, assim, executado), o vírus activado pode fazer o seu trabalho. Alguns manipuladores de
e-mail modernos, em um esforço para “ajudar” o receptor (vítima), automaticamente anexos abrir logo o receptor abre o corpo da
mensagem de email. O vírus pode ser código executável incorporado em um anexo executável, mas outros tipos de arquivos são
igualmente perigosas. Por exemplo, objectos, tais como gráficos ou imagens fotográficas podem conter código a ser executado
por um editor, para que possam ser agentes de transmissão de vírus. Em geral, forçar os usuários a abrir arquivos em seu próprio
em vez de ter uma aplicação fazê-lo automaticamente é uma prática recomendada; programas não devem realizar ações
potencialmente relevantes para a segurança sem o consentimento do usuário. No entanto, a facilidade de uso, muitas vezes
supera a segurança, para que os programas como navegadores, manipuladores de e-mail, e os espectadores muitas vezes
“amavelmente” arquivos abertos sem antes perguntar o usuário.

Os vírus de documentos

Um tipo de vírus que costumava ser bastante popular é o que chamamos o vírus documento, que é implementado dentro
de um documento formatado, como um documento escrito, um banco de dados, uma apresentação de slides, uma imagem ou
uma planilha. Estes documentos são altamente arquivos que contêm dados (palavras ou números) e comandos (como
fórmulas, controles de formatação, links) estruturado. Os comandos são parte de uma linguagem de programação rica,
incluindo macros, variáveis ​e procedimentos, acessos a arquivos, e até mesmo as chamadas do sistema. O escritor de um
vírus documento utiliza qualquer uma das funções da linguagem de programação para realizar ações maliciosas.

O usuário comum normalmente só vê o conteúdo do documento (seu texto ou dados), de modo que o escritor do
vírus simplesmente inclui o vírus na parte comandos do documento, como no vírus programa integrado.

Autorun

Autorun é uma característica de sistemas operacionais que faz com que a execução automática de código com base no nome ou
colocação. Um programa de autorun no início era o autoexec.bat arquivo DOS, um arquivo script localizado no nível mais alto do
diretório de um disco de inicialização. Como o sistema começou
execução, ele será executado automaticamente autoexec.bat, portanto, um objetivo de códigos maliciosos início era para
aumentar ou substituir autoexec.bat para obter o código malicioso executado. Da mesma forma, em Unix, arquivos como cshrc e
.profile são processados ​automaticamente na inicialização do sistema (dependendo da versão).

No Windows, o registro contém várias listas de programas invocados automaticamente na inicialização, alguns facilmente
perceptível (na lista de programas de inicialização do menu Iniciar / /) e outros mais escondidos (por exemplo, na chave de
software \ windows registro \ current_version \ Run).

Uma técnica popular para a transmissão de malware é a distribuição através de memória flash, como um estado sólido
dispositivo de memória USB. As pessoas gostam de obter algo de graça, e distribuindo dispositivos de memória infectados é
uma maneira custo relativamente baixo para espalhar uma infecção. Embora a propagação tem de ser feito à mão
(distribuindo unidades gratuitos como a publicidade em uma estação ferroviária, por exemplo), o toque pessoal não adicionar
credibilidade: Nós seria suspeito de um anexo de uma pessoa desconhecida, mas algumas pessoas relaxar sua guardas
para algo recebido pela mão de outra pessoa.

Propagação

Uma vez que um vírus pode ser bastante pequena, seu código pode ser “escondido” dentro de outros programas maiores e mais
complicadas. Duas centenas de linhas de um vírus pode ser separado em cem pacotes de duas linhas de código e um salto de cada;
estes cem pacotes poderia ser facilmente escondido dentro de um compilador, um gerente de banco de dados, um gerenciador de
arquivos, ou algum outro grande utilidade.

Os vírus anexados

Um vírus programa atribui-se a um programa; em seguida, sempre que o programa é executado, o vírus é activado.
Este tipo de ligação é geralmente fácil de projetar e implementar.

No caso mais simples, um vírus insere uma cópia de si mesmo para o arquivo executável do programa antes da primeira
instrução executável. Em seguida, todas as instruções de vírus executar em primeiro lugar; após a última instrução vírus, controlar os
fluxos naturalmente para o que costumava ser a primeira instrução do programa. Tal situação é mostrada na A Figura 3-19 .
FIGURA 3-19 Anexo vírus

Este tipo de ligação é simples e geralmente eficaz. O escritor vírus não precisa saber nada sobre o programa para o qual o
vírus irá anexar, e muitas vezes o programa anexado simplesmente serve como um portador para o vírus. O vírus executa sua
tarefa e, em seguida, transfere para o programa original. Normalmente, o usuário não tem conhecimento do efeito do vírus se
o programa original ainda faz tudo o que ele costumava fazer. A maioria dos vírus anexar desta maneira.

Os vírus que cercam um Programa

Uma alternativa para o anexo é um vírus que executa o programa original, mas tem controle antes e após a sua
execução. Por exemplo, um escritor do vírus pode querer evitar que o vírus seja detectado. Se o vírus é
armazenado no disco, a sua presença será dado por seu nome de arquivo, ou seu tamanho afetará a quantidade de
espaço usado no disco. O escritor vírus pode mandar para o vírus para juntar-se ao programa que constrói a lista de
arquivos no disco. Se o vírus recupera o controle após o programa de listagem gerou a listagem, mas antes do
anúncio é exibido ou impresso, o vírus poderia eliminar a sua entrada a partir da lista e falsificar espaço conta para
que ele parece não existir. Um vírus circundante é mostrado na A Figura 3-20 .
FIGURA 3-20 vírus envolvente

Os vírus integrados e Replacements

Uma terceira situação ocorre quando o vírus substitui algum do seu alvo, integrando-se no código original
do alvo. Tal situação é mostrada na A Figura 3-21 . Claramente, o escritor vírus tem de conhecer a estrutura
exata do programa original para saber onde inserir quais partes do vírus.

FIGURA 3-21 A inserção de vírus

Finalmente, o código malicioso pode substituir um alvo inteira, quer simulando o efeito do alvo ou ignorando o
seu efeito esperado e realizando apenas o efeito do vírus. Nesse caso,
o usuário pode perceber a perda do programa original.

Ativação

os criadores de malware adiantados usaram macros de documentos e scripts como o vector para a introdução de malware em um
ambiente. Correspondentemente, os usuários e designers intensificaram o controle sobre macros e scripts para guardar em geral contra
códigos maliciosos, por isso, os criadores de malware tiveram que encontrar outros meios de transferência de seu código.

Malware agora frequentemente explorar um ou mais vulnerabilidades existentes em um programa comumente usado. Por
exemplo, o worm Code Red de 2001 explorados um programa de falha mais velho buffer overflow no Internet Information Server
da Microsoft (IIS), e Conficker.A explorado uma falha envolvendo um pedido de chamada de procedimento remoto
especialmente construída (RPC). Embora o escritor de malware geralmente deve encontrar uma vulnerabilidade e espero que a
vítima ainda não aplicou um patch protetora ou corretiva, cada vulnerabilidade representa uma nova abertura para causando
estragos contra todos os usuários de um produto.

É melhor para divulgar uma falha e alertar os usuários de que eles são vulneráveis ​ou ocultá-la até
que haja uma contramedida? Não há uma resposta fácil.

Falhas acontecem, apesar dos melhores esforços de equipes de desenvolvimento. Tendo descoberto uma falha, a
um software comercial pesquisador-ou de segurança fornecedor enfrenta um dilema: Anunciar a falha (para o qual
ainda não pode ser um patch) e códigos maliciosos alerta de outra vulnerabilidade para atacar, ou manter a calma e
esperança os códigos maliciosos ainda não descobriu a falha. Como Sidebar 3-7 descreve, um vendedor que não pode
liberar um patch de efetivo vai querer limitar a divulgação. Se um atacante encontra a vulnerabilidade, no entanto, a
palavra vai se espalhar rapidamente através da rede dos atacantes subterrâneas. objectivos concorrentes fazem
vulnerabilidade de divulgação de uma questão difícil.

Sidebar 3-7 Apenas manter isso em segredo e ele não está lá

Em julho de 2005, o pesquisador de segurança Michael Lynn apresentou informações para a conferência de
segurança Black Hat. Como pesquisador de Internet Security Systems (ISS), que tinha descoberto o que ele
considerava sérias vulnerabilidades no sistema operacional subjacente IOS em que Cisco baseado a maioria
de seus produtos de firewall e roteador. ISS tinha feito Cisco conscientes das vulnerabilidades de um mês
antes da apresentação, e as duas empresas estavam planejando uma conversa conjunta lá, mas cancelou-a.

Preocupado que os usuários estavam em perigo porque a vulnerabilidade poderia ser descoberto por
atacantes, Lynn apresentou suficientes detalhes da vulnerabilidade para os usuários para apreciar a sua
gravidade. ISS havia tentado bloquear a apresentação de Lynn ou remover detalhes técnicos, mas ele
se demitiu do ISS ao invés de ser amordaçados. Cisco tentou bloquear a apresentação, assim, exigindo
que 20 páginas ser arrancada do livro de actas. Vários sites postou os detalhes da apresentação, ações
judiciais se seguiu, e as cópias foram retirados na liquidação dos ternos. O incidente foi um fiasco de
relações públicas, tanto para a Cisco e ISS. (Para uma visão geral dos fatos da situação, ver Bank [ BAN05
]).

A questão permanece: Até que ponto pode ou deve uma empresa ir para limitar a vulnerabilidade
divulgação? Por um lado, uma empresa quer limitar a divulgação, enquanto que nos outros utilizadores mão
deve saber de uma fraqueza potencial que possam afetá-los. Os investigadores temem que as empresas não
agir rapidamente para fechar as vulnerabilidades, deixando assim os clientes em risco. Independentemente dos
pontos, o sistema legal pode não ser sempre o caminho mais eficaz para tratar a divulgação.

A segurança do computador não é o único domínio em que surgem esses debates. Matt Blaze, um
pesquisador de segurança informática com a AT & T Labs, investigado travas físicas e chaves mestras [ BLA03 ];
estes são bloqueios para estruturas como dormitórios da faculdade e edifícios de escritórios, em que os
indivíduos têm chaves para quartos individuais, e uma manutenção poucos ou outros trabalhadores têm uma
única chave mestra que abre todas as fechaduras. Chama descreve uma técnica que pode encontrar uma chave
mestra para uma classe de fechaduras com relativamente pouco esforço por causa de uma característica desses
bloqueios (vulnerabilidade?); o ataque encontra a chave mestra de um pino de cada vez. De acordo com
Schneier [ SCH03 ] E Blaze, a característica era bem conhecido para serralheiros e criminosos-lock picking, mas
não para o público em geral (utilizadores). Um criptógrafo respeitada, Blaze chegou à sua estratégia
naturalmente: Sua abordagem é análoga a um ataque cryptologic padrão em que se busca para deduzir a
criptografia de chave um pouco de cada vez.

Chama confrontado uma questão importante: É melhor para documentar uma técnica conhecida pelos
fabricantes e atacantes, mas não para os usuários, ou para deixar os usuários com uma falsa sensação de
segurança? Ele optou pela divulgação. Schneier observa que essa fraqueza é conhecida há mais de 100 anos
e que vários outros projetos de chave mestra são imunes a ataques de Blaze. Mas esses bloqueios não estão
em uso generalizado, pois os clientes não estão cientes do risco e, portanto, não exigem produtos mais fortes.
Diz Schneier, “eu prefiro ter o máximo de informações que puder para tomar decisões informadas sobre a
segurança.”

Quando um intruso encontra uma vulnerabilidade para explorar, o próximo passo é que usando vulnerabilidade para promover o ataque.
Em seguida, considere como malicioso ganhos de código controlar como parte de um compromisso.

Como Malicious Code ganha o controle

Para obter o controlo de processamento, o código malicioso tal como um vírus (V) tem que ser chamada no lugar do alvo
(T). Essencialmente, o vírus ou tem que parecem ser T, dizendo efetivamente “Eu sou T”, ou o vírus tem que empurrar T fora do
caminho e se tornar um substituto para T, dizendo efetivamente “Chame-me em vez de T.” A mais vírus flagrante pode
simplesmente dizer “chamar-me [seu tolo].”

O vírus pode assumir o nome de T, substituindo (ou aderir a) Código do T em uma estrutura de arquivos; esta técnica de
invocação é mais apropriado para programas comuns. O vírus pode substituir T em armazenamento (simplesmente substituindo
a cópia de T em armazenamento, por exemplo). Alternativamente, o vírus pode alterar os ponteiros na tabela de arquivo para
que o vírus está localizado em vez de T sempre T é acessado através do sistema de arquivos. Estes dois casos são mostrados
nas
A Figura 3-22 .
FIGURA 3-22 Vírus V Substituindo T alvo

O vírus pode suplantar T alterando a sequência que teria invocado t agora a invocar o vírus V; esta invocação
pode substituir partes do sistema operacional residente modificando ponteiros para as partes residentes, como a
mesa de manipuladores para diferentes tipos de interrupções.

Incorporação: Casas de Malware

O escritor malware pode encontrá-lo atraente para construir essas qualidades para o malware:

• O código malicioso é difícil de detectar.


• O código malicioso não é facilmente destruídas ou desativadas.
• O código malicioso se espalha infecção amplamente.

• O código malicioso pode infectar seu programa de casa ou outros programas.


• O código malicioso é fácil de criar.
• O código malicioso é independente da máquina e do sistema operacional independente. Alguns
exemplos de malware atender a todos esses critérios. O escritor escolhe entre estes objectivos ao decidir que o
código vai fazer e onde residirá.

Apenas alguns anos atrás, o desafio para o escritor do vírus era escrever código que seria executado repetidamente para
que o vírus pode se multiplicar. Agora, no entanto, uma execução é geralmente suficiente para assegurar a distribuição
generalizada. Muitos tipos de malware são transmitidos por e-mail. Por exemplo, alguns exemplos de malware gerar uma
nova mensagem de e-mail para todos os endereços no catálogo de endereços da vítima. Estas novas mensagens contêm
uma cópia do malware para que ele se propaga amplamente. Muitas vezes a mensagem é uma breve falador mensagem,
não específica, que propicie o novo destinatário para abrir o anexo de um amigo (o primeiro destinatário). Por exemplo, a
linha de assunto ou corpo da mensagem pode ler “Eu pensei que você pode desfrutar esta imagem de nossa férias.”
Execução de uma vez (Implantação)

código malicioso, muitas vezes executa um processo de uma só vez para transmitir ou receber e instalar a infecção. Às
vezes, o usuário clica para baixar um arquivo, outras vezes o usuário abre um anexo, e outras vezes o código malicioso é
baixado silenciosamente como uma página da web é exibida. Em qualquer caso, este primeiro passo para adquirir e instalar
o código deve ser rápido e não óbvia para o usuário.

Vírus do setor de inicialização

Um caso especial de acessório do vírus, mas antes um bastante popular, é o chamado vírus do setor de inicialização. Os
atacantes estão interessados ​na criação contínua ou repetida danos, em vez de apenas um ataque de uma só vez. Para a
continuidade da infecção precisa ficar ao redor e tornar-se parte integrante do sistema operacional. Em tais atacantes, o caminho
mais fácil para se tornar permanente é para forçar o código nocivo para ser recarregado cada vez que o sistema for reiniciado. Na
verdade, uma técnica similar funciona para a maioria dos tipos de código malicioso, por isso primeiro descrever o processo em
busca de vírus e, em seguida, explicar como a técnica se estende a outros tipos.

Quando um computador é iniciado, o controle começa com firmware que determina quais componentes de hardware estão
presentes, testa-los, e transfere o controle para um sistema operacional. A plataforma de hardware dado pode executar vários
sistemas operacionais diferentes, de modo que o sistema operacional não está codificado no firmware, mas em vez disso é invocado
dinamicamente, talvez até pela escolha de um usuário, após o teste de hardware.

Os sistemas operacionais modernos consistem em vários módulos; quais módulos estão incluídas em qualquer computador
depende do hardware do computador e os dispositivos conectados, software carregado, as preferências do usuário e
configurações, e outros fatores. Um executivo supervisiona o processo de inicialização, carregamento e iniciar os módulos
corretos em uma ordem aceitável. Montar um quebra-cabeça é duro o suficiente, mas o executivo tem de trabalhar com peças
de muitos puzzles ao mesmo tempo, de alguma forma colocar juntos apenas algumas peças de cada um para formar um todo
coerente, conectado, sem sequer uma imagem do que o resultado vai olhar como quando ele é montado. Algumas pessoas
vêem a flexibilidade em uma ampla gama de módulos conectáveis ​tal; outros vêem vulnerabilidade na incerteza dos quais
módulos serão carregados e como eles vão se inter-relacionam.

código malicioso pode entrar nesta seqüência de inicialização de várias maneiras. Um assalto pode revisar ou adicionar à
lista de módulos a serem carregados, ou substituir um módulo infectado por um bom alterando o endereço do módulo a ser
carregado ou substituindo uma rotina modificada do mesmo nome. Com ataques do setor de inicialização, o assaltante altera o
ponteiro para a próxima parte do sistema operacional para carregar, como mostrado na A Figura 3-23 .
FIGURA 3-23 Inicialização ou vírus de inicialização Tempo

O setor de inicialização é um lugar especialmente atraente para abrigar um vírus. Os ganhos de vus de controlo no início do
processo de arranque, antes de a maioria das ferramentas de detecção são activa, de modo que ela pode evitar, ou pelo menos
complicar, detecção. Os arquivos na área de inicialização são partes cruciais do sistema operacional. Consequentemente, para
manter os usuários acidentalmente modificar ou excluí-los com resultados desastrosos, o sistema operacional torna “invisível” por não
mostrá-los como parte de uma lista normal dos arquivos armazenados, evitando assim a sua eliminação. Assim, o código do vírus
não é facilmente notado pelos usuários.

sistemas operacionais têm obtido grande e complexo desde os primeiros vírus. O processo de inicialização ainda é o mesmo,
mas muito mais rotinas são ativados durante o processo de inicialização; muitos programas, muitas vezes centenas deles prazo
no momento da inicialização. O sistema operacional, manipuladores de dispositivo e outras aplicações necessárias são
numerosos e têm nomes ininteligíveis, então códigos maliciosos não precisam esconder seu código completamente;
provavelmente um usuário mesmo vendo um malware.exe arquivo chamado, seria mais provável que o arquivo de uma piada do
que alguns códigos maliciosos real. Enterrando o código entre outras rotinas do sistema e colocando o código da lista de
programas iniciados na inicialização do computador são as técnicas atuais para garantir que um pedaço de malware é reativado.

Residente na memória Vírus

Algumas partes do sistema operacional ea maioria dos programas do usuário executar, terminar, e desaparecer, com o seu
espaço na memória, em seguida, estar disponível para qualquer coisa executado mais tarde. Para as peças usadas com freqüência
do sistema operacional e para alguns programas do usuário especializadas, que levaria muito tempo para recarregar o programa de
cada vez que é necessário. Em vez disso, tal código permanece na memória e é chamado código “residente”. Exemplos de código
residente é a rotina que interpreta teclas pressionadas no teclado, o código que lida com condições de erro que surgem durante a
execução de um programa, ou um programa que funciona como um despertador, soando um sinal de cada vez que o usuário
determina. rotinas residentes às vezes são chamados programas TSR ou “terminar e permanecer residentes” rotinas.

Os criadores de vírus também gostaria de anexar vírus ao código residente porque o código residente é ativada muitas vezes
enquanto a máquina está funcionando. Cada vez que o código residente é executado, o
vírus faz também. Uma vez ativado, o vírus pode procurar e infectar portadores não infectados. Por exemplo, após a ativação, um
vírus do setor de inicialização pode juntar-se a um pedaço de código residente. Então, cada vez que o vírus foi ativado, ele pode
verificar se algum disco removível em uma unidade de disco foi infectado e, se não, infectá-lo. Desta forma, o vírus pode se
espalhar sua infecção para todos os discos removíveis usados ​durante a sessão de computação.

Um vírus também pode modificar a tabela do sistema operacional de programas para serem executados. Uma vez que o controlo de
ganhos de vírus, pode inserir uma entrada de registo de modo a que ele vai ser invocaram cada vez que o sistema é reiniciado. Desta
forma, mesmo se os avisos de usuário e exclui a cópia execução do vírus da memória, o sistema irá ressuscitar o vírus na próxima
reinicialização do sistema.

Para malwares em geral, executar apenas uma vez da memória tem a desvantagem óbvia de apenas uma oportunidade para
causar um comportamento mal-intencionado, mas, por outro lado, se o código infecciosa desaparece sempre que a máquina é
desligada, o código malicioso é menos provável de ser analisado por as equipes de segurança.

Outras Casas para vírus

Um vírus que não ocupam residência em um desses estabelecimentos acolhedor tem que cuidar de si mesmo. Mas isso
não quer dizer que o vírus vai desabrigados.

Você pode pensar que a aplicação de programas de código-pode fazer coisas, mas que os documentos Arquivos- de dados,
planilhas, arquivos PDF de imagens de documentos ou imagens-são objetos passivos que não pode fazer coisas prejudiciais. Na
verdade, no entanto, esses arquivos de dados estruturados contêm comandos para mostrar e manipular seus dados. Assim, um
arquivo PDF é exibida por um programa como o Adobe Reader, que faz muitas coisas em resposta a comandos no arquivo PDF.
Embora esse arquivo não é executável como um programa em si, pode causar a atividade no programa que lida com ele. um
arquivo como é chamado dados de interpretação, eo programa manipulador também é chamado de intérprete. O programa
Adobe Reader é um intérprete para arquivos PDF. Se há uma falha no interpretador PDF ou a semântica da linguagem
interpretativa PDF, abrindo um arquivo PDF pode causar o download e execução de código malicioso. Assim, mesmo um objeto
aparentemente passiva como uma imagem de documento pode levar a uma infecção por código malicioso.

Uma casa popular para um vírus é um programa de aplicação. Muitos aplicativos, como processadores de texto e
planilhas, têm uma característica “macro”, pelo qual um usuário pode gravar uma série de comandos e, em seguida, repetir
toda a série com uma invocação. Esses programas também oferecem uma “macro arranque” que é executado toda vez que
o aplicativo é executado. Um escritor vírus pode criar um macro vírus que se agrega às directivas de inicialização do
aplicativo. Também, em seguida, incorpora uma cópia de si mesmo em arquivos de dados para que a infecção se espalha
para qualquer um que recebe um ou mais desses arquivos. Assim, o escritor vírus eficazmente adiciona malwares para uma
aplicação site e vulgarmente utilizados, assegurando assim activações repetidas da adição prejudicial.

bibliotecas de código também são excelentes lugares para código malicioso para residir. Porque as bibliotecas são usados ​por muitos
programas, o código em si terá um efeito amplo. Além disso, as bibliotecas são frequentemente partilhadas entre os usuários e
transmitido de um usuário para outro, uma prática que se espalha a infecção. Finalmente, a execução de código em uma biblioteca pode
transmitir a infecção viral a outros meios de transmissão. Compiladores, carregadores, adaptadores, monitores de tempo de execução,
depuradores de tempo de execução, e até mesmo programas de controle de vírus são bons candidatos para hospedar vírus, porque eles
são amplamente compartilhada.
Furtividade

O objectivo final de um escritor de código malicioso é discrição: evitar a detecção durante a instalação, durante a execução, ou
mesmo em repouso em armazenamento.

A maioria dos vírus manter a discrição, escondendo sua ação, não anunciando a sua

presença, e disfarçar sua aparência. Detecção

descoberta de código malicioso pode ser auxiliada com um procedimento para determinar se dois programas são
equivalentes: Poderíamos escrever um programa com um efeito nocivo conhecido, e então comparar com qualquer outro
programa suspeito para determinar se os dois têm resultados equivalentes. No entanto, este problema de equivalência é
complexa, e os resultados teóricos em computação sugerem que uma solução geral é improvável. Na teoria da complexidade,
dizemos que a questão geral “São estes dois programas equivalentes?” É indecidível (embora essa pergunta posso ser
respondidas por muitos pares específicos de programas).

Mesmo se ignorarmos o problema geral indecidibilidade, ainda temos que lidar com uma grande quantidade de incerteza
sobre o que equivalência significa e como isso afeta a segurança. Dois módulos podem ser praticamente equivalente, mas
produzir sutilmente diferentes resultados que podem, ou não pode-ser relevantes de segurança. Um pode correr mais rápido,
ou o primeiro pode usar um arquivo temporário para espaço de trabalho, enquanto a segunda realiza todos os seus cálculos
na memória. Estas diferenças podem ser benigno, ou que pode ser um marcador de uma infecção. Portanto, é improvável
que desenvolver um programa de triagem que pode separar módulos infectados dos não infectados.

Embora o caso geral é desanimadora, o particular não é. Se sabemos que um determinado vírus pode infectar um
sistema de computação, podemos verificar sua “assinatura” e detectá-lo se ele está lá. Tendo encontrado o vírus, no
entanto, ficamos com a tarefa de limpeza do sistema dele. Removendo o vírus em um sistema em execução exige ser
capaz de detectar e eliminar suas instâncias mais rápido do que ele pode se espalhar.

Os exemplos que acabaram de dar à descrever várias maneiras em que um código malicioso chega a um computador de destino,
mas eles não responder à pergunta de como o código é executado pela primeira vez e continua a ser executado. Código de uma página
web pode simplesmente ser injetado no código do navegador executa, embora as definições de segurança dos utentes, dentro
navegadores podem limitar o que o código pode fazer. De modo mais geral, no entanto, autores de código tentar encontrar maneiras de
associar o seu código com os programas existentes, de maneiras, como descrevemos aqui, de modo que o código “mau” é executado
sempre que o código “bom” é invocado.

instalação de stealth

Nós descrevemos várias abordagens utilizadas para transmitir o código sem que o usuário de estar consciente, incluindo
download, como resultado de carregamento de uma página web e publicidade uma função durante a implementação de outro.
designers de códigos maliciosos são bastante competente em enganar o usuário a aceitar malware.

execução de stealth

Da mesma forma, permanecendo despercebido durante a execução não é muito difícil. operacional moderno
sistemas muitas vezes suportar dezenas de processos concorrentes, muitos dos quais têm nomes e funções
irreconhecíveis. Assim, mesmo que um usuário faz notar um programa com um nome reconhecido, o usuário é mais
provável que aceitá-lo como um programa de sistema de malware.

Discrição no armazenamento

Se você escrever um programa para distribuir aos outros, você vai dar a todos uma cópia da mesma coisa. Exceto por
alguma personalização (tais como detalhes de identidade de usuário ou um número de série do produto) sua rotina será
idêntica à de todos os outros. Mesmo se você tiver versões diferentes, provavelmente você vai estruturar seu código em
duas seções: como uma rotina de núcleo para todos e alguns módulos menores específicas para o tipo de usuário
user-home, profissional de pequenas empresas, o pessoal da escola, ou o cliente de grandes empresas. Projetando seu
código desta forma é a abordagem econômica para você: Designing, codificação, testes e manutenção de uma entidade
para muitos clientes é menos caro do que fazer isso para cada venda individual. Seu código entregues e instalados, então,
têm seções de instruções idênticas em todas as cópias.

Antivírus e outros leitores de códigos maliciosos procurar padrões porque os criadores de malware têm as mesmas
considerações que você teria no desenvolvimento de software de mercado de massa: Eles querem escrever um corpo de código e
distribuí-lo para todas as suas vítimas. Esse código idêntica torna-se um padrão no disco para o qual um scanner pode pesquisar
rapidamente e eficientemente.

Sabendo que scanners procurar padrões idênticos, códigos maliciosos tente variar a aparência de seu código
de várias maneiras:

• Reorganizar a ordem dos módulos.


• Reorganizar a ordem de instruções (quando a ordem não afecta de execução, por exemplo A: = 1; B: = 2
pode ser rearranjado, sem qualquer efeito prejudicial).

• Inserir instruções, (tais como A: = A), que não têm impacto.


• Insira seqüências aleatórias (talvez como constantes que nunca são usadas).

• Substituir instruções com os outros de efeito equivalente, tais como a substituição de A: B =


- 1, com R: = B + (-1) ou R: = B + 2-1.
• Inserir instruções que nunca são executados (por exemplo, no outro parte de uma expressão
condicional que é sempre verdade).

Estas mudanças são relativamente simples para que um escritor código malicioso pode construir uma ferramenta, produzindo
uma cópia única para cada usuário. Infelizmente (para o escritor de código), mesmo com algumas destas alterações em cada cópia,
ainda haverá seções idênticas reconhecíveis. Discutimos este problema para o escritor de malware mais adiante neste capítulo
como nós consideramos scanners de vírus como contramedidas para código malicioso.

Agora que temos explorado lado a ameaça de código malicioso, nos voltamos para vulnerabilidades. Como mostramos no Capítulo
1 , Uma ameaça é inofensivo sem uma vulnerabilidade que pode explorar. Infelizmente, vulnerabilidades exploráveis ​abundam
de código malicioso.

Introdução de código malicioso

A maneira mais fácil de código malicioso para obter acesso a um sistema deve ser introduzido por um usuário, um proprietário de
rede, um administrador, ou outro agente autorizado.

A única maneira de prevenir a infecção de um vírus não é para receber o código executável a partir de
uma fonte infectada. Esta filosofia costumava ser fácil de seguir porque era fácil de dizer se um arquivo foi
executável ou não. Por exemplo, em PCs, a. Exe extensão era um sinal claro de que o arquivo foi executável.
No entanto, como já observamos, os arquivos de hoje são mais complexas, e um arquivo aparentemente
não executável com um. doutor extensão pode ter algum código executável enterrado profundamente dentro
dela. Por exemplo, um processador de texto pode ter comandos dentro do arquivo de documento. Como
observamos anteriormente, estes comandos, chamados de macros, tornar mais fácil para o usuário a fazer
coisas complexas ou repetitivas, mas eles são realmente código executável incorporado no contexto do
documento. Da mesma forma, planilhas, slides de apresentação, outros arquivos do escritório ou de
negócios, e até mesmo arquivos de mídia pode conter código ou scripts que podem ser executados em
várias formas e, assim, conter vírus. E, como vimos, os aplicativos que são executados ou usam esses
arquivos podem tentar ser útil ao invocar automaticamente o código executável, se você quer que ele seja
executado ou não! Contra os princípios da boa segurança,

Outra abordagem criadores de vírus têm utilizado é um recurso pouco conhecido no projeto arquivo Microsoft que lida com tipos de
arquivo. Embora um arquivo com um. doutor extensão é esperado para ser um documento do Word, na verdade, o tipo de documento
verdadeira está escondida em um campo no início do arquivo. Esta conveniência ostensivamente ajuda a um usuário que inadvertidamente
nomes um documento do Word com
uma . ppt ( PowerPoint) ou qualquer outra extensão. Em alguns casos, o sistema operacional irá tentar abrir o
aplicativo associado, mas, se isso falhar, o sistema irá mudar para a aplicação do tipo de arquivo oculto. Assim, o
escritor vírus cria um arquivo executável, nomes com uma extensão inadequada, e envia para a vítima,
descrevendo-o como uma imagem ou um código necessário add-in ou qualquer outra coisa desejável. O destinatário
inconsciente abre o arquivo e, sem querer, executa o código malicioso.

Mais recentemente, o código executável tem sido escondida em arquivos contendo grandes conjuntos de dados, tais como
imagens ou documentos somente leitura, usando um processo chamado de esteganografia. Estes bits de código de vírus não são
facilmente detectados por detectores de vírus e certamente não pelo olho humano. Por exemplo, um arquivo contendo uma fotografia
pode ser altamente detalhado, muitas vezes com uma resolução de 600 ou mais pontos de cor (chamados pixels) por polegada.
Alterar cada pixel XVI dificilmente ser detectado pelo olho humano, assim que um escritor do vírus pode esconder as instruções de
máquina do vírus em imagem imagem um grande, um pouco de código para cada dezesseis pixels.

Dados licenças esteganografia para ser escondido em grandes e complexas, conjuntos de dados

redundantes. Padrões de execução

Um escritor vírus pode querer um vírus de fazer várias coisas ao mesmo tempo, ou seja, espalhar a infecção, evitar a
detecção, e causar danos. Essas metas são mostrados na Tabela 3-4 , Juntamente com formas cada meta pode ser abordada.
Infelizmente, muitos desses comportamentos são perfeitamente normais e poderiam passar despercebidos. Por exemplo, um
objetivo é modificar o diretório de arquivos; muitos programas normais criar arquivos, apagar arquivos e gravar em mídia de
armazenamento. Assim, não há sinais principais, a saber a presença de um vírus.
TABELA 3-4 Efeitos de vírus e que eles causam

A maioria dos criadores de vírus procuram evitar a detecção por si mesmos e suas criações. Porque o setor de inicialização de um
disco não é visível para operações normais (por exemplo, o conteúdo do setor de inicialização não aparecem em uma listagem de
diretório), muitos criadores de vírus se esconder seu código lá. Um vírus residente pode monitorar acessos a disco e falsificar o
resultado de uma operação de disco que iria mostrar o vírus escondido em um setor de boot, mostrando os dados que devemos ter sido
no setor de inicialização (que o vírus tenha movido para outro local).

Não há limites para o mal um vírus pode causar. Na extremidade modesto, o vírus pode não fazer nada; alguns
escritores criar vírus só para mostrar que eles podem fazer isso. Ou o vírus pode ser relativamente benigna, exibindo uma
mensagem na tela, fazendo soar a campainha, ou tocar música. A partir daí, os problemas podem escalar. Um vírus pode
apagar arquivos, mais um disco inteiro; um vírus pode impedir que um computador de inicialização, e outro pode impedir
a gravação em disco. O dano é limitado apenas pela criatividade do autor do vírus.

Padrões de transmissão

Um vírus é eficaz somente se ele tem alguns meios de transmissão de um local para outro. Como já vimos, os vírus podem
viajar durante o processo de inicialização, anexando a um arquivo executável ou viajar dentro de arquivos de dados. A viagem
em si ocorre durante a execução de um programa já infectados. Uma vez que um vírus pode executar quaisquer instruções de
um programa pode, viagem vírus não se limita a um único padrão médio ou execução. Por exemplo, um vírus pode chegar em
um disquete ou a partir de uma conexão de rede, viajar durante a execução do seu hospedeiro para um setor de inicialização do
disco rígido, ressurgir próxima vez que o computador host é inicializado, e permanecer na memória para infectar outras disquetes
à medida que são acessados.

polimórficos Vírus

A assinatura de vírus pode ser a maneira mais confiável para um antivírus para identificar um vírus. Se um vírus em
particular sempre começa com a string 0x47F0F00E08 e tem corda 0x00113FFF localizado na palavra 12, outros programas
ou arquivos de dados não são susceptíveis de ter essas características exatas. Para assinaturas mais longos, a probabilidade
de uma correta aumenta jogo.
Se o antivírus sempre vai olhar para essas cordas, em seguida, o escritor do vírus inteligente pode causar algo diferente do
que aquelas cordas para ser nessas posições. Certas instruções causar nenhum efeito, como a adição de 0 a um número,
comparando um número a si mesmo, ou saltar para a próxima instrução. Estas instruções, às vezes chamados no-ops ( para
“nenhuma operação”), pode ser polvilhado em um pedaço de código para distorcer qualquer padrão. Por exemplo, o vírus
poderia ter duas palavras que começam alternativas, mas equivalentes; depois de ter sido instalado, o vírus vai escolher uma
das duas palavras para a sua primeira palavra. Em seguida, um scanner de vírus teria que olhar para ambos os padrões. Um
vírus que pode mudar sua aparência é chamado de vírus polimórfico. ( Poli

significa “muitos” e metamorfose significa “forma”).

Um vírus polimórfico de dois forma pode ser manuseado facilmente, como dois vírus independentes. Portanto, o
escritor intenção vírus na prevenção de detecção do vírus vai querer tanto um grande ou um número ilimitado de formas
para que o número de formas possíveis é muito grande para um antivírus para procurar. Simplesmente a incorporação de
um número aleatório ou string em um lugar fixo na versão executável de um vírus não é suficiente, porque a assinatura do
vírus é apenas as instruções de univariados, excluindo a parte aleatória. Um vírus polimórfico tem de reposicionar
aleatoriamente todas as partes da mesma e mudar aleatoriamente todos os dados fixos. Assim, em vez de conter a corda
fixa (e, portanto, pesquisável) “HA! Infectado por um vírus “, um vírus polimórfico tem que mudar mesmo que o padrão, às
vezes.

Trivialmente, assumir um escritor vírus tem 100 bytes de código e 50 bytes de dados. Para fazer com que duas instâncias de
vírus diferente, o escritor pode distribuir a primeira versão de 100 bytes de código seguido por todos os 50 bytes de dados. Uma
segunda versão poderia ser 99 bytes de código, uma instrução de salto, 50 bytes de dados, e o último byte do código. Outras
versões são 98 bytes de código de salto para os dois últimos, 97 e três, e assim por diante. Apenas movendo peças ao redor, o
escritor do vírus pode criar aparências diferentes o suficiente para enganar scanners de vírus simples. Uma vez que os escritores
do scanner se tornou ciente desses tipos de truques, no entanto, eles refinaram suas definições de assinatura e técnicas de
pesquisa.

Um simples variedade de vírus polimórfico usa criptografia sob várias chaves para tornar o formulário armazenado do vírus
diferente. Estas são algumas vezes chamado criptografar vírus. Este tipo de vírus deve conter três partes distintas: uma chave de
desencriptação, o (cifrada) de código objecto do vírus, e o (não criptografada) de código objecto da rotina de descodificação. Para
estes vírus, a própria rotina de desencriptação ou uma chamada para uma rotina de biblioteca de decodificação deve estar em
claro, e assim que se torna a assinatura. (Vejo [ PFL10d ] Para saber mais sobre o uso de criptografia criadores de vírus.)

Para evitar a detecção, não cada cópia de um vírus polimórfico tem de ser diferente de todos os outros cópia. Se o vírus muda,
ocasionalmente, não cada cópia irá corresponder a uma assinatura de qualquer outra cópia.

Porque você não pode sempre saber quais fontes estão infectados, você deve assumir que qualquer fonte externa
está infectado. Felizmente, você sabe quando você está recebendo o código de uma fonte externa; infelizmente,
cortando todo o contato com o mundo exterior não é viável. Malware raramente vem com um grande sinal de alerta e,
de fato, como Sidebar 3-8
mostras, malware é frequentemente concebidos para enganar os incautos.

Sidebar 3-8 Malware não-Detector


Em maio de 2010, os Estados Unidos indiciou três homens acusados
com enganar as pessoas a acreditar seus computadores tinham sido infectados com código malicioso [ FBI10 ]. Os
três homens configurar sites de computador que iria primeiro relatório mensagens falsas e enganosas de erro do
computador e, em seguida, indicam que os computadores dos usuários foram infectados com várias formas de
malware.

Segundo a acusação, depois as mensagens de erro falsas foram transmitidas, os sites, em seguida,
induzidas utilizadores da Internet para comprar produtos de software que ostentam nomes como
“DriveCleaner” e “ErrorSafe”, variam de preço de cerca de US $ 30 a US $ 70, que os sites alegou faria
livrar computadores da infecção das vítimas, mas realmente fez desempenho pouco ou nada para
melhorar ou reparo do computador. O Bureau Federal de Investigação dos EUA (FBI) estima que os
sites gerado mais de US $ 100 milhões para os autores da fraude.

Os autores supostamente permitiu a fraude através da criação de agências de publicidade que


procuravam locais cliente web legítimas em que para hospedar anúncios. Quando um usuário vítima foi para
o site do cliente, código na web anúncio malicioso sequestrado navegador do usuário e gerou as mensagens
de erro falsas. O usuário foi redirecionado para o que é chamado de scareware web site, para assustar os
usuários sobre uma falha de segurança do computador. O site então exibido um gráfico que supostamente
para monitorar a verificação de computador da vítima para malware, dos quais (não surpreendentemente)
que encontrou uma quantidade significativa. O usuário foi então convidado a clicar para baixar um eradicator
malware livre, o que parece para corrigir apenas algumas vulnerabilidades e, então, solicitar o usuário para
atualizar para uma versão paga para reparar o resto.

Dois dos três acusados ​são cidadãos americanos, embora um se acreditava estar vivendo na
Ucrânia; o terceiro era sueco e acredita-se estar vivendo na Suécia. Todos foram acusados ​de fraude
eletrônica e fraude informática. Os três correram uma empresa chamada Innovative Marketing que foi
fechada sob acção da US Federal Trade Commission (FTC), alegando a venda de software fraudulento
anti-malware, entre 2003 e 2008.

O conselho para os usuários inocentes parece ser tanto “confiança, mas verificar” e “se não está quebrado; não
corrigi-lo.”Ou seja, se você está sendo atraído para a compra de produtos de segurança, a sua auto cético deve
primeiro executar o seu próprio scanner de malware confiável para verificar se há de fato um código malicioso
escondido em seu sistema.

Como vimos no Sidebar 3-8 , Não pode haver melhor maneira de atrair a segurança-consciente
usuário do que para oferecer uma ferramenta de verificação de segurança gratuita. Vários programas antivírus legítimos,
incluindo os do Grupo Anti-Virus (AVG) e Microsoft, estão livres. No entanto, outras ofertas de scanner fornecem malware, com
efeitos que vão desde o bloqueio de um computador para exigir dinheiro para limpar infecções inexistentes. Tal como acontece
com todos os softwares, seja software adquirindo cuidado de fontes desconhecidas.

Imunidade Natural

Em seu estudo comparando a transmissão do vírus de computador interessante com transmissão da doença
humana, Kephart et al. [ KEP93 ] Observar que os esforços dos indivíduos para manter seus computadores livres de
vírus levar a comunidades que são geralmente livres de vírus, porque os membros da comunidade têm pouco contato
(eletrônico) com o mundo exterior.
Neste caso, a transmissão é contida não por causa do contato limitado, mas por causa do contato limitado fora da
comunidade, tanto quanto as comunidades humanas isoladas raramente experiência surtos de doenças
transmissíveis como o sarampo.

Por esta razão, os governos muitas vezes correr comunidades de rede desconectados para lidar com segredos militares ou
diplomáticos de topo. A chave do sucesso parece ser a escolha de uma comunidade com prudência. No entanto, como o uso da
Internet e da World Wide Web aumenta, tal separação é quase impossível de manter. Além disso, em ambas as comunidades
humanas e de computação, as defesas naturais tendem a ser menores, por isso, se não ocorrer uma infecção, que muitas vezes se
espalha sem controle. usuários de computador humanos pode ser ingênuo, desinformados, e frouxa, de modo a rota humana à
infecção do computador é provável que se mantenha importante.

Malware Toolkits

Um ladrão de banco tem de aprender e praticar o comércio sozinho. Não há Banco Roubar for Dummies livro (pelo menos
nenhum dos quais estamos cientes), e um suposto criminoso não pode enviar um cheque e receber uma caixa contendo
todas as ferramentas necessárias. Parece haver uma forma de aprendizagem como novas criminosos trabalhar com os
mais experientes, mas este é um processo difícil, arriscado e demorado, ou pelo menos parece que maneira para nós de
fora.

ataque computador é um pouco diferente. Em primeiro lugar, há um metro de prosperidade de sites para hackers para técnicas e
conhecimentos de câmbio. (Tal como acontece com qualquer site da web, o leitor tem de avaliar a qualidade do conteúdo.) Em segundo
lugar, os atacantes muitas vezes pode experimentar em seus próprios laboratórios (casas) antes de lançar ataques públicos. Mais
importante ainda, kits de ferramentas de malware estão prontamente disponíveis para venda. Um pretenso agressor pode adquirir,
instalar e ativar um destes tão facilmente como carregar e executar qualquer outro software; usando um é mais fácil do que muitos jogos
de computador. Tal conjunto de ferramentas toma como entrada um endereço de destino e, quando o usuário pressiona o botão [Iniciar],
ele inicia uma sonda para uma série de vulnerabilidades. Tais usuários Toolkit, que não precisam de entender as vulnerabilidades que
procuram explorar, são conhecidos como script kiddies. Como observamos no início deste capítulo, esses kits de ferramentas, muitas
vezes exploram vulnerabilidades antigas para as quais tenham sido divulgados defesas. Ainda assim, esses kits de ferramentas são
eficazes contra muitas vítimas.

toolkits de malware deixar sonda atacantes novato para muitas vulnerabilidades no toque de um
botão.

Facilidade de uso significa que os atacantes não têm de entender, muito menos criar, seus próprios ataques. Por esta
razão, afigura-se como se ofensa é mais fácil do que a defesa em segurança informática, o que é certamente verdade.
Lembre-se que o defensor deve proteger contra todas as ameaças possíveis, mas o assaltante só tem de encontrar uma
vulnerabilidade descoberta.
3,3 contramedidas
Até agora, temos descrito as técnicas pelas quais os criadores de malware podem transmitir, escondem, e ativar seus
produtos mal. Se você tiver concluído que esses hackers são inteligentes, esperto, diligente e desonesto, você está certo.
E eles nunca parecem parar de funcionar. Antivírus fabricante de software relatórios da McAfee identificam 200 distintas,
novas peças de malware
por minuto. No início de 2012, a sua biblioteca de malwares continha um pouco menos de 100 milhões de itens e até o
final de 2013, tinha mais de 196 milhões [ MCA14 ].

Diante de tal cerco, os usuários são pressionados para se proteger, e da comunidade de defesa da segurança em geral é
tenso. No entanto, nem tudo está perdido. As contramedidas disponíveis não são perfeitos, alguns são reativas após o ataque
for bem sucedido, ao invés de preventiva, e todas as partes de desenvolvedores para os usuários devem fazer a sua parte.
Nesta seção, vamos examinar as contramedidas disponíveis para manter o código limpo e computação segura. Nós organizar
esta seção por quem deve tomar medidas: usuários ou desenvolvedores, e então nós adicionamos algumas sugestões que
parecem atraentes, mas simplesmente não funcionam.

Contramedidas para usuários

Usuários suportar a mais danos da infecção por malware, para que os usuários têm de implementar a primeira linha de
proteção. Os usuários podem fazer isso por ser cético em relação a todo o código, com o grau de ceticismo crescente como a fonte
do código torna-se menos confiável.

Vigilância usuário

O controle mais fácil contra códigos maliciosos é a higiene: não se envolver em comportamento que permite a
contaminação código malicioso. Os dois componentes de higiene são evitando pontos de contaminação e bloqueio de
vias de vulnerabilidade.

Para evitar a contaminação, você simplesmente não pode usar seus sistemas-não de computador uma opção realista
no mundo de hoje. Mas, como em prevenir resfriados e gripe, existem várias técnicas para a construção de uma
comunidade razoavelmente seguro para o contato eletrônico, incluindo o seguinte:

• Utilize apenas software comercial adquiridos de fornecedores confiáveis ​e bem estabelecidos. Há sempre uma
chance de que você pode receber um vírus de um grande fabricante com um nome de todo mundo iria reconhecer. No
entanto, essas empresas têm reputações significativos que podem ser seriamente danificados por sequer um incidente
ruim, então eles vão para algum grau de dificuldade para manter seu vírus produtos livres e para corrigir qualquer
código-causando problema de imediato. Da mesma forma, as empresas de distribuição de software vai ter cuidado com
os produtos que eles manipular.

• Testar todos os novos software em um computador isolado. Se você deve usar software de uma fonte duvidosa,
testar o software pela primeira vez em um computador que não está conectado a uma rede e não contém dados
sensíveis ou importantes. Execute o software e procurar um comportamento inesperado, mesmo comportamento
simples, como números inexplicáveis ​na tela. Testar o computador com uma cópia de um scanner de vírus up-to-date
criado antes que o programa suspeito é executado. Só se o programa passa estes testes, você deve instalá-lo em
uma máquina menos isolado.

• Abra anexos-e outros dados potencialmente infectados arquivos somente quando você
sei que eles sejam seguros. O que constitui “seguro” é com você, como você provavelmente já aprendeu neste
capítulo. Certamente, um anexo de uma fonte desconhecida é da segurança questionável. Você também pode
desconfiar de um anexo de uma fonte conhecida, mas com uma mensagem peculiar ou descrição.

• Instalar o código executável potencialmente infectados com software e outros arquivos somente quando você
realmente sabe que eles sejam seguros. Quando um pacote de software pede para instalar o software em seu sistema
(incluindo plug-ins ou objetos auxiliares do navegador), ser muito suspeita.

• Reconhecem que qualquer site pode ser potencialmente prejudicial. Você pode razoavelmente assumir que os sites
executado por e para hackers são arriscados, como são os locais que servem a pornografia, escalpelamento bilhetes, ou
vendendo contrabando. Você também pode ser cauteloso em sítios localizados em certos países; Rússia, China, Brasil,
Coréia e Índia são muitas vezes perto do topo da lista para a maior proporção de web sites que contêm código malicioso.
Um web site pode ser localizado em qualquer lugar, embora um .cn ou .ru no final de uma URL associa o domínio com a
China ou a Rússia, respectivamente. No entanto, os Estados Unidos também é muitas vezes elevados em tais listas por
causa do grande número de provedores de hospedagem web localizados lá.

• Fazer uma imagem recuperável do sistema e armazená-lo com segurança. Se o seu sistema se torne infectado, esta
versão limpa vai deixar você reiniciar de forma segura porque ele substitui os arquivos de sistema corrompidos com
cópias limpas. Por esta razão, você deve manter o write-protegida imagem durante a reinicialização. Prepare esta
imagem agora, antes da infecção; após a infecção seja tarde demais. Por razões de segurança, prepare uma cópia extra
da imagem de inicialização segura.

• Fazer e manter cópias de backup de arquivos de sistema executáveis. Desta forma, em caso de uma
infecção por vírus, você pode remover os arquivos infectados e reinstalar a partir das limpas cópias de segurança
(armazenados em um local seguro, fora de linha, é claro). Também fazer e manter backups de arquivos de dados
importantes que podem conter código infectáveis; esses arquivos incluem documentos de processador de texto,
planilhas, apresentações de slides, imagens, arquivos de som e bancos de dados. Manter esses backups em mídia de
baixo custo, tais como CDs ou DVDs, um dispositivo de memória flash ou um disco removível para que você possa
manter backups antigos por um longo tempo. No caso de você encontrar uma infecção, você quer ser capaz de iniciar
a partir de um backup limpo, ou seja, uma tomada antes da infecção. Como para bloquear vulnerabilidades do
sistema, a recomendação é clara, mas problemático. À medida que novas vulnerabilidades tornou conhecido você
deve aplicar patches. Contudo, encontrar falhas e corrigi-los sob pressão de tempo é muitas vezes menos do que
perfeitamente eficaz. ataques de dia zero são especialmente problemáticos, porque uma vulnerabilidade
presumivelmente desconhecido para os escritores de software está agora a ser explorado, por isso, o fabricante vai
pressionar a equipe de desenvolvimento e manutenção difícil de desenvolver e disseminar uma correção. Além disso,
os sistemas de executar muitos produtos de software diferentes de diferentes fornecedores, mas remendo de um
fornecedor não pode e não considera possíveis interacções com outros softwares. Deste modo, não só pode um
remendo não reparar a falha para o qual foi concebido, mas ele pode falhar ou causar falha em conjunto com outro
software. Na verdade, os casos têm surgido onde um patch para uma aplicação de software foi “reconhecido”
incorretamente por um verificador antivírus para ser malicioso código eo sistema tem terreno a um impasse. Portanto,
raramente saber com antecedência.

Ainda assim, uma boa higiene e auto-defesa são importantes controles usuários podem tomar contra códigos maliciosos. A maioria dos
usuários contam com ferramentas, chamado de scanners de vírus ou detectores de códigos maliciosos, para se proteger contra código
malicioso que de alguma forma faz com que seja em um sistema.

detectores de vírus são poderosos, mas não todo-poderoso. Detectores de

vírus

scanners de vírus são ferramentas que buscam sinais de infecção por código malicioso. A maioria dessas ferramentas procurar uma
assinatura ou impressão digital, um padrão revelador em arquivos de programa ou memória. Como mostramos nesta seção, ferramentas de
detecção são geralmente eficazes, o que significa que eles detectam a maioria dos exemplos de códigos maliciosos que são, no máximo,
um pouco sofisticado. ferramentas de detecção têm duas grandes limitações, no entanto.

Primeiro, ferramentas de detecção são necessariamente retrospectiva, à procura de padrões de infecções conhecidas. À medida que
novos tipos de códigos infecciosa são desenvolvidas, as ferramentas precisam ser atualizados freqüentemente com novos padrões. Mas
mesmo com atualizações freqüentes (a maioria dos fornecedores de ferramentas de recomendar atualizações diárias), haverá infecções
que são demasiado novo para ter sido analisados ​e incluídos no último arquivo padrão. Assim, um escritor código malicioso tem uma
breve janela, tão pouco como horas ou um dia, mas talvez mais, se uma nova cepa foge conhecimento dos analistas teste padrão,
durante o qual o padrão do esforço não vai estar no banco de dados. Mesmo que um dia é uma pequena janela de oportunidade, é
suficiente para alcançar danos significativos.

Em segundo lugar, os padrões são necessariamente estático. Se um código malicioso começa sempre com, ou mesmo contém, os
mesmos quatro instruções, o código binário dessas instruções pode ser o padrão invariante para que as buscas de ferramentas. Porque
escritores ferramenta quer evitar misclassifying bom código como malicioso, eles buscam o padrão mais longo eles podem: dois programas,
um bom e um mal-intencionado, pode por acaso contêm os mesmos quatro instruções. Mas quanto mais longa a cadeia padrão, a menos
provável que um programa benigno irá corresponder a esse padrão, de modo que padrões mais longos são desejáveis. códigos maliciosos
estão conscientes de correspondência de padrões, para que eles variam seu código para reduzir o número de padrões repetidos. Às vezes,
pequenas perturbações na ordem de instruções é insignificante. Assim, no exemplo, o padrão dominante pode ser instruções ABCD, nessa
ordem. Mas a lógica do programa pode funcionar tão bem com instruções BACD, então o escritor de malware vai enviar metade do código
com instruções ABCD e metade com BACD. Não fazer nada instruções, como a adição ou subtração de 0 1 e posterior adição de 1
novamente ou substituir uma variável de dados com si só, pode ser deslizado em código em vários pontos para quebrar padrões repetitivos.
padrões mais longos são mais propensos a ser quebrado por uma modificação do código. Assim, os escritores ferramenta detector de vírus
têm de discernir mais padrões para que verificar. pode ser deslizado em código em vários pontos para quebrar padrões repetitivos. padrões
mais longos são mais propensos a ser quebrado por uma modificação do código. Assim, os escritores ferramenta detector de vírus têm de
discernir mais padrões para que verificar. pode ser deslizado em código em vários pontos para quebrar padrões repetitivos. padrões mais
longos são mais propensos a ser quebrado por uma modificação do código. Assim, os escritores ferramenta detector de vírus têm de
discernir mais padrões para que verificar.

Ambos pontualidade e variação limitar a eficácia dos detectores de códigos maliciosos. Ainda assim, essas ferramentas são muito
bem sucedidas, e assim nós estudá-los agora. Você também deve observar em
Sidebar 3-9 que as ferramentas de antivírus também pode ajudar as pessoas que não usar as ferramentas.

Symantec, fabricante dos pacotes de software antivírus Norton, anunciou em 04 de maio de 2014 Wall Street
Journal artigo que a tecnologia antivírus está morto. Eles alegam que reconhecer um código malicioso em um sistema
é um jogo de gato-e-rato: assinaturas de malware
sempre reativa, refletindo padrões de código descobertos ontem, e heurísticas detectar comportamentos suspeitos, mas deve
encaminhar amostras de código para um laboratório para análise humana e confirmação. Os atacantes estão ficando mais
hábil em escapar detecção por ambos os buscadores de padrões e detectores de heurísticas. Além disso, no artigo,
vice-presidente sênior da Symantec de Segurança da Informação admitiu que o software antivírus pega apenas 45 por cento
de código malicioso. No passado, outro fornecedor, FireEye, também denunciou essas ferramentas como ineficaz. Ambos os
fornecedores preferem os serviços de monitoramento e análise mais especializados, dos quais scanners antivírus são
tipicamente uma primeira linha de defesa.

Sidebar 3-9 Segurança gratuito

Sempre que a gripe ameaça, os governos apelar a todos os cidadãos para obter uma vacina contra a gripe.
Nem todo mundo faz, mas as vacinas conseguem manter-se a incidência de gripe, no entanto. Enquanto as
pessoas suficientes são vacinados, toda a população recebe proteção. Essa proteção é chamado de “rebanho
imunidade”, porque todos no grupo estão protegidos pelas ações de maior, geralmente por causa de vacinação
suficiente ocorre para evitar que a infecção se espalhe.

De forma semelhante, por vezes, partes de uma rede sem segurança estão protegidos pelas outras
partes que são seguras. Por exemplo, um nó em uma rede não podem assumir a despesa de software
antivírus ou um firewall, sabendo que um vírus ou intruso não é susceptível de obter longe se os outros na
rede são protegidos. Assim, o “parasitismo” age como um desincentivo a pagar pela segurança; aquele que
foge de segurança recebe o benefício de uma boa higiene dos outros.

O mesmo tipo de free-riding desencoraja relatórios de ataques de segurança e violações. Como vimos,
pode ser caro para uma organização atacou para relatar um problema, não apenas em termos dos
recursos investidos na elaboração de relatórios, mas também em efeitos negativos sobre a reputação ou o
preço das ações. Então, free-riding fornece um incentivo para uma organização atacou de esperar por
alguém para relatá-lo, e então beneficiar de resolução do problema. Da mesma forma, se uma segunda
organização experimenta um ataque e compartilha suas informações e técnicas de resposta de sucesso
com os outros, a primeira organização recebe os benefícios sem ter de suportar qualquer dos custos.
Assim, os incentivos importa, e tecnologia sem incentivos para entender e usá-lo corretamente pode ser
de fato a tecnologia ineficaz.

Será que esta estatística significa que as pessoas devem abandonar verificadores de vírus? Não, por duas razões. Em
primeiro lugar, 45 por cento ainda representa uma defesa sólida, quando você considera que há agora mais de 200 milhões
de exemplares de códigos maliciosos em circulação [ MCA14 ]. Em segundo lugar, reconhecer que a entrevista estava no Wall
Street Journal, uma publicação popular para os executivos de negócios e finanças. Os produtos antivírus ganhar dinheiro;
caso contrário, não haveria tantos deles no mercado. No entanto, serviços de consultoria pode fazer ainda mais dinheiro,
também. O executivo Symantec foi fazendo o ponto que as empresas, cujos executivos ler a Wall Street Journal, preciso
investir também na assessores que vai estudar a atividade de computação de uma empresa, identificar deficiências e
recomendar remediação. E em caso de um incidente de segurança, as organizações terão conselhos semelhantes sobre a
causa do caso, a quantidade ea natureza dos danos sofridos, e os próximos passos para aumentar a proteção.
assinaturas de vírus

Um vírus não pode ser completamente invisível. Código deve ser armazenado em algum lugar, eo código deve estar na
memória para executar. Além disso, o vírus é executado de um modo particular, utilizando certos métodos para espalhar. Cada
uma destas características produz um padrão revelador, chamado de assinatura, que pode ser encontrado por um programa que
olha para ele. A assinatura do vírus é importante para a criação de um programa, denominado um scanner de vírus, que pode
detectar e, em alguns casos, remover vírus. A pesquisas de scanner de memória e armazenamento a longo prazo, monitorar a
execução e prestando atenção para as assinaturas reveladores de vírus. Por exemplo, um scanner à procura de sinais do worm
Code Red pode olhar para um padrão contendo os seguintes caracteres:

Clique aqui para ver a imagem de código

/default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN% u9090% u6858%
ucbd3
% U7801% u9090% u6858% ucdb3% u7801% u9090% u6858% ucbd3%
u7801% u9090
% U9090% u8190% u00c3% u0003% ub00% u531b% u53ff% u0078%
u0000% U00 = um HTTP / 1.0

Quando o scanner reconhece padrão de um vírus conhecido, ele pode bloquear o vírus, informar o usuário, e
desactivar ou remover o vírus. No entanto, um antivírus só é eficaz se tiver sido manter-se atualizado com as
últimas informações sobre os vírus atuais.

Os criadores de vírus e fabricantes de ferramentas de antivírus se envolver em uma batalha para

esconder padrões e encontrar essas regularidades. Análise de código

Outra abordagem para a detecção de uma infecção é analisar o código para determinar o que faz, como
ele se propaga e talvez até onde se originou. Essa tarefa é difícil, no entanto.

A primeira dificuldade com análise de código é que o pesquisador normalmente tem apenas o produto final para olhar.
Como A Figura 3-24 mostra, um programador escreve o código de alguma linguagem de alto nível, como C, Java ou C #.
Esse código é convertido por um compilador ou intérprete em código objecto intermediário; um ligador adiciona código de
rotinas de biblioteca padrão e empacota o resultado em código de máquina que é executável. O código de linguagem de alto
nível usa nomes, comentários e técnicas de documentação variáveis ​significativas para tornar o código significativo, pelo
menos para o programador.
FIGURA 3-24 O processo de compilação: (a) a compilação. (B) Decompilation Durante a compilação, toda a
estrutura e documentação são perdidos; apenas as instruções matérias são preservadas. Para carregar um programa para
execução, um ligador mescla chamado rotinas de biblioteca e executa tradução de endereços. Se o código for destinado a
propagação, o atacante também pode invocar um acondicionador, uma rotina que retira outra informação de identificação
e minimiza o tamanho do bloco de código combinado.

Em caso de uma infestação, um analista pode ser chamado. O analista começa com código que foi
realmente execução, ativa na memória do computador, mas que pode representar apenas uma parte do
pacote malicioso real. Escritores interessados ​em discrição limpar, purga de memória ou disco de
instruções desnecessários que foram necessários uma vez, apenas para instalar o código infecciosa. Em
qualquer caso, a análise começa a partir de instruções de máquina. Usando uma ferramenta chamada
um disassembler, o analista pode converter instruções binárias em linguagem de máquina para seus
equivalentes em linguagem assembly, mas a trilha pára por aí. Estas instruções em linguagem assembly
tem nenhuma documentação informativa, nomes de variáveis, estrutura, rótulos ou comentários, e a
representação linguagem assembler de um programa é muito menos fácil de entender do que sua
contraparte linguagem de alto nível. Portanto,

laboratórios de pesquisa de segurança fazem um excelente trabalho de monitoramento e análise de código malicioso, mas tal
análise é necessariamente uma operação de pequenos passos com microscópio e pinças. (A frase microscópio e uma pinça é
atribuído a Jerome Saltzer em [ EIC89 ].) Mesmo com ferramentas de análise, o processo depende fortemente da engenhosidade
humana. Em Capítulo 10 expandimos em equipes que fazem de resposta a incidentes e análise.

análise ponderada com “pinças microscópio e” depois de um ataque deve complementar as ferramentas

preventivas, tais como detectores de vírus. Padrões de armazenamento

A maioria dos vírus atribuem aos programas que são armazenados em mídias como discos. A peça vírus
anexado é invariante, de modo que o início do código do vírus torna-se uma assinatura detectável. A peça anexada
está sempre localizado na mesma posição em relação ao seu arquivo anexado. Por exemplo, o vírus pode sempre
estar no início, a 400 bytes do topo ou na parte inferior do arquivo infectado. Provavelmente, o vírus será no início
do arquivo
porque o escritor do vírus quer controlar a execução antes do código de boa-fé do programa infectado está no comando.
No caso mais simples, o código do vírus está no topo do programa, e de todo o vírus faz o seu dever malicioso antes que o
código normal é invocado. Em outros casos, a infecção pelo vírus é composto de apenas um punhado de instruções que
ponto ou saltar para outros, mais detalhadas, instruções em outro lugar. Por exemplo, o código infectado pode consistir de
teste condição e um salto ou uma chamada para um módulo de vírus separadas. Em qualquer caso, o código para a qual o
controlo é transferido também terá um padrão reconhecível. Ambas as situações são mostrados na A Figura 3-25 .

FIGURA 3-25 Padrões reconhecíveis em vírus

Um vírus pode juntar-se a um arquivo, caso em que o tamanho do arquivo cresce. Ou o vírus pode apagar todo ou
parte do programa subjacente, caso em que o tamanho do programa não muda, mas o funcionamento do programa será
prejudicada. O escritor vírus tem que escolher um desses efeitos detectáveis.

O verificador de vírus pode usar um código ou soma de verificação para detectar alterações em um arquivo. Ele também pode procurar
por padrões suspeitos, tais como uma instrução de salto como a primeira instrução de um programa de sistema (no caso o vírus tenha se
posicionado na parte inferior do arquivo, mas é para ser executado primeiro, como vimos no A Figura 3-25 ).

Contramedidas para desenvolvedores

Neste contexto ameaça você pode perguntar como é que alguém pode sempre fazer confiáveis ​programas impecável
seguras,,. Como o tamanho ea complexidade dos programas cresce, o número de possibilidades para o ataque faz,
também.

Nesta seção, vamos examinar brevemente algumas técnicas de engenharia de software que têm sido mostrados para melhorar a
segurança do código. Claro, esses métodos devem ser utilizados de forma eficaz, para um bom método utilizado indevidamente ou
ingenuamente não vai fazer programas melhor por magia.
Idealmente, os desenvolvedores devem ter um conhecimento razoável de segurança e, especialmente, de pensar em termos de
ameaças e vulnerabilidades. Armado com essa mentalidade e as boas práticas de desenvolvimento, os programadores podem
escrever código que mantém a segurança.

Técnicas de Engenharia de Software

Código normalmente tem uma vida útil longa e é reforçada ao longo do tempo conforme as necessidades e falhas são encontrados e
corrigidos. Por esta razão, um princípio fundamental da engenharia de software é criar um projeto ou código em pequenas unidades,
auto-suficientes, chamados componentes ou módulos; quando um sistema é escrito desta forma, dizemos que ela é modular. Modularidade
oferece vantagens para o desenvolvimento do programa em geral e de segurança, em particular.

Se um componente é isolado a partir dos efeitos de outros componentes, então o sistema é concebido de uma maneira
que limita o dano de qualquer falha provoca. Manutenção do sistema é mais fácil, porque qualquer problema que surge se
conecta com a falha que causou. Testing (especialmente os testes de tomada de regressão certeza de que tudo ainda
funciona quando você faz uma mudança corretiva) é mais simples, uma vez que alterações em um componente isolado não
afetam outros componentes. E os desenvolvedores podem facilmente ver onde vulnerabilidades pode mentir se o componente
é isolado. Chamamos esse isolamento encapsulamento.

ocultação de informações é outra característica do software modular. Quando a informação é escondida, cada componente
esconde sua implementação precisa ou algum outro design decisão dos outros. Assim, quando é necessária uma mudança, o
projeto total pode permanecer intacta enquanto apenas as mudanças necessárias são feitas para componentes específicos.

Vejamos essas características com mais detalhes.

Modularidade

Modularização é o processo de dividir uma tarefa em subtarefas, como representado na Figura 3- 26 . Esta divisão é feita
geralmente em uma base lógica ou funcional, de modo que cada componente executa uma parte separada, independente da
tarefa. O objetivo é que cada componente para preencher quatro condições:

• um único propósito, realiza uma função


• pequeno, consiste de uma quantidade de informação para que um ser humano pode facilmente compreender a
estrutura e conteúdo

• simples, é de um baixo grau de complexidade de forma que um ser humano pode prontamente
compreender o propósito e estrutura do módulo

• independente, executa uma tarefa isolado a partir de outros módulos


FIGURA 3-26 Modularidade

Outras características de componentes, tais como tendo uma única entrada e de saída único ou usando um conjunto limitado
de construções de programação, indicam modularidade. Do ponto de vista de segurança, modularidade deve melhorar a
probabilidade de que uma implementação está correta.

Em particular, pequenez e ajuda simplicidade desenvolvedores e analistas de entender o que cada componente faz. Ou
seja, em bom software, unidades de design e de programa deve ser apenas tão grande ou complexo como necessárias para
realizar suas funções necessárias. Existem várias vantagens em ter componentes pequenos e independentes.

• Manutenção. Se um componente implementa uma única função, ele pode ser substituído facilmente com
uma revista, se necessário. O novo componente pode ser necessária por causa de uma mudança nos
requisitos, hardware, ou ambiente. Às vezes, a substituição é um acessório, usando um módulo menor,
mais rápido, mais correto, ou de outra forma melhor. As interfaces entre esse componente e o restante do
projeto ou código são poucos e bem descrita, de modo que os efeitos da substituição são evidentes.

• Compreensibilidade. Um sistema composto de componentes pequenos e simples é geralmente mais fácil de


compreender do que um bloco grande, não estruturada de código.

• Reuso. Componentes desenvolvidos para uma finalidade muitas vezes podem ser reutilizados em outros sistemas.
Reutilização de componentes de design ou código correto, existentes pode reduzir significativamente a dificuldade de
implementação e testes.

• Exatidão. A falha pode ser rapidamente rastreados para a sua causa se os componentes executar apenas uma
tarefa cada.

• Testing. Um componente único com entradas bem definidas, saídas e a função pode ser testado
exaustivamente por si só, sem a preocupação dos seus efeitos sobre outros módulos (excepto a função
esperada e de saída, é claro).
Simplicidade de design de software melhora a correção e manutenção.

Um componente modular geralmente tem alta coesão e baixo acoplamento. Por coesão, queremos dizer que todos os
elementos de um componente tem uma razão lógica e funcional para estar lá; todos os aspectos do componente está
vinculado a finalidade única do componente. Um componente altamente coesivo tem um alto grau de foco da finalidade; um
baixo grau de coesão significa que o conteúdo do componente é um amontoado independentes de ações, muitas vezes
juntos por causa das dependências de tempo ou conveniência.

Acoplamento refere-se ao grau com que um componente depende de outros componentes no sistema. Assim, acoplamento
de baixo ou soltos é melhor do que o acoplamento de alta ou apertado porque os componentes fracamente acoplados são livres
de interferência involuntária de outros componentes. Esta diferença de acoplamento é mostrado na A Figura 3-27 .

FIGURA 3-27 Tipos de Acoplamento

encapsulamento

Encapsulamento esconde os detalhes de implementação de um componente, mas não significa necessariamente que o
isolamento completo. Muitos componentes devem compartilhar informações com outros componentes, geralmente com boa razão.
No entanto, esta partilha é cuidadosamente documentadas para que um componente é afetado apenas em formas conhecidas de
outros componentes do sistema. Sharing é minimizado para que são utilizados nas interfaces menor número possíveis.

limite de proteção de um componente encapsulado pode ser translúcido ou transparente, conforme necessário.
Berard [ BER00 ] Observa que encapsulamento é a “técnica para embalagem da informação [dentro de um
componente] de tal forma a esconder o que deve ser escondido e tornar visível o que se destina a ser visível.”

ocultação de informações

Os desenvolvedores que trabalham onde modularização está estressado pode ter certeza que outros componentes
terão efeito limitado sobre os que escrevem. Assim, podemos pensar em um componente como uma espécie de caixa
preta, com algumas entradas e saídas bem definidas e uma função bem definida. designers de outros dos componentes
não precisa saber como o módulo completa a sua função; é o suficiente para ter certeza de que o componente executa sua
tarefa de alguma maneira correta.

ocultação de informações: descrevendo o que um módulo faz, não como

Esta ocultação é a ocultação de informações, representado na A Figura 3-28 . ocultação de informações


é desejável, porque os desenvolvedores maliciosos não podem facilmente alterar os componentes de outros, se eles não sabem como
os componentes funcionam.

FIGURA 3-28 ocultação de informações

Suspeita mútua

Programas nem sempre são confiáveis. Mesmo com um sistema operacional para impor limitações de acesso, pode ser
impossível ou inviável obrigado os privilégios de acesso de um programa não testada de forma eficaz. Neste caso, o usuário
U é legitimamente suspeita de um novo programa P. No entanto, o programa de P pode ser invocado por outro programa, Q.
Não há nenhuma maneira para Q saber que P é correto ou adequado, mais do que um usuário conhece a de P.

Por isso, usamos o conceito de suspeita mútua para descrever a relação entre dois programas. Mutuamente programas suspeitos
operar como se outras rotinas no sistema foram malicioso ou incorreta. Um programa de chamada não pode confiar em seus chamados
subprocedimentos para ser correto, e uma chamada OnFilterComboChange não pode confiar em seu programa de chamada para ser
correto. Cada protege seus dados de interface de modo que o outro tem apenas um acesso limitado. Por exemplo, um procedimento
para classificar as entradas em uma lista não se pode confiar em não modificar esses elementos, enquanto que esse procedimento não
pode confiar em seu chamador para fornecer qualquer lista em tudo ou fornecer o número de elementos previsto. Um exemplo de
confiança deslocada é descrito em Sidebar 3-10 .

Sidebar 3-10 Facebook Interrupção de tratamento de erros inadequada

Em setembro de 2010 o site de rede social popular Facebook foi obrigado a fechar por várias horas. De
acordo com uma postagem pelo representante da empresa Robert Johnson, a causa raiz foi uma condição
de erro manuseados incorrectamente.

Facebook mantém em um armazenamento persistente de um conjunto de parâmetros de configuração que


são então copiados para armazenar em cache para uso comum. Código verifica a validade de parâmetros no
cache. Se ele encontrar um valor inválido, ele busca o valor do armazenamento persistente e usa-lo para
substituir o valor cache. Assim, os desenvolvedores assumiu o valor de cache pode ser corrompido, mas o valor
persistente seria sempre preciso.

Em setembro 2010 exemplo, a equipe erroneamente colocado um valor incorreto no armazenamento


persistente. Quando este valor foi propagada para o cache, rotinas de verificação identificou-o como errônea e
causou o controlador de cache para buscar o valor do armazenamento persistente. O valor armazenamento
persistente, é claro, estava errada, por isso, logo que as rotinas de verificação examinou-a, eles novamente
chamado para a sua substituição do armazenamento persistente. Esta constante busca do armazenamento
persistente levou a uma sobrecarga no servidor que mantém o armazenamento persistente, que por sua vez
levou a uma degradação grave no desempenho global.

engenheiros do Facebook foram capazes de diagnosticar o problema, concluindo que a melhor solução era para
desativar todas as atividades Facebook e, em seguida, corrigir o valor armazenamento persistente. Eles
gradualmente permitiu clientes do Facebook para reativá-lo; como cada cliente detectou um valor imprecisas em
seu cache, seria atualizá-la a partir do valor correto no armazenamento persistente. Desta forma, a expansão
gradual de serviços permitiu que esses pedidos de atualização ocorra sem sobrecarregar o acesso ao servidor de
armazenamento persistente.

Um projeto de mútua suspeita, não assumindo implicitamente o cache está errado e o armazenamento
persistente é direito do teria evitado essa catástrofe.

Confinamento

O confinamento é uma técnica usada por um sistema operacional em um programa suspeito de ajudar a garantir que
possíveis danos não se espalhou para outras partes de um sistema. UMA confinado
programa é estritamente limitado no que recursos do sistema pode acessar. Se um programa não é confiável, os dados que
podem acessar são estritamente limitados. confinamento forte seria particularmente útil para limitar a propagação do vírus.
Uma vez que um vírus se espalha por meio de transitividade e dados compartilhados, todos os dados e programas dentro de
um único compartimento de um programa delimitado pode afetar apenas os dados e programas no mesmo compartimento.
Portanto, o vírus pode se espalhar apenas para coisas em que o compartimento; ele não pode ficar fora do compartimento.

Simplicidade

O caso de simplicidade, de design e implementação-deve ser auto-evidente: soluções simples são mais fáceis de
entender, deixar menos espaço para erros, e são mais fáceis de rever para falhas. O valor da simplicidade é mais
profundo, no entanto.

Com um design simples, todos os membros da equipe de projeto e implementação pode entender o papel eo
âmbito de cada elemento do design, de modo que cada participante sabe não só o que esperar outros a fazer, mas
também o que os outros esperam. Talvez o pior problema de um sistema em execução é a manutenção: Depois de
um sistema tem funcionado por algum tempo, e os designers e programadores estão trabalhando em outros
projetos (ou talvez mesmo em outras empresas), aparece uma falha e alguns membro júnior equipe azar é
atribuída a tarefa de corrigir a falha. Sem fundo no projeto, este membro da equipe deve tentar intuir as visões dos
criadores originais e entender todo o contexto da falha bem o suficiente para corrigi-lo. Um projeto simples e
implementação facilita a manutenção correta.

Hoare [ HOA81 ] Faz o caso simplesmente por simplicidade do design:

Eu dei advertências desesperadas contra a obscuridade, a complexidade, e overambition do novo


design, mas as minhas advertências foram ignoradas. Concluo que há duas maneiras de construir
um projeto de software: É uma maneira de torná-lo tão simples que existem obviamente há
deficiências e a outra maneira é torná-lo tão complicado que não existem óbvio

deficiências.

Em 2014 o web site para a conferência anual de segurança de computador RSA foi
comprometida. Amit Yoran, Vice-Presidente Sênior de Produtos e Vendas da RSA, a empresa-mãe que fundou
a conferência e apoia financeiramente, falou sobre a questão. “Infelizmente, a complexidade é muitas vezes o
inimigo da segurança”, concluiu ele, enfatizando que ele estava falando para RSA e não para web site da
conferência da RSA, um separado entidade [ KRE14 ].

“A complexidade é muitas vezes o inimigo da segurança.” - Amit Yoran, a diversidade genética

RSA

Em sua loja de eletrônicos local você pode comprar uma máquina de impressão, scanner e copiadora-fax combinação. Ele
vem em um bom preço (em comparação com os custos de comprar os quatro componentes em separado) porque há uma
sobreposição considerável na implementação da funcionalidade entre os quatro. Além disso, o dispositivo multifuncional é
compacto, e você precisa instalar apenas um dispositivo em seu sistema, e não quatro. Mas, se alguma parte dela falhar, você
perde um monte de recursos de uma só vez. Então a máquina polivalente representa os tipos de trade-offs entre funcionalidade,
economia e disponibilidade que fazemos em qualquer projeto do sistema.

Uma decisão arquitectónica sobre esses tipos de dispositivos está relacionada com os argumentos acima de modularidade,
ocultação de informações e reutilização ou a permutabilidade de software
componentes. Por estas razões, algumas pessoas recomendam heterogeneidade ou “diversidade genética” em
arquitetura de sistema: Ter muitos componentes de um sistema vêm de uma fonte ou de depender de um único
componente é arriscada, dizem.

No entanto, muitos sistemas são de fato bastante homogéneo neste sentido. Por razões de conveniência e custo,
que muitas vezes projetar sistemas com software ou hardware (ou ambos) de um único fornecedor. Por exemplo, nos
primórdios da computação, era conveniente para comprar hardware “empacotados” e software de um único fornecedor.
Havia menos decisões para o comprador de fazer, e se algo desse errado, apenas uma chamada de telefone foi
necessária para iniciar a resolução de problemas e manutenção. Daniel Geer et ai. [ GEE03a ] Examinou a monocultura
da computação dominada por um fabricante, muitas vezes caracterizada pela Apple ou o Google hoje, Microsoft ou IBM
ontem, amanhã desconhecido. Eles olharam para a situação em paralelo em agricultura, em que uma cultura inteira
pode ser vulnerável a um único agente patogénico. Em computação, o equivalente patogênico pode ser códigos
maliciosos contra o worm Morris ao vírus Code Red; estes “infecções” foram especialmente prejudicial porque uma
proporção significativa de computadores do mundo foram desativados porque eles correram versões dos mesmos
sistemas operacionais (Unix para Morris, Windows for Code Red).

Diversidade cria um alvo móvel para o adversário. Como Per Larson e seus colegas explicam [ LAR14 ], Introduzindo
diversidade automaticamente é possível, mas complicado. Um compilador pode gerar código objeto diferente, mas
funcionalmente equivalente de um arquivo de origem; reordenação declarações (onde não há nenhuma dependência
funcional na ordem), usando diferentes layouts de armazenamento, e até mesmo adicionando instruções inúteis, mas
inofensivos ajuda a proteger uma versão do dano que possa afetar outra versão. No entanto, o código objeto de saída
diferente pode criar um pesadelo para a manutenção do código.

Diversidade reduz o número de alvos sensíveis a um tipo de ataque.


Em 2014 muitos computadores e sites foram afetados pela chamada malwares heartbleed, que explorava uma
vulnerabilidade no software OpenSSL amplamente utilizado. SSL (Secure Socket Layer) é uma técnica de criptografia
pela qual as comunicações do navegador web estão garantidos, por exemplo, para proteger a privacidade de uma
transação bancária. (Nós cobrir SSL em
Capítulo 6 .) A implementação OpenSSL é utilizado pela maioria dos sites; dois pacotes grandes utilizando uma conta
OpenSSL para mais de 66 por cento dos sites que usam SSL. Porque a adoção de OpenSSL é tão vasto, esta
vulnerabilidade afeta um grande número de sites, colocando a maioria dos utilizadores da Internet em risco. O aviso sobre a
falta de diversidade no software é especialmente relevante aqui. No entanto, a criptografia é um tema delicado; mesmo
corretamente o código escrito pode vazar informações confidenciais, para não mencionar as inúmeras maneiras sutis tal
código pode estar errado. Assim, não é um bom argumento para ter um pequeno número de implementações criptográficas
que os analistas podem escrutinar de forma rigorosa. Mas código comum apresenta um ponto único ou comum para o
fracasso em massa.

Além disso, a diversidade é caro, como grandes usuários, como empresas ou universidades devem manter
vários tipos de sistemas em vez de focar seus esforços em apenas um. Além disso, a diversidade seria
substancialmente reforçada por um grande número de produtos concorrentes, mas a economia de mercado tornam
difícil para muitos fornecedores de todo o lucro suficiente para permanecer no negócio. Geer refinou o argumento
em [ GEE03 ], Que foi debatido por James Whittaker [ WHI03b ] E David Aucsmith [ AUC03 ]. Não há solução certa
óbvia para este dilema.

A forte integração de produtos é uma preocupação similar. O sistema operacional Windows está intimamente ligado ao
Internet Explorer, o pacote Office, e o manipulador de email Outlook. Uma vulnerabilidade em um desses também pode
afetar os outros. Devido à forte integração, fixando uma vulnerabilidade em um subsistema pode ter um impacto sobre os
outros. Por outro lado, com uma arquitetura mais diversificada (em termos de fornecedores), uma vulnerabilidade no
navegador de outro fornecedor, por exemplo, pode afetar a Palavra apenas na medida em que os dois sistemas se
comunicar através de uma interface bem definida.

Uma forma diferente de mudança ocorre quando um programa é carregado na memória para execução.
randomização endereço-espaço-de layout é uma técnica pela qual um módulo é carregado em locais diferentes em momentos
diferentes (usando um dispositivo semelhante a deslocalização base e delimita registos, descrito em capítulo 5 ). No entanto,
quando um módulo inteiro é realocado como uma unidade, a obtenção de um endereço real dá ao atacante a chave para calcular
os endereços de todas as outras partes do módulo.

Em seguida, virar de produto para processo. Como é bom software produzido? Tal como acontece com as propriedades do
código, estas abordagens do processo não são uma receita: fazer essas coisas não garante um bom código. No entanto, como
as características de código, esses processos tendem a refletir abordagens de pessoas que desenvolvem software seguro com
sucesso.

prova

O teste é uma atividade de processo que se concentra na qualidade do produto: Busca para localizar falhas potenciais
produtos antes que eles realmente ocorrer. O objetivo do teste é fazer com que a falha do produto livre (eliminando a
possibilidade de falha); realisticamente, no entanto, o teste será somente para reduzir a probabilidade ou a limitar o impacto
das falhas. Cada problema de software (especialmente quando se refere a segurança) tem o potencial não apenas para tornar
o software falha
mas também para prejudicar um negócio ou uma vida. A falha de um controlo pode expor uma vulnerabilidade que não é melhorada
por qualquer número de controlos de funcionamento. Testadores de melhorar a qualidade do software por encontrar tantas falhas
quanto possível e cuidadosamente documentar suas descobertas para que desenvolvedores possam localizar as causas e reparar
os problemas, se possível.

O teste é mais fácil dizer do que fazer, e Herbert Thompson ressalta que testes de segurança é particularmente difícil [ THO03
]. James Whittaker observa no Blog Google Testing, 20 de agosto de 2010, que “Developers plantar árvores; testadores
gerir as florestas”, ou seja, o trabalho do testador é explorar a interação de muitos fatores. Os efeitos colaterais,
dependências, os usuários imprevisíveis e bases problemas de execução (linguagens, compiladores, infra-estrutura), tudo
contribui para esta dificuldade. Mas a complicação essencial com testes de segurança é que não podemos olhar apenas o
comportamento do programa obtém direito; nós também temos de olhar para as centenas de maneiras o programa pode
dar errado.

testes de segurança tenta antecipar as centenas de maneiras que um programa pode falhar. Tipos de

testes

Teste geralmente envolve várias etapas. Primeiro, cada componente do programa é testado por conta própria. Este tipo de teste,
conhecido como testes de módulo, o teste de componentes, ou teste de unidade, verifica se as funções dos componentes
adequadamente com os tipos de entrada esperadas de um estudo do design do componente. O teste de unidade é feito de modo a
que a equipa de teste pode alimentar um conjunto predeterminado de dados para o componente a ser testado e observar que as
acções e os dados de saída são produzidos. Além disso, a equipe de teste verifica as estruturas internas de dados, lógica e condições
de contorno para os dados de entrada e saída.

Quando conjuntos de componentes foram sujeitos a testes de unidade, o próximo passo é garantir que as interfaces entre os
componentes são definidas e tratadas adequadamente. De fato, a interface de incompatibilidade pode ser uma vulnerabilidade
de segurança significativa, de modo que o design da interface é muitas vezes documentada como um interface de programação
de aplicativo ou API. Teste de integração é o processo de verificar se os componentes do sistema trabalham em conjunto como
descrito nas especificações de projeto do sistema e do programa.

Uma vez que os desenvolvedores de verificar essa informação é passada entre os componentes de acordo com o seu design,
o sistema é testado para garantir que ele tem a funcionalidade desejada. UMA
teste de funcionamento avalia o sistema para determinar se as funções descritas pela especificação requisitos são
realmente executada pelo sistema integrado. O resultado é um sistema de funcionamento.

O teste de função compara o sistema que está sendo construído com as funções descritas na especificação de
requisitos dos promotores. Então uma teste de performance compara o sistema com o restante destes requisitos de
software e hardware. Durante os testes de função e de desempenho, testadores examinar os requisitos de segurança e
confirmar que o sistema é tão seguro quanto é necessário ser.

Quando o teste de desempenho é completa, os desenvolvedores estão certos de que as funções do sistema de
acordo com a sua compreensão da descrição do sistema. O próximo passo é conferenciar com o cliente para ter
certeza de que o sistema funciona de acordo com o cliente
expectativas. Desenvolvedores se juntar ao cliente para realizar uma teste de aceitação, em que o sistema é verificado em
relação descrição de requisitos do cliente. Após a conclusão do teste de aceitação, o sistema aceite é instalado no
ambiente em que vai ser utilizado. A última teste de instalação é executado para se certificar de que o sistema ainda
funciona como deveria. No entanto, os requisitos de segurança, muitas vezes afirmam que um sistema não deve fazer
algo. Como Sidebar 3-11 demonstra, ausência é mais difícil do que para demonstrar a presença.

Barra lateral 3-11 Ausência vs Presença

Charles Pfleeger [ PFL97 ] Assinala que os requisitos de segurança se assemelham aos de qualquer outra
tarefa de computação, com uma diferença aparentemente insignificante. Enquanto a maioria dos requisitos
de dizer “o sistema irá fazer isso”, requisitos de segurança adicionar a frase “e nada mais.” Como dissemos
no Capítulo 1 , Consciência da segurança exige mais do que um pouco de cautela quando um
desenvolvedor criativo toma liberdades com as especificações do sistema. Normalmente, não se preocupe
se um programador ou designer adiciona um pouco algo extra. Por exemplo, se a exigência chama para
gerar uma lista de arquivos em um disco, o “algo mais” pode ser classificar a lista em ordem alfabética ou
exibindo a data em que foi criado. Mas nós nunca esperaria de alguém para cumprir a exigência, exibindo
a lista e, em seguida, apagar todos os arquivos no disco!

Se nós poderia facilmente determinar se uma adição eram prejudiciais, poderíamos simplesmente não
permitir adições prejudiciais. Mas, infelizmente, não podemos. Por razões de segurança, devemos declarar
explicitamente a expressão “e nada mais” e deixar espaço para negociação na definição de requisitos em todas
as extensões propostas.

Programadores, naturalmente, querem exercer sua criatividade em estender e expandir os requisitos.


Mas escolhas aparentemente benignos, como armazenar um valor em uma variável global ou escrever para
um arquivo temporário, pode ter sérias implicações de segurança. E às vezes a melhor abordagem de
design para a segurança é o contra-intuitivo. Por exemplo, um ataque a um sistema criptográfico depende
medindo o tempo que leva o sistema para executar uma codificação. Com uma técnica de criptografia, o
tempo para criptografar depende da chave, um parâmetro que permite que alguém “desbloquear” ou
decodificar a criptografia; tempo de criptografia depende especificamente sobre o tamanho ou o número de
bits na chave. A medição do tempo ajuda a atacantes saber o comprimento da chave aproximada, para que
eles possam estreitar seu espaço de pesquisa nesse sentido (como descrito na Capítulo 2 ). Assim, uma
implementação eficiente pode realmente minar a segurança do sistema. A solução, curiosamente, é
artificialmente pad o processo de criptografia com computação desnecessária para que computações curtas
completos queridos tão lentamente quanto longos.

Em outro exemplo, um programador entusiasta adicionado verificação de paridade para um procedimento


de criptografia. Mas a geração de rotina as chaves não forneceu um pouco de verificação, apenas as próprias
chaves. Porque as chaves foram gerados aleatoriamente, o resultado foi que 255 das chaves de criptografia
256 falhou na verificação de paridade, levando à substituição de um fixo-chave de modo que sem aviso, todas
as criptografias estavam sendo realizadas sob a mesma chave!

Nenhuma tecnologia pode distinguir automaticamente extensões maliciosas


código benigna. Por esta razão, temos que contar com uma combinação de abordagens, incluindo aqueles
intensivos em humanos, para nos ajudar a detectar quando estamos indo além do âmbito dos requisitos e
ameaçando a segurança do sistema.

O objetivo da unidade e testes de integração é assegurar que o código implementado o projeto corretamente; isto é,
que os programadores têm escrito código para fazer o que os designers pretendido. teste de sistema tem um objetivo
muito diferente: para garantir que o sistema faz o que o cliente quer que ele faça. testes de regressão, um aspecto de
teste do sistema, é particularmente importante para fins de segurança. Após uma alteração é feita para melhorar o
sistema ou corrigir um problema, testes de regressão assegura que todas as funções restantes ainda estão trabalhando
e que o desempenho não foi degradada pela mudança. Como destacamos na 3- barra lateral 12 , Testes de regressão é
difícil porque essencialmente envolve reconfirmar todas as funcionalidades.

Sidebar 3-12 A Bug GOTO falha


Em fevereiro 2014 a Apple lançou um patch de manutenção para seu sistema operacional iOS. O
problema envolvido código para implementar SSL, a criptografia que protege as comunicações Web
seguras, como entre o navegador web do usuário e web site de um banco, por exemplo. O problema de
código, o que tem sido chamado de bug “GOTO Fail”, é mostrado no seguinte fragmento de código.

Clique aqui para ver a imagem de código

if ((err = SSLHashSHA1.update (& hashCtx, & serverRandom))


! = 0)
Goto falhar;
if ((err = SSLHashSHA1.update (& hashCtx,
! & SignedParams)) = 0) Goto falhar;
Goto falhar;

if ((err = SSLHashSHA1.final (& hashCtx, & hashOut))


! = 0)
Goto falhar; ...

falhou: SSLFreeBuffer (& signedHashes);

SSLFreeBuffer (& hashCtx); voltar err;

O problema está na sétima linha. Se as duas primeiras instruções condicionais são falsas, a
execução cai diretamente para goto duplicado falhar linha, e sai da rotina. O impacto desta falha é
que as ligações web mesmo inseguras são tratados como seguro.

A origem deste erro é desconhecida, mas parece que quer que outra instrução condicional
foi removido durante a manutenção (mas não a
correspondente acção condicional de Goto falha), ou um Goto extras falhar afirmação foi inadvertidamente
colada na rotina. Qualquer uma dessas possibilidades é uma compreensível, nonmalicious supervisão de
programação.

testes de regressão para pegar um tal erro de programação simples exigiria a criação de um caso de teste
complicado. Os programadores são muitas vezes pressionados durante a manutenção para completar
correções rapidamente, por isso não há tempo para o teste completo, o que poderia ser como esta falha
tornou-se parte da distribuição padrão do
sistema operacional.

A falha é pequeno e fácil de detectar quando você sabe que olhar para ele, embora seja linha 632 de
um arquivo 1970-linha, onde se destacam menos do que no fragmento reproduzimos aqui. O erro afetou
iPhones e iPads móveis, bem como os computadores Macintosh de mesa. Os patches lançados pela
Apple indicar o erro foi incorporado no código de produção por algum tempo. Para mais detalhes sobre
a falha,
Vejo Paulo ducklin de blogue postagem em
http://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-
explicado-bug-plus-um-não oficial-remendo / .

Cada um dos tipos de testes listados aqui pode ser realizada a partir de duas perspectivas: caixa preta e caixa clara (às
vezes chamado de caixa branca). teste de caixa-preta trata um sistema ou seus componentes como caixas pretas;
testadores não podem “ver dentro” do sistema, para que eles se aplicam entradas particulares e verificar se obter o resultado
esperado. teste Clear-caixa permite visibilidade. Aqui, os testadores podem examinar o projeto e código diretamente, gerando
casos de teste com base em construção real do código. Assim, o teste claro-box revela que o componente X usa instruções
caso e pode olhar para casos em que a entrada faz com que o controle para cair através de uma linha inesperado. teste de
caixa-preta deve contar mais com as entradas e saídas necessárias porque o código atual não está disponível para o
escrutínio.

James Whittaker em seu blog teste enumera sete principais ingredientes para testes ( http://googletesting.blogspot.c
). Resumimos a sua postagem aqui:

1. conhecimento do produto. O testador precisa entender os requisitos e funcionalidade do objeto que está
sendo testado. Mais importante, o testador deve ter familiaridade suficiente com o produto a ser capaz de
prever o que não pode fazer e ser capaz de forçá-lo em todas as suas configurações.

2. Cobertura. Teste deve ser completa, em que nenhum componente deve ser ignorado, não importa quão pequeno
ou insignificante.

3. Análise de risco. Teste nunca pode cobrir tudo. Assim, o teste sábio, ou seja, para gastar
recursos de teste sensata e eficaz, é necessário. A análise de risco responde às perguntas que
são as peças mais críticas e que pode ir muito errado? Deste a prioridade para o teste se torna
mais clara.

4. experiência de domínio. Um testador deve entender o produto que está sendo testado. Trivialmente, alguém não
pode efetivamente testar um conversor de Fahrenheit-to-centígrados sem entender essas duas escalas de
temperatura.

5. vocabulário comum. Há pouco vocabulário comum para testar; até mesmo termos como teste de caixa-preta
estão sujeitos a alguma interpretação. Mais importante, os testadores precisam ser capazes de compartilhar
padrões e técnicas uns com os outros, e para fazer isso, testadores precisa de algum entendimento comum do
processo maior.

6. Variação. O teste não é um exercício de lista de verificação; se fosse, teríamos automatizar todo o processo,
deixe uma máquina de fazê-lo, e nunca ter falhas do produto. Testadores precisa variar sua rotina, testar coisas
diferentes de formas diferentes, e adaptar-se a sucessos e fracassos.
7. Limites. Como o teste pode continuar indefinidamente, algum conceito de completude e
suficiência é necessário. Às vezes, os recursos finitos de tempo ou dinheiro ditar o quanto o teste é
feito. A melhor abordagem é um plano racional que determina o grau de teste é adequada.

Eficácia do Teste

A mistura de técnicas adequadas para teste de um dado sistema depende do tamanho do sistema, o domínio de
aplicação, quantidade de risco, e muitos outros factores. Mas entender a eficácia de cada técnica nos ajuda a saber o
que é certo para cada sistema particular. Por exemplo, Olsen [ OLS93 ] Descreve o desenvolvimento em Contel IPC de
um sistema que contenha
184.000 linhas de código. Ele seguiu falhas descobertas durante várias atividades e descobriram essas diferenças:

• 17,3 por cento das falhas foram encontradas durante as inspeções do projeto do sistema
• 19,1 por cento durante a inspeção design de componentes

• 15,1 por cento, durante a inspecção código

• 29,4 por cento durante os testes de integração

• 16,6 por cento durante sistema e testes de regressão

Apenas 0,1 por cento das falhas foram reveladas após o sistema foi colocado no campo. Assim, o trabalho de Olsen
mostra a importância do uso de técnicas diferentes para descobrir diferentes tipos de falhas durante o desenvolvimento; não
devemos confiar em um único método aplicado de uma só vez para pegar todos os problemas.

Quem faz o teste? Do ponto de vista de segurança, testes independentes é altamente desejável; ele pode impedir que
um desenvolvedor de tentar esconder alguma coisa em uma rotina ou manter um subsistema de controlar os ensaios que
serão aplicadas a ele. Assim, os testes independentes aumenta a probabilidade de que um teste irá expor o efeito de um
recurso oculto.

Limitações do Teste

O teste é a técnica de segurança mais amplamente aceito. Como Earl Boebert [ BOE92 ] Observa, as conclusões
de teste baseiam-se no produto real a ser avaliado, não em alguns abstracção ou o precursor do produto. Esse
realismo é uma vantagem de segurança. No entanto, conclusões baseadas em testes são necessariamente
limitados, pelas seguintes razões:

• O teste pode demonstrar a existência de um problema, mas passando testes não demonstra a
ausência de problemas.

• Testando adequadamente num prazo razoável ou esforço é difícil porque a explosão


combinatória de entradas e estados internos torna complexo teste completo e demorado.

• Testando apenas efeitos observáveis, e não a estrutura interna de um produto, não garante qualquer
grau de completude.

• Testando a estrutura interna de um produto envolve a modificação do produto por adição de código para extrair
e exibir estados internos. Essa funcionalidade extra afeta o comportamento do produto e em si pode ser uma fonte
de vulnerabilidades ou pode mascarar outras vulnerabilidades.

• Testando em tempo real ou sistemas complexos exige manter o controle de todos os estados e
gatilhos. Esta profusão de possíveis situações faz com que seja difícil de reproduzir e analisar problemas
relatados como testadores prosseguir.

Normalmente, pensamos em teste em termos do desenvolvedor: unidade de teste de um módulo, testes de integração
para garantir que os módulos funcionar corretamente em conjunto, teste de função para traçar correção em todos os
aspectos de uma determinada função e teste do sistema para combinar hardware com software. Da mesma forma, os testes
de regressão é realizada para certificar-se de uma mudança para uma parte de um sistema não degrada qualquer outra
funcionalidade. Mas para outros testes, incluindo testes de aceitação, o usuário ou cliente administra-los para determinar se o
que foi solicitado é o que é entregue. Assim, um aspecto importante da segurança está considerando se os testes realizados
são apropriados para a aplicação e nível de segurança. A natureza e os tipos de testes refletem a estratégia de testes do
desenvolvedor: que testa a resolver questões que.

Da mesma forma, o teste é quase sempre limitada por orçamento e cronograma do projeto. As limitações
geralmente significa que o teste é incompleta, de alguma forma. Por esta razão, consideramos noções de cobertura de
teste, integralidade teste e eficiência do teste em uma estratégia de teste. A mais completa e eficaz nossos testes, mais
confiança que temos no software. Mais informações sobre os testes podem ser encontrados em Pfleeger e Atlee [ PFL10
].

Contramedida Especificamente para a Segurança

princípios de engenharia de software em geral se destinam a levar a código correto, o que certamente é um objectivo
de segurança, também. No entanto, há também atividades durante o projeto, implementação, e atendendo
especificamente para melhorar a segurança do produto acabado. Consideramos essas práticas seguinte.

Princípios de Design para a Segurança

Multics (Informações multiplexados e Serviços de Informática) foi um grande projeto de software seguro
destina a fornecer um utilitário de computação para seus usuários, tanto quanto nós acessar eletricidade ou
água. O sistema de visão usuários envolvidos que poderia facilmente se conectar a ele, usar os serviços de
computação de que necessitavam, e em seguida, desligue-tanto quanto nós a torneira ligado e desligado.
Claramente todos os três objectivos fundamentais do computador de segurança de confidencialidade,
integridade e disponibilidade, são necessários para um tal esforço amplamente compartilhado e segurança
foi um dos principais objectivos para os três participantes parceiros Multics: MIT, AT & T Bell Laboratories,
e GE. Embora o projeto nunca conseguiu o sucesso comercial significativo, o seu desenvolvimento ajudou
a estabelecer computação segura como uma disciplina rigorosa e ativo. O sistema operacional Unix
cresceu a partir de Multics,

Os arquitetos de segurança principais para Multics, Jerome Saltzer e Michael Schroeder, documentou vários
princípios de design destinados a melhorar a segurança do código que eles estavam desenvolvendo. Vários de seus
princípios de design são essenciais para a construção de um sistema operacional sólido, confiável. Estes princípios,
bem articulados em Saltzer [ SAL74 ] E Saltzer e Schroeder [ SAL75 ], inclui o seguinte:

• Ultimo privilégio. Cada usuário e cada programa deve operar usando os privilégios menor número possível.
Deste modo, o dano de um ataque mal intencionado ou inadvertida
é minimizado.
• Economia de mecanismo. O design do sistema de proteção deve ser pequeno, simples e direta. Um tal
sistema de protecção pode ser cuidadosamente analisadas, exaustivamente testados, talvez verificado, e
invocado.

• design aberto. O mecanismo de proteção não deve depender da ignorância dos potenciais atacantes; o
mecanismo deve ser público, dependendo de sigilo relativamente poucos itens importantes, como uma mesa
de senha. Um projeto aberto também está disponível para ampla escrutínio público, proporcionando assim
uma confirmação independente da segurança design.

• mediação completa. Cada tentativa de acesso deve ser verificado. Ambas as tentativas de acesso directo
(pedidos) e tentativas para contornar o mecanismo de acesso de verificação deve ser considerado, e o
mecanismo deve ser posicionado de modo que não pode ser ultrapassado.

• Baseado permissão. A condição padrão deve ser a negação do acesso. Um designer conservador
identifica os itens que devem estar acessíveis, em vez do que aqueles que não deveria.

• Separação de privilégio. Idealmente, o acesso a objetos deve depender mais de uma condição, como
autenticação de usuário mais uma chave criptográfica. Desta forma, alguém que derrota um sistema de
proteção não terá acesso completo.

• mecanismo menos comum. objetos compartilhados fornecem potenciais canais para o fluxo de informações.
Os sistemas que empregam separação física ou lógica reduzir o risco de partilha.

• Fácil de usar. Se um mecanismo de proteção é fácil de usar, é improvável a ser evitado.

Estes princípios foram geralmente aceite pela comunidade de segurança como contribuir para a segurança de
software e sistema de design. Mesmo que datam da Idade da Pedra da computação, a década de 1970, eles são
pelo menos tão importante hoje. Como sinal de quão fundamental e válida estes preceitos são, considere as
publicou recentemente “Top 10 de codificação seguras Práticas” da Seleção Computer Emergency Response
(CERT) do Software Engineering Institute da Carnegie Mellon University [ CER10 ].

1. Validar a entrada.

2. avisos do compilador atenção.

3. Arquiteto e design para as políticas de segurança.

4. Mantenha simples.

5. Padrão para negar.

6. Aderir ao princípio do menor privilégio.


7. Higienizar os dados enviados para outros sistemas.

8. defesa prática em profundidade.

9. Use técnicas de garantia de qualidade eficazes.

10. Adoptar um padrão de codificação segura.

Destes dez números, 4, 5, 6 e fósforo directamente com Saltzer e Schroeder, e 3 e


8 são consequências naturais desse trabalho. Da mesma forma, o Assurance Forum Software de Excelência em
código (SAFECode) 2 produzido um documento de orientação [ SAF11 ] Que também é compatível com estes conceitos,
incluindo tal aconselhamento como implementar menos privilégio e isolamento de processos (a definir mais tarde), o
qual é derivado de separação de privilégio e mediação completa. Elaboramos em muitos dos pontos de SAFECode ao
longo deste capítulo, e nós encorajamos você a ler o seu relatório completo depois de ter terminado este capítulo.
Outros autores, como John Viega e Gary McGraw [ VIE01 ] E Michael Howard e David LeBlanc [ HOW02 ], Elaboraram
sobre os conceitos no desenvolvimento de programas de seguros.

2 . SAFECode é uma organização sem fins lucrativos dedicada exclusivamente a aumentar a confiança em produtos e serviços de informação e
tecnologia de comunicações através do avanço de métodos de garantia de software eficazes. Seus membros incluem Adobe Systems Incorporated, a
EMC Corporation, Juniper Networks, Inc., a Microsoft Corp., Nokia, SAP AG, e Symantec Corp.

Teste de Invasão de Segurança

As abordagens de teste neste capítulo descrevem métodos adequados para todos os fins de teste: correção,
usabilidade, desempenho, bem como a segurança. Nesta seção, vamos examinar várias abordagens que são
especialmente eficazes em descobrir falhas de segurança.

Observamos anteriormente neste capítulo que testes de penetração ou análise da equipe de tigre é uma estratégia
usada frequentemente em segurança informática. (Ver, por exemplo, [ RUB01 , TIL03 , PAL01 ].) Às vezes ele é chamado hackin
ético, porque envolve o uso de uma equipe de especialistas que tentam quebrar o sistema que está sendo testado (em
oposição a tentar invadir o sistema por razões antiéticas). O trabalho de testadores de penetração parecido com o que
um atacante real pode fazer [ AND04 , SCH00b ]. A equipe de tigre conhece bem as vulnerabilidades típicas em sistemas
operacionais e sistemas de computação. Com este conhecimento, a equipe tenta identificar e explorar vulnerabilidades
específicas do sistema.

Os testes de penetração é uma arte e ciência. O lado artístico exige uma análise cuidadosa e criatividade na
escolha dos casos de teste. Mas o lado científico exige rigor, ordem, precisão e organização. Como Clark Weissman
observa [ WEI95 ], Não existe uma metodologia organizada para hypothesizing e falhas verificação. Não é, como
alguns poderiam supor, um concurso de perfuração aleatória.

Usando testes de penetração é muito mais como pedir a um mecânico para olhar sobre um carro usado em um monte de
vendas. O mecânico sabe potenciais pontos fracos e cheques como muitos deles quanto possível. Um bom mecânico
provavelmente vai encontrar problemas mais significativos, mas encontrar um problema (e corrigi-lo) há garantia de que há outros
problemas estão à espreita em outras partes do sistema. Por exemplo, se o mecânico verifica o sistema de combustível, o sistema
de arrefecimento, e os freios, não há nenhuma garantia de que o silenciador é bom.

Da mesma forma, um sistema operacional que não um teste de penetração é conhecido por ter defeitos, mas um sistema
que não falha não é garantido para ser livre de culpa. Tudo o que podemos dizer é que o sistema é susceptível de ser livre
apenas a partir dos tipos de falhas verificada pelos ensaios exercidas sobre ele. No entanto, testes de penetração é útil e muitas
vezes encontra falhas que poderiam ter sido negligenciados por outras formas de testes.

Um sistema que falha o teste de penetração é conhecido por ter falhas; um que passa é conhecida
apenas por não ter os defeitos testados para.
Uma possível razão para o sucesso de testes de penetração é a sua utilização em condições reais. Os usuários muitas
vezes exercem um sistema de formas que seus criadores não previstos ou pretendidos. Então, testadores de penetração pode
explorar esse ambiente da vida real e conhecimento para fazer certos tipos de problemas visíveis.

Os testes de penetração é muito popular com a comunidade comercial que pensa hackers qualificados irá testar (ataque)
um site e encontrar todos os seus problemas em dias, se não horas. Mas encontrar falhas no código complexo pode levar
semanas, se não meses, por isso não há garantia de que o teste de penetração será eficaz.

Na verdade, os militares “equipes vermelhas” originais convocadas para testar a segurança em sistemas de software estavam
envolvidos em 4 a 6 meses exercícios de muito tempo para encontrar uma falha. Anderson et al. [ AND04 ] Elaborar sobre esta
limitação do teste de penetração. Para encontrar uma falha em um espaço de 1 milhão de entradas podem exigir testar todas as 1
milhão de possibilidades; a menos que o espaço é razoavelmente limitado, o tempo necessário para realizar esta pesquisa é
proibitivo. Para testar os testadores, Paul Karger e Roger Schell inserida uma falha de segurança no sistema Multics
meticulosamente projetado e desenvolvido, para ver se as equipes de teste iria encontrá-lo. Mesmo depois de Karger e Schell
informou testadores que tinham inserido um pedaço de código malicioso em um sistema, os testadores não foram capazes de
encontrá-lo [ KAR02 ]. Os testes de penetração não é uma técnica mágica para encontrar agulhas em palheiros.

As provas de Programa de Correção

Um especialista em segurança quer ter certeza de que um determinado programa calcula um resultado
particular, calcula-la corretamente, e não faz nada além do que é suposto fazer. Infelizmente, os resultados na
teoria informática indicam que não podemos saber com certeza que dois programas fazem exatamente a mesma
coisa. Isto é, não pode haver nenhum procedimento geral que, dadas quaisquer dois programas, determina se os
dois são equivalentes. Esta dificuldade resulta do “problema da parada”, que afirma que nunca pode ser uma
técnica geral para determinar se um programa arbitrário irá parar ao processar uma entrada arbitrária. (Vejo [ PFL85 ]
Para uma discussão.)

Apesar deste resultado geral decepcionante, uma técnica chamada verificação do programa
pode demonstrar formalmente a “correção” de certos programas específicos. verificação do programa envolve fazer
afirmações iniciais sobre entradas do programa e, em seguida, verificar para ver se a saída desejada é gerada. Cada
instrução programa é traduzido em uma descrição lógica sobre a sua contribuição para o fluxo lógico do programa.
Em seguida, a declaração terminal do programa está associado com a saída desejada. Através da aplicação de um
analisador lógico, podemos provar que as suposições iniciais, além das implicações das declarações do programa,
produzir a condição terminal. Desta forma, podemos mostrar que um determinado programa atinge seu objetivo. Sidebar
3-13 apresenta o caso para o uso adequado de técnicas prova formal.

Provando programa de correcção, embora desejável e útil, é dificultado por vários factores. (Para mais
detalhes, veja [ PFL94 ]).

• provas de correção depende da capacidade de um programador ou lógico para traduzir as declarações de um


programa na implicações lógicas. Assim como a programação é propenso a erros, assim também é esta tradução.
• Derivando a prova de correcção das afirmações iniciais e as implicações das declarações é difícil, e o motor
lógica para gerar provas é executado lentamente. A velocidade do motor diminui à medida que o tamanho do
programa aumenta, assim provas de correção tornam-se menos adequado, como o tamanho do programa
aumenta.

Sidebar 3-13 Métodos Formais pode travar difícil de ver os problemas

métodos formais são por vezes usados ​para verificar vários aspectos de sistemas seguros. Há algum
desacordo sobre o que constitui um método formal, mas há um consenso geral de que cada método
formal envolve o uso de especificação e design notações matematicamente precisos. Na sua forma
mais pura, o desenvolvimento baseado em métodos formais envolve refinamento e prova de
correção em cada fase do ciclo de vida. Mas todos os métodos formais não são criados iguais.

Shari Lawrence Pfleeger e Les Hatton [ PFL97a ] Examinou os efeitos de métodos formais sobre a
qualidade do software resultante. Eles apontam que, para algumas organizações, as modificações
nas práticas de desenvolvimento de software necessários para suportar tais técnicas podem ser
revolucionário. Ou seja, nem sempre há um caminho de migração simples da prática atual para a
inclusão de métodos formais. Isso porque o uso eficaz de métodos formais pode exigir uma mudança
radical logo no início do tradicional ciclo de vida do software: como capturar e requisitos do cliente
registro. Deste modo, as estacas nesta área podem ser particularmente elevado. Por esta razão, uma
prova da eficácia de métodos formais é altamente desejável.

Susan Gerhart et ai. [ GER94 ] apontar:


Não há uma resposta simples para a pergunta: que métodos formais pagar? Nossos casos fornecer uma riqueza de dados,
mas apenas arranham a superfície de informação disponível para responder a estas perguntas. Todos os casos envolvem
muitos fatores interligados que é impossível alocar retorno de métodos formais contra outros fatores, como a qualidade das
pessoas ou efeitos de outras metodologias. Mesmo onde os dados foram coletados, foi difícil interpretar os resultados em
todo o fundo da organização e os vários fatores que cercam a aplicação.

Na verdade, Pfleeger e Hatton comparar dois sistemas similares: um sistema desenvolvido com
métodos formais e não um. O primeiro tem maior qualidade do que o último, mas outras possibilidades
explicar essa diferença em termos de qualidade, incluindo o de cuidadosa atenção aos requisitos e design.

• Como Marv Schaefer [ SCH89a ] Aponta, muitas vezes as pessoas se concentram muito no formalismo e na derivação
de uma prova formal de que eles ignoram as propriedades de segurança subjacentes a ser assegurada.

• O actual estado de verificação do programa é menos desenvolvida do que a produção de código. Como
resultado, as provas de correção não têm sido consistentemente e com sucesso aplicado a grandes sistemas
de produção.

sistemas de verificação do programa estão sendo melhorados constantemente. programas maiores estão sendo verificados
em menos tempo do que antes. Gerhart [ GER89 ] Descreve sucintamente as vantagens e desvantagens da utilização de métodos
formais, incluindo prova de correção. como programa
verificação continua a amadurecer, ele pode se tornar um controle mais importante para garantir a segurança dos programas.

Validação

Verificação formal é um exemplo particular de uma abordagem mais geral para assegurar exactidão. Há muitas
maneiras de mostrar que cada um de funções de um sistema funciona corretamente. Validação é a contrapartida à
verificação, assegurando que os desenvolvedores de sistemas têm implementado todos os requisitos. Assim, a
validação garante que o desenvolvedor está construindo o produto certo (de acordo com a especificação), e
verificação verifica a qualidade da execução. Para mais detalhes sobre a validação em engenharia de software,
consulte Shari Lawrence Pfleeger e Joanne Atlee [ PFL10 ].

Um programa pode ser validado de várias maneiras diferentes:

• Requisitos de controlo. Uma técnica é cross-verificar cada requisito do sistema com o comportamento
código-fonte ou execução em tempo do sistema. O objetivo é demonstrar que o sistema faz cada coisa
listada nos requisitos funcionais. Este processo é estreito, no sentido de que ele demonstra apenas que
o sistema faz tudo o que ele deve fazer. Como temos salientado, em segurança, estamos igualmente
preocupados com a prevenção: garantir que o sistema faz não fazer as coisas que não é suposto fazer.
Requisitos de verificação raramente aborda este aspecto de cumprimento dos requisitos.

• Projeto e revisões de código. Conforme descrito anteriormente neste capítulo, design e revisões de código
normalmente abordar correção do sistema (ou seja, verificação). Mas uma revisão também pode abordar
implementação requisitos. Para suportar a validação, os revisores examinar o projeto ou o código para assegurar
a rastreabilidade de cada requisito para projetar e componentes de código, observando problemas ao longo do
caminho (incluindo falhas, suposições incorretas, comportamento incompletos ou inconsistentes, ou falta de
lógica). O sucesso desse processo depende do rigor da revisão.

• teste do sistema. Os programadores ou por uma equipa independente selecionar dados para verificar o sistema. Estes
dados de teste podem ser organizados muito parecido com o teste de aceitação, de modo comportamentos e dados
esperados a partir da leitura do documento de requisitos pode ser confirmada no funcionamento real do sistema. A
verificação é feita metodicamente para garantir a integralidade.

Outros autores, notadamente James Whittaker e Herbert Thompson [ WHI03a ], Michael Andrews e James
Whittaker [ AND06 ], E Paco Esperança e Ben Walther [ HOP08 ], Descreveram abordagens de ensaio de segurança.

Programação defensiva

O aforismo “ofensa vende bilhetes; vitórias defesa campeonatos”tem sido atribuída ao lendário Universidade de
Alabama treinador de futebol Paul‘Urso’Bryant, Jr., Minnesota ensino médio basquete treinador Dave Thorson, e outros.
Independentemente da sua origem, o aforismo tem uma certa relevância para a segurança do computador também. Como
já demonstrado, o mundo é geralmente hostil: Defenders tem que combater todos os ataques possíveis, ao passo que os
atacantes têm apenas para descobrir um ponto fraco para explorar. Assim, uma defesa forte não só é útil, é essencial.
Os elaboradores de programas e implementadores não precisam apenas escrever código correto, mas também deve antecipar o
que poderia dar errado. Como dissemos anteriormente neste capítulo, um programa esperando uma data como uma entrada também
deve ser capaz de lidar com entradas formados incorretamente como 31-Nov-1929 e 42-Mpb-2030. Tipos de entradas incorrectas
incluir

• valor inadequada para o tipo de dados, como as letras em um campo numérico ou M para um verdadeiro item de / false

• Valor fora do intervalo para determinado uso, como um valor negativo para a idade ou a data de 30 de fevereiro

• valor razoável, tais como 250 kg de sal em uma receita


• valorizar fora de escala ou proporção, por exemplo, uma descrição da casa com 4 quartos e 300
casas de banho.

• número incorrecto de parâmetros, porque o sistema nem sempre proteger um programa a partir desta
falha

• ordem incorrecta de parâmetros, por exemplo, uma rotina que espera idade, sexo, data, mas o programa
chamando fornece sexo, idade, data

os designers do programa não deve apenas escrever código correto, mas também deve antecipar o
que poderia dar errado.

Como diz a Microsoft, software seguro deve ser capaz de resistir a ataques em si:

segurança de software é diferente. É de propriedade de software que lhe permite continuar a operar como
esperado, mesmo quando sob ataque. segurança de software não é uma biblioteca ou função chamada
específica, nem é um add-on que o código magicamente transforma existente. É o resultado holística de uma
abordagem ponderada aplicada por todas as partes interessadas em todo o ciclo de vida de desenvolvimento de
software. [ MIC10a ]

Iniciativa de Computação Confiável

Microsoft tinha um problema sério com a qualidade do código em 2002. Falhas nos seus produtos apareceu com
freqüência, e lançou patches tão rapidamente quanto podia. Mas a natureza esporádica de versões de patch confundido
usuários e fez o problema parece pior do que era.

O problema de relações públicas tornou-se tão grande que a Microsoft presidente Bill Gates ordenou o desligamento total de
desenvolvimento de código e uma análise de cima para baixo de segurança e práticas de codificação. O plano de análise e
progresso ficou conhecido como a Iniciativa de Computação Confiável. Neste esforço todos os desenvolvedores passaram por
treinamento de segurança e práticas seguras de desenvolvimento de software foram instituídas em toda a empresa.

O esforço parecia ter alcançado sua meta: o número de patches de código desceu dramaticamente, a um nível
de dois a três patches de segurança críticos por mês.

Design by Contract

A técnica conhecida como programação por contrato ™ (uma marca de Software Eiffel) ou
programação por contrato pode nos ajudar a identificar potenciais fontes de erro. A forma marca registrada desta
técnica envolve uma abordagem de desenvolvimento programa formal, mas
mais amplamente, estes termos referem-se a documentar para cada programa módulo suas pré-condições,
pós-condições e invariantes. As pré-condições e pós são condições necessárias (esperado, necessários, ou
forçados) a ser verdadeiras antes do módulo começa e depois termina, respectivamente; invariantes são condições
necessárias para ser verdade ao longo da execução do módulo. Efetivamente, cada módulo vem com um contrato:
Ele espera que as pré-condições para ter sido cumpridos, e se compromete a cumprir as pós-condições. Por ter sido
explicitamente documentadas, o programa pode verificar estas condições de entrada e de saída, como uma forma de
defesa contra outros módulos que não cumprem os termos de seus contratos ou cujos contratos contradigam as
condições deste módulo. Outra maneira de alcançar este efeito é usando afirmações, que são declarações explícitas
sobre módulos. Dois exemplos de afirmações são “este módulo aceita como entrada era, deverá ficar entre 0 e 150
anos”e“input comprimento medido em metros, para ser um número inteiro não assinado entre 10 e 20.”Estas
afirmações são avisos aos outros módulos com que este módulo interage e condições este módulo pode verificar.

O programa de chamada deve fornecer entrada correta, mas o programa chamado não deve agravar os erros se a
entrada está incorreta. Em sentindo um problema, o programa pode parar ou continuar. Simplesmente travar (ou seja,
terminar todo o segmento de execução) é geralmente uma resposta catastrófica a sério e irremediavelmente dados
falhos, mas continuando só é possível se a execução não vai permitir que o efeito do erro de se expandir. O
programador tem de decidir sobre a forma mais adequada de lidar com um erro detectado por uma verificação no
código do programa. O programador da rotina chamada tem várias opções para ação em caso de entrada incorreta:

• Pare, ou sinalizar uma condição de erro e retorno.


• Gerar uma mensagem de erro e esperar por ação do usuário.
• Gerar uma mensagem de erro e reinvoke a rotina chamando a partir do topo (apropriado se essa ação
força o usuário digite um valor para o campo com defeito).

• Tentar corrigi-lo Se o erro é óbvio (embora esta escolha deve ser tomada apenas se houver
apenas uma possível correção).

• Continue, com um padrão ou valor nominal, ou continuar a computação sem o valor errôneo, por exemplo, se
uma predição de mortalidade depende da idade, sexo, quantidade de atividade física e história de tabagismo, ao
receber um valor inconclusiva para o sexo, o sistema pode calcular resultados para ambos os sexos masculino e
feminino e relatar ambos.

• Fazer nada, Se o erro é menor, superficial, e é certo para não causar mais danos.

Para mais orientações sobre programação defensiva, consulte Pfleeger et al. [ PFL02 ]. Nesta seção, apresentou várias
características de um bom software, seguro. Claro, um programador pode escrever código seguro que não tem nenhuma
dessas características, e software defeituoso pode exibir todos eles. Essas qualidades não são mágicos; eles não podem
transformar código ruim em bom. Ao contrário, eles são propriedades que muitos exemplos de bom código refletem e
práticas que bons desenvolvedores de código usam; as propriedades não são uma causa de código bom, mas são
paradigmas que tendem a ir junto com ele. Seguindo estes princípios afeta a mentalidade de um designer ou desenvolvedor,
incentivando foco na qualidade e segurança; esta atenção é
em última análise, boa para o produto resultante.

Contramedidas que não funcionam

Infelizmente, um monte de boas ou boas-som idéias vir a ser não tão bom em uma reflexão mais aprofundada. Pior ainda, os
seres humanos têm uma tendência a corrigir em idéias ou opiniões, por isso, desalojando uma opinião com defeito é muitas vezes
mais difícil do que a conclusão do parecer pela primeira vez.

No campo da segurança, vários mitos permanecem, não importa quão vigorosamente os críticos denunciam ou
contestá-los. O mito penetrar-e-patch é realmente dois problemas: As pessoas assumem que a maneira de realmente testar
um sistema de computador é ter um time de penetração brilhante mágicos entrar, tentar torná-lo comportar-se de forma
insegura e se eles não conseguem (ou seja, se há falhas estão expostos) pronunciar o sistema bom.

O segundo mito queremos desmascarar é chamado de segurança por obscuridade, a crença de que, se um programador só não
contar a ninguém sobre um segredo, ninguém vai descobrir. Este mito tem cerca de tanto valor como esconder uma chave debaixo de
um capacho.

Finalmente, rejeitamos a conjectura de um estranho que os programadores são tão inteligentes que podem escrever um programa para
identificar todos os programas maliciosos. Infelizmente, tão inteligente como programadores são, essa façanha pode ser provado ser
impossível.

Penetrar-e-Patch

Porque os programadores cometem erros de muitos tipos, nunca podemos ter certeza que todos os programas são sem
falhas. Sabemos de muitas práticas que podem ser usados ​durante o desenvolvimento de software para levar a alta garantia de
correção. Vamos começar com uma técnica que parece atraente, mas na verdade faz não levar a um código sólido.

Os primeiros trabalhos na segurança do computador foi baseado no paradigma da penetrar-e-remendo, em que os analistas
procurou e falhas reparadas. Muitas vezes, uma equipe tigre de qualidade superior (assim chamado por causa de sua dedicação feroz
para falhas encontrando) seria convocada para testar a segurança de um sistema, tentando fazer com que falhe. O teste foi
considerado uma prova de segurança; se o sistema suportou os ataques da equipe tigre, ele deve ser seguro, ou assim que o
pensamento passou.

Infelizmente, demasiadas vezes a tentativa de prova em vez tornou-se um processo para gerar contra-exemplos, em que
não apenas um, mas vários problemas graves de segurança foram descobertos. A descoberta problema, por sua vez levou a
um esforço rápido de “patch” o sistema para reparar ou restaurar a segurança. No entanto, os esforços de patch eram em
grande parte inútil, geralmente fazendo com que o sistema Menos garantir, ao invés de mais, porque eles freqüentemente
introduziu novas falhas, mesmo quando eles tentaram corrigir as antigas. (Para mais discussão sobre a futilidade de penetrar e
correções, consulte a análise de Roger Schell em [ SCH79 ].) Não são, pelo menos, quatro razões pelas quais penetram-e-Patch
é uma estratégia equivocadas.

• A pressão para reparar um problema específico incentiva os desenvolvedores a tomar um foco estreito
sobre a própria culpa e não no seu contexto. Em particular, os analistas muitas vezes pagam a atenção para
a causa imediata da falha e não às subjacentes falhas de projeto ou requisitos.

• A culpa muitas vezes tem efeitos colaterais não óbvios em outros do que a área imediata da falha
lugares. Por exemplo, o código defeituoso pode ter criado e nunca
divulgou um tampão que foi então usado pelo código não relacionado noutro local. A versão corrigida libera esse
buffer. No entanto, o código em outro lugar agora falhar porque ele precisa do tampão esquerda em torno do código
defeituoso, mas o buffer não está mais presente na versão corrigida.

• Corrigindo um problema muitas vezes provoca uma falha em outro lugar. O patch pode ter abordado o problema
em apenas um lugar, não em outros lugares relacionados. Rotina Um é chamado por B, C e D, mas o
desenvolvedor manutenção conhece apenas da falha quando B chama A. O problema parece estar nessa
interface, de modo que o desenvolvedor manchas B e A para corrigir o problema, testes, B , a, e B e a em
conjunto com as entradas que invocam a B-a interacção. Todos aparecem para trabalhar. Só muito mais tarde faz
outra superfície de ruptura, que é atribuída ao-A C interface. Um programador diferente, desconhece B e D,
aborda o problema no C-A interface que, surpreendentemente não gera defeitos latentes. Na manutenção, poucas
pessoas ver o retrato grande, especialmente quando se trabalha sob pressão de tempo.

• A culpa não pode ser fixado corretamente porque funcionalidade ou desempenho do sistema iria
sofrer como consequência. Apenas alguns exemplos da falha pode ser fixa ou o dano pode ser
reduzida, mas não prevenida.

Penetrar-e-patch falha porque é apressada, perde o contexto da falha, e se concentra


em uma falha, não o sistema completo.

Na mente de algumas pessoas testadores de penetração são gênios que podem encontrar falhas meros mortais não podem
ver; portanto, se o código passa a revisão por um gênio, ele deve ser perfeito. Bons testadores certamente têm uma
profundidade e amplitude de experiência que lhes permite pensar rapidamente de potenciais pontos fracos, tais como falhas
semelhantes que tenham visto antes. Esta sabedoria da experiência-útil, pois é-não é garantia de exatidão.

Pessoas fora da comunidade profissional de segurança ainda encontrá-lo atraente para encontrar e corrigir problemas de segurança
como aberrações individuais. No entanto, os profissionais de segurança recomendam uma abordagem mais estruturada e cuidado para
desenvolvimento de código seguro.

Segurança por obscuridade

Especialistas em segurança usam o termo segurança, ou através da obscuridade para descrever a contramedida ineficaz
de assumir o atacante não vai encontrar uma vulnerabilidade. Segurança por obscuridade é a crença de que um sistema pode
ser seguro desde que ninguém fora do seu grupo de implementação é dito nada sobre seus mecanismos internos.
Escondendo senhas de contas em arquivos binários ou scripts com a presunção de que ninguém nunca vai encontrá-los é um
caso prime. Outro exemplo de obscuridade defeituoso é descrito em Sidebar 3-14 , Em que o texto suprimido não é realmente
apagado. os proprietários do sistema assumir um atacante nunca vai adivinhar, encontrar, ou deduzir qualquer coisa não
revelou abertamente. Pense, por exemplo, do programa de discagem descrito anteriormente neste capítulo. O desenvolvedor
do que a utilidade pode ter pensado que esconder a limitação de 100 dígitos seria mantê-lo de ser encontrado ou usado.
Obviamente esse pressuposto estava errado.

Coisas destinadas a ficar escondido raramente. Atacantes encontrar e explorar muitas coisas ocultas.
Sidebar 3-14 escondido, mas não esquecido

Quando é algo fora? Quando você pressiona a tecla delete, ele vai embora, certo? Errado.

Até agora você sabe que os arquivos excluídos não são realmente excluídos; eles são movidos para a
lixeira. mensagens de correio excluídos vá para a pasta de lixo. E páginas de Internet temporários pendurar ao
redor por alguns dias em uma pasta história à espera de interesse repetido. Mas você espera teclas para
desaparecer com a tecla delete.

Microsoft Word salva todas as alterações e comentários desde que um documento foi criado. Suponha
que você e um colega colaborar em um documento, referem-se a trabalho de outra pessoa, e seu colega
insere o comentário “Esta pesquisa é lixo.” Você concorda, então você suprimir a referência e comentários
do seu colega. Então você enviar o papel de um jornal para revisão e, como ele teria sorte, o seu papel é
enviado para o autor cujo trabalho você menosprezado. Em seguida, o revisor acontece para ligar marcação
mudança e encontra não apenas a referência excluído, mas também o comentário apagado do seu colega.
(Vejo [ BYE04 ].) Se você realmente queria remover esse texto, você deveria ter usado a Ferramenta de
Remoção Microsoft dados ocultos. (Claro, inspecionando o arquivo com um editor binário é a única maneira
que você pode ter certeza que o texto agressor é realmente ido embora.)

O formato de documento PDF Adobe é um formato mais simples destina a fornecer uma maneira independente de
plataforma para exibir (e impressão) documentos. Algumas pessoas converter um documento do Word para PDF para
eliminar dados sensíveis escondidos. Isso não remove os dados de rastreamento de mudanças. Mas preserva saída
mesmo invisível. Algumas pessoas criam uma caixa branca para colar mais dados para ser escondido, por exemplo, para
cortar parte de um mapa ou ocultar uma coluna de lucro em uma tabela. Quando você imprimir o arquivo, a caixa esconde
sua informação sensível. Mas o formato PDF preserva todas as camadas em um documento, para que o seu destinatário
possa efetivamente retirar a caixa branca para revelar o conteúdo escondido. A NSA publicou um relatório detalhando
etapas para garantir que exclusões são realmente excluídos [ NSA05 ].

Ou se você quer mostrar que algo estava lá e foi excluída, você pode fazer isso com a redação
ferramenta Microsoft, que, presumivelmente, exclui o texto subjacente e substitui-lo com uma linha
preta grossa.

Auguste Kerckhoffs, um cryptologist holandês do século 19, estabeleceu diversos princípios de sistemas
criptográficos sólidos [ KER83 ]. Seu segundo princípio 3 aplica-se a segurança dos sistemas informáticos, bem:

O sistema não deve depender de sigilo e segurança não deve sofrer se o sistema cai em
mãos inimigas.
3 . “Il faut qu'il n'exige pas le secret, et qu'il puisse sans inconveniente tomber entre les mains de l'ennemi.”

Note-se que Kerckhoffs não aconselhar dando o inimigo do sistema, mas ele disse que se o inimigo deve acontecer para
obtê-la por qualquer meio, a segurança não deve falhar. Não há necessidade de dar ao inimigo um mesmo quebrar; apenas
a certeza de que quando (não se) o inimigo descobre o mecanismo de segurança, que o conhecimento não irá prejudicar a
segurança. Johansson e
Grimes [ JOH08a ] Discutir a falácia de segurança por obscuridade em maior detalhe.

O termo fator de trabalho significa a quantidade de esforço necessária para um adversário a derrotar um controle de
segurança. Em alguns casos, como adivinhação de senha, podemos estimar o fator trabalho, determinando quanto tempo
que seria necessário para testar uma única senha, e multiplicando pelo número total de senhas possíveis. Se o atacante
pode pegar um atalho, por exemplo, se o atacante sabe a senha começa com uma letra maiúscula, o fator trabalho é
reduzido proporcionalmente. Se a quantidade de esforço é proibitivamente alta, por exemplo, se ele levaria mais de um
século para deduzir uma senha, podemos concluir que o mecanismo de segurança é adequada. (Note-se que alguns
materiais, tais como mensagens diplomáticas, pode ser tão sensível que mesmo depois de um século, eles não devem ser
revelados, e assim seria preciso encontrar um mecanismo de proteção suficiente forte que tinha um fator de trabalho mais
longo.)

Não podemos assumir o atacante irá tomar o caminho mais lento para derrotar segurança; Na verdade, temos de
assumir um atacante dedicado irá tomar qualquer abordagem parece ser mais rápido. Assim, no caso de senhas, o
atacante pode ter várias abordagens:

• Experimente todas as senhas, se enumerar exaustivamente-los de alguma forma, por exemplo, mais curto para a mais
longa.

• Adivinhar senhas comuns.


• Veja como alguém digitar uma senha.
• Subornar alguém para divulgar a senha.
• Interceptar a senha entre seu que está sendo digitado e usados ​(como foi feito em Churchill Ensino
Médio).

• Fingir ter esquecido a senha e acho que as respostas para a recuperação


supostamente secreta.
• Substituir a solicitação de senha no aplicativo.

Se nós fizemos um cálculo do fator trabalho simples em senhas, podemos concluir que levaria X unidades de tempo
vezes y senhas, por um fator de trabalho de x * y / 2 assumindo, em média, metade das senhas devem ser tentou
adivinhar o correto. Mas se o atacante utiliza qualquer, mas a primeira técnica, o tempo poderia ser significativamente
diferente. Assim, na determinação de fator trabalho, temos que assumir o atacante usa a maneira mais fácil possível,
o que pode levar minutos, não em décadas.

Segurança por obscuridade é uma contramedida defeituoso porque ele assume que o atacante sempre terá a abordagem duro
e nunca aquele fácil. Os atacantes são preguiçosos, como a maioria de nós; eles vão encontrar o caminho para poupar trabalho se
ele existir. E de que maneira pode envolver olhando sob o capacho para encontrar uma chave em vez de batendo a porta.
Lembramos que em capítulos posteriores quando uma contramedida pode ser uma instância de segurança por obscuridade.

A Perfect Good-Bad Código Separator

Os programas podem enviar um homem à lua, reiniciar um coração insuficiente, e derrotar um ex-campeão do programa
de televisão Jeopardy. Certamente eles pode separar os bons programas de ruim, eles não podem? Infelizmente não.

Primeiro, temos que ter cuidado o que queremos dizer quando dizemos que um programa é bom. (Nós usamos os termos
simples bom e mau em vez de termos ainda mais sutis, tais como seguro, seguro, ou
nonmalicious.) Como Sidebar 3-11 explica, cada programa tem efeitos colaterais: Ele usa memória, ativa
determinado hardware da máquina, leva um determinado período de tempo, para não mencionar as
atividades adicionais, tais como reordenar uma lista ou mesmo apresentando uma saída em uma cor
particular. Podemos ver, mas não notar alguns destes. Se um designer prescreve que a saída deve ser
apresentada em um determinado tom de vermelho, podemos verificar que o programa realmente faz isso.
No entanto, na maioria dos casos, a cor de saída não é especificado, de modo que o designer ou um
testador não pode dizer um programa é não-conforme ou ruim se a saída aparece em vermelho em vez
de preto. Mas se não podemos sequer decidir se tal efeito é aceitável ou não, como pode um programa
de fazer isso? E os efeitos ocultos (calcula em 0.379 microsegundos, usa registar 2, mas não registar 4)
são ainda piores para pensar julgar. Assim, não podemos agora,

Mesmo que poderíamos definir “bom” de forma satisfatória, uma limitação fundamental da lógica vai ficar no nosso
caminho. Embora muito além do escopo deste livro, o campo de decidibilidade ou computability olha se algumas coisas
nunca pode ser programado, não apenas hoje ou usando linguagens e máquinas de hoje, mas nunca. O cerne da
computability é o chamado problema da parada, que pergunta se um programa de computador interrompe a execução ou é
executado sempre. Nós certamente podemos responder a essa pergunta para muitos programas. Mas o matemático
britânico Alan Turing 4 provou em 1936 (nomeadamente, muito antes do advento dos computadores modernos) que é
impossível escrever um programa para resolver o problema da parada para qualquer programa possível e qualquer possível
fluxo de entrada. Nosso verificador bom programa iria cair na armadilha problema da parada: Se pudéssemos identificar
todos os bons programas que iria resolver o problema da parada, que é comprovadamente insolúvel. Assim, nunca teremos
um bom verificador abrangente programa.

4 . Alan Turing era também um contribuinte vital para a Grã-Bretanha durante a Segunda Guerra Mundial, quando ele desenvolveu várias técnicas que sucederam em quebrar

comunicações criptografadas alemães.

Este resultado negativo não dizer que não podemos examinar certos programas para o bem. Podemos, de fato, olhar para alguns
programas e dizer que eles são ruins, e podemos até mesmo escrever código para detectar programas que modificam protegidas locais
de memória ou explorar vulnerabilidades de segurança conhecidas. Então, sim, nós podemos detectar alguns programas ruins, apenas
não todos eles.

Conclusão
Neste capítulo temos pesquisados ​programas e programação: erros programadores a fazer e vulnerabilidades
atacantes explorar. Estas falhas podem ter consequências graves, como relatado quase diariamente no
noticiário. No entanto, existem técnicas para mitigar essas deficiências, como descrito no final deste capítulo.

Os problemas narrados neste capítulo formam a base para grande parte do resto deste livro. Programas implementar
navegadores web, aplicações web, sistemas operacionais, tecnologias de rede, infraestruturas de nuvem e dispositivos
móveis. Uma sobrecarga da memória intermédia pode acontecer num programa de folha de cálculo ou um dispositivo de rede,
embora o efeito é mais localizada no primeiro caso, do que o último. Ainda assim, você deve manter os problemas deste
capítulo em mente como você continuar através do restante deste livro.

No próximo capítulo nós consideramos a segurança da Internet, investigando dano afetando um usuário. Neste capítulo
temos focado implicitamente em programas individuais em execução em um
computador, embora tenhamos reconhecido atores externos, por exemplo, quando nós exploramos transmissão de
códigos maliciosos. Capítulo 4 envolve tanto um usuário local e remoto de Internet do potencial malícia.

exercícios

1. Suponha que você é um inspector costumes. Você é responsável por verificar malas para compartimentos
secretos em que os itens volumosos, como jóias podem ser escondidos. Descrever o procedimento que você
seguiria para verificar esses compartimentos.

2. Seu chefe lhe oferece um microprocessador e seu manual de referência técnica. É-lhe pedido para verificar
se há recursos não documentados do processador. Devido ao número de possibilidades, você não pode
testar cada código de operação com cada combinação de operandos. Delinear a estratégia que você usaria
para identificar e caracterizar as operações unpublicized.

3. Seu chefe lhe oferece um programa de computador e seu manual de referência técnica. É-lhe pedido para
verificar se há recursos não documentados do programa. Como isso é uma atividade semelhante à tarefa dos
exercícios anteriores? Como é que diferem? Que é a mais viável? Por quê?

4. Um programa é escrito para calcular a soma dos inteiros de 1 a 10. O programador, bem treinado na
reutilização e facilidade de manutenção, escreve o programa para que ele calcula a soma dos números de k
para n. No entanto, uma equipe de especialistas em segurança examina o código. A equipe certifica que este
programa estabelece adequadamente k a 1 e n a 10; Portanto, o programa é certificada como sendo
devidamente restrito em que ele sempre opera sobre precisamente as diferentes maneiras faixa de 1 a 10. Lista
que este programa pode ser sabotado para que durante a execução que calcula uma soma de diferente, tal
como 3 a 20.

5. Uma forma de limitar o efeito de um programa não confiável é confinamento: controlar o que os
processos têm acesso ao programa não confiável eo que acessar o programa tem a outros processos e
dados. Explique como confinamento seria aplicável ao exemplo anterior do programa que calcula a
soma dos inteiros de 1 a 10.

6. Lista três controles que poderiam ser aplicados para detectar ou evitar os erros off-by-one.

7. A distinção entre um canal de armazenamento encoberta e um canal de sincronismo secreta não é corte raso. Cada
canal de temporização pode ser transformado em um canal de armazenamento equivalente. Explique como esta
transformação poderia ser feito.

8. Liste as limitações relativas à quantidade de informações vazadas por segundo através de um canal secreto em um
sistema de computação multiaccess.

9. Um sistema de correio eletrônico poderia ser usado para vazar informações. Em primeiro lugar, explicar como
poderia ocorrer o vazamento. Em seguida, identificar controlos que poderiam ser aplicados para detectar ou evitar a
fuga.

10. Modularidade pode ter um negativo, bem como um efeito positivo. Um programa que está overmodularized realiza
suas operações em pequenos módulos, assim que um leitor tem dificuldade em adquirir uma perspectiva global sobre
o que o sistema está a tentar fazer. Isto é, embora possa ser fácil para determinar o que os módulos individuais fazer
eo que pequena
grupos de módulos de fazer, não é fácil entender o que eles fazem em sua totalidade, como um sistema. Sugerem uma
abordagem que pode ser usado durante o desenvolvimento do programa para fornecer essa perspectiva.

11. Você é dado um programa que supostamente administra uma lista de itens a uma codificação hash. O
programa deve retornar a localização de um item se o item está presente ou para retornar o local onde o item
deve ser inserido se o item não está na lista. Que acompanha o programa é um manual descrevendo
parâmetros, tais como o formato esperado de itens na tabela, o tamanho da tabela, ea seqüência de
chamamento específico. Você tem apenas o código objeto deste programa, não o código-fonte. Listar os casos
você aplicaria para testar a correção da função do programa.

12. Você está escrevendo um procedimento para adicionar um nó a uma lista duplamente ligada. O sistema em que este
procedimento está a ser executado está sujeito a falhas de hardware periódicas. A lista de seu programa é a manutenção
é de grande importância. O programa deve assegurar a integridade da lista, mesmo se a máquina falhar no meio de
executar o procedimento. Fornecer as declarações individuais que você usaria em seu procedimento para atualizar a lista.
(Sua lista deve ser menos de uma dúzia de declarações longa.) Explique o efeito de uma falha da máquina depois de cada
instrução. Descreva como você iria rever este procedimento para que ele iria restaurar a integridade da lista básica depois
de uma falha da máquina.

13. Explique como informações em um log de acesso pode ser usado para identificar a verdadeira identidade de um
impostor que adquiriu o acesso não autorizado a um sistema de computação. Descrevem várias peças diferentes de
informação no registo que poderia ser combinados para identificar o impostor.

14. Várias propostas foram feitas para um processador que podem descriptografar instruções de dados e máquinas
criptografados e, em seguida, executar as instruções sobre os dados. O processador então criptografar os
resultados. Como é que um tal processador de ser útil? Quais são os requisitos de design para tal processador?

15. Explicar em que circunstâncias penetrar-e-patch é uma estratégia de manutenção programa


útil.

16. Descreva uma situação de programação em que menor privilégio é uma boa estratégia para melhorar a segurança.

17. Explique por que a diversidade genética é um bom princípio para o desenvolvimento seguro. Cite um exemplo de falta de
diversidade que tem tido um impacto negativo na segurança.

18. Descrever como testes de segurança difere de testes de funcionalidade comum. Quais são os critérios para
passar um teste de segurança que diferem dos critérios funcionais?

19.
(A) Você recebe uma mensagem de email que pretende vir de seu banco. Ele pede para você clicar
em um link para algum propósito administrativa razoável-soando. Como você pode verificar se a
mensagem realmente veio de seu banco?

(B) Agora desempenhar o papel de um atacante. Como você pode interceptar a mensagem descrita no
item (a) e convertê-lo em seus propósitos enquanto ainda está fazendo tanto o banco eo cliente acha
que a mensagem é autêntico e confiável?
20. design aberto parece favorecer o atacante, porque ele certamente abre a implementação e talvez também o
projeto para o atacante para estudar. Justificar que as substituições de design aberto esta vantagem aparente e
realmente leva a segurança sólida.
4. O Lado Web-User

Neste capítulo:
• Os ataques contra os navegadores

• Ataques contra e de web sites


• Ataques que buscam dados sensíveis

• Os ataques através de e-mail

Neste capítulo, ir além dos programas gerais do capítulo anterior ao código mais específico que suporta interação do
usuário com a Internet. Certamente, código Internet tem todos os problemas potenciais de programas gerais, e você
deve manter o código malicioso, estouros de buffer, e alçapões em mente enquanto você lê este capítulo. No entanto,
neste capítulo olharmos mais especificamente para os tipos de ameaças à segurança e vulnerabilidades que o acesso à
Internet torna possível. Nosso foco aqui é no lado do usuário ou cliente: dano que pode vir a um usuário individual
interagindo com os locais de Internet. Então, em Capítulo 6 olharmos para problemas de rede de segurança em grande
parte fora reino ou controle do usuário, problemas como a intercepção de comunicações, ataques de repetição, e
negação de serviço.

Começamos este capítulo olhando para navegadores, o software mais usuários percebem como a porta de entrada para a
Internet. Como você já sabe, um navegador é um software com um papel relativamente simples: conectar a um endereço
web particular, buscar e exibir o conteúdo desse endereço, e transmitir dados de um usuário para esse endereço. Questões
de segurança para navegadores surgem de várias complicações a esse simples descrição, como estas:

• Um navegador muitas vezes se conecta a mais do que o endereço indicado na barra de endereços do navegador.

• Buscando dados pode acarretar acessos a vários locais para a obtenção de imagens, conteúdo de áudio e
outros conteúdos ligados.

• software navegador pode ser malicioso ou pode ser corrompido para adquirir funcionalidade maliciosa.

• browsers populares suportar add-ins, código extra para adicionar novos recursos ao navegador, mas
estes suplementos em si podem incluir código corruptor.

• exibição de dados envolve um conjunto de comandos rica que controla a renderização, posicionamento, movimento,
camadas e até mesmo invisibilidade.

• O navegador pode acessar todos os dados no computador de um usuário (sujeito a restrições de acesso de controle);
geralmente o navegador é executado com os mesmos privilégios do usuário.

• transferências de dados de e para o usuário são invisíveis, o que significa que ocorrem sem o conhecimento do
usuário ou permissão explícita.

Em um computador local que você pode restringir um programa de planilha para que ele possa acessar arquivos em apenas alguns
diretórios. software de edição de fotos pode ser executado off-line para garantir que as fotos não são liberados para o exterior. Os usuários
podem até inspecionar o conteúdo binário ou texto da palavra-
arquivos de processamento para pelo menos parcialmente confirmar que um documento não contém um determinado texto.

Browsers conectar usuários a redes externas, mas alguns usuários podem monitorar os dados reais
transmissíveis

Infelizmente, nenhuma dessas limitações são aplicáveis ​aos navegadores. Pela sua própria natureza, os navegadores
interagem com a rede externa, e para a maioria dos usuários e usos, é inviável para monitorar o destino ou conteúdo dessas
interações de rede. Muitas interações web começar no site A, mas, em seguida, conectar-se automaticamente aos sites B, C
e D, muitas vezes sem o conhecimento do usuário, muito menos permissão. Pior, uma vez que os dados chegam ao local A, o
usuário não tem controle sobre o que um faz.

efeito de um navegador é imediata e transitória: pressionando uma tecla ou clicar em um link envia um sinal, e raramente há
um registro completo para mostrar o que um navegador comunicado. Em suma, os navegadores são padrão peças, simples de
software que expõem os usuários a significativamente maiores ameaças de segurança que a maioria dos outros tipos de
software. Não surpreendentemente, atacando o navegador é muito popular e eficaz. Não são apenas os navegadores um alvo
popular, eles apresentam muitas vulnerabilidades para o ataque, como mostrado na Figura 4-1 , Que mostra o número de
vulnerabilidades descobertas nos principais navegadores (Google Chrome, Mozilla Firefox, o Microsoft Internet Explorer, Opera
e Safari), conforme relatado pela Secunia.

FIGURA 4-1 Número de vulnerabilidades descobertas em Navegadores

Com esta lista de potenciais vulnerabilidades que envolvem sites e navegadores, não é nenhuma maravilha ataques sobre os usuários
da Internet acontecem com freqüência alarmante. Observe, também, que, quando os principais fornecedores liberar patches para o código,
os navegadores são frequentemente envolvidos. Neste capítulo, olhar para as questões de segurança para os usuários finais, geralmente
envolvendo navegadores ou web sites e, geralmente, dirigido de forma maliciosa contra o usuário.

4.1 Ataques de navegador

Assaltantes ir atrás de um navegador para obter informações confidenciais, como números de contas ou senhas de
autenticação; para seduzir o usuário, por exemplo, o uso de anúncios pop-up; ou para instalar malware. Há três vetores de
ataque contra um navegador:

• Vá após o sistema operacional para que ele irá impedir o funcionamento correto e seguro do
navegador.

• Enfrentar o navegador ou um de seus componentes, add-ons ou plug-ins pelo que a sua


actividade é alterada.

• Interceptar ou modificar a comunicação de ou para o browser. Abordamos operando problemas do

sistema em capítulo 5 e comunicações de rede em


Capítulo 6 . Começamos esta seção olhando para vulnerabilidades de navegadores e formas de prevenir tais ataques.

Navegador tipos de ataque

Porque tantas pessoas (algumas delas relativamente ingênuos ou crédulos) usá-los, os navegadores estão convidando para
os atacantes. Um livro de papel é apenas o que parece; não há um agente oculto que pode mudar o texto em uma página,
dependendo de quem está lendo. Telefone, televisão e rádio são praticamente o mesmo: Um sinal de um ponto central para o
dispositivo de um usuário é normalmente não corrompido ou, se for alterado, a mudança é muitas vezes maior e facilmente
detectados, tais como estático ou uma imagem difusa. Assim, as pessoas naturalmente esperar a mesma fidelidade de um
navegador, mesmo que os navegadores são dispositivos programáveis ​e os sinais são expostos a modificação sutil durante a
comunicação.

Nesta seção, apresentamos vários ataques passaram por navegadores.

Man-in-the-Browser

UMA man-in-the-browser ataque é um exemplo de código malicioso que infectou um navegador. Código inserido no
navegador pode ler, copiar e redistribuir qualquer coisa que o usuário digita em um navegador. A ameaça aqui é que o
atacante irá interceptar e reutilizar as credenciais para acessar contas financeiras e outros dados confidenciais.

Man-in-the-browser: cavalo de Tróia que intercepta passagem de dados por meio do navegador

Em janeiro de 2008, pesquisadores de segurança liderado por Liam Omurchu da Symantec detectou um novo cavalo de Tróia,
que eles chamaram de SilentBanker. Este código ligado ao navegador da vítima como um objeto add-on ou navegador ajudante;
em algumas versões listado-se como um plug-in para exibir vídeo. Como um objeto auxiliar, ele estabeleceu para si própria para
interceptar navegador interno chama, incluindo aqueles para receber dados a partir do teclado, enviar dados para um URL, gerar
ou importar uma chave criptográfica, ler um arquivo (incluindo a exibição esse arquivo na tela), ou conectar a um site; esta lista
inclui praticamente tudo o que um navegador faz.

SilentBanker começou com uma lista de mais de 400 URLs de bancos populares em todo o mundo. Sempre que
viu um usuário vai a um desses sites, ele redirecionado keystrokes do usuário através do cavalo de Tróia e registrou
detalhes do cliente que transmitiu a computadores remotos (presumivelmente controlados pelos criadores do código).

Bancário e outras transações financeiras são normalmente protegidos em trânsito por uma sessão criptografada,
usando um protocolo chamado SSL ou HTTPS (que explicar em Capítulo 6 ), E identificados por um ícone de cadeado na
tela do navegador. Este protocolo significa que as comunicações do usuário são criptografados durante o trânsito. Mas
lembre-se que a criptografia, embora poderoso, pode proteger apenas o que ele pode controlar. Porque SilentBanker foi
incorporado dentro do navegador, que penetrado no processo de comunicação, conforme mostrado na

Figura 4-2 . Quando o usuário digitou os dados, o sistema operacional passou os caracteres à
browser. Mas antes que o navegador pode criptografar seus dados para transmitir para o banco, SilentBanker interveio,
agindo como parte do navegador. Observe que essa vulnerabilidade momento não teria sido combatida através de
qualquer um dos outros segurança se aproxima bancos usam, como uma imagem que apenas o cliente irá reconhecer
ou autenticação de dois fatores. Além disso, o URL na barra de endereços olhei e era autêntico, porque o navegador
realmente fez manter uma conexão com o site do banco legítimo.

FIGURA 4-2 SilentBanker Opera no Oriente do navegador

criptografia SSL é aplicada no navegador; dados são vulneráveis ​antes de ser criptografado.

Como se detalhes interceptar tais como nome, número da conta e dados de autenticação não foram suficientes,
SilentBanker também mudou o efeito das ações dos clientes. Assim, por exemplo, se um cliente instruído o banco para
transferir dinheiro para uma conta no banco A, SilentBanker convertido esse pedido para fazer a transferência ir para a
sua própria conta no banco B, que o banco do cliente devidamente aceito como se tivesse vindo de o cliente. Quando o
banco voltou a sua confirmação, SilentBanker mudou os detalhes antes de exibi-los na tela. Assim, o cliente descobriu
sobre o interruptor somente depois que os fundos não apareceu no banco A, conforme o esperado.

Uma variante de SilentBanker interceptado outros dados de utilizador sensíveis, utilizando um visor como os detalhes mostrados
nas Figura 4-3 . Os usuários vêem muitas caixas de solicitação de dados, e este parece autêntico. O pedido de valor simbólico pode
atacar alguns usuários como estranho, mas muitos usuários veriam URL do banco na barra de endereço e obedientemente inserir
dados privados.
FIGURA 4-3 Dados adicionais obtidas pelo homem no navegador

Como você pode ver, man-in-the-browser ataques pode ser devastador, porque eles representam um usuário válido,
autenticada. O cavalo de Tróia pudesse deslizar perfeitamente entre o usuário eo web site do banco, assim que todo o conteúdo
do banco ainda parecia autêntico. SilentBanker teve pouco impacto sobre os usuários, mas apenas porque foi descoberto de
forma relativamente rápida, e detectores de vírus foram capazes de erradicá-lo prontamente. No entanto, este pedaço de código
demonstra como poderoso tal ataque pode ser.

keystroke logger

Nós introduzimos uma outra abordagem ataque que é semelhante a um homem no browser. UMA
registador de teclas ( ou key logger) é hardware ou software que registra todas as teclas digitadas. O
logger quer retém estas teclas para uso futuro pelo atacante ou envia-los para o atacante através de uma
conexão de rede.

Como um dispositivo de hardware, um registador de batida de tecla é um objecto pequeno que liga a uma porta USB, que se
assemelha um plug-in adaptador wireless ou cartão de memória flash. Claro que, para comprometer um computador você tem que ter
acesso físico para instalar (e mais tarde recuperar) o dispositivo. Você também precisa esconder o dispositivo para que o usuário não
notará a logger (por exemplo, instalando-o na parte de trás de uma máquina desktop). Em software, o madeireiro é apenas um
programa instalado como qualquer código malicioso. Tais dispositivos podem capturar senhas, faça o login identidades, e todos os
outros dados digitados no teclado. Embora não se limitando a interação do navegador, um keystroke logger certamente poderia
gravar toda a entrada de teclado para o navegador.

Página-in-the-Middle

UMA page-in-the-middle ataque é outro tipo de ataque navegador em que um usuário é redirecionado para outra página.
Semelhante ao ataque man-in-the-browser, um ataque página pode esperar até que um usuário tenha ido para um determinado
site e apresentar uma página fictícia para o usuário. Como exemplo, quando o usuário clica em “login” para ir para a página de
login de qualquer local, o ataque pode redirecionar o usuário para a página do atacante, onde o atacante também pode capturar
as credenciais do usuário.
A reconhecidamente pequena diferença entre estes dois ataques navegador é que a ação the-browser-in-homem é
um exemplo de um navegador infectado que nunca pode alterar os sites visitados pelo usuário, mas trabalha nos
bastidores para capturar informações. Em uma ação middle-in-the, o atacante redireciona o usuário, apresentando
diferentes páginas da web para o usuário ver.

Programa Baixar Substituição

Juntamente com um ataque de página-in-the-middle é uma substituição download. Em um substituição download, o


atacante apresenta uma página com um programa desejável e aparentemente inócua para o usuário fazer o download, por
exemplo, uma barra de ferramentas do navegador ou um utilitário de organizador de fotos. O que o usuário não sabe é que,
em vez de ou em adição ao programa pretendido, os downloads atacante e instala códigos maliciosos.

Um usuário concordar em instalar um programa não tem nenhuma maneira de saber o que esse
programa vai realmente fazer.

A vantagem para o atacante de uma substituição programa de download é que os usuários foram condicionados a ser
cauteloso em transferências de programas, precisamente por medo de baixar códigos maliciosos. Neste ataque, o usuário
conhece e concorda com um download, não percebendo o que o código está realmente sendo instalado. (Então, novamente, os
usuários raramente sabem o que realmente instala depois clique em [Sim].) Este ataque também derrota controles de acesso dos
usuários que normalmente bloqueiam downloads e instalações de software, porque o usuário aceita intencionalmente este
software.

User-in-the-Middle

Uma forma diferente de ataque coloca um ser humano entre dois processos automatizados para que o ser humano ajuda
involuntariamente spammers registrar automaticamente para contas de e-mail gratuito.

UMA CAPTCHA é um quebra-cabeça que supostamente apenas uma humana pode resolver, por isso, um aplicativo de
servidor pode distinguir entre um ser humano que faz um pedido e um programa automatizado gerando o mesmo pedido
repetidamente. Pense em sites que solicitam votos para determinar a popularidade de programas de televisão. Para evitar ser
enganado por falsos votos a partir de scripts de programas automatizados, os locais de votação, por vezes, garantir a
interação com um ser humano ativo usando CAPTCHAs (um acrônimo para Completely Automated Public Turing teste para
dizer Computadores e Humans Apart-por vezes, encontrar palavras para coincidir com uma sigla inteligente é mais difícil do
que fazer o projeto em si).

O quebra-cabeça é uma seqüência de números e letras exibidos em uma forma torta sobre um fundo granulado, talvez com
linhas estranhas, como as imagens em Figura 4-4 ; o usuário tem que reconhecer a corda e digitá-lo em uma caixa de entrada.
Distorções são destinados para derrotar o software de reconhecimento óptico de caracteres que pode ser capaz de extrair os
caracteres. ( Figura 4-5 mostra uma paródia divertida de quebra-cabeças de CAPTCHA.) A linha é tênue entre o que um ser
humano ainda pode interpretar e que é muito distorcida para reconhecedores de padrões para lidar, conforme descrito no Sidebar
4-1 .
FIGURA 4-4 Exemplo CAPTCHA

FIGURA 5/4 CAPTCHA Spoof

Sidebar 4-1 CAPTCHA? Peguei vocês!

Vimos como CAPTCHAs foram projetadas para tirar proveito de como os seres humanos são muito melhores
em reconhecimento de padrões que são computadores. Mas CAPTCHAs, também, têm suas vulnerabilidades,
e eles podem ser derrotados com os tipos de técnicas de engenharia de segurança que apresentamos neste
livro. Como vimos em cada capítulo, um atacante astuto olha para uma vulnerabilidade para explorar e, em
seguida, projeta um ataque para tirar proveito dela.

Da mesma forma, Jeff Yan e Ahmad Salah El Ahmad [ YAN11 ] Derrotado CAPTCHAs, incidindo sobre
invariantes-coisas que não mudam, mesmo quando os CAPTCHAs distorcê-las. Eles investigaram
CAPTCHAs produzidos pelos principais serviços web, incluindo Google, Microsoft e Yahoo para seus
serviços de e-mail gratuito, como Hotmail. Um serviço agora extinto chamado CAPTCHAservice.org
fornecido CAPTCHAs para web sites comerciais para uma taxa. Cada um dos personagens em
CAPTCHAs desse serviço teve um número diferente de pixels, mas o número de pixels para um
determinado personagem permaneceu constante quando o personagem foi distorcida

- um invariante que permitiu Yan e El Ahmad para diferenciar uma personagem de outro
sem ter de reconhecer o carácter. CAPTCHAs do Yahoo
utilizado um ângulo fixo para transformação da imagem. Yan e El Ahmad destacou que “Explorando
invariantes é uma estratégia clássica criptoanálise. Por exemplo, diferencial obras criptoanálise pela
observação de que um subconjunto de pares de textos tem um relacionamento invariante preservada
através de numerosos ciclos de cifra. Nosso trabalho demonstra que a exploração invariantes também é
eficaz para estudar CAPTCHA robustez.”

Yan e Ahmad utilizado com sucesso técnicas simples para derrotar os CAPTCHAs, como a contagem de
pixels, segmentação de preenchimento de cor e análise de histograma. E eles derrotaram dois tipos de
invariantes: nível de pixel e nível string. A invariante de nível de pixel pode ser explorada por processar as
imagens CAPTCHA no nível de pixel, com base no que não muda (tais como número de pixels ou ângulo
de personagem). invariantes de nível corda não mudam ao longo de todo o comprimento da corda. Por
exemplo, a Microsoft em 2007 usou um CAPTCHA com um comprimento constante de texto na seqüência
de desafio; este invariante activado Yan e El Ahmad para identificar e segmento ligado caracteres. A
confiança em palavras do dicionário é um outro nível seqüência invariável; como vimos com senhas
baseadas em dicionário, o dicionário limita o número de escolhas possíveis.

Então, como podem essas vulnerabilidades ser eliminado? Com a introdução de um certo grau de
aleatoriedade, como um número imprevisível de caracteres em uma seqüência de texto. Yan e El Ahmad
recomendado “Introduc [ndo] mais tipos de padrões de forma globais e tê-los ocorrer em ordem aleatória,
tornando assim mais difícil para os computadores para diferenciar cada tipo.” CAPTCHAs do Google
permitem que os personagens a correr juntos; pode ser possível remover o espaço em branco entre
caracteres, desde que a legibilidade não sofre. Yan e El Ahmad salientar que este tipo de análise de
engenharia de segurança leva CAPTCHAs para mais robustos, um processo que espelha o que já vimos
em outras técnicas de segurança, como criptografia e desenvolvimento de software.

Sites que oferecem contas de e-mail gratuito, como Yahoo Mail e Hotmail, use CAPTCHAs em sua conta fase de criação
para garantir que apenas os seres humanos individuais obter contas. Os serviços de correio não querem que suas contas
sejam usadas por remetentes de spam que usam milhares de novos nomes de conta que ainda não são reconhecidos por
filtros de spam; depois de usar a conta para um dilúvio de spam, os remetentes vai abandonar esses nomes de contas e
passar para outro bando. Assim, os spammers precisam de uma fonte constante de novas contas, e eles gostariam de
automatizar o processo de obtenção de novos.

Sidebar 4-2 Reféns colombianas livrou por Man-in-the-Middle Truque

guerrilhas colombianas capturaram candidata presidencial Ingrid Betancourt, em 2002, junto com outros
presos políticos. Os guerrilheiros, parte do movimento FARC, tinha considerado Betancourt e três
empreiteiros norte-americanos para ser seus prisioneiros mais valiosos. Os cativos foram libertados em
2008 por meio de um esquema que envolve dois infiltrações: uma infiltração do grupo local que realizou
os reféns, e o outro da estrutura de comando central Farc.

Ter se infiltrado organização de comando central dos guerrilheiros, funcionários da Defesa colombiano,
enganou o comandante das FARC local, conhecido como Cesar, em
acreditando os reféns eram para ser transferido para o comandante supremo das FARC, Alfonso Cano.
Porque os infiltrados sabia que César estava familiarizada com a maioria dos outros na organização
FARC, eles exploraram o seu conhecimento, enviando-lhe mensagens falsas, supostamente da equipe
de Cano, aconselhando-o do plano para mover os reféns. No plano Cesar foi dito para ter os reféns,
Betancourt, os americanos, e 11 outros colombianos, pronto para helicópteros para buscá-las. Os dois
helicópteros brancas simples, carregados com soldados jogar as partes de guerrilheiros melhor do que
alguns atores profissionais podia, voou para o acampamento das FARC.

Agentes nos helicópteros obrigados mãos dos reféns e carregado-los a bordo; Cesar e outro captor
também embarcou no helicóptero, mas uma vez no ar, eles foram rapidamente dominado pelos soldados.
Betancourt e os outros realmente acreditavam que estavam sendo transferidos para outro acampamento das
FARC, mas o comandante disse-lhe que tinha vindo para resgatá-la; somente quando ela viu seu ex-captor
mentindo ligado no chão ela realmente acreditar que ela estava finalmente livre.

Infiltração de tanto o campo de local e a estrutura de comando sênior de Farc deixar o defesa
colombiano realizar este ataque complexo man-in-the-middle. Durante a preparação elaborada,
infiltrados em ambas as extremidades e penetrado no alterou a comunicação entre César e Cano. O
ardil man-in-the-middle foi complicado porque os intrusos tiveram que ser capaz de representar
Cesar e Cano em tempo real, com fatos apropriados para os dois funcionários das Farc. Quando
encaixotado com o conhecimento não é suficiente, os intermediários caiu a conexão de telefone, algo
crível, dado o estado da rede de telecomunicações da Colômbia no momento.

Petmail ( http://petmail.lothar.com ) É um sistema de e-mail anti-spam proposto. No


A inscrição do autor hipótese do seguinte ataque man-in-the-middle contra CAPTCHAs da conta fornecedores de
e-mail gratuito. Primeiro, o remetente de spam cria um site que irá atrair visitantes; o autor sugere um site com fotos
pornográficas. Em segundo lugar, o spammer obriga as pessoas a resolver um CAPTCHA, a fim de entrar no site e
ver as fotos. No momento em que um usuário solicita acesso, o originador de spam gera automaticamente um
pedido para criar uma nova conta de e-mail (Hotmail, por exemplo). Hotmail apresenta um CAPTCHA, que o
spammer, em seguida, apresenta ao solicitante pornografia. Quando o solicitante entra na solução, o spammer
encaminha essa solução de volta ao Hotmail. Se a solução for bem sucedido, o spammer tem uma nova conta e
permite que o usuário veja as fotos; Se a solução falhar, o spammer apresenta um novo desafio CAPTCHA para o
usuário. Desta forma, o atacante no meio emendas em conjunto duas interações através da inserção de uma
pequena quantidade do segmento de criação de conta para o meio do fio de acesso foto. O usuário não tem
conhecimento da interação no meio.

Como Ataques navegador suceder: Falha Identificação e Autenticação

O fracasso central destes ataques in-the-middle é a autenticação com defeito. Se A não pode ser assegurado que o remetente de
uma mensagem é realmente B, A não pode confiar a autenticidade de qualquer coisa na mensagem. Nesta seção, vamos considerar
a autenticação em diferentes contextos.

Autenticação humana
À medida que expôs pela primeira vez em Capítulo 2 , A autenticação é baseado em algo que você sabe, são ou
possuir. As pessoas usam essas qualidades o tempo todo no desenvolvimento de autenticação face-a-face. Exemplos de técnicas de
autenticação humanos incluem licença ou bilhete de identidade de motorista, uma carta de apresentação de um conhecimento mútuo
ou terceira parte confiável, uma imagem (de reconhecimento de uma face), um segredo compartilhado, ou uma palavra. (O uso original
de “password” era uma palavra disse a um guarda para permitir que o alto-falante para passar por um posto de controle.) Porque nós
seres humanos julgamento exercício, desenvolvemos um sentido para quando uma autenticação é adequada e quando algo não
parece certo . Claro, os seres humanos também pode ser enganado, conforme descrito no

Sidebar 4-2 . Em Capítulo 2 nós exploramos autenticação-a-computador humano que usou técnicas sofisticadas como a biometria e
os chamados cartões de identidade inteligentes. Embora este campo está avançando rapidamente, usabilidade humana precisa
ser considerado em tais abordagens: Poucas pessoas vão, muito menos pode, memorizar muitos, senhas longas e insondáveis
​únicas. Esses fatores humanos pode afetar a autenticação em muitos contextos porque os seres humanos têm, frequentemente,
um papel na autenticação, mesmo de um computador para outro. Mas autenticação de computador computador-a- totalmente
automatizado tem dificuldades adicionais, como descrevemos a seguir.

Autenticação de computador

Quando um usuário se comunica on-line com um banco, a comunicação é realmente navegador to- pelo usuário e de
computador a banco computador de. Embora o banco realiza a autenticação do usuário, o usuário tem pouco sentido de
ter autenticado o banco. Pior, o navegador do usuário e do computador no meio realmente interagir com o sistema de
computação do banco, mas o usuário não realmente ver ou controlar essa interação. O que é necessário é um caminho
confiável dos olhos do usuário e os dedos para o banco, mas esse caminho passa através de um navegador opaco e
computador.

autenticação de computador usa as mesmas três primitivas como autenticação humano, com variações óbvias. Há
relativamente poucas maneiras de usar algo um computador tem ou é para autenticação. Se o endereço de um
computador ou número de série de um componente não pode ser falsificado, que é um autenticador de confiança, mas
falsificação ou representação ataques podem ser sutis. Computadores não inata “saber” alguma coisa, mas eles podem
se lembrar (loja) muitas coisas e obter muitos mais. O problema, como você viu com temas como a troca de chave
criptográfica, é como desenvolver um segredo compartilhado por apenas dois computadores.

Além de obter os dados de autenticação sólida, você também deve considerar como a autenticação é implementada.
Essencialmente cada saída de um computador é controlado por um software que pode ser malicioso. Se um computador
responde a um tempo com a senha de um usuário, o software pode direcionar esse computador para salvar a senha e
posterior reutilização ou repeti-la para outro processo, como foi o caso com o ataque SilentBanker man-in-the-browser. Se
a autenticação envolve computação resultado de criptografia, a chave de criptografia deve ser colocado em algum lugar
durante a computação, e que poderia ser suscetível a cópia por outro processo malicioso. Ou do outro lado, se o software
pode interferir com o código de autenticação de verificação para fazer qualquer valor ter sucesso, a autenticação é
comprometida. Portanto, vulnerabilidades em autenticação incluem não apenas os dados de autenticação, mas também
os processos utilizados para implementar a autenticação. Halperin et al. [ HAL08a ] Apresentar uma descrição de
refrigeração essa vulnerabilidade na análise de controlo de rádio de dispositivos medicinais implantáveis ​tais como
pacemakers. Nós exploramos desses riscos, Capítulo 13 quando consideramos
implicações de segurança do “ Internet das Coisas “.

Seu banco toma medidas para autenticar você, mas como você pode autenticar o seu banco?

Mesmo se deixamos de lado por um momento o problema da autenticação inicial, também precisamos considerar o
problema da autenticação contínua: Após um computador foi autenticado outra e está pronto para se envolver em algum tipo
de troca de dados, cada computador tem de acompanhar para uma espionagem telefónica ou à ataque sequestro pelo qual
um novo computador iria entrar em comunicação, falsamente alegando ser a um autenticado, como representado na Figura
4-6 .

Figura 4-6 Sem Autenticação contínua Nem finais podem confiar na outra Às vezes negligenciado na discussão
de autenticação é que a credibilidade é uma questão de dois lados: O sistema precisa de garantia de que o usuário é
autêntico, mas o usuário precisa disso mesma certeza sobre o sistema. Esta segunda questão conduziu a uma nova
classe de fraude de computador chamado phishing, em que um usuário desavisado envia informações confidenciais a
um sistema malicioso representando um confiável. (Nós exploramos phishing mais adiante neste capítulo.) Alvos
comuns de ataques de phishing são os bancos e outras instituições financeiras: Golpistas usam os dados sensíveis
que obtêm de clientes para tirar dinheiro dos clientes das instituições reais. Outros ataques de phishing são usados
​para plantar códigos maliciosos no computador da vítima.

Assim, a autenticação é vulnerável em vários pontos:

• Usabilidade e precisão pode entrar em conflito para identificação e autenticação: Um sistema mais utilizável pode
ser menos precisas. Mas os usuários exigem usabilidade, e pelo menos alguns projetistas de sistemas prestar
atenção a estas demandas dos usuários.

• Computer-to-computador interação permite bases limitadas para autenticação. autenticação de computador é


baseada principalmente no que o computador sabe, ou seja, armazenados ou dados computáveis. Mas os dados
armazenados podem ser localizados por processos não autorizados, eo que um computador pode calcular assim
pode outra.
• O software malicioso pode minar a autenticação por espionagem de (interceptar) os dados de autenticação e
permitindo que ele seja reutilizado posteriormente. código de ataque bem colocado também pode esperar até
que um usuário concluiu a autenticação e, em seguida, interferir com o conteúdo da sessão autenticada.

• Cada lado de um intercâmbio computador precisa de garantia da identidade autêntica do lado oposto. Isto é
verdade para as interações humano-a-computador, bem como para o computador-a-homem.

A situação específica de ataques man-in-the-middle nos dá algumas contramedidas interessantes para se


candidatar a identificação e autenticação.

Identificação de sucesso e Autenticação

Apelando à atividade humana cotidiana dá algumas contramedidas úteis para ataques contra a
identificação e autenticação.

Segredo partilhado

Bancos e empresas de cartão de crédito lutam para encontrar novas maneiras para garantir que o titular de um
número de cartão de crédito é autêntico. O primeiro segredo era o nome de solteira da mãe, que é algo que um
banco poderia ter perguntado quando alguém abriu uma conta. No entanto, quando todas as instituições financeiras
começaram a usar esse mesmo segredo, ele já não era tão secreta. Em seguida, as empresas de cartão de crédito
mudou-se para um número de verificação segredo impressa em um cartão de crédito para provar a pessoa que dá o
número do cartão também possuía o cartão. Mais uma vez, o uso excessivo está reduzindo a utilidade deste
autenticador. Agora, as instituições financeiras estão pedindo novos clientes para apresentar as respostas às
perguntas, presumivelmente, apenas a pessoa certa vai saber. Rua em que você cresceu, primeira escola
frequentada, e modelo do primeiro carro estão se tornando popular, talvez muito popular.

O conceito básico é de um segredo compartilhado, algo que só as duas entidades na extremidade deve saber. Um ataque humana
man-in-the-middle podem ser derrotados se um partido pergunta ao outro uma pergunta direta sobre um jantar que tivemos juntos ou
detalhes de um recente evento corporativo, ou algum outro tema comum. Da mesma forma, um segredo compartilhado para os
sistemas de computador podem ajudar a autenticar. segredos possíveis poderão envolver a hora ou data do último login, hora da última
atualização, ou o tamanho de um arquivo de aplicação particular.

Para ser eficaz, um segredo compartilhado deve ser algo que nenhum agente meio malicioso pode

saber. One-Time Password

Como o próprio nome indica, um senha de uso único é bom para apenas um uso. Para usar um esquema de senha de uso
único, as duas partes finais precisam ter uma lista segredo compartilhado de senhas. Quando uma senha é usada, ambas as partes
marcar a palavra fora da lista e usar a próxima palavra da próxima vez.

O token SecurID, introduzido em Capítulo 2 , Gera um novo número aleatório cada 60


segundos. O computador receptor tem um programa que pode calcular o número aleatório para qualquer momento, para
que ele possa comparar o valor inserido contra o valor esperado.
Out-of-Band Comunicação

Fora-de-banda de comunicação significa transferir um fato ao longo de um caminho de comunicação em separado a


partir de outro fato. Por exemplo, PINs de cartão de crédito são sempre enviados separadamente do cartão de banco
para que, se o envelope contendo o cartão for roubado, o ladrão não pode usar o cartão sem o PIN. Da mesma forma, se
um cliente pede um banco sobre ter esquecido um PIN, o banco não se limita a fornecer um novo PIN em que conversa
por telefone; o banco mails por carta separada, contendo um novo PIN para o endereço do titular da conta no arquivo.
Desta forma, se alguém estivesse representando o cliente, o PIN não iria para o imitador. Alguns bancos confirmar
grandes transferências de fundos de Internet, enviando uma mensagem de texto para o celular do usuário. No entanto,
como Sidebar 4-3 indica, telefones celulares também estão sujeitos a ataques man-in-the-middle.

Sidebar 4-3 Man-in-the-Mobile Ataque


O cavalo de Tróia Zeus é uma das peças mais prolíficos de código malicioso. É configurável, fácil para um
atacante de usar e eficaz. Seus proprietários atualizar continuamente e modificá-lo, na medida em que a
empresa de segurança Symantec contou mais
70.000 variações do código básico. Por causa do número de cepas, detectores de códigos maliciosos deve atualizar
suas definições constantemente. Zeus vende no mercado de hackers por algumas centenas de dólares. Segmentação
interações site financeiro, ele pode pagar por si mesmo com uma única exploração.

Zeus assumiu o mercado de mensagens de telefone celular, também. Segundo a empresa de segurança
S21Sec, Zeus agora tem um aplicativo que pode ser inadvertidamente transferidos para smartphones; usando
mensagens SMS, Zeus se comunica com o seu centro de comando e controle. Mas porque é instalado no
celular, ele também pode bloquear ou alterar mensagens de texto enviadas por uma instituição financeira para o
celular de um cliente.

O Departamento de Defesa dos EUA usa um telefone seguro chamado um STU-III. Um cliente faz uma chamada e,
depois de estabelecer comunicação com o partido correta do outro lado, ambas as partes pressionar um botão para os
telefones para entrar no modo seguro; os telefones em seguida, criptografar o resto da conversa. Como parte da
configuração para entrar em modo seguro, os dois telefones juntos derivar um número aleatório que eles, em seguida,
exibir em uma janela no telefone. Para se proteger contra um ataque man-in-the-middle, os chamadores são instruídos
a recitar o número para que ambas as partes concordam que eles têm o mesmo número na janela do seu telefone. Um
grampeador no meio pode ser capaz de interceptar a chamada configuração inicial e chamar o destinatário em um
segundo telefone STU-III. Em seguida, sentado com o auscultador de um estu- III-se contra o bocal do outro, o intruso
poderia executar um ataque man-in-the-middle. No entanto, estes dois telefones estabeleceria duas sessões diferentes
e exibir diferentes números aleatórios, de modo que as partes finais saberia a conversa estava sendo interceptado
porque, por exemplo, pode-se ouvir o número 101, mas ver 234 no visor.

Como mostram esses exemplos, o uso de algumas informações para fora, seja um segredo compartilhado ou algo
comunicada fora de banda, pode frustrar um ataque man-in-the-middle.

Autenticação contínua
Em vários lugares neste livro discutimos a necessidade de um mecanismo de autenticação contínua. Apesar de não ser perfeito
naqueles que diz respeito, criptografia forte faz percorrer um longo caminho em direção a uma solução.

Se duas partes exercer uma comunicação criptografada, um intruso que querem entrar para a comunicação deve
quebrar a criptografia ou fazer com que seja reposto com uma nova troca de chaves entre o interceptor e um fim.
(Esta última técnica é conhecido como um sequestro sessão, que nós estudamos em Capítulo 6 .) Ambos os ataques
são complicado, mas não impossível. No entanto, essa contramedida é frustrado se o atacante pode interferir na
comunicação pré-criptografia ou pós-descriptografia. Estes problemas não diminuem a força geral da criptografia para
manter a autenticação entre duas partes. Mas esteja ciente de que a criptografia por si só não é um pó de fada
mágica que contraria todas as falhas de segurança e que a criptografia mal utilizada pode dar uma falsa sensação de
segurança.

A criptografia pode fornecer autenticação contínua, mas é preciso ter cuidado para configurá-lo
corretamente e proteger os pontos finais.

Estes mecanismos de assinaturas, segredos partilhados, de uma só vez senhas e out-of-band comunicações são
todas as formas de estabelecer um contexto que inclui partes autênticas e exclui impostores.

4.2 Ataques na web para usuários

A seguir, consideramos duas classes de situações que envolvem o conteúdo da web. O primeiro tipo envolve falsa
de conteúdo, provavelmente porque o conteúdo foi modificado por alguém não autorizado; com estes a intenção é
enganar o espectador. A segunda, mais perigoso, tipo visa prejudicar o espectador.

Conteúdo falsa ou enganosa

Às vezes é difícil dizer quando uma obra de arte é autêntica ou uma falsificação; especialistas em arte podem debater
durante anos que o verdadeiro artista é, e mesmo quando não há consenso, a atribuição de um da Vinci ou pintura de
Rembrandt é opinião, não a certeza. Como Sidebar 4-4 refere-se; autoria das obras de Shakespeare pode nunca ser
resolvido. Pode ser mais fácil de dizer quando uma pintura é não por um famoso pintor: Desenho de pastel de uma criança
nunca será confundido com algo por um artista famoso, porque, por exemplo, Rembrandt não usar lápis ou ele usou luz,
sombra e perspectiva mais madura do que uma criança.

Sidebar 4-4 Quem Escreveu peças de Shakespeare?

A maioria das pessoas iria responder “Shakespeare” quando perguntado sobre quem escreveu alguma das peças
atribuídas ao bardo. Mas para mais de 150 anos os estudiosos da literatura tiveram suas dúvidas. Em 1852, foi
sugerido que Edward de Vere, conde de Oxford, escreveu pelo menos algumas das obras. Durante décadas debate
acadêmico se enfureceu, citando os poucos fatos conhecidos da educação de Shakespeare, viagens, horário de
trabalho e experiência.

Na década de 1980 uma nova técnica analítica foi desenvolvido: análise computadorizada de texto. Diferentes
pesquisadores estudaram qualidades tais como a escolha de palavras, imagens utilizadas em diferentes peças de teatro,
pares de palavras, estrutura de sentença, e similares, qualquer alteração estrutural
elemento que poderia mostrar similaridade ou dissimilaridade. (Ver, por exemplo, [ FAR96 ] E [ KAR01 ], assim
como www.shakespeareoxfordfellowship.org .) O debate continua como os pesquisadores a desenvolver mais e
mais qualidades para se correlacionam entre os bancos de dados (a linguagem dos jogos e outras obras
atribuídas a Shakespeare). A controvérsia provavelmente nunca será resolvido.

Mas a técnica tem se mostrado útil. Em 1996, um autor chamado Anonymous publicou o romance Cores
primárias. Muitas pessoas tentaram determinar quem foi o autor. Mas Donald Foster, professor da Vassar
College, auxiliado por algumas ferramentas de computador simples, atribuiu o romance para Joe Klein, que
mais tarde admitiu ser o autor. Peter Neumann [ NEU96 ] No fórum Riscos, observa o quão difícil é mentir de
maneira convincente, mesmo tendo tentado alterar o seu estilo de escrita, dada “registros telefônicos,
registros de cartões de crédito, bancos de dados de reserva de avião, registros da biblioteca, vizinhos
Snoopy, encontros coincidentes, etc.” - no suma, dada a agregação.

A abordagem tem usos fora do campo literário. Em 2002, o Instituto SAS, fornecedores de software de análise
estatística, introduziu o software de mineração de dados para encontrar padrões em mensagens de email antigas e
outras massas de texto. Até agora, a mineração de dados é um setor empresarial importante, muitas vezes usado para
direcionar o marketing para as pessoas com maior probabilidade de ser clientes. (Veja a discussão sobre mineração de
dados em Capítulo 7 .) SAS sugere análise de padrão pode ser útil para identificar e bloquear falso e-mail. Outra utilização
possível detectar mentiras, ou talvez apenas sinalizar potenciais inconsistências. Ele também tem sido usado para ajudar
a localizar o autor do código malicioso.

O caso de artefatos de computador é semelhante. Uma mensagem incoerente, uma página web cheia de erros
gramaticais, ou uma posição política peculiar podem alertar que algo é suspeito, mas uma falsificação bem trabalhada
pode passar sem questionar. As falsidades que se seguem incluem ambas as falsificações óbvias e sutis.

Web Site desfigurado

O mais simples ataque, uma defacement site, ocorre quando um atacante substitui ou modifica o conteúdo
de um site legítimo. Por exemplo, em janeiro de 2010, a BBC informou que o site do novo presidente da União
Europeia foi desfigurado para apresentar uma imagem de British ator cômico Rowan Atkinson (Mr. Bean) em
vez do presidente.

A natureza desses ataques varia. Muitas vezes, o atacante apenas escreve uma mensagem como “Você foi tinha”
sobre o conteúdo da página web para provar que o site foi hackeado. Em outros casos, o atacante envia uma mensagem
de oposição à mensagem do site web original, tal como um grupo de direitos animais protestando maus-tratos de animais
no local de um grupo de cão-competindo. Outras mudanças são mais sutis. Por exemplo, ataques políticos recentes têm
sutilmente substituído o conteúdo do próprio site de um candidato a implicar falsamente que um candidato tinha dito ou
feito algo impopular. Ou usando modificação website como um primeiro passo, o atacante pode redirecionar um link na
página para um local malicioso, por exemplo, para apresentar uma caixa de login falso e obter login e senha da vítima.
Todos estes ataques tentar derrotar a integridade da página web.

Os objetivos de invasões de sites também variam. Às vezes, o objetivo é apenas para provar um ponto ou
constranger a vítima. Alguns atacantes procuram fazer uma política ou ideológica
declaração, enquanto outros buscam apenas a atenção ou respeito. Em alguns casos o atacante está mostrando um
ponto, provando que era possível derrotar integridade. Sites como os da
New York Times, o Departamento de Defesa ou FBI, e os partidos políticos eram frequentemente alvo desta forma. Sidebar
4-5 descreve desfigurar Web site de uma empresa de antivírus.

Hit Web Site da barra lateral 4-5 Antivírus Criador

modificações site não são novidade. Mas quando o site de uma empresa de segurança é atacado, as pessoas tomar
conhecimento. Durante várias horas em 17 de outubro de 2010, os visitantes para um site de download de pesquisa de
segurança e empresa de produtos de antivírus Kaspersky foram redirecionados para sites que servem software antivírus
falso.

Depois de descobrir o redirecionamento, o Kaspersky tomou o servidor afetado desligada, culpando o incidente
em “um aplicativo de terceiros com defeito.” [ ITPro, 19 de outubro de 2010]

O ladrão de banco Willy Sutton é relatado para ter dito quando lhe perguntaram por que roubava bancos,
“que é onde está o dinheiro.” Que melhor maneira de esconder código malicioso que por cooptação o web site de
uma empresa cujos clientes estão prontos para instalar o software, pensando que estão se protegendo contra
códigos maliciosos?

A desfiguração é comum não só por causa de sua visibilidade, mas também por causa da facilidade com que se pode ser feito.
Web sites são projetados de modo que seu código é baixado, permitindo que um invasor para obter o documento de hipertexto
completo e todos os programas direcionados para o cliente no processo de carregamento. Um atacante pode até mesmo ver os
comentários dos programa