Você está na página 1de 55

Introdução a

Segurança
Prof. Dr. Alex Mulattieri Suarez Orozco
Introdução

• Imagine o seguinte cenário:


• Uma brecha de segurança em seus dados
médicos:
• Se alguns dados são expostos publicamente, você
pode ficar indignado.

• Se alguns dados estão errados, isso pode trazer


problemas para os médicos avaliarem a sua condição,
o que pode gerar confusão ou ficar perigoso.

• Se quando você necessita de uma emergência e os


seus dados não estão disponíveis, você pode morrer.
Introdução

• Agora imagine outro cenário:


• Uma brecha de segurança na sua conta bancária:
• Se você não consegue acessar o seu saldo quando for
pagar alguma conta, isso pode ser um incômodo.

• Se o seu saldo é exposto publicamente, você pode


ficar indignado.

• Se o seu saldo desaparecer, isso é uma catástrofe.


Segurança da Informação

• É a prática de proteger a informação, através da


mitigação de riscos.

• Normalmente envolve a prevenção ou redução da


probabilidade de acesso, uso, divulgação,
interrupção, exclusão, adulteração, modificação,
inspeção ou registro ilegais de informações.

• Foco no risco!!!
Segurança Cibernética
• Disciplina baseada em computação envolvendo
tecnologia, pessoas, informações e processos para
permitir a garantia das operações.

• Envolve a criação, operação, análise e teste de


sistemas de computador seguros.

• É uma área de estudo interdisciplinar, incluindo


aspectos da lei, política, fatores humanos, ética e
gestão de risco no contexto de adversários.

• Foco no adversário!
Conceitos básicos:

• Dado: registros, fatos brutos coletados que não


possuem qualquer significado, contexto ou nexo
com a realidade;

• Informação: dados, processados ou não, que


podem ser utilizados para produção e para
transmissão de conhecimento, contidos em
qualquer meio, suporte ou formato;

• Ativo: qualquer coisa que tenha valor para a


organização;
Conceitos básicos:
• Ameaça: conjunto de fatores externos ou causa
potencial de um incidente indesejado, que pode
resultar em dano para um sistema ou organização;

• Ataque: ação que constitui uma tentativa deliberada


e não autorizada para acessar ou manipular
informações, ou tornar um sistema inacessível, não
integro, ou indisponível;

• Vulnerabilidade: conjunto de fatores internos ou


causa potencial de um incidente indesejado, que
podem resultar em risco para um sistema ou por uma
organização, os quais podem ser evitados por uma
ação interna de segurança da informação;
Conceitos básicos:
• Risco (conceito geral): possibilidade de ocorrência de um
evento que venha a ter impacto no cumprimento dos
objetivos, sendo mensurado em termos de impacto e de
probabilidade;

• Risco (de SI): potencial associado à exploração de uma ou


mais vulnerabilidades de um ativo de informação ou de
um conjunto de tais ativos, por parte de uma ou mais
ameaças, com impacto negativo no negócio da
organização;

• Contramedida: é uma ação, dispositivo, procedimento ou


técnica que reduz uma ameaça, vulnerabilidade ou
ataque, eliminando, evitando ou minimizando o dano que
pode causar ou descobrindo e relatando para que uma
ação corretiva possa ser tomada;
Definição de risco

Exposição
Valor do
Ativo da
vulnerabilidade
Probabilidade
de ameaça RISCO
Círculo do risco

Ativos
Protegem os Comprometidos por

Contramedidas Ameaças

Mitigados por Materializadas por

Riscos Ataques

Expostas aos Vulnerabilidades Exploram as


Tripé CIA

Availability

Security

Confidentiality Integrity
Tripé CIA
• Confidencialidade (Confidentiality) - propriedade
pela qual se assegura que a informação não esteja
disponível ou não seja revelada a pessoa, a sistema,
a órgão ou a entidade não autorizados nem
credenciados;

• Integridade (Integrity) - propriedade pela qual se


assegura que a informação não foi modificada ou
destruída de maneira não autorizada ou acidental;

• Disponibilidade (Availability) - propriedade pela qual


se assegura que a informação esteja acessível e
utilizável sob demanda por uma pessoa física ou
determinado sistema, órgão ou entidade
devidamente autorizados;
Objetivos secundários na segurança da
informação

Autenticidade

Confidencialidade
Irretratabilidade Integridade Privacidade
Disponibilidade

Autorização
Objetivos secundários na segurança da
informação
• Autenticidade – Assegura a veracidade da fonte
anunciada, e de que a informação não sofreu
nenhum tipo de modificação não autorizada;

• Privacidade – é o direito à reserva de


informações pessoais e da própria vida pessoal. É
a vontade de controlar a exposição e a
disponibilidade de informações acerca de si
mesmo;
Objetivos secundários na segurança da
informação
• Autorização - o direito ou permissão de acesso a
um recurso de um sistema;

• Irretratabilidade – Também conhecida como


irrevogabilidade ou não repúdio. Garante que o
autor de um ato não seja capaz de negar a sua
autoria.
Exemplo
• Voltando aos cenários:
• Uma brecha de segurança em seus dados médicos:
• Se alguns dados são expostos publicamente, você
pode ficar indignado.
• Violação de privacidade e confidencialidade

• Se alguns dados estão errados, isso pode trazer


problemas para os médicos avaliarem a sua condição,
o que pode gerar confusão ou ficar perigoso.
• Violação de integridade

• Se quando você necessita de uma emergência e os


seus dados não estão disponíveis, você pode morrer.
• Violação de disponibilidade
Exemplo

• Uma brecha de segurança na sua conta bancária:


• Se você não consegue acessar o seu saldo quando for
pagar alguma conta, isso pode ser um incômodo.
• ?

• Se o seu saldo é exposto publicamente, você pode


ficar indignado.
• ?

• Se o seu saldo desaparecer, isso é uma catástrofe.


• ?
Você está seguro??
• O conceito de segurança é algo relativo.

• Nada é 100% seguro.

• Eugene Spafford, um professor de segurança famoso, dizia:


• “O único sistema verdadeiramente seguro é aquele
que é desligado, fundido em um bloco de concreto e
selado em uma sala forrada de chumbo com guardas
armados - e mesmo assim, tenho minhas dúvidas”.

• Um sistema em tal estado pode ser seguro, mas não é


utilizável ou produtivo.

• Conforme você aumenta o nível de segurança, geralmente


diminui o nível de produtividade.
Você está seguro??
• Se utiliza o conceito de nível de segurança.

• Esse nível é relacionado ao valor do ativo.

• Você poderia construir:


• uma instalação de bilhões de dólares,
• cercada de arame farpado,
• patrulhada por guardas armados e cães de ataque
ferozes,
• com um cofre hermeticamente selado,
• Para proteger a receita de biscoito de chocolate de
sua mãe.
Você está seguro??
• Pensando em software:
• Você está seguro se os seus sistemas estão
devidamente corrigidos?
• Você está seguro se usar senhas fortes?
• Você está seguro se estiver totalmente desconectado
da Internet?

• Provavelmente, a resposta a todas essas


perguntas é não.

• Nenhuma atividade ou ação isolada o deixará


seguro em todas as situações.
Você está seguro??
• Mesmo que os sistemas tenham os patches
adequados, sempre haverá novos ataques aos quais
você está vulnerável.

• Quando você usa senhas fortes, um invasor explora


uma via diferente.

• Quando você está desconectado da Internet, um


invasor ainda pode acessar fisicamente ou roubar os
seus sistemas.

• Resumindo, é difícil definir quando você está


realmente seguro.
Você está seguro??
• Por outro lado, definir quando você está inseguro
é uma tarefa muito mais fácil.

• Embora você nunca chegue a um estado que


possa definitivamente chamar de “seguro”, você
pode tomar medidas na direção certa.

• Algo pode ser dito que é seguro o suficiente


quando o custo do nível de segurança aplicado é
maior que o valor do ativo a ser protegido, e
para isso normalmente são seguidas políticas de
segurança.
Você está seguro?

• Exemplo de pergunta mal formulada:


• A urna eletrônica brasileira é segura?

• Pergunta corretamente formulada:


• A urna eletrônica brasileira é segura o suficiente para
realizar o processo eleitoral?
Princípios para evitar as principais
vulnerabilidades existentes
• Segurança através de obscuridade:
• Acredita que as falhas são desconhecidas e os
atacantes não conseguem encontra-las;

• Confia em prevenir o acesso para proteger os dados


internos;

• Tem diminuído a relevância.


Princípios para evitar as principais
vulnerabilidades existentes
• Proteção do elo mais fraco:
• Os atacantes visam sistemas que são fáceis de invadir;

• Exemplo: Para acessar os dados criptografados que


trafegam por uma rede, o atacante não intercepta os
dados e tenta descriptografar, e sim ataca os
dispositivos finais para localizar uma falha que expõe
os dados descriptografados.

• A estratégia deste princípio é fortalecer as áreas em


risco, até que os níveis de risco sejam satisfatórios.
Princípios para evitar as principais
vulnerabilidades existentes
• Princípio do menor privilégio:
• Quanto maior o nível de privilégios no sistema, mais
vulnerável será a ataques;

• Exemplo: Muitos sites usam contas de admin do BD,


mesmo em partes onde não há interação com o BD;
Princípios para evitar as principais
vulnerabilidades existentes
• Princípio do privilégio mínimo:
• Estratégias deste princípio:
• Determinar e conceder os direitos de acesso
somente para aqueles que demandam
determinado privilégio para completar uma tarefa
específica;

• Evitar aplicações que são executadas sem


configurar previamente;

• Desenvolver aplicações que sejam usadas sem


privilégios administrativos.
Princípios para evitar as principais
vulnerabilidades existentes
• Segurança por padrão (Ou negação por padrão):
• O software deve ter habilitado o maior nível de
segurança por padrão.

• Se permitido, cabe ao usuário diminuir o nível de


segurança.
Princípios para evitar as principais
vulnerabilidades existentes
• Falhar com segurança:
• Não expor “segredos” da aplicação em mensagens de
erro padrão;

• As aplicações que expões informações confidenciais


durante uma falha auxiliam um atacante a elaborar
um ataque;

• Quando uma aplicação falhar, determine o que pode


ocorrer e garanta que isso não ameace o a aplicação;

• Proveja mensagens de erro lógicos e úteis aos usuários


e armazene os detalhes em arquivos de log.
Princípios para evitar as principais
vulnerabilidades existentes
• Defesa em profundidade:

Fonte: https://www.historiafacil.com.br/curiosidades/como-eram-os-castelos-medievais/
Princípios para evitar as principais
vulnerabilidades existentes
• Defesa em profundidade:
Princípios para evitar as principais
vulnerabilidades existentes
• Defesa em profundidade:
• Considere todos os níveis do software para prover
segurança;

• Implemente mecanismos de segurança, que incluam


as camadas de rede, kernel, física, e sistemas de
arquivos.
Princípios para evitar as principais
vulnerabilidades existentes
• Não confiar em entrada de usuário:
• Proteja a aplicação contra todas as entradas de
usuários;

• Considere TODAS as entradas de usuários como


maliciosas e aplique medidas de segurança para
restringi-las.
Princípios para evitar as principais
vulnerabilidades existentes
• Redução da superfície de ataque:
• Para reduzir a superfície de ataque é necessário reduzir o
número de pontos de entrada na aplicação;

• Remova ou desative as funcionalidades, protocolos, e


recursos que não estão em uso;

• Uma forma de controlar a superfície de ataque é através


do calculo de RASQ (Relative Attack Surface Quocient);

• Comparamos o RASQ de um sistema, software ou pacote


em dois momentos diferentes, e com isso conseguimos
determinar se estamos aumentando ou diminuindo a
superfície de ataque.
Princípios para evitar as principais
vulnerabilidades existentes
• Redução da superfície de ataque:
• Para cada ponto de ataque é atribuído a um valor com
base em sua gravidade relativa (viés de ataque);

• Os pontos de ataque relacionados são reunidos em


grupos chamados de vetor raiz, com a soma de todos
os pontos de ataque que representam o valor da
superfície de ataque.

• Um cálculo RASQ é composto de três componentes


principais - qual alvo um invasor gostaria de alcançar,
quais canais de comunicação e protocolos um invasor
usará para alcançar o destino e quais controles de
acesso estão associados ao alvo.
Princípios para evitar as principais
vulnerabilidades existentes
• Habilitar logs e auditoria:
• Defina como Auditoria e logging lida com os registros
de eventos relacionados à segurança;

• A auditoria habilita a identificação de ataques ou


invasores que estão ocorrendo;

• O logging visa identificar COMO um ataque está


ocorrendo.
Princípios para evitar as principais
vulnerabilidades existentes
• Mantenha a segurança simples:
• Se o projeto do software for complexo, será difícil de
entender, e erros são prováveis de ocorrer na
implementação, configuração e uso;

• Se a complexidade dos mecanismos de segurança


aumenta, também aumenta o esforço para alcançar
os níveis de garantias do software;

• Evite arquiteturas complexas e opte por uma


abordagem mais simples.
Princípios para evitar as principais
vulnerabilidades existentes
• Separação de deveres:
• É a chave para o controle de fraudes;

• As funcionalidades do sistema devem ser consideradas ao


atribuir privilégios;

• Os administradores do sistema também são os usuários de


parte do sistema, pois alguns privilégios de superusuário
são necessários para fazer o sistema funcionar, porém não
são necessários para usar todo o sistema;

• Exemplo: Admin pode definir as políticas de senhas, ligar


ou desligar o sistema, etc, mas não deve logar como uma
conta de superusuário.
Princípios para evitar as principais
vulnerabilidades existentes
• Correção de questões de segurança
corretamente:
• Quando uma questão de segurança for identificada,
corrija;

• Considere como um problema atual;

• Após repasse o processo de segurança, para garantir


que o novo código não introduziu novos erros;
Princípios para evitar as principais
vulnerabilidades existentes
• Aplicar segurança como um princípio:
• Pense em segurança desde a concepção do software;

• Considerar as questões de segurança auxilia a


entender as fraquezas do software e as
vulnerabilidades a partir das técnicas de ataque mais
comuns.
Princípios para evitar as principais
vulnerabilidades existentes
• Proteção dos dados sensíveis:
• Não coloque dados sensíveis no código e arquivos de
configuração!

• Criptografe os dados sensíveis no BD, nos arquivos de


configuração, no código e no tráfego de rede.
Princípios para evitar as principais
vulnerabilidades existentes
• Manipulação de exceções:
• Exceções são eventos que fogem do fluxo normal do
código;
• Manipulação de exceções ocorrem quando erros
interrompem o fluxo normal de execução do
software;
• Desenvolvedores tem dificuldade em projetar o
software para o tratamento de exceções;
• O uso correto de manipulação de exceções auxilia na
manipulação de erros;
• Faça a verificação constante de condições que geram
erros.
Princípios para evitar as principais
vulnerabilidades existentes
• Gerência de memória segura:
• Verifique as margens da memória, referente ao
tamanho de variáveis de entrada, arrays, e
parâmetros para evitar ataques de buffer overflow.

• Aplique padrões de código. Isso simplifica o código e


ajuda a implementar a segurança.
Princípios para evitar as principais
vulnerabilidades existentes
• Proteger os segredos da memória:
• Criptografe segredos para proteger o armazenamento
em memória, caso ocorra um dump da memória;

• Limpe os segredos armazenados em memória antes de


deletar.
Princípios para evitar as principais
vulnerabilidades existentes
• Granularidade do controle de acesso:
• Granularidade do controle de acesso é a quantidade
de dados que podem ser autorizados aos usuários.

• Aplicações que gerenciam dados sensíveis devem


garantir a proteção da privacidade, que é alcançado
com o controle de acesso aos dados;

• O controle de acesso previne que dados sensíveis


façam parte de fluxos de código não seguros
Princípios para evitar as principais
vulnerabilidades existentes
• Granularidade do controle de acesso:
• Sistemas com um baixo nível de granularidade podem
perder o controle na proteção de dados.

• Controle de acesso baseado em papéis (RBAC – Role


Based Access Control) é um modelo de controle com
múltiplos níveis de granularidade
• Também chamado de LnRBAC (n-leveled RBAC)
Princípios para evitar as principais
vulnerabilidades existentes
• Tolerância a falhas:
• Estratégia aplicada no projeto do software para
permitir que o software continue funcionando mesmo
na presença de falhas;
• Detecção de falhas:
• Utilizado para detectar falhas e produzir as respostas
apropriadas no comportamento do sistema;
• Exemplos: monitoramento do sistema, testes de
loopback, etc.
• Remoção de falhas:
• Focar em remover as falhas durante a fase de projeto
do sistema;
• Exemplos: detecção de erros, inspeção, testes, etc.
Princípios para evitar as principais
vulnerabilidades existentes
• Prevenção de falhas:
• Prevenir erros que contribuem para o sistema falhar
durante a fase de desenvolvimento;
• Exemplos:
• programação defensiva;
• minimização de erros durante a fase de projeto;
• minimização de códigos críticos em termos de
segurança;
• usar técnicas apropriadas para o ciclo de vida de
desenvolvimento de software.
Princípios para evitar as principais
vulnerabilidades existentes
• Baixo acoplamento:
• São códigos que operam independentemente de outros
códigos;
• Pode ser alcançado abstraindo os detalhes de
implementação para usar o código;
• Técnicas comuns:
• Mensagens independente de fabricante ou plataforma;
• Mensagens com alto nível de granularidade, auto-
descritas e auto-contidas;
• Interfaces bem definidas, versionáveis, extensíveis e
restritivas;
• Endereçar serviços e instâncias com strings legíveis por
humanos (URI’s)
• Uso de patrões de troca de mensagens assíncronas
sempre que possível.
Princípios para evitar as principais
vulnerabilidades existentes
• Alta coesão:
• Coesão é a medida para identificar a quantidade de
funcionalidades fortemente relacionadas no código fonte
de um único módulo;

• Uma classe é dita com alta coesão se os métodos nessa


classe realizam ações similares sobre vários aspectos;

• Um código altamente coeso aumenta a legibilidade e


reusabilidade do código, sem aumentar a complexidade;

• Procedimentos que são mais confiáveis, fáceis de ler e de


manter normalmente possuem baixo acoplamento e alta
coesão.
Princípios para evitar as principais
vulnerabilidades existentes
• Gerenciamento de mudanças e controle de
versão:
• A integridade de mudanças no sistema é controlada
por um processo chamado gerência de configuração;

• O controle de versão acontece quando um repositório


de código-fonte agrupa vários arquivos em uma única
versão;

• Use um sistema de versionamento de código;


Princípios para evitar as principais
vulnerabilidades existentes
• Gerenciamento de mudanças e controle de
versão:
• O gerenciamento de configuração permite que os
desenvolvedores façam check-in dos arquivos de
código-fonte à medida que cada um é criado;

• Quando modificações são necessárias, o


desenvolvedor deve solicitar um bloqueio de arquivo
no arquivo de código-fonte antes que as alterações
possam ser feitas executando um check-out, seguido
por outro check-in quando concluído.
Princípios para evitar as principais
vulnerabilidades existentes
• Gerenciamento de mudanças e controle de
versão:
• Alguns sistemas permitem que o desenvolvedor
execute um check-out reservado, na qual o sistema
sinaliza o arquivo como ‘trabalhado’, mas permite
que outros desenvolvedores ‘trabalhem’ no mesmo
arquivo simultaneamente;

• Quando os arquivos reservados são devolvidos, uma


mesclagem é realizada nas alterações feitas por
vários desenvolvedores (merge).
Princípios para evitar as principais
vulnerabilidades existentes
• Gerenciamento de mudanças e controle de versão:
• Ao manter o controle de cada alteração em todos os
arquivos, o sistema fornece um histórico completo de
quem fez qual alteração e quando.

• Sempre que um bug ou alteração maliciosa é detectado,


podemos voltar no tempo e descobrir quem foi o culpado.

• Esse recurso é chamado de rastreamento de mudanças


(change tracking).

• A antecipação de requisitos de mudança pode limitar os


efeitos negativos da mudança
Referências
• Portaria 93/2019. Gabinete de Segurança
Institucional. Glossário de Segurança da
Informação. Disponível em
http://dadosabertos.presidencia.gov.br/dataset/
a762e973-ef19-4cdb-8392-
2983aee7669a/resource/f4a3bba8-8544-443d-
a070-b4762ee8abed/download/glossario-de-
seguranca-da-informacao-txt.txt.
• MARTIN, Phil. Essential CSSLP Exam Guide, 2ª
ed., [s.l.]: Independently published, 2019, 377p.
• ANDRESS, Jason. Foundations of Information
Security, San Francisco : No Starch Press, 2019,
248p.

Você também pode gostar