1. Analysis of data storage
Using cross-platform tools on
mobile devices
Evaluatie van gegevensopslag door gebruik van cross-
platform tools op mobiele toestellen
Gilles Callebaut
KU Leuven, Ghent
21th June 2016
40. Contribution 4: Secure Storage extension
Security
40
ApplicationApplication
OS
DISK
• NO guaranteed
persistent storage
• NO use of symmetric
keys in recent android
version
• Guaranteed persistent
storage
• Symmetric keys in recent
android version
• 2 times faster!
48. Future Work
48
• For me
o Deployment other plugins
o NativeStorage
• Encryption
• WP support
• Future work
o Can files be manipulated faster?
o Are there many apps with weak file-transfer (allowAllHosts)?
o Including WP
o …
66. SecureStorageM
66
• Extra plugin to take advantage of symmetric keys in Android M (6.0)
• Transparent use of my plugin
o If(Android.version >= 6) use my plugin
• SecureStorage Plugin acts as delegate
o Backward compatible
o What If OS upgrades from < 6.0 to >= 6.0 ?
• First check if requested value is stored by means of the old mechanism
• Otherwise save with the new mechanism
• Possible improvement:
• Copy all values stored by ‘old’ mechanism to the new SSM
68. SecureStorageM - Improvement
68
• Performance improvement (300 ms → 150 ms)
o No symmetric key wrapping with asymmetric key
o One time over bridge per operation
• Improved behaviour (persistency)
o Before
• LocalStorage → not always persistent
• Possible to lose valuable information
70. Secure Storage
70
• Global static KeychainAccessibility
o Protect data with most strict protection class
• ThisDeviceOnly
• Not always possible because of global static configuration
71. EXTERN
Data Credential
Local
ADB backup
(explicit)
User supplied password
(OpenSSL)
(tested on LG-D802 running
Android 5.0.2)
Only compressed
(to .ab file)
(tested on LG-D802 running
Android 5.0.2)
Cloud
Google
Services
(prior to Android 6)
Plain text
(security of the data depends on the
security of the google account passcode)
Plain text
(Credentials of the
Android OS)
Google
Drive
(Android 6)
Encrypted
71
Security Concern No back-up EncryptedLegend
72. EXTERN
Data Credential
Local
iTunes
backup
remain encrypted
with the device’s
protection class keys
Only non-migratory
keychain items remain
wrapped with the UID-
derived key
Cloud iCloud backup
Backed up in their original encrypted
state ~ Data Protection classes
DP classes not accessible when locked,
per-file-key re-encrypted with key from
iCloud Backup keybag
remain encrypted
with the device’s
protection class keys
Escrow
keybag
System
keybag
Backup
keybag
72
idem
Security Concern EncryptedLegend
73. Security concerns back-up in Cordova
73
• AllowBackup (default true in Android)
o Not specified in Cordova
→ Saving ‘all’ application data
• BackupWebStorage (platforms/ios/cordova/defaults.xml &config.xml)
o Cloud (default)
→ Leakage of sensitive information to cloud-location
→ Limited storage → app can be banned from store
o Local (iTunes backup)
o None
78. Key-value storage performance
78
GET: <1 ms for all implementations
SET: <1 ms for all implementations, except NativeStorage (1,9 ms)
GET: <1 ms for all implementations, except plist (9,83 ms)
SET: <1 ms for all implementations
Load file as array
Cordova overhead +
asynchronous call-
backs + blocking till
write complete
79. 79
Storing and retrieving file
contents native and
through Cordova
SQLite SQLite
File API (plugin)
https://github.com/apache/cordova-plugin-file
File storage performance
Contribution 3: Performance Analysis
83. Database performance
83
Store 100 books, request
all books, delete 50
books and finaly request
all books again
SQLiteWebSQLSQLite PluginIndexedDB SQLite
87. NativeStorage
(Plugin)
LocalStorage
(HTML feature)
Supported Types
• Strings
• Booleans
• Numbers
• Objects
• Strings
Guaranteed persistent
storage ?
1
Platforms
• Android
• iOS
• Browser
• Webview
Supported Framework • Ionic • Ionic
App-private
NativeStorage
87
[1] W3 Expiring localstorage is well within the definitions of the spec (https://www.w3.org/TR/webstorage/#user-tracking)
iOS WebKit data stored in caches folder → can be cleared by OS (as of iOS 5)
88. Preliminary work
88
• Study (state-of-the-art)
o CPTs (What/Why/How)
o Secure Software
o Encryption mechanisms and
protocols
o Encryption model in iOS and
Android
o Back-up model iOS and Android
o Known Vulnerabilities in Cordova
o Cordova platform
o Cordova plugin development/usage
• Research
o Examine the inner workings of
Cordova platform
o Back-up model Android
• Programming skills
o Cordova CLI
o Javascript
o Objective C (iOS)
o Java (Android)
• Learn to deal with Apple products
90. Web applications and web-to-native wrappers Runtimes and source-code translators
Runtime Environment
OS
Application Code
90
INTRODUCTION
Motivation
Scope
Relevance
Goal
Approach
91. Full Disk Encryption
DEVICE
Data Credential
Private
• Internal Storage
Store private data on the device memory.
• Shared Preferences
Store private primitive data in key-value pairs.
• SQLite Databases
Store structured data in a private database.
KeyStore
Shared
• External Storage
Store public data on the shared external storage.
• SQLite Databases
KeyChain
(owned by system user)
Master-encryption
key
Only decrypted
in TEE
(non
exportable)
Secure World
91
92. File
Protection Classes
Keychain
Protection Classes
DEVICE
Data Class Protection (per file-cred.)
Data Credential
Private
• Property list (plist)
Structured data representation, e.g. XML, binary, ASCII.
• Core Data
Persistence storage of object graph.
• SQLite Databases
Store structured data in a private database.
• User Preferences
Persistence storage of objects in plist.
KeyChain
(can be shared between apps
from the same developer)
thisDeviceOnly
Full Disk Encryption
92
93. • Android
• File System encryption
o hardware-key
o Password
• iOS
• File System Encryption
o hardware-key (UID)
• Data Protection
o hardware-key (UID)
o Password (exc. None
class)
93
96. SecureStorageM – SWOT analysis
96
Internal
Strenghts Weaknesses
AES encryption (128/256 bit) IV plaintext stored, which can be visible and altered
when rooted
Secure Key storage management (Android KeyStore)
Key material never exposed to application process
Integrity check by means of GCM
External
Opportunities Threats
No keylength specification, the length is imposed by
Android, therefore, it can evolve with cryptographic
requirements
Usage of keys possible with root-access and code
execution
Some devices support hardware-backed keys
97. File transfer extension – SWOT analysis
97
Internal
Strenghts Weaknesses
Certificate pinning (on a CA level) If the site rotates its certificate on a regular basis, then
your application would need to be updated regularly
Certificates in app-private and read-only folder What when certificate expires?
External
Opportunities Threats
Based on certificate checking provided by subjacent
platform
Certificate revocation, when lost?
Bypass: Decompile/Patch/Recompile/Resign/Sideload
100. References
• [7] Security with https and ssl. URL http://developer.android.com/training/articles/security-ssl.htm.
access date: 09/02/2016.
• [8] The apple sandbox. URL https://media.blackhat.com/bh-dc-
11/Blazakis/BlackHat_DC_2011_Blazakis_Apple%20Sandbox-Slides.pdf. access date:
02/04/2016.
• [9] Web sql database, november 2010. URL https://www.w3.org/TR/webdatabase/. accessdate:
11/04/2016.
• [10] Phonegap documentation. docs.phonegap.com/en/edge/, 20115. Accessed: 11/07/2015.
• [11] Phonegap explained visually. http://phonegap.com/2012/05/02/phonegap-
explainedvisually/,Mei 2012. Accessed: 10/07/2015.
• [12] Phonegap, cordova, and what’s in a name? http://phonegap.com/2012/03/19/phonegap-
cordova-and-what%E2%80%99s-in-a-name/, Maart 2012. Accessed:10/07/2015.
101. References
• [13] Cross-platform developer tools 2012: Bridging the worlds of mobile apps and the web,
Februari2012.
• [14] Adobe phonegap build. https://build.phonegap.com, 2013. Accessed:10/07/2015.
• [15] How can html5 compete with native?, September 2013.
• [16] The phonegap developer app. app.phonegap.com, 2015. Accessed11/07/2015.
• [17] Cryptographic key length recommendation, semptember 2015. URL
https://www.keylength.com/en/compare/. access date: 12/04/2016.
• [18] Mobile top 10 2014 https://www.owasp.org/index.php/OWASP_Mobile_Security_Project, Juli
2015. Accessed
• [19] Smartphone os market share, q1 2015. http://www.idc.com/prodserv/smartphone-osmarket-
share.jsp, 2015. Accessed:10/07/2015.
• [20] Android encryption. https://source.android.com/devices/tech/security/encryption/, 2015.
Accessed: 13/08/2015.: 8/07/2015; 12/07/2015; 18/07/2015.
102. References
• [21] Android kernel security. https://source.android.com/devices/tech/security/overview/kernel-
security.html, 2015. Accessed: 13/08/2015.
• [22] Security-enhanced linux in android.
https://source.android.com/devices/tech/security/selinux/index.html, 2015. Accessed: 13/08/2015.
• [23] ios security, ios 8.3 or later, June 2015.
• [24] Ios application security part 20 – local data storage. http://resources.infosecinstitute.com/ios-
application-security-part-20-local-data-storage-nsuserdefaultscoredata-sqlite-plist-files/, 2015.
Accessed: 17/09/2015.
• [25] Sharedpreferences.editor, april 2016. URL
http://developer.android.com/reference/android/content/SharedPreferences.Editor.html. access
date: 05/04/2016.
103. References
• [26] Tim Cooijmans, Joeri de Ruiter, and Erik Poll. Analysis of secure key storage solutions on
android. In Proceedings of the 4th ACM Workshop on Security and Privacy in Smartphones&
Mobile Devices, SPSM ’14, pages 11–20, New York, NY, USA, 2014. ACM. ISBN 978-1-4503-
3155-5. doi: 10.1145/2666620.2666627. URL http://doi.acm.org/10.1145/2666620.2666627.
• [27] D. Chell and T. Erasmus, and S. Colley, and O. Whitehouse. The Mobile Appllication:
Hacker’s Handbook. John Wiley & Sons, Inc., 2015.
• [28] Daniel Eggert. Core data overview, september 2013. URL https://www.objc.io/issues/4-core-
data/core-data-overview/. access date: 16/03/2016.
• [29] Nikolay Elenkov. Android Security Internals: An In-Depth Guide to Android’s Security
Architecture. No Starch Press, San Francisco, CA, USA, 1st edition, 2014. ISBN 1593275811,
9781593275815.
• [30] Martin Georgiev, Suman Jana, and Vitaly Shmatikov. Breaking and fixing origin-based access
control in hybrid web/mobile application frameworks. In 21st Annual Network and Distributed
System Security Symposium, NDSS 2014, San Diego, California, USA, February 23-26, 2014,
2014. URL http://www.internetsociety.org/doc/breaking-and-fixing-originbased-access-control-hybrid-webmobile-application-frameworks.
104. References
• [31] Xing Jin, Xuchao Hu, Kailiang Ying, Wenliang Du, Heng Yin, and Gautam Nagesh Peri. Code
injection attacks on html5-based mobile apps: Characterization, detection and mitigation. In
Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security,
CCS ’14, pages 66–77, New York, NY, USA, 2014. ACM. ISBN 978-1-4503-2957-6. doi:
10.1145/2660267.2660275. URL http://doi.acm.org/10.1145/2660267.2660275.
• [32] D. Kaplan and R. Hay. Remote exploitation of the cordova framework, 2015.
• [33] Jorn Lapon. X.509 certifcates: A tutorial for android.
• [34] B. LeRoux. Phonegap for engineers, Maart 2011.
• [35] Tongbo Luo, Hao Hao, Wenliang Du, Yifei Wang, and Heng Yin. Attacks on webview in the
android system. In Proceedings of the 27th Annual Computer Security Applications Conference,
ACSAC ’11, pages 343–352, New York, NY, USA, 2011. ACM. ISBN 978-1-4503-0672-0. doi:
10.1145/2076732.2076781. URL http://doi.acm.org/10.1145/2076732.2076781.
105. References
• [36] Graeme Mawson. Introduction to custom cordova plugin development, februari 2015. URL
https://blogs.oracle.com/mobile/entry/introduction_to_custom_ cordova_plugin. access date:
02/04/2016.
• [37] Frank Piessens. Developing Secure Software Applications. November 2005.
• [38] T. terada. Whitepaper – attacking android browsers via intent scheme urls, Maart 2014.
• [39] Peter Teufl, Thomas Zefferer, and Christof Stromberger. Mobile device encryption systems. In
28th IFIP TC-11 SEC 2013 International Information Security and Privacy Conference, pages 203
– 216, 2013.
• [40] Peter Teufl, Thomas Zefferer, Christof Stromberger, and Christoph Hechenblaikner. Ios
encryption systems - deploying ios devices in security-critical environments. In SECRYPT, pages
170 – 182, 2013.
• [41] Peter Teufl, Andreas Gregor Fitzek, Daniel Hein, Alexander Marsalek, Alexander Oprisnik,
and Thomas Zefferer. Android encryption systems. In International Conference on Privacy &
Security in Mobile Systems, 2014. in press.
106. References
• [42] Daniel R. Thomas, Alastair R. Beresford, Thomas Coudray, Tom Sutcliffe, and Adrian Taylor.
The lifetime of android api vulnerabilities: case study on the javascript-to-java interface. In
Security Protocols XXIII, Lecture Notes in Computer Science. Springer International Publishing,
2015.
• [43] vision mobile. Cross-platform tools 2015, 2015. URL
http://www.visionmobile.com/product/cross-platform-tools-2015/. access date: 13/04/2016.
• [44] vision mobile. Developer economics state of the developer nation q1 2016, 2016. URL
http://www.visionmobile.com/product/developer-economics-stateof-developer-nation-q1-2016/.
access date: 13/04/2016.
• [45] Michiel Willocx, Jan Vossaert, and Vincent Naessens. A quantitative assessment of
performance in mobile app development tools. In Onur Altintas and Jia Zhang, editors, IEEE MS,
pages 454–461. IEEE, 2015. ISBN 978-1-4673-7284-8. URL
http://dblp.unitrier.de/db/conf/mobserv/mobserv2015.html#WillocxVN15.
• [46] X. Jin, X. Hu, K. Ying, W. Du, H. Yin, and G.N. Peri. Code Injection Attacks on HTML5-based
Mobile Apps: Characterization, Detection and Mitigation, November 2014.
Editor's Notes
Mijn thesis gaat over het analyseren van data opslag op mobiele toesten bij gebruik van crossplatform tools.
Meerdere mobiele platformen
Eigen programmeertalen en omgevingen
Zeer duur ontwikkeling -> meerdere platformen
Ontwikkelaars en bedrijven hebben vaak het geld niet om native te gaan ontwikkelen
Via CPT
Binnen 1 tool
Met 1 code base
Meerdere platformen eenvoudig en goedkoop gaan bereiken
Android en iOS hebben het grootste marktaandeel en worden ook om die reden bekeken.
Gedropt in een nieuwe wereld
Van mobiele application
CPT’s
Frameworks
…
Verschillende manieren om CPT te gaan ontwikkelen
1 uitgehaald: de web-to-native-wrapper
Bekendste en meest gebruikte
Cordova (PhoneGap)
Telefoon (figuur)
Webstandaarden: HTML CSS JS draaien als webcode in een webview
Deze webview wordt ompsloten door een native container
Via deze container is het mogelijk device API’s te gaan aanspreken
Architectuur (figuur)
Dieper kijken:
De webcode kan gaan communiceren met plugins
Plugins communiceren met native functionaliteten
Of anders voorgesteld:
De plugins bestaan uit:
JS, die voor alle platformen hetzelfde is en die door de webcode kan worden aangesproken
Native code, dus specifiek in Java in Android en Objective-C in iOS is geschreven die native dingen uitvoeren
In deze thesis heb enkele plugins ontworpen
Deze plugin
In NPM publiceren die dan toegankelijk zijn via een site van Cordova
In Github, vaak gebruikt bij verder ontwikkeling van de plugins (experimentele versie)
Doel
Veiligheids impact door het gebruik van Cordova bloot leggen
Adhv onderzoek van noodzakelijke security plugin
Coverage analyse
Kijken welke data strategieen bereikt kunnen worden in Cordova
Performantie analyse
Vergelijken van Cordova strategieen met native bereikbare strategieen
Daar boven op
Gezien tijdens thesis, nood aan aanvullingen
3 Plugins ontworpen
We zijn toegekomen aan het midden van ons verhaal
Eerst gekeken naar wat kunnen ontwikkelaars bereiken
Deze analyse zinvol voor ontwikkelaar -> zien kunnen we doen wat we willen
Native Storage plugin was een resultaat van deze analyse door een gebrek in de coverage
Performantie
Daarna performantie analyse van dezelfde strategieen die werden bekeken in de API coverage
Security
Als laatste werd er gekeken naar het veilig opslaan en verzenden van data
Waarbij dus 2 plugins werden ontwikkeld
Beginnen bij de API coverage
Opdeling van data
Databanken
Bestanden
Key-value paren (na klik)
Een key is een referentie naar een waarde die is opgeslagen
Vergelijkbaar met variabelen
Deze kunnen dus persistent opgeslagen worden
Encryptiesleutels
Cordova
Mogelijkheid tot het benaderen van elke van deze categorieen
Enkel…
Bij key-value paren
Wringt er nog iets
De gebruikte strategie bij uitstek is LocalStorage
Maar biedt geen garantie op persistent geheugen
Daarom NativeStorage plugin ontworpen
Die wel garantie biedt dat de variabele persistent is opgeslagen
En ondersteund Android en iOS , en na de zomervakantie hopelijk ook WP
Deze plugin an ook meer dan enkel strings opslaan
De stabiele versie is te vinden op NPM, en de experimentele op Github
De plugin duikt op op sites zoals Stackoverflow (post niet door mij) en fora als Ionic
Wordt frequent bezocht op Github
Daar is ook een indier opgesprongen die me bv een demo applicatie schreef
Veel downloads op NPM
En mails.. Veel enthousiaste mails :D
In de eerste maand al 1200 downloads!
(op einde ook het totaal aantal downloads erbij zetten)
Na de API coverage studie
Weten wat er nu bereikt kan worden
Performantie analyse
Vergelijken van de performantie in cordova tegenover native
Dus we bekijken
Databanken
Bestanden en
Key-value paren
Bij key-value opslag
Testen adhv opslaan of ophalen van string variabelen
Dit voor 1000 iteraties
Met als conclussie dat de gemiddelde operatie duur van het ophalen ne wegschrijven van 1 variabele minder dan 1 ms duurde en dus verwaarloosbaar klein was
Dan over naar databanken
Hierbij werd een applicatie ontworpen
Die enkele boeken wegschrijft naar de databank
En nadien terug inleest
Daarvan een deel weer verwijdert
En de resterende boeken terug inleest
De pijl duidt hierbij aan welke strategie de native strategie is namelijk SQLite
We zien rechts daarvan de strategieen die gebruik maken van SQLIte
En links daarvan IndexedDB die het bijzonder goed doet omwille van zijn geindexeerd zoeken
In iOS -> gelijkaardig, enkel wordt door indexedDB niet out-of-the-box ondersteund
De pijl duidt hierbij aan welke strategie de native strategie is namelijk SQLite
We zien rechts daarvan de strategieen die gebruik maken van SQLIte
En links daarvan IndexedDB die het bijzonder goed doet omwille van zijn geindexeerd zoeken
In iOS -> gelijkaardig, enkel wordt door indexedDB niet out-of-the-box ondersteund
Als laatste werd de perfomantie van bestandoperaties bekeken
Daarbij warden bestanden van verschillende groottes uitgelezen en weggeschreven
Daarboven op werd ook nog het geheugenverbruik opgemeten
Het duurt langer voor te lezen en schrijven in Cordova dan native
Het schrijven daarboven duurt nog veel langer dan het lezen in Cordova
Waarom Cordova ‘trager’:
Cordova abstractie boven het onderliggend platform
Buiten het native lezen en schrijven, nog veel communicatie om de JS-zijde te kunnen bereiken
Waarom schrijven > lezen:
Schrijven werd gedaan adhv binaire data
Deze data wordt eerst omgezet terug naar een String formaat alvorens te kunnen worden verzonden naar de native zijde
Deze data moet dan opnieuw opgeslagen worden in een binaire vorm
Bij het lezen werd er gewerkt met gewone Strings uitlezen waardoor deze overhead niet te zien is
=> dus nu komt de vraag van moet die omzetting gebeuren voor het te versturen naar de andere kant
Zou het niet eenvoudiger en dus sneller gaan als we gewoon dei nhoud van een bestand zonder poespas kunnen overzenden
Bij het geheugengebruik
Cordova snoept meer geheugen op
En daarom gelimiteerd in het gebruik van grote bestanden
Het is analoog in iOS
Het duurt langer voor te lezen en schrijven in Cordova dan native
Het schrijven daarboven duurt nog veel langer dan het lezen in Cordova
Waarom Cordova ‘trager’:
Cordova abstractie boven het onderliggend platform
Buiten het native lezen en schrijven, nog veel communicatie om de JS-zijde te kunnen bereiken
Waarom schrijven > lezen:
Schrijven werd gedaan adhv binaire data
Deze data wordt eerst omgezet terug naar een String formaat alvorens te kunnen worden verzonden naar de native zijde
Deze data moet dan opnieuw opgeslagen worden in een binaire vorm
Bij het lezen werd er gewerkt met gewone Strings uitlezen waardoor deze overhead niet te zien is
=> dus nu komt de vraag van moet die omzetting gebeuren voor het te versturen naar de andere kant
Zou het niet eenvoudiger en dus sneller gaan als we gewoon dei nhoud van een bestand zonder poespas kunnen overzenden
Bij het geheugengebruik
Cordova snoept meer geheugen op
En daarom gelimiteerd in het gebruik van grote bestanden
Het is analoog in iOS
Als laatste wordt er gekeken naar de veiligheid
Welke plugins bestaan er voor data veilig op te slaan en te versturen en zijn deze wel veilig genoeg?
Vooraleer over te gaan naar het beveiligen van data is het interessant om het backup mechanism te bregrijpen
2 mogelijkheden
Lokale backup -> op een laptop of computer
Cloud backup
Een backup wordt geinitaliseerd door de gebruiker van het toestel
Bij een backup kan dan data van applicaties worden geback’uped
Ontwikkelaars kunnen voor hun eigen applicaties bepaalde bestanden uitsluiten voor backup
Maw zeggen, deze bestanden mogen zeker niet gebackuped worden
Ze kunnen ook helemaal niet toelaten dat er iets van hun applicatie wordt gebackuped
Dus als data wordt overgezet naar een ander apparat
Kan het eenvoudiger ‘gekraakt’ worden of zelfs gewoon uitgelezen worden
Dus de eens zo veilige data op het apparat wordt onveilig opgeslagen ergens anders
Er zijn genoeg artikels te vinden waar gevoelige data wordt gelekt
Waar mss nu de meest besproken wel de ‘’de fappening’’ is
Die wss voor velen bekend om de oren klinkt
Maw het is nodig om data eerst te gaan encrypteren binnen de applicatie alvorens deze op te slaan
Daarvoor bestaat er de plugin: Secure Storage plugin
Deze heeft echter enkele gebreken
…
Ik heb een plugin geschreven die werkt bovenop deze plugin
Zodat in recente Android versie
Gebruik gemaakt kan worden van…
En is 2 maal sneller
We hebben nu onze data beveiligd op ons apparat
Nu moet data in transit ook beveiligd worden
Dit door het opzetten van een SSL kanaal
Daarvoor bestaat er een Cordova Core applicatie, FileTransfer
Een nadeel is echter als er wordt gewerkt met self signed certificates
Die certificaten worden niet herkend door het Android en iOS system
Er kans dus niet gecommuniceerd worden met de server
Daar biedt de plugin echter een opl voor:
Alle certificaten gewoon toelatten
Dus niet kijken of de server vertrouwd is
Hierdoor kan er dus eenvoudig meegesluiterd worden…
Een MiTM aanval, zoals ze dat noemen is dan eenvoudig genoeg
Mijn oplossing hierop is certificate pinning, wat wordt hierbij gedaan
1) De server stuurt zijn certificaat naar het apparat
2) In de applicatie wordt er gekeken of de server te vertouwen is
Door de certificaten die zijn opgeslagen in een read-only directory te gaan vergelijken met het certificaat van de server
Als het certificaat van de server ondertekend is door één van deze certificaten of dezelfde is =>
3) Opzetten van een veilig kanaal tussen de server en de applicatie op basis van dat certificaat
Ik ga alfsuiten met even te evalueren wat er juist gedaan is
Dus
Onderzoeken welke strategieen er toegankelijk zijn voor data te gaan opslaan in Cordova
Daarbij was de noodzaak gerezen van NativeStorage die dus persistente opslag gaat aanbieden en zeer actief gebruikt wordt en bijgestaan wordt door een actieve community
Nadien warden de onderzochte stragieen op de proef gesteld door een performantie analyse
Als laatste warden 2 polugins ontworpen die instonden voor veilige opslag van data op het apparat
En veilige bestandoverdracht tussen de server en de applicatie
Wat gebeurt er bij het lezen:
De inhoud van het bestand wordt native uitgelezen en wordt omgezet naar een JSON object.
Deze wordt verstuurd over de Cordova brug en toegankelijk gesteld aan de JS zijde in de webview.
In iOS wordt het leeuwendeel van de tijd gespendeerd aan het omzetten van de bestandsinhoud naar een JSON format verstaanbaar voor de andere zijde.
In Android wordt ook een groot deel gespendeerd aan het overbrengen van het JSON object.
Voor het wegschrijven van data heb ik de documentatie gebruikt, zoals ook vaak ontwikkelaars zullen doen.
Hierbij werd een binaire bestand (een blob) opgeslagen.
In Javascript werd echter eerst deze binaire data omgezet naar een String om via een JSON object te kunnen verzenden over de burg die daarna weer binair wordt weggeschreven.
Ook hier zal iOS lang bezig zijn in het omzetten van de binaire data naar een string in een JSON format.
Door de generische manier van het ontvangen en verzenden van data onder de vorm van een JSON format zorgt ervoor dat we hier veel tijd verliezen.
Als vervolgverhaal op mijn thesis zou handig zijn om te kijken of we niet eenvoudiger bestanden kunnen overbrengen. Waarbij we dus niet gebruik maken van de generische manier van transporteren.
Enerzijds hebben we IndexedDB die special is ontworpen om JS objecten eenvoudig op te slaan.
Dan hebben we native Sqlite, en 2 andere strategieen die Sqlite gebruiken.
Eerst wordt er gekeken hoe de secure storage is geimplementeerd in Android.
Als laatste werd er gekeken naar het veilig versturen van bestanden tussen het mobiele apparat en servers
Er wordt gewekt met een AES sleutel om eenvoudig strings te encrypteren, maar vermits Android (vroeger) niet toeliet symmetrische sleutels op te slaan wordt er gebruik gemaakt van een AES sleutel en encryptie in de browser.
Deze AES sleutel wordt dan geencrypteerd met de RSA sleutel aan de native zijde.
Problemen zijn echter dat:
Localstorage geen garantie bidet op persistente opslag
En dat vanaf Android 6 geen nood meer is aan een asymetrische sleutel, maar gewoon een symmetrische sleutel kan gebruikt worden
SecureStorageM is mijn plugin die de SecureStore plugin aanvult.
Dus wanneer deze plugin draait op een apparaat met Android 6 wordt mijn plugin gebruikt
Als het OS upgrades naar 6.0 dan wordt er eerst gekeken of de opgevraagde variabele werd opgeslagen op de oude manier, zo niet wordt mijn mechanisme gebruikt.
Uiteindelijk zo dit kunnen aangevuld worden door alle variabelen die zijn opgeslagen op de oude manier, via de nieuwe manier op te slaan.
Deze nieuwe manier gaat als volgt:
Waarbij GCM (Galois/Counter Mode) wordt gebruikt
In iOS
Zal secure storage zorgen dat er global kan worden gezegd wanneer variabelen toegankelijk zijn.
En deze toegankelijkheid is dan voor elke variable hetezelfde en dus statisch.
In Android zijn er dus een paar mogelijke sitauties waarbij applicatiedata eenvoudig kan ontgonnen worden uit een backup.
Hetzelfde verhaal geldt bij iOS waarbij data gewoon kan worden uitgelezen worden of via een offline brute-force attack kan worden verkregen
Zowel in Android als in iOS wordt er automatisch backups genomen, zonder tussenkomst van de ontwikkelaar.
Het is dus aan de ontwikkelaar om geode configuraties in te stellen
Als eerste moet data worden op het apparaat zelf worden beveiligd, dit kan door de secure storage plugin
Er moet dus een kennis zijn van de backup mechanismen in Android en iOS om te weten waar onze data kan belanden en welke veiligheidsmechanismen ermee gemoeid zijn.
Na de performantie en coverage analyse moet er gekeken worden hoe data beveiligd kan worden.
Als laatste wordt de opslag van key-value paren of persistente variabelen bekeken.
De performantie verschillen tussen de Cordova strategie en de native strategie wordt bekeken a.d.h.v. verschillende groottes van bestanden die worden uitgelezen en weggeschreven.
Hetzelfde kan gezegd worden in iOS.
Het is uiteraard niet verassend dat we zitten met ene performantieverschil, vermits Cordova een sort absractie vormt boven het onderliggend platform.
Maar het kan handig zijn om toch in kaart te brengen waar deze performantieverschillen net vandaan komen.
Er wordt ook een verhoogde vorm van memory consumptie waargenomen, wat de applicatiie limiteert in het werken met grote bestanden, tegenover de native ontwikkeling.
Om de performantie van databanken te gaan bekijken, werd er een simple applicatie ontworpen in elke strategie binnen Cordova en native Android en iOS. Deze applicatie voert enkele basis CRUD operaties.
Hetzelfde kan gezegd worden in iOS.
Echter is indexedDB hier momenteel niet out-of-the-box toegankelijk
We onderzoeken Cordova, de web-to-native-wrapper, in Andorid en iOS. We doen een se. Anylsis d.m.v. Native API coverage en defaults en voeren een performance analysis uit.
Cordova laat toe op databanken, bestanden, variabelen en credentials persistent op te slaan.
Dit is mogelijk door plugins en de webview.
Bij de persistente opslag van variabelen werd echter ingezien dat variabelen niet persistent warden opgeslagen, en dit ook niet kon worden gegrandeerd.
Daarom ontwikkelde ik de NativeStorage plugin.
Deze plugin zal gebruik maken van native componenten om variabelen persistent op te slaan.
Voor ik daadwerkelijk aan het eindwerk zelf kon beginnen moest ik eerst nog wat gaan onderzoeken en lezen.
Daarboven werd de encryptie en backup mechanismen van de onderliggende platformen, Android en iOS bekeken worden.
Ook warden enkele recente en grote kwetsbaarheden van Cordova bekeken om een idee te krijgen van de veiligheidsimpact dat Cordova had.
CPTs kunnen we onderdelen in 2 grote categegorien:
Web app en web-to-native.. Beiden maken gebruik van een kleine browser, een webview, die de webcontent toont. Bij web-2-native zal er kunnen gecommuniceerd worden met native componenten en resources. Cordova is een web-2-native.
Runtimes en source-code translators worden vaak tesamen gebruikt, waarbij code kan worden vertaalt en kan uitgevoerd worden op een runtime.
We hebben opslag onderverdeeld in twee categorien:
Data
Credentials
Deze kunnen we opslaan in private geheugen of shared geheugen, elke applicatie heft zijn eigen privaat geheugen waar andere applicaties geen toegang toe hebben, dit zal ook soms de container of sandbox worden genoemd.
In shared memory is geheugen die toegangelijk is voor alle applicaties en gebruikers.
We zien dat Android een paar opslagtypes aanbiedt voor dat en credentials.
Deze worden beveiligd met FDE, die gebaseerd is op een passcode en hardware-backed key.
De credentials worden tevens nog eens extra geencrypteerd is met een MEK die hardware-backed is.
Deze sleutels worden nooit teruggegeven aan de applicaties, deze blijven binnen de secure world.
In ios kunnen we dezelfde structuur hanteren, hier is er echter geen shared geheugen toegankelijk.
iOS gebruikt ook een FDE, maar bidet daarbovenop nog eens DP classes aan die zeggen wanneer sleutels in het hoofdgeheugen worden ingeladen. Het verschil tussen bestand en credentials DP classes is dat er bij de sleutels een optie is om de sleutels te verbieden om te migreren naar backups, deze blijven dan enkel toegankelijk op het apparat waarvan ze zijn eback-uped. Meer hierover op de volgende slide, bij de backups
Zoals eerder gezegd bestaat een cordova applicatie uit een webview, de kleine browser, en native componenten die kunnen communiceren met de webcontent a.d.h. de cordova libraries.
De webcontent die je inlaat of de thirdparty plugins die je installeert kunnen malicious software components bevatten, net zoals malicious CPT compilers.
Malicious applications kunnen met bijvoorbeeld IPC andere applicaties proberen aanvallen.
In het laatste geval kan een hacker het mobiele apparat aanvallen of een backup plaats.