O modelo de assinatura de APK do Android define a expetativa que a chave de assinatura será a mesma durante toda a vida útil da app. Isto pode ser visto na duração recomendada de uma chave de assinatura do Android: 20 anos ou mais. Além disso, é difícil migrar uma app para uma nova chave. Como a chave de assinatura é essencial para impedir que os APKs personifiquem outra, as chaves de assinatura do Android devem ser mantidas em segurança por toda a vida útil da app.
As chaves de assinatura de repositório do F-Droid seguem um modelo muito similar: a chave de assinatura é a maneira essencial de identificar com segurança um repositório F-Droid. Portanto, as mesmas considerações se aplicam às chaves de assinatura do F-Droid e às chaves de assinatura do APK. Isso também fornece alguns benefícios realmente úteis. Como a integridade do ficheiro de índice do repositório e os APKs são garantidos pela assinatura do repositório, os ficheiros podem ser entregues por qualquer método que seja mais conveniente e a integridade deles será verificada automaticamente pela app cliente do F-Droid, o processo de implantação do f-droid.org e o Repomaker.
Isso significa que a carga de segurança é transferida do servidor da web público para um sistema de assinatura privado. Apenas manter esse sistema longe dos olhos do público ajuda muito a melhorar a segurança. Há uma série de medidas adicionais que podem ser tomadas para melhorar ainda mais a segurança do processo de assinatura. Aqui estão algumas abordagens, a começar com as mais fáceis e com menos segurança, e a ir para configurações mais seguras que exigem mais trabalho para configurar e executar. A assinatura não é um processo intensivo de recursos, portanto, qualquer sistema funcionará, até mesmo um portátil básico de 10 anos de idade. Recomendamos usar uma instalação mínima do Debian e recompilar a sistema a partir do zero.
Servidor de Assinatura Automatizada com HSM
Para uma configuração de assinatura totalmente automatizada, o sistema que executa a assinatura precisa estar online e em execução. O ideal é que esta máquina não tenha acesso remoto, pelo menos o acesso remoto deve ser cuidadosamente controlado e monitorado. Um portátil facilita o trabalho mesmo quando o acesso remoto está desativado, pois fornece um teclado e um monitor integrado. Se o acesso remoto for necessário, qualquer computador básico funcionará bem. O uso de um Módulo de Segurança de Hardware (HSM) para armazenar as chaves impedem que elas sejam roubadas se o servidor estiver invadido. Um invasor só pode executar o processo de assinatura nesse servidor.
Idealmente, este sistema só seria acessível via Tor. Isso oculta a localização física do servidor e oculta o tráfego da rede. Isso torna os atacantes muito mais difíceis de encontrar o sistema real para atacar.
Para o HSM, recomendamos o uso de hardware Nitrokey, pois eles são software/hardware livre e oferecem uma ampla variedade de opções. Use um sistema separado para pôr as chaves de assinatura no HSM. Um bom HSM manterá uma trilha de auditoria de quantas assinaturas foram feitas, de modo que as informações possam ser usadas para criar um processo de auditoria automática para gerar alarmes se muitas assinaturas tiverem sido feitas. Isso pode significar que esse servidor foi violado e usado para assinar pacotes não autorizados.
Outra possibilidade é usar uma configuração como o Sigul do Fedora que envolve três máquinas.
Laptop básico dedicado a assinatura
Comece com um portátil cujo sistema possa ser formatado e preparado a partir do zero. O mais importante é que apenas o software essencial está instalado nele e nada mais. Não inclua nenhum navegador, por exemplo, pois esse é o meio mais comum de ataque. Nenhuma configuração de acesso remoto (por exemplo, SSH ou VNC) deve ser instalada ou configurada. Para assinar aplicações e repositórios, alguém tiraria esse portátil, o conectaria à rede e executaria o processo de assinatura. Os resultados assinados podem então ser publicados através da conexão de rede. Quando a assinatura estiver concluída, o sistema pode ser desligado, desconectado e mantido num local seguro.
Isso pode ser feito de forma automática com alguns scripts personalizados. A pessoa que está a executar o processo só precisa retirar o sistema, conectá-lo, ligá-lo, aguardar até que o processo seja concluído e, depois, recolocá-lo novamente.
Laptop de assinatura completamente desconectada com pendrives USB
Esse processo é baseado no mesmo portátil básico e despojado do exemplo anterior. Mas desta vez, a rede deve ser totalmente desativada antes do processo de instalação. Por exemplo, é fácil em muitos portáteis remover a placa WiFi fisicamente. Portanto, faz sentido usar um portátil que não inclua um conector Ethernet, que geralmente não é possível remover. Caso contrário, inserir em lista negra todos os módulos do kernel relacionados a conectividade pode ser suficiente. Como este sistema está totalmente desconectado, o trabalho adicional de usar um HSM não é tão importante, mas não faz mal incluí-lo.
Descarregue a imagem completa “CD” ou “DVD” do Debian para executar a instalação. Certifique-se de verificar as assinaturas GPG e os hashes SHA-256. Para atualizar a máquina off-line, é necessária uma configuração “apt offline”.
Para ter cuidado extra, todo o software usado deve ser verificado. Os Chromebooks são laptops agradáveis e baratos que executam o Linux nativamente. Eles também usam o Coreboot para a BIOS.
- Compre um computador na prateleira com dinheiro, evite enviá-lo, especialmente através das fronteiras
- Compre um Chromebook que tenha suporte a Debian com hardware removível de WiFi, e que não precise de nenhuma blob binário
- Instale um binário de Coreboot compilado de forma reproduzível
- Instale de uma imagem Debian compilada de forma reproduzível, a remover completamente o Chrome OS
O Ambiente Físico
A última coisa a considerar é o local físico onde as assinaturas acontecem e onde os equipamentos essenciais são armazenados. O ambiente de assinatura deve estar fisicamente seguro. Caso contrário, não há como impedir que laptops ou HSMs sejam perdidos ou usados para assinar conteúdo impróprio. Para as máquinas desconectadas, mantê-las numa sala trancada é um bom começo. Para uma máquina desconectada, forçar todo o tráfego de rede e acesso remoto por meio do Tor oculta a localização física da máquina dos observadores da rede.
Para chaves de assinatura de alto risco, é importante usar várias camadas de defesa:
- Acesso físico restrito a HSMs ou cartões inteligentes
- Câmaras de segurança
- Vigilantes no local
- Registro de visitantes
- Um servidor resistente a ferramentas seguro para servidores de assinatura de código online
O servidor de assinatura deve estar fisicamente separado do restante da infraestrutura. E os logs, a máquina e a rede devem ser periodicamente auditados.
Decisões difíceis
Idealmente, todas essas práticas seriam postas em prática, mas cada uma dessas medidas de segurança tem um custo de dificuldade, despesa e complexidade. Elas também podem atrasar o processo de atualização comum. Portanto, há riscos de implementar políticas de segurança rígidas demais, como os riscos de não implementar o suficiente.
