Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Prefazione
Introduzione
Destinatari del libro
Prerequisiti
Versioni di Android
Organizzazione del libro
Convenzioni
Ringraziamenti
L’autore
Il revisore tecnico
Capitolo 1 - Modello di sicurezza di Android
Architettura di Android
Kernel di Linux
Userspace nativo
Dalvik VM
Librerie di runtime Java
Servizi di sistema
Comunicazione tra processi
Binder
Implementazione di Binder
Sicurezza di Binder
Identità Binder
Sicurezza basata sulle capability
Token Binder
Accesso agli oggetti Binder
Altre funzionalità di Binder
Librerie del framework Android
Applicazioni
App di sistema
App installate dall’utente
Componenti delle app Android
Modello di sicurezza di Android
Sandboxing delle applicazioni
Permessi
IPC
Firma del codice e chiavi della piattaforma
Supporto multiutente
SELinux
Aggiornamenti del sistema
Boot verificato
Riepilogo
Capitolo 2 - Permessi
Natura dei permessi
Richiesta dei permessi
Gestione dei permessi
Livelli di protezione dei permessi
normal
dangerous
signature
signatureOrSystem
Assegnazione dei permessi
Permessi e attributi di processo
Assegnazione degli attributi di processo
Applicazione dei permessi
Applicazione a livello di kernel
Applicazione a livello di daemon nativo
Applicazione a livello di framework
Applicazione dinamica
Applicazione dinamica
Applicazione di permessi per activity e servizi
Applicazione di permessi ai content provider
Applicazione di permessi ai broadcast
Broadcast protetti e sticky
Permessi di sistema
Permessi di firma
Permessi di sviluppo
User ID condiviso
Permessi personalizzati
Componenti pubblici e privati
Permessi per activity e servizi
Permessi per i broadcast
Permessi per i content provider
Permessi per i provider statici
Permessi per i provider dinamici
Pending intent
Riepilogo
Capitolo 3 - Gestione dei package
Formato dei package di applicazione Android
Firma del codice
Firma del codice Java
Implementazione
Firma del file JAR
Verifica del file JAR
Visualizzazione o estrazione delle informazioni sul firmatario
Firma del codice Android
Strumenti di firma del codice Android
Firma del codice dei file OTA
Processo di installazione dei file APK
Posizione di dati e package delle applicazioni
Componenti attivi
Applicazione di sistema PackageInstaller
Il comando pm
PackageManagerService
Classe Installer
Il daemon installd
MountService
Il daemon vold
MediaContainerService
AppDirObserver
Installazione di un package locale
Parsing e verifica del package
Accettazione dei permessi e avvio del processo di installazione
Copia nella directory dell’applicazione
Scansione del package
Creazione di directory dati
Generazione di Optimized DEX
Struttura di file e directory
Aggiunta del nuovo package a packages.xml
Attributi dei package
Aggiornamento di componenti e permessi
Aggiornamento di un package
Verifica della firma
Aggiornamento delle app non di sistema
Aggiornamento delle app di sistema
Installazione di file APK crittografati
Creazione e installazione di un file APK crittografato
Implementazione e parametri di crittografia
Installazione di un file APK crittografato con verifica dell’integrità
Forward locking
Implementazione del forward locking di Android 4.1
Contenitori delle app crittografati
Installazione di file APK con forward locking
App crittografate e Google Play
Verifica dei package
Supporto di Android per la verifica dei package
Implementazione di Google Play
Riepilogo
Capitolo 4 - Gestione degli utenti
Panoramica sul supporto multiutente
Tipi di utenti
Utente primario (proprietario)
Utenti secondari
Profili con restrizioni
Restrizioni utente
Applicazione delle restrizioni
Accesso agli account online
Utente guest
Gestione degli utenti
Strumenti a riga di comando
Stati utente e broadcast correlati
Metadati utente
File dell’elenco utenti
File dei metadati utente
Directory di sistema utente
Gestione delle applicazioni per utente
Directory dati delle applicazioni
Condivisione delle applicazioni
Memoria esterna
Implementazioni della memoria esterna
Memoria esterna multiutente
Funzionalità di mounting Linux avanzate
Implementazione in Android
Permessi della memoria esterna
Altre funzionalità multiutente
Riepilogo
Capitolo 5 - Provider di crittografia
Architettura dei provider JCA
Provider del servizio di crittografia
Implementazione dei provider
Registrazione statica dei provider
Registrazione dinamica dei provider
Classi engine JCA
Recupero dell’istanza di una classe engine
Nomi degli algoritmi
SecureRandom
MessageDigest
Signature
Cipher
Modalità di funzionamento della cifratura a blocchi
Recupero di un’istanza di Cipher
Uso di un’istanza di Cipher
Mac
Key
SecretKey e PBEKey
PublicKey, PrivateKey e KeyPair
KeySpec
KeyFactory
SecretKeyFactory
KeyPairGenerator
KeyGenerator
KeyAgreement
KeyStore
Tipi di KeyStore
Keystore su file PKCS#12
CertificateFactory e CertPath
CertPathValidator e CertPathBuilder
Provider JCA di Android
Provider Crypto di Harmony
Provider Bouncy Castle di Android
Provider AndroidOpenSSL
OpenSSL
Uso di un provider personalizzato
Spongy Castle
Riepilogo
Capitolo 6 - Sicurezza di rete e PKI
Panoramica su PKI e SSL
Certificati a chiave pubblica
Trust diretto e CA private
Infrastruttura a chiave pubblica
Revoca dei certificati
Introduzione a JSSE
Socket sicuri
Autenticazione dei peer
Verifica del nome host
Implementazione JSSE di Android
Gestione e convalida dei certificati
Trust store di sistema
Trust store di sistema Android 4.x
Uso del trust store di sistema
API del trust store di sistema
Blacklisting dei certificati
Gestione delle compromissioni di chiavi CA
Gestione delle compromissioni di chiavi EE
Blacklisting dei certificati Android
Riesame del modello di trust PKI
Problemi di trust nella PKI odierna
Soluzioni radicali
Convergence e trust agility
Pinning dei certificati
Pinning dei certificati in Android
Riepilogo
Capitolo 7 - Archiviazione delle credenziali
Credenziali EAP per VPN e Wi-Fi
Certificati e chiavi di autenticazione
Archivio delle credenziali di sistema
Implementazioni dell’archivio delle credenziali
Servizio keystore
Tipi e versioni di key blob
Restrizioni di accesso
Implementazione del modulo keymaster e del servizio keystore
Implementazione con supporto hardware di Nexus 4
Integrazione nel framework
API pubbliche
API KeyChain
Classe KeyChain
Installazione di un file PKCS#12
Uso di una chiave privata
Installazione di un certificato CA
Eliminazione di chiavi e certificati utente
Recupero di informazioni sugli algoritmi supportati
Implementazione dell’API KeyChain
Controllo dell’accesso al keystore
KeyChainBroadcastReceiver
Riepilogo sulle credenziali e sul trust store
Provider keystore di Android
Riepilogo
Capitolo 8 - Gestione degli account online
Panoramica sulla gestione degli account in Android
Implementazione della gestione degli account
AccountManagerService e AccountManager
Moduli autenticatori
Cache del modulo autenticatore
Permessi e operazioni di AccountManagerService
Elenco e autenticazione degli account
Gestione degli account
Uso delle credenziali degli account
Richiesta di accesso con token di autenticazione
Database degli account
Schema delle tabelle
Accesso alle tabelle
Sicurezza mediante password
Supporto multiutente
Database degli account per utente
Account condivisi
Aggiunta di un modulo autenticatore
Supporto per gli account Google
Servizio di login Google
Autorizzazione e autenticazione per i servizi Google
ClientLogin
OAuth 2.0
Google Play Services
Riepilogo
Capitolo 9 - Sicurezza aziendale
Amministrazione del dispositivo
Implementazione
Gestione dei privilegi
Persistenza delle policy
Applicazione delle policy
Aggiunta di un amministratore del dispositivo
Implementazione di un amministratore del dispositivo
Impostazione del proprietario del dispositivo
Dispositivi gestiti
Integrazione degli account aziendali
Microsoft Exchange ActiveSync
Google Apps
Supporto VPN
PPTP
L2TP/IPSec
IPSec Xauth
VPN basate su SSL
VPN legacy
Implementazione
Archiviazione di profili e credenziali
Accesso alle credenziali
VPN always-on
VPN basate sulle applicazioni
Dichiarazione di una VPN
Preparazione della VPN
Effettuazione di una connessione VPN
Notifica all’utente della connessione VPN
Supporto multiutente
Routing avanzato di Linux
Implementazione di VPN multiutente
EAP Wi-Fi
Metodi di autenticazione EAP
Architettura Wi-Fi di Android
Gestione delle credenziali EAP
Aggiunta di una rete EAP con WifiManager
Riepilogo
Capitolo 10 - Sicurezza del dispositivo
Controllo dell’installazione e dell’avvio del sistema operativo
Bootloader
Recovery
Boot verificato
Informazioni generali su dm-verity
Implementazione in Android
Abilitazione del boot verificato
Crittografia del disco
Modalità di cifratura
Derivazione della chiave
Password di crittografia del disco
Modifica della password di crittografia del disco
Abilitazione della crittografia
Controllo della crittografia del dispositivo con le proprietà di sistema
Unmounting di /data
Attivazione del processo di crittografia
Aggiornamento del footer crypto e crittografia dei dati
Avvio di un dispositivo crittografato
Recupero della password di crittografia del disco
Decodifica e mounting di /data
Avvio di tutti i servizi di sistema
Sicurezza dello schermo
Implementazione della schermata di blocco
Metodi di sblocco del keyguard
Face Unlock
Sblocco mediante pattern
Sblocco mediante PIN e password
Sblocco mediante PIN e PUK
Protezione contro gli attacchi di forza bruta
Debug USB sicuro
Panoramica su ADB
Esigenza di ADB sicuri
Protezione di ADB
Implementazione sicura di ADB
Chiavi di autenticazione ADB
Verifica del fingerprint della chiave host
Backup in Android
Panoramica sul backup in Android
Backup nel cloud
Backup locale
Formato di file di backup
Crittografia del backup
Controllo dell’ambito del backup
Riepilogo
Capitolo 11 - NFC ed elementi sicuri
Panoramica su NFC
Supporto NFC in Android
Modalità Reader/Writer
Registrazione per il tag dispatching
Tecnologie dei tag
Lettura di un tag
Uso della modalità Reader
Modalità Peer-to-Peer
Modalità di emulazione delle card
Elementi sicuri
Fattori di forma SE nei dispositivi mobili
UICC
SE basati su microSD
SE incorporati
Accesso ai SE incorporati
Concedere l’accesso ai SE
Uso dell’API NfcExecutionEnvironment
Broadcast correlati agli eSE
Ambiente di esecuzione SE di Android
Protocolli di comunicazione SE
Interrogazione dell’ambiente di esecuzione eSE
UICC come elementi sicuri
Schede SIM e UICC
Applicazioni UICC
Implementazione e installazione di applicazioni UICC
Accesso allo UICC
Uso dell’API OpenMobile
Emulazione di card software
Architettura HCE di Android 4.4
Routing APDU
Specifica del routing per i servizi HCE
Specifica del routing per le applet SE
Scrittura di un servizio HCE
Sicurezza delle applicazioni HCE
Riepilogo
Capitolo 12 - SELinux
Introduzione a SELinux
Architettura di SELinux
Mandatory Access Control
Modalità di SELinux
Contesti di protezione
Assegnazione e persistenza del contesto di protezione
Policy di sicurezza
Istruzioni per le policy
Istruzioni per tipi e attributi
Istruzioni per utenti e ruoli
Istruzioni per classi di oggetti e permessi
Regole di transizione dei tipi
Regole di transizione dei domini
Regole dei vettori di accesso
Regole allow
Regole auditallow
Regole dontaudit
Regole neverallow
Implementazione in Android
Modifiche al kernel
Modifiche allo userspace
Librerie e strumenti
Inizializzazione del sistema
Etichettatura dei file
Etichettatura delle proprietà di sistema
Etichettatura dei processi applicativi
Middleware MAC
File di policy del dispositivo
Registrazione degli eventi delle policy
Policy SELinux di Android 4.4
Informazioni generali sulle policy
Applicazione dei domini
Domini unconfined
Domini delle app
Riepilogo
Capitolo 13 - Aggiornamenti di sistema e accesso root
Bootloader
Sblocco del bootloader
Modalità fastboot
Layout delle partizioni di Android
Protocollo fastboot
Comandi fastboot
Recovery
Recovery stock
Controllo del recovery
Sideloading di un package OTA
Verifica della firma OTA
Avvio del processo di aggiornamento del sistema
Applicazione dell’aggiornamento
Copia e applicazione di patch ai file
Impostazione di proprietà, permessi ed etichette di protezione dei file
Completamento dell’aggiornamento
Aggiornamento del recovery
Recovery personalizzati
Accesso root
Accesso root sulle build di engineering
Avvio di ADB come root
Uso del comando su
Accesso root sulle build di produzione
Rooting mediante modifica dell’immagine di boot o di sistema
Rooting mediante flashing di un package OTA
SuperSU
Inizializzazione di SuperSU
Accesso root sulle ROM personalizzate
Rooting tramite exploit
Riepilogo
← Prev
Back
Next →
← Prev
Back
Next →