Suporte para CET (Control-flow Enforcement Technology)?

1

Estou tentando configurar testes de CI contra a tecnologia de fluxo de controle para garantir que nosso ASM sequencial tenha o desempenho esperado com as pilhas de sombra. O recurso é chamado Tecnologia de imposição de fluxo de controle ( CET) nos processadores Intel e o GCC oferece as opções para ativá-lo por meio de -fcf-protection=full , -mcet e amigos.

Eu fiz um teste rápido usando o Fedora 26 / GCC 7.2 em uma 7ª geração do Core i5. Isso resultou em um fracasso, o que não foi surpresa:

$ CXXFLAGS="-DNDEBUG -g2 -O3 -fcf-protection=full -mcet" make
g++: error: unrecognized command line option ‘-fcf-protection=full’; did you mean ‘-fstack-protector-all’?
g++: error: unrecognized command line option ‘-mcet’; did you mean ‘-maes’?
make: *** [GNUmakefile:1057: cryptlib.o] Error 1

Eu visitei O que significam os sinalizadores em / proc / cpuinfo? em Unix & Linux Stack Exchange e eu não vi cet ou ibt flags.

Minha primeira pergunta é: que processadores Intel suportam CET?

Minha segunda pergunta é: o CET requer suporte ao kernel? Em caso afirmativo, o que os kernels Linux suportam?

    
por jww 30.10.2017 / 11:52

1 resposta

2

My first question is, what Intel processors support CET?

A partir de 20 de outubro de 2017, não há processadores Intel atualmente sendo vendidos que o suportem.

Intel hasn't officially commented on when CET will be featured in new CPUs for control flow integrity protection, but given the timing of the GCC work, hopefully we'll see it in place for Cannonlake or worst case Ice lake.

Tecnologia de aplicação de fluxo de controle começa a aterrissar no GCC 8

I performed a quick test using Fedora 26/GCC 7.2 on a 7th gen Core i5. It resulted in a failure, which was not surprising:

Você precisa usar uma versão do GCC que suporte esse recurso para usá-lo em seu programa. Isso significa que você vai querer usar o GCC 8.1 assim que for lançado. É improvável que o suporte ao kernel seja necessário, mas considerando que nenhum processador no mercado suporta atualmente, é quase impossível prever quais serão exatamente os requisitos.

No entanto, eu não vejo nenhuma indicação de suporte ao kernel seria necessário, uma vez que estas instruções que o GCC estaria usando são independentes da plataforma. Eu não ficaria chocado se os kernels adicionassem recursos, que usassem essas instruções para suas APIs no futuro.

A seguinte descrição parece relevante:

So Intel with CET is creating a shadow stack that the programmer, the normal system,has no control over. And the only data that are pushed and popped are the ones thathave implied use of the stack

Steve Gibson, Episódio 565

    
por 30.10.2017 / 20:51

Tags