Compilando um servidor assinatura

The Android APK signing model sets the expectation that the signing key will be the same for the entire lifetime of the app. That can be seen in the recommended lifetime of an Android signing key: 20+ years. On top of that, it is difficult to migrate an app to a new key. Since the signing key is an essential part to preventing APKs from impersonating another, Android signing keys must be kept safe for the entire life of the 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 arquivo de índice do repositório e os APKs são garantidos pela assinatura do repositório, os arquivos podem ser entregues por qualquer método que seja mais conveniente, e sua integridade será verificada automaticamente pelo aplicativo 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 uma máquina de assinatura privada. Apenas manter essa máquina 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, começando com as mais fáceis e com menos segurança, e indo para configurações mais seguras que exigem mais trabalho para configurar e executar. A assinatura não é um processo intensivo de recursos, portanto, qualquer máquina funcionará, até mesmo um laptop básico de 10 anos de idade. Recomendamos usar uma instalação mínima do Debian e recompilar a máquina a partir do zero.

Automated Signing Server with HSM

Para uma configuração de assinatura totalmente automatizada, a máquina 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 laptop facilita o trabalho mesmo quando o acesso remoto está desabilitado, pois fornece um teclado e um monitor integrados. 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 impede que elas sejam roubadas se o servidor estiver invadido. Um invasor só pode executar o processo de assinatura nesse servidor.

Idealmente, esta máquina 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 a máquina 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 uma máquina separada para colocar 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.

Another possibility is to use a setup like Fedora’s Sigul that involves three machines.

Laptop básico dedicado a assinatura

Comece com um laptop 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 aplicativos e repositórios, alguém tiraria esse laptop, 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, a máquina pode ser desligada, desconectada e mantida em um local seguro.

Isso pode ser feito de forma automática com alguns scripts personalizados. A pessoa que está executando o processo só precisa retirar a máquina, conectá-la, ligá-la, aguardar até que o processo seja concluído e, depois, recolocá-la novamente.

Laptop de assinatura completamente desconectada com pendrives USB

Esse processo é baseado no mesmo laptop 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 laptops remover fisicamente o placa WiFi. Portanto, faz sentido usar um laptop 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 esta máquina está totalmente desconectada, o trabalho extra de usar um HSM não é tão importante, mas não faz mal incluí-lo.

Baixe a imagem completa de “CD” ou “DVD” do Debian para executar a instalação. Certifique-se de verificar as assinaturas do GPG e os hashes SHA-256. Para atualizar a máquina offline é preciso 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
  • Install a reproducibly built Coreboot binary
  • Instale de uma imagem Debian compilada de forma reproduzível, removendo 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 em uma 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âmeras de segurança
  • On-site security guards
  • 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.