
Um framework de ataque prático para controle preciso de execução em enclave
SGX-Step é um framework de código aberto para facilitar a pesquisa de ataques de canal lateral em processadores Intel x86 em geral e em plataformas Intel SGX em particular. SGX-Step consiste em um driver adversarial do kernel Linux e uma pequena biblioteca de sistema operacional em espaço de usuário que permite configurar entradas de tabela de páginas não confiáveis e/ou interrupções de temporizador APIC x86 completamente a partir do espaço de usuário. SGX-Step tem sido utilizado em nossa própria pesquisa, bem como por pesquisadores independentes, para possibilitar vários ataques de execução em enclave novos e melhorados que coletam observações de canal lateral com resolução temporal máxima (isto é, interrompendo o enclave vítima após cada instrução individual).
Licença. SGX-Step é um software livre, licenciado sob GPLv3. O logotipo do SGX-Step é derivado da icônica série de fotos domínio público "Sallie Gardner at a Gallop" de Eadweard Muybridge, que, assim como nosso objetivo de execução passo a passo em enclave, decompõe a dinâmica do cavalo galopando em uma série de quadros fotográficos individuais para revelar propriedades gerais da marcha do cavalo.
| Lançamento do SGX-Step | Recursos do changelog |
|---|---|
| v1.5.0 | Correções de estabilização (KPTI, mapeamento ISR do kernel); porta (experimental) Gramine; suporte a IPI. |
| v1.4.0 | Portas privilegiadas de interrupção/chamada (Plundervolt). |
| v1.3.0 | Suporte a execução transiente (Foreshadow). |
| v1.2.0 | Tratamento de interrupção em espaço de usuário e filtragem determinística de passo zero (Nemesis). |
| v1.1.0 | Suporte a IA32. |
| v1.0.0 | Manipulação de tabela de páginas em espaço de usuário e execução passo a passo com temporizador APIC. |
Publicações. O SGX-Step tem sido empregado por vários grupos de pesquisa independentes e possibilitou uma nova linha de ataques SGX de alta resolução. Uma lista completa e atualizada de projetos conhecidos que usam SGX-Step está incluída no final deste README. Uma cópia do artigo original está disponível aqui.``` @inproceedings{vanbulck2017sgxstep, title = {{SGX-Step}: A Practical Attack Framework for Precise Enclave Execution Control}, author = {Van Bulck, Jo and Piessens, Frank and Strackx, Raoul}, booktitle = {2nd Workshop on System Software for Trusted Execution {(SysTEX)}}, publisher = {{ACM}}, pages = {4:1--4:6}, month = Oct, year = 2017, }
**Demonstração.** O diretório [app/memcmp](https://github.com/jovanbulck/sgx-step/blob/master/app/memcmp) contém uma pequena aplicação de demonstração que
ilustra o poder dos ataques SGX-Step ao executar passo a passo um enclave de exemplo
que contém lógica de comparação de senhas `memcmp` sutil e não constante em tempo.
Ao contrário dos tradicionais e notoriamente ruidosos ataques de temporização, o SGX-Step pode
realizar força bruta determinística da senha caractere por caractere em tempo _linear_:

## Visão Geral
Crucial para o design do SGX-Step, ao contrário de propostas anteriores de preempção de enclave,
é a criação de mapeamentos de memória virtual em espaço de usuário para locais de memória física
que contêm entradas de tabela de páginas, bem como para os registros de configuração de I/O
mapeados em memória do APIC local e para a Tabela de Descritores de Interrupção (IDT) do x86.
Isso permite que um processo host não confiável e controlado por atacante possa facilmente
(i) rastrear ou modificar entradas de tabela de páginas do enclave, (ii) configurar a fonte de
interrupção temporizadora one-shot/periódica do APIC, (iii) disparar interrupções entre
processadores e (iv) registrar manipuladores de interrupção personalizados completamente _dentro_
do espaço de usuário.

A figura acima resume a sequência de etapas de hardware e software ao
interromper e retomar um enclave SGX através do nosso framework.
1. A interrupção do temporizador do APIC local chega dentro de uma instrução enclavada.
2. O processador executa o procedimento AEX que armazena seguramente o contexto de execução
no frame SSA do enclave, inicializa os registradores da CPU e redireciona para o
manipulador de interrupção (em espaço de usuário) registrado na IDT.
3. Neste ponto, qualquer código espião específico de ataque pode ser facilmente inserido.
4. A biblioteca retorna ao trampolim AEP em espaço de usuário. Modificamos o runtime não
confiável do SDK oficial do SGX para permitir o fácil registro de um stub AEP personalizado.
Além disso, para permitir uma avaliação precisa da nossa abordagem em enclaves de depuração
de benchmark controlados pelo atacante, o SGX-Step pode _opcionalmente_ ser instrumentado para
recuperar o ponteiro de instrução armazenado do frame SSA do enclave interrompido
(usando a interface `/proc/self/mem` do Linux e a instrução `EDBGRD`).
5. Em seguida, configuramos o temporizador do APIC local para a próxima interrupção
escrevendo no registro de I/O mapeado em memória de contagem inicial, logo antes de
executar (6) `ERESUME`.
## Visão geral do código-fonte
Este repositório está organizado da seguinte forma:```
.
├── app -- Collection of sample client applications using SGX-Step to
│ attack different victim enclave scenarios.
├── doc -- Papers and reference material.
├── kernel -- Minimal dynamically loadable Linux kernel driver to export
│ physical memory to user space and bootstrap `libsgxstep`.
├── libsgxstep -- Small user-space operating system library that implements the
│ actual SGX-Step functionality, including x86 page-table and
│ APIC timer manipulations.
└── sdk -- Bindings to use SGX-Step with different SGX SDKs and libOSs.
O SGX-Step é um framework universal de controle de execução que permite o intercalamento preciso de instruções de enclave da vítima com código arbitrário do atacante. Alguns dos principais casos de uso do framework SGX-Step estão resumidos na figura abaixo (veja também o final deste README para uma lista atualizada de publicações que utilizam o SGX-Step).
