
инструмент, предназначенный для выполнения и визуализации trace-управляемых атак на кэш-память против программного обеспечения в защищённом мире ядер ARMv8 с поддержкой TrustZone
Cachegrab — это инструмент, предназначенный для выполнения и визуализации trace-driven атак на кэш против программного обеспечения в защищённом мире TrustZone-совместимых ядер ARMv8. Обзор того, как Cachegrab работает «под капотом», см. в анонсе релиза Cachegrab.
Использовать Cachegrab можно на устройстве Android. Поскольку современные версии Android запрещают модули ядра, параметры ядра CONFIG_MODULES и CONFIG_MODULE_UNLOAD должны быть включены, ядро пересобрано и прошито на устройство. Соберите модуль ядра Cachegrab из исходников ядра и используйте insmod для его загрузки в работающее ядро целевого устройства.
Затем соберите сервер Cachegrab и библиотеку-прослойку (shim) и скопируйте оба файла в /data/local/tmp. Запустите сервер. Наконец, используйте adb forward tcp:8000 tcp:8000, чтобы привязать локальный TCP-порт 8000 к порту устройства.
Предупреждение: Сервер позволяет атакующему задавать произвольные shell-команды для запуска кода жертвы. Эти команды передаются по HTTP и выполняются с root-привилегиями, поэтому крайне важно, чтобы тестовое устройство с Cachegrab находилось в доверенной сети.
Наконец, загрузите графический интерфейс Cachegrab и подключитесь к localhost:8000.
Клиент Cachegrab построен вокруг концепции конвейера (pipeline), который обрабатывает сэмплы, содержащие данные атаки. Конвейеры состоят из источника сэмплов, списка фильтров и анализатора. Источником сэмплов может быть расположение в файловой системе, устройство, на котором запущен сервер Cachegrab, или что-то своё. Конвейер собирает сэмплы из источника и пропускает каждый через фильтры конвейера, которые могут изменять данные в сэмпле. Наконец, отфильтрованные сэмплы передаются анализатору, который выполняет финальную обработку данных атаки.
Со значительной частью клиента можно взаимодействовать через графический интерфейс, который предоставляет простой способ управления парой полезных конвейеров. Первый конвейер собирает сэмплы с сервера Cachegrab, настроенного на панели «Scope». Он пропускает эти сэмплы через ряд фильтров и сохраняет полученные отфильтрованные сэмплы в наборе данных (dataset). Наборы данных можно импортировать или экспортировать через графический интерфейс, что упрощает передачу данных сэмплов. Второй конвейер берёт сэмплы из набора данных, прогоняет их через ещё один ряд фильтров и выводит отфильтрованные трассы на график в окне.

Модуль cachegrab для Python также можно использовать напрямую для создания скрипта сбора или анализа данных. Следующий скрипт берёт набор данных, экспортированный из графического интерфейса, выполняет некоторую обработку трасс в каждом сэмпле и выводит полученные данные.
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()