
ein Tool, das entwickelt wurde, um trace-gesteuerte Cache-Angriffe gegen Software in der Secure World von TrustZone-fähigen ARMv8-Kernen durchzuführen und zu visualisieren
Cachegrab ist ein Tool, das entwickelt wurde, um trace-getriebene Cache-Angriffe gegen Software in der sicheren Welt von TrustZone-fähigen ARMv8-Kernen durchzuführen und zu visualisieren. Einen Überblick darüber, wie Cachegrab intern funktioniert, finden Sie in der Cachegrab Release-Ankündigung.
Es ist möglich, Cachegrab auf einem Android-Gerät zu verwenden. Da moderne Android-Versionen Kernelmodule nicht erlauben, sollten die Kerneloptionen CONFIG_MODULES und CONFIG_MODULE_UNLOAD aktiviert, der Kernel neu gebaut und auf das Gerät geflasht werden. Bauen Sie das Cachegrab-Kernelmodul gegen den Kernelquellcode und verwenden Sie insmod, um es in den laufenden Kernel des Zielgeräts einzufügen.
Als Nächstes bauen Sie den Cachegrab-Server und die Shim-Bibliothek und kopieren Sie beide nach /data/local/tmp. Starten Sie den Server. Verwenden Sie schließlich adb forward tcp:8000 tcp:8000, um den lokalen TCP-Port 8000 an den des Geräts zu binden.
Warnung: Der Server erlaubt dem Angreifer, beliebige Shell-Befehle anzugeben, um den Opfercode aufzurufen. Diese Befehle werden über HTTP übermittelt und mit Root-Rechten ausgeführt. Daher ist es entscheidend, dass sich das Testgerät, auf dem Cachegrab läuft, in einem vertrauenswürdigen Netzwerk befindet.
Laden Sie abschließend die Cachegrab-GUI und verbinden Sie sich mit localhost:8000.
Der Cachegrab-Client ist um die Idee einer Pipeline herum aufgebaut, die die Samples mit den Angriffsdaten verarbeitet. Pipelines bestehen aus einer Sample-Quelle, einer Liste von Filtern und einem Analysator. Die Sample-Quelle kann ein Ort im Dateisystem, ein Gerät mit dem Cachegrab-Server oder etwas Eigenes sein. Die Pipeline sammelt Samples aus der Quelle und leitet jedes durch die Filter in der Pipeline, die in der Lage sind, die Daten im Sample zu modifizieren. Schließlich werden die gefilterten Samples an den Analysator übergeben, der die endgültige Verarbeitung der Angriffsdaten durchführt.
Ein Großteil des Clients kann über die GUI bedient werden, die eine einfache Möglichkeit bietet, zwei nützliche Pipelines zu verwalten. Die erste Pipeline sammelt Samples von dem im Bereich „Scope“ konfigurierten Cachegrab-Server. Sie leitet diese Samples durch eine Reihe von Filtern und speichert die resultierenden gefilterten Samples in einem Datensatz. Datensätze können über die GUI importiert oder exportiert werden, was einen einfachen Transfer der Sample-Daten ermöglicht. Die zweite Pipeline entnimmt einem Datensatz Samples, führt diese durch eine weitere Reihe von Filtern und plottet die gefilterten Traces im Fenster.

Das Python-Modul des Cachegrab-Clients kann auch direkt verwendet werden, um ein Sammlungs- oder Analysescript zu erstellen. Das folgende Skript nimmt einen von der GUI exportierten Datensatz, verarbeitet die Traces in jedem Sample und gibt die resultierenden Daten aus.
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()