Dependência do tempo de execução de instruções em dados em CPUs ARM e Intel

Eric Biggers, um dos desenvolvedores da cifra Adiantum e mantenedor do subsistema fscrypt do kernel Linux, propôs um conjunto de patches para bloquear problemas de segurança decorrentes de um recurso dos processadores Intel que não garante tempos de execução constantes para diferentes dados processados. O problema aparece nos processadores Intel começando pela família Ice Lake. Um problema semelhante é observado em processadores ARM.

A presença de dependência do tempo de execução das instruções dos dados processados ​​nestas instruções é considerada pelo autor dos patches como uma vulnerabilidade nos processadores, uma vez que tal comportamento não pode garantir a segurança das operações criptográficas realizadas no sistema. Muitas implementações de algoritmos criptográficos são projetadas para garantir que os dados não afetem o tempo de execução das instruções, e a violação desse comportamento pode levar à criação de ataques de canal lateral que recuperam dados com base na análise de seu tempo de processamento.

Potencialmente, a dependência de dados de tempo de execução também pode ser usada para lançar ataques para determinar dados do kernel do espaço do usuário. Segundo Eric Biggers, o tempo de execução constante não é fornecido por padrão mesmo para instruções que realizam operações de adição e XOR, bem como para instruções especializadas AES-NI (informações não confirmadas por testes, segundo outras fontes, há um atraso de um ciclo durante a multiplicação de vetores e contagem de bits).

Para desabilitar esse comportamento, Intel e ARM propuseram novos flags: PSTATE bit DIT (Data Independent Timing) para CPUs ARM e MSR bit DOITM (Data Operand Independent Timing Mode) para CPUs Intel, retornando o comportamento antigo com tempo de execução constante. A Intel e a ARM recomendam ativar a proteção conforme necessário para códigos críticos, mas, na realidade, a computação crítica pode ocorrer em qualquer lugar do kernel e do espaço do usuário, por isso estamos considerando ativar os modos DOITM e DIT para todo o kernel o tempo todo.

Para processadores ARM, o ramo do kernel Linux 6.2 já adotou patches que alteram o comportamento do kernel, mas esses patches são considerados insuficientes, pois cobrem apenas o código do kernel e não alteram o comportamento do espaço do usuário. Para processadores Intel, a inclusão da proteção está atualmente apenas em fase de revisão. O impacto do patch no desempenho ainda não foi medido, mas de acordo com a documentação da Intel, habilitar o modo DOITM reduz o desempenho (por exemplo, desabilitando algumas otimizações, como pré-carregamento específico de dados) e em modelos futuros de processador a redução de desempenho pode aumentar .

Fonte: opennet.ru

Adicionar um comentário