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

Semelhante a Boot Seguro para Linux Embarcado

Certificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosCertificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 Exercícios
Leandro Rezende
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
Cristiano Rafael Steffens
 
Como recuperar senhas WEP de redes wireless com Backtrack
Como recuperar senhas WEP de redes wireless com BacktrackComo recuperar senhas WEP de redes wireless com Backtrack
Como recuperar senhas WEP de redes wireless com Backtrack
Natanael Simões
 
04 cripto chave_2011
04 cripto chave_201104 cripto chave_2011
04 cripto chave_2011
Carol Luz
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
Diego Santos
 
[TDC2019] Inteligência Artificial e Testes in a Nutshell
[TDC2019] Inteligência Artificial e Testes  in a Nutshell[TDC2019] Inteligência Artificial e Testes  in a Nutshell
[TDC2019] Inteligência Artificial e Testes in a Nutshell
Júlio de Lima
 
Criptografia e criptpanalise na pratica
Criptografia e criptpanalise na praticaCriptografia e criptpanalise na pratica
Criptografia e criptpanalise na pratica
Talita Rodrigues
 
Existe vida após o Arduino?
Existe vida após o Arduino?Existe vida após o Arduino?
Existe vida após o Arduino?
Daniel Rodrigues de Sousa
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
ricardophp
 
Existe vida após o arduino?
Existe vida após o arduino? Existe vida após o arduino?
Existe vida após o arduino?
Daniel Rodrigues de Sousa
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Sandro Suffert
 
Tutorialclonehdg01
Tutorialclonehdg01Tutorialclonehdg01
Tutorialclonehdg01
Luiz Francisco Bozo
 
Ethical hacking: Conceitos básicos de Testes de penetração
Ethical hacking: Conceitos básicos de Testes de penetraçãoEthical hacking: Conceitos básicos de Testes de penetração
Ethical hacking: Conceitos básicos de Testes de penetração
Cleórbete Santos
 
Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?
Harlley Oliveira
 
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de Programação
 
Arquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PICArquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PIC
Alexandre Brandão Lustosa
 
Segurança básica de redes Wi-Fi
Segurança básica de redes Wi-FiSegurança básica de redes Wi-Fi
Segurança básica de redes Wi-Fi
Víctor Leonel Orozco López
 
Auditoria e Segurança em TI - Aula 3
Auditoria e Segurança em TI - Aula 3Auditoria e Segurança em TI - Aula 3
Auditoria e Segurança em TI - Aula 3
Filipo Mór
 
Disponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso PráticoDisponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Jeronimo Zucco
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
Raul Oliveira
 

Semelhante a Boot Seguro para Linux Embarcado (20)

Certificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosCertificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 Exercícios
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Como recuperar senhas WEP de redes wireless com Backtrack
Como recuperar senhas WEP de redes wireless com BacktrackComo recuperar senhas WEP de redes wireless com Backtrack
Como recuperar senhas WEP de redes wireless com Backtrack
 
04 cripto chave_2011
04 cripto chave_201104 cripto chave_2011
04 cripto chave_2011
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
[TDC2019] Inteligência Artificial e Testes in a Nutshell
[TDC2019] Inteligência Artificial e Testes  in a Nutshell[TDC2019] Inteligência Artificial e Testes  in a Nutshell
[TDC2019] Inteligência Artificial e Testes in a Nutshell
 
Criptografia e criptpanalise na pratica
Criptografia e criptpanalise na praticaCriptografia e criptpanalise na pratica
Criptografia e criptpanalise na pratica
 
Existe vida após o Arduino?
Existe vida após o Arduino?Existe vida após o Arduino?
Existe vida após o Arduino?
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Existe vida após o arduino?
Existe vida após o arduino? Existe vida após o arduino?
Existe vida após o arduino?
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
 
Tutorialclonehdg01
Tutorialclonehdg01Tutorialclonehdg01
Tutorialclonehdg01
 
Ethical hacking: Conceitos básicos de Testes de penetração
Ethical hacking: Conceitos básicos de Testes de penetraçãoEthical hacking: Conceitos básicos de Testes de penetração
Ethical hacking: Conceitos básicos de Testes de penetração
 
Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?
 
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
 
Arquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PICArquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PIC
 
Segurança básica de redes Wi-Fi
Segurança básica de redes Wi-FiSegurança básica de redes Wi-Fi
Segurança básica de redes Wi-Fi
 
Auditoria e Segurança em TI - Aula 3
Auditoria e Segurança em TI - Aula 3Auditoria e Segurança em TI - Aula 3
Auditoria e Segurança em TI - Aula 3
 
Disponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso PráticoDisponibilização de Serviços em IPv6 na UCS - Um Caso Prático
Disponibilização de Serviços em IPv6 na UCS - Um Caso Prático
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
 

Último

Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...
Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...
Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...
carlos silva Rotersan
 
AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
Consultoria Acadêmica
 
AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024
AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024
AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024
Consultoria Acadêmica
 
Aula 4 - 3D laser scanning para bim em engenharia
Aula 4 - 3D laser scanning para bim em engenhariaAula 4 - 3D laser scanning para bim em engenharia
Aula 4 - 3D laser scanning para bim em engenharia
JosAtila
 
Manual de Instalação para Placa Proteco Q60A
Manual de Instalação para Placa Proteco Q60AManual de Instalação para Placa Proteco Q60A
Manual de Instalação para Placa Proteco Q60A
Tronicline Automatismos
 
MAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptx
MAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptxMAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptx
MAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptx
Vilson Stollmeier
 

Último (6)

Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...
Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...
Grau TÉCNICO EM SEGURANÇA DO TRABALHO I - LEGISLAÇÃO APLICADA À SAÚDE E SEGUR...
 
AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE02 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
 
AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024
AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024
AE02 - SINAIS E SISTEMAS LINEARES UNICESUMAR 52/2024
 
Aula 4 - 3D laser scanning para bim em engenharia
Aula 4 - 3D laser scanning para bim em engenhariaAula 4 - 3D laser scanning para bim em engenharia
Aula 4 - 3D laser scanning para bim em engenharia
 
Manual de Instalação para Placa Proteco Q60A
Manual de Instalação para Placa Proteco Q60AManual de Instalação para Placa Proteco Q60A
Manual de Instalação para Placa Proteco Q60A
 
MAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptx
MAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptxMAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptx
MAQUINAS-EQUIPAMENTOS-E-FERRAMENTAS.pptx
 

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