dr. bruce sams, optimabit gmbh · (html, excel, pdf, keynote etc.) – also runs javascript =>...

29
Securing iOS Applications Dr. Bruce Sams, OPTIMAbit GmbH

Upload: others

Post on 06-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Securing iOS Applications

Dr. Bruce Sams, OPTIMAbit GmbH

Page 2: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

About Me

• President of OPTIMAbit GmbH• Responsible for > 200 Pentests per Year• Ca 50 iOS Pentests and code reviews in the

last two years.

• President of OPTIMAbit GmbH• Responsible for > 200 Pentests per Year• Ca 50 iOS Pentests and code reviews in the

last two years.

Page 3: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Overview of the Talk

Privacy / NSA

BugsIn iOS

Ever

ybod

y

Not

hing

What Affected Actions

Privacy / NSA

Hacking

SecureDevelopment

Ever

ybod

yYo

u All

Think Globally, Act LocallyPa

tch

Page 4: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Security Goals of iOS

• Sophisticated security built into the hardware.• Strong encryption protects data at rest• Mandatory code signing• No possibility to revert to an older system• Native language exploit mitigation (ASLR)• App Sandboxing at Runtime• Make jailbreaks impossible• ? Secure Coding (not even on the list!)

• Sophisticated security built into the hardware.• Strong encryption protects data at rest• Mandatory code signing• No possibility to revert to an older system• Native language exploit mitigation (ASLR)• App Sandboxing at Runtime• Make jailbreaks impossible• ? Secure Coding (not even on the list!)

Page 5: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

iOS Vulnerability History (CERT)

80

100

120

Total

DoS

Code Execution

Overflow

Memory Corruption

Win7

0

20

40

60

Year 2007 2008 2009 2010 2011 2012 2013 2014

Memory Corruption

Sql Injection

XSS

Directory Traversal

Http Response Splitting

Bypass something

Gain Information

Gain Privileges

Page 6: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Privacy Improvement in iOS8

• THREAT: An attacker could access services such asthe Apple File Connection service (afc), the FileRelay service and the Packet Sniffer over WiFi.

• Dump masses of third party application datausing WiFi.

• Examples -- complete photo album, SMSmessages, address book, typing cache,geolocation cache, application screenshots.

• FIX: Connections to many services are nowrestricted as “usb only”.

• THREAT: An attacker could access services such asthe Apple File Connection service (afc), the FileRelay service and the Packet Sniffer over WiFi.

• Dump masses of third party application datausing WiFi.

• Examples -- complete photo album, SMSmessages, address book, typing cache,geolocation cache, application screenshots.

• FIX: Connections to many services are nowrestricted as “usb only”.

Page 7: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

iOS Jailbreaks

• Jailbreaking iOS isnot easy, but it getsdone regularly(mostly under 25days)

10

12

14

Days to first Jailbreak

• Jailbreaking iOS isnot easy, but it getsdone regularly(mostly under 25days)

0

2

4

6

8

10

25 50 75 100 125 150 175 200

Page 8: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

iOS Security for Developers

Page 9: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Hybrid Apps

• Many enterprise apps aremoving to the hybridmodel.

• The app is only apresentation layer. (Almost)no data on the client.

• Security is easier than for„Rich Clients“.

App(Objective-C) SOAP, REST

Service(Java)

• Many enterprise apps aremoving to the hybridmodel.

• The app is only apresentation layer. (Almost)no data on the client.

• Security is easier than for„Rich Clients“.

DB

Page 10: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Input Validation

• iOS apps are not really any different than otherapplications, when it comes to validation.

• Consequences of poor input validation– Buffer overflows (like C)– Format string vulnerabilities (like C)– URL commands– Code insertion– Cross Site Scripting– SQL Injection– Etc

• iOS apps are not really any different than otherapplications, when it comes to validation.

• Consequences of poor input validation– Buffer overflows (like C)– Format string vulnerabilities (like C)– URL commands– Code insertion– Cross Site Scripting– SQL Injection– Etc

Page 11: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Dangerous Functions

• There is a very long list of „Format String“functions in the core libraries and in Cocoa.

• Examples:– CFStringCreateWithFormat

– CFStringCreateWithFormatAndArguments

– NSAlert:alertWithMessageText

– NSMutableString:initWithFormat

• There is a very long list of „Format String“functions in the core libraries and in Cocoa.

• Examples:– CFStringCreateWithFormat

– CFStringCreateWithFormatAndArguments

– NSAlert:alertWithMessageText

– NSMutableString:initWithFormat

Page 12: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

SSL/TLS

• iOS has multiple APIs for managing securenetwork connections– NSURL (easy, high level, wraps CF Network)– CF Network (middle, c-based library)– Secure Transport (complex, low level)

• Only Secure Transport lets developers choosecipher suites!– SSLSetEnabledCiphers

• iOS has multiple APIs for managing securenetwork connections– NSURL (easy, high level, wraps CF Network)– CF Network (middle, c-based library)– Secure Transport (complex, low level)

• Only Secure Transport lets developers choosecipher suites!– SSLSetEnabledCiphers

Page 13: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

XML Parsing

• iOS has its own XML Parser, NSXMLParser– Default: parses DTDs, but not nested entities.– Default: does not parse external entity references.– Option: „setShouldResolveExternalEntities“

• Alternate libxml2 parser– Higher perfromance– Parses external entities

• iOS has its own XML Parser, NSXMLParser– Default: parses DTDs, but not nested entities.– Default: does not parse external entity references.– Option: „setShouldResolveExternalEntities“

• Alternate libxml2 parser– Higher perfromance– Parses external entities

Page 14: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

IPC via Handlers

• IPC Workaround: register custom protocolhandlers via „application:openURL“– Register in the plist file, e.g. URL Identifier=xxx– Overwrite method handleOpenURL() to

accept form of „getdata“– Pass data via xxx://getdata

• Attackers misuse the url, e.g. iframe with srcsrc=„xxx://getdata?http://evilurl“

• IPC Workaround: register custom protocolhandlers via „application:openURL“– Register in the plist file, e.g. URL Identifier=xxx– Overwrite method handleOpenURL() to

accept form of „getdata“– Pass data via xxx://getdata

• Attackers misuse the url, e.g. iframe with srcsrc=„xxx://getdata?http://evilurl“

Page 15: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Cross Site Scripting

• UIWebView is a complex component thatparses and displays many content types(HTML, Excel, PDF, Keynote etc.)– Also runs JavaScript => XSS is possible

• Access to core functions via JavaScript – Obj-CBridge– #ifdef JSC_OBJC_API_ENABLED

– New feature, need research

• UIWebView is a complex component thatparses and displays many content types(HTML, Excel, PDF, Keynote etc.)– Also runs JavaScript => XSS is possible

• Access to core functions via JavaScript – Obj-CBridge– #ifdef JSC_OBJC_API_ENABLED

– New feature, need research

Page 16: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Why Jailbreak Detection?

• The theory– The internal protection methods of a mobile device

should not be removed via jailbreak, otherwise thedevice is unsafe.

• The reality– A determined, sophisticated attacker can circumvent

any jailbreak detection scheme.• Conclusion

– Jailbreak detection is recommended, but it cannotprotect against all attackers.

• The theory– The internal protection methods of a mobile device

should not be removed via jailbreak, otherwise thedevice is unsafe.

• The reality– A determined, sophisticated attacker can circumvent

any jailbreak detection scheme.• Conclusion

– Jailbreak detection is recommended, but it cannotprotect against all attackers.

Page 17: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Jailbreak Detection

• App developers may want to ensure that theirapps will not run on a jailbroken device.

• Four practical methods exist:– Check file paths– Check command shell execution– Check library locations– Check access rights

• App developers may want to ensure that theirapps will not run on a jailbroken device.

• Four practical methods exist:– Check file paths– Check command shell execution– Check library locations– Check access rights

Page 18: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Example Tests for Jailbreak

• Presence of file paths of some commonly used hacks,e.g.

• /Applications/Cydia.app• /Library/MobileSubstrate/DynamicLibraries/Veency.plist• /usr/bin/sshd

• Test writing a file to a private directory[stringToBeWritten writeToFile:@"/private/jailbreak.txt"

atomically:YESencoding:NSUTF8StringEncoding error:&error];

if(error==nil){ //Device is jailbrokenreturn YES;}

• Presence of file paths of some commonly used hacks,e.g.

• /Applications/Cydia.app• /Library/MobileSubstrate/DynamicLibraries/Veency.plist• /usr/bin/sshd

• Test writing a file to a private directory[stringToBeWritten writeToFile:@"/private/jailbreak.txt"

atomically:YESencoding:NSUTF8StringEncoding error:&error];

if(error==nil){ //Device is jailbrokenreturn YES;}

Page 19: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Encryption and Data Protection

• iOS provides many “Protection Classes” forencryption.– Fine grain control of when data is encrypted– Default Protection Class

ProtectionCompleteUntilFirstUserAuthentication

(protect against attacks that require a reboot)– plists are not encrypted!– Developers get into trouble when they try to be

“clever” with the encryption

• iOS provides many “Protection Classes” forencryption.– Fine grain control of when data is encrypted– Default Protection Class

ProtectionCompleteUntilFirstUserAuthentication

(protect against attacks that require a reboot)– plists are not encrypted!– Developers get into trouble when they try to be

“clever” with the encryption

Page 20: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Attacking Data in Transit

• SSL and certificates:MyCert is signed byIntermediateCert which issigned by RootCert. TheiOS device trusts RootCert.

• If an attacker can performa MITM attack, he canmodify the data in transit.

• One interesting scenario: amobile user intercepts HISOWN data, in order tomodify it.

• SSL and certificates:MyCert is signed byIntermediateCert which issigned by RootCert. TheiOS device trusts RootCert.

• If an attacker can performa MITM attack, he canmodify the data in transit.

• One interesting scenario: amobile user intercepts HISOWN data, in order tomodify it.

Page 21: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Solution: Certificate Pinning

• The iOS app does not trust the RootCert, butinstead ONLY the Cert that is installed on theserver.

• The app is „pinned“ to the server, since it won‘tcommunicate with any other servers.

• For mobile apps that communicate only with alimited number of servers, this adds a substantiallevel of protection.

• Disadvantage: Certificate Pinning cannot beconfigured; it must be implemented in code.

• The iOS app does not trust the RootCert, butinstead ONLY the Cert that is installed on theserver.

• The app is „pinned“ to the server, since it won‘tcommunicate with any other servers.

• For mobile apps that communicate only with alimited number of servers, this adds a substantiallevel of protection.

• Disadvantage: Certificate Pinning cannot beconfigured; it must be implemented in code.

Page 22: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Cert Pinning HowTo

• iOS pinning is performed through aNSURLConnectionDelegate that implementsconnection:didReceiveAuthenticationChallenge:

• Example code available on the OWASP website:https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

• MobileApp Pinning may be reverseengineered/defeated. Exploits already exist, e.g. iOSSSL Kill Switch (Github) works on jailbroken devices.

• iOS pinning is performed through aNSURLConnectionDelegate that implementsconnection:didReceiveAuthenticationChallenge:

• Example code available on the OWASP website:https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

• MobileApp Pinning may be reverseengineered/defeated. Exploits already exist, e.g. iOSSSL Kill Switch (Github) works on jailbroken devices.

Page 23: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

HTTP Request Hijacking

• In HRH, the attackercan persistentlyalter the server URLfrom which the apploads its data.

• Example: instead ofloading the datafrom real.com theattack makes theapp persistentlyload the data fromattacker.com

• In HRH, the attackercan persistentlyalter the server URLfrom which the apploads its data.

• Example: instead ofloading the datafrom real.com theattack makes theapp persistentlyload the data fromattacker.com

Page 24: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

It‘s not a bug, it‘s a feature!

• The problem is based on the HTTP 301 Response specification.• 10.3.2 301 Moved Permanently The requested resource has been

assigned a new permanent URI and any future references to thisresource SHOULD use one of the returned URIs. Clients with linkediting capabilities ought to automatically re-link references to theRequest-URI to one or more of the new references returned by theserver, where possible. This response is cacheable unless indicatedotherwise.

The attack can only work if a MITM exists. Since ca 75% of all usersconnect to insecure WLANs in airports and cafes, this attack is easyto setup.

In the corporate environment, could use a spoofed WLAN access point.

• The problem is based on the HTTP 301 Response specification.• 10.3.2 301 Moved Permanently The requested resource has been

assigned a new permanent URI and any future references to thisresource SHOULD use one of the returned URIs. Clients with linkediting capabilities ought to automatically re-link references to theRequest-URI to one or more of the new references returned by theserver, where possible. This response is cacheable unless indicatedotherwise.

The attack can only work if a MITM exists. Since ca 75% of all usersconnect to insecure WLANs in airports and cafes, this attack is easyto setup.

In the corporate environment, could use a spoofed WLAN access point.

Page 25: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Two HRH Solutions

1)Connect only using SSL (simple and effective, butperhaps not practical everywhere).

2)Write a derived Class to eliminate caching of the301 Response. See OWASP for a full example.

@interface HRHResistantURLCache : URLCache@end@implementation HRHResistantURLCache-(void) storeCachedResponse:(NSCachedURLResponse *)cachedResponse

forRequest:(NSURLRequest *)requestif (301 == [(NSHTTPURLResponse *)cachedResponse.response statuscode]) {return;

}[super storeCachedResponse:cachedResponse forRequest:request];@end

1)Connect only using SSL (simple and effective, butperhaps not practical everywhere).

2)Write a derived Class to eliminate caching of the301 Response. See OWASP for a full example.

@interface HRHResistantURLCache : URLCache@end@implementation HRHResistantURLCache-(void) storeCachedResponse:(NSCachedURLResponse *)cachedResponse

forRequest:(NSURLRequest *)requestif (301 == [(NSHTTPURLResponse *)cachedResponse.response statuscode]) {return;

}[super storeCachedResponse:cachedResponse forRequest:request];@end

Page 26: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Secure Local Storage

• Confidential data such as passwords, session ID’setc should never be stored locally on the device.If there is no other option, it should be stored onthe keychain, not in NSUserDefaults.

• NSUserDefaults stores information in anunencrypted format in a plist file under Library ->Preferences -> $AppBundleId.plist

• Use helpful libraries, e.g.PDKeychainBindingsController (Github).

• Core Data files are also stored as unencrypteddatabase files in your application bundle.

• Confidential data such as passwords, session ID’setc should never be stored locally on the device.If there is no other option, it should be stored onthe keychain, not in NSUserDefaults.

• NSUserDefaults stores information in anunencrypted format in a plist file under Library ->Preferences -> $AppBundleId.plist

• Use helpful libraries, e.g.PDKeychainBindingsController (Github).

• Core Data files are also stored as unencrypteddatabase files in your application bundle.

Page 27: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Handling Confidential Fields

• iOS usually caches all entries intext fields– confidential fields should be

marked as “secure”.– disable AutoCorrection for those

text fields.

• Clear the Pasteboard once theapplication enters background.– [UIPasteboard

generalPasteboard].items = nil;

• iOS usually caches all entries intext fields– confidential fields should be

marked as “secure”.– disable AutoCorrection for those

text fields.

• Clear the Pasteboard once theapplication enters background.– [UIPasteboard

generalPasteboard].items = nil;

Page 28: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Have the Goals Been Reached?

• Security on mobile devices is a very hard problem tosolve:– Generally excellent work from Apple– The APIs/Secure Coding can be improved

• Developers must do their part:– Proper use of encryption & data storage– Avoid dangerous constructions– “Special” options, e.g Certificate Pinning

• DO A CODE AUDIT!!

• Security on mobile devices is a very hard problem tosolve:– Generally excellent work from Apple– The APIs/Secure Coding can be improved

• Developers must do their part:– Proper use of encryption & data storage– Avoid dangerous constructions– “Special” options, e.g Certificate Pinning

• DO A CODE AUDIT!!

Page 29: Dr. Bruce Sams, OPTIMAbit GmbH · (HTML, Excel, PDF, Keynote etc.) – Also runs JavaScript => XSS is possible • Access to core functions via JavaScript – Obj-C Bridge – #ifdef

Exeunts

Thanks for listening!OPTIMAbit GmbH

Marktplatz 2

85375 Neufahrn

Tel.: +49 8165/65095

Fax +49 8165/65096

[email protected]

www.optimabit.com

OPTIMAbit GmbH

Marktplatz 2

85375 Neufahrn

Tel.: +49 8165/65095

Fax +49 8165/65096

[email protected]

www.optimabit.com