
uma ferramenta projetada para auxiliar na realização e visualização de ataques de cache trace-driven contra software no mundo seguro de núcleos ARMv8 com suporte a TrustZone
Cachegrab é uma ferramenta projetada para ajudar a realizar e visualizar ataques de cache guiados por rastreamento (trace-driven) contra software no mundo seguro de núcleos ARMv8 habilitados para TrustZone. Para uma visão geral de como o Cachegrab funciona internamente, veja o anúncio de lançamento do Cachegrab.
É possível usar o Cachegrab em um dispositivo Android. Como versões modernas do Android não permitem módulos de kernel, as opções de kernel CONFIG_MODULES e CONFIG_MODULE_UNLOAD devem ser habilitadas, o kernel recompilado e gravado no dispositivo. Compile o módulo de kernel do Cachegrab contra o código-fonte do kernel e use insmod para inseri-lo no kernel em execução do dispositivo de destino.
Em seguida, compile o servidor do Cachegrab e a biblioteca shim e copie ambos para /data/local/tmp. Inicie o servidor. Por fim, use adb forward tcp:8000 tcp:8000 para vincular a porta TCP local 8000 à do dispositivo.
Aviso: O servidor permite que o atacante especifique comandos shell arbitrários para invocar o código da vítima. Esses comandos são especificados via HTTP e executados com privilégios de root, portanto, é fundamental que o dispositivo de teste que executa o Cachegrab esteja em uma rede confiável.
Por fim, carregue a GUI do Cachegrab e conecte-se a localhost:8000.
O cliente do Cachegrab é estruturado em torno da ideia de um pipeline, que processa as amostras contendo os dados do ataque. Pipelines consistem em uma fonte de amostras, uma lista de filtros e um analisador. A fonte de amostras pode ser um local no sistema de arquivos, um dispositivo executando o servidor do Cachegrab ou algo personalizado. O pipeline coleta amostras da fonte e passa cada uma pelos filtros do pipeline, que são capazes de modificar os dados na amostra. Por fim, as amostras filtradas são passadas ao analisador, que faz o processamento final dos dados do ataque.
Grande parte do cliente pode ser interagida usando a GUI, que fornece uma maneira simples de gerenciar um par de pipelines úteis. O primeiro pipeline coleta amostras do servidor do Cachegrab configurado no painel "Scope". Ele passa essas amostras por uma série de filtros e armazena as amostras filtradas resultantes em um dataset. Datasets podem ser importados ou exportados usando a GUI, permitindo fácil transferência dos dados das amostras. O segundo pipeline pega amostras de um dataset, executa as amostras por outra série de filtros e plota os rastros filtrados na janela.

O módulo Python do cliente cachegrab também pode ser usado diretamente para criar um script de coleta ou análise. O script a seguir pega um dataset exportado pela GUI, faz algum processamento nos rastros de cada amostra e imprime os dados resultantes.
from cachegrab import Pipeline
from cachegrab.data import Dataset, Trace
from cachegrab.sources import DatasetSource
from cachegrab.filters import Filter
from cachegrab.sinks import AnalysisSink
class SampleFilter(Filter):
def filter(self, sample):
for t in sample.get_trace_names():
data = sample.get_trace(t).data
sample.set_trace(t, Trace(data - data.mean()))
return sample
class SampleAnalysis(AnalysisSink):
def analyze_once(self, sample):
for t in sample.get_trace_names():
print sample.get_trace(t).data
dataset = Dataset().load("exported_dataset_location")
pipeline = Pipeline(DatasetSource(dataset), SampleAnalysis())
pipeline.add_filter(SampleFilter())
pipeline.run()