SlideShare uma empresa Scribd logo
1 de 89
Baixar para ler offline
Demystifying Security Best Practices
Conrad Stoll!
Architect
@conradstoll - conradstoll.com
So you want to make software secure?
Well, that’s easy.
Well, that’s easy.
Mobile devices are not secure.
Users assume security.
We are expected to !
secure our software.
Mutual Mobile
Products are judged by the !
quality of the user experience, !
and the absence of security issues.
Security is hard, and a lot of apps !
get it wrong.
goto fail;
Apple actually does take!
security very seriously.
http://images.apple.com/ipad/business/docs/iOS_Security_Feb14.pdf
Security is about being responsible !
with a user’s information.
The type of information your app
handles defines how secure !
it needs to be.
Not everyone is building a banking app.
Security is all about making tradeoffs.
Every app we build has an appropriate
balance between security!
and usability.
Security Best Practices!
(Demystified)
14!
things you can do to build!
more secure software
Number 1:!
NSLog
But logs are helpful!!
What could possibly go wrong?
1
Logging provides helpful debug
information but can accidentally leak
sensitive user data.
Dangers of Over Logging
• User passwords!
• Sensitive web requests!
• Locations!
• Never know what could be storing those
logs (other apps, add ons, etc.).
Any good lumberjack knows not to over-log.
Use a logging macro and limit the scope
of production logs.
How to prevent production logs
• Log only what is required.!
• Super sensitive data should not be logged.!
• Set different logging levels for release build.
Think before you log
#pragma mark - LOGGING
!
//---- To disable all Logs in release mode ----//
#ifdef DEBUG
#define UBLog( s, ... ) NSLog(s, ## __VA_ARGS__)
#else
#define UBLog( s, ... )
#endif
!
Logging Macro
Using a logging macro to programmatically disable logs
We wrote a script to analyze our code
and look for ‘NSLog’ in all of our files
that would fail the build if it found any.
Great case for writing tests
• Build scripts keep everyone honest.!
• Well suited for automation.!
• Works great with a Continuous Integration
system.
Run tests that verify you have no logs on your build system
ruby file_sieve.rb -d Classes/ -e UnionBankGlobals NSLog
Number 2:!
Fast App Switching
Hiding sensitive information when the
app goes to the background can be a
good idea to protect user privacy.
Hiding Sensitive Data
• Blur out sensitive data.!
• Remove sensitive data.!
• Obscure sensitive data.
Hide your kids, hide your text fields
PayPal does
this really well
#pragma mark - Security
!
- (void)applicationDidEnterBackground:(UIApplication *)application {
RootViewController *rootVC = (RootViewController *)self.window.rootViewController;
UIViewController *viewController = (UIViewController *)[rootVC.presentedViewControllers lastObject];
!
/**
If the last presented view controller is a SplashViewController we must not present the splash
screen again.
*/
if (![viewController isKindOfClass:[SplashViewController class]]) {
/**
We're presenting a splash screen when the app backgrounds as a privacy and security feature.
This view needs to block the UI so that a screenshot of sensitive data does not accidentally
get saved to the background.
*/
[self presentSplashViewController];
}
}
!
Hiding Sensitive Data
When the app enters the background
Number 3:!
SSL Pinning
Easy way to prevent MITM
^(make MITM much more difficult)
Compare a server’s certificate!
with a known certificate
Compare the exact certificate used in
the request with the known certificate
included in your app bundle.
Certificate Pinning
• Communication will fail after the certificate
expires.
More secure, but fragile
Compare a known public key to the
network request’s certificate public key.
Public Key Pinning
• Public key’s don’t change when certificates
expire.!
• One public key might be used for several
web services at a large company.
Still secure, less fragile
Built in support for SSL Pinning in 1.0
and 2.0.
AFNetworking
• Super easy to use implementation of SSL
Pinning.!
• AFSecurityPolicy on version 2.0.!
• Allows you to select between certificate or
public key pinning modes.
Most popular Objective-C library on GitHub!
Number 4:!
ARC PIE
An ARC PIE a day!
keeps memory attacks away
In all honesty, protecting against
memory attacks probably is not your job
as an application developer.
Being practical with memory attacks
• No, scribbling over NSString isn’t practical. !
• Don’t make it easy on an attacker.
So, how likely is this really?
1
ARC helps make sure you’re correctly
managing memory.
Use ARC
• Makes sure objects get released and
dealloc’d when they should be.
Don’t let objects you aren’t using stick around
Position Independent Execution
prevents memory address attacks. This
option is enabled by default in Xcode.
Keep PIE enabled
• Prevents an attack against specific memory
addresses.!
• Honestly, there’s no reason to disable this…
Who doesn’t like PIE?
Number 5:!
Keychain
The keychain is more secure if the user
sets a passcode on the device!
Device needs a PIN code
• There’s no way to tell if the user set a
passcode.!
• Encrypted with the device key, so they don’t
transfer to new devices.
Or a really long passcode
Best not to store a user’s password. Try
and store a hash or session token
instead.
Careful what you store in the keychain
• Access controls for when data becomes
available from the keychain.
Would you put your social security number there?
Number 6:!
NSUserDefaults
NSUserDefaults is a great place to store
basic app preferences or bits of state,
like whether or not this is the app’s first
launch. But it should NOT be used to
store anything sensitive.
NSUserDefaults != Keychain
• Unencrypted key value storage.!
• Should never be used to store anything
sensitive.
If you wouldn’t store it in the keychain, definitely don’t store it in NSUserDefaults!
1
Number 7:!
Text Fields
Autocorrect results are stored
unencrypted on the device.
Sensitive Autocorrect
• Autocorrect is disabled by default on secure
text fields.!
• Disable it on yours if you’re not using the
UITextInputTraits secureTextEntry property.!
• Consider disabling it anyway if you
anticipate sensitive data being entered into
a text field or text view.
Be careful what you allow to autocorrect
The pasteboard can be used to share
data between apps. A malicious app
could look for sensitive data on the
pasteboard.
UIPasteBoard
• Avoid storing sensitive data in the
pasteboard.!
• Disable copying on sensitive text input
fields.
Do you trust every app with your bank account number?
Expire sensitive content and mark it as
org.nspasteboard.ConcealedType.
UIPasteBoard
• http://nspasteboard.org!
• 1Password marks content as “concealed”.!
• 1Password removes content after 90
seconds by default.
Protect potentially sensitive pasteboard data
Number 8:!
Asking Permission
Being polite!
when asking for permission
Remember that context for your request
is very important.
How and when you ask is important
• Don’t ask on app launch or login.!
• Ask in response to a user action.!
• Only ask for what you clearly need.!
• Explain why you need permission.
Many users distrust software
Be considerate of a user’s permission,
and don’t overstep your bounds.
Treat user permission with respect
• Don’t copy the user’s address book.!
• Don’t log location data to the server.!
• Don’t transmit user data in the clear.!
• Don’t store passwords on your server.!
• Don’t record all of someone’s conversations
with their microphone and pick up words like
“soda” and attempt to turn around and sell
them “Coke”.
Be a good house guest
Permission Resources
• http://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/
Helpful sites talking about permission
Number 9:!
Local Storage
Downloading a file using
NSURLSessionDownloadTask gives
you the ability to download in the
background, but removes the ability to
encrypt files on the fly.
Implementation Trade Offs
• Is it ok to have a file stored in the clear for
10 seconds?!
• What if you know the user is in physical
possession of the device?!
• Would this concern prevent you from
supporting “open in” or “open with” features?
Theoretical versus Practical
Storing data locally can help improve
the user experience. Here’s some things
you can feel pretty safe about storing.
Good things to store
• Most user-generated photography!
• Most user-generated content (todo list)!
• Publicly available content!
• Podcasts, music, videos!
• Application metadata database!
• Application preferences!
!
Pretty much zero risk of storing this kind of stuff
Some apps deal with sensitive data, and
storing this on the device can be
dangerous.
Bad things to store
• Personal medical information!
• Personal financial information!
• Copyrighted content!
• Secret corporate information!
!
Storing this stuff should keep you up at night
Sometimes you want to use Core Data
even though you can’t store anything.
In-Memory Core Data
• In-Memory store is pretty fast!
• Great for facilitating object graph
management and fetching/sorting!
• Easy way to use Core Data if persistence
isn’t an option or a requirement!
!
Core Data, but without the storage part
Number 10:!
Encryption
Use the latest file encryption provided
by common crypto.
File Encryption
• AES 256!
• User generated encryption key
AES all the things!
Pass the salt.
Data Protection APIs provide an easy to
use baseline protection for files on disk.
Data Protection
• Available in iOS 4.0.!
• Enabled by default now in iOS 7.0.!
• Protected by the user passcode and device
key.!
• Makes it harder to access files, but can be
defeated with physical access to the device.!
• Far more secure if the user sets a
passcode.
Apple wants to make this easy for you
Sometimes you really need an
encrypted database. When you do,
there’s NSIncrementalStore +
Encryption.
Encrypted Core Data
• Implement your own encrypted Core Data
persistent store.!
• Several existing implementations are
available.!
• Core Data is already a complex system.
Encrypted Core Data is obviously even
more complex.!
• Consider using a file based encryption
system for small bits of data.
Core Data + Incremental Store + Encryption. What could possibly go wrong?
Encryption Resources
• http://www.stoeger-it.de/en/secureincrementalstore/!
• https://github.com/project-imas/encrypted-core-data!
• http://adcdownload.apple.com//videos/wwdc_2012__sd/
session_714__protecting_the_users_data.mov!
• http://blog.agilebits.com/2013/03/09/guess-why-were-moving-to-256-bit-aes-keys/
Helpful sites talking about encryption
Number 11:!
UIWebView
Prevent local network spoofing attacks
by only allowing UIWebView requests to
specific domains.
Whitelist domains in web views
• Compare requests made by your web view
to a specific list of domains.!
• Enforce HTTPS on all requests from the
web view.
Support safe browsing
#pragma mark - Security
!
/*
Only allow the web view to load requests to whitelisted domains in order to prevent
phishing attacks.
*/
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
if ([self shouldAllowWebViewNavigationToURLRequest:request]) {
return YES;
}
!
[self presentUnsafeBrowsingWarningForRequest:request];
!
return NO;
}
Whitelisting Domains
Teaching someone how not to phish
Web views don’t get challenge
callbacks, so it is hard to implement SSL
Pinning with them (though not
impossible).
No SSL Pinning Support
• Try not to use web views for anything super
sensitive.!
• If you’re relying on a web view for most of
your app, its worth going to the trouble of
bootstrapping SSL Pinning for it.
UIWebView doesn’t benefit from SSL Pinning elsewhere in your app
WebView Resources
• https://www.isecpartners.com/blog/2013/february/ssl-pinning-on-ios.aspx!
• http://stackoverflow.com/questions/11573164/uiwebview-to-view-self-signed-websites-no-private-
api-not-nsurlconnection-i
Helpful sites talking about web views
Number 12:!
Third Party Libraries
Hope is NOT a strategy
You’re responsible for what third party
libraries are doing in your app. If you’re
following the rules above, make sure
they are too.
Third Party Library Security!
• Check and see if they are writing anything to
disk.!
• Look at their networking code to see what
they’re sending over the air.!
• Check on their implementation of debug
logging and whether or not it can be
disabled.
Hope is not a strategy. Make sure libraries are secure.
Number 13:!
Enterprise MDM
There’s lots of powerful security
features in MDM. If you’re building an
enterprise app, make sure your client
knows about this!
If you’re building an enterprise app…
• Force device passcode!
• Per-app VPN!
• Configuration enforcement!
• Encrypted backups!
• Remote wipe
Use MDM Features
Number 14:!
Have a Backup Plan
You can always use a remote server to
force an update. You can lock out the
app in the event of a security breach,
and force users to install the update that
fixes it.
If all else fails…
• Gives you a pretty heavy hammer.!
• Easy to implement.!
• Important for high-risk apps like banking.
The last one standing blows the bridge.
Thanks!!
Secure all the things!
Conrad Stoll!
@conradstoll - conradstoll.com
CocoaConf Austin 2014 | Demystifying Security Best Practices

Mais conteúdo relacionado

Mais procurados

iOS Application Penetation Test
iOS Application Penetation TestiOS Application Penetation Test
iOS Application Penetation Test
JongWon Kim
 

Mais procurados (20)

Smart Bombs: Mobile Vulnerability and Exploitation
Smart Bombs: Mobile Vulnerability and ExploitationSmart Bombs: Mobile Vulnerability and Exploitation
Smart Bombs: Mobile Vulnerability and Exploitation
 
Are Your Mobile Apps Secure? (Part I)
Are Your Mobile Apps Secure? (Part I)Are Your Mobile Apps Secure? (Part I)
Are Your Mobile Apps Secure? (Part I)
 
Dark Side of iOS [SmartDevCon 2013]
Dark Side of iOS [SmartDevCon 2013]Dark Side of iOS [SmartDevCon 2013]
Dark Side of iOS [SmartDevCon 2013]
 
Smart Bombs: Mobile Vulnerability and Exploitation
Smart Bombs: Mobile Vulnerability and ExploitationSmart Bombs: Mobile Vulnerability and Exploitation
Smart Bombs: Mobile Vulnerability and Exploitation
 
Mobile Hacking
Mobile HackingMobile Hacking
Mobile Hacking
 
Owasp mobile top 10
Owasp mobile top 10Owasp mobile top 10
Owasp mobile top 10
 
Harbin clinic iot-mobile-no-vid
Harbin clinic iot-mobile-no-vidHarbin clinic iot-mobile-no-vid
Harbin clinic iot-mobile-no-vid
 
Mobile Application Security Code Reviews
Mobile Application Security Code ReviewsMobile Application Security Code Reviews
Mobile Application Security Code Reviews
 
Hacking Mobile Apps
Hacking Mobile AppsHacking Mobile Apps
Hacking Mobile Apps
 
Security best practices for regular users
Security best practices for regular usersSecurity best practices for regular users
Security best practices for regular users
 
Login cat tekmonks - v3
Login cat   tekmonks - v3Login cat   tekmonks - v3
Login cat tekmonks - v3
 
Owasp for testing_mobile_apps_opd
Owasp for testing_mobile_apps_opdOwasp for testing_mobile_apps_opd
Owasp for testing_mobile_apps_opd
 
Help Doctor, my application is an onion!
Help Doctor, my application is an onion!Help Doctor, my application is an onion!
Help Doctor, my application is an onion!
 
Fragments-Plug the vulnerabilities in your App
Fragments-Plug the vulnerabilities in your AppFragments-Plug the vulnerabilities in your App
Fragments-Plug the vulnerabilities in your App
 
Malware on Smartphones and Tablets - The Inconvenient Truth
Malware on Smartphones and  Tablets  - The Inconvenient  TruthMalware on Smartphones and  Tablets  - The Inconvenient  Truth
Malware on Smartphones and Tablets - The Inconvenient Truth
 
Robots, Ninjas, Pirates and Building an Effective Vulnerability Management Pr...
Robots, Ninjas, Pirates and Building an Effective Vulnerability Management Pr...Robots, Ninjas, Pirates and Building an Effective Vulnerability Management Pr...
Robots, Ninjas, Pirates and Building an Effective Vulnerability Management Pr...
 
iOS Application Penetation Test
iOS Application Penetation TestiOS Application Penetation Test
iOS Application Penetation Test
 
An Introduction To IT Security And Privacy - Servers And More
An Introduction To IT Security And Privacy - Servers And MoreAn Introduction To IT Security And Privacy - Servers And More
An Introduction To IT Security And Privacy - Servers And More
 
Android Hacking
Android HackingAndroid Hacking
Android Hacking
 
How to Hijack a Pizza Delivery Robot with Injection Flaws
How to Hijack a Pizza Delivery Robot with Injection FlawsHow to Hijack a Pizza Delivery Robot with Injection Flaws
How to Hijack a Pizza Delivery Robot with Injection Flaws
 

Destaque

UX Design for Wearables: BMW i8 INNOVATION LIVE. for Google Glass
UX Design for Wearables: BMW i8 INNOVATION LIVE. for Google GlassUX Design for Wearables: BMW i8 INNOVATION LIVE. for Google Glass
UX Design for Wearables: BMW i8 INNOVATION LIVE. for Google Glass
Vectorform
 
Hotspots And Screentips In Powerpoint
Hotspots And Screentips In PowerpointHotspots And Screentips In Powerpoint
Hotspots And Screentips In Powerpoint
rnsmflblogger
 

Destaque (19)

2014 Predictions: What's in the cards for mobile?
2014 Predictions: What's in the cards for mobile?2014 Predictions: What's in the cards for mobile?
2014 Predictions: What's in the cards for mobile?
 
Unboxing iOS 7
Unboxing iOS 7Unboxing iOS 7
Unboxing iOS 7
 
The Future of Service
The Future of ServiceThe Future of Service
The Future of Service
 
Certificate Pinning in Mobile Applications
Certificate Pinning in Mobile ApplicationsCertificate Pinning in Mobile Applications
Certificate Pinning in Mobile Applications
 
Pentesting iOS Apps
Pentesting iOS AppsPentesting iOS Apps
Pentesting iOS Apps
 
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
 
Penetrating Android Aapplications
Penetrating Android AapplicationsPenetrating Android Aapplications
Penetrating Android Aapplications
 
Android System Architecture And  Pen-testing of Android applications
Android System Architecture  And  Pen-testing of Android applications Android System Architecture  And  Pen-testing of Android applications
Android System Architecture And  Pen-testing of Android applications
 
Pentesting Android Applications
Pentesting Android ApplicationsPentesting Android Applications
Pentesting Android Applications
 
UX Design for Wearables: BMW i8 INNOVATION LIVE. for Google Glass
UX Design for Wearables: BMW i8 INNOVATION LIVE. for Google GlassUX Design for Wearables: BMW i8 INNOVATION LIVE. for Google Glass
UX Design for Wearables: BMW i8 INNOVATION LIVE. for Google Glass
 
Google Chromecast Group ix cse 100
Google Chromecast Group ix cse 100Google Chromecast Group ix cse 100
Google Chromecast Group ix cse 100
 
Automated Security Analysis of Android & iOS Applications with Mobile Securit...
Automated Security Analysis of Android & iOS Applications with Mobile Securit...Automated Security Analysis of Android & iOS Applications with Mobile Securit...
Automated Security Analysis of Android & iOS Applications with Mobile Securit...
 
Chromecast
ChromecastChromecast
Chromecast
 
Nullcon Goa 2016 - Automated Mobile Application Security Testing with Mobile ...
Nullcon Goa 2016 - Automated Mobile Application Security Testing with Mobile ...Nullcon Goa 2016 - Automated Mobile Application Security Testing with Mobile ...
Nullcon Goa 2016 - Automated Mobile Application Security Testing with Mobile ...
 
Hotspots And Screentips In Powerpoint
Hotspots And Screentips In PowerpointHotspots And Screentips In Powerpoint
Hotspots And Screentips In Powerpoint
 
Increasing Android app security for free - Roberto Gassirà, Roberto Piccirill...
Increasing Android app security for free - Roberto Gassirà, Roberto Piccirill...Increasing Android app security for free - Roberto Gassirà, Roberto Piccirill...
Increasing Android app security for free - Roberto Gassirà, Roberto Piccirill...
 
hotspot(wi-fi)
hotspot(wi-fi)hotspot(wi-fi)
hotspot(wi-fi)
 
SSL Pinning and Bypasses: Android and iOS
SSL Pinning and Bypasses: Android and iOSSSL Pinning and Bypasses: Android and iOS
SSL Pinning and Bypasses: Android and iOS
 
Wi-Fi Technology
Wi-Fi TechnologyWi-Fi Technology
Wi-Fi Technology
 

Semelhante a CocoaConf Austin 2014 | Demystifying Security Best Practices

Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
drewz lin
 

Semelhante a CocoaConf Austin 2014 | Demystifying Security Best Practices (20)

Hacking and Securing iOS Apps : Part 1
Hacking and Securing iOS Apps : Part 1Hacking and Securing iOS Apps : Part 1
Hacking and Securing iOS Apps : Part 1
 
CactusCon - Practical iOS App Attack and Defense
CactusCon - Practical iOS App Attack and DefenseCactusCon - Practical iOS App Attack and Defense
CactusCon - Practical iOS App Attack and Defense
 
YOW! Connected 2014 - Developing Secure iOS Applications
YOW! Connected 2014 - Developing Secure iOS ApplicationsYOW! Connected 2014 - Developing Secure iOS Applications
YOW! Connected 2014 - Developing Secure iOS Applications
 
Survey Presentation About Application Security
Survey Presentation About Application SecuritySurvey Presentation About Application Security
Survey Presentation About Application Security
 
Getting Started With Hacking Android & iOS Apps? Tools, Techniques and resources
Getting Started With Hacking Android & iOS Apps? Tools, Techniques and resourcesGetting Started With Hacking Android & iOS Apps? Tools, Techniques and resources
Getting Started With Hacking Android & iOS Apps? Tools, Techniques and resources
 
Getting started with hacking android & i os apps tools, techniques and re...
Getting started with hacking android & i os apps tools, techniques and re...Getting started with hacking android & i os apps tools, techniques and re...
Getting started with hacking android & i os apps tools, techniques and re...
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
 
Ionic Native: Native-powered apps, without the hassle
Ionic Native: Native-powered apps, without the hassleIonic Native: Native-powered apps, without the hassle
Ionic Native: Native-powered apps, without the hassle
 
liferay-safe-slides.pdf
liferay-safe-slides.pdfliferay-safe-slides.pdf
liferay-safe-slides.pdf
 
CodeMash 2.0.1.5 - Practical iOS App Attack & Defense
CodeMash 2.0.1.5 - Practical iOS App Attack & DefenseCodeMash 2.0.1.5 - Practical iOS App Attack & Defense
CodeMash 2.0.1.5 - Practical iOS App Attack & Defense
 
AusCERT - Developing Secure iOS Applications
AusCERT - Developing Secure iOS ApplicationsAusCERT - Developing Secure iOS Applications
AusCERT - Developing Secure iOS Applications
 
iOS-Application-Security-iAmPr3m
iOS-Application-Security-iAmPr3miOS-Application-Security-iAmPr3m
iOS-Application-Security-iAmPr3m
 
Virtue Security - The Art of Mobile Security 2013
Virtue Security - The Art of Mobile Security 2013Virtue Security - The Art of Mobile Security 2013
Virtue Security - The Art of Mobile Security 2013
 
Owasp Mobile Risk Series : M4 : Unintended Data Leakage
Owasp Mobile Risk Series : M4 : Unintended Data LeakageOwasp Mobile Risk Series : M4 : Unintended Data Leakage
Owasp Mobile Risk Series : M4 : Unintended Data Leakage
 
I Want More Ninja – iOS Security Testing
I Want More Ninja – iOS Security TestingI Want More Ninja – iOS Security Testing
I Want More Ninja – iOS Security Testing
 
The Joy of Proactive Security
The Joy of Proactive SecurityThe Joy of Proactive Security
The Joy of Proactive Security
 
OWASP Mobile Security: Top 10 Risks for 2017
OWASP Mobile Security: Top 10 Risks for 2017OWASP Mobile Security: Top 10 Risks for 2017
OWASP Mobile Security: Top 10 Risks for 2017
 
Open Source Defense for Edge 2017
Open Source Defense for Edge 2017Open Source Defense for Edge 2017
Open Source Defense for Edge 2017
 
MacIT 2014 - Essential Security & Risk Fundamentals
MacIT 2014 - Essential Security & Risk FundamentalsMacIT 2014 - Essential Security & Risk Fundamentals
MacIT 2014 - Essential Security & Risk Fundamentals
 
iOS Application Pentesting
iOS Application PentestingiOS Application Pentesting
iOS Application Pentesting
 

Mais de Mutual Mobile

Android Frameworks: Highlighting the Need for a Solid Development Framework 
Android Frameworks: Highlighting the Need for a Solid Development Framework Android Frameworks: Highlighting the Need for a Solid Development Framework 
Android Frameworks: Highlighting the Need for a Solid Development Framework 
Mutual Mobile
 
Lean Mobile Strategy
Lean Mobile StrategyLean Mobile Strategy
Lean Mobile Strategy
Mutual Mobile
 
What Brands Need to Know About iOS 7
What Brands Need to Know About iOS 7What Brands Need to Know About iOS 7
What Brands Need to Know About iOS 7
Mutual Mobile
 

Mais de Mutual Mobile (18)

SXSW 2014 | How Mobile Is Changing The Research Universe
SXSW 2014 | How Mobile Is Changing The Research UniverseSXSW 2014 | How Mobile Is Changing The Research Universe
SXSW 2014 | How Mobile Is Changing The Research Universe
 
SXSW 2014 | You Can Use Glass For Good Or...
SXSW 2014 | You Can Use Glass For Good Or...SXSW 2014 | You Can Use Glass For Good Or...
SXSW 2014 | You Can Use Glass For Good Or...
 
SXSW 2014 | Wearable Tech: Game Changer for People with Disabilities?
SXSW 2014 | Wearable Tech: Game Changer for People with Disabilities?SXSW 2014 | Wearable Tech: Game Changer for People with Disabilities?
SXSW 2014 | Wearable Tech: Game Changer for People with Disabilities?
 
Hacking Wearable Tech
Hacking Wearable TechHacking Wearable Tech
Hacking Wearable Tech
 
Android Frameworks: Highlighting the Need for a Solid Development Framework 
Android Frameworks: Highlighting the Need for a Solid Development Framework Android Frameworks: Highlighting the Need for a Solid Development Framework 
Android Frameworks: Highlighting the Need for a Solid Development Framework 
 
Classroom of the Future: Mobile in Education
Classroom of the Future: Mobile in EducationClassroom of the Future: Mobile in Education
Classroom of the Future: Mobile in Education
 
Lean Mobile Strategy
Lean Mobile StrategyLean Mobile Strategy
Lean Mobile Strategy
 
What Brands Need to Know About iOS 7
What Brands Need to Know About iOS 7What Brands Need to Know About iOS 7
What Brands Need to Know About iOS 7
 
7 Design Tips for the New Android Experience
7 Design Tips for the New Android Experience7 Design Tips for the New Android Experience
7 Design Tips for the New Android Experience
 
Let's Talk Android
Let's Talk AndroidLet's Talk Android
Let's Talk Android
 
3 Ways Mobile Sales Enablement Solves Sales Problems
3 Ways Mobile Sales Enablement Solves Sales Problems3 Ways Mobile Sales Enablement Solves Sales Problems
3 Ways Mobile Sales Enablement Solves Sales Problems
 
Designing the New Android Experience - The Golden Age of Android
Designing the New Android Experience - The Golden Age of AndroidDesigning the New Android Experience - The Golden Age of Android
Designing the New Android Experience - The Golden Age of Android
 
Hackathon
HackathonHackathon
Hackathon
 
SXSW Dribbble Meetup Photos
SXSW Dribbble Meetup PhotosSXSW Dribbble Meetup Photos
SXSW Dribbble Meetup Photos
 
iPad: Past, Present, and Future
iPad: Past, Present, and FutureiPad: Past, Present, and Future
iPad: Past, Present, and Future
 
Selecting a Front-End Mobile Solution
Selecting a Front-End Mobile SolutionSelecting a Front-End Mobile Solution
Selecting a Front-End Mobile Solution
 
Honeycomb Design For Developers
Honeycomb Design For DevelopersHoneycomb Design For Developers
Honeycomb Design For Developers
 
Android Design Guidelines 1.1
Android Design Guidelines 1.1Android Design Guidelines 1.1
Android Design Guidelines 1.1
 

Último

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

CocoaConf Austin 2014 | Demystifying Security Best Practices

  • 1. Demystifying Security Best Practices Conrad Stoll! Architect @conradstoll - conradstoll.com
  • 2. So you want to make software secure?
  • 5. Mobile devices are not secure.
  • 7. We are expected to ! secure our software.
  • 9.
  • 10. Products are judged by the ! quality of the user experience, ! and the absence of security issues.
  • 11. Security is hard, and a lot of apps ! get it wrong.
  • 13. Apple actually does take! security very seriously.
  • 15. Security is about being responsible ! with a user’s information.
  • 16. The type of information your app handles defines how secure ! it needs to be.
  • 17. Not everyone is building a banking app.
  • 18. Security is all about making tradeoffs.
  • 19. Every app we build has an appropriate balance between security! and usability.
  • 21. 14! things you can do to build! more secure software
  • 23. But logs are helpful!! What could possibly go wrong?
  • 24.
  • 25. 1
  • 26. Logging provides helpful debug information but can accidentally leak sensitive user data. Dangers of Over Logging • User passwords! • Sensitive web requests! • Locations! • Never know what could be storing those logs (other apps, add ons, etc.). Any good lumberjack knows not to over-log.
  • 27. Use a logging macro and limit the scope of production logs. How to prevent production logs • Log only what is required.! • Super sensitive data should not be logged.! • Set different logging levels for release build. Think before you log
  • 28. #pragma mark - LOGGING ! //---- To disable all Logs in release mode ----// #ifdef DEBUG #define UBLog( s, ... ) NSLog(s, ## __VA_ARGS__) #else #define UBLog( s, ... ) #endif ! Logging Macro Using a logging macro to programmatically disable logs
  • 29.
  • 30. We wrote a script to analyze our code and look for ‘NSLog’ in all of our files that would fail the build if it found any. Great case for writing tests • Build scripts keep everyone honest.! • Well suited for automation.! • Works great with a Continuous Integration system. Run tests that verify you have no logs on your build system ruby file_sieve.rb -d Classes/ -e UnionBankGlobals NSLog
  • 31. Number 2:! Fast App Switching
  • 32.
  • 33. Hiding sensitive information when the app goes to the background can be a good idea to protect user privacy. Hiding Sensitive Data • Blur out sensitive data.! • Remove sensitive data.! • Obscure sensitive data. Hide your kids, hide your text fields
  • 35. #pragma mark - Security ! - (void)applicationDidEnterBackground:(UIApplication *)application { RootViewController *rootVC = (RootViewController *)self.window.rootViewController; UIViewController *viewController = (UIViewController *)[rootVC.presentedViewControllers lastObject]; ! /** If the last presented view controller is a SplashViewController we must not present the splash screen again. */ if (![viewController isKindOfClass:[SplashViewController class]]) { /** We're presenting a splash screen when the app backgrounds as a privacy and security feature. This view needs to block the UI so that a screenshot of sensitive data does not accidentally get saved to the background. */ [self presentSplashViewController]; } } ! Hiding Sensitive Data When the app enters the background
  • 37. Easy way to prevent MITM ^(make MITM much more difficult)
  • 38. Compare a server’s certificate! with a known certificate
  • 39. Compare the exact certificate used in the request with the known certificate included in your app bundle. Certificate Pinning • Communication will fail after the certificate expires. More secure, but fragile
  • 40. Compare a known public key to the network request’s certificate public key. Public Key Pinning • Public key’s don’t change when certificates expire.! • One public key might be used for several web services at a large company. Still secure, less fragile
  • 41. Built in support for SSL Pinning in 1.0 and 2.0. AFNetworking • Super easy to use implementation of SSL Pinning.! • AFSecurityPolicy on version 2.0.! • Allows you to select between certificate or public key pinning modes. Most popular Objective-C library on GitHub!
  • 43. An ARC PIE a day! keeps memory attacks away
  • 44. In all honesty, protecting against memory attacks probably is not your job as an application developer. Being practical with memory attacks • No, scribbling over NSString isn’t practical. ! • Don’t make it easy on an attacker. So, how likely is this really?
  • 45. 1
  • 46. ARC helps make sure you’re correctly managing memory. Use ARC • Makes sure objects get released and dealloc’d when they should be. Don’t let objects you aren’t using stick around
  • 47. Position Independent Execution prevents memory address attacks. This option is enabled by default in Xcode. Keep PIE enabled • Prevents an attack against specific memory addresses.! • Honestly, there’s no reason to disable this… Who doesn’t like PIE?
  • 49. The keychain is more secure if the user sets a passcode on the device! Device needs a PIN code • There’s no way to tell if the user set a passcode.! • Encrypted with the device key, so they don’t transfer to new devices. Or a really long passcode
  • 50. Best not to store a user’s password. Try and store a hash or session token instead. Careful what you store in the keychain • Access controls for when data becomes available from the keychain. Would you put your social security number there?
  • 52. NSUserDefaults is a great place to store basic app preferences or bits of state, like whether or not this is the app’s first launch. But it should NOT be used to store anything sensitive. NSUserDefaults != Keychain • Unencrypted key value storage.! • Should never be used to store anything sensitive. If you wouldn’t store it in the keychain, definitely don’t store it in NSUserDefaults!
  • 53. 1
  • 55. Autocorrect results are stored unencrypted on the device. Sensitive Autocorrect • Autocorrect is disabled by default on secure text fields.! • Disable it on yours if you’re not using the UITextInputTraits secureTextEntry property.! • Consider disabling it anyway if you anticipate sensitive data being entered into a text field or text view. Be careful what you allow to autocorrect
  • 56. The pasteboard can be used to share data between apps. A malicious app could look for sensitive data on the pasteboard. UIPasteBoard • Avoid storing sensitive data in the pasteboard.! • Disable copying on sensitive text input fields. Do you trust every app with your bank account number?
  • 57. Expire sensitive content and mark it as org.nspasteboard.ConcealedType. UIPasteBoard • http://nspasteboard.org! • 1Password marks content as “concealed”.! • 1Password removes content after 90 seconds by default. Protect potentially sensitive pasteboard data
  • 59.
  • 60.
  • 61. Being polite! when asking for permission
  • 62. Remember that context for your request is very important. How and when you ask is important • Don’t ask on app launch or login.! • Ask in response to a user action.! • Only ask for what you clearly need.! • Explain why you need permission. Many users distrust software
  • 63. Be considerate of a user’s permission, and don’t overstep your bounds. Treat user permission with respect • Don’t copy the user’s address book.! • Don’t log location data to the server.! • Don’t transmit user data in the clear.! • Don’t store passwords on your server.! • Don’t record all of someone’s conversations with their microphone and pick up words like “soda” and attempt to turn around and sell them “Coke”. Be a good house guest
  • 66. Downloading a file using NSURLSessionDownloadTask gives you the ability to download in the background, but removes the ability to encrypt files on the fly. Implementation Trade Offs • Is it ok to have a file stored in the clear for 10 seconds?! • What if you know the user is in physical possession of the device?! • Would this concern prevent you from supporting “open in” or “open with” features? Theoretical versus Practical
  • 67. Storing data locally can help improve the user experience. Here’s some things you can feel pretty safe about storing. Good things to store • Most user-generated photography! • Most user-generated content (todo list)! • Publicly available content! • Podcasts, music, videos! • Application metadata database! • Application preferences! ! Pretty much zero risk of storing this kind of stuff
  • 68. Some apps deal with sensitive data, and storing this on the device can be dangerous. Bad things to store • Personal medical information! • Personal financial information! • Copyrighted content! • Secret corporate information! ! Storing this stuff should keep you up at night
  • 69. Sometimes you want to use Core Data even though you can’t store anything. In-Memory Core Data • In-Memory store is pretty fast! • Great for facilitating object graph management and fetching/sorting! • Easy way to use Core Data if persistence isn’t an option or a requirement! ! Core Data, but without the storage part
  • 71. Use the latest file encryption provided by common crypto. File Encryption • AES 256! • User generated encryption key AES all the things!
  • 73. Data Protection APIs provide an easy to use baseline protection for files on disk. Data Protection • Available in iOS 4.0.! • Enabled by default now in iOS 7.0.! • Protected by the user passcode and device key.! • Makes it harder to access files, but can be defeated with physical access to the device.! • Far more secure if the user sets a passcode. Apple wants to make this easy for you
  • 74. Sometimes you really need an encrypted database. When you do, there’s NSIncrementalStore + Encryption. Encrypted Core Data • Implement your own encrypted Core Data persistent store.! • Several existing implementations are available.! • Core Data is already a complex system. Encrypted Core Data is obviously even more complex.! • Consider using a file based encryption system for small bits of data. Core Data + Incremental Store + Encryption. What could possibly go wrong?
  • 75. Encryption Resources • http://www.stoeger-it.de/en/secureincrementalstore/! • https://github.com/project-imas/encrypted-core-data! • http://adcdownload.apple.com//videos/wwdc_2012__sd/ session_714__protecting_the_users_data.mov! • http://blog.agilebits.com/2013/03/09/guess-why-were-moving-to-256-bit-aes-keys/ Helpful sites talking about encryption
  • 77. Prevent local network spoofing attacks by only allowing UIWebView requests to specific domains. Whitelist domains in web views • Compare requests made by your web view to a specific list of domains.! • Enforce HTTPS on all requests from the web view. Support safe browsing
  • 78. #pragma mark - Security ! /* Only allow the web view to load requests to whitelisted domains in order to prevent phishing attacks. */ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([self shouldAllowWebViewNavigationToURLRequest:request]) { return YES; } ! [self presentUnsafeBrowsingWarningForRequest:request]; ! return NO; } Whitelisting Domains Teaching someone how not to phish
  • 79. Web views don’t get challenge callbacks, so it is hard to implement SSL Pinning with them (though not impossible). No SSL Pinning Support • Try not to use web views for anything super sensitive.! • If you’re relying on a web view for most of your app, its worth going to the trouble of bootstrapping SSL Pinning for it. UIWebView doesn’t benefit from SSL Pinning elsewhere in your app
  • 80. WebView Resources • https://www.isecpartners.com/blog/2013/february/ssl-pinning-on-ios.aspx! • http://stackoverflow.com/questions/11573164/uiwebview-to-view-self-signed-websites-no-private- api-not-nsurlconnection-i Helpful sites talking about web views
  • 82. Hope is NOT a strategy
  • 83. You’re responsible for what third party libraries are doing in your app. If you’re following the rules above, make sure they are too. Third Party Library Security! • Check and see if they are writing anything to disk.! • Look at their networking code to see what they’re sending over the air.! • Check on their implementation of debug logging and whether or not it can be disabled. Hope is not a strategy. Make sure libraries are secure.
  • 85. There’s lots of powerful security features in MDM. If you’re building an enterprise app, make sure your client knows about this! If you’re building an enterprise app… • Force device passcode! • Per-app VPN! • Configuration enforcement! • Encrypted backups! • Remote wipe Use MDM Features
  • 86. Number 14:! Have a Backup Plan
  • 87. You can always use a remote server to force an update. You can lock out the app in the event of a security breach, and force users to install the update that fixes it. If all else fails… • Gives you a pretty heavy hammer.! • Easy to implement.! • Important for high-risk apps like banking. The last one standing blows the bridge.
  • 88. Thanks!! Secure all the things! Conrad Stoll! @conradstoll - conradstoll.com