Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Executando aplicativos de terceiros nativamente com as chaves de assinatura

Visão geral de assinatura de chaves

A partir do Junos OS Evolved Release 22.4R1, você pode gerar chaves de assinatura e usá-las para assinar arquivos executáveis ou objetos compartilhados. A assinatura de um arquivo executável lhe dá permissão para ser executado no dispositivo, permitindo que você aprove aplicativos confiáveis para serem executados junto com o software autorizado da Juniper Networks.

O Junos OS Evolved exige que os usuários assinem todos os arquivos que serão mapeados na memória para execução. Isso inclui os seguintes tipos de arquivo:

  • Arquivos de formato executável e enlace (ELF)

  • Arquivos de objetos compartilhados (.soo)

Os seguintes tipos de arquivos não precisam ser assinados:

  • Contêineres Docker

  • Aplicativos dentro de contêineres

  • Scripts

    Nota:

    Embora os scripts não precisem ser assinados, eles precisam ser passados por um intérprete assinado para execução. O Junos OS Evolved vem instalado com intérpretes assinados de Python 2 e Python 3 que podem ser usados por meio do python script-name comando shell.

As chaves de assinatura são controladas por um subsistema linux chamado Integrity Measurement Architecture (IMA). A política de IMA consiste em regras que definem quais ações precisam ser tomadas antes que um arquivo possa ser executado. A política de medição de IMA medirá e armazenará o hash de um arquivo, e a política de avaliação do IMA garantirá que o arquivo tenha uma assinatura digital ou hash válida. A IMA só permitirá que um arquivo seja executado se essa validação for bem sucedida. Para obter mais informações sobre o IMA, veja Protegendo a integridade do Junos OS Evolved com IMA.

As chaves de assinatura são armazenadas na loja de chaves do sistema, e os certificados usados para verificar se as chaves de assinatura estão armazenadas no chaveiro estendido do IMA. Continue lendo para saber como gerar, importar, visualizar e usar chaves de assinatura.

Gerando chaves de assinatura

As chaves podem ser geradas através da linha de comando OpenSSL ou de um arquivo de configuração OpenSSL.

Gerando chaves de assinatura usando a linha de comando OpenSSL

O exemplo a seguir, o comando OpenSSL pode ser usado para gerar chaves de assinatura:

Este comando gerará 2 arquivos:

  1. privkey.pem - A chave privada codificada por PEM que pode ser usada para assinar arquivos executáveis.

  2. ima-cert.x509 - O certificado codificado de DER a ser carregado no chaveiro estendido IMA.

Nota:

A linha de comando OpenSSL é limitada em sua funcionalidade. Ele não permite que você defina valores para as extensões X509v3. Todas as chaves geradas usando o comando acima podem ser usadas como Autoridades de Certificado (CAs) e, portanto, podem ser usadas para assinar outros certificados. Para evitar isso, podemos usar um arquivo de configuração OpenSSL.

Gerando chaves de assinatura usando um arquivo de configuração OpenSSL

Crie um arquivo com o nome ima-x509.cnf e cole o seguinte conteúdo:

Após a criação do arquivo de configuração, use o seguinte comando OpenSSL para criar o e ima-cert.x509 os ima-privkey.pem arquivos:

O arquivo ima-privkey.pem chave privado é usado para gerar chaves de assinatura, e o arquivo ima-cert.x509 de certificado é usado para verificar a assinatura. Ambos os arquivos são usados durante o processo de importação de chaves de assinatura na loja de chaves do sistema e chaveiro estendido IMA.

Importação de chaves de assinatura na loja de chaves do sistema e chaveiro estendido IMA

As chaves de assinatura precisam ser importadas na loja de chaves do sistema antes de serem usadas. As chaves importadas para a loja de chaves do sistema são automaticamente importadas para o chaveiro estendido IMA. As chaves serão importadas em ambos os mecanismos de roteamento.

Para importar uma chave de assinatura na loja de chaves do sistema, use o request security system-keystore import comando com os seguintes 2 argumentos obrigatórios:

  1. key-name - Um nome único para a chave

  2. x509-cert - Caminho para o arquivo de certificado codificado de DER

O comando de exemplo a seguir criará uma chave nomeada ima-test-key usando o arquivo ima-cert.x509de certificado:

Quando a chave for importada com sucesso para você system-keystore , você verá a saída acima exibindo o nome da chave, o caminho para o certificado em disco e o identificador de chave do assunto (SKI) para a chave. Você pode verificar se este SKI combina com a chave carregada no chaveiro estendido IMA com o seguinte comando:

Visualizando a loja de chaves do sistema e o keyring estendido do IMA

Você pode visualizar o conteúdo da loja de chaves do sistema e o keyring estendido do IMA por meio de comandos CLI show evoluídos do Junos OS.

Use o show security integrity system-keystore comando para visualizar as chaves de assinatura disponíveis na loja de chaves do sistema:

As informações no campo Key SKI podem ser usadas para mapear essas chaves para o chaveamento estendido da IMA.

Use o show security integrity extended-keyring comando para visualizar o conteúdo do keyring estendido do IMA:

Como assinar aplicativos

Depois que uma chave de assinatura foi importada para a loja de chaves do sistema, ela pode ser usada para assinar binários executáveis.

Use o request security integrity measure file filename key key-name comando para assinar um arquivo.

O comando de exemplo a seguir mostra um arquivo com o nome ima-test sendo assinado por uma chave nomeada ima-test-key:

Você pode verificar se seu arquivo foi assinado com sucesso usando o request security integrity appraise file filename key key-name comando da seguinte forma:

Se o arquivo não tiver sido assinado corretamente, a seguinte mensagem será exibida:

Após a assinatura de um arquivo, ele pode ser executado nativamente em seu dispositivo Junos OS Evolved.