Fundamentos de segurança
O que é uma vulnerabilidade? Fraqueza, ameaça, risco e exploit
Separe vulnerabilidade, ameaça, risco e exploit, veja como CWE e CVE nomeiam falhas e entenda por que falhas inalcançáveis ainda importam.
A tríade CIA explicada: confidencialidade, integridade e disponibilidade, com exemplos, verificações de hash e assinatura e dez incidentes.
A tríade CIA é o modelo que a área de segurança usa para dizer o que um controle protege. Ela nomeia três propriedades da informação e dos sistemas: confidencialidade, integridade e disponibilidade. A maioria dos controles de segurança existe para manter uma ou mais dessas propriedades verdadeiras. Se você consegue dizer qual propriedade um evento quebrou, já sabe que tipo de dano ele causou e que tipo de controle deveria tê-lo impedido.
Este artigo continua de onde O que é cibersegurança? termina. Esse texto disse que segurança é proteger informação e sistemas contra danos. Este aqui reduz a ideia a três objetivos e mostra como separar eventos reais por eles.
Cada propriedade responde a uma pergunta diferente:
O NIST usa esses três termos em várias publicações de segurança. A FIPS 199 monta sobre eles as categorias de informação do governo federal americano: cada categoria pergunta quanto dano a perda de cada propriedade causaria. As definições formais são mais longas e mais cuidadosas do que o resumo acima. As fontes no fim deste artigo levam a elas, e vale lê-las depois que o conceito básico estiver claro.
As letras são uma ajuda para a memória, não uma ordem de prioridade. O C não vem primeiro porque é o mais importante. Um sistema de agendamento de hospital pode tratar a disponibilidade como preocupação principal, enquanto um livro-razão de pagamentos pode dar mais peso à integridade. A prioridade certa depende do sistema e do que acontece quando ele falha.
"Manter seguro" esconde os trade-offs. Um sistema pode guardar bem seus segredos e ser inútil porque ninguém consegue acessá-lo. Pode estar no ar o tempo todo e servir dados errados. Pode ser exato e sempre disponível e, mesmo assim, vazar registros para as pessoas erradas. Nomear três propriedades permite fazer uma pergunta precisa sobre cada uma e escolher controles que respondam a ela.
Outros referenciais acrescentam termos, como autenticidade, responsabilização e não repúdio. Algumas definições colocam autenticidade e não repúdio dentro da integridade. A FIPS 199 faz isso. Qualquer que seja a definição, o modelo de três propriedades é o ponto de partida comum, então aprenda ele primeiro.
Imagine que uma empresa exporta a lista de clientes para uma planilha e salva o arquivo em uma pasta compartilhada. Todo mundo na empresa consegue abrir essa pasta. Um prestador de serviço que deveria ver apenas um projeto baixa o arquivo inteiro. Nada foi alterado. O serviço continuou no ar. A informação, porém, saiu do lugar onde deveria ficar, e a confidencialidade foi perdida.
Confidencialidade trata de quem pode ler os dados. Ela cobre dados em repouso (em um disco, em um banco), dados em trânsito (circulando pela rede) e dados em uso (abertos na memória ou na tela).
Os comandos abaixo rodam em um arquivo de rascunho. Eles mostram o que a criptografia faz na prática. É uma ilustração, não um laboratório avaliado, e a senha usada é só para esta demonstração. Nunca coloque segredos reais na linha de comando nem no histórico do shell.
printf 'Patient: J. Example, diagnosis: placeholder\n' > record.txt
export DEMO_PASS='lab-only-passphrase'
openssl enc -aes-256-cbc -pbkdf2 -salt -pass env:DEMO_PASS -in record.txt -out record.enc
od -A x -t x1z record.enc | head -3
openssl enc -d -aes-256-cbc -pbkdf2 -pass env:DEMO_PASS -in record.enc
openssl enc -d -aes-256-cbc -pbkdf2 -pass pass:wrong -in record.enc -out /dev/nullNa máquina onde isto foi executado (Windows 11, Git Bash, OpenSSL 3.2.4), a saída foi:
000000 53 61 6c 74 65 64 5f 5f e4 81 09 19 9d 68 fe de >Salted__.....h..<
000010 54 5b 6c 39 12 1a 38 01 b3 03 ac b8 66 be 3b 4b >T[l9..8.....f.;K<
000020 68 ae 58 39 8f 74 f1 59 23 27 09 fe b7 cf cc 58 >h.X9.t.Y#'.....X<
Patient: J. Example, diagnosis: placeholder
bad decrypt
D4C00000:error:1C800064:Provider routines:ossl_cipher_unpadblock:bad decrypt:../openssl-3.2.4/providers/implementations/ciphers/ciphercommon_block.c:107:As três primeiras linhas são o começo do texto cifrado. Os bytes depois do cabeçalho Salted__ parecem aleatórios e mudam a cada execução, porque o OpenSSL escolhe um novo salt toda vez. Então o seu hexadecimal será diferente. A senha certa devolve a linha original. A errada falha com bad decrypt, e esse erro é tudo o que a chave errada produz. O texto do erro não revela o conteúdo. O código de oito caracteres no início da mensagem também varia entre execuções.
Alguém baixa um instalador de um site espelho. Se o arquivo foi alterado, ele pode rodar perfeitamente. A pergunta não é se ele roda. A pergunta é se os bytes batem com o que o fornecedor publicou.
Integridade também cobre dados de um banco editados sem autorização, um log apagado depois de uma invasão e um arquivo de configuração alterado por um script que ninguém aprovou. Em todos esses casos, o dano é que você não pode mais confiar no que o dado diz.
Uma função hash lê um arquivo e produz uma impressão digital de tamanho fixo. Mude um byte e a impressão muda por completo. Comparar impressões permite verificar que duas cópias são idênticas sem ler os dois arquivos lado a lado.
Os comandos abaixo criam um arquivo, registram o hash SHA-256 e alteram o conteúdo:
printf 'Transfer: 10.00 USD to account A\n' > transfer.txt
sha256sum transfer.txt
printf 'Transfer: 1000.00 USD to account A\n' > transfer.txt
sha256sum transfer.txtSaída observada:
f5ff0bd125880721c12f4eeecd95eb1a03fbc98f61dbd4ea2235cd7c902aa936 *transfer.txt
486ca9f3224c8003ff043ae09f3d1bc6cbe5008859a81c08e95da91945812b04 *transfer.txtO segundo hash não tem nada em comum com o primeiro, mesmo que a mudança tenha sido apenas um zero a mais. A verificação fica útil quando você guarda o hash esperado e compara com ele. Salve o hash original em release.sha256 e depois verifique:
sha256sum -c release.sha256Para o arquivo original, a saída foi release.txt: OK. Depois que o arquivo foi adulterado, apareceu isto:
release.txt: FAILED
sha256sum: WARNING: 1 computed checksum did NOT matchO comando termina com status 1, então um script pode parar nele.
Hash tem um limite. Se o atacante troca o arquivo e também troca o hash publicado na mesma página, a comparação passa e não prova nada. O hash só diz que o arquivo bate com o hash que você recebeu, então você precisa de uma cópia confiável desse hash.
A assinatura digital resolve esse problema. O publicador assina o arquivo com uma chave privada. Quem tem a chave pública correspondente consegue verificar a assinatura. Um atacante sem a chave privada não consegue produzir uma assinatura válida para um arquivo alterado.
Os próximos comandos usam uma chave RSA descartável, criada em uma pasta de rascunho. Não reutilize essa chave para nada real.
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out priv.pem
openssl pkey -in priv.pem -pubout -out pub.pem
openssl dgst -sha256 -sign priv.pem -out release.sig release.txt
openssl dgst -sha256 -verify pub.pem -signature release.sig release.txtNo arquivo original, a verificação imprimiu Verified OK. Depois da alteração, a mesma verificação imprimiu Verification failure, seguida de linhas de erro do OpenSSL com caminhos de código-fonte. Essas linhas foram omitidas aqui.
Uma assinatura válida mostra que o arquivo foi assinado por quem tem a chave privada. Ela não mostra que essa chave pertence ao fornecedor que você esperava. Esse vínculo vem de outra etapa: um certificado, uma distribuição confiável de chaves ou uma impressão digital conferida por outro canal.
Uma clínica roda o sistema de agendamento em um único servidor. Um disco falha numa segunda-feira de manhã. Os pacientes não conseguem marcar consultas por um dia. Nada foi roubado e nada foi alterado. O serviço simplesmente não estava lá quando as pessoas precisaram.
Ataques causam o mesmo resultado. Um ataque de negação de serviço distribuída (DDoS) inunda um serviço com tráfego até que os usuários legítimos não consigam passar. Um ransomware pode bloquear arquivos para que a equipe não consiga trabalhar, mesmo quando nenhum dado sai da organização. A disponibilidade também cobre o caminho das pessoas: uma conta bloqueada depois de muitas tentativas de login é uma pequena perda de disponibilidade.
Backup tem um porém. Ele pode proteger a integridade quando permite restaurar uma cópia limpa depois de uma invasão, mas só se o backup foi feito antes da invasão e ficou fora do alcance do atacante. Backup também é dado confidencial, então precisa de criptografia e controle de acesso.
A maioria dos controles toca mais de uma propriedade. A pergunta útil é de qual propriedade você depende para um determinado risco.
| Controle | Propriedade principal | Também ajuda em |
|---|---|---|
| Criptografia | Confidencialidade | Integridade dos dados em trânsito, quando o protocolo a autentica |
| Privilégio mínimo | Confidencialidade | Integridade, limitando quem pode alterar dados |
| Autenticação multifator | Confidencialidade | Integridade das contas |
| Hashes | Integridade | Confiança em downloads, detectando cópias corrompidas ou alteradas |
| Assinaturas digitais | Integridade | Autenticidade do publicador |
| Logs de auditoria | Integridade | Responsabilização, que apoia a resposta a incidentes |
| Backups | Disponibilidade | Integridade, quando é possível restaurar uma cópia limpa |
| Redundância e failover | Disponibilidade | Pouco além da disponibilidade |
| Limitação de taxa e proteção contra DDoS | Disponibilidade | Confidencialidade, freando tentativas de força bruta |
Leia cada descrição e escreva uma letra: C (confidencialidade), I (integridade) ou A (disponibilidade). Se duas propriedades se encaixarem, escolha a que a descrição mais enfatiza e anote a outra entre colchetes. Você não precisa de computador. Tente todos os dez antes de ler o gabarito.
Pontuação: acertar oito ou mais significa que você já consegue classificar incidentes. Se errou vários do grupo de integridade, releia a seção de hashes. Alguns incidentes se encaixam em duas propriedades, então aceite uma resposta fundamentada que escolha outra propriedade principal, desde que você explique o motivo.
Leia por completo as seções introdutórias do NIST SP 800-12 Rev. 1 e as definições de impacto da FIPS 199. Eles usam as palavras que você acabou de aprender, e isso facilita a leitura dos documentos formais.
Depois, leia O que é uma vulnerabilidade? para ver como uma fraqueza se transforma na perda de uma dessas três propriedades. Para entender a mecânica por trás de criptografia e hashes, leia O que é criptografia?.
Para praticar sem tocar em sistemas de terceiros, pegue alguns arquivos seus, registre os hashes, altere um caractere e rode a verificação de novo. Depois criptografe uma cópia com uma senha descartável, descriptografe e teste uma senha errada. Apague os arquivos de rascunho quando terminar. O objetivo é ver as propriedades funcionando, não montar um sistema seguro com comandos de shell.
Por fim, leia um relatório público de incidente e classifique o evento principal com o mesmo método. Pergunte qual propriedade ele atingiu primeiro e, depois, qual controle teria mudado o resultado.
Fundamentos de segurança
Separe vulnerabilidade, ameaça, risco e exploit, veja como CWE e CVE nomeiam falhas e entenda por que falhas inalcançáveis ainda importam.
Fundamentos de segurança
Aprenda diagramas de fluxo de dados, fronteiras de confiança e as seis categorias STRIDE, e modele um Juice Shop local no Threat Dragon.
Fundamentos de segurança
O que a cibersegurança cobre, a tríade CIA, formas comuns de falha e um primeiro exercício seguro com hashes na sua própria máquina.