- Se o BitLocker sem senha depende de um TPM discreto (discrete TPM), é possível capturar a chave em texto puro no barramento SPI no momento em que a VMK é transferida do TPM para a CPU durante a inicialização
- O experimento com um Lenovo L13 foi feito com um DSLogic Plus de menos de US$ 100, mas houve limitações significativas de amostragem para ler com estabilidade um barramento SPI de 33 MHz
- Os dados capturados precisam ser interpretados na ordem SPI → TIS → TPM 2.0, e a chave de 32 bytes que começa com
5761foi encontrada no buffer de resposta deTPM2_Unseal - Com a chave extraída, a partição BitLocker foi montada com
dislocker-fuse, esethc.exefoi trocado porcmd.exepara obter até mesmo um shell SYSTEM ao pressionar Shift 5 vezes - Só o TPM discreto não oferece proteção suficiente, e a defesa prática depende de usar fTPM ou configurar um PIN ou passphrase no BitLocker
BitLocker sem senha e a fraqueza do TPM discreto
- A partição BitLocker é criptografada com a FVEK (Full Volume Encryption Key)
- A FVEK, por sua vez, é criptografada com a VMK (Volume Master Key) e armazenada no disco junto com os dados criptografados
- Essa estrutura permite rotacionar chaves sem precisar criptografar o disco inteiro novamente
- A VMK fica armazenada no TPM
- Portanto, o disco só pode ser descriptografado quando inicializado naquele computador
- O Active Directory tem um mecanismo de recuperação
- O ponto fraco é o momento em que a CPU solicita ao TPM o envio da VMK para descriptografar o disco
- A VMK passa em texto puro pelo barramento SPI entre o TPM e a CPU
- Se esse valor for capturado, ele pode ser usado para descriptografar o disco BitLocker
Equipamentos usados para capturar a comunicação do TPM
- O equipamento do experimento foi o analisador lógico DSLogic Plus
- Foi comprado em 2021 por menos de US$ 100, incluindo impostos e frete
- Para obter um sinal estável, normalmente é necessária uma frequência de amostragem de cerca de 3 a 4 vezes a frequência do barramento
- O barramento SPI alvo era de 33 MHz, então era necessário pelo menos 100 MHz de amostragem
- A especificação do DSLogic Plus fala em até 400 MHz com 16 canais, mas há restrições nas condições reais de uso
- O DSLogic Plus tem limitações claras dependendo do modo de captura e do número de canais
- Quanto mais canais são capturados ao mesmo tempo, menor a frequência de amostragem
- O modo stream pode capturar grandes volumes de dados por cerca de 1 minuto, mas fica limitado a 100 MHz em 3 canais
- O modo buffer pode amostrar a 400 MHz, mas funciona por apenas alguns milissegundos, o que não é prático para esse trabalho
- Uma opção mais profissional é o Saleae, cerca de 10 vezes mais caro, e outros equipamentos podem ser vistos na lista de hardware compatível com sigrok
Conexão na placa e timing da captura
- O SPI é um barramento compartilhado, então não é necessário se conectar diretamente aos pequenos pinos do TPM
- Se houver um componente maior conectado ao mesmo barramento SPI, é possível fazer o hook nele
- No experimento, foi identificada e usada uma memória SPI flash próxima
- Como o componente tinha marcação, foi fácil encontrar o datasheet e confirmar sua função
- Com o DSLogic, só foram capturadas 3 linhas do SPI por causa da queda na frequência de amostragem
- As linhas importantes são CLK, MOSI e MISO
- O limiar de tensão deve ser ajustado para cerca da metade da tensão do sinal
- A tensão medida do sinal era de 3,3 V, e um limiar adequado era cerca de 1,6 V
- A VMK procurada é usada na parte final da etapa POST
- No Lenovo L13, isso acontecia logo após a tela de splash, por volta de 14 segundos em um boot total de cerca de 25 segundos
- Antes disso também havia atividade SPI, mas era principalmente leitura e verificação das etapas iniciais de boot, não comunicação com o TPM
- A captura pode começar logo após o boot ou, para reduzir dados desnecessários, cerca de 7 segundos depois
Interpretando SPI, TIS e TPM 2.0
- Os sinais capturados precisam ser interpretados em três camadas: SPI, TIS e TPM 2.0
- SPI é um protocolo simples e pode ser interpretado com um analisador lógico comum
- Quando o clock sobe de 0 para 1, o estado da linha de dados naquele instante vira o valor do bit
- No exemplo, o MOSI ficou em 0 por 8 clocks, então é interpretado como
0x00; no MISO, só o primeiro bit estava ativo, então o valor é0x80
- A parte mais difícil foi o TIS (TPM Interface Specification)
- Não foi encontrado um decoder funcional, então o processamento foi feito manualmente
- Os decoders do libsigrok não conseguiram interpretar os dados corretamente, mas ajudaram a localizar aproximadamente as regiões onde aconteciam trocas com o TPM
- A falha pode ter ocorrido porque a captura não tinha Chip Select, porque o clock era impreciso, porque faltavam alguns bytes ou por outros motivos
- As requisições enviadas do mestre para o escravo mostram um padrão repetitivo
- O escravo envia
80para indicar que está pronto - O mestre envia o cabeçalho
D4 00 24e os bytes do TPM - O escravo confirma a leitura com
01 FF
- O escravo envia
- As respostas do escravo para o mestre dependem da configuração e leitura de registradores
- O frame de exemplo é o resultado da leitura de 1 byte no endereço
D4 00 24 - O escravo inicia a transação com
80, e depois aparece o valor de interesse,0x80
- O frame de exemplo é o resultado da leitura de 1 byte no endereço
Encontrando a chave na resposta de TPM2_Unseal
- O comando TPM que solicita o retorno da chave é o TPM2_Unseal
- Esse comando está definido na especificação TPM 2.0 parte 3
- As transações do TPM foram separadas focando na resposta da linha MISO, mais do que nos frames de requisição
- Nos dados SPI brutos, foi aplicado um filtro com a máscara
80 00 00 00 01 .., mantendo apenas o último byte curinga - O início de uma transação TPM é identificado pelos cabeçalhos
80 01ou80 02 - A resposta que contém a chave é uma resposta de autenticação mais longa e começa com
80 02
- Nos dados SPI brutos, foi aplicado um filtro com a máscara
- Havia um atraso de cerca de 10 ms entre o comando Unseal e a resposta
- O cabeçalho
80 02indica uma sessão com senha, diferente do cabeçalho80 01em texto puro usado pela maioria das requisições - O atraso provavelmente ocorre por causa do processamento da autenticação da requisição e do HMAC da resposta
- O cabeçalho
- Os comandos e respostas TPM foram obtidos remontando os bytes um a um
- A decodificação foi feita com a ferramenta tpmstream-web
- A chave dentro do buffer de resposta começa com
5761e tem 32 bytes de comprimento
Montagem do disco e backdoor
- Depois de salvar a chave extraída em um arquivo, ela foi passada ao
dislocker-fusepara montar a partição BitLocker - O comando de exemplo cria o arquivo da chave, conecta
/dev/sdd3em./mnt/e depois montadislocker-filenovamente em./mnt2/ - O backdoor mais simples é sobrescrever o programa Sticky Keys do Windows com
cmd.exeWindows/System32/cmd.exeé copiado paraWindows/System32/sethc.exe- Depois de recolocar o disco no notebook e inicializar, pressionar Shift 5 vezes abre um shell SYSTEM
Limitações do equipamento e defesas
- É difícil recomendar o DSLogic para esse trabalho
- Muitas capturas falharam e precisaram ser descartadas
- A amostragem de 3 vezes a velocidade do barramento mal foi suficiente para obter um clock consistente, e alguns bytes se perderam
- Por causa das limitações do equipamento, foi necessário gastar muito tempo entendendo o protocolo em profundidade e interpretando manualmente as capturas
- Se a compra do equipamento fosse responsabilidade do empregador, a melhor escolha seria adquirir um analisador lógico profissional
- Ao contrário do que se espera, usar apenas TPM discreto não aumenta de fato a segurança do sistema e pode criar uma ilusão de segurança
- Há duas defesas possíveis
- Usar fTPM
- Se for necessário usar TPM discreto, configurar um PIN ou uma passphrase no BitLocker
- A própria Microsoft também recomenda configurar um PIN ou uma passphrase no BitLocker para áreas da organização que exigem um nível mais alto de proteção de dados
1 comentários
Comentários do Hacker News
Todos os TPMs oferecem suporte a sessões criptografadas para impedir esse tipo de ataque man-in-the-middle. Basta usar
TPM2_StartAuthSessione especificar criptografia em cada comando da sessão, mas o BitLocker não usa isso, então é uma falha grave. A Microsoft precisa corrigirEm comparação, o systemd usa sessões criptografadas ao usar criptografia de disco LUKS com TPM: https://github.com/systemd/systemd/commit/acbb504eaf1be51572...
Pergunto por não conhecer bem TPM: como funcionam as sessões autenticadas? Como o sistema operacional prova sua identidade ao TPM de uma forma que um invasor não consiga falsificar em um ataque man-in-the-middle real? Parece que qualquer segredo ou chave armazenado do lado do sistema operacional teria que estar em texto claro no disco, já que ainda não há uma chave de criptografia
Mesmo que o sistema operacional de alguma forma verifique a identidade do TPM e impeça que isso seja contornado modificando alguns arquivos no disco, não vejo o que impediria um invasor de executar a mesma rotina em um emulador. A menos que isso seja integrado a um ambiente de execução seguro do lado da CPU, como Intel ME ou SGX, parece difícil obter segurança real com essa abordagem; e aí talvez nem fosse preciso TPM em primeiro lugar
Há também outro artigo de 2021
https://arstechnica.com/gadgets/2021/08/how-to-go-from-stole...
Alguns fabricantes de notebooks oferecem uma configuração que limpa o TPM se você abrir o notebook. Se você abriu o notebook para ver se dava para adicionar RAM, é bom torcer para ter acesso à chave de recuperação do BitLocker ou a um backup dela
Imagino que também dê para acessar cortando o plástico. Algo no estilo da cena de extração do parasita em Matrix
Não há nada de novo. A configuração padrão não exige PIN, mas a documentação da Microsoft descreve vários ataques e recomenda configurar um PIN do BitLocker para mitigá-los completamente. Como o TPM impede força bruta, o PIN pode ser relativamente fraco
Exemplo: https://learn.microsoft.com/en-us/windows/security/operating...
Behavior:Win32/AccessibilityEscalationNo BitLocker e nesse tipo de criptografia, eu nunca entendi a arquitetura em que a chave de descriptografia é fornecida automaticamente pelo sistema. Se o notebook inteiro for roubado, que segurança o BitLocker oferece? Do ponto de vista do invasor, o sistema inicializa e apenas pede a senha da conta de usuário
Pelo que entendo, ele parece proteger meus dados quando alguém remove o disco rígido do notebook e tenta executá-lo em outro sistema. Talvez por esse mal-entendido possivelmente tolo, eu sempre configurei o BitLocker com uma senha que precisa ser digitada manualmente, e sempre fiz o mesmo com LUKS. Estou completamente errado?
O mais provável é que ele apague o drive e tente vendê-lo, não que tente de fato um ataque de cold boot. Mas tudo depende do modelo de ameaça. Pessoalmente, o principal motivo para eu usar criptografia de disco completo em equipamentos pessoais é reduzir a necessidade de destruir fisicamente o armazenamento ao descartá-lo
Se o disco rígido falhar, não preciso abri-lo de verdade para garantir que meus dados desapareceram. Meus dispositivos normalmente ficam em modo de suspensão quando estão fora de casa, então, se alguém quiser fazer um ataque de cold boot, conseguirá de qualquer forma
Como você disse, se a chave de descriptografia é fornecida automaticamente ao sistema, então ela está na RAM e pronta para um invasor exportá-la e reutilizá-la no disco criptografado. Ataques de cold boot[1] são um vetor que vale a pena ler mais para decidir se se encaixam no seu modelo de ameaça
[1] https://en.wikipedia.org/wiki/Cold_boot_attack
Se a chave passa por um barramento compartilhado, isso significa que qualquer componente do sistema poderia interceptá-la tão facilmente quanto esse analisador lógico? Parece um pesadelo de segurança da cadeia de suprimentos
Se qualquer pessoa puder inicializar o notebook e acessar o disco rígido descriptografado, que diferença faz farejar a chave antes? Se você consegue inicializar o notebook, de qualquer forma já teria acesso ao resultado final
Se você quer que o BitLocker proteja em uma situação em que alguém rouba o notebook, de qualquer forma precisa usar uma senha e desativar o modo de suspensão, mantendo só a hibernação
Então o que exatamente o hardware “confiável” do TPM está fazendo agora? As medições de boot também podem ser falsificadas? Além disso, isso é absurdamente idiota. Por que material de chave está circulando em texto claro pelo barramento? Nem existe algo como um protocolo de troca de chaves
[1] Também se fala aqui de exclusão segura, que é um caso ainda mais fraco. Mas, se a criptografia de disco completo tiver uma EEPROM que possa ser removida do soquete e destruída fisicamente, essa parte é resolvida com a mesma eficácia
Tenho curiosidade sobre que software foi usado para transformar o sinal bruto em 0s e 1s. Há muito tempo existe um projeto parecido: ler dados digitais de fitas cassete dos anos 80. Consegui arquivos
.wavdas fitas com qualidade razoável, mas ainda não encontrei uma ferramenta ou biblioteca adequada para convertê-los em 0s e 1sClaro que a diversão de verdade provavelmente começa depois de começar a decodificar os 0s e 1s. Sei como os bits foram codificados, e é modulação por chaveamento de frequência[0]. O que não sei é o que usar para decodificar isso em um fluxo de bits que eu possa processar depois
[0] https://en.wikipedia.org/wiki/Frequency-shift_keying
Dá para gerar uma saída digital comparando as saídas de um par desses filtros. Também é possível usar uma transformada discreta de Fourier deslizante esparsa, mas a interpolação entre bins de frequência é mais trabalhosa, enquanto o filtro Goertzel cuida disso para você
Não conheço um algoritmo ou software único que transforme qualquer sinal bruto em bytes. Você precisa entender qual esquema de modulação o sinal usa e encontrar o decodificador correspondente ou escrever o seu. Em geral envolve filtragem e vários algoritmos matemáticos, mas programas para decodificação básica costumam ser bem curtos e simples
É uma habilidade bem legal de aprender, porque as mesmas técnicas podem ser usadas em todo tipo de lugar. Por exemplo, depois de aprender um pouco de DSP, abriram-se muitas possibilidades no que eu podia fazer com comunicação sem fio, música e sound design, imagens e processamento de vídeo
Ou, como o autor mencionou o DSlogic, talvez exista um fork desses programas feito pelo fabricante desse analisador lógico
O sinal bruto normalmente entrava em um gatilho Schmitt para implementar histerese e obter bordas estáveis. Isso compensava a polaridade do sinal da fita e variações do motor
É irônico o trecho dizendo que “usar um TPM físico separado na verdade reduz a segurança”
Meu notebook de 2015 não tinha TPM físico e, quando tentei ativar, aparecia “Permitir BitLocker sem um TPM compatível (exige uma senha ou chave de inicialização em uma unidade flash USB)”, então achei que fosse menos seguro. Ainda bem que eu nem usava BitLocker
É muito engraçado que aquele truque de primário dos tempos do Windows Vista, de renomear o Prompt de Comando para virar um manipulador de acessibilidade, ainda funcione exatamente igual
Se algo é executado com privilégios de administrador sem login, a gente imagina que o Windows vá autenticar, mas o Windows parece ser 75% teatro de segurança, e os outros 25% também parecem outro tipo de teatro
A mesma técnica foi descrita em 2021:
https://dolosgroup.io/blog/2021/7/9/from-stolen-laptop-to-in...