
una herramienta diseñada para ayudar a realizar y visualizar ataques de caché basados en trazas contra software en el mundo seguro de los núcleos ARMv8 con TrustZone
Cachegrab es una herramienta diseñada para ayudar a realizar y visualizar ataques de caché basados en trazas contra software en el mundo seguro de los núcleos ARMv8 con TrustZone. Para obtener una descripción general de cómo funciona Cachegrab internamente, consulte el anuncio de lanzamiento de Cachegrab.
Es posible usar Cachegrab en un dispositivo Android. Dado que las versiones modernas
de Android no permiten módulos del kernel, las opciones del kernel CONFIG_MODULES y
CONFIG_MODULE_UNLOAD deben estar habilitadas, el kernel debe recompilarse
y flashearse en el dispositivo. Compile el módulo del kernel de Cachegrab
contra el código fuente del kernel y use insmod para insertarlo en el kernel
en ejecución del dispositivo de destino.
A continuación, compile el servidor de Cachegrab y la biblioteca shim y copie ambos en
/data/local/tmp. Inicie el servidor. Finalmente, use
adb forward tcp:8000 tcp:8000 para vincular el puerto TCP local 8000 al
del dispositivo.
Advertencia: El servidor permite al atacante especificar comandos shell arbitrarios para invocar el código de la víctima. Estos comandos se especifican a través de HTTP y se ejecutan con privilegios de root, por lo que es fundamental que el dispositivo de prueba que ejecuta Cachegrab esté en una red de confianza.
Finalmente, cargue la GUI de Cachegrab y conéctese a localhost:8000.
El cliente de Cachegrab está estructurado en torno a la idea de un pipeline, que procesa las muestras que contienen los datos del ataque. Los pipelines consisten en una fuente de muestras, una lista de filtros y un analizador. La fuente de muestras puede ser una ubicación en el sistema de archivos, un dispositivo que ejecuta el servidor de Cachegrab o algo personalizado. El pipeline recopila muestras de la fuente y pasa cada una a través de los filtros del pipeline, que pueden modificar los datos de la muestra. Finalmente, las muestras filtradas se pasan al analizador, que realiza el procesamiento final de los datos del ataque.
Gran parte del cliente se puede manejar mediante la GUI, que proporciona una forma sencilla de gestionar un par de pipelines útiles. El primer pipeline recopila muestras del servidor de Cachegrab configurado en el panel "Scope". Pasa estas muestras a través de una serie de filtros y almacena las muestras filtradas resultantes en un dataset. Los datasets se pueden importar o exportar mediante la GUI, lo que permite transferir fácilmente los datos de las muestras. El segundo pipeline toma muestras de un dataset, las procesa a través de otra serie de filtros y representa las trazas filtradas en la ventana.

El módulo Python del cliente de Cachegrab también se puede usar directamente para crear un script de recopilación o análisis. El siguiente script toma un dataset exportado por la GUI, realiza algún procesamiento en las trazas de cada muestra e imprime los datos 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()