Secure VoIP
Mobile Secure Communication Solutions for Enterprises April 2015
Marco Pozzato - CTO
marco.pozzato@privatewave.com
Emanuele Gambaro – Android Engineer
Emanuele.gambaro@privatewave.com
Agenda
●
Introduction
●
Network challenges
●
SW Engineering challenges
●
MultiPlatform challenges
●
Security challenges
Introduction
Privacy & Business threats
●
Industrial espionage
●
Mass surveillance
Secure Voice & Text Communications
Mobile Communications
●
GSM is insecure
●
Data Over Voice codec
●
CSD is phased out
●
→ SVOIP
Network challenges
Mobile Communications
Mobile data networks are evil
●
Packet loss
●
Burst based
●
Highly congested
●
TCP exponential backoff
●
VoIP block (censorship or contractual)
Network transparency myth!
Network challenges
Mobile Platforms for VIP
VIP smartphones in enterprises
●
Blackberry OS 5/6/7: push email
●
Iphone: cool device
●
Android: power users and geeks
●
Blackberry 10: strong security & EMM
Tech Guys are scaling organizations hierarchy
Multiplatform challenges
Porting from Blackberry 5
Blackberry VS Android
●
Differences between platforms
●
Our first try
●
Our final solution
Multiplatform challenges
Porting to BlackBerry 10
Blackberry 10 and Android runtime
●
Easy to port application from android
to Blackberry 10.3
●
...but a lot of missing important
features
●
Our solution: a native app
Multiplatform challenges
Zorg
Zorg – a cross-platform ZRTP library
●
What are ZRTP and ZORG?
●
Diffie-Hellman is slow in sw
● Embed standard BC with ECDH →
package name clash
Software engineering challenges
Multi-product codebase
One codebase, different products
●
Manage UI resources
●
Manage different languages and
product name
●
Manage different products from the
same source code
Software engineering challenges
Data In Transit
How to protect communications between
device and server
●
Using secure connections and PKI
●
Use only right ciphers
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
●
Trust only one Certificate Authority
Security challenges
Data At Rest / 1
How to protect key and password on
device
●
Android keystore support
●
Keystore bug
https://code.google.com/p/android/issues/detail?id=61989
● API changes from 4.x to Lollipop
Security challenges
Data At Rest / 2
How to protect user data on device
● Protect sqlite databases using sqlcipher for Android
● Secure logging
Security challenges
Randomness and entropy
Java SecureRandom bug
Our test on Samsung S3 with android 4.3
***** BUG FEED DATABASE *****
Run # 3987
Duplicates #15
Pid | seed
6945|96c8cf6b3c3f0786|2
6958|ade560b0c3d272f6|2
[...]
9378|0b9b08fe52b6003d|2
Our solution: using device microphone
Security challenges
Generate key from password
Use PBKDF2 as key derivation function
●
Generate strong encryption password
from PIN or password
●
Iteration tuning
●
Android charset bug
Security challenges
Vulnerability assessment
●
Made by third party company
●
Different methodologies
●
Some examples
Security challenges
Static analysis
Static analysis on android application
●
Goal of a static analysis
●
What can be found with static
analysis?
●
Common false positive
Security challenges
Links
● support.privatewave.com
● www.zrtp.org

Secure VoIP - DroidCon 2015

  • 1.
    Secure VoIP Mobile SecureCommunication Solutions for Enterprises April 2015 Marco Pozzato - CTO marco.pozzato@privatewave.com Emanuele Gambaro – Android Engineer Emanuele.gambaro@privatewave.com
  • 2.
    Agenda ● Introduction ● Network challenges ● SW Engineeringchallenges ● MultiPlatform challenges ● Security challenges
  • 3.
    Introduction Privacy & Businessthreats ● Industrial espionage ● Mass surveillance Secure Voice & Text Communications
  • 4.
    Mobile Communications ● GSM isinsecure ● Data Over Voice codec ● CSD is phased out ● → SVOIP Network challenges
  • 5.
    Mobile Communications Mobile datanetworks are evil ● Packet loss ● Burst based ● Highly congested ● TCP exponential backoff ● VoIP block (censorship or contractual) Network transparency myth! Network challenges
  • 6.
    Mobile Platforms forVIP VIP smartphones in enterprises ● Blackberry OS 5/6/7: push email ● Iphone: cool device ● Android: power users and geeks ● Blackberry 10: strong security & EMM Tech Guys are scaling organizations hierarchy Multiplatform challenges
  • 7.
    Porting from Blackberry5 Blackberry VS Android ● Differences between platforms ● Our first try ● Our final solution Multiplatform challenges
  • 8.
    Porting to BlackBerry10 Blackberry 10 and Android runtime ● Easy to port application from android to Blackberry 10.3 ● ...but a lot of missing important features ● Our solution: a native app Multiplatform challenges
  • 9.
    Zorg Zorg – across-platform ZRTP library ● What are ZRTP and ZORG? ● Diffie-Hellman is slow in sw ● Embed standard BC with ECDH → package name clash Software engineering challenges
  • 10.
    Multi-product codebase One codebase,different products ● Manage UI resources ● Manage different languages and product name ● Manage different products from the same source code Software engineering challenges
  • 11.
    Data In Transit Howto protect communications between device and server ● Using secure connections and PKI ● Use only right ciphers "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" ● Trust only one Certificate Authority Security challenges
  • 12.
    Data At Rest/ 1 How to protect key and password on device ● Android keystore support ● Keystore bug https://code.google.com/p/android/issues/detail?id=61989 ● API changes from 4.x to Lollipop Security challenges
  • 13.
    Data At Rest/ 2 How to protect user data on device ● Protect sqlite databases using sqlcipher for Android ● Secure logging Security challenges
  • 14.
    Randomness and entropy JavaSecureRandom bug Our test on Samsung S3 with android 4.3 ***** BUG FEED DATABASE ***** Run # 3987 Duplicates #15 Pid | seed 6945|96c8cf6b3c3f0786|2 6958|ade560b0c3d272f6|2 [...] 9378|0b9b08fe52b6003d|2 Our solution: using device microphone Security challenges
  • 15.
    Generate key frompassword Use PBKDF2 as key derivation function ● Generate strong encryption password from PIN or password ● Iteration tuning ● Android charset bug Security challenges
  • 16.
    Vulnerability assessment ● Made bythird party company ● Different methodologies ● Some examples Security challenges
  • 17.
    Static analysis Static analysison android application ● Goal of a static analysis ● What can be found with static analysis? ● Common false positive Security challenges
  • 19.

Editor's Notes

  • #3 Rapida introduzione sull'applicazione molto particolare che abbiamo realizzato e presentazione di diverse categorie di problemi che abbiamo incontrato e risolto
  • #4 L'esigenza che ci ha mosso sono le minacce alle privacy e al business causate da spionaggio industriale e sorveglianza di massa. La risposta consiste nell'utilizzo di strumenti di comunicazione sicura PrivateWave ha come mercato di riferimento l'utenza business, che ha requisiti molto particolari
  • #5 Nel 2011 Karsten dimostra con un Motorala da 20$ che è possibile fare un'intercettazione passiva Esistono codec per trasportare dati su canale voce lossy, ma la banda non è sufficiente CSD è in phase out e disponibile solo su Nokia Symbian L'unica soluzione è il VoIP
  • #6 Le reti mobile sono pessime Durante lo sviluppo non si può fare l'assunzione che la rete sia trasparente. E' una buona approssimazione solo se si opera su rete cablata o WiFi
  • #7 Storicamente la piattaforma più diffusa in ambito enterprise/management era BB per via delle email push che sono state la prima killer app su smartphone Iphone ha guadagnato velocemente terreno perchè è un oggetto cool, di design e di facile utilizza per un utenza non particolarmente avvezza alla tecnologia Android, più da power user sta crescendo. Ultimo arrivato è BB10
  • #8 Differenze tra BB e Android , J2ME 1.4 VS JAVA full 1.5 Differenti api di rete, di UI, di crittografia, di accesso alle risorse audio Primo tentativo: rifattorizzando tutto quanto. Risultato: BB non va più per problemi del compilatore Soluzione finale: astrarre solo la parte di libreria ZORG - ZRTP e mantenere due codebase diverse (aka due progetti svn diversi) ma che evolvono parallelamente in modo da tenerli il più possibili simili tra di loro
  • #9 Con bb 10.3 supporto quasi completo ad android e codice nativo Difficoltà di sviluppo su device Impossibilità di usare codice nativo sui simulatori Processo laborioso di firma pacchetto Supporto audio e interazioni chiamate GSM bacato No avvio al boot No custom mime type Multitasking (se chiudo app perdo la connessione, no headless) – no push notification Native app
  • #10 Cos’è ZRTP: protocollo di scambio chiavi per una chiamata sicura VoIP. Va via pacchetti RTP, scambio chiavi diffie-hellman, per cifrare telefonate end-to-end, la storia di zimmerman con noi Cos’è ZORG:implementazione opensource del protollo di key agreement ZRTP, disponibile in versione JAVA e C++ scritta originariamente per bb5 e facile da isolareImplementazione in android, più tutta la parte di media e RTP Problema: curve ellittiche necessarie per velocizzare lo scambio Diffie-Hellman (3000 bit su dispositivi mobili è lentissimo), ma le curve ellittiche non disponibili nella bouncycastle di sistema su android 2.x (introdotto in android 4.0) Soluzione: inglobare BC in pgsm ma problemi di package name
  • #11 Rebranding come creare differenti versioni dello stesso software con diverse risorse grafiche e testuali, x partner, roba del 2009 Risorge grafiche: SVG, generati automaticamente, differenti folder per differenti progetti e script di ANT, oppure a runtime, mentre su iphone solo roba statica Risorse testuali : idem + tool interno etc etc etc Custom package name: per varianti dello stesso prodotto, mantenere lo stesso codice e gli stessi package name ma aver la possibilità di creare diversi APK con differenti package name nel manifest. script ANT con aapt e opzione “--custom-package” Alla fine 4 prodotti con lo stesso codebase e “stesse risorse” fine parte multipiattaforma
  • #12 Cappello introduttivo su sip-http in TLS Scelta della CA comune a tutti i device mobile Validare correttamente le CA nell’ordine giusto (devono esser nell’ordine giusto, vecchie versione android validavano cmq) Validazione hostname + data scadenza + ente emittente freak: possibilità di forzare un server ad accettare chiavi crittografiche deboli, di brute force la comprometto e riesco a fare attacco man in the middle baco di openSSL scoperto a marzo 2015 rimedio? lato server escludendo cipher suite deboli Configurare le giuste cipher suite TLS-SSL evitare vecchie ciphers considerati insecuri (es RC4-SHA) e forzare solo roba sicura "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" ,"TLS_RSA_WITH_AES_256_CBC_SHA" ((SSLSocket) socket).setEnabledCipherSuites(ENABLED_CHIPER_SUITE); Certificate pinning? bloccarsi su una sola CA anche self signed, richiede modifiche al codice per validare certificati emessi da una specifica CA
  • #13 Usare android keystore perchè puoi salvare chiavi in maniera sicura e viene sbloccato all’avvio del telefono usando password secure element anche hardware su alcuni device Baco keystore 61989 di novembre 2013 while we were testing the new AndroidKeyStore with Android >= 4.3 (API 18), we have noticed that after creating a keypair with the KeyPairGenerator and using it, if we change the screen lock ( from PIN to Password for example ), the AndroidKeyStore is recreated empty and the previous generated keypair are deleted. https://code.google.com/ non c’è modo di proteggere pwd e chiavi usando l’OS, bisogna farlo livello applicativo Pin → chiave → cifro lo storage Non c’è nessun cache del pin in questo modo però, scomodo ma unico modo (su IOS si può)Futuro con sensore impronte digitali? con IOS si può
  • #14 passaggio da messaggi sicuri in ram a su device Devono esser protetti sullo storage per evitare dump Evitare anche dump post reset del device uso del pin cosa offre sqlcipher che modifiche richiede (codice nativo, poca roba java, definizione chiave di cifratura, esempio con hexdump, attenzione ai cursori, migrazione vecchio db) Logging sicuro: su scheda SD quindi non sicuro, evitare di loggare su logcat (esempio yahoo weather e banca mediolanum) - proguard java.util.logging per il rolling non loggare mai dati sensibili cifrare con stream cipher (aes counter mode, chiave cifrata con chiave pubblica dell’azienda) invio via email dei log usando aes per evitare accesso a supporto primo livello
  • #15 Agosto 2013: PRNG di JAVA non viene inizializzato correttamente in 4,3 e precedentiBaco scoperto da bitcoin : wear random number ---> furto di bitcoin Aveva una buona qualità, era l’init errata che dava problemi: bisogna inizializzare da una buona sorgente di entropia Soluzione: inizializzare esplicitamente da /dev/urandom or /dev/random Noi non eravamo affetti secure random generator inizializzato con 10 secondi di audio registrato all’avvio
  • #16 Scelta derivata dal keystore che fa schifo PBKDF2 Derivazione di una chiave crittografica iterativamente a partire da pin o password Numero di iterazioni? calcolare all’avvio quante ne può sopportare l’applicazione (vedere i tempi...mi pare 250ms) Problemi di retrocompatibilità: The PBKDF2 implementation in the 4.1.2 (and possibly earlier) versions discards the top 8 bits of unicode passwords.Successivamente fixato ma così genero chiavi differenti (Noi non ne siamo affetti, usiamo pin numerici)
  • #17 Analisi richiesta da grosse aziende per verificare il grado di sicurezza di un determinato software prima di decidere un eventuale acquisto o adozione. Fatte da aziende esterne, pagate apposta per trovare vulnerabilità Sia server che client. Differenti metodologie (es per il web e per il mobile) Agente software installato sul telefono, acesso a emmoria, dati applicativi, setting, database Intercettare il traffico
  • #18 Analisi statica codice per verificare vulnerabilità note ed errori comuni nel codice es: reader non chiusi algoritmi crittografici deboli sql injection main methods come codice di debug leak di informazioni sensibili all’utente o all’esterno dell’applicazione Submittare codice non offuscato Tanti falsi positivi (Es: invio di un pacchetto udp) e tanto codice esterno (es: ACRA, fixato e mandato su github) Utilizzo di md5 non come hash sicuro ma identificativo interno su cui eventuali collisioni non impattano la sicurezza. Mitigated by os / design. Vari livelli ()