Este relatório apresenta uma análise de segurança do software da urna eletrônica brasileira baseada na experiência dos autores enquanto participantes da 2a edição dos Testes Públicos de Segurança do Sistema Eletrônico de Votação organizados pelo Tribunal Superior Eleitoral (TSE). Durante o evento, foram detectadas vulnerabilidades no software que permitiram a recuperação em ordem dos votos computados. Apresentamos cenários onde as vulnerabilidades permitem a possibilidade de fraude eleitoral e sugestões para se restaurar a segurança dos mecanismos afetados. Também são apontadas outras fragilidades no software e nas práticas utilizadas para confecção do mesmo. Em particular, este relatório versa sobre os principais problemas de projeto e/ou implementação de mecanismos de segurança detectados no software da urna eletrônica:
- Proteção inadequada do sigilo do voto: os votos são armazenados fora de ordem, mas é trivial recuperá-los em ordem a partir unicamente dos produtos públicos de uma eleição e conhecimento superficial do código-fonte, também de acesso público aos partidos políticos;
- Cifração inadequada: a mesma chave criptográfica é utilizada para cifrar as mídias de todas as urnas eletrônicas. Utilizando a analogia clássica de um cadeado como abstração de técnica criptográfica, isto é equivalente a proteger meio milhão de cadeados com uma mesma chave, visto ser este o número aproximado de equipamentos em opera-ção. Além disso, a chave que decifra todas as mídias é armazenada às cLARAs na porção decifrada das mídias. Utilizando a mesma analogia, isto equivale a esconder a chave do cadeado embaixo do tapete e confiar no segredo dessa localização como fonte de segurança;
- Utilização de algoritmos obsoletos: a função de resumo criptográfico utilizada não mais oferece a segurança esperada para sua aplicação em verificação de integridade. Esta aplicação específica da função escolhida não é mais recomendada há pelo menos 6 anos;
- Formulação equivocada do modelo de atacante: há ênfase demasiada no projeto de mecanismos resistentes apenas a atacantes externos, quando agentes internos representam risco muito maior;
- Processo de desenvolvimento defeituoso: práticas inseguras permitem a inserção acidental ou maliciosa de vulnerabilidades de software, cLARAmente atestando que o processo de desenvolvimento adotado pelo TSE é imaturo do ponto de vista de segurança;
- Verificação insuficiente de integridade: o software da urna eletrônica verifica sua própria integridade durante o processo de inicialização, mas toda a informação necessária para subverter esse mecanismo encontra-se armazenada nas próprias urnas eletrônicas, com dificuldades distintas para um ataque, dependendo da presença do módulo de segurança em hardware. Em urnas sem este recurso, o problema de verificação é reduzido a si próprio, sem fonte externa de confiança. Nesse caso, “software auto-verificável” por assinatura digital equivale a confiar a autenticidade de uma assinatura de punho em um documento apenas ao testemunho do próprio ``autor’’, que, assim, pode se passar por quem quiser. É importante ressaltar ainda que uma assinatura autêntica apenas atesta o processamento do conteúdo assinado em algum ponto no tempo e espaço no qual também estava presente a chave de assinatura. Mesmo que os mecanismos de verificação de integridade não sejam contornados e funcionem a contento, ainda não há qualquer garantia de que o conteúdo do documento é de fato o desejado, visto que no caso o mesmo (software) tem extensão da ordem de milhões de linhas (de código). Caso o software possua vulnerabilidades (como as descritas neste documento), a verificação de integridade (quando não subvertida) tem o efeito colateral de garantir que as mesmas vulnerabilidades estarão presentes em todas as urnas. A versão do código observada pelos autores apresentava ainda como desativada a verificação de integridade de parte do software contido na urna, evidenciando as limitações intrínsecas da técnica.
Mais detalhes a respeito dos problemas acima são fornecidos no decorrer deste relatório, mas pode-se observar de antemão que vários dos recursos implementados no software da urna eletrônica não representam mecanismos de segurança, mas apenas de ofuscação, não resistindo a colaboradores internos ou atacantes persistentes. Como vários dos problemas encontrados resultam de falhas arquiteturais ou premissas inadequadas de projeto, é improvável que a intervenção pontual em algumas dessas questões resolva as causas fundamentais para a sua ocorrência. É imprescindível que se execute revisão crítica completa dos processos de desenvolvimento de software para que se estabeleçam boas práticas que tenham condições de evitar que novas vulnerabilidades sejam inseridas acidentalmente ou intencionalmente por agentes maliciosos internos ou externos. Como o modelo de urna eletrônica adotado no Brasil depende exclusivamente da integridade do software para se atingir integridade dos resultados, os problemas discutidos aqui adquirem uma caráter crítico e exigem urgência na introdução de mecanismos que permitam a auditabilidade de resultados independente do software. Apenas com uma revisão de práticas e instalação de metodologia científica para avaliação contínua do sistema, é possível que o software da urna eletrônica satisfaça requisitos mínimos e plausíveis de segurança e transparência.