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
- Gerando chaves de assinatura usando 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:
openssl req -new \ -newkey rsa:3072 \ # Create an RSA 3072 key -x509 \ # Need an X509 certificates -sha256 \ # Strong hashing algorithm -nodes \ # No encrypted private-key -out ima-cert.x509 \ # Name of the certificate file -outform DER \ # Key in DER format -keyout privkey.pem \ # Name of the private key
Este comando gerará 2 arquivos:
-
privkey.pem
- A chave privada codificada por PEM que pode ser usada para assinar arquivos executáveis. -
ima-cert.x509
- O certificado codificado de DER a ser carregado no chaveiro estendido IMA.
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:
# Begining of ima-x509.cnf [ req ] default_bits = 2048 distinguished_name = custom_distinguished_name prompt = no string_mask = utf8only x509_extensions = custom_exts [ custom_distinguished_name ] O = Juniper Networks, Inc. CN = IMA extended signing key emailAddress = john.smith@juniper.net [ custom_exts ] basicConstraints=critical,CA:FALSE keyUsage=digitalSignature subjectKeyIdentifier=hash authorityKeyIdentifier=keyid # EOF
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:
openssl req -new \ -nodes \ -utf8 \ -sha1 \ -days 36500 \ -batch \ -x509 \ -config ima-x509.cnf \ -outform DER -out ima-cert.x509 \ -keyout ima-privkey.pem
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:
-
key-name
- Um nome único para a chave -
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.x509
de certificado:
user@host> request security system-keystore import key-name ima-test-key x509-cert ima-cert.x509 Key Name: ima-test-key X509 Cert Path: /etc/ima-ext/ima-test-key/ima-cert.x509 Key SKI: b71b35e380517cd224b46072dadeb6c53e0a58a1
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:
user@host> show security integrity extended-keyring Keyring 351716837 ---lswrv 0 0 keyring: ima_ext 684930381 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: b71b35e380517cd224b46072dadeb6c53e0a58a1
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:
user@host> show security integrity system-keystore Available signing keys: --- Key Name: ima-test-key X509 Cert Path: /etc/ima-ext/ima-test-key/ima-cert.x509 Key SKI: b71b35e380517cd224b46072dadeb6c53e0a58a1 --- Key Name: test-key1 X509 Cert Path: /etc/ima-ext/test-key1/ima-cert.x509 Key SKI: 332f173d61bba03fed5399a609523cbd3cfe66b3 --- Key Name: test-key2 X509 Cert Path: /etc/ima-ext/test-key2/ima-cert.x509 Key SKI: 26ebafd58b54f7b8b530d0311503fd84873ee754 ---
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:
user@host> show security integrity extended-keyring Keyring 351716837 ---lswrv 0 0 keyring: ima_ext 684930381 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: b71b35e380517cd224b46072dadeb6c53e0a58a1 316767440 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: 26ebafd58b54f7b8b530d0311503fd84873ee754 950431262 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: 332f173d61bba03fed5399a609523cbd3cfe66b3
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:
user@host> request security integrity measure file ima-test key ima-test-key Successfully signed file /data/var/home/root/ima-test
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:
user@host> request security integrity appraise file ima-test key ima-test-key File /data/var/home/root/ima-test has a valid IMA signature
Se o arquivo não tiver sido assinado corretamente, a seguinte mensagem será exibida:
user@host> request security integrity appraise file ima-test key ima-test-key warning: IMA signature verification failed for /data/var/home/root/ima-test using ima-test-key IMA appraisal for /data/var/home/root/ima-test failed.
Após a assinatura de um arquivo, ele pode ser executado nativamente em seu dispositivo Junos OS Evolved.