OpenCyber Academy
Tecnólogo · Capítulo 12 · Português
Código do curso: OCA-073Capítulo 12: OCA-073-C012

Capítulo 12 — Privacidade e proteção de dados: fluxos 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.

Mapa da aula

Aula 12 publicada. Mapa, exemplo, EX034.

flowchart TD
  N0["12.1 SDKs"]
  N1["12.2 Resultados"]
  N2["12.3 Recomendações"]
  N3["12.4 Acompanhamento"]
  N4["Laboratório — Fluxos de dados dos SDKs e sua cobertu"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX034"]

Desenho lógico

flowchart LR
  N0["12.1 SDKs"]
  N1["12.2 Resultados"]
  N2["12.3 Recomendações"]
  N3["12.4 Acompanhamento"]
  N4["Laboratório — Fluxos de dados dos SDKs e sua cobertu"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX034"]
[12.1 SDKs]
    |
    v
[12.2 Resultados]
    |
    v
[12.3 Recomendações]
    |
    v
[12.4 Acompanhamento]
    |
    v
[Laboratório — Fluxos de dados dos SDKs e sua cobertu]
    |
    v
[Exemplo resolvido] --> [Exercício EX034]

Objetivos de aprendizagem

Você vai (1) inspecionar os SDKs embutidos num aplicativo; (2) conferir a cobertura pelo aviso e pelos contratos; (3) recomendar mudanças.

12.1 SDKs

O aplicativo da Quayside embute cinco kits de desenvolvimento de software (SDKs). Um SDK é uma biblioteca fornecida por outra empresa e incluída no aplicativo para oferecer uma funcionalidade, como relatórios de falhas ou chat, e pode coletar dados sem que a equipe do aplicativo perceba. Aisha gera uma versão de teste, entra com alunos sintéticos e registra o tráfego de rede enquanto usa treinos, aulas e chat. Depois lista cada SDK, os campos que ele recebe e se o aviso de privacidade e os contratos o cobrem, para comparar o que o aplicativo diz com o que de fato envia.

12.2 Resultados

O laboratório mostra que os SDKs de relatório de falhas, análise de uso e chat de atendimento estão cobertos pelo aviso e pelos contratos. A rede de anúncios recebe o identificador de publicidade, a zona cardíaca e a localização, e não está no aviso nem tem contrato. O login social não tem contrato. A zona cardíaca deriva de dados de saúde, e enviá-la com identificador de publicidade e localização permite montar um perfil do condicionamento e dos deslocamentos do aluno; é o achado mais grave. Os desenvolvedores contam que o SDK veio com uma funcionalidade de promoções dois anos antes e ninguém revisou sua coleta.

12.3 Recomendações

Aisha recomenda remover o SDK da rede de anúncios, assinar um contrato com o provedor de login social e atualizar o aviso de privacidade. Recomenda também uma regra: nenhum SDK entra sem revisão de privacidade. Cada recomendação tem responsável e data: a equipe do aplicativo remove o SDK, compras cuida do contrato do login social e o encarregado atualiza o aviso. Ela pede ainda à equipe do aplicativo que mantenha no repositório uma lista de todos os SDKs, com versão e finalidade, para que as revisões futuras partam de um registro exato, e não da memória de alguém.

12.4 Acompanhamento

A equipe do aplicativo remove o SDK de anúncios na versão seguinte. Aisha testa de novo, com as mesmas contas sintéticas e os mesmos passos, para que os resultados possam ser comparados diretamente, e confirma que nenhum dado de frequência cardíaca sai para anunciantes. O tráfego para a rede de anúncios desapareceu, e o contrato do login social é assinado em um mês. Aisha acrescenta à lista de verificação de cada versão uma pergunta simples aos desenvolvedores: esta versão acrescenta ou atualiza alguma biblioteca de terceiros que envia dados para fora do aparelho? O Sr. Reilly observa que a revisão deve se repetir a cada versão.

Laboratório — Fluxos de dados dos SDKs e sua cobertura

# Fitness app: what does each embedded SDK receive, and is it covered by the privacy notice and a contract?
sdks = [("crash reporter", ["device model", "app version"], True, True),
        ("analytics", ["member id", "screen views", "workout type"], True, True),
        ("ad network", ["advertising id", "heart rate zone", "location"], False, False),
        ("chat support", ["member id", "name", "messages"], True, True),
        ("social login", ["email", "name"], True, False)]
for name, data, notice, contract in sdks:
    issues = ([] if notice else ["not in notice"]) + ([] if contract else ["no contract"])
    health = any(d in ("heart rate zone",) for d in data)
    print(f"{name:15s} {', '.join(data):40s} {'OK' if not issues else '; '.join(issues)}{' [HEALTH DATA]' if health else ''}")

Execute com python3 lab_flows.py. Saída verificada:

crash reporter  device model, app version                OK
analytics       member id, screen views, workout type    OK
ad network      advertising id, heart rate zone, location not in notice; no contract [HEALTH DATA]
chat support    member id, name, messages                OK
social login    email, name                              no contract

Exemplo resolvido

Aisha descobre que a rede de anúncios recebe a zona cardíaca e a localização sem aviso nem contrato e que o login social não tem contrato, e o SDK de anúncios é removido.

Caso sintético. Os SDKs são sintéticos.

Erros e limites

A inspeção de rede pode deixar escapar dados enviados mais tarde ou em lotes.

Exercícios

Respostas comentadas

EX034. A rede de anúncios.

EX035. Não tem contrato.

EX036. Todo SDK novo exige revisão de privacidade.