
An Android HW Attestation demo
Questo repository accompagna un articolo di Quarkslab sull'attestazione delle chiavi hardware Android e serve a illustrarla.
È una piccola prova di concetto end-to-end che mostra un semplice bypass: un analista su un telefono rooted supera il controllo di attestazione hardware di un backend inoltrando l'attestazione a un secondo dispositivo pulito. Non viene falsificato nulla. Una catena di attestazione genuina, prodotta da un dispositivo non modificato e vincolata al nonce del backend stesso, viene inoltrata al posto della catena rifiutata del dispositivo rooted.
Scopo ed etica. Questo è materiale didattico per la ricerca sulla sicurezza. Usa HTTP semplice e disabilita i controlli di sicurezza apposta (indicatori "solo demo" ovunque). Eseguitelo sui vostri dispositivi e sul vostro backend, su una rete locale affidabile.
L'attestazione Keystore di un dispositivo rooted segnala un bootloader sbloccato, quindi il backend la rifiuta. Invece di attaccare la crittografia, l'analista intercetta la chiamata di attestazione dell'app e sostituisce una catena recuperata in tempo reale da un dispositivo pulito per la stessa sfida.
L'hook sostituisce KeystoreAttestation.generateAttestedKey(challenge) nell'app demo e non chiama mai il Keystore locale, quindi la catena del dispositivo rooted non viene mai generata. La catena inoltrata è genuina e supera i controlli di avvio verificato e quelli basati su hardware del backend.
Ogni componente ha il proprio README con tutti i dettagli; questo file li collega tra loro.
frida-server 17.16.4, con l'app demo installata.backend/requirements.txt)../gradlew assembleDebug).instrumentation/_agent.js) è incluso nel repository, quindi la ricompilazione è opzionale.Avviate i componenti in quest'ordine.
Backend. Su una macchina raggiungibile da entrambi i dispositivi:
cd backend
pip install -r requirements.txt
python3 attestation_backend.py # listens on 0.0.0.0:8080
Dispositivo pulito. Compilate e installate l'app del server di attestazione, poi apritela, toccate START SERVER e annotate l'URL mostrato, ad es. http://192.168.1.42:8080.
Dispositivo rooted. Avviate frida-server, compilate e installate l'app demo, apritela e inserite l'indirizzo del backend (host:port).
Entrambe le app si compilano da Android Studio o da riga di comando con il wrapper Gradle (./gradlew assembleDebug, JDK 17-21); consultate il README di ciascuna app per i dettagli.
Relay. Sulla postazione dell'analista:
cd instrumentation
python3 control.py --host <clean-device-ip> --port 8080
Il controller avvia l'app demo, installa l'hook e poi la riprende.
Innesco. Toccate RUN ATTESTATION nell'app demo. Il backend restituisce valido: la catena inoltrata segnala un bootloader bloccato.
Controllo negativo. Fermate control.py e toccate di nuovo . L'app demo ora invia la catena del dispositivo rooted e il backend la rifiuta. Questo è il controllo che il relay elude.
Ricompilazione dell'agente (solo se modificate agent/agent.ts):
cd instrumentation
nvm use # Node 22 from .nvmrc
npm install
npm run build # regenerates _agent.js
apps/
QuarkslabAttestationDemo/ target client app (Android Studio project)
QuarkslabAttestationServer/ clean-device attestation oracle (Android Studio project)
instrumentation/ Frida agent + relay controller
backend/ Python attestation validator
LICENSE MIT
Copyright 2026 Quarkslab. Sotto licenza MIT. Vedi LICENSE.
Questo repository illustra un articolo di Quarkslab.
| Componente | Percorso | Ruolo | Eseguito su |
|---|
| Client demo | apps/QuarkslabAttestationDemo/ | App target. Richiede un nonce, attesta, invia la catena al backend. Hookato da Frida. | Dispositivo di analisi rooted |
| Server di attestazione | apps/QuarkslabAttestationServer/ | Oracolo di attestazione. Produce una catena genuina per un dato nonce. Non valida nulla. | Dispositivo pulito e non modificato |
| Strumentazione | instrumentation/ | Agente Frida (l'hook) più il controller che inoltra il nonce al dispositivo pulito. | Postazione dell'analista + dispositivo rooted |
| Backend | backend/ | Parte fiduciaria (relying party). Emette nonce e valida le catene di attestazione. | Qualsiasi macchina raggiungibile dai dispositivi |