SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Android Security
Key Management
Roberto Gassirà (r.gassira@mseclab.com)
Roberto Piccirillo (r.piccirillo@mseclab.com)
Android Security
Key Management
Roberto Piccirillo
●  Senior Security Analyst - Mobile Security Lab
○  Vulnerability Assessment (IT, Mobile Application)
○  Hijacking Mobile Data Connection
■  BlackHat Europe 2009
■  DeepSec Vienna 2009
■  HITB Amsterdam 2010
○  Android Secure Development
@robpicone
Android Security
Key Management
Roberto Gassirà
●  Senior Security Analyst - Mobile Security Lab
○  Vulnerability Assessment (IT, Mobile Application)
○  Hijacking Mobile Data Connection
■  BlackHat Europe 2009
■  DeepSec Vienna 2009
■  HITB Amsterdam 2010
○  Android Secure Development
●  IpTrack Developer
@robgas
Android Security
Key Management
Agenda
●  Key Management e CryptoSystem
●  Mobile Application: protezione dei dati
●  Key Management in Android e sue evoluzioni
●  Keychain e AndroidKeyStore
●  Tipologie di AndroidKeyStore
●  Codelab
○  Generazione chiave pubblica/privata
○  Accesso AndroidKeyStore
○  Digital signature e Encryption
Android Security
Key Management
Key Management
"Key management is the management of
cryptographic keys in a cryptosystem."
Android Security
Key Management
CryptoSystem
●  "refers to a suite of algorithms needed to implement
a particular form of encryption and decryption"
●  Tipologie di encryption:
○  Symmetric Key Algorithms
■  Identical encryption key for
encryption/decryption
○  Asymmetric Key Algorithms
■  Different key for encryption/decryption
Android Security
Key Management
In app?
●  Protezione dati riservati
○  Dati dell'applicazione
○  Dati su /sdcard
○  Chiavi di cifratura
●  Scambio sicuro di dati
○  Documento
○  Mail
○  SMS
○  Chiave di sessione
●  Firma digitale
○  Documento
○  Mail
Android Security
Key Management
Key Management in Android
●  Application Level
○  File nell'applicazione ( Shared Prefs, File, ... )
○  Code Obfuscation
○  Generazione a run-time
Android Security
Key Management
Key Management in Android
●  "User" level
○  PBKDF2 (Password Based Key Derivation Function)
■  Algoritmo di generazione ( PBEWithSHA256And256BitAES-CBC-BC )
■  Salt
■  Numero di Iterazioni
●  System Level
○  KeyChain (da >= 4.0 )
○  AndroidKeyStore (ufficiale da >= 4.3)
Android Security
Key Management
KeyChain e AndroidKeyStore
●  KeyChain
○  Accessibile da qualunque applicazione
●  AndroidKeyStore
○  Accessibile alla singola applicazione ed al singolo utente
○  Memorizza solo coppia chiave pubblica/privata RSA 2048
Android Security
Key Management
Key Management Evolution
API LEVEL 14 API LEVEL 18
Global Level:
KeyChain
( Public API )
App Level:
KeyStore
( Closed API )
Global Level Only:
Default TrustStore
cacerts.bks
(ROOTED device)
Global Level:
KeyChain
( Public API )
App Level and
per User Level:
AndroidKeyStore
( Public API )
Android Security
Key Management
AndroidKeyStore Storage
●  Due tipologie di Storage
○  Hardware-backed (Nexus 7, Nexus
4, Nexus 5 :-) con OS >= 4.3)
○  Secure Element
○  TPM
○  TrustZone
○  Software only (Rimanenti dispositivi
con OS >= 4.3)
Android Security
Key Management
Storage?
import android.security.KeyChain;
if (KeyChain.isBoundKeyAlgorithm("RSA"))
// Hardware-Backed
else
// Software Only
Android Security
Key Management
AndroidKeyStore
in pratica
Android Security
Key Management
Cosa faremo
CodeLab diviso in 4 step:
1. Generazioni Chiavi
2. Accesso AndroidKeyStore
3. Firma e Verifica
4. Cifratura/Decifratura
Android Security
Key Management
Definizione Specifiche Certificato
Context cx = getActivity();
String pkg = cx.getPackageName();
Calendar notBefore = Calendar.getInstance();
Calendar notAfter = Calendar.getInstance();
notAfter.add(1, Calendar.YEAR);
import android.security.KeyPairGeneratorSpec.Builder;
Builder builder = new KeyPairGeneratorSpec.Builder(cx);
builder.setAlias(“DEVKEY1”);
String infocert = String.format("CN=%s, OU=%s", “DEVKEY1”, pkg);
builder.setSubject(new X500Principal(infocert));
builder.setSerialNumber(BigInteger.ONE);
builder.setStartDate(notBefore.getTime());
builder.setEndDate(notAfter.getTime());
KeyPairGeneratorSpec spec = builder.build();
Definizione Paramentri
Temporali
Self-Signed X.509
●  Common Name (CN)
●  Subject (OU)
●  Serial Number
Generazione delle specifiche del
Certificato
ALIAS per indicizzare
il certificato
Android Security
Key Management
Generazione chiave pubblica/privata
KeyPairGenerator kpGenerator;
kpGenerator = KeyPairGenerator
.getInstance("RSA", "AndroidKeyStore");
kpGenerator.initialize(spec);
KeyPair kp;
kp = kpGenerator.generateKeyPair();
Engine per generazione
chiave Privata/Pubblica
Istanza Engine con:
●  Algoritmo RSA
●  Provider: AndroidKeyStore
Init Engine con le specifiche del certificato
Dopo la generazione, le chiavi saranno memorizzate in
Android Key Store e potranno essere recuperate mediante l’ALIAS
●  Generazione chiave Privata/Pubblica
Android Security
Key Management
Abbiamo il riferimento keyStore che utilizzeremo per
accedere alla coppia chiave Pubblica/Privata mediante
l’identificativo ALIAS
Dovrebbe essere utilizzato nel caso si ha un
InputStream da caricare (per esempio il nome di un
KeyStore importato). Se non invocato l’applicazione
andrà in CRASH
Inizializzazione Android Key Store
keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
Richiesta di Android Key Store
Android Security
Key Management
RSA Digital Signature
●  Digital Signature
○  Authentication, Non-Repudiation and Integrity
○  RSA Private key to Sign
○  RSA Public Key to Verify
KeyStore.Entry entry = ks.getEntry(“DEVKEY1”, null);
byte[] data = “DevFest Rome 2013!”.getBytes();
Signature s = Signature.getInstance(“SHA256withRSA”);
s.initSign(((KeyStore.PrivateKeyEntry) entry).getPrivateKey());
s.update(data);
byte[] signature = s.sign();
String result = null;
result = Base64.encodeToString(signature, Base64.DEFAULT);
Accesso chiave Pubblica e Privata
identificata dall’ALIAS==DEVKEY1
Scelta dell’algoritmo
Chiave Privata per firmare
Firma e codifica in
Base64
Android Security
Key Management
Verify RSA Digital Signature
byte[] data = input.getBytes();
byte[] signature;
signature = Base64.decode(signatureStr, Base64.DEFAULT);
KeyStore.Entry entry = ks.getEntry(“DEVKEY1”, null);
Signature s = Signature.getInstance("SHA256withRSA");
s.initVerify(((KeyStore.PrivateKeyEntry) entry).getCertificate());
s.update(data);
boolean valid = s.verify(signature);
Decodifica Base64
Accesso chiave Pubblica e Privata
identificata dall’ALIAS==DEVKEY1
Scelta dell’algoritmo
Chiave Pubblica nel
certificato utilizzata per
verificare
TRUE == Verified
FALSE== Not Verified
Android Security
Key Management
RSA Encryption
●  Encryption
○  Confidentiality
○  RSA Public key to Encrypt
○  RSA Private key to Decrypt
PublicKey publicKeyEnc = ((KeyStore.PrivateKeyEntry) entry)
.getCertificate().getPublicKey();
String textToEncrypt = new String("DevFest Rome 2013");
byte[] textToEncryptToByte = textToEncrypt.getBytes();
Cipher encCipher = null;
byte[] encryptedText = null;
encCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
encCipher.init(Cipher.ENCRYPT_MODE, publicKeyEnc);
encryptedText = encCipher.doFinal(textToEncryptToByte);
Accesso alla chiave
pubblica per cifrare
●  Scelta algoritmo
●  Encryption con chiave
pubblica
Testo Cifrato
Android Security
Key Management
RSA Decryption
Cipher decCipher = null;
byte[] plainTextByte = null;
decCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
decCipher.init(Cipher.DECRYPT_MODE,
((KeyStore.PrivateKeyEntry) entry).getPrivateKey());
plainTextByte = decCipher.doFinal(ecryptedText);
String plainText = new String(plainTextByte);
Scelta algoritmo
Decryption con la
chiave privata
Decryption con chiave privata
Testo decifrato
Android Security
Key Management
Si osserva che...
●  Vari tipi di screen lock
●  La scelta di screen lock
impatta sulla persistenza
delle chiavi generate
●  Cambiando il tipo di screen
lock le chiavi vengono
cancellate
Android Security
Key Management
Comportamento atteso?
●  La documentazione riporta
●  Le chiavi non dovrebbero essere cancellate quando il
tipo di screen lock viene cambiato dall’utente
Android Security
Key Management
Cryptographic stuff on devices
●  Device con Storage “Hardware-backed”
●  Device con Storage “Software-only”
Android Security
Key Management
References
●  http://developer.android.com/about/versions/android-4.3.html#Security
●  http://developer.android.com/reference/java/security/KeyStore.html
●  http://en.wikipedia.org/wiki/Encryption
●  http://en.wikipedia.org/wiki/Digital_signature
●  http://nelenkov.blogspot.it/2013/08/credential-storage-enhancements-
android-43.html
●  http://nelenkov.blogspot.it/2012/05/storing-application-secrets-in-androids.html
●  http://nelenkov.blogspot.it/2012/04/using-password-based-encryption-on.html
●  http://nelenkov.blogspot.it/2011/11/ics-credential-storage-implementation.html
●  http://developer.android.com/reference/android/security/
KeyPairGeneratorSpec.html
Android Security
Key Management
Grazie
Q&A www.mseclab.com
www.consulthink.it
research@mseclab.com
Android Security
Key Management
Requisiti
●  Portatile
●  Eclipse con ADT Plugin 22.3.0
●  SDK Android 4.4 ( API 19 )
●  Android SDK Build-tools 19

Mais conteúdo relacionado

Mais procurados

FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019
FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019
FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019BL4CKSWAN Srl
 
SMobile Network Security: quanto sono sicure le reti cellulari?
SMobile Network Security: quanto sono sicure le reti cellulari?SMobile Network Security: quanto sono sicure le reti cellulari?
SMobile Network Security: quanto sono sicure le reti cellulari?SMAU
 
UNINFO - NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...
UNINFO -  NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...UNINFO -  NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...
UNINFO - NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...BL4CKSWAN Srl
 
Smau Milano 2016 - Marco Bozzetti, Aipsi
Smau Milano 2016 - Marco Bozzetti, AipsiSmau Milano 2016 - Marco Bozzetti, Aipsi
Smau Milano 2016 - Marco Bozzetti, AipsiSMAU
 
GFI OiS Data Security Proposition
GFI OiS Data Security PropositionGFI OiS Data Security Proposition
GFI OiS Data Security PropositionGianandrea Daverio
 
Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018
Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018
Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018Luca Moroni ✔✔
 
iDialoghi - ICT Security Consulting
iDialoghi - ICT Security ConsultingiDialoghi - ICT Security Consulting
iDialoghi - ICT Security ConsultingiDIALOGHI
 
Splunk live! roma 2015 HBG Gaming presentation
Splunk live! roma 2015  HBG Gaming presentationSplunk live! roma 2015  HBG Gaming presentation
Splunk live! roma 2015 HBG Gaming presentationGeorg Knon
 

Mais procurados (8)

FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019
FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019
FORUM CIG 2017 - Certificare sicurezza informazioni con ISO-IEC 27019
 
SMobile Network Security: quanto sono sicure le reti cellulari?
SMobile Network Security: quanto sono sicure le reti cellulari?SMobile Network Security: quanto sono sicure le reti cellulari?
SMobile Network Security: quanto sono sicure le reti cellulari?
 
UNINFO - NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...
UNINFO -  NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...UNINFO -  NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...
UNINFO - NUOVI TREND E NORME ISO/UNI - Blockchain, IoT, Big Data, Industry 4...
 
Smau Milano 2016 - Marco Bozzetti, Aipsi
Smau Milano 2016 - Marco Bozzetti, AipsiSmau Milano 2016 - Marco Bozzetti, Aipsi
Smau Milano 2016 - Marco Bozzetti, Aipsi
 
GFI OiS Data Security Proposition
GFI OiS Data Security PropositionGFI OiS Data Security Proposition
GFI OiS Data Security Proposition
 
Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018
Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018
Talk "Come Costruire un firewall Umano" Italian Hacker Camp 2018
 
iDialoghi - ICT Security Consulting
iDialoghi - ICT Security ConsultingiDialoghi - ICT Security Consulting
iDialoghi - ICT Security Consulting
 
Splunk live! roma 2015 HBG Gaming presentation
Splunk live! roma 2015  HBG Gaming presentationSplunk live! roma 2015  HBG Gaming presentation
Splunk live! roma 2015 HBG Gaming presentation
 

Destaque

Consulthink at ICT Security Forum 2013
Consulthink at ICT Security Forum 2013Consulthink at ICT Security Forum 2013
Consulthink at ICT Security Forum 2013Marco Pirrone
 
081210 Idcon 04 Itoh Peopleservice
081210 Idcon 04 Itoh Peopleservice081210 Idcon 04 Itoh Peopleservice
081210 Idcon 04 Itoh PeopleserviceHiroki Itoh
 
Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...
Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...
Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...Giovanni Capello
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsShelly Sanchez Terrell
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaChris Lema
 

Destaque (8)

Smart Press
Smart Press Smart Press
Smart Press
 
Retis innovation
Retis innovationRetis innovation
Retis innovation
 
Consulthink at ICT Security Forum 2013
Consulthink at ICT Security Forum 2013Consulthink at ICT Security Forum 2013
Consulthink at ICT Security Forum 2013
 
081210 Idcon 04 Itoh Peopleservice
081210 Idcon 04 Itoh Peopleservice081210 Idcon 04 Itoh Peopleservice
081210 Idcon 04 Itoh Peopleservice
 
R&D retis
R&D retisR&D retis
R&D retis
 
Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...
Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...
Nascita, evoluzione e consolidamento economico del nuovo mondo (Economia dell...
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and Adolescents
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
 

Semelhante a Consulthink at GDG Dev Fest Rome 2013 Android Key Management

Android (Un)Security Guidelines - VoidSec
Android (Un)Security Guidelines - VoidSecAndroid (Un)Security Guidelines - VoidSec
Android (Un)Security Guidelines - VoidSecPaolo Stagno
 
Crimini Informatici 2012
Crimini Informatici 2012Crimini Informatici 2012
Crimini Informatici 2012Gianni Amato
 
festival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2016
 
Pentesting Android with BackBox 4
Pentesting Android with BackBox 4Pentesting Android with BackBox 4
Pentesting Android with BackBox 4raffaele_forte
 
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...IBM Italia Web Team
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Codemotion
 
Code Review di Swascan
Code Review di SwascanCode Review di Swascan
Code Review di SwascanSWASCAN
 
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)SMAU
 
Android base day1
Android base day1Android base day1
Android base day1Andrea Zaza
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoDiego La Monica
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire AppCommit University
 
Il problema dei furti di identità nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identità nelle infrastrutture Cloud e possibili rimediIl problema dei furti di identità nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identità nelle infrastrutture Cloud e possibili rimediGiuseppe Paterno'
 
Sophos Complete Security: arte e scienza della sicurezza
Sophos Complete Security: arte e scienza della sicurezzaSophos Complete Security: arte e scienza della sicurezza
Sophos Complete Security: arte e scienza della sicurezzaBabel
 
Webinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo moderno
Webinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo modernoWebinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo moderno
Webinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo modernoPar-Tec S.p.A.
 
Workshop sulla Sicurezza Informatica
Workshop sulla Sicurezza InformaticaWorkshop sulla Sicurezza Informatica
Workshop sulla Sicurezza InformaticaNextre Engineering
 
Aspetti di sicurezza in azienda: gestione dei log aziendali
Aspetti di sicurezza in azienda: gestione dei log aziendaliAspetti di sicurezza in azienda: gestione dei log aziendali
Aspetti di sicurezza in azienda: gestione dei log aziendaliFrancesco Cossettini
 
Smau milano 2012 giuseppe paterno
Smau milano 2012 giuseppe paternoSmau milano 2012 giuseppe paterno
Smau milano 2012 giuseppe paternoSMAU
 
Il problema dei furti di identita' nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identita' nelle infrastrutture Cloud e possibili rimediIl problema dei furti di identita' nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identita' nelle infrastrutture Cloud e possibili rimediGiuseppe Paterno'
 
The Dark Side of the GDPR: dalla compliance alla formazione
The Dark Side of the GDPR: dalla compliance alla formazioneThe Dark Side of the GDPR: dalla compliance alla formazione
The Dark Side of the GDPR: dalla compliance alla formazionePar-Tec S.p.A.
 

Semelhante a Consulthink at GDG Dev Fest Rome 2013 Android Key Management (20)

Android (Un)Security Guidelines - VoidSec
Android (Un)Security Guidelines - VoidSecAndroid (Un)Security Guidelines - VoidSec
Android (Un)Security Guidelines - VoidSec
 
Crimini Informatici 2012
Crimini Informatici 2012Crimini Informatici 2012
Crimini Informatici 2012
 
festival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni webfestival ICT 2013: Sicurezza delle applicazioni web
festival ICT 2013: Sicurezza delle applicazioni web
 
Pentesting Android with BackBox 4
Pentesting Android with BackBox 4Pentesting Android with BackBox 4
Pentesting Android with BackBox 4
 
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
 
Code Review di Swascan
Code Review di SwascanCode Review di Swascan
Code Review di Swascan
 
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
SMAU PADOVA 2019 Luca Bonadimani (AIPSI)
 
Android base day1
Android base day1Android base day1
Android base day1
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Se.id profile rr
Se.id profile rrSe.id profile rr
Se.id profile rr
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
 
Il problema dei furti di identità nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identità nelle infrastrutture Cloud e possibili rimediIl problema dei furti di identità nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identità nelle infrastrutture Cloud e possibili rimedi
 
Sophos Complete Security: arte e scienza della sicurezza
Sophos Complete Security: arte e scienza della sicurezzaSophos Complete Security: arte e scienza della sicurezza
Sophos Complete Security: arte e scienza della sicurezza
 
Webinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo moderno
Webinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo modernoWebinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo moderno
Webinar 2 marzo 2021 - DevSecOps: la cybersecurity sposa lo sviluppo moderno
 
Workshop sulla Sicurezza Informatica
Workshop sulla Sicurezza InformaticaWorkshop sulla Sicurezza Informatica
Workshop sulla Sicurezza Informatica
 
Aspetti di sicurezza in azienda: gestione dei log aziendali
Aspetti di sicurezza in azienda: gestione dei log aziendaliAspetti di sicurezza in azienda: gestione dei log aziendali
Aspetti di sicurezza in azienda: gestione dei log aziendali
 
Smau milano 2012 giuseppe paterno
Smau milano 2012 giuseppe paternoSmau milano 2012 giuseppe paterno
Smau milano 2012 giuseppe paterno
 
Il problema dei furti di identita' nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identita' nelle infrastrutture Cloud e possibili rimediIl problema dei furti di identita' nelle infrastrutture Cloud e possibili rimedi
Il problema dei furti di identita' nelle infrastrutture Cloud e possibili rimedi
 
The Dark Side of the GDPR: dalla compliance alla formazione
The Dark Side of the GDPR: dalla compliance alla formazioneThe Dark Side of the GDPR: dalla compliance alla formazione
The Dark Side of the GDPR: dalla compliance alla formazione
 

Consulthink at GDG Dev Fest Rome 2013 Android Key Management

  • 1. Android Security Key Management Roberto Gassirà (r.gassira@mseclab.com) Roberto Piccirillo (r.piccirillo@mseclab.com)
  • 2. Android Security Key Management Roberto Piccirillo ●  Senior Security Analyst - Mobile Security Lab ○  Vulnerability Assessment (IT, Mobile Application) ○  Hijacking Mobile Data Connection ■  BlackHat Europe 2009 ■  DeepSec Vienna 2009 ■  HITB Amsterdam 2010 ○  Android Secure Development @robpicone
  • 3. Android Security Key Management Roberto Gassirà ●  Senior Security Analyst - Mobile Security Lab ○  Vulnerability Assessment (IT, Mobile Application) ○  Hijacking Mobile Data Connection ■  BlackHat Europe 2009 ■  DeepSec Vienna 2009 ■  HITB Amsterdam 2010 ○  Android Secure Development ●  IpTrack Developer @robgas
  • 4. Android Security Key Management Agenda ●  Key Management e CryptoSystem ●  Mobile Application: protezione dei dati ●  Key Management in Android e sue evoluzioni ●  Keychain e AndroidKeyStore ●  Tipologie di AndroidKeyStore ●  Codelab ○  Generazione chiave pubblica/privata ○  Accesso AndroidKeyStore ○  Digital signature e Encryption
  • 5. Android Security Key Management Key Management "Key management is the management of cryptographic keys in a cryptosystem."
  • 6. Android Security Key Management CryptoSystem ●  "refers to a suite of algorithms needed to implement a particular form of encryption and decryption" ●  Tipologie di encryption: ○  Symmetric Key Algorithms ■  Identical encryption key for encryption/decryption ○  Asymmetric Key Algorithms ■  Different key for encryption/decryption
  • 7. Android Security Key Management In app? ●  Protezione dati riservati ○  Dati dell'applicazione ○  Dati su /sdcard ○  Chiavi di cifratura ●  Scambio sicuro di dati ○  Documento ○  Mail ○  SMS ○  Chiave di sessione ●  Firma digitale ○  Documento ○  Mail
  • 8. Android Security Key Management Key Management in Android ●  Application Level ○  File nell'applicazione ( Shared Prefs, File, ... ) ○  Code Obfuscation ○  Generazione a run-time
  • 9. Android Security Key Management Key Management in Android ●  "User" level ○  PBKDF2 (Password Based Key Derivation Function) ■  Algoritmo di generazione ( PBEWithSHA256And256BitAES-CBC-BC ) ■  Salt ■  Numero di Iterazioni ●  System Level ○  KeyChain (da >= 4.0 ) ○  AndroidKeyStore (ufficiale da >= 4.3)
  • 10. Android Security Key Management KeyChain e AndroidKeyStore ●  KeyChain ○  Accessibile da qualunque applicazione ●  AndroidKeyStore ○  Accessibile alla singola applicazione ed al singolo utente ○  Memorizza solo coppia chiave pubblica/privata RSA 2048
  • 11. Android Security Key Management Key Management Evolution API LEVEL 14 API LEVEL 18 Global Level: KeyChain ( Public API ) App Level: KeyStore ( Closed API ) Global Level Only: Default TrustStore cacerts.bks (ROOTED device) Global Level: KeyChain ( Public API ) App Level and per User Level: AndroidKeyStore ( Public API )
  • 12. Android Security Key Management AndroidKeyStore Storage ●  Due tipologie di Storage ○  Hardware-backed (Nexus 7, Nexus 4, Nexus 5 :-) con OS >= 4.3) ○  Secure Element ○  TPM ○  TrustZone ○  Software only (Rimanenti dispositivi con OS >= 4.3)
  • 13. Android Security Key Management Storage? import android.security.KeyChain; if (KeyChain.isBoundKeyAlgorithm("RSA")) // Hardware-Backed else // Software Only
  • 15. Android Security Key Management Cosa faremo CodeLab diviso in 4 step: 1. Generazioni Chiavi 2. Accesso AndroidKeyStore 3. Firma e Verifica 4. Cifratura/Decifratura
  • 16. Android Security Key Management Definizione Specifiche Certificato Context cx = getActivity(); String pkg = cx.getPackageName(); Calendar notBefore = Calendar.getInstance(); Calendar notAfter = Calendar.getInstance(); notAfter.add(1, Calendar.YEAR); import android.security.KeyPairGeneratorSpec.Builder; Builder builder = new KeyPairGeneratorSpec.Builder(cx); builder.setAlias(“DEVKEY1”); String infocert = String.format("CN=%s, OU=%s", “DEVKEY1”, pkg); builder.setSubject(new X500Principal(infocert)); builder.setSerialNumber(BigInteger.ONE); builder.setStartDate(notBefore.getTime()); builder.setEndDate(notAfter.getTime()); KeyPairGeneratorSpec spec = builder.build(); Definizione Paramentri Temporali Self-Signed X.509 ●  Common Name (CN) ●  Subject (OU) ●  Serial Number Generazione delle specifiche del Certificato ALIAS per indicizzare il certificato
  • 17. Android Security Key Management Generazione chiave pubblica/privata KeyPairGenerator kpGenerator; kpGenerator = KeyPairGenerator .getInstance("RSA", "AndroidKeyStore"); kpGenerator.initialize(spec); KeyPair kp; kp = kpGenerator.generateKeyPair(); Engine per generazione chiave Privata/Pubblica Istanza Engine con: ●  Algoritmo RSA ●  Provider: AndroidKeyStore Init Engine con le specifiche del certificato Dopo la generazione, le chiavi saranno memorizzate in Android Key Store e potranno essere recuperate mediante l’ALIAS ●  Generazione chiave Privata/Pubblica
  • 18. Android Security Key Management Abbiamo il riferimento keyStore che utilizzeremo per accedere alla coppia chiave Pubblica/Privata mediante l’identificativo ALIAS Dovrebbe essere utilizzato nel caso si ha un InputStream da caricare (per esempio il nome di un KeyStore importato). Se non invocato l’applicazione andrà in CRASH Inizializzazione Android Key Store keyStore = KeyStore.getInstance("AndroidKeyStore"); keyStore.load(null); Richiesta di Android Key Store
  • 19. Android Security Key Management RSA Digital Signature ●  Digital Signature ○  Authentication, Non-Repudiation and Integrity ○  RSA Private key to Sign ○  RSA Public Key to Verify KeyStore.Entry entry = ks.getEntry(“DEVKEY1”, null); byte[] data = “DevFest Rome 2013!”.getBytes(); Signature s = Signature.getInstance(“SHA256withRSA”); s.initSign(((KeyStore.PrivateKeyEntry) entry).getPrivateKey()); s.update(data); byte[] signature = s.sign(); String result = null; result = Base64.encodeToString(signature, Base64.DEFAULT); Accesso chiave Pubblica e Privata identificata dall’ALIAS==DEVKEY1 Scelta dell’algoritmo Chiave Privata per firmare Firma e codifica in Base64
  • 20. Android Security Key Management Verify RSA Digital Signature byte[] data = input.getBytes(); byte[] signature; signature = Base64.decode(signatureStr, Base64.DEFAULT); KeyStore.Entry entry = ks.getEntry(“DEVKEY1”, null); Signature s = Signature.getInstance("SHA256withRSA"); s.initVerify(((KeyStore.PrivateKeyEntry) entry).getCertificate()); s.update(data); boolean valid = s.verify(signature); Decodifica Base64 Accesso chiave Pubblica e Privata identificata dall’ALIAS==DEVKEY1 Scelta dell’algoritmo Chiave Pubblica nel certificato utilizzata per verificare TRUE == Verified FALSE== Not Verified
  • 21. Android Security Key Management RSA Encryption ●  Encryption ○  Confidentiality ○  RSA Public key to Encrypt ○  RSA Private key to Decrypt PublicKey publicKeyEnc = ((KeyStore.PrivateKeyEntry) entry) .getCertificate().getPublicKey(); String textToEncrypt = new String("DevFest Rome 2013"); byte[] textToEncryptToByte = textToEncrypt.getBytes(); Cipher encCipher = null; byte[] encryptedText = null; encCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); encCipher.init(Cipher.ENCRYPT_MODE, publicKeyEnc); encryptedText = encCipher.doFinal(textToEncryptToByte); Accesso alla chiave pubblica per cifrare ●  Scelta algoritmo ●  Encryption con chiave pubblica Testo Cifrato
  • 22. Android Security Key Management RSA Decryption Cipher decCipher = null; byte[] plainTextByte = null; decCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); decCipher.init(Cipher.DECRYPT_MODE, ((KeyStore.PrivateKeyEntry) entry).getPrivateKey()); plainTextByte = decCipher.doFinal(ecryptedText); String plainText = new String(plainTextByte); Scelta algoritmo Decryption con la chiave privata Decryption con chiave privata Testo decifrato
  • 23. Android Security Key Management Si osserva che... ●  Vari tipi di screen lock ●  La scelta di screen lock impatta sulla persistenza delle chiavi generate ●  Cambiando il tipo di screen lock le chiavi vengono cancellate
  • 24. Android Security Key Management Comportamento atteso? ●  La documentazione riporta ●  Le chiavi non dovrebbero essere cancellate quando il tipo di screen lock viene cambiato dall’utente
  • 25. Android Security Key Management Cryptographic stuff on devices ●  Device con Storage “Hardware-backed” ●  Device con Storage “Software-only”
  • 26. Android Security Key Management References ●  http://developer.android.com/about/versions/android-4.3.html#Security ●  http://developer.android.com/reference/java/security/KeyStore.html ●  http://en.wikipedia.org/wiki/Encryption ●  http://en.wikipedia.org/wiki/Digital_signature ●  http://nelenkov.blogspot.it/2013/08/credential-storage-enhancements- android-43.html ●  http://nelenkov.blogspot.it/2012/05/storing-application-secrets-in-androids.html ●  http://nelenkov.blogspot.it/2012/04/using-password-based-encryption-on.html ●  http://nelenkov.blogspot.it/2011/11/ics-credential-storage-implementation.html ●  http://developer.android.com/reference/android/security/ KeyPairGeneratorSpec.html
  • 27. Android Security Key Management Grazie Q&A www.mseclab.com www.consulthink.it research@mseclab.com
  • 28. Android Security Key Management Requisiti ●  Portatile ●  Eclipse con ADT Plugin 22.3.0 ●  SDK Android 4.4 ( API 19 ) ●  Android SDK Build-tools 19