Você está na página 1de 52

Capítulo 1

Introdução

Sumário

1.1 Conceitos básicos 2


1.1.1 Confidencialidade, integridade e disponibilidade 3
1.1.2 Garantia, autenticidade e anonimato 9
1.1.3 Ameaças e ataques 14
1.1.4 Princípios de segurança 15
1.2 Modelos de controle de acesso 19
1.2.1 Matrizes de controle de acesso 19
1.2.2 Lista de controle de acesso 20
1.2.3 Competências 22
1.2.4 Controle de acesso baseado em papéis 23
1.3 Conceitos criptográficos 25
1.3.1 Encriptação 25
1.3.2 Assinaturas digitais 30
1.3.3 Ataques simples a criptossistemas 31
1.3.4 Funções hash criptográficas 34
1.3.5 Certificados digitais 36
1.4 Questões de implementação e usabilidade 38
1.4.1 Eficiência e usabilidade 38
1.4.2 Senhas 40
1.4.3 Engenharia social 41
1.4.4 Vulnerabilidades provenientes de
erros de programação 43
1.5 Exercícios 45
2 Introdução à Segurança de Computadores

1.1 Conceitos básicos

Neste capítulo, introduzimos diversos conceitos básicos em segurança de


computadores. Os tópicos variam de primitivas de criptografia teóricas,
como assinaturas digitais, a questões práticas de usabilidade, como engenha-
ria social. Este capítulo faz uma descrição informal e intuitiva de diversos
tópicos que serão abordados em mais detalhes no restante do livro.
Sistemas de computação existentes podem conter características herda-
das de versões antigas que datam de eras há muito passadas, como quando
a Internet era de domínio único de pesquisadores acadêmicos e laboratórios
militares. Por exemplo, a suposição de confiança e de ausência de compor-
tamento malicioso entre máquinas conectadas em rede, que pode ter sido
justificável no início dos anos 1980, surpreendentemente ainda está presente
na maneira como a Internet opera hoje. Tais suposições têm levado ao cresci-
mento do crime baseado na Internet.
Um aspecto importante da segurança de computadores é a identificação
de vulnerabilidades em sistemas de computadores, que podem, por exemplo,
permitir a um usuário malicioso obter acesso a dados privados e mesmo as-
sumir pleno controle de uma máquina. Vulnerabilidades permitem diversas
formas de ataques. A análise desses ataques pode determinar a gravidade do
dano que pode ser infligido e a possibilidade do ataque ser posteriormente
replicado. As ações que precisam ser adotadas para a defesa contra ataques
incluem identificar máquinas comprometidas, remover o código malicioso e
corrigir os sistemas para eliminar a vulnerabilidade.
Para obter um sistema de computação seguro, modelos sólidos são o
primeiro passo. Em particular, é importante definir as propriedades de segu-
rança que devem ser asseguradas, antecipar os tipos de ataques que podem
ser lançados e desenvolver defesas específicas. O projeto também pode levar
em consideração questões de usabilidade. Na verdade, medidas de seguran-
ça difíceis de entender e inconvenientes de seguir provavelmente levarão ao
fracasso de sua adoção. Em seguida, a implementação do hardware e do soft-
ware de um sistema precisa ser rigorosamente testada para detectar erros de
programação que introduzem vulnerabilidades. Após o sistema ser libera-
do, procedimentos devem ser adotados para monitorar o comportamento do
sistema, detectar brechas de segurança e reagir a elas. Finalmente, correções
do sistema relativas à segurança devem ser aplicadas assim que se tornarem
disponíveis.
Conceitos de segurança de computadores muitas vezes são melhor com-
preendidos ao examinarmos as questões em um contexto mais amplo. Por
essa razão, este livro também inclui discussões de segurança de diversos sis-
temas físicos e do mundo real, incluindo bloqueios, caixas eletrônicos e revis-
ta de passageiros em aeroportos.
Capítulo 1 Introdução 3

1.1.1 Confidencialidade, integridade e disponibilidade


Computadores e redes têm sido cada vez mais mal usados. Spam, phishing e
vírus de computadores estão se tornando problemas extremamente caros, à me-
dida que o roubo de identidade impõe uma ameaça séria às finanças pessoais e
taxas de crédito de usuários e cria dívidas para empresas. Portanto, existe uma
necessidade crescente de um maior conhecimento de segurança de computado-
res na sociedade, bem como mais especialização entre profissionais de tecno-
logia de informação. A sociedade precisa de mais profissionais de computação
treinados em segurança, que possam defender e evitar, com sucesso, ataques
contra computadores, bem como usuários treinados em segurança, que possam
gerenciar de forma segura sua própria informação e os sistemas que usam.
Uma das primeiras coisas que precisamos fazer em um livro sobre se-
gurança de computadores é definir nossos conceitos e termos. Tradicional-
mente, segurança de informação tem sido definida nos termos do acrônimo
C.I.D. (do inglês C.I.A., confidentiality, integrity, availability), que significa
confidencialidade, integridade e disponibilidade. (Ver Figura 1.1.)

Integridade

Confidencialidade Disponibilidade

Figura 1.1 Os conceitos C.I.D: confidencialidade, integridade e disponibilidade.


4 Introdução à Segurança de Computadores

Confidencialidade
No contexto de segurança de computadores, confidencialidade é evitar a re-
velação não autorizada de informação. Isto é, confidencialidade envolve a
proteção de dados, propiciando acesso àqueles que são autorizados a vê-los e
não permitindo que outros saibam algo a respeito de seu conteúdo.
Manter a informação secreta é muitas vezes a essência da segurança
de informação, e esse conceito, na verdade, antecede os computadores. Por
exemplo, no primeiro uso registrado de criptografia, Júlio César comunicava
comandos a seus generais usando uma codificação simples. Na sua codifica-
ção, César pegava cada letra na sua mensagem e substituía D por A, E por B e
assim por diante. Essa codificação pode ser facilmente quebrada, tornando-a
uma ferramenta inadequada para obter confidencialidade. Mas, na época, a
codificação de César era provavelmente bastante segura, visto que a maioria
dos inimigos de César não conseguia ler em latim.
Atualmente, obter confidencialidade é mais desafiador. Computado-
res estão em todos os lugares e cada um é capaz de executar operações que
podem comprometer a confidencialidade. Com todas essas ameaças à confi-
dencialidade da informação, pesquisadores de segurança de computadores e
projetistas de sistemas têm desenvolvido muitas ferramentas para proteger
informação sensível. Essas ferramentas incorporam os seguintes conceitos;
• Encriptação: a transformação de informação usando um segredo, cha-
mado de chave de encriptação, de modo que essa informação transfor-
mada possa apenas ser lida usando outro segredo, denominado de cha-
ve de decriptação (que pode, em alguns casos, ser a mesma chave de
encriptação). Para ser seguro, um esquema de encriptação deve tornar
extremamente difícil para alguém descobrir a informação original sem o
uso da chave de decriptação.
• Controle de acesso: regras e políticas que limitam o acesso a informação
confidencial apenas para aquelas pessoas e/ou sistemas com uma “ne-
cessidade de saber”. Essa necessidade de saber pode ser determinada
por identidade, como o nome da pessoa ou o número serial do compu-
tador, ou pelo papel que alguém desempenha, como ser um gerente ou
um especialista em segurança de computadores.
• Autenticação: a determinação da identidade ou do papel de alguém.
Essa determinação pode ser feita de diversas maneiras diferentes, mas
é geralmente baseada em uma combinação de algo que a pessoa tem
(como um cartão inteligente ou um dispositivo que armazena chaves
secretas), algo que a pessoa sabe (como uma senha) e algo que a pessoa é
(como sua impressão digital). O conceito de autenticação é ilustrado de
forma esquemática na Figura 1.2.
• Autorização: a determinação se uma pessoa ou um sistema tem per-
missão de acessar os recursos, com base em uma política de controle de
acesso. Tal autorização deve evitar que um atacante engane o sistema
para que este permita o seu acesso a recursos protegidos.
Capítulo 1 Introdução 5

Pessoa com dedos


e olhos senha=ucIb()w1V
mãe=Jones
animal de estimação=Caesar

Algo que você é

Algo que você sabe

Dispositivo com
chave secreta

Algo que você tem


Figura 1.2 Três bases para autenticação.

• Segurança física: o estabelecimento de barreiras físicas para limitar o


acesso a recursos computacionais protegidos. Tais barreiras incluem ca-
deados em gabinetes e portas, a colocação de computadores em salas
sem janelas, o uso de sólidos materiais de isolamento e mesmo a cons-
trução de prédios ou salas cujas paredes contenham malhas de cobre
(chamadas de gaiolas de Faraday) de modo que sinais eletromagnéticos
não possam entrar ou sair do recinto.
Quando visitamos uma página Web que pede o número de nosso car-
tão de crédito e o navegador exibe um pequeno ícone de cadeado no can-
to, há muita coisa acontecendo em segundo plano para ajudar a assegurar
a confidencialidade do número de nosso cartão de crédito. Na realidade,
diversas ferramentas foram provavelmente adquiridas para tratar disso.
Nosso navegador inicia o processo pela execução de um procedimento de
autenticação para verificar se o site com o qual estamos nos conectando é
de fato quem diz ser. Enquanto isso está acontecendo, o próprio site pode
estar verificando se o nosso navegador é autêntico e se temos a autorização
apropriada para acessar essa página Web de acordo com a sua política de
controle. Nosso navegador então solicita ao site uma chave de encriptação
para codificar o nosso cartão de crédito, que ele usa de modo que somente
envia a informação de nosso cartão de crédito na forma encriptada. Final-
mente, quando o número do nosso cartão de crédito alcança o servidor que
está fornecendo esse site, o centro de dados onde o servidor está localizado
deve ter níveis adequados de segurança física, políticas de acesso e meca-
6 Introdução à Segurança de Computadores

nismos para manter o número de nosso cartão de crédito seguro. Discuti-


mos esses tópicos com mais detalhe neste livro.
Por exemplo, na Seção 2.4.2, estudamos alguns riscos reais de violação
(eavesdropping) física comprovados. Por exemplo, pesquisadores mostraram
que uma pessoa pode descobrir o que alguém está digitando apenas ouvin-
do uma gravação das teclas pressionadas. Do mesmo modo, experimentos
mostraram que é possível reconstruir a imagem de uma tela de computador
pela monitoração de sua radiação eletromagnética ou mesmo de um vídeo de
uma parede branca onde a tela está refletindo. Portanto, a segurança física é
um conceito de segurança de informação que não deve ser considerado como
garantido.

Integridade
Outro aspecto importante de segurança de informação é integridade, que é a
propriedade de que a informação não foi alterada de maneira não autorizada.
A importância da integridade é frequentemente demonstrada para
crianças em escolas pelo jogo do telefone sem fio. Nesse jogo, um grupo de
crianças senta em círculo e a pessoa que é “a escolhida” sussurra uma men-
sagem no ouvido da criança ao lado direito. Cada criança no círculo aguarda
então para ouvir a mensagem da sua vizinha à esquerda. Tão logo a crian-
ça receba a mensagem, ela sussurra a mesma mensagem para sua vizinha
à direita. Esse processo de passagem de mensagem continua até completar
o círculo e retorna para pessoa que é “a escolhida”. Nesse ponto, a última
pessoa a ouvir a mensagem a diz em voz alta, de modo que todas possam
ouvi-la. Normalmente, a mensagem chega tão distorcida nesse ponto que é
uma grande diversão para todas as crianças, e o jogo é repetido com outra
pessoa sendo “a escolhida”. Cada repetição do jogo reforça que esse processo
de sussurrar raramente preserva a integridade dos dados. Não seria esta uma
das razões pela qual muitas vezes nos referimos a um rumor como tendo sido
“sussurrado”?
Existem diversas maneiras pelas quais a integridade dos dados pode
ser comprometida em um sistema de computação e em redes, e esses com-
prometimentos podem ser benignos ou maliciosos. Por exemplo, um com-
prometimento benigno poderia ser originado em um dispositivo que foi atin-
gido por uma estranha radiação cósmica que inverte um bit em um arquivo
importante ou uma unidade de disco que simplesmente estraga, destruindo
completamente algum de seus arquivos. Um comprometimento malicioso
poderia advir de um vírus de computador que infecta nosso sistema e então
trabalha para replicar o vírus e enviá-lo para outros computadores. Portanto,
é importante que sistemas de computação forneçam ferramentas para apoiar
a integridade dos dados.
As ferramentas anteriormente mencionadas para proteger a confiden-
cialidade da informação, negando acesso de usuários a dados sem que te-
nham os direitos de acesso adequados, também ajuda a evitar, antes de tudo,
Capítulo 1 Introdução 7

que dados sejam modificados. Além disso, existem várias ferramentas espe-
cialmente projetadas para apoiar a integridade, incluindo as seguintes:
• Cópias de segurança: o arquivamento periódico de dados. Esse arqui-
vamento é feito de modo que arquivos de dados possam ser restau-
rados caso tenham sido alterados de maneira não autorizada ou não
intencional.
• Somas de verificação (checksums): a computação de uma função que
mapeia o conteúdo de um arquivo para um valor numérico. Uma fun-
ção de soma de verificação depende do conteúdo completo do arquivo
e é projetada de maneira que mesmo uma pequena alteração no arquivo
de entrada (como inverter um único bit) é altamente provável de resul-
tar em um valor de saída diferente. Somas de verificação são como deto-
nadores usados para detectar a ocorrência de uma brecha na integridade
de dados.
• Códigos de correção de dados: métodos para armazenar dados de tal
maneira que pequenas alterações podem ser facilmente detectadas e
automaticamente corrigidas. Esses códigos são geralmente aplicados a
pequenas unidades de armazenamento (por exemplo, no nível de bytes
ou no nível de palavras de memória), mas também existem códigos de
correção de erros que podem ser aplicados da mesma forma a arquivos
inteiros.
Essas ferramentas para obtenção de integridade de dados possuem uma ca-
racterística em comum – elas usam redundância. Isto é, elas envolvem a repli-
cação de algum conteúdo de informação ou funções dos dados de modo que
possamos detectar e algumas vezes mesmo corrigir brechas na integridade
dos dados.
Além disso, devemos ressaltar que não é apenas o conteúdo de um ar-
quivo de dados que precisa ser mantido em relação à integridade. Também
precisamos proteger os metadados de cada arquivo de dados, que são atribu-
tos do arquivo ou informação a respeito do acesso ao arquivo e que não são
exatamente parte de seu conteúdo. Exemplos de metadados incluem o usuá-
rio proprietário do arquivo, o último usuário que modificou o arquivo, datas e
horários da criação do arquivo, da última alteração e do último acesso, nome e
localização do arquivo no sistema de arquivos e a lista de usuários ou grupos
que podem ler ou escrever no arquivo. Portanto, alterar qualquer metadado
de um arquivo deve ser considerado uma violação de sua integridade.
Por exemplo, um invasor de um computador pode não estar alterando
realmente os conteúdos de quaisquer arquivos de usuários em um sistema
em que tenha se infiltrado, mas ele pode, no entanto, estar alterando meta-
dados, como carimbos de horário de acesso, examinando nossos arquivos (e,
portanto, comprometendo a sua confidencialidade se não estiverem encripta-
dos). Entretanto, se nosso sistema tem verificadores de integridade atuantes
para esse tipo de metadados, eles podem detectar uma intrusão que de outro
modo teria passado despercebida.
8 Introdução à Segurança de Computadores

Disponibilidade
Além de confidencialidade e integridade, outra propriedade importante de
segurança de informação é a disponibilidade, que é a propriedade da infor-
mação ser acessível e modificável no momento oportuno por aqueles que es-
tejam autorizados a fazer isso.
Informação encarcerada em um cofre de ferro fundido em uma mon-
tanha tibetana e protegida durante o dia inteiro por um esquadrão de ninjas
devotados pode ser considerada segura, mas não é segura de forma prática
de uma perspectiva de segurança de informação se ela demanda semanas ou
meses para ser alcançada. Portanto, a qualidade de uma informação é direta-
mente associada à sua disponibilidade.
Por exemplo, a cotação de ações é mais útil quando recente. Imagine
também o dano causado se alguém rouba o nosso cartão de crédito e nos-
sa operadora de cartão de crédito demora semanas para notificar os interes-
sados, porque sua relação de números roubados estava indisponível para
comerciantes. Portanto, assim como para confidencialidade e integridade,
pesquisadores em segurança de computadores e projetista de sistemas desen-
volveram diversas ferramentas para providenciar disponibilidade, incluindo
as seguintes:
• Proteções físicas: infraestrutura projetada para manter a informação
disponível mesmo na presença de desafios físicos. Tais proteções podem
incluir que prédios contendo sistemas de computação críticos sejam
construídos para resistir a fortes tempestades, terremotos e explosões de
bombas e sejam equipados com geradores e outros equipamentos eletrô-
nicos que possam enfrentar interrupções e picos de energia.
• Redundâncias computacionais: computadores e dispositivos de ar-
mazenamento que servem como reserva no caso de falhas. Por exem-
plo, arrays redundantes de discos baratos (RAID) usam redundâncias
de armazenamento para manter os dados disponíveis a seus clientes.
Além disso, servidores Web são muitas vezes organizados em grupos
chamados de “fazendas”, de modo que a falha de qualquer um dos
computadores pode ser contornada sem degradar a disponibilidade
do site.
Por a disponibilidade ser tão importante, um atacante que não se impor-
ta como a confidencialidade ou a integridade de dados pode optar por atacar
a sua disponibilidade. Por exemplo, um ladrão que rouba muitos cartões de
crédito pode querer atacar a disponibilidade da lista de cartões de crédito
roubados que é mantida e divulgada por uma importante empresa de cartões
de crédito. Portanto, a disponibilidade forma a terceira perna de apoio da
tríade vital C.I.D. de segurança de informação.
Capítulo 1 Introdução 9

1.1.2 Garantia, autenticidade e anonimato


Além dos conceitos clássicos C.I.D. de confidencialidade, integridade e dis-
ponibilidade, discutidos na seção anterior, existem diversos conceitos adicio-
nais importantes nas aplicações modernas de segurança de computadores.
De forma semelhante, esses conceitos podem ser caracterizados por um acrô-
nimo de três letras, G.A.A. (em inglês, A.A.A., assurance, authenticity, anoni-
mity), que se referem a garantia, autenticidade e anonimato (ver Figura 1.3).

Garantia
Garantia, no contexto de segurança de computadores, se refere a como a
confiança é fornecida e gerenciada em sistemas de computação. Reconheci-
damente, a própria confiança é difícil de quantificar, mas sabemos que ela
envolve o grau de confiança que temos de que pessoas ou sistemas se com-
portem da maneira que esperamos.

Autenticidade

Anonimato

Garantia

Figura 1.3 Os conceitos G.A.A.: garantia, autenticidade e anonimato. Note que, ao contrário
dos conceitos C.I.D., os conceitos G.A.A. são independentes entre si.
10 Introdução à Segurança de Computadores

Além disso, a confiança envolve a interação dos seguintes:


• Políticas especificam as expectativas comportamentais que pessoas ou
sistemas têm de si mesmas ou de outros. Por exemplo, os projetistas de
um sistema de música online podem especificar políticas que descrevam
como usuários podem acessar e copiar músicas.
• Permissões descrevem os comportamentos permitidos pelos agentes
que interagem com uma pessoa ou sistema. Por exemplo, uma loja de
música online pode fornecer permissões de acesso e cópia limitadas
para pessoas que tenham comprado certas músicas.
• Proteções descrevem mecanismos inseridos para assegurar permissões
e políticas. Usando o nosso exemplo corrente de uma loja de música
online, pode-se imaginar que um sistema assim poderia construir prote-
ções para evitar que pessoas façam acessos e cópias não autorizadas de
suas músicas.
Entretanto, a garantia não vai direto de sistemas para pessoas. Um usuá-
rio que fornece o número de seu cartão de crédito para um sistema de música
online pode esperar que o sistema, de acordo com suas políticas publicadas
referentes ao uso de números de cartões de crédito, tenha permissão para fa-
zer pequenos débitos em seu cartão de crédito por compras de música e que
também tenha uma proteção no sistema em conjunto com a sua empresa de
cartão de crédito, de modo que não esteja sujeito a débitos fraudulentos em
seu cartão. Portanto, com relação a sistemas de computação, a garantia envol-
ve o gerenciamento da confiança em duas direções – do usuário para sistemas
e de sistemas para usuários.
Os projetistas de sistemas de computação querem proteger mais do que
simplesmente confidencialidade, integridade e disponibilidade de informa-
ção. Eles também querem proteger e gerenciar os recursos desses sistemas
e querem assegurar que usuários não façam mau uso desses recursos. Co-
locado em termos negativos, eles querem, por exemplo, evitar que pessoas
não autorizadas usem suas UCPs, memória e redes, mesmo que nenhuma
informação seja comprometida em termos do framework C.I.D. Portanto, os
projetistas querem garantir que pessoas que usam os recursos de seus siste-
mas estão seguindo as normas de suas políticas.
Da mesma forma, gerenciar informação em um sistema de computação
também pode ir além do framework C.I.D., pois também podemos querer ge-
renciar a maneira como a informação é usada. Por exemplo, se um usuário de
um sistema online de locação de filmes alugou a cópia eletrônica de um filme,
podemos querer permitir ao usuário assisti-lo apenas um número limitado de
vezes ou podemos querer insistir que o assista dentro dos próximos 30 dias.
Projetistas de dispositivos de reprodução de música e de aplicações podem
da mesma forma desejar permitir que usuários façam algumas cópias de sua
música para uso pessoal, mas restringir cópias de modo que não possam fa-
zer centenas de cópias piratas de CDs de seus arquivos de música.
Capítulo 1 Introdução 11

Portanto, o gerenciamento da confiança lida com o projeto de políticas


eficazes e obrigatórias, os métodos para conceder permissões a usuários de
confiança e os componentes que podem assegurar essas políticas e permis-
sões para proteger e administrar os recursos de sistema. As políticas podem
ser complicadas, como os contratos usados em acordos de licenciamento de
filmes, ou podem ser bastante simples, como uma norma que diz que apenas
o proprietário de um computador pode usar a sua UCP. Assim, é melhor que
um projetista de sistema estabeleça políticas fáceis de assegurar e permissões
fáceis de satisfazer.
Outra parte importante da garantia do sistema envolve engenharia de
software. Os projetistas de um sistema precisam saber que o software que
implementa o seu sistema é codificado de modo que atenda ao seu projeto.
Existe, de fato, uma profusão de exemplos de sistemas que foram projetados
corretamente “no papel”, mas que funcionaram incorretamente porque esses
projetos não foram implementados de forma correta.
Um exemplo clássico de uma implementação incorreta envolve a ge-
ração de números pseudorrandômicos em projetos de segurança. Um ge-
rador de números pseudorrandômicos (GNPR) é um programa que retorna
uma sequência de números estatisticamente randômicos, dado um número
inicial, chamado de semente, que se supõe ser randômico. O projetista de
um sistema pode especificar que um GNPR seja usado em um determina-
do contexto, como encriptação, de modo que cada encriptação seja diferen-
te. Mas se a pessoa que está realmente escrevendo o programa comete o
engano de usar sempre a mesma semente para esse gerador de números
pseudorrandômicos, então a sequência dos assim chamados números pseu-
dorrandômicos será sempre a mesma. Portanto, os projetistas de sistemas
seguros devem não apenas ter bons projetos, mas também ter boas especifi-
cações e implementações.
Depositar confiança em um sistema é mais problemático. Usuários ge-
ralmente não têm a mesma potência computacional que os servidores usados
por esses sistemas. Assim, a confiança que os usuários depositam em um sis-
tema tem de vir da sua capacidade computacional limitada, bem como do
dano legal e de reputação que o usuário pode infligir à empresa que possui o
sistema se este falhar em honrar a confiança do usuário.
Como mencionado acima, quando um navegador Internet “fecha o ca-
deado” para indicar que uma comunicação com um site é segura, ele está
realizando diversos serviços computacionais em favor do usuário. Ele está
encriptando a sessão de modo que nenhum estranho possa bisbilhotar a co-
municação, e, se estiver configurado corretamente, o navegador faz algumas
verificações rudimentares para assegurar que o site esteja sendo executado
pela empresa que se diz sua proprietária. Podendo esse conhecimento ser
assegurado, o usuário pelo menos tem algum recurso, caso seja enganado por
esse site – ele pode usar essa evidência de mau comportamento em casos com
a justiça ou para um site de opinião sobre reputação.
12 Introdução à Segurança de Computadores

Autenticidade
Com tantos serviços online fornecendo conteúdo, recursos e mesmo ser-
viços computacionais, existe uma necessidade desses sistemas serem ca-
pazes de assegurar suas políticas. Legalmente, isso requer que tenhamos
uma maneira eletrônica de cumprir contratos. Isto é, quando alguém diz
que quer comprar uma música de uma loja de músicas online, deve existir
alguma maneira de cumprir esse compromisso. Da mesma forma, quando
uma loja de filmes online concorda em permitir que um usuário alugue
um filme e o assista em algum momento dentro de 30 dias, deve haver
uma maneira de assegurar ao usuário que esse filme estará disponível por
todo o período.
Autenticidade é a habilidade de determinar que afirmações, políticas
e permissões oriundas de pessoas ou sistemas são genuínas. Se tais coisas
podem ser falsificadas, não é possível garantir os contratos implícitos aos
quais pessoas ou sistema aderem ao comprar e vender coisas online. Além
disso, uma pessoa ou sistema pode reivindicar que não fez tal acordo –
pode dizer que o acordo foi feito por alguém fingindo ser ela.
Formalmente, dizemos que um protocolo que consegue esses tipos de
autenticidade demonstra não repúdio. Não repúdio é a propriedade que afir-
mações autênticas emitidas por alguma pessoa ou sistema não podem ser
negadas.
A principal maneira de efetivar a propriedade de não repúdio é por
meio do uso de assinaturas digitais. Estas são computações criptográficas
que permitem a uma pessoa ou sistema se comprometer com a autenticidade
de seus documentos de uma maneira unívoca que assegura o não repúdio.
Fornecemos uma definição mais formal de assinaturas digitais na Seção 1.3.2
e discutimos aplicações específicas de assinaturas digitais mais adiante neste
livro, mas por enquanto é suficiente saber que uma assinatura digital fornece
uma analogia computacional com o mundo real: as conhecidas como assina-
turas em tinta azul.
De fato, assinaturas digitais geralmente têm alguns benefícios adi-
cionais em relação às assinaturas em tinta azul, uma vez que assinaturas
digitais também permitem verificar a autenticidade dos documentos as-
sinados. Isto é, se um documento é modificado, então a assinatura nesse
documento se torna inválida. Um importante requisito de autenticidade,
por conseguinte, é que precisamos ter maneiras confiáveis de identificar
pessoas eletronicamente, tópico que discutimos na Seção 1.3, sobre primi-
tivas criptográficas.
O conceito que discutimos a seguir é o outro lado da criação de sistemas
muito vinculados a identidades pessoais, que é o requisito para que as assina-
turas digitais façam algum sentido.
Capítulo 1 Introdução 13

Anonimato
Quando pessoas interagem com sistemas de modos que envolvem suas iden-
tidades do mundo real, essa interação pode ter vários benefícios positivos,
como apresentado acima. Contudo, existe um efeito colateral desastroso re-
sultante do uso de identidades pessoais em tais transações eletrônicas. Termi-
namos espalhando nossa identidade através de um hospedeiro de registros
digitais, que vincula a nossa identidade ao nosso histórico médico, histórico
de compras, registros legais, comunicação por e-mail, registros de emprega-
dores, etc. Portanto, precisamos de anonimato, que é a propriedade de que
certos registros ou transações não sejam atribuíveis a qualquer indivíduo.
Se empresas precisam publicar dados sobre seus membros ou clientes,
devemos esperar que façam isso de modo a preservar a privacidade, usando
uma das seguintes ferramentas:
• Agregação: a combinação de dados de muitos indivíduos de modo que a
divulgação dessas somas ou médias não possa ser vinculada a qualquer
indivíduo. Por exemplo, o Censo americano publica rotineiramente a
decomposição da população por regiões de código postal por etnia, sa-
lário, idade, etc., somente quando essas divulgações não expõem deta-
lhes sobre quaisquer indivíduos.
• Mistura: o entrelaçamento de transações, informações ou comunicações
de modo que não possam ser rastreadas a nenhum indivíduo. Esse mé-
todo é relativamente técnico, porém envolve sistemas que podem mistu-
rar dados juntos de maneira quase randômica, de modo que transações
e pesquisas ainda possam ser realizadas, mas sem a revelação de qual-
quer identidade individual.
• Representantes (proxies): agentes de confiança que querem se enga-
jar em ações para um indivíduo de maneira que não possam ser ras-
treados de volta para aquela pessoa. Por exemplo, representantes de
pesquisa na Internet são sites que fornecem a sua própria interface
com o navegador, de modo que indivíduos podem visitar sites que
poderiam estar bloqueados, por exemplo, devido aos países onde es-
tão localizados.
• Pseudônimos: identidades ficcionais que podem servir como identida-
des reais em comunicações e transações, mas que são conhecidas apenas
por entidades de confiança. Por exemplo, muitos sites de redes sociais
permitem que usuários interajam com os demais usando pseudônimos,
de modo que eles podem comunicar e criar uma personagem online sem
revelar a sua identidade verdadeira.
O anonimato deve ser uma finalidade propiciada com defesas, sempre que
possível e apropriado.
14 Introdução à Segurança de Computadores

1.1.3 Ameaças e ataques


Já tendo discutido os diversos objetivos da segurança de computadores, de-
vemos agora mencionar algumas das ameaças e ataques que podem compro-
meter esses objetivos.

• Intromissão (eavesdropping): a interceptação de informação destinada


a alguma pessoa durante a sua transmissão por um canal de comunica-
ção. Exemplos incluem capturar pacotes (packet sniffers) que monitoram
o tráfego de Internet próximo, como um local de acesso sem fio. Esse é
um ataque de confidencialidade.
• Alteração: modificação não autorizada de informação. Exemplos de ata-
ques de alteração incluem o ataque de homem-no-meio, onde um fluxo
de rede é interceptado, modificado e retransmitido, e vírus de computa-
dores, que alteram sistemas de arquivos críticos de modo a realizarem
alguma ação maliciosa e se replicarem. A alteração é um ataque de inte-
gridade de dados.
• Negação de serviço: a interrupção ou degradação de um serviço de da-
dos ou de acesso à informação. Exemplos incluem spam de e-mail, até
o grau de preencher totalmente a fila de e-mail e retardar o servidor de
e-mail. A negação de serviço é um ataque de disponibilidade.
• Mascaramento: a fabricação de informação que se faz passar como
sendo de alguém que não é realmente o autor. Exemplos de ataques de
mascaramento incluem phishing, que cria um site que se assemelha ao
de um banco real ou outro site de comércio eletrônico, mas se destina
apenas a coletar senhas, e falsificações (spoofing), que podem envolver
a remessa de um pacote de dados pela rede que pode conter endereços
de retorno falsos. O mascaramento é um ataque de autenticidade, e, no
caso de phishing, uma tentativa de comprometer a confidencialidade e/
ou o anonimato.
• Repúdio: a negação de um compromisso ou recibo de dados. Isso envol-
ve uma tentativa de quebrar um contrato ou um protocolo que requer
que diferentes participantes forneçam o reconhecimento de recibos de
recebimento de dados. Esse é um ataque de garantia.
• Correlação e rastreio do passado: a integração de várias fontes de dados
e fluxos de informação para determinar a origem de um fluxo particular
de dados ou parte de informação. Esse é um ataque de anonimato.
Também existem outros tipos de ataques, como ataques de nível militar, des-
tinados a descobrir segredos criptografados, e ataques compostos, que com-
binam os tipos de ataques acima em apenas um. Mas os relacionados acima
estão entre os tipos de ataques mais comuns.
Capítulo 1 Introdução 15

1.1.4 Princípios de segurança


Concluímos esta seção apresentando os dez princípios de segurança relaciona-
dos em um artigo clássico de Saltzer e Schroeder, de 1975. Apesar de antigos,
esses princípios continuam sendo políticas importantes para a segurança de sis-
temas de computadores e redes.
1. Economia de mecanismo. Este princípio enfatiza a simplicidade de proje-
to e implementação de medidas de segurança. Ao mesmo tempo em que
se aplica à maioria dos esforços de engenharia, a noção de simplicidade
é especialmente importante no domínio da segurança, visto que um fra-
mework simples de segurança facilita a sua compreensão pelos desenvol-
vedores e usuários e permite o desenvolvimento eficiente e a verificação
de métodos de reforço para ele. A economia de mecanismo é, portanto,
intimamente relacionada a questões de implementação e usabilidade, que
abordamos na Seção 1.4.
2. Defaults seguros contra falhas. Este princípio estabelece que a configura-
ção default de um sistema deve ser um esquema de proteção conservador.
Por exemplo, ao adicionar um novo usuário a um sistema operacional, o
grupo default desse usuário deve ter os direitos mínimos de acesso a ar-
quivos e serviços. Infelizmente, sistemas operacionais e aplicações muitas
vezes têm opções default que favorecem a usabilidade em vez da seguran-
ça. Esse tem sido historicamente o caso de diversas aplicações populares,
como navegadores Web que permitem a execução de código baixado do
servidor Web. Muitos modelos populares de controle de acesso, como os
apresentados na Seção 1.2, são baseados na suposição de uma permissão
default de segurança de falhas. A saber, se os direitos de acesso não são
explicitamente especificados para um determinado par sujeito-objeto (s, o)
(por exemplo, uma célula vazia de uma matriz de controle de acesso), en-
tão todos os tipos de acesso ao objeto o são negados para o sujeito s.
3. Mediação completa. A ideia por trás deste princípio é que cada acesso a
um recurso deve ser verificado para ver se está de acordo com o esque-
ma de proteção. Como consequência, é preciso estar atento a técnicas
de melhoria de performance que guardam os resultados de verificações
de autorizações anteriores, visto que as permissões podem se alterar ao
longo do tempo. Por exemplo, um site online de banco eletrônico pode
exigir que usuários se identifiquem novamente após um certo tempo,
digamos, 15 minutos. Sistemas de arquivos variam na maneira de verifi-
car acessos realizados por uma aplicação. Por exemplo, pode ser arrisca-
do se permissões forem verificadas na primeira vez em que um progra-
ma solicita acesso a um arquivo, mas acessos subsequentes ao mesmo
arquivo não são verificados novamente enquanto a aplicação continuar
em execução.
16 Introdução à Segurança de Computadores

4. Projeto aberto. De acordo com este princípio, o projeto e a arquitetura


de segurança de um sistema devem ser disponibilizados publicamen-
te. Somente as chaves de criptografia devem ser mantidas secretas. Um
projeto aberto permite que um sistema seja escrutinado por diversos
participantes, o que conduz mais cedo à descoberta e correção de erros
de vulnerabilidades de segurança causadas por erros de projeto. Tor-
nar a implementação do sistema disponível para inspeção, como em um
software aberto, permite uma revisão mais detalhada das características
de segurança e um processo de correção de erros de software mais di-
reto. O princípio de projeto aberto é o oposto da abordagem conhecida
como segurança por obscuridade, que tenta conseguir segurança man-
tendo secretos os algoritmos de segurança e que tem sido historicamen-
te usada sem sucesso por diversas organizações. Note que, enquanto
é direto alterar uma chave criptográfica comprometida, é geralmente
impraticável modificar um sistema cuja segurança tenha sido ameaçada
por um defeito em seu projeto.
5. Separação de privilégio. Este princípio estabelece que várias condições
devem ser requeridas para obter acesso a recursos restritos ou fazer um
programa realizar alguma ação. Desde a publicação do artigo de Saltzer-
-Schroeder, o termo também significa a separação dos componentes de
um sistema, para limitar o dano causado por uma brecha de segurança
de qualquer componente individual.
6. Menor privilégio. Cada programa e usuário de um sistema de com-
putação deve operar com os privilégios básicos mínimos necessários
para funcionar adequadamente. Se este princípio é adotado, o abuso
de privilégios é restringido e o dano causado pelo comprometimento
de uma aplicação particular ou conta de usuário é minimizado. O con-
ceito militar de informação need-to-know (precisa saber) é um exemplo
desse princípio. Quando esse princípio é ignorado, um dano extra de-
vido a brechas de segurança é possível. Por exemplo, código malicioso
injetado pelo atacante no servidor Web que executa a aplicação com
privilégios plenos de administrador pode causar um dano substancial
ao sistema. Ao aplicar o princípio do menor privilégio, a aplicação no
servidor Web deve ter o conjunto mínimo de permissões necessárias
para a sua operação.
7. Mecanismo comum mínimo. Em sistemas com diversos usuários, os
mecanismos que permitem que recursos sejam compartilhados por
mais de um usuário devem ser minimizados. Por exemplo, se um ar-
quivo ou aplicação precisa ser acessado por mais de um usuário, então
esses usuários devem ter canais separados para acessar esses recursos,
para evitar consequências imprevisíveis que possam causar problemas
de segurança.
Capítulo 1 Introdução 17

8. Aceitação psicológica. Este princípio determina que as interfaces de


usuário sejam bem projetadas e intuitivas e que todas as configura-
ções referentes a segurança devem aderir ao que um usuário comum
possa esperar. Diferenças no comportamento de um programa e uma
expectativa de usuário podem causar problemas de segurança como
uma configuração incorreta e perigosa do software, de modo que esse
princípio busca minimizar essas diferenças. Diversas aplicações de
e-mail incorporam técnica criptográficas (Seção 1.3) para encriptar
e assinar digitalmente as mensagens de e-mail, mas, apesar de sua
ampla aplicabilidade, esses poderosos recursos criptográficos são ra-
ramente usados na prática. Acredita-se que uma das razões para essa
situação sejam as interfaces mal feitas e não intuitivas até agora for-
necidas pelas aplicações existentes de e-mail para o uso de recursos
criptográficos.
9. Fator de trabalho. De acordo com este princípio, o custo de fraudar um
mecanismo de segurança poderia ser comparado com os recursos de um
atacante ao projetar um esquema de segurança. Um sistema desenvol-
vido para proteger as notas dos estudantes em um banco de dados de
uma universidade, que pode ser atacado por intrometidos ou estudan-
tes tentando alterar as suas notas, provavelmente precisa de medidas
de segurança menos sofisticadas do que as de um sistema construído
para proteger segredos militares, que podem ser atacados por organi-
zações de inteligência de governos. Saltzer e Schroeder admitem que
o princípio do fator de trabalho se traduz pobremente para os sistemas
eletrônicos, onde é difícil de determinar a quantidade de trabalho re-
querida para comprometer a segurança. Além disso, a tecnologia evolui
tão rapidamente que as técnicas de intrusão consideradas impraticáveis
em um determinado momento se tornam triviais de realizar dentro de
poucos anos. Por exemplo, como discutido na Seção 1.4.2, a quebra de
senhas por força bruta está se tornando cada vez mais viável de ser feita
em um computador de uso pessoal.
10. Registro de comprometimento. Finalmente, este princípio determina que
algumas vezes é mais desejável registrar os detalhes de uma intrusão
do que adotar medidas mais sofisticadas para evitá-la. Câmeras de vi-
gilância conectadas à Internet são um exemplo típico de um sistema de
registro de comprometimento que pode ser adotado para proteger um
prédio, em vez de reforçar portas e janelas. Os servidores de uma rede de
escritório podem manter gravações (logs) de todos os acessos a arquivos,
todos e-mails enviados e recebidos e todas as sessões Web. Novamente,
o princípio de registro de comprometimento não se aplica tão fortemente
a sistemas de computação, visto que pode ser difícil detectar uma intru-
são, e atacantes experientes podem remover os seus rastros na máquina
comprometida (por exemplo, eliminar entradas nos logs).
18 Introdução à Segurança de Computadores

Os dez princípios de segurança


Estes dez princípios de segurança são ilustrados esquematicamente na Figu-
ra 1.4. Como mencionado acima, esses princípios nasceram há muito tempo
e renasceram como fundamentais para a segurança de computadores. Além
disso, como sugerido pela figura, os princípios funcionam em sintonia para
proteger computadores e informação. Por exemplo, a economia de mecanis-
mos auxilia naturalmente o projeto aberto, visto que um sistema simples é
mais fácil de entender e um sistema aberto publicamente demonstra a segu-
rança advinda de um sistema simples.

Economia de
mecanismo
Defaults
Registro de seguros contra
comprometimento falhas

Mediação
Fator de trabalho
completa

Princípios de segurança

Aceitação
psicológica Projeto aberto

Mecanismo Separação de
comum mínimo privilégio
Menor
privilégio

Figura 1.4 Os dez princípios de segurança, de Saltzer e Schroeder.


Capítulo 1 Introdução 19

1.2 Modelos de controle de acesso

Uma das melhores maneiras de se defender contra ataques é, em primeiro


lugar, evitá-los. Providenciando maneiras rigorosas de determinar quem tem
acesso às diversas partes de informação, muitas vezes podemos evitar ataque
de confidencialidade, integridade e anonimato. Nesta seção, discutimos al-
guns dos meios mais populares de gerenciar o controle de acesso.
Todos os modelos supõem que existem gerentes de dados, proprietários
de dados ou administradores de sistemas que definam as especificações de
controle de acesso. A intenção é que essas pessoas restrinjam o acesso àqueles
que precisam acessar/modificar a informação em questão. Isto é, elas devem
aplicar o princípio do menor privilégio.

1.2.1 Matrizes de controle de acesso


Uma ferramenta útil para determinar direitos de controle de acesso é a ma-
triz de controle de acesso, que é uma tabela que define permissões. Cada
linha dessa tabela é associada a um sujeito, que é um usuário, grupo ou sis-
tema que pode realizar ações. Cada coluna da tabela é associada a um objeto,
que é um arquivo, um diretório, um documento, um dispositivo, um recurso
ou qualquer outra entidade sobre a qual queremos definir direitos de acesso.
Cada célula da tabela é então preenchida com os direitos de acesso para a
combinação associada de sujeito e objeto. Os direitos de acesso podem incluir
ações como ler, escrever, copiar, executar, eliminar e anotar. Uma célula vazia
significa que não são concedidos direito de acesso. Mostramos na Tabela 1.1
um exemplo de matriz de controle de acesso para uma parte de um sistema
de arquivos fictício e um conjunto de usuários.

Tabela 1.1 Um exemplo de matriz de controle de acesso. Esta tabela relaciona


direitos de acesso de leitura (read), escrita (write) e execução (exec)
para cada um dos quatro usuários fictícios em relação a um arquivo,
/etc/passwd, e três diretórios.
/etc/passwd /usr/bin/ /u/roberto/ /admin/

root read, write read, write, exec read, write, exec read, write, exec
mike read read, exec
roberto read read, exec read, write, exec
backup read read, exec read, exec read, exec
20 Introdução à Segurança de Computadores

Vantagens
O ponto positivo de uma matriz de controle de acesso é que ela permite uma
determinação rápida e fácil dos direitos de controle de acesso para qualquer
par sujeito-objeto – basta ir para a célula da tabela na linha do sujeito e co-
luna do objeto. O conjunto de direitos de controle de acesso para esse par
sujeito-objeto está discriminado bem ali, e localizar um registro de interesse
pode ser feito com uma única operação de busca por uma célula da matriz.
Além disso, a matriz de controle de acesso fornece aos administradores uma
maneira simples e visual de ver de uma só vez o conjunto completo de rela-
cionamentos de controle de acesso e o grau de controle de acesso como espe-
cificado pela granularidade de pares sujeito-objeto. Portanto, esse modelo de
controle de acesso oferece diversas vantagens.

Desvantagens
Contudo, existe uma desvantagem bastante grande na matriz de controle de
acesso – ela pode se tornar realmente grande. Em particular, se temos n sujei-
tos e m objetos, então a matriz de controle de acesso tem n linhas, m colunas
e n × m células. Por exemplo, um computador servidor de tamanho razoável
pode facilmente ter 1.000 sujeitos, que são seus usuários, e 1.000.000 de ob-
jetos, que são seus arquivos e diretórios. Mas isso implicaria uma matriz de
controle de acesso com 1 bilhão de células! É difícil imaginar que exista em
algum lugar do planeta um administrador de sistemas com tempo e paciên-
cia suficiente para preencher todas as células dessa tabela tão grande! Além
disso, ninguém poderia visualizar essa tabela de uma só vez.
Para superar a falta de escalabilidade da matriz de controle de acesso,
pesquisadores em segurança de computadores e administradores de sis-
tema sugeriram algumas alternativas para a matriz de controle de acesso.
Discutimos três desses modelos na parte restante desta seção. Em parti-
cular, discutimos listas de controle de acesso, competências e controle de
acesso baseado em papéis. Cada um desses modelos fornece a mesma fun-
cionalidade da matriz de controle de acesso, mas de maneira a reduzir a
sua complexidade.

1.2.2 Lista de controle de acesso


O modelo de lista de controle de acesso (LCA) usa uma abordagem centrada
em objetos. Define, para cada objeto, o, uma lista, L, chamada de lista de con-
trole de acesso de o, que enumera todos os sujeitos que têm acesso a o e, para
cada sujeito, s, fornece os direitos de acesso que s possui sobre o objeto o.
Essencialmente, o modelo LCA pega cada coluna da matriz de controle
de acesso e a compacta em uma lista, ignorando todos os pares sujeito-objeto
daquela coluna que correspondem a células vazias (ver Figura 1.5).
Capítulo 1 Introdução 21

/etc/passwd /usr/bin/ /u/roberto/ /admin

root: r,w root: r,w,x root: r,w,x root: r,w,x


mike: r mike: r,x roberto: r,w,x backup: r,x
roberto: r roberto: r,x backup: r,x
backup: r backup: r,x

Figura 1.5 As listas de controle de acesso (LCAs) correspondentes à matriz de contro-


le de acesso da Tabela 1.1. Usamos as notações abreviadas de r5read (leitura), w5write
(escrita) e x5execute (execução).

Vantagens
A principal vantagem de LCAs em relação a matrizes de controle de acesso
é o tamanho. O tamanho total de todas as listas de controle de acesso em um
sistema será proporcional ao número de células preenchidas na matriz de
controle de acesso, que se espera que seja muito menor que o número total de
células na matriz de controle de acesso.
Outra vantagem de LCAs com relação sa sistemas de computação seguros
é que a LCA para um objeto pode ser armazenada diretamente com o objeto,
como parte de seus metadados, o que é particularmente útil para sistemas de
arquivos. Isto é, os blocos de cabeçalho para arquivos e diretórios podem arma-
zenar diretamente as listas de controle de acesso daquele arquivo ou diretório.
Portanto, se um sistema operacional estiver tentando decidir se um usuário ou
processo que está requisitando acesso a um certo diretório ou arquivo de fato
tem direito de acesso, o sistema precisa consultar apenas a LCA daquele objeto.

Desvantagens
Entretanto, a principal desvantagem de LCAs é que elas não fornecem uma
maneira eficiente de enumerar todos os direitos de acesso de um dado sujei-
to. Para determinar todos os direitos de acesso para um dado sujeito, s, um
sistema seguro baseado em LCAs teria de pesquisar a lista de controle de
acesso de cada objeto, procurando registros que envolvam s. Isto é, descobrir
tal informação requer uma pesquisa completa em todas as LCAs do sistema,
enquanto uma computação similar com uma matriz de controle de acesso
simplesmente envolve examinar a linha do sujeito s.
Infelizmente, essa computação é necessária algumas vezes. Por exem-
plo, se um sujeito deve ser removido do sistema, o administrador precisa re-
mover seus direitos de acesso de cada LCA onde se encontrem. Mas se não
existe maneira de saber todos os direitos de acesso para um dado sujeito, o
22 Introdução à Segurança de Computadores

administrador não tem outra opção que não seja pesquisar todas as LCAs
para encontrar qualquer que contenha esse sujeito.

1.2.3 Competências
Outra abordagem, conhecida como competências, usa um enfoque centrado
em sujeitos para o controle de acesso. Define, para cada sujeito s, uma lista de
objetos para os quais s tem direitos de controle de acesso, junto com os direi-
tos específicos para cada um desses objetos. Portanto, é essencialmente uma
lista de células de cada linha matriz de controle de acesso, compactada pela
remoção de células vazias. (Ver Figura 1.6.)

Vantagens
O modelo de controle de acesso de competências tem a mesma vantagem de
espaço em relação à matriz de controle de acesso que o modelo de lista de
controle de acesso tem. A saber, um administrador de sistema somente pre-
cisa criar e manter relacionamentos de controle de acesso para pares sujeito-
-objeto que possuem direito de acesso não vazios. Além disso, o modelo de
competências torna fácil para o administrador determinar rapidamente para
qualquer sujeito todos os direitos de acesso que aquele sujeito possui. De fato,
tudo o que é preciso fazer é ler toda a lista de competências de s procuran-
do por o. Se s tem aquele direito sobre o, este então é concedido. Portanto, o
tamanho da lista de competências para um sujeito não é muito grande e a
computação é razoavelmente rápida.

/etc/passwd: r,w,x; /usr/bin: r,w,x;


root
/u/roberto: r,w,x; /admin/: r,w,x

mike /usr/passwd: r; /usr/bin: r;

/usr/passwd: r; /usr/bin: r;
roberto
/u/roberto: r,w,x

/etc/passwd: r,x; /usr/bin: r,x;


backup
/u/roberto: r,x; /admin/: r,x

Figura 1.6 As competências correspondentes à matriz de controle de acesso da Tabe-


la 1.1. Usamos a notação abreviada de rread (leitura), wwrite (escrita) e xexecute
(execução).
Capítulo 1 Introdução 23

Desvantagens
A principal desvantagem das competências é que elas não são diretamente
associadas a objetos. Portanto, a única maneira de determinar todos os di-
reitos de acesso para um objeto o é pesquisar todas as listas de competências
para todos os sujeitos. Com a matriz de controle de acesso, essa computação
envolveria simplesmente examinar a coluna associada ao objeto o.

1.2.4 Controle de acesso baseado em papéis


Independente da estrutura de dados específica que representa direitos de
controle de acesso, esta é outra abordagem para controle de acesso, que pode
ser usada com qualquer das estruturas descritas acima. Em controle de acesso
baseado em papéis (CABP), administradores definem papéis e depois especi-
ficam os direitos de controle de acesso para esses papéis, em vez de defini-los
diretamente para sujeitos.
Assim, por exemplo, um sistema de arquivos para um departamen-
to de ciência da computação de uma universidade pode ter papéis para
“professor”, “aluno”, “pessoal administrativo”, “gerente administrativo”,
“responsável por backups”, “gerente de laboratório”, “administrador do
sistema”, etc. Cada papel recebe direitos de acesso que são apropriados
para a classe de usuários associada com aquele papel. Por exemplo, um
responsável por backup deve ter acesso de leitura e execução para cada
objeto do sistema de arquivos, mas direito de escrita apenas para o diretó-
rio de backup.
Assim que forem definidos os papéis e atribuídos os direitos de acesso
aos pares papel-objeto, os sujeitos recebem os diversos papéis. Os direitos de
acesso para qualquer sujeito são a união dos direitos de acesso para os papéis
que ele possui. Por exemplo, um aluno que esteja trabalhando parte do tem-
po como assistente do administrador do sistema, para fazer backups no sis-
tema de arquivos departamental, deve ter os papéis “aluno” e “responsável
por backup”, tendo os direitos de acesso da união desses papéis. O professor
que é chefe do departamento pode ter papéis adicionais, incluindo “gerente
administrativo” e “administrador do sistema”.

Hierarquias de papéis
Além disso, uma hierarquia pode ser definida sobre papéis de modo que os
direitos de acesso se propagam para cima na hierarquia. A saber, se um papel
R1 está acima do papel R2 na hierarquia, então R1 herda os direitos de acesso
de R2. Por exemplo, na hierarquia de papéis para um departamento de ciência
da computação, o papel “administrador do sistema” poderia estar acima do
papel “responsável por backups” e o papel “gerente administrativo” estaria
acima do papel “pessoal administrativo”.
24 Introdução à Segurança de Computadores

Hierarquias de papéis simplificam a definição e o gerenciamento de per-


missões graças à propriedade de herança. Essa é a principal característica que
distingue papéis de grupos de usuários. Um exemplo de hierarquia de papéis
para um departamento de ciência da computação é mostrado na Figura 1.7. O
modelo de controle de acesso baseado em papéis é descrito em mais detalhes
na Seção 9.2.3.

Vantagens e desvantagens
A vantagem do controle de acesso baseado em papéis é que, qualquer que
seja o framework de controle usado para armazenar direitos de controle
de acesso, o número total de regras para acompanhar é reduzido. Isto é, o
conjunto total de regras deve ser muito menor que o conjunto de sujeitos;
portanto, armazenar direitos de acesso somente para papéis é mais eficien-
te. E a sobrecarga para descobrir se um sujeito s tem um direito particular
é pequeno, pois tudo o que o sistema precisa fazer é determinar um dos
papéis de s que tenha esse direito de acesso.
A principal desvantagem do modelo de controle de acesso baseado
em papéis é que ele não é implementado nos sistemas operacionais em uso
atualmente.

Membro do
departamento

Pessoal Gerente de Administrador AT de AT de


administrativo laboratório do sistema pós-graduação graduação

Técnico de Responsável Aluno de Aluno de


Contador Secretário pós-graduação
laboratório por backups graduação

Gerente Pessoal
Professor Aluno
administrativo técnico

Chefe de
departamento

Figura 1.7 Exemplo de hierarquia de papéis para um departamento de ciência da computação.


Capítulo 1 Introdução 25

1.3 Conceitos criptográficos

Políticas de segurança de computadores são inúteis se não tivermos maneiras


de cumpri-las. As leis e razões econômicas podem ter um papel importante
no impedimento de ataques e incentivo à complacência, respectivamente. En-
tretanto, soluções tecnológicas são o principal mecanismo para fazer cumprir
as políticas de segurança e atingir as metas de segurança.
Aqui se enquadra a criptografia. Podemos usar técnicas criptográfi-
cas para alcançar uma grande extensão de metas de segurança, incluindo
algumas que inicialmente parecem mesmo ser impossíveis. Nesta seção,
apresentamos uma visão geral de vários conceitos criptográficos básicos.
Uma cobertura mais detalhada de princípios e técnicas criptográficas é
apresentada no Capítulo 8.

1.3.1 Encriptação
Tradicionalmente, a encriptação é descrita como um meio de permitir que
dois participantes, habitualmente chamados de Alice e Bob, estabeleçam uma
comunicação confidencial sobre um canal inseguro sujeito à intromissão. Ela
tem se expandido para ter outros usos e aplicações além desse cenário sim-
ples, mas permita-nos todavia iniciar com o cenário de Alice e Bob querendo
se comunicar de maneira confidencial, visto que nos dá uma base sobre a
qual podemos construir extensões mais tarde.
Suponha, então, que Alice tem uma mensagem, M, que deseja comuni-
car confidencialmente para Bob. A mensagem M é chamada de texto puro e
não pode ser transmitida nessa forma, pois pode ser observada por outros
participantes durante o trânsito. Em vez disso, Alice vai converter o texto
puro M em uma forma encriptada, usando um algoritmo de encriptação E,
que fornece como saída um texto cifrado C para M. Esse processo de encrip-
tação é denotado por
C  E(M).
O texto cifrado C será o que realmente vai ser transmitido para Bob. Assim
que Bob receber C, ele aplica um algoritmo de decriptação D para recuperar
o texto puro M a partir do texto cifrado C. Esse processo de decriptação é
denotado por
M  D(C).
Os algoritmos de encriptação e de decriptação são escolhidos de modo que
seja impraticável para alguém que não seja Alice ou Bob descobrir o texto
puro M a partir do texto cifrado C. Assim, o texto cifrado C pode ser trans-
mitido sobre um canal inseguro que pode ser observado por um adversário.
26 Introdução à Segurança de Computadores

Criptossistemas
O algoritmo de decriptação deve usar alguma informação secreta conhecida
por Bob, e também por Alice, mas por ninguém mais. Geralmente, isso é obti-
do fazendo o algoritmo de decriptação usar como entrada auxiliar um número
ou string secreto chamado de chave de decriptação. Dessa maneira, o próprio
algoritmo de decriptação pode ser implementado por um software padrão,
publicamente disponível, e apenas a chave de decriptação precisa permanecer
secreta. De modo similar, o algoritmo de encriptação usa como entrada auxi-
liar uma chave de encriptação, que é associada com a chave de decriptação. A
menos que seja impraticável derivar a chave de decriptação a partir da chave
de encriptação, a chave de encriptação também deve permanecer secreta. Em
poucas palavras, é isso o que é encriptação.
Mas antes que Alice e Bob iniciem a execução dessa comunicação en-
criptada, eles precisam concordar sobre as regras básicas que usarão. Especi-
ficamente, um criptossistema consiste em sete componentes:
1. O conjunto de possíveis textos puros
2. O conjunto de possíveis textos cifrados
3. O conjunto de chaves de encriptação
4. O conjunto de chaves de decriptação
5. A correspondência entre as chaves de encriptação e as chaves de decrip-
tação
6. O algoritmo de encriptação a ser usado
7. O algoritmo de decriptação a ser usado
Seja c um caractere do alfabeto latino clássico (que consiste em 23 carac-
teres) e k um inteiro no intervalo [22, 22]. Denotamos por s(c, k) o deslo-
camento circular de k de um caractere c no alfabeto latino. O deslocamento é
para diante quando k > 0 e para trás quando k < 0. Por exemplo, s(D,3)  G,
s(R,2)  P, s(Z,2)  B e s(C,3)  Z. Na cifra de César, o conjunto de textos
puros e o conjunto de textos cifrados são os strings formados por caracteres
do alfabeto latino. O conjunto de chaves de encriptação é {3}, isto é, o con-
junto que consiste no número 3. O conjunto de chaves de decriptação é {3},
isto é, o conjunto que consiste no número {3}. O algoritmo de encriptação
consiste em substituir cada caractere x no texto puro por s(x, e), onde e  3 é a
chave de encriptação. O algoritmo de decriptação consiste em substituir cada
caractere x no texto puro por s(x, d), onde d  3 é a chave de decriptação.
Note que o algoritmo de encriptação é o mesmo que o algoritmo de decrip-
tação e que as chaves de encriptação e decriptação são uma oposta da outra.

Criptossistemas modernos
Criptossistemas modernos são muito mais complexos do que a cifra de César,
e muito mais difíceis de quebrar. Por exemplo, o algoritmo AES (Advanced
Encryption Standard), usa chaves de 128, 196 ou 256 bits de comprimento,
de modo que é praticamente impossível que uma intrusa, Eve, tente todas
as chaves possíveis em um ataque de força bruta para descobrir o texto puro
Capítulo 1 Introdução 27

correspondente a partir de um dado texto cifrado. Da mesma forma, o algo-


ritmo AES tem muito mais voltas do que um simples deslocamento de ca-
racteres no alfabeto, de modo que não vamos examinar os detalhes aqui (ver
Seção 8.1.6).

Encriptação simétrica
Entretanto, uma propriedade importante do algoritmo AES que salientamos
aqui é que a mesma chave K é usada para a encriptação e para a decriptação.
Esquemas como esse, que usam a mesma chave para encriptação e decripta-
ção, são chamados de criptossistemas simétricos ou criptossistemas de cha-
ve compartilhada, visto que Alice e Bob compartilham a mesma chave K para
que se comuniquem em uma mensagem confidencial M. Um criptossistema
simétrico é ilustrado de forma esquemática na Figura 1.8.

Distribuição de chave simétrica


Criptossistemas simétricos, incluindo o algoritmo AES, tendem a executar
mais rápido, mas requerem alguma maneira de Alice e Bob obterem a chave K
sem que a espiã, Eve, a descubra. Suponha ainda que n participantes desejam
trocar mensagens cifradas entre si de tal maneira que cada mensagem possa
ser vista apenas pelos remetente e destinatário. Usando um criptossistema si-
métrico, uma chave secreta distinta é necessária para cada par de participan-
tes, dando um total de n(n  1)/2 chaves, como ilustrado na Figura 1.9.

Canal de
Remetente comunicação Destinatário

Encriptação Decriptação

Texto cifrado Texto puro

plaintext
Chave Chave
secreta secreta
compartilhada compartilhada

Atacante
(intruso)

Figura 1.8 Um criptossistema simétrico, onde a mesma chave secreta, compartilhada entre o
remetente e o destinatário, é usada para encriptar e decriptar. Um atacante que se intromete no
canal de comunicação não pode decriptar o texto cifrado (mensagem encriptada) sem conhecer
a chave.
28 Introdução à Segurança de Computadores

Secreta
compartilhada

Secreta
compartilhada

Secreta Secreta Secreta


compartilhada compartilhada compartilhada

n (n – 1)/2
chaves

Secreta
compartilhada

Figura 1.9 Comunicação confidencial entre pares dentre n usuários com um criptos-
sistema simétrico requer n(n  1)/2 chaves distintas, cada uma compartilhada por
dois usuários e mantidas secretas para os demais usuários.

Encriptação de chave pública


Uma abordagem alternativa aos criptossistemas simétricos é o conceito de
um criptossistema de chave pública. Nesses criptossistemas, Bob tem duas
chaves: uma chave privada, SB, que Bob mantém secreta, e uma chave pú-
blica, PB, que Bob divulga amplamente, possivelmente até publicando-a em
sua página Web. Para que Alice envie uma mensagem encriptada para Bob,
ela precisa apenas obter sua chave pública PB, usar esta para encriptar a sua
mensagem M e enviar o resultado, C  EPB (M), para Bob. Bob então usa a sua
chave secreta para decriptar a mensagem como
M  DSB (C).
Um criptossistema de chave pública é esquematicamente ilustrado na Fi-
gura 1.10.
A vantagem de criptossistemas de chave pública é que eles evitam o
problema de obter uma única chave compartilhada entre Alice e Bob. Além
disso, apenas chaves privadas precisam ser mantidas secretas, enquanto
chaves públicas podem ser compartilhadas com qualquer um, incluindo o
atacante. Finalmente, criptossistemas de chave pública suportam de forma
eficiente a comunicação confidencial entre n usuários. A saber, apenas n pares
distintos de chaves privada/pública são necessários, como ilustrado na Figu-
ra 1.11. Esse fato representa uma melhoria significativa em relação ao número
quadrático de chaves distintas requeridas por um criptossistema simétrico.
Por exemplo, se tivermos 1.000 usuários, um criptossistema de chave pública
usa 1.000 pares de chaves privada/pública, enquanto um criptossistema si-
métrico requer 499.500 chaves secretas.
Capítulo 1 Introdução 29

Remetente Canal de Destinatário


comunicação

Encriptação Decriptação

Texto puro Texto cifrado Texto puro

plaintext

Chave Chave
pública privada

Atacante
(intruso)

Figura 1.10 Em um criptossistema de chave pública, o remetente usa a chave pública


do destinatários para encriptar a mensagem e o destinatário usa sua chave privada
para decriptar. Um atacante que observa o canal de comunicação não consegue de-
criptar o texto cifrado (mensagem encriptada) sem conhecer a chave privada.

Algumas desvantagens da criptografia de chave pública


A principal desvantagem de criptossistemas de chave pública é que em to-
das as implementações existentes, como os criptossistemas RSA e ElGamal,
os algoritmos de encriptação e de decriptação são muito mais lentos do
que os esquemas existentes de encriptação simétrica. De fato, a diferença
em tempo de execução entre criptossistemas de chave pública existentes e
criptossistemas simétricos desencoraja as pessoas a usar criptografia chave
pública em sessões interativas que usam muita comunicação de ida e volta.

Privada Privada

Pública Pública

n pares de chaves

Pública Pública

Privada Privada

Figura 1.11 Comunicação confidencial entre pares dentre n usuários com um criptos-
sistema de chave pública requer n pares de chaves, uma por usuário.
30 Introdução à Segurança de Computadores

Além disso, criptossistemas de chave pública requerem na prática um


tamanho de chave que seja uma ordem de magnitude maior do que o reque-
rido por criptossistemas simétricos. Por exemplo, RSA é geralmente usado
com 2 chaves de 2048 bits, enquanto AES é geralmente usado com chaves de
256 bits.
Para contornar essas desvantagens, os criptossistemas de chave pública
são muitas vezes usados apenas para permitir que Alice e Bob troquem uma
chave secreta compartilhada, a qual eles subsequentemente usam para a co-
municação com um esquema de encriptação simétrica, como mostrado na
Figura 1.12.

1.3.2 Assinaturas digitais


Outro problema que é resolvido por criptossistemas de chave pública é a
construção de assinaturas digitais. Essa solução é derivada do fato de que,
em esquemas típicos de encriptação de chave pública, podemos reverter a
ordem na qual os algoritmos de encriptação e de decriptação são aplicados:
EPB (DSB (M))  M.
Isto é, Bob pode dar como entrada para o algoritmo de decriptação uma
mensagem, M, e sua chave privada, SB. Aplicando o algoritmo de encriptação
na saída resultante e a chave pública de Bob, o que pode ser feito por qual-
quer um, obtém-se de volta a mensagem M.

Remetente Canal de Destinatário


comunicação

Encriptart Decriptar
Secreta Secreta
Texto cifrado

Chave pública Chave privada

Chave secreta Chave secreta


compartilhada Atacante compartilhada
(intruso)

Encriptar Decriptar

Texto puro Texto cifrado Texto puro

Figura 1.12 Uso de um criptossistema de chave pública para trocar uma chave secreta compar-
tilhada, que é subsequentemente adotada para comunicação com um esquema de encriptação
simétrica. A chave secreta é a mensagem “texto puro” enviada pelo remetente ao destinatário.
Capítulo 1 Introdução 31

Usando uma chave privada para uma assinatura digital


Pode parecer fútil à primeira vista Bob criar um objeto que qualquer um pode
converter para a mensagem M, isto é, qualquer um que conheça a sua chave
pública. Mas este é exatamente o objetivo de uma assinatura digital – apenas
Bob poderia ter feito essa decriptação. Ninguém mais conhece a sua chave
secreta. Assim, se Bob pretende provar que ele é o autor da mensagem M, ela
realiza a sua decriptação pessoal como segue:
S  DSB (M).
Essa decriptação S serve como assinatura digital para a mensagem M.
Bob envia a assinatura S para Alice junto com a mensagem M. Alice pode re-
cuperar M encriptando a assinatura S com a chave pública de Bob:
M  EPB (S).
Dessa maneira, Alice certifica-se de que a mensagem M é de autoria de
Bob e não de qualquer outro usuário. De fato, ninguém além de Bob, que possui
a chave privada SB, poderia ter produzido tal objeto S, de modo que EPB (S)  M.
A única desvantagem dessa abordagem é que a assinatura de Bob será
pelo menos tão longa quanto a mensagem de texto puro que ele está assinan-
do, de modo que essa abordagem exata não é usada na prática. Estudaremos
assinaturas digitais com mais detalhes na Seção 8.4.

1.3.3 Ataques simples a criptossistemas


Considere um criptossistema para textos puros de n bits. A fim de garantir
uma decriptação única, os textos cifrados devem ter pelo menos n bits, pois
de outra maneira dois ou mais textos puros poderiam mapear para o mesmo
texto cifrado. Em criptossistemas usados na prática, textos puros e textos ci-
frados têm o mesmo comprimento. Portanto, para uma dada chave simétrica
(ou par de chaves privada/pública), os algoritmos de encriptação e decripta-
ção definem uma concordância entre strings de n bits. Isto é, cada texto puro
corresponde a um único texto cifrado e vice-versa.

Ataques homem-no-meio
O uso direto do criptossistema apresentado na Seção 1.3.1, que consiste em
uma simples transmissão de texto cifrado, assegura confidencialidade. Entre-
tanto, não garante a autenticidade e a integridade da mensagem se o adver-
sário pode interceptar e modificar o texto cifrado. Suponha que Alice envia
para Bob o texto cifrado C correspondente a uma mensagem M. O adversário
modifica C para um texto cifrado alterado C, recebido por Bob. Quando Bob
decripta C, ele obtém uma mensagem M, diferente de M. Portanto, Bob é
levado a acreditar que Alice enviou para ele a mensagem M em vez da men-
sagem M. Esse ataque homem-no-meio é ilustrado na Figura 1.13.
32 Introdução à Segurança de Computadores

Canal de
Remetente Destinatário
comunicação

t
Encriptar Desencriptar

Texto puro M Texto puro M'

Chave Chave
secreta Texto Texto cifrado C' secreta
k
compartilhada cifrado C compartilhada

Atacante
(interceptando)

Figura 1.13 Ataque homem-no-meio em que o adversário modifica o texto cifrado e


o destinatário decripta o texto cifrado alterado para uma mensagem incorreta.

De modo similar, considere o uso das assinaturas digitais apresentadas


na Seção 1.3.2. O atacante pode modificar a assinatura S criada por Bob para
um string S diferente e enviar para Alice a assinatura S junto com a encrip-
tação M de S usando a chave pública de Bob. Note que M será diferente
da mensagem M original. Quando Alice verifica a assinatura digital S, ela
obtém a mensagem M pela encriptação de S, portanto Alice é levada a acre-
ditar que Bob assinou M em vez de M.
Note que nos ataques acima o adversário pode alterar arbitrariamente
o texto cifrado ou a assinatura transmitida. Contudo, o adversário não pode
escolher, ou mesmo imaginar, qual seria o texto puro resultante, visto que
ele não tem a habilidade de decriptar. Portanto, os ataques acima são efeti-
vos somente se uma sequência arbitrária de bits é uma mensagem possível.
Esse cenário ocorre, por exemplo, quando uma chave simétrica gerada de
forma randômica é transmitida encriptada com um criptossistema de chave
pública.

Ataque de decriptação por força bruta


Suponha agora que, em vez disso, as mensagens válidas são textos em inglês
com até t caracteres. Com o código padrão ASCII de 8 bits, uma mensagem é
um string binário de tamanho n  8t. Entretanto, mensagens válidas consti-
tuem um subconjunto muito pequeno de todos os strings de n bits possíveis,
como ilustrado na Figura 1.14.
Considere que representamos caracteres com código padrão ASCII de
8 bits e que o número de bits em um array de t bytes seja 8. Temos que o
número total de possíveis arrays de t bytes é (28)t  2n. Entretanto, estima-
-se que cada caractere de um texto em inglês representa cerca de 1,25 bits
Capítulo 1 Introdução 33

Texto cifrado
Texto em do texto
inglês em inglês

Textos puros Textos cifrados


strings de n bits strings de n bits

Figura 1.14 Textos puros em linguagem natural são uma pequena fração do conjunto
de texto puros possíveis. Essa fração tende a zero à medida que cresce o tamanho do
texto puro. Portanto, para uma dada chave, é difícil para um adversário descobrir o
texto cifrado que corresponda a uma mensagem válida.

de informação, isto é, o número de arrays de t bytes que corresponde ao


texto em inglês é
(21,25)t  21,25t.
Portanto, em termos do tamanho de n bits, o número de arrays de n bits cor-
0,16n
respondente ao texto em inglês é aproximadamente 2 .
De modo geral, para uma linguagem natural que usa um alfabeto em
vez de ideogramas, existe uma constante ␣, com 0 < ␣ < 1, tal que existem
2␣n textos entre todos os arrays de n bits. A constante ␣ depende da lingua-
gem específica e do esquema de codificação de caracteres usado. Como con-
sequência, em uma linguagem natural a fração de mensagens válidas dentre
todos os possíveis textos puros de n bits é cerca de

A fração de mensagens válidas tende rapidamente a zero à medida que n au-


menta. Note que essa fração representa a probabilidade de um texto cifrado
selecionado aleatoriamente decriptar para uma mensagem válida ou adivi-
nhar uma assinatura que irá encriptar para uma mensagem válida.
A propriedade de linguagens naturais mencionada anteriormente tam-
bém tem implicações importantes em ataques de decriptação por força bruta,
onde um adversário tenta todas as chaves de decriptação possíveis e busca
descobrir qual dos textos puros resultantes é o correto.
34 Introdução à Segurança de Computadores

Claramente, se o texto puro é um string arbitrário, esse ataque não terá


sucesso, pois não existe maneira do atacante reconhecer uma mensagem válida.
Entretanto, se o texto puro é conhecido por ser um texto em linguagem natural,
então o adversário espera que somente um pequeno subconjunto dos resultados
da decriptação (idealmente apenas um texto puro) seja um texto significativo
para a linguagem. Algum conhecimento acerca das possíveis mensagens envia-
das irá então ajudar o atacante a identificar com precisão o texto puro correto.
Sabemos que, para alguma constante ␣ > 1, existem 2␣n mensagens de
texto válidas dentre os 2n textos puros possíveis. Seja k o tamanho (número de
bits) da chave de decriptação. Para um dado texto cifrado, existem 2k textos
puros possíveis, cada um correspondendo a uma chave. Conforme a discus-
são anterior, cada texto puro é uma mensagem de texto válida, com probabili-
dade de . Portanto, o número esperado de textos puros correspondentes
a uma mensagem de texto válida é

Como o tamanho k da chave é fixo, o número acima tende rapidamente a zero


à medida que aumenta o tamanho n do texto cifrado. Além disso, esperamos
que exista um único texto puro válido para o dado texto cifrado quando

O valor limite acima para n é chamado de distância única para a dada lin-
guagem e o tamanho de chave. Para a língua inglesa e o criptossistema AES
de 256 bits, a distância única é cerca de 304 bits ou 38 caracteres ASCII. Isso é
apenas a metade de uma linha de texto.
De acordo com a discussão acima, concluímos que é provável que a de-
criptação por força bruta tenha êxito para mensagens em linguagem natural
que não sejam muito curtas. A saber, quando uma chave produz um texto
puro que seja um texto com significado, o atacante possivelmente recuperou
a mensagem original.

1.3.4 Funções hash criptográficas


Para reduzir o tamanho da mensagem que Bob tem de assinar, muitas vezes
usamos funções hash criptográficas, que são somas de verificação de mensa-
gens que possuem algumas propriedades úteis adicionais. Uma das proprie-
dades adicionais mais importantes é que a função seja unidirecional, o que
significa que é fácil de aplicar mas difícil de inverter. Isto é, dado M, deve ser
relativamente fácil calcular o valor hash, h(M). Mas, dado somente um valor
y, deve ser difícil computar uma mensagem M tal que y  h(M). Acredita-se
que funções hash criptográficas modernas, como SHA-256, sejam funções uni-
direcionais, e resultam em valores que têm apenas 256 bits de comprimento.
Capítulo 1 Introdução 35

Aplicações em assinaturas digitais e integridade


de sistemas de arquivos
Dada uma função hash criptográfica, pode-se reduzir o tempo e o espaço de
que Bob necessita para obter uma assinatura digital, fazendo com que ele, em
primeiro lugar, calcule o hash da mensagem M para produzir h(M) e depois
assine esse valor, que é algumas vezes chamado de resumo de M. Isto é, Bob
obtém a seguinte assinatura:
S  ESB (h(M)).
Agora, para verificar a assinatura S em uma mensagem M, Alice calcula h(M),
o que é fácil, e depois verifica se
DPB (S) h(M).
Assinar um resumo criptográfico da mensagem não apenas é mais efi-
ciente do que assinar a própria mensagem, mas também é uma defesa contra
o ataque do homem-no-meio descrito na Seção 1.3.3. A saber, graças à pro-
priedade unidirecional da função hash criptográfica h, não é mais possível
para o atacante forjar um par mensagem-assinatura sem conhecer a chave
privada. A encriptação da assinatura forjada S agora produz um resumo
y, para o qual o atacante precisa encontrar uma mensagem M tal que y
h(M). Essa computação é impraticável porque h é unidirecional.
Além disso, funções hash criptográficas também têm outra propriedade
que é útil no contexto de assinaturas digitais – elas são resistentes a colisões.
Isso implica que, dado M, é difícil obter uma mensagem diferente M, tal que
h(M)  h(M). Essa propriedade torna o trabalho do falsificador ainda mais
difícil, não apenas por ser difícil falsificar a assinatura de Bob em qualquer
mensagem, mas também por ser difícil para ele, dada uma mensagem M e
sua assinatura S criada por Bob, encontrar outra mensagem, M, tal que S
também é a assinatura para M.
Outra aplicação de funções hash criptográficas em sistemas de computa-
ção seguros é que elas podem ser usadas para proteger a integridade de arqui-
vos críticos de um sistema operacional. Se armazenamos o valor hash cripto-
gráfico de cada um desses arquivos em memória protegida, podemos verificar
a autenticidade desses arquivos apenas calculando seu valor hash criptográfico
e comparando esse valor com aquele armazenado na memória segura. Visto
que essas funções hash são resistentes a colisões, podemos confiar que, se esses
dois valores combinam, é altamente provável que o arquivo não tenha sido
adulterado. Em geral, funções hash são aplicáveis sempre que precisarmos de
um resumo compacto de informação que seja difícil de falsificar.

Códigos de autenticação de mensagens


Uma função hash criptográfica h pode ser usada juntamente com uma chave
secreta compartilhada entre dois participantes para fornecer proteção de in-
tegridade a mensagens trocadas por meio de um canal inseguro, como ilus-
trado na Figura 1.15. Suponha que Alice e Bob compartilham a chave secreta
36 Introdução à Segurança de Computadores

Co Canal
u deca o
comunicação

(Ataque detectado)
h 6B34339 4C66809 4C66809 =? 87F9024 h
MAC MAC MAC MAC
Mensagem M Mensagem M'
recebido calculado

Chave Chave
secreta secreta
compartilhada compartilhada
Remetente Atacante
Destinatário
(modificando)

Figura 1.15 Uso de um código de autenticação de mensagem para verificar a integri-


dade de uma mensagem.

K. Quando Alice quer enviar uma mensagem M para Bob, ela calcula o valor
hash da chave K concatenada com a mensagem M:
A  h(K   M).
Esse valor A é chamado de código de autenticação de mensagem (em inglês,
Message Authentication Code, ou MAC). Alice envia a seguir o par (M, A)
para Bob. Visto que o canal de comunicação é inseguro, denotamos com (M,
A) o par recebido por Bob. Como Bob conhece a chave secreta K, ele mesmo
calcula o código de autenticação para a mensagem recebida M:
A  h(K   M).
Se o seu resultado MAC A é igual ao recebido MAC A, então Bob tem cer-
teza de que a mensagem M é a mensagem enviada por Alice, isto é, A  A
implica em M  M.
Considere um atacante que altera a mensagem e o MAC durante o trânsi-
to. Como a função hash é unidirecional, é impraticável para o atacante recupe-
rar a chave k a partir de MAC A  h(K   M) e a mensagem M enviada por Alice.
Portanto, o atacante não pode modificar a mensagem e calcular um MAC A
correto para a mensagem modificada M.

1.3.5 Certificados digitais


Como ilustrado na Figura 1.12, a criptografia de chave pública resolve o pro-
blema de como fazer para que Alice e Bob compartilhem uma chave secreta
em comum. Isto é, Alice pode simplesmente encriptar a chave secreta K usan-
do a chave pública de Bob, PB, e enviar o texto cifrado para ele. Mas essa solu-
Capítulo 1 Introdução 37

ção tem uma falha: como Alice sabe que aquela chave pública, PB, que usou é
realmente a chave pública de Bob? E se existem muitos Bobs, como ela pode
ter certeza de que usou a chave pública para o Bob certo?
Felizmente, há como corrigir essa falha. Se existe uma autoridade pú-
blica confiável que consegue determinar bem as verdadeiras identidades das
pessoas, então essa autoridade pode assinar digitalmente uma declaração que
combine a identidade de cada pessoa com a sua chave pública. Isto é, essa au-
toridade de confiança poderia assinar uma declaração como a seguinte:
“O Bob que reside na Rua Principal, 11, de Gotham City, nasceu
em 4 de agosto de 1981 e tem como endereço de e-mail bob@gotham.
com, tem como chave pública PB e eu respondo por essa certificação até
31 de dezembro de 2011.”
Uma declaração assim é chamada de certificado digital, pois combina
uma chave pública com informação de identificação sobre o sujeito que pos-
sui aquela chave pública. A autoridade de confiança que emite tal certificado
é chamada de autoridade certificadora (AC).
Agora, em vez de simplesmente confiar cegamente que PB é a chave pú-
blica do Bob com o qual ela quer se comunicar, Alice precisa apenas saber a
chave pública da AC, visto que ela vai usar esta para verificar a assinatura
AC do certificado digital para Bob. Mas é provável que existam muito poucas
AC, de modo que conhecer todas as suas chaves públicas é uma hipótese ra-
zoável. Na prática, as chaves públicas de ACs comumente aceitas vêm junto
com o sistema operacional. Visto que o certificado digital é uma forte evidên-
cia da autenticidade da chave pública de Bob, Alice pode confiar, mesmo que
seja proveniente de uma mensagem de e-mail não assinada ou seja postada
em um site de terceiros.
Por exemplo, o certificado digital para um site geralmente inclui as se-
guintes informações:
• Nome da autoridade de certificação (p. ex., Thawte)
• Data de emissão do certificado (p. ex., 1/1/2009)
• Data de expiração do certificado (p. ex., 12/31/2011)
• Endereço do site (p. ex., mail.google.com)
• Nome da organização que opera o site (p. ex., “Google, Inc”.)
• Chave pública usada pelo servidor Web (p. ex., uma chave RSA de
1024 bits)
• Nome da função hash criptográfica usada (p. ex., SHA-256)
• Assinatura digital
Na realidade, quando um navegador de Internet “fecha o cadeado” em
um site seguro, ele está fazendo isso baseado em troca de chave, que inicia
com o navegador buscando o Certificado Digital para esse servidor Web, e
fazendo a concordância de seu nome com uma chave pública. Portanto, uma
abordagem para defesa contra um ataque de phishing para sites Web encrip-
tados é verificar se o Certificado Digital contém o nome da organização asso-
ciado com o site.
38 Introdução à Segurança de Computadores

Existem vários outros conceitos criptográficos, incluindo prova de co-


nhecimento zero, esquemas de compartilhamento secreto e divulgação de
métodos de encriptação, mas os tópicos apresentados são os conceitos cripto-
gráficos mais utilizados em aplicações de segurança de computadores.

1.4 Questões de implementação e usabilidade

Para que as soluções de segurança de computadores sejam eficazes, elas de-


vem ser implementadas e usadas corretamente. Portanto, quando soluções de
segurança de computadores estão sendo desenvolvidas, os projetistas devem
ter em mente o programador e o usuário.

1.4.1 Eficiência e usabilidade


Soluções de segurança de computadores devem ser eficientes, pois os usuá-
rios não gostam de sistemas lentos. Essa regra é a principal justificativa, por
exemplo, da razão de um criptossistema de chave pública ser muitas vezes
usado para uma única troca de chave secreta que é depois usada para comu-
nicação por meio de um esquema de encriptação simétrica.

Um exemplo de cenário envolvendo usabilidade


e controle de acesso
Eficiência e facilidade de uso também são importantes no contexto de con-
trole de acesso. Muitos sistemas permitem que apenas os administradores
alterem os arquivos que definem direitos de controle de acesso, papéis ou en-
tidades. Desse modo, por exemplo, não é possível em alguns sistemas opera-
cionais, incluindo várias versões de Linux, que usuários definam os direitos
de controle de acesso para seus próprios arquivos além de algumas catego-
rias gerais, como “todos” e “pessoas do meu grupo”. Devido a essa limitação,
é na realidade uma tarefa incômoda definir um novo grupo de trabalho ou
dar direitos de acesso a esse grupo. Portanto, em vez de enfrentar o problema
de pedir a um administrador para criar um novo grupo, um usuário pode
simplesmente dar direitos plenos de acesso a todos, comprometendo assim a
confidencialidade e a integridade dos dados.
Por exemplo, suponha que um grupo de estudantes decida trabalhar
em um projeto de software conjunto para um grande concurso acadêmico.
Eles irão provavelmente escolher um líder de projeto, que vai criar um sub-
diretório de seu diretório principal para guardar todo o código do projeto.
Idealmente, deve ser fácil para o líder definir o controle de acesso para esse
diretório e permitir que seus colegas o acessem, e mais ninguém. Um controle
Capítulo 1 Introdução 39

assim às vezes não é possível sem submeter uma requisição a um administra-


dor de sistema sobrecarregado, que poderá ou não responder a essas requisi-
ções de estudantes. Assim, o que o líder do projeto pode fazer?

Soluções possíveis
Uma solução é fazer com que o líder do projeto mantenha a versão de refe-
rência do código no diretório do projeto e exigir que os membros da equipe
mandem para ele por e-mail todas as atualizações de código. Ao receber uma
atualização de um membro da equipe, o líder deve então fazer ele mesmo as
revisões de código na versão de referência do código e distribuir os arquivos
modificados para os demais membros da equipe. Essa solução fornece um
nível razoável de segurança, pois a interceptação de mensagens de e-mail é
difícil (embora não impossível). Entretanto a solução é muito ineficiente, pois
implica muito trabalho do líder, que poderia lamentar ter sido escolhido para
esse papel.
Outra possibilidade é que o líder do projeto use um caminho mais fácil,
escondendo o diretório do projeto bem no fundo de seu diretório principal,
esperando que nenhuma das equipes concorrentes descubra esse diretório
desprotegido. Essa abordagem é na verdade um exemplo de segurança por
obscuridade, que é a abordagem de originar segurança a partir de um fato
que não é conhecido em geral em vez de adotar princípios rigorosos de segu-
rança de computadores (como discutido nas Seções 1.1.1 e 1.1.2). Entretanto,
a história tem nos ensinado repetidamente que a segurança por obscuridade
falha miseravelmente. Portanto, o líder de nossa equipe de software é forçado
a escolher o menor dos males, em vez de receber as ferramentas para cons-
truir uma solução segura para o seu problema.
Naturalmente, os usuários claramente não deveriam ter de optar entre
segurança e eficiência. Mas esse requisito implica que projetistas de siste-
mas precisam antecipar como as suas decisões de segurança irão impactar os
usuários. Se for muito difícil, os usuários vão encontrar um caminho alterna-
tivo que seja mais fácil, porém provavelmente não muito seguro.
Revisitemos nosso exemplo de equipe de programação da escola. As
versões mais recentes de Linux e Microsoft Windows permitem ao proprietá-
rio da pasta definir diretamente uma lista de controle de acesso a ela (ver Se-
ção 1.2.2), sem intervenção do administrador. Além disso, por default, essas
permissões são automaticamente aplicadas a todos os arquivos e subpastas
criados dentro da pasta. Portanto, nosso líder de projeto poderia simplesmen-
te adicionar uma lista de controle de acesso à pasta do projeto que especifica
direitos de leitura, escrita e execução para cada um dos membros da equipe.
Os membros da equipe agora podem compartilhar com segurança a pasta do
projeto, sem o risco de intromissão das equipes competidoras. Além disso, o
líder do projeto precisa criar apenas uma vez essa lista de controle de acesso
para a pasta do projeto. Qualquer arquivo e subpasta recentemente adiciona-
do irá herdar automaticamente essa lista de controle de acesso. Essa solução
é ao mesmo tempo eficiente e fácil de usar. Mais detalhes sobre permissões
avançadas de arquivos são dados na Seção 3.3.3.
40 Introdução à Segurança de Computadores

1.4.2 Senhas
Um dos meios mais comuns de autenticar pessoas em sistemas de computa-
ção é pelo uso de nomes de usuário e senhas. Mesmo sistemas baseados em
chaves criptográficas, dispositivos físicos e biometria muitas vezes aumen-
tam a segurança dessas técnicas com senhas. Por exemplo, a chave secreta
usada em um criptossistema simétrico pode ser armazenada no disco rígido
em forma encriptada, onde a chave de decriptação é obtida a partir de uma
senha. Para que uma aplicação possa usar a chave secreta, o usuário terá de
fornecer a sua senha para a chave. Portanto, uma questão crítica e recorrente
em círculos de segurança de computadores é a segurança da senha.
Senhas devem ser fáceis de lembrar e difíceis de adivinhar. Infelizmente,
esses dois objetivos conflitam entre si. Senhas que são fáceis de lembrar são
coisas como palavras, nomes de animais de estimação, datas de nascimento,
aniversários e sobrenomes. Senhas que são difíceis de descobrir são sequên-
cia aleatórias de caracteres provenientes de um grande alfabeto, como todos
os caracteres que podem ser digitados em um teclado, incluindo letras maiús-
culas e minúsculas, números e símbolos. Além disso, quanto maior o tempo
de uso de uma senha, maior é o seu risco. Por isso, alguns administradores de
sistema requerem que os usuários mudem a senha com frequência, o que as
torna ainda mais difíceis de lembrar.

Ataque a dicionário
O problema com a típica senha fácil de lembrar é que ela pertence a um pe-
queno conjunto de possibilidades. Além disso, os atacantes de computadores
conhecem todas essas senhas e construíram dicionários com elas. Por exem-
plo, para a língua inglesa, existem menos de 50.000 palavras comuns, 1.000
nomes comuns de pessoas, 1.000 nomes comuns de animais de estimação e
10.000 sobrenomes comuns. Além disso, existem apenas 36.525 datas de nas-
cimentos e aniversários para quase todos os humanos que vivem nesse plane-
ta, isto é, cada um que tenha 100 anos ou menos. Portanto, um atacante pode
compilar um dicionário de todas essas senhas comuns e ter um arquivo com
menos de 100.000 entradas.
Armado com esse dicionário de senhas comuns, alguém pode realizar
um ataque que é chamado, por razões óbvias, de ataque de dicionário. Se
um atacante puder testar as palavras desse dicionário na velocidade máxima
de um computador moderno, ele pode atacar um objeto protegido por senha
e romper as suas proteções em apenas poucos minutos. Especificamente, se
um computador puder testar uma senha a cada milissegundo, o que prova-
velmente é uma estimativa grosseira para um computador comum com um
ciclo de relógio de um gigahertz, então ele pode completar um ataque de di-
cionário em 100 segundos, o que é menos de 2 minutos. De fato, devido a esse
risco, muitos sistemas introduzem um retardo de alguns segundos antes de
reportar uma falha de senha e alguns sistemas bloqueiam usuários após te-
rem feito algumas tentativas de senha malsucedidas, acima de algum limite.
Capítulo 1 Introdução 41

Senhas seguras
Senhas seguras, por outro lado, tiram vantagem do potencial pleno de um
grande alfabeto, reduzindo a velocidade de ataques de dicionários. Por exem-
plo, se um administrador de sistema insiste para que cada senha seja uma se-
quência arbitrária de pelo menos oito caracteres vsíveis que podem ser digi-
tados em um teclado americano comum, então o número potencial de senhas
é pelo menos 948  6.095.689.385.410.816, isto é, pelo menos 6 quatrilhões.
Mesmo que um computador pudesse testar uma senha a cada nanossegundo,
que é quase tão rápido que um computador pode, então isso levaria, em mé-
dia, pelo menos 3 milhões de segundos para quebrar uma dessas senhas, isto
é, pelo menos um mês de tentativas ininterruptas.
O cálculo acima, grosso modo, seria a razão pela qual administradores
de sistemas paranoicos solicitam aos usuários para trocar suas senhas men-
salmente. Se cada tentativa demora pelo menos um microssegundo, o que
é mais realista, então quebrar uma senha como essa levaria pelo menos 95
anos, em média. Portanto, realisticamente, se alguém consegue memorizar
uma senha complexa e nunca a revelar para uma fonte não confiável, então
provavelmente ela é boa por um longo tempo.
Existem vários truques para memorizar uma senha complexa. É desne-
cessário dizer em um livro sobre segurança de computadores que um desses
truques não é, definitivamente, escrever em um papel adesivo e colá-lo na
tela do computador! Uma maneira melhor é memorizar uma frase boba ou
memorizável e pegar a letra inicial de cada palavra, colocando algumas em
maiúsculo e inserindo alguns caracteres especiais. Por exemplo, um usuário,
que chamaremos de “Mark”, poderia iniciar com a frase
“Mark levou Lisa à Disneylândia em 15 de março”,
que pode ter sido como Mark celebrou seu aniversário de casamento com
Lisa. Então essa frase se torna a sequência
MlLaaDeM15
que fornece uma senha bastante forte. Contudo, podemos fazer ainda melhor.
Podemos substituir um “a” de “aaà”, por um sinal “”, resultando na senha:
MlLaDeM15
que é ainda mais forte. Se Mark for cuidadoso e não revelar essa senha, ela
pode durar a vida inteira.

1.4.3 Engenharia social


Os três Bs da espionagem, burglary (arrombar), bribery (subornar) e bla-
ckmail (extorquir) – se aplicam igualmente bem em segurança de compu-
tadores. Acrescente a essas três as boas técnicas antiquadas de trapaça e
surgirá um dos mais poderosos ataques contra soluções de segurança de
42 Introdução à Segurança de Computadores

computadores – a engenharia social. Esse termo se refere a técnicas que


envolvem o uso de intrusos humanos para enganar as soluções de segu-
rança de computadores.

Pretexto
Um exemplo clássico de ataque de engenharia social, por exemplo, envolve
uma atacante, Eve, que chama um serviço de ajuda e informa que esqueceu
sua senha, quando, na verdade, ela está indagando a respeito da conta de
outra pessoa, digamos, alguém chamado “Alice”. O agente do serviço de aju-
da pode até perguntar a Eve algumas questões pessoais a respeito de Alice,
que, se Eve fez o seu tema de casa, poderá responder com facilidade. Então
o agente do serviço de ajuda provavelmente irá eliminar a senha da conta
de Alice e fornecer a nova senha para Eve, pensando que ela é Alice. Mesmo
contabilizando as poucas horas que Eve usou para descobrir alguns detalhes
pessoais sobre Alice, como sua data de nascimento, o nome de solteira da
mãe e o nome de seu cachorrinho, um ataque assim funciona muito mais
rápido do que um ataque de senha por força bruta, e não requer hardware
e software especializado. Um ataque como esse, baseado em uma história
inventada ou pretexto, é conhecido como pretextar.

Isca
Outro ataque, conhecido como isca (baiting), envolve usar algum tipo de
“presente” como isca para fazer com que alguém instale software malicioso.
Por exemplo, um atacante poderia deixar algumas unidades USB no estacio-
namento de uma empresa que tenha um sistema de computação considerado
seguro, e poderia marcar algumas das unidades com nomes de softwares po-
pulares de programas e jogos. A esperança é que um funcionário insuspeito
pegará a unidade USB durante a sua pausa de almoço, levará para a empresa,
inserirá no sistema de computação seguro e, sem querer, instalará o software
malicioso.

Quid Pro Quo


Outro ataque de engenharia social é o quid pro quo, que em latim significa
“uma coisa pela outra”. Por exemplo, um atacante, “Bob”, pode ligar para
uma vítima, “Alice”, dizendo que ele é um agente de serviço de ajuda e
que um colega de trabalho indicou Alice. Bob então pergunta a Alice se ela
tem tido problemas em geral com o seu computador ou com o sistema de
computação da empresa. Ou poderia perguntar a Alice se ela precisa de
alguma ajuda para criar uma senha forte, agora que é o momento de trocar
a sua senha antiga. Em qualquer caso, Bob oferece a Alice algum tipo de
ajuda legítima. Ele pode mesmo diagnosticar e resolver um problema que
ela está tendo com seu computador. Esse é o “algo” que Bob oferece a Alice
Capítulo 1 Introdução 43

aparentemente sem pedir nada em troca. Nesse ponto, Bob pede a Alice a
sua senha, possivelmente se oferecendo para realizar consertos futuros ou
para avaliar se a sua senha é realmente forte. Devido à pressão social que
está dentro de cada um de nós para retribuir um favor, Alice pode se sentir
completamente à vontade para compartilhar a sua senha com Bob em retri-
buição por sua ajuda “gratuita”. Se ela fizer isso, terá se tornado uma vítima
de ataque quid pro quo.
Para aumentar as chances de ter sucesso em seu ataque, Bob pode usar
um serviço de telefone de voz sobre IP (VoIP) que permite identificar o ID de
quem chamou. Portanto, ele pode fornecer como ID o número de telefone e
o nome do verdadeiro serviço de ajuda da empresa de Alice, que aumentará
a probabilidade de Alice acreditar na história de Bob. Esse é um exemplo de
outro tipo de ataque, chamado de vishing, que é uma abreviatura de VoIP
phishing.
Em geral, ataques de engenharia social podem ser métodos bem efica-
zes de burlar soluções fortes de segurança de computadores. Portanto, sem-
pre que um projetista de sistema estiver implementando um sistema seguro,
deve ter em mente a maneira como as pessoas interagem com esse sistema e
os riscos que ele pode ter devido a ataques de engenharia social.

1.4.4 Vulnerabilidades provenientes de erros de programação


Os programadores devem receber instruções claras sobre como produzir o
sistema seguro e uma descrição formal dos requisitos de segurança que preci-
sam ser satisfeitos. Além disso, uma implementação deve ser testada quanto
aos requisitos de segurança. Deve-se prestar atenção especial a seções do pro-
grama que tratam com comunicação em rede e entradas de processos forne-
cidas por usuários. De fato, qualquer interação do programa com o mundo
externo deve ser examinada para garantir que o sistema permanecerá em um
estado seguro mesmo que entidades externas que se comuniquem com o sis-
tema executem ações inesperadas.
Existem muitos exemplos de sistemas que entram em um estado vul-
nerável quando um usuário fornece uma entrada malformada. Por exemplo,
o clássico ataque de overflow de buffer (ver Figura 1.16) injeta código escri-
to por um usuário malicioso em uma aplicação em execução, explorando o
erro comum de programação de não verificar se uma sequência de entrada
lida pela aplicação é maior do que a variável na qual é armazenada (buffer).
Portanto, uma entrada grande fornecida pelo atacante pode sobrescrever os
dados e o código da aplicação, o que pode resultar na aplicação executando
ações maliciosas especificadas pelo atacante. Servidores Web e outras aplica-
ções que se comunicam pela Internet podem muitas vezes ser atacados por
usuários remotos que exploram a vulnerabilidade de overflow de buffer em
seu código. Para uma descrição mais detalhada de como funcionam os ata-
ques de overflow de buffer, veja a Seção 3.4.3.
44 Introdução à Segurança de Computadores

Código
malicioso Buffer de nome

Código
aplicação
Fornece nome
Servidor Web

Atacante

(a)

Código
malicioso
application
li ti
code

Servidor Web

Atacante

(b)
Figura 1.16 Um ataque de overflow de buffer em um servidor Web. (a) Um servidor
Web aceita a entrada do usuário em um campo de nome de uma página Web para
uma variável não verificada de buffer. O atacante fornece como entrada algum código
malicioso. (b) O código malicioso lido pelo servidor faz o buffer e parte do código da
aplicação transbordarem. O servidor Web agora executa o código malicioso.
Capítulo 1 Introdução 45

1.5 Exercícios

Para dicas (em inglês) dos exercícios, visite www.bookman.com.br.

Reforço
R-1.1 Compare e contraste os conceitos C.I.D. para segurança de informação
com os conceitos G.A.A.
R-1.2 Qual é o texto cifrado em uma versão em inglês da cifra de César para o
texto puro “ALL ZEBRAS YELP”.
R-1.3 Explique por que alguém não deve se preocupar em ser uma vítima de
ataque de engenharia social por telefone celular se ele estiver dentro de
uma gaiola de Faraday.
R-1.4 Quais são algumas das técnicas usadas para obter confidencialidade?
R-1.5 Qual é a técnica mais eficiente para obter integridade de dados?
R-1.6 Com relação aos conceitos C.I.D. e G.A.A., quais são os riscos apresenta-
dos por spams?
R-1.7 Com relação aos conceitos C.I.D. e G.A.A., quais são os riscos apresenta-
dos por Cavalos de Troia?
R-1.8 Com relação aos conceitos C.I.D. e G.A.A., quais são os riscos apresenta-
dos por vírus de computadores?
R-1.9 Com relação aos conceitos C.I.D. e G.A.A., quais são os riscos apresen-
tados por farejadores de pacotes (packet sniffers) que monitoram todos os
pacotes transmitidos em um ponto de acesso à Internet sem fio?
R-1.10 Com relação aos conceitos C.I.D. e G.A.A., quais são os riscos apresenta-
dos por alguém que grava em um CD músicas de uma loja de música onli-
ne, e depois as copia para o sistema de software de seu MP3 e faz dezenas
de cópias dessas músicas para seus amigos?
R-1.11 Com relação aos conceitos C.I.D. e G.A.A., quais são os riscos apresenta-
dos por alguém que faz tantas requisições de download para uma loja de
música online que impedem que outros usuários possam baixar músicas?
R-1.12 Compare e contraste a encriptação simétrica com a encriptação de chave
pública, incluindo os pontos fortes e fracos de cada uma.
R-1.13 Relacione pelo menos três riscos de segurança que podem surgir quando
alguém tem o seu computador portátil roubado.
R-1.14 Suponha que o autor de um sistema de software de banco online progra-
mou uma característica secreta que faz o programa enviar para ele infor-
mação sobre qualquer conta cujo saldo ultrapasse 10.000. Que tipo de ata-
que é esse e quais são alguns de seus riscos?
46 Introdução à Segurança de Computadores

R-1.15 Suponha que um provedor de serviços Internet (ISP) tem um sistema de


telefonia de voz sobre IP (VoIP) que ele administra e vende. Suponha ain-
da que esse ISP está deliberadamente perdendo 25% dos pacotes usados
em sistemas VoIP de seus competidores quando esses pacotes trafegam
nos roteadores desse ISP. Que tipo de ataque é esse?
R-1.16 Forneça um exemplo de falso senso de segurança originado pelo uso da
abordagem “segurança por obscuridade”.
R-1.17 A língua inglesa tem um conteúdo de informação de cerca de 1,25 bits por
caractere. Portanto, ao usar a codificação padrão ASCII de 8 bits, cerca de
6,75 bits por caractere são redundantes. Calcule a probabilidade de um
array aleatório de bytes corresponder a um texto em inglês.
R-1.18 Suponha que um criptossistema simétrico com tamanho de chave de 32
bits é usados para encriptar mensagens escritas em inglês e codificadas
em ASCII. Visto que as chaves são curtas, um atacante está usando o méto-
do de pesquisa exaustiva por força bruta para decriptar um texto cifrado
de t bytes. Estime a probabilidade de recuperar exclusivamente o texto
puro correspondente ao texto cifrado para os seguintes valores de t: 8, 64 e
512.
R-1.19 Suponha que você poderia usar todos os 128 caracteres do conjunto de ca-
racteres ASCII em uma senha. Qual é o número de senhas de 8 caracteres
que poderia ser construído a partir desse conjunto de caracteres? Quanto
tempo em média levaria para um atacante descobrir uma dessas senhas se
ele pudesse testar uma senha a cada nanossegundo?
R-1.20 O computador portátil de Doug foi recém infectado por algum software
malicioso que usa a câmera embutida no computador para gravar um ví-
deo cada vez que ele sente um movimento e depois coloca esse vídeo em
um popular site de compartilhamento de vídeos. Qual tipo de ataque isso
envolve e quais conceitos de segurança de computadores ele viola?
R-1.21 A Honyota Corporation lançou um novo carro, o Nav750, que transmite
suas coordenadas GPS para os computadores da Honyota Corporation a
cada segundo. Um proprietário pode então localizar o seu carro a qual-
quer momento, apenas acessando esse site e usando uma senha, formada
pela concatenação de seu sobrenome e o sabor de seu sorvete predileto.
Quais são algumas das preocupações de segurança para o Nav750? Quais
são algumas das preocupações de privacidade, digamos, se o carro é de
propriedade da esposa, pais, ou empregador do motorista principal?
R-1.22 A HF Corporation tem um novo refrigerador, o Monitator, que tem uma
câmera que tira uma fotografia do conteúdo do refrigerador e a carrega no
site da HF Corporation. O proprietário do Monitator pode então acessar
esse site para ver o que está dentro de seu refrigerador sem abrir a porta.
Por razões de segurança, a HF Corporation encripta essa foto usando um
algoritmo proprietário e fornece o Pin de 4 dígitos para o proprietário do
Monitator decriptar a foto, de modo que possa acessar as fotos do interior
de seu Monitator. Quais são as preocupações de segurança e princípios
que essa solução suporta e quais ela não suporta?
Capítulo 1 Introdução 47

R-1.23 Durante a campanha presidencial de 2008 dos Estados Unidos, hackers


conseguiram acessar uma conta de e-mail da candidata à vice-presidência,
Sarah Palin. Diz-se que seus ataques envolveram enganar o sistema de
e-mail para restaurar a senha da governadora Palin, dizendo que eram
realmente Palin e que ela havia esquecido a sua senha. O sistema fez vá-
rias perguntas de caráter pessoal aos hackers, referentes à identidade de
Palin, incluindo sua data de nascimento, seu código postal e uma pergun-
ta pessoal de segurança – “Onde você conheceu o seu esposo?” – todas
respondidas pelos hackers usando dados disponíveis na Internet. Esse é
um exemplo de que tipo de ataque? Além disso, que grau de segurança é
fornecido por um recurso de restauração de senha como esse?

Criatividade
C-1.1 Descreva uma arquitetura para um sistema de restauração de senha de
e-mail que seja mais seguro do que o descrito no Exercício R-1.23, mas
ainda altamente usável.
C-1.2 Descreva uma instância de um arquivo que contenha evidência de sua
própria integridade e autenticidade.
C-1.3 Suponha que um provedor de serviços Internet (ISP) tem um sistema de
telefonia de voz sobre IP (VoIP) que ele administra e vende. Suponha ain-
da que esse ISP está deliberadamente perdendo 25% dos pacotes usados
em sistemas VoIP de seus competidores quando esses pacotes trafegam
nos roteadores desse ISP. Descreva como um usuário pode descobrir se o
seu ISP está fazendo isso.
C-1.4 Vírus de computadores, por sua própria natureza, devem poder se repli-
car. Portanto, um vírus de computador deve armazenar uma cópia de si
mesmo dentro de seu próprio código. Descubra como essa propriedade de
vírus de computadores poderia ser usada para descobrir se um vírus de
computador infectou um determinado arquivo do sistema operacional.
C-1.5 Suponha que você é um escritor de vírus de computador; portanto, você
sabe que precisa armazenar uma cópia do código de seu vírus dentro do
próprio vírus. Além disso, suponha que você sabe que um administrador
de segurança também está ciente desse fato e o irá usar para detectar a
presença de seu vírus em arquivos do sistema operacional, como descrito
no problema anterior. Explique como você pode esconder a cópia embuti-
da de seu vírus de modo a dificultar que o administrador de segurança o
descubra.
C-1.6 Descreva um esquema híbrido de controle de acesso que combine os mo-
delos de lista de controle de acesso e competências. Explique como os
registros desse modelo híbrido podem ser interligados para suportar a
remoção de objetos e de sujeitos em tempo proporcional ao seu número de
direitos de acesso; portanto, não em tempo proporcional a todos os pares
de sujeito-objeto de direitos de acesso.
48 Introdução à Segurança de Computadores

C-1.7 Forneça dois exemplos de ataques que comprometam a integridade de


arquivos de metadados ou diretórios em um sistema de arquivos.
C-1.8 Um rootkit é um software malicioso que se instala em um sistema opera-
cional e depois altera todos os programas utilitários do sistema operacio-
nal que normalmente poderiam detectar esse software, de modo que eles
não mostrem a sua presença. Descreva os riscos trazidos por um software
como esse, como pode ser realmente descoberto e como uma infeção as-
sim pode ser corrigida.
C-1.9 Benny é um ladrão que tentou arrombar um caixa eletrônico (Automated
Teller Machine, ATM) usando uma chave de fenda, mas somente conseguiu
quebrar cinco teclas diferentes no teclado numérico e esmagar a leitora de
cartões, quando ouviu Alice vindo e se escondeu. Alice chegou, inseriu o
seu cartão eletrônico, digitou o seu código PIN de 4 dígitos e sacou dinhei-
ro. Mas ela não conseguiu recuperar o seu cartão eletrônico, de modo que
foi tentar encontrar ajuda. Benny então retornou à ATM e começou a digitar
números para tentar descobrir o código PIN de Alice e roubar dinheiro de
sua conta. Qual seria o pior caso de números de PINs que Benny teria de
digitar antes de descobrir o código correto do PIN de Alice?
C-1.10 Tão logo Barack Obama assumiu a presidência, decidiu adotar a tecnolo-
gia moderna, comunicando-se com os membros do gabinete pela Inter-
net, usando um dispositivo que suporta protocolos criptográficos. Numa
tentativa inicial, Barack trocou com Tim breves mensagens de texto, en-
criptadas com criptografia de chave pública, para decidir as quantidades
exatas de injeção de divisas a serem dadas aos 10 maiores bancos do país.
Sejam pB e pT as chaves públicas de Barack e Tim, respectivamente, uma
mensagem m enviada por Barack para Tim é transmitida como EpT (m) e
a resposta r de Tim para Barack é transmitida como EpB (r). Um atacante
pode se intrometer na comunicação, conhecendo a seguinte informação:
• As chaves públicas pB e pT e o algoritmo de encriptação
• O total da injeção de divisas autorizado pelo congresso é U$900
bilhões
• Os nomes dos 10 maiores bancos
• A quantidade que cada banco vai receber será um múltiplo de U$1
bilhão
• Mensagens e respostas são trocas sucintas da seguinte forma:
Barack: Quanto para o Citibank?
Tim: $144B.
Barack: Quanto para o Bank of America?
Tim: $201B.
...
Descreva como o atacante pode descobrir o total para cada banco mesmo
que não consiga obter as chaves privadas.
C-1.11 Como resultado do ataque acima, Barack decide modificar o protocolo do
Exercício C-1.10 para troca de mensagens. Descreva duas modificações sim-
Capítulo 1 Introdução 49

ples do protocolo que não sejam sujeitas ao ataque acima. A primeira deve
usar números randômicos e a segunda deve usar encriptação simétrica.
C-1.12 Barack envia frequentemente piadas para Hillary. Ele não se preocupa
com a confidencialidade dessas mensagens, mas quer ganhar crédito pe-
las piadas e evitar que Bill se apresente como autor ou que as modifique.
Como isso pode ser obtido usando criptografia de chave pública?
C-1.13 Visto que criptografia de chave pública é computacionalmente intensiva e
consome muita bateria no dispositivo de Barack, ele consegue uma abor-
dagem alternativa. Primeiro, ele compartilha uma chave secreta k com
Hillary, mas não com Bill. A seguir, junto com a piada x, ele envia o valor
d  h(k   x), onde h é uma função hash criptográfica. Será que o valor d
garante a Hillary que Barack é o autor de x e que x não foi modificada por
Bill? Justifique a sua resposta.
C-1.14 Barack periodicamente vem com ideias brilhantes sobre como interrom-
per a crise financeira, fornecer serviços de saúde para todos os cidadãos
e salvar os ursos polares. Ele quer compartilhar essas ideias com todos os
membros do gabinete, mas também quer ganhar crédito por elas. Esten-
dendo a abordagem acima, ele compartilha a chave secreta k com todos os
membros do gabinete. A seguir, ele divulga cada ideia z seguida pelo valor
h(kz). Será que essa abordagem funciona ou Tim pode dizer que as ideias
são dele e não de Barack? Justifique a sua resposta.
C-1.15 Descreva um método que permita a um cliente autenticar diversas vezes
um servidor que possui os seguintes requisitos:
a. O cliente e o servidor usam espaço constante para a autenticação.
b. Cada vez que o cliente autentica o servidor, um valor aleatório
diferente é usado para autenticação (por exemplo, se você tem n
rodadas de autenticação, o cliente e o servidor devem usar n va-
lores aleatórios diferentes – isso significa que compartilhar uma
chave no início e usá-la para cada rodada de autenticação não é
uma solução válida). Você pode encontrar algumas vulnerabilida-
des para esse protocolo?
C-1.16 Considere o seguinte método que estabelece uma chave secreta de sessão
k para uso de Alice e Bob. Alice e Bob já compartilham uma chave secreta
KAB para um criptossistema simétrico.
a. Alice envia um valor aleatório NA para Bob junto com sua identi-
ficação, A.
b. Bob envia a mensagem encriptada EKAB (NA), NB para Alice, em
que NB é um valor aleatório escolhido por Bob.
c. Alice envia de volta EKAB (NB).
d. Bob gera a chave de sessão k e envia EKAB (k) para Alice.
e. Agora Alice e Bob trocam mensagens encriptadas com a nova
chave de sessão k.
Suponha que os valores aleatórios e as chaves têm o mesmo número de
bits. Descreva um possível ataque para esse método de autenticação.
50 Introdução à Segurança de Computadores

O método pode se tornar mais seguro se for retirada a hipótese de que


os valores aleatórios e as chaves têm o mesmo número de bits? Explique.
C-1.17 Alice e Bob compartilharam uma chave secreta de n bits há algum tempo.
Agora eles não têm certeza se ainda possuem a mesma chave. Portanto,
eles usam o seguinte método para se comunicar sobre um canal inseguro
para verificar se a chave KA de Alice é a mesma chave KB de Bob. Seu obje-
tivo é evitar que um atacante descubra a chave secreta.
a. Alice gera um valor aleatório de n bits, R.
b. Alice calcula X  KA 丣 R, onde 丣 indica a função booleana OU
exclusiva e envia X para Bob.
c. Bob calcula Y  KB 丣 X e envia Y para Alice.
d. Alice compara R e Y. Se R  Y, ela conclui que KA  KB, isto é, ela
e Bob de fato têm a mesma chave secreta.
Mostre como um atacante que se intromete no canal pode obter a chave
secreta compartilhada.
C-1.18 Muitos navegadores de Internet “fecham o cadeado” de um site encrip-
tado tão logo o certificado digital oferecido por esse site combina com o
nome desse servidor Web. Explique como isso pode levar a uma falsa sen-
sação de segurança no caso de um ataque de phishing.
C-1.19 Explique os riscos para Bob se ele desejar assinar uma sequência aparente-
mente aleatória usando a sua chave privada.
C-1.20 Descreva uma boa solução para o problema de ter um grupo de alunos
colaborando em um projeto de construção de software usando o diretó-
rio de um dos membros do grupo de maneira que seria difícil descobrir
por outros que não sejam os membros, e que não requeira a ajuda de um
administrador do sistema, assumindo que os únicos direitos de acesso
que o líder do grupo pode modificar são aqueles para “todos”. Você pode
considerar que os direitos de acesso são “read”, “write” e “exec”, onde
“read” significa que os arquivos e subdiretórios daquele diretório podem
ser listados, “write” significa que membros daquele diretório podem ser
inseridos, eliminados ou renomeados e “exec” em um diretório ou subdi-
retório significa que o usuário pode alterar sua posição nesse diretório ou
subdiretório desde que especifique o seu nome exato.
C-1.21 Suponha que um sistema operacional oferece aos usuários uma funciona-
lidade de segunda chance automática, de modo que sempre que o usuá-
rio solicita a remoção de um arquivo, ele na verdade é colocado em um
diretório “cesta de reciclagem”, que é compartilhado por todos os usuá-
rios, com seus direitos de acesso definidos, de modo que esses usuários
possam recuperar seus arquivos mesmo que tenham esquecido os seus
nomes. Descreva os riscos de segurança que uma funcionalidade assim
apresenta.
Capítulo 1 Introdução 51

C-1.22 Suponha, em um cenário baseado em uma história verdadeira, que um


vírus de rede de computador é concebido de modo que tão logo ele seja
copiado em um computador, X, ele simplesmente copia a si mesmo para
seis dos computadores vizinhos de X, usando a cada vez um nome alea-
tório de arquivo, como um modo de evitar detecção. O próprio vírus não
causa outro dano, visto que não lê quaisquer outros arquivos nem elimina
ou modifica quaisquer outros arquivos. Que danos pode ser causado por
um vírus como esse e como ele pode ser detectado?

Projetos
P-1.1 Implemente um sistema de arquivos “de brinquedo”, com cerca de doze
usuários e pelo menos outros tantos diretórios e arquivos, que use uma
matriz de controle de acesso para gerenciar direitos de controle de acesso.
P-1.2 Faça o projeto do Problema P-1.1, porém use listas de controle de acesso.
P-1.3 Faça o projeto do Problema P-1.1, porém use competências para definir os
direitos de controle de acesso de cada usuário.
P-1.4 Realize uma análise estatística do todos os spams que você recebe por se-
mana, classificando-os pelo tipo de ataque que eles representam.
P-1.5 Implemente um criptossistema simétrico “de brinquedo” baseado no se-
guinte método:
a. Chaves são valores de 16 bits.
b. Mensagens são sequências de caracteres com um número par de
caracteres. Sempre se pode adicionar um branco no final de uma
sequência de tamanho ímpar.
c. A encriptação de uma mensagem M de tamanho n (em bytes) é
dada por
EK(M)  M 丣 (K   K    ),

onde a chave K é repetida n/2 vezes.


d. O algoritmo de decriptação para um texto cifrado C é o mesmo
que o algoritmo de encriptação:
DK(C)  C 丣 (KK    ).
Implemente um ataque de decriptação por força bruta para esse criptossis-
tema e teste-o com mensagens de texto em inglês geradas aleatoriamente.
Automatize o processo de detecção onde a mensagem decifrada é o teste
em inglês.
52 Introdução à Segurança de Computadores

Notas do capítulo
Os dez princípios de segurança de computadores são oriundos do artigo ori-
ginal de Saltzer e Schroeder [86], que avisa que os últimos dois princípios
(fator de trabalho e gravação de compromisso) são derivados da seguran-
ça física de sistemas e que “somente se aplicam imperfeitamente a sistemas
de computação”. O princípio de projeto aberto foi inicialmente formulado
em um artigo de um criptógrafo francês do século XIX, Auguste Kerckhoffs
[47]. O Crypto-Gram Newsletter de Bruce Schneier tem um artigo bem escrito
sobre segredo, segurança e obscuridade [88]. Uma introdução à criptografia
moderna e seu uso em sistemas de computação é dada no livro de Ferguson,
Schneier e Konho [30]. A redundância da linguagem natural foi a princípio
estudada formalmente por Claude Shannon, em seu artigo pioneiro que de-
fine o conceito de entropia de teoria de informação [91]. Questões de usabi-
lidade para encriptação de e-mails são o assunto do estudo experimental de
Whitten e Tygar [107].

Você também pode gostar