SlideShare uma empresa Scribd logo
bruno@bruno:~$ echo 2^1024 | bc
17976931348623159077293051907890247336179769789423065727343008115773
26758055009631327084773224075360211201138798713933576587897688144166
22492847430639474124377767893424865485276302219601246094119453082952
08500576883815068234246288147391311054082723716335051068458629823994
7245938479716304835356329624224137216
Boot Seguro
Números Grandes
- Pessoas no mundo: ~ 2^33
- Células no corpo humano: ~ 2^33
- Atomos no corpo humano: ~ 2^81
- Grãos de areia na terra: ~ 2^63
- Estrelas no universo: ~ 2^69
- Átomos no universo: ~ 2^246
Tamanho de uma chave simétrica considerada segura: 2^128
Tempo estimado para um super-computador quebrar esta chave por força bruta: >
10^21 anos! Ou, 1 000 000 000 000 000 000 000 anos!
2
Problema
Personagens:
- Ana (desenvolvedor, fabricante do hardware)
- Beto (usuário, cliente da Ana)
- Caio (atacante mal-intencionado)
3
Problema
4
Problema
5
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
VIRUS
Problema?
MPU
RAM
6
Problema?
MPU
RAM
Flash
Code A:
NON secure
NON secure
NON secure
NON secure
NON secure
NON secure
7
Agenda
1) Números grandes
2) Problema
3) Introdução
a) Processo normal de boot
b) Criptografia
4) Boot seguro
a) Assinado
b) Encriptado
c) Outros conceitos
5) Chain of Trust
6) Implementação em um processador
8
Processo de boot
MPU
RAM
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
CORE
SRAM
ROM
Boot
Select
9
Processo de boot
MPU
RAM
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
CORE
SRAM
ROM
Boot
Select
ROM
10
Boot Seguro
Para o boot ocorrer de maneira segura:
1) A imagem deve estar íntegra.
2) A imagem deve ter sido "assinada" pelo desenvolvedor.
3) Só pode bootar de imagens geradas e gravadas na fonte.
4) Os passos do processo de boot devem ser configuráveis.
5) A imagem pode, ou não, estar criptografada.
Como?
Criptografia!
11
Criptografia
A criptografia se baseia em modelos matemáticos.
Importantes para o boot seguro:
- Criptografia Simétrica (AES)
- Criptografia Assimétrica (RSA)
- Resumo Criptográfico (SHA)
12
Criptografia Simétrica
- Chave única, idêntica dos dois lados.
- Deve ser "combinada" previamente.
- Cálculos muito rápidos.
13
Criptografia Assimétrica
- Cada lado tem um par de chaves: pública, privada.
- Não há necessidade de "combinar" a chave previamente.
- Cálculo matemático lento: exponencial.
Chave
Privada Ana
Chave
Pública Ana
14
Criptografia - Resumo (Hash)
- Oferece um resumo dos dados, integridade.
- Muito difícil encontrar outro dado que dê o mesmo resumo.
- Não necessita de chave, qualquer um pode calcular obtendo o mesmo
resultado.
Hash = 10! Hash = 10?
Integro!
15
Boot seguro
Boot Seguro - Passo a Passo
Problema 1 : Integridade dos dados.
Flash
Code A:
Mysecurecode
Not my code
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
ANA:
Resumo A
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
BETO:
Resumo A Resumo B==
?
CAIO:
17
Boot Seguro - Passo a Passo
Problema 2: Assinatura digital.
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
ANA:
Resumo A
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
BETO:
Resumo B
CAIO:
Resumo C Priv.
Flash
Code A:
Mysecurecode
Not my code
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Assinatura ANA
Ch. Pública ANA
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
ANA:
Assinatura ANA
Ch. Pública ANA
Assinatura ANA
Ch. Pública ANA
Resumo A ==
? 18
Boot Seguro - Passo a Passo
Problema 3: Só bootar de imagens geradas por ANA.
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
ANA:
Resumo A
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
BETO:
Resumo B
CAIO:
Priv.
Flash
Code A:
Mysecurecode
Not my code
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Assinatura ANA
Ch. Pública ANA
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
ANA:
Assinatura ANA
Ch. Pública ANA
Assinatura ANA
Ch. Pública ANA
Resumo A ==
?
Assinatura CAIO
Ch. Pública CAIO
Ch. Pública ANA
Resumo Ch Pub
ANA
Resumo Ch Pub
ANA "B"
Resumo Ch Pub
ANA
== ?
19
Boot Seguro - Passo a Passo
4) Adicionando flexibilidade.
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
ANA:
Resumo 1
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
BETO:
Resumo B
Priv.
Assinatura1 ANA
Ch. Pública1 ANA
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
ANA:
Assinatura1 ANA
Ch. Pública1 ANA
Resumo 1
== ?
Ch. Pública1 ANA
Resumo Ch Pub
ANA 1 e 2
Resumo Ch Pub
ANA 1 e 2 "B"
Resumo Ch Pub
ANA 1 e 2
== ?
Comandos
de Boot
Resumo 2
Assinatura2 ANA
Ch. Pública2 ANA
Assinatura2 ANA
Ch. Pública2 ANA
Assinatura1 ANA
Ch. Pública1 ANA
Comandos
de Boot
Ch. Pública2 ANA+
Assinatura2 ANA
Ch. Pública2 ANA
Comandos
de Boot
Resumo 2
Resumo C
== ?
20
Boot Seguro (Revisão)
Para o boot ocorrer de maneira segura:
1) A imagem deve estar íntegra.
a) ANA gera e envia um resumo criptográfico.
2) A imagem deve ter sido "assinada" pelo desenvolvedor.
a) ANA assina o resumo com sua chave privada, e envia sua chave pública junto com a imagem.
3) Só pode bootar de imagens geradas e gravadas na fonte.
a) Par de chaves público e privada do desenvolvedor (ANA).
b) O processador (BETO) deve poder checar que ANA é a ANA.
i) Resumo criptogáfico da chave pública da ANA.
4) Os passos do processo de boot devem ser configuráveis.
5) A imagem pode, ou não, estar criptografada.
a) Se for o caso, AES128
21
Boot encriptado
Flash
Code A:
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Mysecurecode
Assinatura2 ANA
Ch. Pública2 ANA
Assinatura1 ANA
Ch. Pública1 ANA
Comandos
de Boot
Chave AES (1)
Chave AES Cifrada
Chave única por
processador (2)
1+2
Chave AES (1)
Flash
Imagem
encriptada
Assinatura2 ANA
Ch. Pública2 ANA
Assinatura1 ANA
Ch. Pública1 ANA
Chave AES Cifrada
1+2
ANA:
1+2
Chave única por
processador (2)
+
=
Chave AES (1)
+
Priv. ANA
Ch. Pública1 ANA
=
Chave AES Cifrada
BETO:
22
Comandos de boot
- Seleção de protocolos de segurança.
- Assinatura (RSA 1024, 2048, ECC)
- Hash (SHA128, 256)
- Cifra (AES)
- Endereços das assinaturas e certificados.
- Seleção de recursos do processador de maneira segura.
- Ordem dos cálculos.
- Lógica de checagem do hash dos certificados.
23
Múltiplas assinaturas
- É possível checar assinatura de diversos objetos (regiões).
- Exemplos:
- U-boot
- Kernel, Device Tree
- Outros binários (cores secundários, GPU, WiFi, etc)
- Rootfs (boot pode ficar demorado)
- Cada novo objeto, gera um par de chaves:
- Chave privada, para a assinatura, “na fábrica”.
- Chave pública, em formato de certificado digital, a ser copiada junto com a imagem para a
execução do processo de boot.
- Geralmente, para cada produto é criado um conjunto de novas chaves.
- Quanto mais pares de chaves, mas seguro é o processo geral.
24
Gravação em fusíveis
Algumas configurações do boot seguro devem ser, na fábrica, gravadas em
fusíveis internos do processador, e bloqueados para gravações futuras:
- Fonte de boot
- Parâmetros de boot
- Hash das chaves públicas
Estes fusíveis devem ser gravados em fábrica, atravéz de ferramentas
disponibilizadas pelo fabricante.
- Os dados podem ser gravados via u-boot, ou via programa rodando no PC
com link serial (USB) com a placa.
25
Chain
of
Trust
- O Hardware se encarrega de carregar uma imagem inicial de boot loader de
maneira segura.
- O boot loader ou o hardware, “bootam” o kernel de maneira segura.
- O kernel, por sua vez, se encarrega de montar o rootfs e mantê-lo de maneira
segura.
Corrente de confiança (Chain of Trust)
u-boot
kernel
rootfs
Hardware
Boot
seguro
26
Implementação em
um processador
comercial *
Ferramentas necessárias
Familia estudada: i.MX6 da NXP, utilizando o HABv4 (High Assurance Boot).
- Gerador de certificados, responsável por gerar:
- Par de chaves público/privada
- Certificados digitais
- Hash a ser gravado nos fusíveis
- Assinador de código, responsável por:
- Calcular o resumo do binário em questão
- Assinar o resumo com a chave privada
- Concatenar o resultado com os certificados necessários
- Exemplo de comandos de boot seguro
- Ferramenta para gravação dos fusíveis, em fábrica
28
Distribuição de certificados e chaves
Certificado
mestre
Produto 1
Certificado
Pai 1
Certificado
Filho 1-1
Certificado
Filho 1-2
Certificado
Filho 1-3
Produto 2
Certificado
Pai 2
Certificado
Filho 2-1
Certificado
Filho 2-2
Certificado
Filho 2-3
Produto n
n
n
n
n
Tabela de
chaves e
certificados
29
Gerando as chaves
bruno@bruno:~/CST-CodeSigningTool/cst-2.3.2/keys$ .
/hab4_pki_tree.sh
Do you want to use an existing CA key (y/n)?: n
Do you want to use Elliptic Curve Cryptography (y/n)?: n
Enter key length in bits for PKI tree: 2048
Enter PKI tree duration (years): 10
How many Super Root Keys should be generated? 1
Do you want the SRK certificates to have the CA flag set? (y/n)?:
y
+++++++++++++++++++++++++++++++++++++
+ Generating CA key and certificate +
+++++++++++++++++++++++++++++++++++++
Generating a 2048 bit RSA private key
writing new private key to 'temp_ca.pem'
++++++++++++++++++++++++++++++++++++++++
+ Generating SRK key and certificate 1 +
++++++++++++++++++++++++++++++++++++++++
Generating RSA private key, 2048 bit long modulus
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'SRK1_sha256_2048_65537_v3_ca'
Certificate is to be certified until Jun 27 16:14:55 2026 GMT
(3650 days)
++++++++++++++++++++++++++++++++++++++++
+ Generating CSF key and certificate 1 +
++++++++++++++++++++++++++++++++++++++++
Generating RSA private key, 2048 bit long modulus
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'CSF1_1_sha256_2048_65537_v3_usr'
Certificate is to be certified until Jun 27 16:14:56 2026 GMT
(3650 days)
++++++++++++++++++++++++++++++++++++++++
+ Generating IMG key and certificate 1 +
++++++++++++++++++++++++++++++++++++++++
Generating RSA private key, 2048 bit long modulus
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'IMG1_1_sha256_2048_65537_v3_usr'
Certificate is to be certified until Jun 27 16:14:56 2026 GMT
(3650 days)
30
Gerar a tabela de chaves
bruno@bruno:~/CST-CodeSigningTool/cst-2.3.2/keys$ ../linux64/srktool --help
Usage:
To generate SRK Table data and the SRK Table hash for HAB4
==========================================================
srktool --hab_ver <version> --table <tablefile> --efuses <efusefile>
--digest <digestalg> --certs <srk>,%<srk>,...
[--fuse_format <format>] [--license]
-h, --hab_ver <version>:
HAB Version - set to 4 for HAB4 SRK table generation
-t, --table <tablefile>:
Filename for output SRK table binary file
-e, --efuses <efusefile>:
Filename for the output SRK efuse binary file containing the SRK table hash
-d, --digest <digestalg>:
Message Digest algorithm. Either sha1 or sha256
-c, --certs <srk1>,<srk2>,...,<srk4>:
X.509v3 certificate filenames.
-f, --fuse_format <format>:
Optional, Data format of the SRK efuse binary file.
-l, --license:
Optional, displays program license information. 31
Extrair os valores dos fusíveis
bruno@bruno:~/CST-CodeSigningTool/cst-2.3.2/keys$ hexdump -e '/4 "0x"' -e '/4 "%X""n"'
SRK_1_2_3_4_fuse.bin
0xF2E90790
0x33472527
0x65452D17
0xD52CEB6C
0x3A0B28B5
0x1016780D
0xEF1F296
0x5CAD4836
- No u-boot, pode-se usar o comando fuse prog para programar os fusíveis:
fuse prog <bank> <word> <value>
Ex.:
fuse prog 3 0 0xF2E90790
32
Montagem dos comandos de boot
Similar a um arquivo XML, contém os comandos e passos de boot.
#Illustrative Command Sequence File Description
[Header]
Version = 4.1
Hash Algorithm = sha256
Engine = ANY
Engine Configuration = 0
Certificate Format = X509
Signature Format = CMS
[Install SRK]
File = “../crts/SRK_1_2_3_4_table.bin”
...
[Install CSFK]
File = “../crts/CSF1_1_sha256_2048_65537_v3_usr_crt.pem”
...
[Authenticate CSF]
...
[Install Key]
File= ”../crts/IMG1_1_sha256_2048_65537_v3_usr_crt.pem”
...
[Authenticate Data]
...
33
Preparando a imagem
- Gerar o CST (binário) a partir do arquivo CST de entrada ("XML"):
- ./cst -–o csf-uboot.bin < csf-uboot
- Concatenar o CST à imagem do u-boot:
- cat u-boot.imx csf-uboot.bin > u-boot-signed.imx
- Depois do boot, no u-boot, checar o estado do boot:
- hab_status
- Queimar os últimos fusíveis
34
Formato típico gerado para boot seguro
Binário do
u-boot
(uB)
Assinatura uB
Certificado uB
Certificado CB
Assinatura CB
Comandos de
Boot (CB)
Assinatura LK
Certificado LK
Linux
Kernel
(LK)
dtb
rootfs
35
Formato típico gerado para boot seguro
Disponível em NXP AN4581: http:
//cache.nxp.
com/files/32bit/doc/app_note/AN4581
.pdf
36
OBRIGADO! Perguntas?

Mais conteúdo relacionado

PDF
Arduino genius com display lcd 16x2 usando i2 c
PDF
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...
PDF
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
PPTX
Azure Sphere: a evolução da plataforma de IoT concebida com princípios de seg...
PDF
Pedro Minatel-segurança em iot
PDF
Embarcados
PDF
Arquitetura computadores
PDF
Gerenciadores de boot
Arduino genius com display lcd 16x2 usando i2 c
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Azure Sphere: a evolução da plataforma de IoT concebida com princípios de seg...
Pedro Minatel-segurança em iot
Embarcados
Arquitetura computadores
Gerenciadores de boot

Último (20)

PDF
Ideal para decisões que exigem dados recentes e confiáveis.
PPTX
Princípios Básicos de segurança em eletricidade
PDF
Aula 01 INT. EnnnnnnnnnnnnnnENF.pdf 2.pdf
PPTX
Aula 6_Delineamento em Blocos Casualizados_28.09.2020_Mestrado.pptx
PPTX
Apresentação de brainstorm geométrica colorida.pptx
PPTX
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
PPTX
Portfólio Dexo Recursos Humanos docosia
PPTX
Física I - 01 e 02 - Introdução ao método Científico.pptx
PPTX
Trabalho sobre Distancia de Visibilidade do Curso de Engenharia
PPTX
Aula 04 - Fisica teorica e experimental.pptx
PDF
APRESENTACAO_ NR10 Ferramentas isoladas.pdf
PPT
1 - Introdução a disciplina ciencia o solo.ppt
PPTX
Aula_Teorica_Estados limites de serviço no concreto armado.pptx
PPTX
2 - introducao a ciencia do solo para o curso de agronomia.ppt
PDF
DETECCAO DE ALARME DE INCENSDIO E PANICO
PDF
Material referente ao método kanban f2ms
PPT
Diagrama de fases de los aceros como material
PPTX
Introdução à Agronomia - 5 fatos sobre a agronomia
PPT
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
PPTX
Aula_Osciloscópio_Exercícios_Simulações_
Ideal para decisões que exigem dados recentes e confiáveis.
Princípios Básicos de segurança em eletricidade
Aula 01 INT. EnnnnnnnnnnnnnnENF.pdf 2.pdf
Aula 6_Delineamento em Blocos Casualizados_28.09.2020_Mestrado.pptx
Apresentação de brainstorm geométrica colorida.pptx
Fund-proc-moagem-carvaoerde_PPT_v007.pptx
Portfólio Dexo Recursos Humanos docosia
Física I - 01 e 02 - Introdução ao método Científico.pptx
Trabalho sobre Distancia de Visibilidade do Curso de Engenharia
Aula 04 - Fisica teorica e experimental.pptx
APRESENTACAO_ NR10 Ferramentas isoladas.pdf
1 - Introdução a disciplina ciencia o solo.ppt
Aula_Teorica_Estados limites de serviço no concreto armado.pptx
2 - introducao a ciencia do solo para o curso de agronomia.ppt
DETECCAO DE ALARME DE INCENSDIO E PANICO
Material referente ao método kanban f2ms
Diagrama de fases de los aceros como material
Introdução à Agronomia - 5 fatos sobre a agronomia
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
Aula_Osciloscópio_Exercícios_Simulações_
Anúncio
Anúncio

Boot Seguro para Linux Embarcado

  • 1. bruno@bruno:~$ echo 2^1024 | bc 17976931348623159077293051907890247336179769789423065727343008115773 26758055009631327084773224075360211201138798713933576587897688144166 22492847430639474124377767893424865485276302219601246094119453082952 08500576883815068234246288147391311054082723716335051068458629823994 7245938479716304835356329624224137216 Boot Seguro
  • 2. Números Grandes - Pessoas no mundo: ~ 2^33 - Células no corpo humano: ~ 2^33 - Atomos no corpo humano: ~ 2^81 - Grãos de areia na terra: ~ 2^63 - Estrelas no universo: ~ 2^69 - Átomos no universo: ~ 2^246 Tamanho de uma chave simétrica considerada segura: 2^128 Tempo estimado para um super-computador quebrar esta chave por força bruta: > 10^21 anos! Ou, 1 000 000 000 000 000 000 000 anos! 2
  • 3. Problema Personagens: - Ana (desenvolvedor, fabricante do hardware) - Beto (usuário, cliente da Ana) - Caio (atacante mal-intencionado) 3
  • 7. Problema? MPU RAM Flash Code A: NON secure NON secure NON secure NON secure NON secure NON secure 7
  • 8. Agenda 1) Números grandes 2) Problema 3) Introdução a) Processo normal de boot b) Criptografia 4) Boot seguro a) Assinado b) Encriptado c) Outros conceitos 5) Chain of Trust 6) Implementação em um processador 8
  • 9. Processo de boot MPU RAM Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode CORE SRAM ROM Boot Select 9
  • 10. Processo de boot MPU RAM Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode CORE SRAM ROM Boot Select ROM 10
  • 11. Boot Seguro Para o boot ocorrer de maneira segura: 1) A imagem deve estar íntegra. 2) A imagem deve ter sido "assinada" pelo desenvolvedor. 3) Só pode bootar de imagens geradas e gravadas na fonte. 4) Os passos do processo de boot devem ser configuráveis. 5) A imagem pode, ou não, estar criptografada. Como? Criptografia! 11
  • 12. Criptografia A criptografia se baseia em modelos matemáticos. Importantes para o boot seguro: - Criptografia Simétrica (AES) - Criptografia Assimétrica (RSA) - Resumo Criptográfico (SHA) 12
  • 13. Criptografia Simétrica - Chave única, idêntica dos dois lados. - Deve ser "combinada" previamente. - Cálculos muito rápidos. 13
  • 14. Criptografia Assimétrica - Cada lado tem um par de chaves: pública, privada. - Não há necessidade de "combinar" a chave previamente. - Cálculo matemático lento: exponencial. Chave Privada Ana Chave Pública Ana 14
  • 15. Criptografia - Resumo (Hash) - Oferece um resumo dos dados, integridade. - Muito difícil encontrar outro dado que dê o mesmo resumo. - Não necessita de chave, qualquer um pode calcular obtendo o mesmo resultado. Hash = 10! Hash = 10? Integro! 15
  • 17. Boot Seguro - Passo a Passo Problema 1 : Integridade dos dados. Flash Code A: Mysecurecode Not my code Mysecurecode Mysecurecode Mysecurecode Mysecurecode Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode ANA: Resumo A Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode BETO: Resumo A Resumo B== ? CAIO: 17
  • 18. Boot Seguro - Passo a Passo Problema 2: Assinatura digital. Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode ANA: Resumo A Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode BETO: Resumo B CAIO: Resumo C Priv. Flash Code A: Mysecurecode Not my code Mysecurecode Mysecurecode Mysecurecode Mysecurecode Assinatura ANA Ch. Pública ANA Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode ANA: Assinatura ANA Ch. Pública ANA Assinatura ANA Ch. Pública ANA Resumo A == ? 18
  • 19. Boot Seguro - Passo a Passo Problema 3: Só bootar de imagens geradas por ANA. Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode ANA: Resumo A Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode BETO: Resumo B CAIO: Priv. Flash Code A: Mysecurecode Not my code Mysecurecode Mysecurecode Mysecurecode Mysecurecode Assinatura ANA Ch. Pública ANA Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode ANA: Assinatura ANA Ch. Pública ANA Assinatura ANA Ch. Pública ANA Resumo A == ? Assinatura CAIO Ch. Pública CAIO Ch. Pública ANA Resumo Ch Pub ANA Resumo Ch Pub ANA "B" Resumo Ch Pub ANA == ? 19
  • 20. Boot Seguro - Passo a Passo 4) Adicionando flexibilidade. Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode ANA: Resumo 1 Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode BETO: Resumo B Priv. Assinatura1 ANA Ch. Pública1 ANA Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode ANA: Assinatura1 ANA Ch. Pública1 ANA Resumo 1 == ? Ch. Pública1 ANA Resumo Ch Pub ANA 1 e 2 Resumo Ch Pub ANA 1 e 2 "B" Resumo Ch Pub ANA 1 e 2 == ? Comandos de Boot Resumo 2 Assinatura2 ANA Ch. Pública2 ANA Assinatura2 ANA Ch. Pública2 ANA Assinatura1 ANA Ch. Pública1 ANA Comandos de Boot Ch. Pública2 ANA+ Assinatura2 ANA Ch. Pública2 ANA Comandos de Boot Resumo 2 Resumo C == ? 20
  • 21. Boot Seguro (Revisão) Para o boot ocorrer de maneira segura: 1) A imagem deve estar íntegra. a) ANA gera e envia um resumo criptográfico. 2) A imagem deve ter sido "assinada" pelo desenvolvedor. a) ANA assina o resumo com sua chave privada, e envia sua chave pública junto com a imagem. 3) Só pode bootar de imagens geradas e gravadas na fonte. a) Par de chaves público e privada do desenvolvedor (ANA). b) O processador (BETO) deve poder checar que ANA é a ANA. i) Resumo criptogáfico da chave pública da ANA. 4) Os passos do processo de boot devem ser configuráveis. 5) A imagem pode, ou não, estar criptografada. a) Se for o caso, AES128 21
  • 22. Boot encriptado Flash Code A: Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Mysecurecode Assinatura2 ANA Ch. Pública2 ANA Assinatura1 ANA Ch. Pública1 ANA Comandos de Boot Chave AES (1) Chave AES Cifrada Chave única por processador (2) 1+2 Chave AES (1) Flash Imagem encriptada Assinatura2 ANA Ch. Pública2 ANA Assinatura1 ANA Ch. Pública1 ANA Chave AES Cifrada 1+2 ANA: 1+2 Chave única por processador (2) + = Chave AES (1) + Priv. ANA Ch. Pública1 ANA = Chave AES Cifrada BETO: 22
  • 23. Comandos de boot - Seleção de protocolos de segurança. - Assinatura (RSA 1024, 2048, ECC) - Hash (SHA128, 256) - Cifra (AES) - Endereços das assinaturas e certificados. - Seleção de recursos do processador de maneira segura. - Ordem dos cálculos. - Lógica de checagem do hash dos certificados. 23
  • 24. Múltiplas assinaturas - É possível checar assinatura de diversos objetos (regiões). - Exemplos: - U-boot - Kernel, Device Tree - Outros binários (cores secundários, GPU, WiFi, etc) - Rootfs (boot pode ficar demorado) - Cada novo objeto, gera um par de chaves: - Chave privada, para a assinatura, “na fábrica”. - Chave pública, em formato de certificado digital, a ser copiada junto com a imagem para a execução do processo de boot. - Geralmente, para cada produto é criado um conjunto de novas chaves. - Quanto mais pares de chaves, mas seguro é o processo geral. 24
  • 25. Gravação em fusíveis Algumas configurações do boot seguro devem ser, na fábrica, gravadas em fusíveis internos do processador, e bloqueados para gravações futuras: - Fonte de boot - Parâmetros de boot - Hash das chaves públicas Estes fusíveis devem ser gravados em fábrica, atravéz de ferramentas disponibilizadas pelo fabricante. - Os dados podem ser gravados via u-boot, ou via programa rodando no PC com link serial (USB) com a placa. 25
  • 26. Chain of Trust - O Hardware se encarrega de carregar uma imagem inicial de boot loader de maneira segura. - O boot loader ou o hardware, “bootam” o kernel de maneira segura. - O kernel, por sua vez, se encarrega de montar o rootfs e mantê-lo de maneira segura. Corrente de confiança (Chain of Trust) u-boot kernel rootfs Hardware Boot seguro 26
  • 28. Ferramentas necessárias Familia estudada: i.MX6 da NXP, utilizando o HABv4 (High Assurance Boot). - Gerador de certificados, responsável por gerar: - Par de chaves público/privada - Certificados digitais - Hash a ser gravado nos fusíveis - Assinador de código, responsável por: - Calcular o resumo do binário em questão - Assinar o resumo com a chave privada - Concatenar o resultado com os certificados necessários - Exemplo de comandos de boot seguro - Ferramenta para gravação dos fusíveis, em fábrica 28
  • 29. Distribuição de certificados e chaves Certificado mestre Produto 1 Certificado Pai 1 Certificado Filho 1-1 Certificado Filho 1-2 Certificado Filho 1-3 Produto 2 Certificado Pai 2 Certificado Filho 2-1 Certificado Filho 2-2 Certificado Filho 2-3 Produto n n n n n Tabela de chaves e certificados 29
  • 30. Gerando as chaves bruno@bruno:~/CST-CodeSigningTool/cst-2.3.2/keys$ . /hab4_pki_tree.sh Do you want to use an existing CA key (y/n)?: n Do you want to use Elliptic Curve Cryptography (y/n)?: n Enter key length in bits for PKI tree: 2048 Enter PKI tree duration (years): 10 How many Super Root Keys should be generated? 1 Do you want the SRK certificates to have the CA flag set? (y/n)?: y +++++++++++++++++++++++++++++++++++++ + Generating CA key and certificate + +++++++++++++++++++++++++++++++++++++ Generating a 2048 bit RSA private key writing new private key to 'temp_ca.pem' ++++++++++++++++++++++++++++++++++++++++ + Generating SRK key and certificate 1 + ++++++++++++++++++++++++++++++++++++++++ Generating RSA private key, 2048 bit long modulus The Subject's Distinguished Name is as follows commonName :ASN.1 12:'SRK1_sha256_2048_65537_v3_ca' Certificate is to be certified until Jun 27 16:14:55 2026 GMT (3650 days) ++++++++++++++++++++++++++++++++++++++++ + Generating CSF key and certificate 1 + ++++++++++++++++++++++++++++++++++++++++ Generating RSA private key, 2048 bit long modulus The Subject's Distinguished Name is as follows commonName :ASN.1 12:'CSF1_1_sha256_2048_65537_v3_usr' Certificate is to be certified until Jun 27 16:14:56 2026 GMT (3650 days) ++++++++++++++++++++++++++++++++++++++++ + Generating IMG key and certificate 1 + ++++++++++++++++++++++++++++++++++++++++ Generating RSA private key, 2048 bit long modulus The Subject's Distinguished Name is as follows commonName :ASN.1 12:'IMG1_1_sha256_2048_65537_v3_usr' Certificate is to be certified until Jun 27 16:14:56 2026 GMT (3650 days) 30
  • 31. Gerar a tabela de chaves bruno@bruno:~/CST-CodeSigningTool/cst-2.3.2/keys$ ../linux64/srktool --help Usage: To generate SRK Table data and the SRK Table hash for HAB4 ========================================================== srktool --hab_ver <version> --table <tablefile> --efuses <efusefile> --digest <digestalg> --certs <srk>,%<srk>,... [--fuse_format <format>] [--license] -h, --hab_ver <version>: HAB Version - set to 4 for HAB4 SRK table generation -t, --table <tablefile>: Filename for output SRK table binary file -e, --efuses <efusefile>: Filename for the output SRK efuse binary file containing the SRK table hash -d, --digest <digestalg>: Message Digest algorithm. Either sha1 or sha256 -c, --certs <srk1>,<srk2>,...,<srk4>: X.509v3 certificate filenames. -f, --fuse_format <format>: Optional, Data format of the SRK efuse binary file. -l, --license: Optional, displays program license information. 31
  • 32. Extrair os valores dos fusíveis bruno@bruno:~/CST-CodeSigningTool/cst-2.3.2/keys$ hexdump -e '/4 "0x"' -e '/4 "%X""n"' SRK_1_2_3_4_fuse.bin 0xF2E90790 0x33472527 0x65452D17 0xD52CEB6C 0x3A0B28B5 0x1016780D 0xEF1F296 0x5CAD4836 - No u-boot, pode-se usar o comando fuse prog para programar os fusíveis: fuse prog <bank> <word> <value> Ex.: fuse prog 3 0 0xF2E90790 32
  • 33. Montagem dos comandos de boot Similar a um arquivo XML, contém os comandos e passos de boot. #Illustrative Command Sequence File Description [Header] Version = 4.1 Hash Algorithm = sha256 Engine = ANY Engine Configuration = 0 Certificate Format = X509 Signature Format = CMS [Install SRK] File = “../crts/SRK_1_2_3_4_table.bin” ... [Install CSFK] File = “../crts/CSF1_1_sha256_2048_65537_v3_usr_crt.pem” ... [Authenticate CSF] ... [Install Key] File= ”../crts/IMG1_1_sha256_2048_65537_v3_usr_crt.pem” ... [Authenticate Data] ... 33
  • 34. Preparando a imagem - Gerar o CST (binário) a partir do arquivo CST de entrada ("XML"): - ./cst -–o csf-uboot.bin < csf-uboot - Concatenar o CST à imagem do u-boot: - cat u-boot.imx csf-uboot.bin > u-boot-signed.imx - Depois do boot, no u-boot, checar o estado do boot: - hab_status - Queimar os últimos fusíveis 34
  • 35. Formato típico gerado para boot seguro Binário do u-boot (uB) Assinatura uB Certificado uB Certificado CB Assinatura CB Comandos de Boot (CB) Assinatura LK Certificado LK Linux Kernel (LK) dtb rootfs 35
  • 36. Formato típico gerado para boot seguro Disponível em NXP AN4581: http: //cache.nxp. com/files/32bit/doc/app_note/AN4581 .pdf 36