◇ OpenCyber Academy
Engenharia · Capítulo 13 · Português

Capítulo 13 — Sistemas de dados

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 13 — Sistemas de dados

Mapa da aula

Aula 13 publicada. Mapa, exemplo, EX037.

flowchart TD
  N0["13.1 Bancos de dados de aplicações"]
  N1["13.2 Exclusão em bancos de dados"]
  N2["13.3 Esquema de gestão de casos"]
  N3["13.4 Integridade dos registros"]
  N4["13.5 Consultas como método"]
  N5["13.6 Armazenamento do tempo"]
  N6["13.7 Controle de acesso"]
  N7["Exportando dados"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX037"]

Desenho lógico

flowchart LR
  N0["13.1 Bancos de dados de aplicações"]
  N1["13.2 Exclusão em bancos de dados"]
  N2["13.3 Esquema de gestão de casos"]
  N3["13.4 Integridade dos registros"]
  N4["13.5 Consultas como método"]
  N5["13.6 Armazenamento do tempo"]
  N6["13.7 Controle de acesso"]
  N7["Exportando dados"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX037"]
[13.1 Bancos de dados de aplicações]
    |
    v
[13.2 Exclusão em bancos de dados]
    |
    v
[13.3 Esquema de gestão de casos]
    |
    v
[13.4 Integridade dos registros]
    |
    v
[13.5 Consultas como método]
    |
    v
[13.6 Armazenamento do tempo]
    |
    v
[13.7 Controle de acesso]
    |
    v
[Exportando dados]
    |
    v
[Exemplo resolvido] --> [Exercício EX037]

Objetivos de aprendizagem

Você vai (1) explicar como os bancos de dados armazenam e apagam registros; (2) recuperar evidências de bancos de dados de aplicações; (3) projetar um esquema de dados de casos; (4) proteger a integridade dos achados armazenados.

13.1 Bancos de dados de aplicações

Muitos aplicativos — navegadores, mensageiros, aplicativos de celular — armazenam dados em bancos SQLite. As tabelas guardam mensagens, visitas e contatos com carimbos de tempo. O SQLite armazena um banco de dados inteiro num único arquivo, com um log de escrita antecipada (WAL) ao lado, e as mudanças recentes podem estar apenas nesse log até que um checkpoint as copie para o arquivo principal. Copiar só o arquivo principal pode, portanto, deixar de fora as mensagens mais recentes. Priya preserva juntos o banco de dados, seu WAL e seu arquivo de memória compartilhada, e abre as cópias em modo somente leitura, porque simplesmente abrir um banco de dados ativo num visualizador pode disparar um checkpoint que altera a evidência.

13.2 Exclusão em bancos de dados

Apagar uma linha muitas vezes marca o espaço como livre em vez de apagá-lo. Até serem sobrescritos ou eliminados por um vacuum, fragmentos podem permanecer em páginas livres ou nos logs de escrita antecipada. Os peritos usam ferramentas validadas para vê-los e os relatam como recuperados, não como atuais. Uma página da lista de páginas livres pode ainda conter a maior parte de uma mensagem apagada, enquanto o registro que a ligava a uma conversa desapareceu. Os fragmentos recuperados, portanto, muitas vezes não têm contexto, como a qual conversa pertenciam ou quando foram enviados. Os relatórios de Priya separam os registros totalmente recuperados dos fragmentos parciais e dizem o que cada um pode e não pode estabelecer, para que um fragmento não seja apresentado com mais certeza do que tem.

13.3 Esquema de gestão de casos

Priya projeta tabelas para Northfield: casos, itens, aquisições (item, ferramenta, hash, perito, horário), achados (item, descrição, artefato de origem). As chaves estrangeiras garantem que cada achado esteja ligado a um item adquirido. Cada linha de aquisição armazena o algoritmo e o valor do hash, o nome e a versão da ferramenta, o perito e os horários de início e de fim. Uma linha de achado não pode ser inserida a menos que seu item tenha pelo menos uma aquisição, o que a chave estrangeira e uma restrição de verificação garantem em conjunto. Priya desenha o esquema e percorre com Hugo um caso sintético da entrada até o achado, verificando se existe cada ligação de que o relatório precisa.

13.4 Integridade dos registros

Os registros são apenas de acréscimo: as correções acrescentam uma nova linha que referencia a antiga. Nada é sobrescrito em silêncio. Se um horário de aquisição foi lançado errado, a linha de correção guarda o novo horário, o motivo, a pessoa que fez a correção e quando. As consultas normalmente mostram os valores mais recentes, mas o histórico completo está sempre disponível. As permissões do banco de dados impedem instruções de atualização e exclusão nessas tabelas para usuários comuns, e um administrador que mude essas permissões fica registrado num log de auditoria separado. Os relatórios citam a versão que estava vigente quando foram emitidos.

13.5 Consultas como método

As consultas usadas para produzir achados são salvas com o caso, para que outro perito possa executá-las de novo. Uma consulta salva registra o SQL exato, o banco de dados contra o qual foi executada e o horário da execução. Se um achado diz 'quarenta e duas mensagens entre as contas A e B em março', outro perito pode executar a mesma consulta contra a cópia preservada e deve obter quarenta e duas. Se obtiver um número diferente, a diferença aponta para uma cópia alterada, uma ferramenta diferente ou um erro na consulta original, e vale a pena saber qualquer um desses.

13.6 Armazenamento do tempo

Armazene os carimbos de tempo em UTC com o valor original e seu formato de origem, para que as conversões possam ser conferidas. Armazenar o valor original e seu formato, por exemplo 'Unix seconds, 1692576949' ou 'Windows FILETIME, 133370505499107328', permite que qualquer pessoa refaça a conversão. A coluna em UTC torna simples a ordenação e a comparação. Se um bug de conversão for encontrado mais tarde, os valores originais permitem recalcular todos os registros afetados, em vez de tentar reverter um erro a partir de números já convertidos. Uma coluna de fuso de origem registra se o original estava em UTC, em hora local com deslocamento conhecido ou em hora local sem fuso algum, de modo que os valores ambíguos permanecem visivelmente sinalizados e nunca são tratados em silêncio como UTC.

13.7 Controle de acesso

Os peritos veem apenas os seus casos; as ações dos administradores também são registradas em log. O acesso aos casos segue a designação: um perito vê os itens dos casos para os quais foi designado, e um revisor recebe acesso somente leitura durante a revisão. Os administradores podem mudar as designações, mas não podem ler o conteúdo dos casos sem uma solicitação registrada e aprovada. Um supervisor revisa o log de acesso todo mês, e um acesso sem explicação é investigado como qualquer outro incidente. Existe um acesso de emergência (break-glass), mas cada uso dispara um alerta para dois supervisores e exige uma justificativa escrita em até um dia. Os estudantes em estágio nunca recebem contas de produção; trabalham numa cópia sintética separada do sistema.

Exportando dados

Quando os achados saem do sistema de casos, as exportações incluem um manifesto: quais consultas foram executadas, quando, por quem e o hash de cada arquivo de saída. O destinatário pode confirmar que a exportação corresponde ao registro, e o laboratório pode responder a perguntas posteriores sobre exatamente o que foi divulgado. Priya testa a exportação num caso sintético e pede que um colega de turma verifique cada hash de forma independente antes de aceitar o recurso como concluído.

Exemplo resolvido

Um banco de dados sintético de mensageiro tem 120 mensagens ativas e fragmentos de mais 14 no log de escrita antecipada. O relatório de Priya lista as 14 separadamente como "recuperadas do WAL; podem não representar o estado final da conversa".

Caso sintético. O banco de dados é inventado.

Erros e limites

Os fragmentos recuperados podem estar incompletos ou fora de ordem; eles sustentam os registros ativos, não os substituem.

Exercícios

Síntese

Os bancos de dados guardam vestígios após a exclusão; os sistemas de casos devem manter os achados ligados, apenas de acréscimo e reprodutíveis.

Continue estudando — capítulo 13 de 50

← Capítulo 12 (rascunho) · Índice de capítulos do curso · Capítulo 14 (rascunho) →